Version 2.0.0-dev.34.0

Merge commit 'd059e979741ec1d3671a860509d65a51df4fab59' into dev
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 29e2bfd..4d1f835 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -82,6 +82,7 @@
   * `BigInt` class added to support integers greater than 64-bits.
   * Deprecated the `proxy` annotation.
   * Added `Provisional` class and `provisional` field.
+  * Added `pragma` annotation.
   * `RegExp` added static `escape` function.
   * The `Uri` class now correctly handles paths while running on Node.js on
     Windows.
@@ -123,6 +124,10 @@
     `SECONDS_PER_DAY` to `secondsPerDay`,
     `MINUTES_PER_DAY` to `minutesPerDay`, and
     `ZERO` to `zero`.
+  * Added `typeArguments` to `Invocation` class.
+  * Added constructors to invocation class that allows creation of
+    `Invocation` objects directly, without going through `noSuchMethod`.
+  * Added `unaryMinus` and `empty` constant symbols on the `Symbol` class.
 
 * `dart:developer`
 
diff --git a/DEPS b/DEPS
index c546b2a..f05a29f 100644
--- a/DEPS
+++ b/DEPS
@@ -35,8 +35,8 @@
   "chromium_git": "https://chromium.googlesource.com",
   "fuchsia_git": "https://fuchsia.googlesource.com",
 
-  "co19_rev": "@dec2b67aaab3bb7339b9764049707e71e601da3d",
-  "co19_2_rev": "@d8cdc47f759b0e89a517403ffa13eccd874bbbc0",
+  "co19_rev": "@d4b3fc9af414c990b4d22f313e533b275d2f27c5",
+  "co19_2_rev": "@74562e984a81673b581e148b5802684d6df840d2",
 
   # As Flutter does, we pull buildtools, including the clang toolchain, from
   # Fuchsia. This revision should be kept up to date with the revision pulled
@@ -57,13 +57,13 @@
   "barback-0.14.1_rev": "@38525",
   "barback_tag" : "@0.15.2+14",
   "bazel_worker_tag": "@v0.1.9",
-  "boolean_selector_tag" : "@1.0.2",
+  "boolean_selector_tag" : "@1.0.3",
   "boringssl_gen_rev": "@39762c7f9ee4d828ff212838fae79528b94d5443",
   "boringssl_rev" : "@a62dbf88d8a3c04446db833a1eb80a620cb1514d",
   "charcode_tag": "@v1.1.1",
   "chrome_rev" : "@19997",
   "cli_util_tag" : "@0.1.2+1",
-  "collection_tag": "@5943e1681204250f33a833eb5550f270357ad6c8",
+  "collection_tag": "@6ff408a512df30559c1a18b37cfac9fc51a4ceef",
   "convert_tag": "@2.0.1",
   "crypto_tag" : "@2.0.2+1",
   "csslib_tag" : "@0.14.1",
diff --git a/pkg/analysis_server/lib/src/flutter/flutter_notifications.dart b/pkg/analysis_server/lib/src/flutter/flutter_notifications.dart
index f526036..a468fd4 100644
--- a/pkg/analysis_server/lib/src/flutter/flutter_notifications.dart
+++ b/pkg/analysis_server/lib/src/flutter/flutter_notifications.dart
@@ -15,7 +15,8 @@
         new FlutterOutlineComputer(file, content, lineInfo, dartUnit);
     protocol.FlutterOutline outline = computer.compute();
     // send notification
-    var params = new protocol.FlutterOutlineParams(file, outline);
+    var params = new protocol.FlutterOutlineParams(file, outline,
+        instrumentedCode: computer.instrumentedCode);
     server.sendNotification(params.toNotification());
   });
 }
diff --git a/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart b/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
index 89561f7..5e66826 100644
--- a/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
+++ b/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server/src/computer/computer_outline.dart';
 import 'package:analysis_server/src/protocol_server.dart' as protocol;
+import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/utilities/flutter.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
@@ -14,6 +15,19 @@
 
 /// Computer for Flutter specific outlines.
 class FlutterOutlineComputer {
+  static const CONSTRUCTOR_NAME = 'forDesignTime';
+
+  /// Code to append to the instrumented library code.
+  static const RENDER_APPEND = r'''
+
+final flutterDesignerWidgets = <int, Widget>{};
+
+T _registerWidgetInstance<T extends Widget>(int id, T widget) {
+  flutterDesignerWidgets[id] = widget;
+  return widget;
+}
+''';
+
   final String file;
   final String content;
   final LineInfo lineInfo;
@@ -22,6 +36,15 @@
 
   final List<protocol.FlutterOutline> _depthFirstOrder = [];
 
+  int nextWidgetId = 0;
+
+  /// This map is filled with information about widget classes that can be
+  /// rendered. Its keys are class name offsets.
+  final Map<int, _WidgetClass> widgets = {};
+
+  final List<protocol.SourceEdit> instrumentationEdits = [];
+  String instrumentedCode;
+
   FlutterOutlineComputer(this.file, this.content, this.lineInfo, this.unit)
       : typeProvider = unit.element.context.typeProvider;
 
@@ -30,8 +53,27 @@
             file, lineInfo, unit,
             withBasicFlutter: false)
         .compute();
+
+    // Find widget classes.
+    // IDEA plugin only supports rendering widgets in libraries.
+    if (unit.element.source == unit.element.librarySource) {
+      _findWidgets();
+    }
+
+    // Convert Dart outlines into Flutter outlines.
     var flutterDartOutline = _convert(dartOutline);
+
+    // Create outlines for widgets.
     unit.accept(new _FlutterOutlineBuilder(this));
+
+    // Compute instrumented code.
+    if (widgets.isNotEmpty) {
+      instrumentationEdits.sort((a, b) => b.offset - a.offset);
+      instrumentedCode =
+          SourceEdit.applySequence(content, instrumentationEdits);
+      instrumentedCode += RENDER_APPEND;
+    }
+
     return flutterDartOutline;
   }
 
@@ -80,6 +122,14 @@
     }
   }
 
+  int _addInstrumentationEdits(Expression expression) {
+    int id = nextWidgetId++;
+    instrumentationEdits.add(new protocol.SourceEdit(
+        expression.offset, 0, '_registerWidgetInstance($id, '));
+    instrumentationEdits.add(new protocol.SourceEdit(expression.end, 0, ')'));
+    return id;
+  }
+
   protocol.FlutterOutline _convert(protocol.Outline dartOutline) {
     protocol.FlutterOutline flutterOutline = new protocol.FlutterOutline(
         protocol.FlutterOutlineKind.DART_ELEMENT,
@@ -89,6 +139,17 @@
     if (dartOutline.children != null) {
       flutterOutline.children = dartOutline.children.map(_convert).toList();
     }
+
+    // Fill rendering information for widget classes.
+    if (dartOutline.element.kind == protocol.ElementKind.CLASS) {
+      var widget = widgets[dartOutline.element.location.offset];
+      if (widget != null) {
+        flutterOutline.renderConstructor = CONSTRUCTOR_NAME;
+        flutterOutline.stateOffset = widget.state?.offset;
+        flutterOutline.stateLength = widget.state?.length;
+      }
+    }
+
     _depthFirstOrder.add(flutterOutline);
     return flutterOutline;
   }
@@ -105,6 +166,8 @@
     String className = type.element.displayName;
 
     if (node is InstanceCreationExpression) {
+      int id = _addInstrumentationEdits(node);
+
       var attributes = <protocol.FlutterOutlineAttribute>[];
       var children = <protocol.FlutterOutline>[];
       for (var argument in node.argumentList.arguments) {
@@ -144,7 +207,10 @@
 
       return new protocol.FlutterOutline(
           protocol.FlutterOutlineKind.NEW_INSTANCE, node.offset, node.length,
-          className: className, attributes: attributes, children: children);
+          className: className,
+          attributes: attributes,
+          children: children,
+          id: id);
     }
 
     // A generic Widget typed expression.
@@ -162,13 +228,89 @@
         label = _getShortLabel(node);
       }
 
+      int id = _addInstrumentationEdits(node);
       return new protocol.FlutterOutline(kind, node.offset, node.length,
-          className: className, variableName: variableName, label: label);
+          className: className,
+          variableName: variableName,
+          label: label,
+          id: id);
     }
 
     return null;
   }
 
+  /// Return the `State` declaration for the given `StatefulWidget` declaration.
+  /// Return `null` if cannot be found.
+  ClassDeclaration _findState(ClassDeclaration widget) {
+    MethodDeclaration createStateMethod = widget.members.firstWhere(
+        (method) =>
+            method is MethodDeclaration &&
+            method.name.name == 'createState' &&
+            method.body != null,
+        orElse: () => null);
+    if (createStateMethod == null) {
+      return null;
+    }
+
+    DartType stateType;
+    {
+      FunctionBody buildBody = createStateMethod.body;
+      if (buildBody is ExpressionFunctionBody) {
+        stateType = buildBody.expression.staticType;
+      } else if (buildBody is BlockFunctionBody) {
+        List<Statement> statements = buildBody.block.statements;
+        if (statements.isNotEmpty) {
+          Statement lastStatement = statements.last;
+          if (lastStatement is ReturnStatement) {
+            stateType = lastStatement.expression?.staticType;
+          }
+        }
+      }
+    }
+    if (stateType == null) {
+      return null;
+    }
+
+    ClassElement stateElement;
+    if (stateType is InterfaceType && isState(stateType.element)) {
+      stateElement = stateType.element;
+    } else {
+      return null;
+    }
+
+    for (var stateNode in unit.declarations) {
+      if (stateNode is ClassDeclaration && stateNode.element == stateElement) {
+        return stateNode;
+      }
+    }
+
+    return null;
+  }
+
+  /// Fill [widgets] with information about classes that can be rendered.
+  void _findWidgets() {
+    for (var widget in unit.declarations) {
+      if (widget is ClassDeclaration) {
+        int nameOffset = widget.name.offset;
+
+        var designTimeConstructor = widget.getConstructor(CONSTRUCTOR_NAME);
+        if (designTimeConstructor == null) {
+          continue;
+        }
+
+        InterfaceType superType = widget.element.supertype;
+        if (isExactlyStatelessWidgetType(superType)) {
+          widgets[nameOffset] = new _WidgetClass(nameOffset);
+        } else if (isExactlyStatefulWidgetType(superType)) {
+          ClassDeclaration state = _findState(widget);
+          if (state != null) {
+            widgets[nameOffset] = new _WidgetClass(nameOffset, state);
+          }
+        }
+      }
+    }
+  }
+
   String _getShortLabel(AstNode node) {
     if (node is MethodInvocation) {
       var buffer = new StringBuffer();
@@ -214,3 +356,13 @@
     }
   }
 }
+
+/// Information about a Widget class that can be rendered.
+class _WidgetClass {
+  final int nameOffset;
+
+  /// If a `StatefulWidget` with the `State` in the same file.
+  final ClassDeclaration state;
+
+  _WidgetClass(this.nameOffset, [this.state]);
+}
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
index 57cf81d..f0d5a9e 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
@@ -38,6 +38,7 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/task/model.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol;
 import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
 import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
 
@@ -77,8 +78,8 @@
       ..replacementLength = range.length;
 
     // Request Dart specific completions from each contributor
-    Map<String, CompletionSuggestion> suggestionMap =
-        <String, CompletionSuggestion>{};
+    var suggestionMap = <String, CompletionSuggestion>{};
+    var constructorMap = <String, List<String>>{};
     List<DartCompletionContributor> contributors = <DartCompletionContributor>[
       new ArgListContributor(),
       new CombinatorContributor(),
@@ -109,11 +110,25 @@
       request.checkAborted();
 
       for (CompletionSuggestion newSuggestion in contributorSuggestions) {
-        var oldSuggestion = suggestionMap.putIfAbsent(
-            newSuggestion.completion, () => newSuggestion);
-        if (newSuggestion != oldSuggestion &&
-            newSuggestion.relevance > oldSuggestion.relevance) {
-          suggestionMap[newSuggestion.completion] = newSuggestion;
+        String key = newSuggestion.completion;
+
+        // Append parenthesis for constructors to disambiguate from classes.
+        if (_isConstructor(newSuggestion)) {
+          key += '()';
+          String className = _getConstructorClassName(newSuggestion);
+          _ensureList(constructorMap, className).add(key);
+        }
+
+        // Local declarations hide both the class and its constructors.
+        if (!_isClass(newSuggestion)) {
+          List<String> constructorKeys = constructorMap[key];
+          constructorKeys?.forEach(suggestionMap.remove);
+        }
+
+        CompletionSuggestion oldSuggestion = suggestionMap[key];
+        if (oldSuggestion == null ||
+            oldSuggestion.relevance < newSuggestion.relevance) {
+          suggestionMap[key] = newSuggestion;
         }
       }
     }
@@ -127,6 +142,33 @@
     request.checkAborted();
     return suggestions;
   }
+
+  static List<String> _ensureList(Map<String, List<String>> map, String key) {
+    List<String> list = map[key];
+    if (list == null) {
+      list = <String>[];
+      map[key] = list;
+    }
+    return list;
+  }
+
+  static String _getConstructorClassName(CompletionSuggestion suggestion) {
+    String completion = suggestion.completion;
+    int dotIndex = completion.indexOf('.');
+    if (dotIndex != -1) {
+      return completion.substring(0, dotIndex);
+    } else {
+      return completion;
+    }
+  }
+
+  static bool _isClass(CompletionSuggestion suggestion) {
+    return suggestion.element?.kind == protocol.ElementKind.CLASS;
+  }
+
+  static bool _isConstructor(CompletionSuggestion suggestion) {
+    return suggestion.element?.kind == protocol.ElementKind.CONSTRUCTOR;
+  }
 }
 
 /**
diff --git a/pkg/analysis_server/lib/src/utilities/flutter.dart b/pkg/analysis_server/lib/src/utilities/flutter.dart
index c03cdff..b5c82f1 100644
--- a/pkg/analysis_server/lib/src/utilities/flutter.dart
+++ b/pkg/analysis_server/lib/src/utilities/flutter.dart
@@ -14,9 +14,12 @@
 const _BASIC_URI = "package:flutter/src/widgets/basic.dart";
 const _CENTER_NAME = "Center";
 const _PADDING_NAME = "Padding";
+const _STATE_NAME = "State";
+const _STATEFUL_WIDGET_NAME = "StatefulWidget";
 const _STATELESS_WIDGET_NAME = "StatelessWidget";
 const _WIDGET_NAME = "Widget";
 const _WIDGET_URI = "package:flutter/src/widgets/framework.dart";
+final _frameworkUri = Uri.parse('package:flutter/src/widgets/framework.dart');
 
 void convertChildToChildren(
     InstanceCreationExpression childArg,
@@ -241,6 +244,14 @@
 }
 
 /**
+ * Return `true` if the given [type] is the Flutter class `StatefulWidget`.
+ */
+bool isExactlyStatefulWidgetType(DartType type) {
+  return type is InterfaceType &&
+      _isExactWidget(type.element, _STATEFUL_WIDGET_NAME, _WIDGET_URI);
+}
+
+/**
  * Return `true` if the given [type] is the Flutter class `StatelessWidget`.
  */
 bool isExactlyStatelessWidgetType(DartType type) {
@@ -276,6 +287,12 @@
       isWidgetType(type.typeArguments[0]);
 }
 
+/// Return `true` if the given [element] has the Flutter class `State` as
+/// a superclass.
+bool isState(ClassElement element) {
+  return _hasSupertype(element, _frameworkUri, _STATE_NAME);
+}
+
 /**
  * Return `true` if the given [element] is the Flutter class `Widget`, or its
  * subtype.
@@ -329,6 +346,23 @@
   return type is InterfaceType && isWidget(type.element);
 }
 
+/// Return `true` if the given [element] has a supertype with the [requiredName]
+/// defined in the file with the [requiredUri].
+bool _hasSupertype(ClassElement element, Uri requiredUri, String requiredName) {
+  if (element == null) {
+    return false;
+  }
+  for (InterfaceType type in element.allSupertypes) {
+    if (type.name == requiredName) {
+      Uri uri = type.element.source.uri;
+      if (uri == requiredUri) {
+        return true;
+      }
+    }
+  }
+  return false;
+}
+
 /**
  * Return `true` if the given [element] is the exact [type] defined in the
  * file with the given [uri].
diff --git a/pkg/analysis_server/test/completion_test_support.dart b/pkg/analysis_server/test/completion_test_support.dart
index 75833ab..06829ed 100644
--- a/pkg/analysis_server/test/completion_test_support.dart
+++ b/pkg/analysis_server/test/completion_test_support.dart
@@ -37,6 +37,13 @@
         if (matchingSuggestion == null) {
           matchingSuggestion = suggestion;
         } else {
+          // It is OK to have a class and its default constructor suggestions.
+          if (matchingSuggestion.element?.kind == ElementKind.CLASS &&
+                  suggestion.element?.kind == ElementKind.CONSTRUCTOR ||
+              matchingSuggestion.element?.kind == ElementKind.CONSTRUCTOR &&
+                  suggestion.element?.kind == ElementKind.CLASS) {
+            return;
+          }
           fail(
               "Expected exactly one '$completion' but found multiple:\n  $suggestedCompletions");
         }
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index 57cd8ee..07c23fa 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -274,8 +274,10 @@
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset));
       expect(replacementLength, equals(0));
-      assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
-      assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement');
+      assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object',
+          elementKind: ElementKind.CLASS);
+      assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement',
+          elementKind: ElementKind.CLASS);
       assertNoResult('test');
     });
   }
@@ -430,7 +432,8 @@
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset));
       expect(replacementLength, equals(0));
-      assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
+      assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object',
+          elementKind: ElementKind.CLASS);
       assertHasResult(CompletionSuggestionKind.IDENTIFIER, 'foo');
       assertNoResult('HtmlElement');
       assertNoResult('test');
@@ -597,6 +600,32 @@
     });
   }
 
+  test_local_implicitCreation() async {
+    addTestFile('''
+class A {
+  A();
+  A.named();
+}
+main() {
+  ^
+}
+''');
+    await getSuggestions();
+
+    expect(replacementOffset, equals(completionOffset));
+    expect(replacementLength, equals(0));
+
+    // The class is suggested.
+    assertHasResult(CompletionSuggestionKind.INVOCATION, 'A',
+        elementKind: ElementKind.CLASS);
+
+    // Both constructors - default and named, are suggested.
+    assertHasResult(CompletionSuggestionKind.INVOCATION, 'A',
+        elementKind: ElementKind.CONSTRUCTOR);
+    assertHasResult(CompletionSuggestionKind.INVOCATION, 'A.named',
+        elementKind: ElementKind.CONSTRUCTOR);
+  }
+
   test_local_named_constructor() {
     addTestFile('class A {A.c(); x() {new A.^}}');
     return getSuggestions().then((_) {
@@ -624,19 +653,47 @@
     });
   }
 
+  test_local_shadowClass() async {
+    addTestFile('''
+class A {
+  A();
+  A.named();
+}
+main() {
+  int A = 0;
+  ^
+}
+''');
+    await getSuggestions();
+
+    expect(replacementOffset, equals(completionOffset));
+    expect(replacementLength, equals(0));
+
+    // The class is suggested.
+    assertHasResult(CompletionSuggestionKind.INVOCATION, 'A',
+        relevance: DART_RELEVANCE_LOCAL_VARIABLE);
+
+    // Class and all its constructors are shadowed by the local variable.
+    assertNoResult('A', elementKind: ElementKind.CLASS);
+    assertNoResult('A', elementKind: ElementKind.CONSTRUCTOR);
+    assertNoResult('A.named', elementKind: ElementKind.CONSTRUCTOR);
+  }
+
   test_locals() {
     addTestFile('class A {var a; x() {var b;^}} class DateTime { }');
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset));
       expect(replacementLength, equals(0));
-      assertHasResult(CompletionSuggestionKind.INVOCATION, 'A');
+      assertHasResult(CompletionSuggestionKind.INVOCATION, 'A',
+          elementKind: ElementKind.CLASS);
       assertHasResult(CompletionSuggestionKind.INVOCATION, 'a',
           relevance: DART_RELEVANCE_LOCAL_FIELD);
       assertHasResult(CompletionSuggestionKind.INVOCATION, 'b',
           relevance: DART_RELEVANCE_LOCAL_VARIABLE);
       assertHasResult(CompletionSuggestionKind.INVOCATION, 'x',
           relevance: DART_RELEVANCE_LOCAL_METHOD);
-      assertHasResult(CompletionSuggestionKind.INVOCATION, 'DateTime');
+      assertHasResult(CompletionSuggestionKind.INVOCATION, 'DateTime',
+          elementKind: ElementKind.CLASS);
     });
   }
 
@@ -677,9 +734,12 @@
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset));
       expect(replacementLength, equals(0));
-      assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
-      assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement');
-      assertHasResult(CompletionSuggestionKind.INVOCATION, 'A');
+      assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object',
+          elementKind: ElementKind.CLASS);
+      assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement',
+          elementKind: ElementKind.CLASS);
+      assertHasResult(CompletionSuggestionKind.INVOCATION, 'A',
+          elementKind: ElementKind.CLASS);
       assertNoResult('test');
     });
   }
@@ -697,9 +757,12 @@
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset));
       expect(replacementLength, equals(0));
-      assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
-      assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement');
-      assertHasResult(CompletionSuggestionKind.INVOCATION, 'A');
+      assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object',
+          elementKind: ElementKind.CLASS);
+      assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement',
+          elementKind: ElementKind.CLASS);
+      assertHasResult(CompletionSuggestionKind.INVOCATION, 'A',
+          elementKind: ElementKind.CLASS);
       assertNoResult('test');
     });
   }
@@ -734,7 +797,8 @@
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset));
       expect(replacementLength, equals(0));
-      assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
+      assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object',
+          elementKind: ElementKind.CLASS);
       assertNoResult('HtmlElement');
       assertNoResult('test');
     });
diff --git a/pkg/analysis_server/test/domain_completion_util.dart b/pkg/analysis_server/test/domain_completion_util.dart
index 6f1da48..0a6a543 100644
--- a/pkg/analysis_server/test/domain_completion_util.dart
+++ b/pkg/analysis_server/test/domain_completion_util.dart
@@ -43,9 +43,13 @@
       {int relevance: DART_RELEVANCE_DEFAULT,
       bool isDeprecated: false,
       bool isPotential: false,
-      int selectionOffset}) {
+      int selectionOffset,
+      ElementKind elementKind}) {
     var cs;
     suggestions.forEach((s) {
+      if (elementKind != null && s.element?.kind != elementKind) {
+        return;
+      }
       if (s.completion == completion) {
         if (cs == null) {
           cs = s;
@@ -56,7 +60,13 @@
     });
     if (cs == null) {
       var completions = suggestions.map((s) => s.completion).toList();
-      fail('expected "$completion" but found\n $completions');
+
+      String expectationText = '"$completion"';
+      if (elementKind != null) {
+        expectationText += ' ($elementKind)';
+      }
+
+      fail('expected $expectationText, but found\n $completions');
     }
     expect(cs.kind, equals(kind));
     expect(cs.relevance, equals(relevance));
@@ -66,8 +76,10 @@
     expect(cs.isPotential, equals(isPotential));
   }
 
-  void assertNoResult(String completion) {
-    if (suggestions.any((cs) => cs.completion == completion)) {
+  void assertNoResult(String completion, {ElementKind elementKind}) {
+    if (suggestions.any((cs) =>
+        cs.completion == completion &&
+        (elementKind == null || cs.element?.kind == elementKind))) {
       fail('did not expect completion: $completion');
     }
   }
diff --git a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
index 6850ece..1dc9fe8 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
@@ -25,6 +25,8 @@
 class FlutterOutlineComputerTest extends AbstractContextTest {
   String testPath;
   String testCode;
+  AnalysisResult analysisResult;
+  FlutterOutlineComputer computer;
 
   @override
   void setUp() {
@@ -289,6 +291,167 @@
 ''');
   }
 
+  test_render_BAD_noDesignTimeConstructor() async {
+    FlutterOutline unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    return new Row();
+  }
+}
+''');
+    var myWidget = unitOutline.children[0];
+    expect(myWidget.renderConstructor, isNull);
+    expect(myWidget.stateOffset, isNull);
+    expect(myWidget.stateLength, isNull);
+
+    expect(computer.instrumentedCode, isNull);
+  }
+
+  test_render_BAD_part() async {
+    // Use test.dart as a part of a library.
+    // Add the library to the driver so that it is analyzed before the part.
+    var libPath = newFile('/test_lib.dart', content: r'''
+part 'test.dart';
+import 'package:flutter/widgets.dart';
+''').path;
+    driver.addFile(libPath);
+
+    FlutterOutline unitOutline = await _computeOutline('''
+part of 'test_lib.dart';
+
+class MyWidget extends StatelessWidget {
+  MyWidget.forDesignTime();
+
+  @override
+  Widget build(BuildContext context) {
+    return new Row();
+  }
+}
+''');
+
+    // Analysis is successful, no errors.
+    expect(analysisResult.errors, isEmpty);
+
+    // No instrumentation, because not a library.
+    expect(computer.instrumentedCode, isNull);
+
+    // There is forDesignTime() constructor, but we don't handle parts.
+    var myWidget = unitOutline.children[0];
+    expect(myWidget.renderConstructor, isNull);
+  }
+
+  test_render_stateful_createState_blockBody() async {
+    FlutterOutline unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatefulWidget {
+  MyWidget.forDesignTime();
+
+  @override
+  MyWidgetState createState() {
+    return new MyWidgetState();
+  }
+}
+
+class MyWidgetState extends State<MyWidget> {
+  @override
+  Widget build(BuildContext context) {
+    return new Container(),
+  }
+}
+''');
+    var myWidget = unitOutline.children[0];
+    expect(myWidget.renderConstructor, 'forDesignTime');
+    expect(myWidget.stateOffset, 192);
+    expect(myWidget.stateLength, 130);
+  }
+
+  test_render_stateful_createState_expressionBody() async {
+    FlutterOutline unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatefulWidget {
+  MyWidget.forDesignTime();
+
+  @override
+  MyWidgetState createState() => new MyWidgetState();
+}
+
+class MyWidgetState extends State<MyWidget> {
+  @override
+  Widget build(BuildContext context) {
+    return new Container(),
+  }
+}
+''');
+    var myWidget = unitOutline.children[0];
+    expect(myWidget.renderConstructor, 'forDesignTime');
+    expect(myWidget.stateOffset, 178);
+    expect(myWidget.stateLength, 130);
+  }
+
+  test_render_stateless() async {
+    FlutterOutline unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  MyWidget.forDesignTime();
+
+  @override
+  Widget build(BuildContext context) {
+    return new Row(
+      children: <Widget>[
+        new Text('aaa'),
+        new Text('bbb'),
+      ],
+    );
+  }
+}
+''');
+    var myWidget = unitOutline.children[0];
+    expect(myWidget.renderConstructor, 'forDesignTime');
+    expect(myWidget.stateOffset, isNull);
+    expect(myWidget.stateLength, isNull);
+
+    expect(
+        computer.instrumentedCode,
+        r'''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  MyWidget.forDesignTime();
+
+  @override
+  Widget build(BuildContext context) {
+    return _registerWidgetInstance(0, new Row(
+      children: <Widget>[
+        _registerWidgetInstance(1, new Text('aaa')),
+        _registerWidgetInstance(2, new Text('bbb')),
+      ],
+    ));
+  }
+}
+''' +
+            FlutterOutlineComputer.RENDER_APPEND);
+
+    var build = myWidget.children[1];
+
+    var row = build.children[0];
+    expect(row.className, 'Row');
+    expect(row.id, 0);
+
+    var textA = row.children[0];
+    expect(textA.className, 'Text');
+    expect(textA.id, 1);
+
+    var textB = row.children[1];
+    expect(textB.className, 'Text');
+    expect(textB.id, 2);
+  }
+
   test_variableName() async {
     FlutterOutline unitOutline = await _computeOutline('''
 import 'package:flutter/widgets.dart';
@@ -323,10 +486,10 @@
   Future<FlutterOutline> _computeOutline(String code) async {
     testCode = code;
     newFile(testPath, content: code);
-    AnalysisResult analysisResult = await driver.getResult(testPath);
-    return new FlutterOutlineComputer(
-            testPath, testCode, analysisResult.lineInfo, analysisResult.unit)
-        .compute();
+    analysisResult = await driver.getResult(testPath);
+    computer = new FlutterOutlineComputer(
+        testPath, testCode, analysisResult.lineInfo, analysisResult.unit);
+    return computer.compute();
   }
 
   void _expect(FlutterOutline outline,
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index b3490e1..b8c90da 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -294,11 +294,20 @@
 
   final _UninstantiatedBoundChecker _uninstantiatedBoundChecker;
 
+  /// Setting this flag to `true` disables the check for conflicting generics.
+  /// This is used when running with the old task model to work around
+  /// dartbug.com/32421.
+  ///
+  /// TODO(paulberry): remove this flag once dartbug.com/32421 is properly
+  /// fixed.
+  final bool disableConflictingGenericsCheck;
+
   /**
    * Initialize a newly created error verifier.
    */
   ErrorVerifier(ErrorReporter errorReporter, this._currentLibrary,
-      this._typeProvider, this._inheritanceManager, this.enableSuperMixins)
+      this._typeProvider, this._inheritanceManager, this.enableSuperMixins,
+      {this.disableConflictingGenericsCheck: false})
       : _errorReporter = errorReporter,
         _uninstantiatedBoundChecker =
             new _UninstantiatedBoundChecker(errorReporter) {
@@ -1328,7 +1337,9 @@
 
       if (_options.strongMode) {
         _checkForMixinWithConflictingPrivateMember(withClause, superclass);
-        _checkForConflictingGenerics(node);
+        if (!disableConflictingGenericsCheck) {
+          _checkForConflictingGenerics(node);
+        }
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index 01ac085..fe9f7fe 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -846,12 +846,52 @@
    *       | identifier
    */
   Expression parseAssignableExpression(bool primaryAllowed) {
-    if (_matchesKeyword(Keyword.SUPER)) {
-      return parseAssignableSelector(
-          astFactory.superExpression(getAndAdvance()), false,
-          allowConditional: false);
+    //
+    // A primary expression can start with an identifier. We resolve the
+    // ambiguity by determining whether the primary consists of anything other
+    // than an identifier and/or is followed by an assignableSelector.
+    //
+    Expression expression = parsePrimaryExpression();
+    bool isOptional =
+        primaryAllowed || _isValidAssignableExpression(expression);
+    while (true) {
+      while (_isLikelyArgumentList()) {
+        TypeArgumentList typeArguments = _parseOptionalTypeArguments();
+        ArgumentList argumentList = parseArgumentList();
+        Expression currentExpression = expression;
+        if (currentExpression is SimpleIdentifier) {
+          expression = astFactory.methodInvocation(
+              null, null, currentExpression, typeArguments, argumentList);
+        } else if (currentExpression is PrefixedIdentifier) {
+          expression = astFactory.methodInvocation(
+              currentExpression.prefix,
+              currentExpression.period,
+              currentExpression.identifier,
+              typeArguments,
+              argumentList);
+        } else if (currentExpression is PropertyAccess) {
+          expression = astFactory.methodInvocation(
+              currentExpression.target,
+              currentExpression.operator,
+              currentExpression.propertyName,
+              typeArguments,
+              argumentList);
+        } else {
+          expression = astFactory.functionExpressionInvocation(
+              expression, typeArguments, argumentList);
+        }
+        if (!primaryAllowed) {
+          isOptional = false;
+        }
+      }
+      Expression selectorExpression = parseAssignableSelector(
+          expression, isOptional || (expression is PrefixedIdentifier));
+      if (identical(selectorExpression, expression)) {
+        return expression;
+      }
+      expression = selectorExpression;
+      isOptional = true;
     }
-    return _parseAssignableExpressionNotStartingWithSuper(primaryAllowed);
   }
 
   /**
@@ -4457,7 +4497,7 @@
    *
    *     selector ::=
    *         assignableSelector
-   *       | argumentList
+   *       | argumentPart
    */
   Expression parsePostfixExpression() {
     Expression operand = parseAssignableExpression(true);
@@ -4583,8 +4623,6 @@
     } else if (keyword == Keyword.THIS) {
       return astFactory.thisExpression(getAndAdvance());
     } else if (keyword == Keyword.SUPER) {
-      // TODO(paulberry): verify with Gilad that "super" must be followed by
-      // unconditionalAssignableSelector in this case.
       return parseAssignableSelector(
           astFactory.superExpression(getAndAdvance()), false,
           allowConditional: false);
@@ -5416,7 +5454,7 @@
             operator, astFactory.superExpression(getAndAdvance()));
       }
       return astFactory.prefixExpression(
-          operator, _parseAssignableExpressionNotStartingWithSuper(false));
+          operator, parseAssignableExpression(false));
     } else if (type == TokenType.PLUS) {
       _reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER);
       return createSyntheticIdentifier();
@@ -6382,6 +6420,21 @@
   }
 
   /**
+   * Return `true` if the given [expression] is a primary expression that is
+   * allowed to be an assignable expression without any assignable selector.
+   */
+  bool _isValidAssignableExpression(Expression expression) {
+    if (expression is SimpleIdentifier) {
+      return true;
+    } else if (expression is PropertyAccess) {
+      return expression.target is SuperExpression;
+    } else if (expression is IndexExpression) {
+      return expression.target is SuperExpression;
+    }
+    return false;
+  }
+
+  /**
    * Increments the error reporting lock level. If level is more than `0`, then
    * [reportError] wont report any error.
    */
@@ -6520,61 +6573,6 @@
   }
 
   /**
-   * Parse an assignable expression given that the current token is not 'super'.
-   * The [primaryAllowed] is `true` if the expression is allowed to be a primary
-   * without any assignable selector. Return the assignable expression that was
-   * parsed.
-   */
-  Expression _parseAssignableExpressionNotStartingWithSuper(
-      bool primaryAllowed) {
-    //
-    // A primary expression can start with an identifier. We resolve the
-    // ambiguity by determining whether the primary consists of anything other
-    // than an identifier and/or is followed by an assignableSelector.
-    //
-    Expression expression = parsePrimaryExpression();
-    bool isOptional = primaryAllowed || expression is SimpleIdentifier;
-    while (true) {
-      while (_isLikelyArgumentList()) {
-        TypeArgumentList typeArguments = _parseOptionalTypeArguments();
-        ArgumentList argumentList = parseArgumentList();
-        Expression currentExpression = expression;
-        if (currentExpression is SimpleIdentifier) {
-          expression = astFactory.methodInvocation(
-              null, null, currentExpression, typeArguments, argumentList);
-        } else if (currentExpression is PrefixedIdentifier) {
-          expression = astFactory.methodInvocation(
-              currentExpression.prefix,
-              currentExpression.period,
-              currentExpression.identifier,
-              typeArguments,
-              argumentList);
-        } else if (currentExpression is PropertyAccess) {
-          expression = astFactory.methodInvocation(
-              currentExpression.target,
-              currentExpression.operator,
-              currentExpression.propertyName,
-              typeArguments,
-              argumentList);
-        } else {
-          expression = astFactory.functionExpressionInvocation(
-              expression, typeArguments, argumentList);
-        }
-        if (!primaryAllowed) {
-          isOptional = false;
-        }
-      }
-      Expression selectorExpression = parseAssignableSelector(
-          expression, isOptional || (expression is PrefixedIdentifier));
-      if (identical(selectorExpression, expression)) {
-        return expression;
-      }
-      expression = selectorExpression;
-      isOptional = true;
-    }
-  }
-
-  /**
    * Parse a block when we need to check for an open curly brace and recover
    * when there isn't one. Return the block that was parsed.
    *
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index 95424ed..ca300a9 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -5591,7 +5591,8 @@
         libraryElement,
         typeProvider,
         new InheritanceManager(libraryElement),
-        context.analysisOptions.enableSuperMixins);
+        context.analysisOptions.enableSuperMixins,
+        disableConflictingGenericsCheck: true);
     unit.accept(errorVerifier);
     //
     // Convert the pending errors into actual errors.
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_driver_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_driver_test.dart
index 117ae28..fdda0cd 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_driver_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_driver_test.dart
@@ -18,16 +18,29 @@
   bool get enableNewAnalysisDriver => true;
 
   @override // Passes with driver
+  test_conflictingGenericInterfaces_simple() =>
+      super.test_conflictingGenericInterfaces_simple();
+
+  @override // Passes with driver
+  test_conflictingGenericInterfaces_viaMixin() =>
+      super.test_conflictingGenericInterfaces_viaMixin();
+
+  @override // Passes with driver
+  test_mixinInference_conflictingSubstitution() =>
+      super.test_mixinInference_conflictingSubstitution();
+
+  @override // Passes with driver
   test_mixinInference_doNotIgnorePreviousExplicitMixins() =>
       super.test_mixinInference_doNotIgnorePreviousExplicitMixins();
 
   @override // Passes with driver
-  test_mixinInference_matchingClass() =>
-      super.test_mixinInference_matchingClass();
+  test_mixinInference_impossibleSubstitution() =>
+      super.test_mixinInference_impossibleSubstitution();
 
   @override // Passes with driver
-  test_mixinInference_matchingClass_inPreviousMixin() =>
-      super.test_mixinInference_matchingClass_inPreviousMixin();
+  test_mixinInference_noMatchingClass_constraintSatisfiedByImplementsClause() =>
+      super
+          .test_mixinInference_noMatchingClass_constraintSatisfiedByImplementsClause();
 
   @override // Passes with driver
   test_mixinInference_recursiveSubtypeCheck() =>
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
index d69b4f2..cd32e7e 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -740,6 +740,7 @@
     assertNoErrors(source);
   }
 
+  @failingTest // Does not work with old task model
   test_conflictingGenericInterfaces_simple() async {
     Source source = addSource('''
 class I<T> {}
@@ -751,6 +752,7 @@
     assertErrors(source, [CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES]);
   }
 
+  @failingTest // Does not work with old task model
   test_conflictingGenericInterfaces_viaMixin() async {
     Source source = addSource('''
 class I<T> {}
@@ -4018,6 +4020,7 @@
     verify([source]);
   }
 
+  @failingTest // Does not work with old task model
   test_mixinInference_conflictingSubstitution() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -4052,6 +4055,7 @@
     expect(mixins[1].toString(), 'C<String>');
   }
 
+  @failingTest // Does not work with old task model
   test_mixinInference_impossibleSubstitution() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -4069,7 +4073,6 @@
     ]);
   }
 
-  @failingTest // Does not work with old task model
   test_mixinInference_matchingClass() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -4085,7 +4088,6 @@
     assertNoErrors(source);
   }
 
-  @failingTest // Does not work with old task model
   test_mixinInference_matchingClass_inPreviousMixin() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
@@ -4118,6 +4120,7 @@
         source, [CompileTimeErrorCode.MIXIN_INFERENCE_NO_MATCHING_CLASS]);
   }
 
+  @failingTest // Does not work with old task model
   test_mixinInference_noMatchingClass_constraintSatisfiedByImplementsClause() async {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.enableSuperMixins = true;
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index 99ef619..5d3baf4 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -595,38 +595,6 @@
 
   @override
   @failingTest
-  void test_localFunctionDeclarationModifier_abstract() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, found 0
-    super.test_localFunctionDeclarationModifier_abstract();
-  }
-
-  @override
-  @failingTest
-  void test_localFunctionDeclarationModifier_external() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, found 0
-    super.test_localFunctionDeclarationModifier_external();
-  }
-
-  @override
-  @failingTest
-  void test_localFunctionDeclarationModifier_factory() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, found 0
-    super.test_localFunctionDeclarationModifier_factory();
-  }
-
-  @override
-  @failingTest
-  void test_localFunctionDeclarationModifier_static() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, found 0
-    super.test_localFunctionDeclarationModifier_static();
-  }
-
-  @override
-  @failingTest
   void test_method_invalidTypeParameterComments() {
     // TODO(brianwilkerson) Does not recover.
     //   type 'DeclaredSimpleIdentifier' is not a subtype of type 'TypeAnnotation' of 'returnType' where
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index bbf84c6..dfab7a0 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -3717,6 +3717,20 @@
 //        [expectedError(ParserErrorCode.GETTER_WITH_PARAMETERS, 9, 2)]);
   }
 
+  void test_illegalAssignmentToNonAssignable_assign_int() {
+    parseStatement("0 = 1;");
+    listener.assertErrors([
+      expectedError(ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, 0, 1)
+    ]);
+  }
+
+  void test_illegalAssignmentToNonAssignable_assign_this() {
+    parseStatement("this = 1;");
+    listener.assertErrors([
+      expectedError(ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, 0, 4)
+    ]);
+  }
+
   void test_illegalAssignmentToNonAssignable_postfix_minusMinus_literal() {
     parseExpression("0--", errors: [
       expectedError(ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, 1, 2)
@@ -3742,8 +3756,6 @@
   }
 
   void test_illegalAssignmentToNonAssignable_superAssigned() {
-    // TODO(brianwilkerson) When this test starts to pass, remove the test
-    // test_illegalAssignmentToNonAssignable_superAssigned.
     parseStatement("super = x;");
     listener.assertErrors(usingFastaParser
         ? [
@@ -4046,31 +4058,61 @@
   }
 
   void test_localFunctionDeclarationModifier_abstract() {
-    parseStatement("abstract f() {}");
-    listener.assertErrors([
-      expectedError(ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, 0, 8)
-    ]);
+    parseCompilationUnit("class C { m() { abstract f() {} } }",
+        errors: usingFastaParser
+            ? [
+                expectedError(ParserErrorCode.EXTRANEOUS_MODIFIER, 16, 8),
+                expectedError(
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 25, 1),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 26, 1),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 32, 1),
+              ]
+            : [
+                expectedError(
+                    ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, 16, 8)
+              ]);
   }
 
   void test_localFunctionDeclarationModifier_external() {
-    parseStatement("external f() {}");
-    listener.assertErrors([
-      expectedError(ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, 0, 8)
-    ]);
+    parseCompilationUnit("class C { m() { external f() {} } }",
+        errors: usingFastaParser
+            ? [
+                expectedError(ParserErrorCode.EXTRANEOUS_MODIFIER, 16, 8),
+                expectedError(
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 25, 1),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 26, 1),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 32, 1),
+              ]
+            : [
+                expectedError(
+                    ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, 16, 8)
+              ]);
   }
 
   void test_localFunctionDeclarationModifier_factory() {
-    parseStatement("factory f() {}");
-    listener.assertErrors([
-      expectedError(ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, 0, 7)
-    ]);
+    parseCompilationUnit("class C { m() { factory f() {} } }",
+        errors: usingFastaParser
+            ? [expectedError(ParserErrorCode.EXPECTED_TOKEN, 24, 1)]
+            : [
+                expectedError(
+                    ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, 16, 7)
+              ]);
   }
 
   void test_localFunctionDeclarationModifier_static() {
-    parseStatement("static f() {}");
-    listener.assertErrors([
-      expectedError(ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, 0, 6)
-    ]);
+    parseCompilationUnit("class C { m() { static f() {} } }",
+        errors: usingFastaParser
+            ? [
+                expectedError(ParserErrorCode.EXTRANEOUS_MODIFIER, 16, 6),
+                expectedError(
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 23, 1),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 24, 1),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 30, 1),
+              ]
+            : [
+                expectedError(
+                    ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, 16, 6)
+              ]);
   }
 
   void test_method_invalidTypeParameterComments() {
@@ -6587,6 +6629,17 @@
     expect(invocation.argumentList, isNotNull);
   }
 
+  void test_parseExpression_superMethodInvocation_typeArguments_chained() {
+    Expression expression = parseExpression('super.b.c<D>()');
+    MethodInvocation invocation = expression as MethodInvocation;
+    Expression target = invocation.target;
+    expect(target, new isInstanceOf<PropertyAccess>());
+    expect(invocation.methodName, isNotNull);
+    expect(invocation.methodName.name, 'c');
+    expect(invocation.typeArguments, isNotNull);
+    expect(invocation.argumentList, isNotNull);
+  }
+
   void test_parseExpressionList_multiple() {
     List<Expression> result = parseExpressionList('1, 2, 3');
     expect(result, isNotNull);
diff --git a/pkg/analyzer/test/generated/strong_mode_driver_test.dart b/pkg/analyzer/test/generated/strong_mode_driver_test.dart
index 40d3685..28609bb 100644
--- a/pkg/analyzer/test/generated/strong_mode_driver_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_driver_test.dart
@@ -34,32 +34,36 @@
 
   @failingTest
   @override
-  test_genericMethod_functionExpressionInvocation_explicit() {
-    return super.test_genericMethod_functionExpressionInvocation_explicit();
+  test_genericMethod_functionExpressionInvocation_functionTypedParameter_explicit() {
+    return super
+        .test_genericMethod_functionExpressionInvocation_functionTypedParameter_explicit();
   }
 
   @failingTest
   @override
-  test_genericMethod_functionExpressionInvocation_inferred() {
-    return super.test_genericMethod_functionExpressionInvocation_inferred();
+  test_genericMethod_functionExpressionInvocation_functionTypedParameter_inferred() {
+    return super
+        .test_genericMethod_functionExpressionInvocation_functionTypedParameter_inferred();
   }
 
   @failingTest
   @override
-  test_genericMethod_functionInvocation_explicit() {
-    return super.test_genericMethod_functionInvocation_explicit();
+  test_genericMethod_functionInvocation_functionTypedParameter_explicit() {
+    return super
+        .test_genericMethod_functionInvocation_functionTypedParameter_explicit();
   }
 
   @failingTest
   @override
-  test_genericMethod_functionInvocation_inferred() {
-    return super.test_genericMethod_functionInvocation_inferred();
+  test_genericMethod_functionInvocation_functionTypedParameter_inferred() {
+    return super
+        .test_genericMethod_functionInvocation_functionTypedParameter_inferred();
   }
 
   @failingTest
   @override
-  test_genericMethod_tearoff() {
-    return super.test_genericMethod_tearoff();
+  test_genericMethod_functionTypedParameter_tearoff() {
+    return super.test_genericMethod_functionTypedParameter_tearoff();
   }
 }
 
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index 8feaf44..fa04b08 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -2816,6 +2816,17 @@
     await resolveTestUnit(code);
   }
 
+  test_generalizedVoid_assignToVoidOk() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x = 42;
+}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
   test_genericFunction() async {
     await resolveTestUnit(r'T f<T>(T x) => null;');
     expectFunctionType('f', '<T>(T) → T',
@@ -2976,12 +2987,12 @@
 class C<E> {
   T f<T>(T e) => null;
   static T g<T>(T e) => null;
-  static final h = g;
+  static T Function<T>(T) h = null;
 }
 
 T topF<T>(T e) => null;
 var topG = topF;
-void test<S>(T pf<T>(T e)) {
+void test<S>(T Function<T>(T) pf) {
   var c = new C<int>();
   T lf<T>(T e) => null;
 
@@ -2994,8 +3005,7 @@
   var localCall = (lf)<int>(3);
   var paramCall = (pf)<int>(3);
 }
-''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
-        );
+''');
     expectIdentifierType('methodCall', "int");
     expectIdentifierType('staticCall', "int");
     expectIdentifierType('staticFieldCall', "int");
@@ -3006,17 +3016,37 @@
     expectIdentifierType('lambdaCall', "int");
   }
 
+  test_genericMethod_functionExpressionInvocation_functionTypedParameter_explicit() async {
+    await resolveTestUnit(r'''
+void test<S>(T pf<T>(T e)) {
+  var paramCall = (pf)<int>(3);
+}
+''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
+        );
+    expectIdentifierType('paramCall', "int");
+  }
+
+  test_genericMethod_functionExpressionInvocation_functionTypedParameter_inferred() async {
+    await resolveTestUnit(r'''
+void test<S>(T pf<T>(T e)) {
+  var paramCall = (pf)(3);
+}
+''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
+        );
+    expectIdentifierType('paramCall', "int");
+  }
+
   test_genericMethod_functionExpressionInvocation_inferred() async {
     await resolveTestUnit(r'''
 class C<E> {
   T f<T>(T e) => null;
   static T g<T>(T e) => null;
-  static final h = g;
+  static T Function<T>(T) h = null;
 }
 
 T topF<T>(T e) => null;
 var topG = topF;
-void test<S>(T pf<T>(T e)) {
+void test<S>(T Function<T>(T) pf) {
   var c = new C<int>();
   T lf<T>(T e) => null;
 
@@ -3046,12 +3076,12 @@
 class C<E> {
   T f<T>(T e) => null;
   static T g<T>(T e) => null;
-  static final h = g;
+  static T Function<T>(T) h = null;
 }
 
 T topF<T>(T e) => null;
 var topG = topF;
-void test<S>(T pf<T>(T e)) {
+void test<S>(T Function<T>(T) pf) {
   var c = new C<int>();
   T lf<T>(T e) => null;
   var methodCall = c.f<int>(3);
@@ -3062,8 +3092,7 @@
   var localCall = lf<int>(3);
   var paramCall = pf<int>(3);
 }
-''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
-        );
+''');
     expectIdentifierType('methodCall', "int");
     expectIdentifierType('staticCall', "int");
     expectIdentifierType('staticFieldCall', "int");
@@ -3073,17 +3102,37 @@
     expectIdentifierType('paramCall', "int");
   }
 
+  test_genericMethod_functionInvocation_functionTypedParameter_explicit() async {
+    await resolveTestUnit(r'''
+void test<S>(T pf<T>(T e)) {
+  var paramCall = pf<int>(3);
+}
+''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
+        );
+    expectIdentifierType('paramCall', "int");
+  }
+
+  test_genericMethod_functionInvocation_functionTypedParameter_inferred() async {
+    await resolveTestUnit(r'''
+void test<S>(T pf<T>(T e)) {
+  var paramCall = pf(3);
+}
+''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
+        );
+    expectIdentifierType('paramCall', "int");
+  }
+
   test_genericMethod_functionInvocation_inferred() async {
     await resolveTestUnit(r'''
 class C<E> {
   T f<T>(T e) => null;
   static T g<T>(T e) => null;
-  static final h = g;
+  static T Function<T>(T) h = null;
 }
 
 T topF<T>(T e) => null;
 var topG = topF;
-void test<S>(T pf<T>(T e)) {
+void test<S>(T Function<T>(T) pf) {
   var c = new C<int>();
   T lf<T>(T e) => null;
   var methodCall = c.f(3);
@@ -3094,8 +3143,7 @@
   var localCall = lf(3);
   var paramCall = pf(3);
 }
-''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
-        );
+''');
     expectIdentifierType('methodCall', "int");
     expectIdentifierType('staticCall', "int");
     expectIdentifierType('staticFieldCall', "int");
@@ -3127,6 +3175,16 @@
     expect(ft.toString(), '((String) → int) → List<int>');
   }
 
+  test_genericMethod_functionTypedParameter_tearoff() async {
+    await resolveTestUnit(r'''
+void test<S>(T pf<T>(T e)) {
+  var paramTearOff = pf;
+}
+''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
+        );
+    expectIdentifierType('paramTearOff', "<T>(T) → T");
+  }
+
   test_genericMethod_implicitDynamic() async {
     // Regression test for:
     // https://github.com/dart-lang/sdk/issues/25100#issuecomment-162047588
@@ -3395,12 +3453,12 @@
 class C<E> {
   T f<T>(E e) => null;
   static T g<T>(T e) => null;
-  static final h = g;
+  static T Function<T>(T) h = null;
 }
 
 T topF<T>(T e) => null;
 var topG = topF;
-void test<S>(T pf<T>(T e)) {
+void test<S>(T Function<T>(T) pf) {
   var c = new C<int>();
   T lf<T>(T e) => null;
   var methodTearOff = c.f;
@@ -3411,8 +3469,7 @@
   var localTearOff = lf;
   var paramTearOff = pf;
 }
-''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
-        );
+''');
     expectIdentifierType('methodTearOff', "<T>(int) → T");
     expectIdentifierType('staticTearOff', "<T>(T) → T");
     expectIdentifierType('staticFieldTearOff', "<T>(T) → T");
@@ -3428,7 +3485,7 @@
 class C<E> {
   T f<T>(E e) => null;
   static T g<T>(T e) => null;
-  static final h = g;
+  static T Function<T>(T) h = null;
 }
 
 T topF<T>(T e) => null;
@@ -3498,6 +3555,20 @@
     expectInitializerType('foo', 'Future<String>', isNull);
   }
 
+  test_genericMethod_toplevel_field_staticTearoff() async {
+    await resolveTestUnit(r'''
+class C<E> {
+  static T g<T>(T e) => null;
+  static T Function<T>(T) h = null;
+}
+
+void test() {
+  var fieldRead = C.h;
+}
+''');
+    expectIdentifierType('fieldRead', "<T>(T) → T");
+  }
+
   test_implicitBounds() async {
     String code = r'''
 class A<T> {}
@@ -3942,6 +4013,12 @@
     await _objectMethodOnFunctions_helper2(code);
   }
 
+  test_returnOfInvalidType_object_void() async {
+    await assertErrorsInCode(
+        "Object f() { void voidFn() => null; return voidFn(); }",
+        [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+  }
+
   test_setterWithDynamicTypeIsError() async {
     Source source = addSource(r'''
 class A {
@@ -4034,23 +4111,6 @@
     expectInitializerType('foo', 'int', isNull);
   }
 
-  test_generalizedVoid_assignToVoidOk() async {
-    Source source = addSource(r'''
-void main() {
-  void x;
-  x = 42;
-}
-''');
-    await computeAnalysisResult(source);
-    assertNoErrors(source);
-  }
-
-  test_returnOfInvalidType_object_void() async {
-    await assertErrorsInCode(
-        "Object f() { void voidFn() => null; return voidFn(); }",
-        [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
-  }
-
   Future<Null> _objectMethodOnFunctions_helper2(String code) async {
     await resolveTestUnit(code);
     expectIdentifierType('t0', "String");
@@ -4139,6 +4199,28 @@
     assertTypeOfMarkedExpression(code, unit, typeProvider.intType, null);
   }
 
+  test_inconsistentMethodInheritance_inferFunctionTypeFromTypedef() async {
+    Source source = addSource(r'''
+typedef bool F<E>(E argument);
+
+abstract class Base {
+  f<E extends int>(F<int> x);
+}
+
+abstract class BaseCopy extends Base {
+}
+
+abstract class Override implements Base, BaseCopy {
+  f<E>(x) => null;
+}
+
+class C extends Override implements Base {}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
   test_localVariableInference_bottom_disabled() async {
     String code = r'''
 main() {
@@ -4327,26 +4409,4 @@
     assertPropagatedAssignedType(code, unit, typeProvider.intType, null);
     assertTypeOfMarkedExpression(code, unit, typeProvider.intType, null);
   }
-
-  test_inconsistentMethodInheritance_inferFunctionTypeFromTypedef() async {
-    Source source = addSource(r'''
-typedef bool F<E>(E argument);
-
-abstract class Base {
-  f<E extends int>(F<int> x);
-}
-
-abstract class BaseCopy extends Base {
-}
-
-abstract class Override implements Base, BaseCopy {
-  f<E>(x) => null;
-}
-
-class C extends Override implements Base {}
-''');
-    await computeAnalysisResult(source);
-    assertNoErrors(source);
-    verify([source]);
-  }
 }
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
index 869f387..37f17da 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -2794,6 +2794,7 @@
     ''');
   }
 
+  @failingTest // Does not work with old task model
   test_interfacesFromMixinsUsedTwiceAreChecked() {
     // Regression test for https://github.com/dart-lang/sdk/issues/29782
     return checkFile(r'''
@@ -4609,4 +4610,8 @@
   test_fuzzyArrowLegacyAssignability_GlobalInference() async {
     await super.test_fuzzyArrowLegacyAssignability_GlobalInference();
   }
+
+  @override // Passes with driver
+  test_interfacesFromMixinsUsedTwiceAreChecked() =>
+      super.test_interfacesFromMixinsUsedTwiceAreChecked();
 }
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index 015d4e3..1256caf 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -1258,15 +1258,37 @@
             ImportDirective next,
             String uri,
             bool trailingNewLine: false}) {
+          LineInfo lineInfo = unit.lineInfo;
           if (prev != null) {
-            addInsertion(prev.end, (EditBuilder builder) {
+            int offset = prev.end;
+            int line = lineInfo.getLocation(offset).lineNumber;
+            Token comment = prev.endToken.next.precedingComments;
+            while (comment != null) {
+              if (lineInfo.getLocation(comment.offset).lineNumber == line) {
+                offset = comment.end;
+              }
+              comment = comment.next;
+            }
+            addInsertion(offset, (EditBuilder builder) {
               builder.writeln();
               builder.write("import '");
               builder.write(uri);
               builder.write("';");
             });
           } else {
-            addInsertion(next.offset, (EditBuilder builder) {
+            int offset = next.offset;
+            Token comment = next.beginToken.precedingComments;
+            while (comment != null) {
+              int commentOffset = comment.offset;
+              if (commentOffset ==
+                  lineInfo.getOffsetOfLine(
+                      lineInfo.getLocation(commentOffset).lineNumber - 1)) {
+                offset = commentOffset;
+                break;
+              }
+              comment = comment.next;
+            }
+            addInsertion(offset, (EditBuilder builder) {
               builder.write("import '");
               builder.write(uri);
               builder.writeln("';");
diff --git a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
index 8bc6e51..f4c063b 100644
--- a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
@@ -177,6 +177,34 @@
 ''');
   }
 
+  test_importLibrary_package_afterPackage_leadingComment() async {
+    await _assertImportLibraries('''
+// comment
+import 'package:aaa/a1.dart';
+
+import 'foo.dart';
+''', ['package:aaa/a2.dart'], '''
+// comment
+import 'package:aaa/a1.dart';
+import 'package:aaa/a2.dart';
+
+import 'foo.dart';
+''');
+  }
+
+  test_importLibrary_package_afterPackage_trailingComment() async {
+    await _assertImportLibraries('''
+import 'package:aaa/a1.dart'; // comment
+
+import 'foo.dart';
+''', ['package:aaa/a2.dart'], '''
+import 'package:aaa/a1.dart'; // comment
+import 'package:aaa/a2.dart';
+
+import 'foo.dart';
+''');
+  }
+
   test_importLibrary_package_beforePackage() async {
     await _assertImportLibraries('''
 import 'package:aaa/a1.dart';
@@ -205,6 +233,34 @@
 ''');
   }
 
+  test_importLibrary_package_beforePackage_leadingComments() async {
+    await _assertImportLibraries('''
+// comment a2
+import 'package:aaa/a2.dart';
+
+import 'foo.dart';
+''', ['package:aaa/a1.dart'], '''
+import 'package:aaa/a1.dart';
+// comment a2
+import 'package:aaa/a2.dart';
+
+import 'foo.dart';
+''');
+  }
+
+  test_importLibrary_package_beforePackage_trailingComments() async {
+    await _assertImportLibraries('''
+import 'package:aaa/a2.dart'; // comment a2
+
+import 'foo.dart';
+''', ['package:aaa/a1.dart'], '''
+import 'package:aaa/a1.dart';
+import 'package:aaa/a2.dart'; // comment a2
+
+import 'foo.dart';
+''');
+  }
+
   test_importLibrary_package_beforeRelative() async {
     await _assertImportLibraries('''
 import 'foo.dart';
diff --git a/pkg/compiler/lib/src/common/names.dart b/pkg/compiler/lib/src/common/names.dart
index 2b63cc3..327c9e5 100644
--- a/pkg/compiler/lib/src/common/names.dart
+++ b/pkg/compiler/lib/src/common/names.dart
@@ -42,7 +42,7 @@
   static const String length = 'length';
 
   /// The name of the signature function in closure classes.
-  static const String signature = 'signature';
+  static const String signature = ':signature';
 }
 
 /// [Name]s commonly used.
diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
index a34a070..c399c75 100644
--- a/pkg/compiler/lib/src/enqueue.dart
+++ b/pkg/compiler/lib/src/enqueue.dart
@@ -367,6 +367,8 @@
           typedef = type;
         } else if (type is FunctionType) {
           typedef = type.typedefType;
+        } else if (type is TypeVariableType) {
+          _worldBuilder.registerTypeVariableTypeLiteral(type);
         }
         if (typedef != null) worldBuilder.registerTypedef(typedef.element);
         break;
diff --git a/pkg/compiler/lib/src/js_backend/enqueuer.dart b/pkg/compiler/lib/src/js_backend/enqueuer.dart
index 5cb274c..82dd51a 100644
--- a/pkg/compiler/lib/src/js_backend/enqueuer.dart
+++ b/pkg/compiler/lib/src/js_backend/enqueuer.dart
@@ -192,6 +192,9 @@
         }
         break;
       case TypeUseKind.TYPE_LITERAL:
+        if (type is TypeVariableType) {
+          _worldBuilder.registerTypeVariableTypeLiteral(type);
+        }
         break;
     }
   }
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index 9963c4c..66f8e79 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -94,10 +94,9 @@
   ///
   /// See [methodNeedsSignature] for more information on what a signature is
   /// and when it is needed.
-  // TODO(redemption): Remove this when the old frontend is deleted.
   bool localFunctionNeedsSignature(Local localFunction);
 
-  bool classUsesTypeVariableLiteral(ClassEntity cls);
+  bool selectorNeedsTypeArguments(Selector selector);
 }
 
 class TrivialRuntimeTypesNeed implements RuntimeTypesNeed {
@@ -107,9 +106,6 @@
   bool classNeedsTypeArguments(ClassEntity cls) => true;
 
   @override
-  bool classUsesTypeVariableLiteral(ClassEntity cls) => true;
-
-  @override
   bool localFunctionNeedsSignature(Local localFunction) => true;
 
   @override
@@ -120,6 +116,9 @@
       // TODO(johnniwinther): Align handling of type arguments passed to factory
       // constructors with type arguments passed the regular generic methods.
       !(method is ConstructorEntity && method.isFactoryConstructor);
+
+  @override
+  bool selectorNeedsTypeArguments(Selector selector) => true;
 }
 
 /// Interface for computing classes and methods that need runtime types.
@@ -185,12 +184,6 @@
   // but _not_ `Function()` to the [checkedFunctionTypes] set. An is-test
   // against a typedef will add its alias to the [checkedFunctionTypes] set.
   Iterable<FunctionType> get checkedFunctionTypes;
-
-  /// Classes whose type variables are explicitly or implicitly used in
-  /// is-tests.
-  ///
-  /// See [TypeVariableTests.classTests].
-  Iterable<ClassEntity> get classesUsingTypeVariableTests;
 }
 
 class TrivialTypesChecks implements RuntimeTypesChecks {
@@ -214,9 +207,6 @@
 
   @override
   Iterable<FunctionType> get checkedFunctionTypes => const <FunctionType>[];
-
-  @override
-  Iterable<ClassEntity> get classesUsingTypeVariableTests => _allClasses;
 }
 
 /// Interface for computing the needed runtime type checks.
@@ -694,9 +684,7 @@
   final Set<FunctionEntity> methodsNeedingTypeArguments;
   final Set<Local> localFunctionsNeedingSignature;
   final Set<Local> localFunctionsNeedingTypeArguments;
-
-  /// The set of classes that use one of their type variables as literals.
-  final Set<ClassEntity> classesUsingTypeVariableLiterals;
+  final Set<Selector> selectorsNeedingTypeArguments;
 
   RuntimeTypesNeedImpl(
       this._elementEnvironment,
@@ -706,7 +694,7 @@
       this.methodsNeedingTypeArguments,
       this.localFunctionsNeedingSignature,
       this.localFunctionsNeedingTypeArguments,
-      this.classesUsingTypeVariableLiterals);
+      this.selectorsNeedingTypeArguments);
 
   bool checkClass(covariant ClassEntity cls) => true;
 
@@ -741,8 +729,10 @@
   }
 
   @override
-  bool classUsesTypeVariableLiteral(ClassEntity cls) {
-    return classesUsingTypeVariableLiterals.contains(cls);
+  bool selectorNeedsTypeArguments(Selector selector) {
+    if (selector.callStructure.typeArgumentCount == 0) return false;
+    if (_backendUsage.isRuntimeTypeUsed) return true;
+    return selectorsNeedingTypeArguments.contains(selector);
   }
 }
 
@@ -755,7 +745,7 @@
       Set<FunctionEntity> methodsNeedingTypeArguments,
       Set<Local> localFunctionsNeedingSignature,
       Set<Local> localFunctionsNeedingTypeArguments,
-      Set<ClassEntity> classesUsingTypeVariableExpression)
+      Set<Selector> selectorsNeedingTypeArguments)
       : super(
             elementEnvironment,
             backendUsage,
@@ -764,7 +754,7 @@
             methodsNeedingTypeArguments,
             localFunctionsNeedingSignature,
             localFunctionsNeedingTypeArguments,
-            classesUsingTypeVariableExpression);
+            selectorsNeedingTypeArguments);
 
   bool checkClass(ClassElement cls) => cls.isDeclaration;
 }
@@ -773,6 +763,7 @@
   List<RtiNode> _nodes = <RtiNode>[];
   Map<ClassEntity, ClassNode> _classes = <ClassEntity, ClassNode>{};
   Map<Entity, MethodNode> _methods = <Entity, MethodNode>{};
+  Map<Selector, Set<Entity>> _appliedSelectorMap;
 
   /// All explicit is-tests.
   final Set<DartType> explicitIsChecks;
@@ -780,6 +771,19 @@
   /// All implicit is-tests.
   final Set<DartType> implicitIsChecks = new Set<DartType>();
 
+  TypeVariableTests(ElementEnvironment elementEnvironment,
+      CommonElements commonElements, DartTypes types, WorldBuilder worldBuilder,
+      {bool forRtiNeeds: true})
+      : explicitIsChecks = new Set<DartType>.from(worldBuilder.isChecks) {
+    _setupDependencies(elementEnvironment, commonElements, worldBuilder);
+    _propagateTests(elementEnvironment, worldBuilder);
+    if (forRtiNeeds) {
+      _propagateLiterals(elementEnvironment, worldBuilder);
+    }
+    _collectResults(elementEnvironment, types, worldBuilder,
+        forRtiNeeds: forRtiNeeds);
+  }
+
   /// Classes whose type variables are explicitly or implicitly used in
   /// is-tests.
   ///
@@ -843,7 +847,7 @@
   ///     class B<T> {}
   ///     main() => new A<String>().m() is B<int>;
   ///
-  /// Here `A` need type arguments at runtime because the key entity `B` needs
+  /// Here `A` needs type arguments at runtime because the key entity `B` needs
   /// it in order to generate the check against `B<int>`.
   ///
   /// This can also involve generic methods:
@@ -866,50 +870,54 @@
     return dependencies.map((n) => n.entity).toSet();
   }
 
-  TypeVariableTests(ElementEnvironment elementEnvironment,
-      CommonElements commonElements, DartTypes types, WorldBuilder worldBuilder)
-      : explicitIsChecks = new Set<DartType>.from(worldBuilder.isChecks) {
-    ClassNode getClassNode(ClassEntity cls) {
-      return _classes.putIfAbsent(cls, () {
-        ClassNode node = new ClassNode(cls);
-        _nodes.add(node);
-        return node;
-      });
-    }
+  /// Calls [f] for each selector that applies to generic [targets].
+  void forEachAppliedSelector(void f(Selector selector, Set<Entity> targets)) {
+    _appliedSelectorMap.forEach(f);
+  }
 
-    MethodNode getMethodNode(Entity function) {
-      return _methods.putIfAbsent(function, () {
-        MethodNode node;
-        if (function is FunctionEntity) {
-          Name instanceName;
-          bool isCallTarget;
-          if (function.isInstanceMember) {
-            isCallTarget = worldBuilder.closurizedMembers.contains(function);
-            instanceName = function.memberName;
-          } else {
-            isCallTarget = worldBuilder.closurizedStatics.contains(function);
-          }
-          node = new MethodNode(function, function.parameterStructure,
-              isCallTarget: isCallTarget, instanceName: instanceName);
+  ClassNode _getClassNode(ClassEntity cls) {
+    return _classes.putIfAbsent(cls, () {
+      ClassNode node = new ClassNode(cls);
+      _nodes.add(node);
+      return node;
+    });
+  }
+
+  MethodNode _getMethodNode(ElementEnvironment elementEnvironment,
+      WorldBuilder worldBuilder, Entity function) {
+    return _methods.putIfAbsent(function, () {
+      MethodNode node;
+      if (function is FunctionEntity) {
+        Name instanceName;
+        bool isCallTarget;
+        if (function.isInstanceMember) {
+          isCallTarget = worldBuilder.closurizedMembers.contains(function);
+          instanceName = function.memberName;
         } else {
-          ParameterStructure parameterStructure =
-              new ParameterStructure.fromType(
-                  elementEnvironment.getLocalFunctionType(function));
-          node =
-              new MethodNode(function, parameterStructure, isCallTarget: true);
+          isCallTarget = worldBuilder.closurizedStatics.contains(function);
         }
-        _nodes.add(node);
-        return node;
-      });
-    }
+        node = new MethodNode(function, function.parameterStructure,
+            isCallTarget: isCallTarget, instanceName: instanceName);
+      } else {
+        ParameterStructure parameterStructure = new ParameterStructure.fromType(
+            elementEnvironment.getLocalFunctionType(function));
+        node = new MethodNode(function, parameterStructure, isCallTarget: true);
+      }
+      _nodes.add(node);
+      return node;
+    });
+  }
 
+  void _setupDependencies(ElementEnvironment elementEnvironment,
+      CommonElements commonElements, WorldBuilder worldBuilder) {
     void registerDependencies(RtiNode node, DartType type) {
       type.forEachTypeVariable((TypeVariableType typeVariable) {
         Entity typeDeclaration = typeVariable.element.typeDeclaration;
         if (typeDeclaration is ClassEntity) {
-          node.addDependency(getClassNode(typeDeclaration));
+          node.addDependency(_getClassNode(typeDeclaration));
         } else {
-          node.addDependency(getMethodNode(typeDeclaration));
+          node.addDependency(_getMethodNode(
+              elementEnvironment, worldBuilder, typeDeclaration));
         }
       });
     }
@@ -935,55 +943,88 @@
     // TODO(johnniwinther): Make this dependency visible from code, possibly
     // using generic methods.
     if (commonElements.jsArrayClass != null) {
-      getClassNode(commonElements.jsArrayClass)
-          .addDependency(getClassNode(commonElements.listClass));
+      _getClassNode(commonElements.jsArrayClass)
+          .addDependency(_getClassNode(commonElements.listClass));
     }
     if (commonElements.mapLiteralClass != null) {
-      getClassNode(commonElements.mapLiteralClass)
-          .addDependency(getClassNode(commonElements.mapClass));
+      _getClassNode(commonElements.mapLiteralClass)
+          .addDependency(_getClassNode(commonElements.mapClass));
     }
 
     worldBuilder.isChecks.forEach((DartType type) {
       if (type is InterfaceType) {
-        registerDependencies(getClassNode(type.element), type);
+        registerDependencies(_getClassNode(type.element), type);
       }
     });
     worldBuilder.instantiatedTypes.forEach((InterfaceType type) {
-      registerDependencies(getClassNode(type.element), type);
+      registerDependencies(_getClassNode(type.element), type);
     });
 
     worldBuilder.forEachStaticTypeArgument(
         (Entity entity, Iterable<DartType> typeArguments) {
       for (DartType type in typeArguments) {
-        registerDependencies(getMethodNode(entity), type);
+        registerDependencies(
+            _getMethodNode(elementEnvironment, worldBuilder, entity), type);
       }
     });
 
+    // TODO(johnniwinther): Cached here because the world builders computes
+    // this lazily. Track this set directly in the world builders .
+    Iterable<FunctionEntity> genericInstanceMethods =
+        worldBuilder.genericInstanceMethods;
     worldBuilder.forEachDynamicTypeArgument(
         (Selector selector, Iterable<DartType> typeArguments) {
-      for (DartType type in typeArguments) {
-        // TODO(johnniwinther): Ensure that methods added here will be
-        // processed for matching selectors.
-        for (MethodNode method in _methods.values.toList()) {
-          if (method.selectorApplies(selector)) {
-            registerDependencies(method, type);
+      void processEntity(Entity entity) {
+        MethodNode node =
+            _getMethodNode(elementEnvironment, worldBuilder, entity);
+        if (node.selectorApplies(selector)) {
+          for (DartType type in typeArguments) {
+            registerDependencies(node, type);
           }
         }
       }
-    });
 
+      genericInstanceMethods.forEach(processEntity);
+      worldBuilder.genericLocalFunctions.forEach(processEntity);
+      worldBuilder.closurizedStatics.forEach(processEntity);
+    });
+  }
+
+  void _propagateTests(
+      ElementEnvironment elementEnvironment, WorldBuilder worldBuilder) {
     worldBuilder.isChecks.forEach((DartType type) {
       if (type.isTypeVariable) {
         TypeVariableType typeVariableType = type;
         TypeVariableEntity variable = typeVariableType.element;
         if (variable.typeDeclaration is ClassEntity) {
-          getClassNode(variable.typeDeclaration).markDirectTest();
+          _getClassNode(variable.typeDeclaration).markDirectTest();
         } else {
-          getMethodNode(variable.typeDeclaration).markDirectTest();
+          _getMethodNode(
+                  elementEnvironment, worldBuilder, variable.typeDeclaration)
+              .markDirectTest();
         }
       }
     });
+  }
 
+  void _propagateLiterals(
+      ElementEnvironment elementEnvironment, WorldBuilder worldBuilder) {
+    worldBuilder.typeVariableTypeLiterals
+        .forEach((TypeVariableType typeVariableType) {
+      TypeVariableEntity variable = typeVariableType.element;
+      if (variable.typeDeclaration is ClassEntity) {
+        _getClassNode(variable.typeDeclaration).markDirectLiteral();
+      } else {
+        _getMethodNode(
+                elementEnvironment, worldBuilder, variable.typeDeclaration)
+            .markDirectLiteral();
+      }
+    });
+  }
+
+  void _collectResults(ElementEnvironment elementEnvironment, DartTypes types,
+      WorldBuilder worldBuilder,
+      {bool forRtiNeeds: true}) {
     // Compute type arguments of classes that use one of their type variables in
     // is-checks and add the is-checks that they imply.
     _classes.forEach((ClassEntity cls, ClassNode node) {
@@ -1006,15 +1047,28 @@
 
     worldBuilder.forEachStaticTypeArgument(
         (Entity function, Iterable<DartType> typeArguments) {
-      if (!getMethodNode(function).hasTest) return;
+      if (!_getMethodNode(elementEnvironment, worldBuilder, function).hasTest) {
+        return;
+      }
       implicitIsChecks.addAll(typeArguments);
     });
+
+    if (forRtiNeeds) {
+      _appliedSelectorMap = <Selector, Set<Entity>>{};
+    }
+
     worldBuilder.forEachDynamicTypeArgument(
         (Selector selector, Iterable<DartType> typeArguments) {
       for (MethodNode node in _methods.values) {
-        if (!node.hasTest) continue;
         if (node.selectorApplies(selector)) {
-          implicitIsChecks.addAll(typeArguments);
+          if (forRtiNeeds) {
+            _appliedSelectorMap
+                .putIfAbsent(selector, () => new Set<Entity>())
+                .add(node.entity);
+          }
+          if (node.hasTest) {
+            implicitIsChecks.addAll(typeArguments);
+          }
         }
       }
     });
@@ -1024,13 +1078,24 @@
     StringBuffer sb = new StringBuffer();
 
     void addNode(RtiNode node) {
-      if (node._testState != 0 || node.dependencies.isNotEmpty || verbose) {
+      if (node.hasUse || node.dependencies.isNotEmpty || verbose) {
         sb.write(' $node');
+        String comma = '';
         if (node._testState & 1 != 0) {
-          sb.write(' direct');
+          sb.write(' direct test');
+          comma = ',';
         }
         if (node._testState & 2 != 0) {
-          sb.write(' indirect');
+          sb.write('$comma indirect test');
+          comma = ',';
+        }
+        if (node._literalState & 1 != 0) {
+          sb.write('$comma direct literal');
+          comma = ',';
+        }
+        if (node._literalState & 2 != 0) {
+          sb.write('$comma indirect literal');
+          comma = ',';
         }
         if (node.dependencies.isNotEmpty || verbose) {
           sb.writeln(':');
@@ -1062,6 +1127,7 @@
   Entity get entity;
   Set<RtiNode> _dependencies;
   int _testState = 0;
+  int _literalState = 0;
 
   Iterable<RtiNode> get dependencies => _dependencies ?? const <RtiNode>[];
 
@@ -1070,6 +1136,13 @@
 
   bool get hasTest => _testState != 0;
 
+  bool get hasDirectLiteral => _literalState & 1 != 0;
+  bool get hasIndirectLiteral => _literalState & 2 != 0;
+
+  bool get hasLiteral => _literalState != 0;
+
+  bool get hasUse => hasTest || hasLiteral;
+
   bool addDependency(RtiNode node) {
     if (entity == node.entity) {
       // Skip trivial dependencies; if [entity] needs type arguments so does
@@ -1103,6 +1176,29 @@
     }
   }
 
+  void markDirectLiteral() {
+    setLiteralState(1);
+  }
+
+  void markIndirectLiteral() {
+    setLiteralState(2);
+  }
+
+  void setLiteralState(int value) {
+    if (_literalState != value) {
+      if (_literalState == 0) {
+        _literalState |= value;
+        if (_dependencies != null) {
+          for (RtiNode node in _dependencies) {
+            node.markIndirectLiteral();
+          }
+        }
+      } else {
+        _literalState = value;
+      }
+    }
+  }
+
   String get kind;
 
   String toString() {
@@ -1142,6 +1238,17 @@
   }
 
   String get kind => 'method';
+
+  String toString() {
+    StringBuffer sb = new StringBuffer();
+    sb.write('MethodNode(');
+    sb.write('function=$function');
+    sb.write(',parameterStructure=$parameterStructure');
+    sb.write(',isCallTarget=$isCallTarget');
+    sb.write(',instanceName=$instanceName');
+    sb.write(')');
+    return sb.toString();
+  }
 }
 
 class RuntimeTypesNeedBuilderImpl extends _RuntimeTypesBase
@@ -1156,7 +1263,9 @@
 
   final Set<Local> localFunctionsUsingTypeVariableLiterals = new Set<Local>();
 
-  TypeVariableTests typeVariableTests;
+  Map<Selector, Set<Entity>> selectorsNeedingTypeArgumentsForTesting;
+
+  TypeVariableTests typeVariableTestsForTesting;
 
   RuntimeTypesNeedBuilderImpl(this._elementEnvironment, DartTypes types)
       : super(types);
@@ -1182,7 +1291,7 @@
   RuntimeTypesNeed computeRuntimeTypesNeed(
       ResolutionWorldBuilder resolutionWorldBuilder, ClosedWorld closedWorld,
       {bool enableTypeAssertions}) {
-    typeVariableTests = new TypeVariableTests(
+    TypeVariableTests typeVariableTests = new TypeVariableTests(
         closedWorld.elementEnvironment,
         closedWorld.commonElements,
         closedWorld.dartTypes,
@@ -1192,6 +1301,7 @@
     Set<FunctionEntity> methodsNeedingTypeArguments = new Set<FunctionEntity>();
     Set<Local> localFunctionsNeedingSignature = new Set<Local>();
     Set<Local> localFunctionsNeedingTypeArguments = new Set<Local>();
+    Set<Entity> processedEntities = new Set<Entity>();
 
     // Find the classes that need type arguments at runtime. Such
     // classes are:
@@ -1199,6 +1309,12 @@
     // (2) dependencies of classes in (1),
     // (3) subclasses of (2) and (3).
     void potentiallyNeedTypeArguments(Entity entity) {
+      // Functions with type arguments can have dependencies of each other (if
+      // the functions call each other) so we keep a set to prevent infinitely
+      // recursing over the same entities.
+      if (processedEntities.contains(entity)) return;
+
+      processedEntities.add(entity);
       if (entity is ClassEntity) {
         ClassEntity cls = entity;
         assert(checkClass(cls));
@@ -1290,6 +1406,30 @@
     localFunctionsUsingTypeVariableLiterals
         .forEach(potentiallyNeedTypeArguments);
 
+    Set<Selector> selectorsNeedingTypeArguments = new Set<Selector>();
+    typeVariableTests
+        .forEachAppliedSelector((Selector selector, Set<Entity> targets) {
+      for (Entity target in targets) {
+        if (methodsNeedingTypeArguments.contains(target) ||
+            localFunctionsNeedingTypeArguments.contains(target)) {
+          selectorsNeedingTypeArguments.add(selector);
+          if (cacheRtiDataForTesting) {
+            selectorsNeedingTypeArgumentsForTesting ??=
+                <Selector, Set<Entity>>{};
+            selectorsNeedingTypeArgumentsForTesting
+                .putIfAbsent(selector, () => new Set<Entity>())
+                .add(target);
+          } else {
+            return;
+          }
+        }
+      }
+    });
+
+    if (cacheRtiDataForTesting) {
+      typeVariableTestsForTesting = typeVariableTests;
+    }
+
     return _createRuntimeTypesNeed(
         _elementEnvironment,
         closedWorld.backendUsage,
@@ -1298,7 +1438,7 @@
         methodsNeedingTypeArguments,
         localFunctionsNeedingSignature,
         localFunctionsNeedingTypeArguments,
-        classesUsingTypeVariableLiterals);
+        selectorsNeedingTypeArguments);
   }
 
   RuntimeTypesNeed _createRuntimeTypesNeed(
@@ -1309,7 +1449,7 @@
       Set<FunctionEntity> methodsNeedingTypeArguments,
       Set<Local> localFunctionsNeedingSignature,
       Set<Local> localFunctionsNeedingTypeArguments,
-      Set<ClassEntity> classesUsingTypeVariableExpression) {
+      Set<Selector> selectorsNeedingTypeArguments) {
     return new RuntimeTypesNeedImpl(
         _elementEnvironment,
         backendUsage,
@@ -1318,7 +1458,7 @@
         methodsNeedingTypeArguments,
         localFunctionsNeedingSignature,
         localFunctionsNeedingTypeArguments,
-        classesUsingTypeVariableExpression);
+        selectorsNeedingTypeArguments);
   }
 }
 
@@ -1338,7 +1478,7 @@
       Set<FunctionEntity> methodsNeedingTypeArguments,
       Set<Local> localFunctionsNeedingSignature,
       Set<Local> localFunctionsNeedingTypeArguments,
-      Set<ClassEntity> classesUsingTypeVariableExpression) {
+      Set<Selector> selectorsNeedingTypeArguments) {
     return new _ResolutionRuntimeTypesNeed(
         _elementEnvironment,
         backendUsage,
@@ -1347,7 +1487,7 @@
         methodsNeedingTypeArguments,
         localFunctionsNeedingSignature,
         localFunctionsNeedingTypeArguments,
-        classesUsingTypeVariableExpression);
+        selectorsNeedingTypeArguments);
   }
 }
 
@@ -1356,10 +1496,9 @@
   final TypeChecks requiredChecks;
   final Iterable<ClassEntity> checkedClasses;
   final Iterable<FunctionType> checkedFunctionTypes;
-  final TypeVariableTests _typeVariableTests;
 
   _RuntimeTypesChecks(this._substitutions, this.requiredChecks,
-      this.checkedClasses, this.checkedFunctionTypes, this._typeVariableTests);
+      this.checkedClasses, this.checkedFunctionTypes);
 
   @override
   Iterable<ClassEntity> get requiredClasses {
@@ -1372,10 +1511,6 @@
     collector.collect(type);
     return collector.classes;
   }
-
-  @override
-  Iterable<ClassEntity> get classesUsingTypeVariableTests =>
-      _typeVariableTests.classTests;
 }
 
 class RuntimeTypesImpl extends _RuntimeTypesBase
@@ -1413,7 +1548,8 @@
   RuntimeTypesChecks computeRequiredChecks(
       CodegenWorldBuilder codegenWorldBuilder) {
     TypeVariableTests typeVariableTests = new TypeVariableTests(
-        _elementEnvironment, _commonElements, _types, codegenWorldBuilder);
+        _elementEnvironment, _commonElements, _types, codegenWorldBuilder,
+        forRtiNeeds: false);
     Set<DartType> explicitIsChecks = typeVariableTests.explicitIsChecks;
     Set<DartType> implicitIsChecks = typeVariableTests.implicitIsChecks;
 
@@ -1479,8 +1615,8 @@
 
     cachedRequiredChecks = _computeChecks(classUseMap);
     rtiChecksBuilderClosed = true;
-    return new _RuntimeTypesChecks(this, cachedRequiredChecks, checkedClasses,
-        checkedFunctionTypes, typeVariableTests);
+    return new _RuntimeTypesChecks(
+        this, cachedRequiredChecks, checkedClasses, checkedFunctionTypes);
   }
 
   Set<FunctionType> computeInstantiatedClosureTypes(
diff --git a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
index 7a88ac1..4c57841 100644
--- a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
@@ -110,7 +110,11 @@
   final RuntimeTypesEncoder _rtiEncoder;
   final JsInteropAnalysis _jsInteropAnalysis;
   final bool _useKernel;
+
+  /// ignore: UNUSED_FIELD
   final bool _strongMode;
+
+  /// ignore: UNUSED_FIELD
   final bool _disableRtiOptimization;
 
   RuntimeTypeGenerator(
@@ -132,9 +136,6 @@
   Iterable<ClassEntity> get checkedClasses =>
       _typeTestRegistry.rtiChecks.checkedClasses;
 
-  Iterable<ClassEntity> get classesUsingTypeVariableTests =>
-      _typeTestRegistry.rtiChecks.classesUsingTypeVariableTests;
-
   Iterable<FunctionType> get checkedFunctionTypes =>
       _typeTestRegistry.rtiChecks.checkedFunctionTypes;
 
@@ -186,27 +187,13 @@
         if (_useKernel &&
             signature != null &&
             generatedCode[signature] != null) {
+          // Use precomputed signature function.
           encoding = generatedCode[signature];
         } else {
-          // With Dart 2, if disableRtiOptimization is true, then we might
-          // generate some code for classes that are not actually called,
-          // so following this path is "okay." Also, classes that have call
-          // methods are no longer a subtype of Function (and therefore we don't
-          // create a closure class), so this path is also acceptable.
-
-          // TODO(efortuna, johnniwinther): Verify that closures that use this
-          // path are in fact dead code. If this *not* actually dead code, we
-          // get to this point because TrivialRuntimeTypesChecksBuilder
-          // specifies that every subtype of Object and its types is "used"
-          // (ClassUse = true). However, on the codegen side, we only codegen
-          // entities that are actually reachable via treeshaking. To solve this
-          // issue, if disableRtiOptimization is turned on, we could literally
-          // in world_impact.dart loop through every subclass of Object and say
-          // that all types related to JClosureClasses are "used" so the go
-          // through the codegen queue and therefore we generate code for it.
-          // This seems not ideal though.
-          assert(!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-              (_useKernel && _strongMode && !method.enclosingClass.isClosure));
+          // TODO(efortuna): Reinsert assertion.
+          // TODO(johnniwinther): Avoid unneeded signatures from closure
+          // classes.
+          // Use shared signature function.
           encoding = _rtiEncoder.getSignatureEncoding(
               emitterTask.emitter, type, thisAccess);
         }
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index 0a09460..e48188e 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -15,6 +15,7 @@
 import '../constants/values.dart';
 import '../deferred_load.dart';
 import '../elements/entities.dart';
+import '../elements/names.dart';
 import '../elements/types.dart';
 import '../enqueue.dart';
 import '../io/kernel_source_information.dart'
@@ -40,6 +41,7 @@
 import '../ssa/ssa.dart';
 import '../types/types.dart';
 import '../universe/class_set.dart';
+import '../universe/selector.dart';
 import '../universe/world_builder.dart';
 import '../util/emptyset.dart';
 import '../world.dart';
@@ -502,8 +504,18 @@
         map.toBackendFunctionSet(rtiNeed.methodsNeedingTypeArguments);
     Set<FunctionEntity> methodsNeedingSignature =
         map.toBackendFunctionSet(rtiNeed.methodsNeedingSignature);
-    Set<ClassEntity> classesUsingTypeVariableExpression =
-        map.toBackendClassSet(rtiNeed.classesUsingTypeVariableLiterals);
+    Set<Selector> selectorsNeedingTypeArguments =
+        rtiNeed.selectorsNeedingTypeArguments.map((Selector selector) {
+      if (selector.memberName.isPrivate) {
+        return new Selector(
+            selector.kind,
+            new PrivateName(selector.memberName.text,
+                map.toBackendLibrary(selector.memberName.library),
+                isSetter: selector.memberName.isSetter),
+            selector.callStructure);
+      }
+      return selector;
+    }).toSet();
     return new RuntimeTypesNeedImpl(
         _elementEnvironment,
         backendUsage,
@@ -512,7 +524,7 @@
         methodsNeedingTypeArguments,
         null,
         null,
-        classesUsingTypeVariableExpression);
+        selectorsNeedingTypeArguments);
   }
 
   /// Construct a closure class and set up the necessary class inference
diff --git a/pkg/compiler/lib/src/kernel/element_map.dart b/pkg/compiler/lib/src/kernel/element_map.dart
index 21cb15e..bfb8531 100644
--- a/pkg/compiler/lib/src/kernel/element_map.dart
+++ b/pkg/compiler/lib/src/kernel/element_map.dart
@@ -358,17 +358,17 @@
   TypeMask getReturnTypeOf(FunctionEntity function);
 
   /// Returns the inferred receiver type of the dynamic [invocation].
-  TypeMask typeOfInvocation(
+  TypeMask receiverTypeOfInvocation(
       ir.MethodInvocation invocation, ClosedWorld closedWorld);
 
   /// Returns the inferred receiver type of the dynamic [read].
-  TypeMask typeOfGet(ir.PropertyGet read);
+  TypeMask receiverTypeOfGet(ir.PropertyGet read);
 
   /// Returns the inferred receiver type of the direct [read].
-  TypeMask typeOfDirectGet(ir.DirectPropertyGet read);
+  TypeMask receiverTypeOfDirectGet(ir.DirectPropertyGet read);
 
   /// Returns the inferred receiver type of the dynamic [write].
-  TypeMask typeOfSet(ir.PropertySet write, ClosedWorld closedWorld);
+  TypeMask receiverTypeOfSet(ir.PropertySet write, ClosedWorld closedWorld);
 
   /// Returns the inferred type of [listLiteral].
   TypeMask typeOfListLiteral(covariant MemberEntity owner,
diff --git a/pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart b/pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart
index ac1f34c..d0de459 100644
--- a/pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart
@@ -129,20 +129,21 @@
         function, _globalInferenceResults);
   }
 
-  TypeMask typeOfInvocation(ir.MethodInvocation node, ClosedWorld closedWorld) {
+  TypeMask receiverTypeOfInvocation(
+      ir.MethodInvocation node, ClosedWorld closedWorld) {
     return _targetResults.typeOfSend(node);
   }
 
-  TypeMask typeOfGet(ir.PropertyGet node) {
+  TypeMask receiverTypeOfGet(ir.PropertyGet node) {
     return _targetResults.typeOfSend(node);
   }
 
-  TypeMask typeOfDirectGet(ir.DirectPropertyGet node) {
+  TypeMask receiverTypeOfDirectGet(ir.DirectPropertyGet node) {
     return _targetResults.typeOfSend(node);
   }
 
-  TypeMask typeOfSet(ir.PropertySet node, ClosedWorld closedWorld) {
-    return closedWorld.commonMasks.dynamicType;
+  TypeMask receiverTypeOfSet(ir.PropertySet node, ClosedWorld closedWorld) {
+    return _targetResults.typeOfSend(node);
   }
 
   TypeMask typeOfListLiteral(
diff --git a/pkg/compiler/lib/src/resolution/class_hierarchy.dart b/pkg/compiler/lib/src/resolution/class_hierarchy.dart
index 6233855..9ba287b 100644
--- a/pkg/compiler/lib/src/resolution/class_hierarchy.dart
+++ b/pkg/compiler/lib/src/resolution/class_hierarchy.dart
@@ -13,7 +13,6 @@
     show
         BaseClassElementX,
         ErroneousElementX,
-        LibraryElementX,
         MixinApplicationElementX,
         SynthesizedConstructorElementX,
         TypeVariableElementX,
@@ -32,10 +31,6 @@
 import 'scope.dart' show Scope, TypeDeclarationScope;
 import 'type_resolver.dart' show FunctionTypeParameterScope;
 
-/// If `true` compatible mixin applications are shared within a library. This
-/// matches the mixins generated by fasta.
-bool useOptimizedMixins = false;
-
 class TypeDefinitionVisitor extends MappingVisitor<ResolutionDartType> {
   Scope scope;
   final TypeDeclarationElement enclosingElement;
@@ -152,11 +147,7 @@
     if (element.supertype == null && node.superclass != null) {
       MixinApplication superMixin = node.superclass.asMixinApplication();
       if (superMixin != null) {
-        if (useOptimizedMixins) {
-          element.supertype = createMixinsOptimized(element, superMixin);
-        } else {
-          element.supertype = createMixins(element, superMixin);
-        }
+        element.supertype = createMixins(element, superMixin);
       } else {
         element.supertype = resolveSupertype(element, node.superclass);
       }
@@ -288,223 +279,10 @@
 
     // Generate anonymous mixin application elements for the
     // intermediate mixin applications (excluding the last).
-    if (useOptimizedMixins) {
-      createMixinsOptimized(element, node, isNamed: true);
-    } else {
-      createMixins(element, node, isNamed: true);
-    }
+    createMixins(element, node, isNamed: true);
     return element.computeType(resolution);
   }
 
-  /// Create the mixin applications for [superMixin].
-  ///
-  /// This algorithm is ported from
-  /// `package:front_end/src/fasta/kernel/kernel_library_builder.dart` and
-  /// added create allow for equivalence testing between the AST and kernel
-  /// based compilations in face of shared mixins. It will be removed when we
-  /// no longer need equivalence testing.
-  ResolutionDartType createMixinsOptimized(
-      BaseClassElementX element, MixinApplication superMixin,
-      {bool isNamed: false}) {
-    List<ResolutionDartType> typeVariables = element.typeVariables;
-    LibraryElementX library = element.library;
-    Map<String, MixinApplicationElementX> mixinApplicationClasses =
-        library.mixinApplicationCache;
-
-    String name = element.isNamedMixinApplication ? element.name : null;
-    ResolutionDartType supertype =
-        resolveSupertype(element, superMixin.superclass);
-    Link<Node> link = superMixin.mixins.nodes;
-    List<ResolutionDartType> mixins = <ResolutionDartType>[];
-    List<Node> mixinNodes = <Node>[];
-    while (!link.isEmpty) {
-      mixins.add(checkMixinType(link.head));
-      mixinNodes.add(link.head);
-      link = link.tail;
-    }
-
-    List<List<String>> signatureParts = <List<String>>[];
-    Map<String, ResolutionDartType> freeTypes = <String, ResolutionDartType>{};
-
-    {
-      Map<String, String> unresolved = <String, String>{};
-      int unresolvedCount = 0;
-
-      /// Compute a signature of the type arguments used by the supertype and
-      /// mixins. These types are free variables. At this point we can't
-      /// trust that the number of type arguments match the type parameters,
-      /// so we also need to be able to detect missing type arguments.  To do
-      /// so, we separate each list of type arguments by `^` and type
-      /// arguments by `&`. For example, the mixin `C<S> with M<T, U>` would
-      /// look like this:
-      ///
-      ///     ^#U0^#U1&#U2
-      ///
-      /// Where `#U0`, `#U1`, and `#U2` are the free variables arising from
-      /// `S`, `T`, and `U` respectively.
-      ///
-      /// As we can resolve any type parameters used at this point, those are
-      /// named `#T0` and so forth. This reduces the number of free variables
-      /// which is crucial for memory usage and the Dart VM's bootstrap
-      /// sequence.
-      ///
-      /// For example, consider this use of mixin applications:
-      ///
-      ///     class _InternalLinkedHashMap<K, V> extends _HashVMBase
-      ///         with
-      ///             MapMixin<K, V>,
-      ///             _LinkedHashMapMixin<K, V>,
-      ///             _HashBase,
-      ///             _OperatorEqualsAndHashCode {}
-      ///
-      /// In this case, only two variables are free, and we produce this
-      /// signature: `^^#T0&#T1^#T0&#T1^^`. Assume another class uses the
-      /// sames mixins but with missing type arguments for `MapMixin`, its
-      /// signature would be: `^^^#T0&#T1^^`.
-      ///
-      /// Note that we do not need to compute a signature for a named mixin
-      /// application with only one mixin as we don't have to invent a name
-      /// for any classes in this situation.
-      void analyzeArguments(ResolutionDartType type, {bool isLast}) {
-        if (isNamed && isLast) {
-          // The last mixin of a named mixin application doesn't contribute
-          // to free variables.
-          return;
-        }
-        if (type is GenericType) {
-          List<String> part = <String>[];
-          for (int i = 0; i < type.typeArguments.length; i++) {
-            var argument = type.typeArguments[i];
-            String name;
-            if (argument is ResolutionTypeVariableType) {
-              int index = typeVariables.indexOf(argument) ?? -1;
-              if (index != -1) {
-                name = "#T${index}";
-              }
-            } else if (argument is GenericType && argument.isRaw) {
-              name = unresolved[argument.name] ??= "#U${unresolvedCount++}";
-            }
-            name ??= "#U${unresolvedCount++}";
-            freeTypes[name] = argument;
-            part.add(name);
-          }
-          signatureParts.add(part);
-        }
-      }
-
-      analyzeArguments(supertype, isLast: false);
-      for (int i = 0; i < mixins.length; i++) {
-        analyzeArguments(mixins[i], isLast: i == mixins.length - 1);
-      }
-    }
-
-    List<List<String>> currentSignatureParts = <List<String>>[];
-    String computeSignature(int index) {
-      if (freeTypes.isEmpty) return "";
-      currentSignatureParts.add(signatureParts[index]);
-      if (currentSignatureParts.any((l) => l.isNotEmpty)) {
-        return "^${currentSignatureParts.map((l) => l.join('&')).join('^')}";
-      } else {
-        return "";
-      }
-    }
-
-    Map<String, ResolutionTypeVariableType> computeTypeVariables(
-        ClassElement cls, Node node) {
-      Map<String, ResolutionTypeVariableType> variables =
-          <String, ResolutionTypeVariableType>{};
-      int index = 0;
-      for (List<String> strings in currentSignatureParts) {
-        for (String name in strings) {
-          variables.putIfAbsent(name, () {
-            ResolutionTypeVariableType typeVariable =
-                new ResolutionTypeVariableType(
-                    new TypeVariableElementX(name, cls, index++, node));
-            TypeVariableElementX typeVariableElement = typeVariable.element;
-            typeVariableElement.typeCache = typeVariable;
-            typeVariableElement.boundCache = const ResolutionDynamicType();
-            return typeVariable;
-          });
-        }
-      }
-      return variables;
-    }
-
-    computeSignature(0); // This combines the supertype with the first mixin.
-
-    for (int i = 0; i < mixins.length; i++) {
-      int signatureIndex = i + 1;
-      Set<String> supertypeArguments = new Set<String>();
-      for (List<String> part in currentSignatureParts) {
-        supertypeArguments.addAll(part);
-      }
-      Node node = mixinNodes[i];
-      ResolutionDartType mixin = mixins[i];
-
-      bool lastAndNamed = i == mixins.length - 1 && isNamed;
-
-      ResolutionInterfaceType createMixinApplication() {
-        Map<String, ResolutionDartType> variables;
-        MixinApplicationElementX mixinElement;
-        ResolutionDartType mixinType;
-        if (lastAndNamed) {
-          mixinElement = element;
-          variables = freeTypes;
-        } else {
-          String signature = computeSignature(signatureIndex);
-          name = supertype.name;
-          int index = name.indexOf("^");
-          if (index != -1) {
-            name = name.substring(0, index);
-          }
-          name = "_$name&${mixin.name}$signature";
-          mixinElement = mixinApplicationClasses[name];
-          if (mixinElement != null) return mixinElement.thisType;
-
-          mixinElement = new UnnamedMixinApplicationElementX(
-              name, element, resolution.idGenerator.getNextFreeId(), node);
-          variables = computeTypeVariables(mixinElement, node);
-          mixinElement.setThisAndRawTypes(variables.values.toList());
-          mixinApplicationClasses[name] = mixinElement;
-        }
-
-        if (supertypeArguments.isNotEmpty) {
-          List<ResolutionDartType> supertypeTypeArguments =
-              <ResolutionDartType>[];
-          for (String part in supertypeArguments) {
-            supertypeTypeArguments.add(variables[part]);
-          }
-          supertype = new ResolutionInterfaceType(
-              supertype.element, supertypeTypeArguments);
-        }
-
-        if (lastAndNamed) {
-          mixinType = mixin;
-        } else {
-          List<ResolutionDartType> mixinTypeArguments = <ResolutionDartType>[];
-          for (String part in signatureParts[signatureIndex]) {
-            mixinTypeArguments.add(variables[part]);
-          }
-          mixinType =
-              new ResolutionInterfaceType(mixin.element, mixinTypeArguments);
-        }
-
-        doApplyMixinTo(mixinElement, supertype, mixinType);
-        mixinElement.resolutionState = STATE_DONE;
-        mixinElement.supertypeLoadState = STATE_DONE;
-        return mixinElement.thisType;
-      }
-
-      supertype = createMixinApplication();
-    }
-
-    if (!isNamed) {
-      typeVariables = freeTypes.values.toList();
-    }
-
-    return new ResolutionInterfaceType(supertype.element, typeVariables);
-  }
-
   ResolutionDartType createMixins(ClassElement element, MixinApplication node,
       {bool isNamed: false}) {
     ResolutionDartType supertype = resolveSupertype(element, node.superclass);
diff --git a/pkg/compiler/lib/src/resolution/resolution_strategy.dart b/pkg/compiler/lib/src/resolution/resolution_strategy.dart
index a3d9504..f425600 100644
--- a/pkg/compiler/lib/src/resolution/resolution_strategy.dart
+++ b/pkg/compiler/lib/src/resolution/resolution_strategy.dart
@@ -737,8 +737,7 @@
 
   @override
   List<TypeVariableType> getFunctionTypeVariables(FunctionEntity function) {
-    throw new UnsupportedError(
-        "_CompilerElementEnvironment.getFunctionTypeVariables");
+    return const <TypeVariableType>[];
   }
 
   @override
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index ba6cb77..cc9ea4b 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -2706,7 +2706,7 @@
 
     _pushDynamicInvocation(
         node,
-        _typeInferenceMap.typeOfGet(node),
+        _typeInferenceMap.receiverTypeOfGet(node),
         new Selector.getter(_elementMap.getName(node.name)),
         <HInstruction>[receiver],
         const <DartType>[],
@@ -2736,7 +2736,7 @@
 
     _pushDynamicInvocation(
         node,
-        _typeInferenceMap.typeOfSet(node, closedWorld),
+        _typeInferenceMap.receiverTypeOfSet(node, closedWorld),
         new Selector.setter(_elementMap.getName(node.name)),
         <HInstruction>[receiver, value],
         const <DartType>[],
@@ -2755,7 +2755,7 @@
     // TODO(sra): Implement direct invocations properly.
     _pushDynamicInvocation(
         node,
-        _typeInferenceMap.typeOfDirectGet(node),
+        _typeInferenceMap.receiverTypeOfDirectGet(node),
         new Selector.getter(_elementMap.getMember(node.target).memberName),
         <HInstruction>[receiver],
         const <DartType>[],
@@ -2934,14 +2934,18 @@
     return values;
   }
 
-  List<DartType> _getDynamicTypeArguments(
-      Selector selector, ir.Arguments arguments) {
-    if (options.strongMode && arguments.types.isNotEmpty) {
-      // TODO(johnniwinther): Only pass type arguments to dynamic call where at
-      // least one potential target need them.
-      return arguments.types.map(_elementMap.getDartType).toList();
+  /// Fills [typeArguments] with the type arguments needed for [selector] and
+  /// returns the selector corresponding to the passed type arguments.
+  Selector _fillDynamicTypeArguments(
+      Selector selector, ir.Arguments arguments, List<DartType> typeArguments) {
+    if (options.strongMode && selector.typeArgumentCount > 0) {
+      if (rtiNeed.selectorNeedsTypeArguments(selector)) {
+        typeArguments.addAll(arguments.types.map(_elementMap.getDartType));
+      } else {
+        return selector.toNonGeneric();
+      }
     }
-    return const <DartType>[];
+    return selector;
   }
 
   List<DartType> _getConstructorTypeArguments(
@@ -4024,11 +4028,12 @@
     node.receiver.accept(this);
     HInstruction receiver = pop();
     Selector selector = _elementMap.getSelector(node);
-    List<DartType> typeArguments =
-        _getDynamicTypeArguments(selector, node.arguments);
+    List<DartType> typeArguments = <DartType>[];
+    selector =
+        _fillDynamicTypeArguments(selector, node.arguments, typeArguments);
     _pushDynamicInvocation(
         node,
-        _typeInferenceMap.typeOfInvocation(node, closedWorld),
+        _typeInferenceMap.receiverTypeOfInvocation(node, closedWorld),
         selector,
         <HInstruction>[receiver]..addAll(_visitArgumentsForDynamicTarget(
             selector, node.arguments, typeArguments)),
@@ -4167,8 +4172,9 @@
         _sourceInformationBuilder.buildCall(node, node);
     if (node.interfaceTarget == null) {
       Selector selector = _elementMap.getSelector(node);
-      List<DartType> typeArguments =
-          _getDynamicTypeArguments(selector, node.arguments);
+      List<DartType> typeArguments = <DartType>[];
+      selector =
+          _fillDynamicTypeArguments(selector, node.arguments, typeArguments);
       List<HInstruction> arguments = _visitArgumentsForDynamicTarget(
           selector, node.arguments, typeArguments);
       _generateSuperNoSuchMethod(
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 3492172..8654584 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -1846,8 +1846,8 @@
       // for this to work.
       assert(selector.applies(target),
           failedAt(node, '$selector does not apply to $target'));
-      _registry.registerStaticUse(
-          new StaticUse.directInvoke(target, selector.callStructure));
+      _registry.registerStaticUse(new StaticUse.directInvoke(
+          target, selector.callStructure, node.typeArguments));
     } else {
       TypeMask mask = getOptimizedSelectorFor(node, selector, node.mask);
       _registry.registerDynamicUse(
diff --git a/pkg/compiler/lib/src/universe/call_structure.dart b/pkg/compiler/lib/src/universe/call_structure.dart
index 1953d7b..38476a9 100644
--- a/pkg/compiler/lib/src/universe/call_structure.dart
+++ b/pkg/compiler/lib/src/universe/call_structure.dart
@@ -57,6 +57,10 @@
   /// The names of the named arguments in canonicalized order.
   List<String> getOrderedNamedArguments() => const <String>[];
 
+  CallStructure get nonGeneric => typeArgumentCount == 0
+      ? this
+      : new CallStructure(argumentCount, namedArguments);
+
   /// A description of the argument structure.
   String structureToString() {
     StringBuffer sb = new StringBuffer();
diff --git a/pkg/compiler/lib/src/universe/codegen_world_builder.dart b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
index bc4937e..fa33d69 100644
--- a/pkg/compiler/lib/src/universe/codegen_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
@@ -266,7 +266,8 @@
 
     switch (dynamicUse.kind) {
       case DynamicUseKind.INVOKE:
-        registerDynamicInvocation(dynamicUse);
+        registerDynamicInvocation(
+            dynamicUse.selector, dynamicUse.typeArguments);
         if (_registerNewSelector(dynamicUse, _invokedNames)) {
           _process(_instanceMembersByName, (m) => m.invoke());
           return true;
@@ -422,12 +423,17 @@
         useSet.addAll(usage.normalUse());
         break;
       case StaticUseKind.DIRECT_INVOKE:
-        _MemberUsage instanceUsage =
-            _getMemberUsage(staticUse.element, memberUsed);
+        MemberEntity member = staticUse.element;
+        _MemberUsage instanceUsage = _getMemberUsage(member, memberUsed);
         memberUsed(instanceUsage.entity, instanceUsage.invoke());
         _instanceMembersByName[instanceUsage.entity.name]
             ?.remove(instanceUsage);
         useSet.addAll(usage.normalUse());
+        if (staticUse.typeArguments?.isNotEmpty ?? false) {
+          registerDynamicInvocation(
+              new Selector.call(member.memberName, staticUse.callStructure),
+              staticUse.typeArguments);
+        }
         break;
       case StaticUseKind.INLINING:
         break;
@@ -571,6 +577,26 @@
     }
     return _constantValues.add(use.value);
   }
+
+  @override
+  Iterable<Local> get genericLocalFunctions => const <Local>[];
+
+  @override
+  Iterable<FunctionEntity> get genericInstanceMethods {
+    List<FunctionEntity> functions = <FunctionEntity>[];
+
+    void processMemberUse(MemberEntity member, _MemberUsage memberUsage) {
+      if (member.isInstanceMember &&
+          member is FunctionEntity &&
+          memberUsage.hasUse &&
+          _elementEnvironment.getFunctionTypeVariables(member).isNotEmpty) {
+        functions.add(member);
+      }
+    }
+
+    _instanceMemberUsage.forEach(processMemberUse);
+    return functions;
+  }
 }
 
 class ElementCodegenWorldBuilderImpl extends CodegenWorldBuilderImpl {
diff --git a/pkg/compiler/lib/src/universe/resolution_world_builder.dart b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
index 0d599e7..95a24e8 100644
--- a/pkg/compiler/lib/src/universe/resolution_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
@@ -98,6 +98,8 @@
   /// Registers that [type] is checked in this world builder. The unaliased type
   /// is returned.
   void registerIsCheck(DartType type);
+
+  void registerTypeVariableTypeLiteral(TypeVariableType typeVariable);
 }
 
 /// The type and kind of an instantiation registered through
@@ -382,6 +384,8 @@
 
   final Set<ConstantValue> _constantValues = new Set<ConstantValue>();
 
+  final Set<Local> genericLocalFunctions = new Set<Local>();
+
   Set<MemberEntity> _processedMembers = new Set<MemberEntity>();
 
   bool get isClosed => _closed;
@@ -408,10 +412,23 @@
 
   bool isMemberProcessed(MemberEntity member) =>
       _processedMembers.contains(member);
+
   void registerProcessedMember(MemberEntity member) {
     _processedMembers.add(member);
   }
 
+  Iterable<FunctionEntity> get genericInstanceMethods {
+    List<FunctionEntity> functions = <FunctionEntity>[];
+    for (MemberEntity member in processedMembers) {
+      if (member.isInstanceMember &&
+          member.isFunction &&
+          _elementEnvironment.getFunctionTypeVariables(member).isNotEmpty) {
+        functions.add(member);
+      }
+    }
+    return functions;
+  }
+
   Iterable<MemberEntity> get processedMembers => _processedMembers;
 
   ClosedWorld get closedWorldForTesting {
@@ -571,7 +588,8 @@
 
     switch (dynamicUse.kind) {
       case DynamicUseKind.INVOKE:
-        registerDynamicInvocation(dynamicUse);
+        registerDynamicInvocation(
+            dynamicUse.selector, dynamicUse.typeArguments);
         if (_registerNewSelector(dynamicUse, _invokedNames)) {
           _process(_instanceMembersByName, (m) => m.invoke());
         }
@@ -620,10 +638,17 @@
       if (type.containsTypeVariables) {
         localFunctionsWithFreeTypeVariables.add(localFunction);
       }
+      if (type.typeVariables.isNotEmpty) {
+        genericLocalFunctions.add(localFunction);
+      }
       localFunctions.add(staticUse.element);
       return;
     } else if (staticUse.kind == StaticUseKind.CLOSURE_CALL) {
-      registerStaticInvocation(staticUse);
+      if (staticUse.typeArguments?.isNotEmpty ?? false) {
+        registerDynamicInvocation(
+            new Selector.call(Names.call, staticUse.callStructure),
+            staticUse.typeArguments);
+      }
       return;
     }
 
diff --git a/pkg/compiler/lib/src/universe/selector.dart b/pkg/compiler/lib/src/universe/selector.dart
index 5e1d07d..263d4ac 100644
--- a/pkg/compiler/lib/src/universe/selector.dart
+++ b/pkg/compiler/lib/src/universe/selector.dart
@@ -270,4 +270,11 @@
   }
 
   Selector toCallSelector() => new Selector.callClosureFrom(this);
+
+  /// Returns the non-generic [Selector] corresponding to this selector.
+  Selector toNonGeneric() {
+    return callStructure.typeArgumentCount > 0
+        ? new Selector(kind, memberName, callStructure.nonGeneric)
+        : this;
+  }
 }
diff --git a/pkg/compiler/lib/src/universe/use.dart b/pkg/compiler/lib/src/universe/use.dart
index 1ed7da7..43958f0 100644
--- a/pkg/compiler/lib/src/universe/use.dart
+++ b/pkg/compiler/lib/src/universe/use.dart
@@ -306,16 +306,16 @@
   }
 
   /// Direct invocation of a method [element] with the given [callStructure].
-  factory StaticUse.directInvoke(
-      FunctionEntity element, CallStructure callStructure) {
+  factory StaticUse.directInvoke(FunctionEntity element,
+      CallStructure callStructure, List<DartType> typeArguments) {
     assert(
         element.isInstanceMember,
         failedAt(element,
             "Direct invoke element $element must be an instance member."));
     assert(element.isFunction,
         failedAt(element, "Direct invoke element $element must be a method."));
-    return new StaticUse.internal(element, StaticUseKind.DIRECT_INVOKE,
-        callStructure: callStructure);
+    return new GenericStaticUse(
+        element, StaticUseKind.DIRECT_INVOKE, callStructure, typeArguments);
   }
 
   /// Direct read access of a field or getter [element].
diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart
index 92e4220..4feb2a8 100644
--- a/pkg/compiler/lib/src/universe/world_builder.dart
+++ b/pkg/compiler/lib/src/universe/world_builder.dart
@@ -7,7 +7,7 @@
 import 'dart:collection';
 
 import '../common.dart';
-import '../common/names.dart' show Identifiers;
+import '../common/names.dart' show Identifiers, Names;
 import '../common/resolution.dart' show Resolution;
 import '../common_elements.dart';
 import '../constants/constant_system.dart';
@@ -188,12 +188,22 @@
   // TODO(johnniwinther): Improve semantic precision.
   Iterable<InterfaceType> get instantiatedTypes;
 
-  /// Set of methods in instantiated classes that are potentially closurized.
+  // TODO(johnniwinther): Clean up these getters.
+  /// Methods in instantiated classes that are potentially closurized.
   Iterable<FunctionEntity> get closurizedMembers;
 
-  /// Set of static or top level methods that are closurized.
+  /// Static or top level methods that are closurized.
   Iterable<FunctionEntity> get closurizedStatics;
 
+  /// Live generic instance methods.
+  Iterable<FunctionEntity> get genericInstanceMethods;
+
+  /// Live generic local functions.
+  Iterable<Local> get genericLocalFunctions;
+
+  /// Type variables used as type literals.
+  Iterable<TypeVariableType> get typeVariableTypeLiterals;
+
   /// Call [f] for each generic [function] with the type arguments passed
   /// through static calls to [function].
   void forEachStaticTypeArgument(
@@ -218,6 +228,9 @@
   /// Set of static or top level methods that are closurized.
   final Set<FunctionEntity> closurizedStatics = new Set<FunctionEntity>();
 
+  final Set<TypeVariableType> typeVariableTypeLiterals =
+      new Set<TypeVariableType>();
+
   void _registerStaticTypeArgumentDependency(
       Entity element, List<DartType> typeArguments) {
     _staticTypeArgumentDependencies.putIfAbsent(
@@ -240,10 +253,10 @@
         staticUse.element, staticUse.typeArguments);
   }
 
-  void registerDynamicInvocation(DynamicUse dynamicUse) {
-    if (dynamicUse.typeArguments.isEmpty) return;
-    _registerDynamicTypeArgumentDependency(
-        dynamicUse.selector, dynamicUse.typeArguments);
+  void registerDynamicInvocation(
+      Selector selector, List<DartType> typeArguments) {
+    if (typeArguments.isEmpty) return;
+    _registerDynamicTypeArgumentDependency(selector, typeArguments);
   }
 
   void forEachStaticTypeArgument(
@@ -255,4 +268,8 @@
       void f(Selector selector, Set<DartType> typeArguments)) {
     _dynamicTypeArgumentDependencies.forEach(f);
   }
+
+  void registerTypeVariableTypeLiteral(TypeVariableType typeVariable) {
+    typeVariableTypeLiterals.add(typeVariable);
+  }
 }
diff --git a/pkg/compiler/testing_dart.json b/pkg/compiler/testing_dart.json
index 428cfd2..b0fb40c3a 100644
--- a/pkg/compiler/testing_dart.json
+++ b/pkg/compiler/testing_dart.json
@@ -16,8 +16,6 @@
     "exclude": [
       "^tests/compiler/dart2js/codegen_helper\\.dart",
       "^tests/compiler/dart2js/codegen/type_inference8_test\\.dart",
-      "^tests/compiler/dart2js/constant_expression_evaluate_test\\.dart",
-      "^tests/compiler/dart2js/constant_expression_test\\.dart",
       "^tests/compiler/dart2js/data/one_line_dart_program\\.dart",
       "^tests/compiler/dart2js/deferred/inline_restrictions_test\\.dart",
       "^tests/compiler/dart2js/deferred/load_graph_segmentation2_test\\.dart",
@@ -40,6 +38,8 @@
       "^tests/compiler/dart2js/mirrors/deferred_mirrors_test\\.dart",
       "^tests/compiler/dart2js/mirrors/mirrors_used_test\\.dart",
       "^tests/compiler/dart2js/mixin_typevariable_test\\.dart",
+      "^tests/compiler/dart2js/model/constant_expression_evaluate_test\\.dart",
+      "^tests/compiler/dart2js/model/constant_expression_test\\.dart",
       "^tests/compiler/dart2js/needs_no_such_method_test\\.dart",
       "^tests/compiler/dart2js/no_such_method_enabled_test\\.dart",
       "^tests/compiler/dart2js/output_collector\\.dart",
@@ -68,14 +68,10 @@
       "^tests/compiler/dart2js/sourcemaps/helpers/sourcemap_helper\\.dart",
       "^tests/compiler/dart2js/sourcemaps/helpers/sourcemap_html_helper\\.dart",
       "^tests/compiler/dart2js/sourcemaps/stacktrace_test\\.dart",
-      "^tests/compiler/dart2js/subtype_test\\.dart",
-      "^tests/compiler/dart2js/subtypeset_test\\.dart",
       "^tests/compiler/dart2js/token_naming_test\\.dart",
       "^tests/compiler/dart2js/type_representation_test\\.dart",
-      "^tests/compiler/dart2js/type_substitution_test\\.dart",
       "^tests/compiler/dart2js/type_variable_occurrence_test\\.dart",
       "^tests/compiler/dart2js/unused_empty_map_test\\.dart",
-      "^tests/compiler/dart2js/world_test\\.dart",
 
       "^tests/compiler/dart2js/path with spaces/.*"
     ]
diff --git a/pkg/dev_compiler/bin/dartdevk.dart b/pkg/dev_compiler/bin/dartdevk.dart
index b0d6aec..36f4535 100755
--- a/pkg/dev_compiler/bin/dartdevk.dart
+++ b/pkg/dev_compiler/bin/dartdevk.dart
@@ -104,7 +104,7 @@
     return new _ParsedArgs(true, false, args.sublist(0, args.length - 1));
   }
 
-  var newArgs = [];
+  var newArgs = <String>[];
   bool isWorker = false;
   var len = args.length;
   for (int i = 0; i < len; i++) {
diff --git a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
index 489c467..db33ffb 100644
--- a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
@@ -218,8 +218,9 @@
         types = c.typeProvider,
         _asyncStreamIterator =
             _getLibrary(c, 'dart:async').getType('StreamIterator').type,
-        _coreIdentical =
-            _getLibrary(c, 'dart:core').publicNamespace.get('identical'),
+        _coreIdentical = _getLibrary(c, 'dart:core')
+            .publicNamespace
+            .get('identical') as FunctionElement,
         _jsArray = _getLibrary(c, 'dart:_interceptors').getType('JSArray'),
         _jsBool = _getLibrary(c, 'dart:_interceptors').getType('JSBool'),
         _jsString = _getLibrary(c, 'dart:_interceptors').getType('JSString'),
@@ -254,9 +255,9 @@
   LibraryElement get currentLibrary => _currentElement.library;
 
   CompilationUnitElement get _currentCompilationUnit {
-    var e = _currentElement;
-    while (e is! CompilationUnitElement) e = e.enclosingElement;
-    return e;
+    for (var e = _currentElement;; e = e.enclosingElement) {
+      if (e is CompilationUnitElement) return e;
+    }
   }
 
   /// The main entry point to JavaScript code generation.
@@ -291,13 +292,12 @@
 
     var assembler = new PackageBundleAssembler();
 
-    var uriToUnit = new Map<String, UnlinkedUnit>.fromIterable(units,
-        key: (u) => u.element.source.uri.toString(),
-        value: (unit) {
-          var unlinked = serializeAstUnlinked(unit);
-          assembler.addUnlinkedUnit(unit.element.source, unlinked);
-          return unlinked;
-        });
+    var uriToUnit = new Map<String, UnlinkedUnit>.fromIterables(
+        units.map((u) => u.element.source.uri.toString()), units.map((unit) {
+      var unlinked = serializeAstUnlinked(unit);
+      assembler.addUnlinkedUnit(unit.element.source, unlinked);
+      return unlinked;
+    }));
 
     summary_link
         .link(
@@ -329,8 +329,9 @@
     var root = new JS.Identifier('_root');
     items.add(js.statement('const # = Object.create(null)', [root]));
 
-    if (compilationUnits.any((u) => isSdkInternalRuntime(
-        resolutionMap.elementDeclaredByCompilationUnit(u).library))) {
+    var isBuildingSdk =
+        compilationUnits.any((u) => isSdkInternalRuntime(u.element.library));
+    if (isBuildingSdk) {
       // Don't allow these to be renamed when we're building the SDK.
       // There is JS code in dart:* that depends on their names.
       _runtimeModule = new JS.Identifier('dart');
@@ -343,28 +344,29 @@
     _typeTable = new TypeTable(_runtimeModule);
 
     // Initialize our library variables.
-    var isBuildingSdk = false;
+    var exports = <JS.NameSpecifier>[];
+    void emitLibrary(JS.Identifier id) {
+      items.add(js.statement('const # = Object.create(#)', [id, root]));
+      exports.add(new JS.NameSpecifier(id));
+    }
+
     for (var unit in compilationUnits) {
-      var library =
-          resolutionMap.elementDeclaredByCompilationUnit(unit).library;
+      var library = unit.element.library;
       if (unit.element != library.definingCompilationUnit) continue;
 
       var libraryTemp = isSdkInternalRuntime(library)
           ? _runtimeModule
           : new JS.TemporaryId(jsLibraryName(_libraryRoot, library));
       _libraries[library] = libraryTemp;
-      items.add(new JS.ExportDeclaration(
-          js.call('const # = Object.create(#)', [libraryTemp, root])));
-
-      // dart:_runtime has a magic module that holds extension method symbols.
-      // TODO(jmesserly): find a cleaner design for this.
-      if (isSdkInternalRuntime(library)) {
-        isBuildingSdk = true;
-        items.add(new JS.ExportDeclaration(js.call(
-            'const # = Object.create(#)', [_extensionSymbolsModule, root])));
-      }
+      emitLibrary(libraryTemp);
     }
 
+    // dart:_runtime has a magic module that holds extension method symbols.
+    // TODO(jmesserly): find a cleaner design for this.
+    if (isBuildingSdk) emitLibrary(_extensionSymbolsModule);
+
+    items.add(new JS.ExportDeclaration(new JS.ExportClause(exports)));
+
     // Collect all class/type Element -> Node mappings
     // in case we need to forward declare any classes.
     _declarationNodes = new HashMap<TypeDefiningElement, AstNode>.identity();
@@ -401,7 +403,7 @@
     _finishImports(items);
     // Initialize extension symbols
     _extensionSymbols.forEach((name, id) {
-      var value =
+      JS.Expression value =
           new JS.PropertyAccess(_extensionSymbolsModule, _propertyName(name));
       if (isBuildingSdk) {
         value = js.call('# = Symbol(#)', [value, js.string("dartx.$name")]);
@@ -472,16 +474,19 @@
     return libraryJSName != null ? '$libraryJSName.$jsName' : jsName;
   }
 
-  JS.Expression _emitJSInterop(Element e) {
+  JS.PropertyAccess _emitJSInterop(Element e) {
     var jsName = _getJSNameWithoutGlobal(e);
     if (jsName == null) return null;
     return _emitJSInteropForGlobal(jsName);
   }
 
-  JS.Expression _emitJSInteropForGlobal(String name) {
-    var access = _callHelper('global');
-    for (var part in name.split('.')) {
-      access = new JS.PropertyAccess(access, js.escapedString(part, "'"));
+  JS.PropertyAccess _emitJSInteropForGlobal(String name) {
+    var parts = name.split('.');
+    if (parts.isEmpty) parts = [''];
+    JS.PropertyAccess access;
+    for (var part in parts) {
+      access = new JS.PropertyAccess(
+          access ?? _callHelper('global'), js.escapedString(part, "'"));
     }
     return access;
   }
@@ -584,7 +589,7 @@
     // only run this on the outermost function, and not any closures.
     inferNullableTypes(node);
 
-    _moduleItems.add(node.accept<JS.Node>(this));
+    _moduleItems.add(node.accept(this) as JS.ModuleItem);
 
     _currentElement = savedElement;
   }
@@ -622,10 +627,9 @@
     for (var declaration in unit.declarations) {
       if (declaration is TopLevelVariableDeclaration) {
         inferNullableTypes(declaration);
-        var lazyFields = declaration.variables.variables;
-        if (isInternalSdk) {
-          lazyFields = _emitInternalSdkFields(lazyFields);
-        }
+        var variables = declaration.variables.variables;
+        var lazyFields =
+            isInternalSdk ? _emitInternalSdkFields(variables) : variables;
         if (lazyFields.isNotEmpty) {
           (fields ??= []).addAll(lazyFields);
         }
@@ -644,7 +648,7 @@
       }
 
       inferNullableTypes(declaration);
-      var item = declaration.accept(this);
+      var item = declaration.accept(this) as JS.ModuleItem;
       if (isInternalSdk && element is FunctionElement) {
         _internalSdkFunctions.add(item);
       } else {
@@ -847,7 +851,7 @@
 
   @override
   JS.Statement visitClassTypeAlias(ClassTypeAlias node) {
-    return _emitClassDeclaration(node, node.element, []);
+    return _emitClassDeclaration(node, node.element as ClassElement, []);
   }
 
   JS.Statement _emitJSType(Element e) {
@@ -1260,7 +1264,7 @@
       return;
     }
 
-    emitDeferredType(DartType t) {
+    JS.Expression emitDeferredType(DartType t) {
       if (t is InterfaceType && t.typeArguments.isNotEmpty) {
         _declareBeforeUse(t.element);
         return _emitGenericClassType(
@@ -1438,7 +1442,7 @@
         var field = decl.element as FieldElement;
         var name = getAnnotationName(field, isJSName) ?? field.name;
         // Generate getter
-        var fn = new JS.Fun([], js.statement('{ return this.#; }', [name]));
+        var fn = new JS.Fun([], js.block('{ return this.#; }', [name]));
         var method =
             new JS.Method(_declareMemberName(field.getter), fn, isGetter: true);
         jsMethods.add(method);
@@ -1446,8 +1450,7 @@
         // Generate setter
         if (!decl.isFinal) {
           var value = new JS.TemporaryId('value');
-          fn = new JS.Fun(
-              [value], js.statement('{ this.# = #; }', [name, value]));
+          fn = new JS.Fun([value], js.block('{ this.# = #; }', [name, value]));
           method = new JS.Method(_declareMemberName(field.setter), fn,
               isSetter: true);
           jsMethods.add(method);
@@ -1470,7 +1473,7 @@
       // Dart does not use ES6 constructors.
       // Add an error to catch any invalid usage.
       jsMethods.add(
-          new JS.Method(_propertyName('constructor'), js.call(r'''function() {
+          new JS.Method(_propertyName('constructor'), js.fun(r'''function() {
                   throw Error("use `new " + #.typeName(#.getReifiedType(this)) +
                       ".new(...)` to create a Dart object");
               }''', [_runtimeModule, _runtimeModule])));
@@ -1484,7 +1487,7 @@
       }
       jsMethods.add(new JS.Method(
           _declareMemberName(types.objectType.getMethod('toString')),
-          js.call('function() { return #[this.index]; }',
+          js.fun('function() { return #[this.index]; }',
               new JS.ObjectInitializer(mapMap, multiline: true))));
     }
 
@@ -1546,18 +1549,20 @@
     var covariantParams = getSuperclassCovariantParameters(node);
     if (covariantParams == null) return;
 
-    for (var member in covariantParams.map((p) => p.enclosingElement).toSet()) {
+    for (var member in covariantParams
+        .map((p) => p.enclosingElement as ExecutableElement)
+        .toSet()) {
       var name = _declareMemberName(member);
       if (member is PropertyAccessorElement) {
         var param =
             covariantParams.lookup(member.parameters[0]) as ParameterElement;
         methods.add(new JS.Method(
             name,
-            js.call('function(x) { return super.# = #._check(x); }',
+            js.fun('function(x) { return super.# = #._check(x); }',
                 [name, _emitType(param.type)]),
             isSetter: true));
         methods.add(new JS.Method(
-            name, js.call('function() { return super.#; }', [name]),
+            name, js.fun('function() { return super.#; }', [name]),
             isGetter: true));
       } else if (member is MethodElement) {
         var type = member.type;
@@ -1733,7 +1738,7 @@
       fnBody = js.call('#._check(#)', [_emitType(method.returnType), fnBody]);
     }
 
-    var fn = new JS.Fun(fnArgs, js.statement('{ return #; }', [fnBody]),
+    var fn = new JS.Fun(fnArgs, js.block('{ return #; }', [fnBody]),
         typeParams: typeParams);
 
     return new JS.Method(
@@ -1760,7 +1765,7 @@
 
     var mocks = _classProperties.mockMembers;
     if (!mocks.containsKey(element.name)) {
-      var getter = js.call('function() { return this[#]; }', [virtualField]);
+      var getter = js.fun('function() { return this[#]; }', [virtualField]);
       result.add(new JS.Method(name, getter, isGetter: true)
         ..sourceInformation = _functionSpan(field.name));
     }
@@ -1782,7 +1787,7 @@
         jsCode = 'function(value) { #[#] = value; }';
       }
 
-      result.add(new JS.Method(name, js.call(jsCode, args), isSetter: true)
+      result.add(new JS.Method(name, js.fun(jsCode, args), isSetter: true)
         ..sourceInformation = _functionSpan(field.name));
     }
 
@@ -1806,7 +1811,7 @@
       if ((setter == null || setter.isAbstract) &&
           _classProperties.inheritedSetters.contains(field.name)) {
         // Generate a setter that forwards to super.
-        var fn = js.call('function(value) { super[#] = value; }', [name]);
+        var fn = js.fun('function(value) { super[#] = value; }', [name]);
         return new JS.Method(name, fn, isSetter: true);
       }
     } else {
@@ -1814,7 +1819,7 @@
       if ((getter == null || getter.isAbstract) &&
           _classProperties.inheritedGetters.contains(field.name)) {
         // Generate a getter that forwards to super.
-        var fn = js.call('function() { return super[#]; }', [name]);
+        var fn = js.fun('function() { return super[#]; }', [name]);
         return new JS.Method(name, fn, isGetter: true);
       }
     }
@@ -1857,8 +1862,12 @@
   JS.Expression _instantiateAnnotation(Annotation node) {
     var element = node.element;
     if (element is ConstructorElement) {
-      return _emitInstanceCreationExpression(element, element.returnType,
-          node.constructorName, node.arguments, true);
+      return _emitInstanceCreationExpression(
+          element,
+          element.returnType as InterfaceType,
+          node.constructorName,
+          node.arguments,
+          true);
     } else {
       return _visitExpression(node.name);
     }
@@ -2040,7 +2049,7 @@
         .map((f) => members[f] as VariableDeclaration)
         .toList();
     if (lazyStatics.isNotEmpty) {
-      body.add(_emitLazyFields(classElem, lazyStatics));
+      body.add(_emitLazyFields(_emitTopLevelName(classElem), lazyStatics));
     }
   }
 
@@ -2294,8 +2303,8 @@
       ..sourceInformation = _functionEnd(node);
   }
 
-  JS.Fun _finishConstructorFunction(
-      List<JS.Parameter> params, JS.Block body, isCallable) {
+  JS.Expression _finishConstructorFunction(
+      List<JS.Parameter> params, JS.Block body, bool isCallable) {
     // We consider a class callable if it inherits from anything with a `call`
     // method. As a result, we can know the callable JS function was created
     // at the first constructor that was hit.
@@ -2356,13 +2365,11 @@
 
     // Redirecting constructors: these are not allowed to have initializers,
     // and the redirecting ctor invocation runs before field initializers.
-    var redirectCall = node.initializers.firstWhere(
-        (i) => i is RedirectingConstructorInvocation,
-        orElse: () => null);
-
-    if (redirectCall != null) {
-      body.add(_emitRedirectingConstructor(redirectCall, className));
-      return new JS.Block(body);
+    for (var init in node.initializers) {
+      if (init is RedirectingConstructorInvocation) {
+        body.add(_emitRedirectingConstructor(init, className));
+        return new JS.Block(body);
+      }
     }
 
     // Generate field initializers.
@@ -2483,7 +2490,8 @@
       for (var init in ctor.initializers) {
         if (init is ConstructorFieldInitializer) {
           var field = init.fieldName;
-          body.add(emitFieldInit(field.staticElement, init.expression, field));
+          var element = field.staticElement as FieldElement;
+          body.add(emitFieldInit(element, init.expression, field));
         } else if (init is AssertInitializer) {
           body.add(_emitAssert(init.condition, init.message));
         }
@@ -2498,7 +2506,7 @@
     // like `field = value`, or via a `this.field` parameter).
     var fieldInit = <JS.Statement>[];
     for (var field in fieldDecls) {
-      var f = field.element;
+      var f = field.element as FieldElement;
       if (f.isStatic) continue;
       if (ctorFields != null &&
           ctorFields.contains(f) &&
@@ -2523,7 +2531,8 @@
     _emitCovarianceBoundsCheck(
         element.typeParameters, _classProperties?.covariantParameters, body);
     for (var param in parameters.parameters) {
-      var jsParam = _emitParameter(param.identifier.staticElement)
+      var element = param.identifier.staticElement as ParameterElement;
+      var jsParam = _emitParameter(element)
         ..sourceInformation = _nodeStart(param.identifier);
 
       if (param.kind != ParameterKind.REQUIRED) {
@@ -2602,13 +2611,13 @@
     String name =
         getAnnotationName(node.element, isJSAnnotation) ?? node.name.name;
     if (node.isGetter) {
-      return new JS.Fun([], js.statement('{ return this.#; }', [name]));
+      return new JS.Fun([], js.block('{ return this.#; }', [name]));
     } else if (node.isSetter) {
       var params = _emitFormalParameters(node.parameters?.parameters);
       return new JS.Fun(
-          params, js.statement('{ this.# = #; }', [name, params.last]));
+          params, js.block('{ this.# = #; }', [name, params.last]));
     } else {
-      return js.call(
+      return js.fun(
           'function (...args) { return this.#.apply(this, args); }', name);
     }
   }
@@ -2744,8 +2753,8 @@
     return !_declarationNodes.containsKey(type.element);
   }
 
-  JS.Expression _emitFunctionTagged(JS.Expression fn, DartType type,
-      {topLevel: false}) {
+  JS.Expression _emitFunctionTagged(JS.Expression fn, FunctionType type,
+      {bool topLevel: false}) {
     var lazy = topLevel && !_typeIsLoaded(type);
     var typeRep = _emitFunctionType(type);
     return _callHelper(lazy ? 'lazyFn(#, () => #)' : 'fn(#, #)', [fn, typeRep]);
@@ -2764,7 +2773,7 @@
         node.parent is! MethodDeclaration);
     var fn = _emitArrowFunction(node);
     if (!_reifyFunctionType(node.element)) return fn;
-    return _emitFunctionTagged(fn, getStaticType(node),
+    return _emitFunctionTagged(fn, getStaticType(node) as FunctionType,
         topLevel: _executesAtTopLevel(node));
   }
 
@@ -2895,8 +2904,7 @@
 
     var returnType = _getExpectedReturnType(element);
 
-    emitGeneratorFn(Iterable<JS.Expression> jsParams,
-        [JS.TemporaryId asyncStar]) {
+    emitGeneratorFn(List<JS.Parameter> jsParams, [JS.TemporaryId asyncStar]) {
       var savedSuperAllowed = _superAllowed;
       var savedController = _asyncStarController;
       _superAllowed = false;
@@ -2907,17 +2915,16 @@
       // TODO(jmesserly): this will emit argument initializers (for default
       // values) inside the generator function body. Is that the best place?
       var jsBody = _emitFunctionBody(element, parameters, body);
-      JS.Expression gen = new JS.Fun(jsParams, jsBody,
+      var genFn = new JS.Fun(jsParams, jsBody,
           isGenerator: true, returnType: emitTypeRef(returnType));
 
+      // Name the function if possible, to get better stack traces.
       var name = element.name;
-      name = JS.friendlyNameForDartOperator[name] ?? name;
+      JS.Expression gen = genFn;
       if (name.isNotEmpty) {
-        // Name the function if possible, to get better stack traces.
-        //
-        // Also use a temporary ID so we don't conflict with the function
-        // itself, for recursive calls.
-        gen = new JS.NamedFunction(new JS.TemporaryId(name), gen);
+        gen = new JS.NamedFunction(
+            new JS.TemporaryId(JS.friendlyNameForDartOperator[name] ?? name),
+            genFn);
       }
       gen.sourceInformation = _functionEnd(body);
       if (JS.This.foundIn(gen)) gen = js.call('#.bind(this)', gen);
@@ -3048,7 +3055,7 @@
 
     // Directly emit constants.
     if (element is VariableElement && element.isStatic && element.isConst) {
-      var val = element.computeConstantValue();
+      var val = element.computeConstantValue() as DartObjectImpl;
       var result = _emitDartObject(val);
       if (result != null) {
         return result;
@@ -3364,7 +3371,7 @@
 
     if (type is ParameterizedType) {
       var args = type.typeArguments;
-      Iterable jsArgs = null;
+      List<JS.Expression> jsArgs;
       if (args.any((a) => !a.isDynamic)) {
         jsArgs = args.map((x) => _emitType(x, nameType: nameType)).toList();
       }
@@ -3378,7 +3385,7 @@
   }
 
   JS.Expression _emitGenericClassType(
-      InterfaceType t, List<JS.Expression> typeArgs) {
+      ParameterizedType t, List<JS.Expression> typeArgs) {
     var genericName = _emitTopLevelNameNoInterop(t.element, suffix: '\$');
     return js.call('#(#)', [genericName, typeArgs]);
   }
@@ -3529,7 +3536,8 @@
       return _emitSetLocal(element, right, node);
     }
 
-    if (element.enclosingElement is CompilationUnitElement) {
+    if (accessor is PropertyAccessorElement &&
+        element.enclosingElement is CompilationUnitElement) {
       // Top level library member.
       return _emitSetTopLevel(accessor, right);
     }
@@ -3701,7 +3709,10 @@
       // Use the full span for a cascade property so we can hover over `bar` in
       // `..bar()` and see the `bar` method.
       var cascade = _cascadeTarget;
-      var isCascade = cascade != null && _getTarget(node.parent) == cascade;
+      var parent = node.parent;
+      var isCascade = cascade != null &&
+          parent is Expression &&
+          _getTarget(parent) == cascade;
       result.sourceInformation = isCascade ? _nodeSpan(node) : _nodeEnd(node);
     }
     return result;
@@ -3711,7 +3722,7 @@
     var jsMethod = _superHelpers.putIfAbsent(member.name, () {
       if (member is PropertyAccessorElement) {
         var isSetter = member.isSetter;
-        var fn = js.call(
+        var fn = js.fun(
             isSetter
                 ? 'function(x) { super[#] = x; }'
                 : 'function() { return super[#]; }',
@@ -3730,7 +3741,7 @@
           params.add(new JS.Identifier(param.name));
         }
 
-        var fn = js.call(
+        var fn = js.fun(
             'function(#) { return super[#](#); }', [params, jsName, params]);
         var name = method.name;
         name = JS.friendlyNameForDartOperator[name] ?? name;
@@ -4019,8 +4030,8 @@
       if (arg is NamedExpression) {
         named.add(visitNamedExpression(arg));
       } else if (arg is MethodInvocation && isJsSpreadInvocation(arg)) {
-        args.add(new JS.RestParameter(
-            _visitExpression(arg.argumentList.arguments[0])));
+        args.add(
+            new JS.Spread(_visitExpression(arg.argumentList.arguments[0])));
       } else {
         args.add(_visitExpression(arg));
       }
@@ -4181,7 +4192,8 @@
           value = _emitArrowFunction(initializer);
           return new JS.Block([
             value.toVariableDeclaration(name),
-            _emitFunctionTagged(name, getStaticType(initializer),
+            _emitFunctionTagged(
+                    name, getStaticType(initializer) as FunctionType,
                     topLevel: _executesAtTopLevel(node))
                 .toStatement()
           ]);
@@ -4218,7 +4230,7 @@
 
   /// Emits a list of top-level field.
   void _emitTopLevelFields(List<VariableDeclaration> fields) {
-    _moduleItems.add(_emitLazyFields(currentLibrary, fields));
+    _moduleItems.add(_emitLazyFields(emitLibraryName(currentLibrary), fields));
   }
 
   /// Treat dart:_runtime fields as safe to eagerly evaluate.
@@ -4261,21 +4273,13 @@
   }
 
   JS.Statement _emitLazyFields(
-      Element target, List<VariableDeclaration> fields) {
+      JS.Expression objExpr, List<VariableDeclaration> fields) {
     var accessors = <JS.Method>[];
 
-    var objExpr = target is ClassElement
-        ? _emitTopLevelName(target)
-        : emitLibraryName(target);
-
     for (var node in fields) {
       var name = node.name.name;
       var element = node.element;
-      assert(element.getAncestor((e) => identical(e, target)) != null,
-          "target is $target but enclosing element is ${element.enclosingElement}");
-      var access = target is ClassElement
-          ? _emitStaticMemberName(name)
-          : (_emitJSInteropStaticMemberName(element) ?? _propertyName(name));
+      var access = _emitStaticMemberName(name, element);
       accessors.add(closureAnnotate(
           new JS.Method(
               access,
@@ -4325,7 +4329,7 @@
 
   JS.Expression _emitInstanceCreationExpression(
       ConstructorElement element,
-      DartType type,
+      InterfaceType type,
       SimpleIdentifier name,
       ArgumentList argumentList,
       bool isConst,
@@ -4467,8 +4471,13 @@
       return typeNode.type;
     }
 
-    return _emitInstanceCreationExpression(element, getType(constructor.type),
-        name, node.argumentList, node.isConst, constructor);
+    return _emitInstanceCreationExpression(
+        element,
+        getType(constructor.type) as InterfaceType,
+        name,
+        node.argumentList,
+        node.isConst,
+        constructor);
   }
 
   bool isPrimitiveType(DartType t) => _typeRep.isPrimitive(t);
@@ -4848,10 +4857,11 @@
 
     variable ??= new JS.TemporaryId(name);
 
-    id.staticElement = new TemporaryVariableElement.forNode(id, variable);
+    var idElement = new TemporaryVariableElement.forNode(id, variable);
+    id.staticElement = idElement;
     id.staticType = type;
     setIsDynamicInvoke(id, dynamicInvoke ?? type.isDynamic);
-    addTemporaryVariable(id.staticElement, nullable: nullable);
+    addTemporaryVariable(idElement, nullable: nullable);
     return id;
   }
 
@@ -5380,9 +5390,10 @@
     //
     // TODO(jmesserly): we may want a helper if these become common. For now the
     // full desugaring seems okay.
-    var streamIterator = rules.instantiateToBounds(_asyncStreamIterator);
+    var streamIterator =
+        rules.instantiateToBounds(_asyncStreamIterator) as InterfaceType;
     var createStreamIter = _emitInstanceCreationExpression(
-        (streamIterator.element as ClassElement).unnamedConstructor,
+        streamIterator.element.unnamedConstructor,
         streamIterator,
         null,
         ast.argumentList([node.iterable]),
@@ -5430,9 +5441,9 @@
   visitTryStatement(TryStatement node) {
     var savedSuperAllowed = _superAllowed;
     _superAllowed = false;
-    var finallyBlock = _visitStatement(node.finallyBlock);
+    var finallyBlock = _visitStatement(node.finallyBlock)?.toBlock();
     _superAllowed = savedSuperAllowed;
-    return new JS.Try(_visitStatement(node.body),
+    return new JS.Try(_visitStatement(node.body).toBlock(),
         _visitCatch(node.catchClauses), finallyBlock);
   }
 
@@ -5458,7 +5469,7 @@
       catchBody = _catchClauseGuard(clause, catchBody);
     }
 
-    var catchVarDecl = _emitSimpleIdentifier(_catchParameter);
+    var catchVarDecl = _emitSimpleIdentifier(_catchParameter) as JS.Identifier;
     if (isSingleCatch) {
       catchVarDecl..sourceInformation = _nodeStart(_catchParameter);
     }
@@ -5518,27 +5529,27 @@
   }
 
   @override
-  JS.Case visitSwitchCase(SwitchCase node) {
+  JS.SwitchCase visitSwitchCase(SwitchCase node) {
     var expr = _visitExpression(node.expression);
     var body = _visitStatementList(node.statements);
     if (node.labels.isNotEmpty) {
       body.insert(0, js.comment('Unimplemented case labels: ${node.labels}'));
     }
     // TODO(jmesserly): make sure we are statically checking fall through
-    return new JS.Case(expr, new JS.Block(body));
+    return new JS.SwitchCase(expr, new JS.Block(body));
   }
 
   @override
-  JS.Default visitSwitchDefault(SwitchDefault node) {
+  JS.SwitchCase visitSwitchDefault(SwitchDefault node) {
     var body = _visitStatementList(node.statements);
     if (node.labels.isNotEmpty) {
       body.insert(0, js.comment('Unimplemented case labels: ${node.labels}'));
     }
     // TODO(jmesserly): make sure we are statically checking fall through
-    return new JS.Default(new JS.Block(body));
+    return new JS.SwitchCase.defaultCase(new JS.Block(body));
   }
 
-  JS.SwitchClause _emitSwitchMember(SwitchMember node) {
+  JS.SwitchCase _emitSwitchMember(SwitchMember node) {
     if (node is SwitchCase) {
       return visitSwitchCase(node);
     } else {
@@ -5643,14 +5654,15 @@
       return new JS.ArrayInitializer(entries);
     }
 
+    var type = node.staticType as InterfaceType;
     if (!node.isConst) {
-      var mapType = _emitMapImplType(node.staticType);
+      var mapType = _emitMapImplType(type);
       if (node.entries.isEmpty) {
         return js.call('new #.new()', [mapType]);
       }
       return js.call('new #.from(#)', [mapType, emitEntries()]);
     }
-    var typeArgs = (node.staticType as InterfaceType).typeArguments;
+    var typeArgs = type.typeArguments;
     return _cacheConst(() => _callHelper('constMap(#, #, #)',
         [_emitType(typeArgs[0]), _emitType(typeArgs[1]), emitEntries()]));
   }
@@ -5676,7 +5688,7 @@
       js.escapedString(node.value, node.isSingleQuoted ? "'" : '"');
 
   @override
-  JS.Binary visitAdjacentStrings(AdjacentStrings node) {
+  JS.Expression visitAdjacentStrings(AdjacentStrings node) {
     var nodes = node.strings;
     if (nodes == null || nodes.isEmpty) return null;
     return new JS.Expression.binary(_visitExpressionList(nodes), '+');
@@ -6002,7 +6014,7 @@
             '\$${JS.friendlyNameForDartOperator[name] ?? name}'));
   }
 
-  var _forwardingCache = new HashMap<Element, Map<String, ExecutableElement>>();
+  var _forwardingCache = new HashMap<Element, Map<String, Element>>();
 
   Element _lookupForwardedMember(ClassElement element, String name) {
     // We only care about public methods.
@@ -6016,13 +6028,13 @@
     var member = element.lookUpMethod(name, library) ??
         element.lookUpGetter(name, library) ??
         element.lookUpSetter(name, library);
-    member = (member != null &&
+    var classMember = (member != null &&
             member.isSynthetic &&
             member is PropertyAccessorElement)
         ? member.variable
         : member;
-    map[name] = member;
-    return member;
+    map[name] = classMember;
+    return classMember;
   }
 
   /// Don't symbolize native members that just forward to the underlying
@@ -6039,8 +6051,8 @@
     if (type == null || type.isDynamic || type.isObject) {
       return isObjectMember(name);
     } else if (type is InterfaceType) {
-      type = getImplementationType(type) ?? type;
-      var element = type.element;
+      var interfaceType = getImplementationType(type) ?? type;
+      var element = interfaceType.element;
       if (_extensionTypes.isNativeClass(element)) {
         var member = _lookupForwardedMember(element, name);
 
@@ -6178,7 +6190,7 @@
   JS.Expression _throwUnsafe(String message) => _callHelper(
       'throw(Error(#))', js.escapedString("compile error: $message"));
 
-  _unreachable(AstNode node) {
+  JS.Node _unreachable(AstNode node) {
     throw new UnsupportedError(
         'tried to generate an unreachable node: `$node`');
   }
diff --git a/pkg/dev_compiler/lib/src/analyzer/command.dart b/pkg/dev_compiler/lib/src/analyzer/command.dart
index b12e5f8..dd028f0 100644
--- a/pkg/dev_compiler/lib/src/analyzer/command.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/command.dart
@@ -42,13 +42,13 @@
     return 64;
   }
 
-  _verbose = argResults['verbose'];
-  if (argResults['help'] || args.isEmpty) {
+  _verbose = argResults['verbose'] as bool;
+  if (argResults['help'] as bool || args.isEmpty) {
     printFn(_usageMessage);
     return 0;
   }
 
-  if (argResults['version']) {
+  if (argResults['version'] as bool) {
     printFn('$_binaryName version ${_getVersion()}');
     return 0;
   }
diff --git a/pkg/dev_compiler/lib/src/analyzer/context.dart b/pkg/dev_compiler/lib/src/analyzer/context.dart
index b3b855c..5ce463c 100644
--- a/pkg/dev_compiler/lib/src/analyzer/context.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/context.dart
@@ -81,7 +81,7 @@
     (contextBuilderOptions.defaultOptions as AnalysisOptionsImpl).previewDart2 =
         true;
 
-    var dartSdkPath = args['dart-sdk'] ?? getSdkDir().path;
+    var dartSdkPath = args['dart-sdk'] as String ?? getSdkDir().path;
 
     dartSdkSummaryPath ??= contextBuilderOptions.dartSdkSummaryPath;
     dartSdkSummaryPath ??=
@@ -94,7 +94,8 @@
         contextBuilderOptions: contextBuilderOptions,
         summaryPaths: summaryPaths ?? args['summary'] as List<String>,
         dartSdkPath: dartSdkPath,
-        customUrlMappings: _parseUrlMappings(args['url-mapping']));
+        customUrlMappings:
+            _parseUrlMappings(args['url-mapping'] as List<String>));
   }
 
   static void addArguments(ArgParser parser, {bool hide: true}) {
@@ -109,7 +110,7 @@
           hide: hide);
   }
 
-  static Map<String, String> _parseUrlMappings(Iterable argument) {
+  static Map<String, String> _parseUrlMappings(List<String> argument) {
     var mappings = <String, String>{};
     for (var mapping in argument) {
       var splitMapping = mapping.split(',');
diff --git a/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart b/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
index b40e3ff..23b9d8f 100644
--- a/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
@@ -64,7 +64,7 @@
 DartObject findAnnotation(Element element, bool test(DartObjectImpl value)) {
   for (var metadata in element.metadata) {
     var value = metadata.computeConstantValue();
-    if (value != null && test(value)) return value;
+    if (value is DartObjectImpl && test(value)) return value;
   }
   return null;
 }
diff --git a/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart b/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
index d0286ab..6c7f005 100644
--- a/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
@@ -290,17 +290,18 @@
       this.summaryOutPath});
 
   CompilerOptions.fromArguments(ArgResults args)
-      : sourceMap = args['source-map'],
-        sourceMapComment = args['source-map-comment'],
-        inlineSourceMap = args['inline-source-map'],
-        summarizeApi = args['summarize'],
-        summaryExtension = args['summary-extension'],
-        unsafeForceCompile = args['unsafe-force-compile'],
-        replCompile = args['repl-compile'],
-        emitMetadata = args['emit-metadata'],
-        closure = args['closure-experimental'],
-        bazelMapping = _parseBazelMappings(args['bazel-mapping']),
-        summaryOutPath = args['summary-out'];
+      : sourceMap = args['source-map'] as bool,
+        sourceMapComment = args['source-map-comment'] as bool,
+        inlineSourceMap = args['inline-source-map'] as bool,
+        summarizeApi = args['summarize'] as bool,
+        summaryExtension = args['summary-extension'] as String,
+        unsafeForceCompile = args['unsafe-force-compile'] as bool,
+        replCompile = args['repl-compile'] as bool,
+        emitMetadata = args['emit-metadata'] as bool,
+        closure = args['closure-experimental'] as bool,
+        bazelMapping =
+            _parseBazelMappings(args['bazel-mapping'] as List<String>),
+        summaryOutPath = args['summary-out'] as String;
 
   static void addArguments(ArgParser parser, {bool hide: true}) {
     parser
@@ -348,7 +349,7 @@
           help: 'location to write the summary file', hide: hide);
   }
 
-  static Map<String, String> _parseBazelMappings(Iterable argument) {
+  static Map<String, String> _parseBazelMappings(List<String> argument) {
     var mappings = <String, String>{};
     for (var mapping in argument) {
       var splitMapping = mapping.split(',');
@@ -543,7 +544,7 @@
   // Convert to a local file path if it's not.
   sourceMapPath = path.fromUri(_sourceToUri(sourceMapPath));
   var sourceMapDir = path.dirname(path.absolute(sourceMapPath));
-  var list = new List.from(map['sources']);
+  var list = (map['sources'] as List).toList();
   map['sources'] = list;
 
   String makeRelative(String sourcePath) {
@@ -565,9 +566,9 @@
   }
 
   for (int i = 0; i < list.length; i++) {
-    list[i] = makeRelative(list[i]);
+    list[i] = makeRelative(list[i] as String);
   }
-  map['file'] = makeRelative(map['file']);
+  map['file'] = makeRelative(map['file'] as String);
   return map;
 }
 
diff --git a/pkg/dev_compiler/lib/src/analyzer/nullable_type_inference.dart b/pkg/dev_compiler/lib/src/analyzer/nullable_type_inference.dart
index c2afbbd..5006b76 100644
--- a/pkg/dev_compiler/lib/src/analyzer/nullable_type_inference.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/nullable_type_inference.dart
@@ -356,14 +356,14 @@
   @override
   visitCatchClause(CatchClause node) {
     var e = node.exceptionParameter?.staticElement;
-    if (e != null) {
+    if (e is LocalVariableElement) {
       _locals.add(e);
       // TODO(jmesserly): we allow throwing of `null`, for better or worse.
       _nullableLocals.add(e);
     }
 
     e = node.stackTraceParameter?.staticElement;
-    if (e != null) _locals.add(e);
+    if (e is LocalVariableElement) _locals.add(e);
 
     super.visitCatchClause(node);
   }
diff --git a/pkg/dev_compiler/lib/src/analyzer/property_model.dart b/pkg/dev_compiler/lib/src/analyzer/property_model.dart
index 34b2330..636ca24 100644
--- a/pkg/dev_compiler/lib/src/analyzer/property_model.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/property_model.dart
@@ -82,12 +82,14 @@
     // ClassElement can only look up inherited members with an O(N) scan through
     // the class, so we build up a mapping of all fields in the library ahead of
     // time.
+    Map<String, FieldElement> getInstanceFieldMap(ClassElement c) {
+      var instanceFields = c.fields.where((f) => !f.isStatic);
+      return new HashMap.fromIterables(
+          instanceFields.map((f) => f.name), instanceFields);
+    }
+
     var allFields =
-        new HashMap<ClassElement, HashMap<String, FieldElement>>.fromIterable(
-            allTypes,
-            value: (t) => new HashMap.fromIterable(
-                t.fields.where((f) => !f.isStatic),
-                key: (f) => f.name));
+        new HashMap.fromIterables(allTypes, allTypes.map(getInstanceFieldMap));
 
     for (var type in allTypes) {
       Set<ClassElement> supertypes = null;
diff --git a/pkg/dev_compiler/lib/src/analyzer/reify_coercions.dart b/pkg/dev_compiler/lib/src/analyzer/reify_coercions.dart
index 4192eb5..d2604bc 100644
--- a/pkg/dev_compiler/lib/src/analyzer/reify_coercions.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/reify_coercions.dart
@@ -126,7 +126,7 @@
 
 class _TreeCloner extends analyzer.AstCloner {
   void _cloneProperties(AstNode clone, AstNode node) {
-    if (clone is Expression) {
+    if (clone is Expression && node is Expression) {
       ast_properties.setImplicitCast(
           clone, ast_properties.getImplicitCast(node));
       ast_properties.setImplicitOperationCast(
@@ -134,7 +134,7 @@
       ast_properties.setIsDynamicInvoke(
           clone, ast_properties.isDynamicInvoke(node));
     }
-    if (clone is ClassDeclaration || clone is ClassTypeAlias) {
+    if (clone is Declaration && node is Declaration) {
       ast_properties.setClassCovariantParameters(
           clone, ast_properties.getClassCovariantParameters(node));
       ast_properties.setSuperclassCovariantParameters(
diff --git a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
index 7ec0f6e..8675657 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
@@ -82,9 +82,11 @@
     return new MetaLet(variables, exprs);
   }
 
-  Statement toVariableDeclaration(Identifier name) {
-    var simple = _simplifyAssignment(name, isDeclaration: true);
-    if (simple != null) return simple.toStatement();
+  Statement toVariableDeclaration(VariableBinding name) {
+    if (name is Identifier) {
+      var simple = _simplifyAssignment(name, isDeclaration: true);
+      if (simple != null) return simple.toStatement();
+    }
 
     // We can still optimize something like:
     //
@@ -138,13 +140,14 @@
     return _finishStatement(statements);
   }
 
-  accept(NodeVisitor visitor) {
+  T accept<T>(NodeVisitor<T> visitor) {
     // TODO(jmesserly): we special case vistors from js_ast.Template, because it
     // doesn't know about MetaLet. Should we integrate directly?
-    if (visitor is InstantiatorGeneratorVisitor) {
-      return _templateVisitMetaLet(visitor);
-    } else if (visitor is InterpolatedNodeAnalysis) {
-      return visitor.visitNode(this);
+    NodeVisitor v = visitor;
+    if (v is InstantiatorGeneratorVisitor) {
+      return _templateVisitMetaLet(v) as T;
+    } else if (v is InterpolatedNodeAnalysis) {
+      return v.visitNode(this) as T;
     } else {
       return toExpression().accept(visitor);
     }
@@ -171,13 +174,13 @@
     var bodyInstantiators = body.map(visitor.visit);
 
     return (args) => new MetaLet(
-        new Map.fromIterables(
-            variables.keys, valueInstantiators.map((i) => i(args))),
+        new Map.fromIterables(variables.keys,
+            valueInstantiators.map((i) => i(args) as Expression)),
         bodyInstantiators.map((i) => i(args) as Expression).toList(),
         statelessResult: statelessResult);
   }
 
-  Expression _toInvokedFunction(Statement block) {
+  Expression _toInvokedFunction(Block block) {
     var finder = new _YieldFinder();
     block.accept(finder);
     if (!finder.hasYield) {
@@ -276,7 +279,8 @@
 }
 
 /// Similar to [Template.instantiate] but works with free variables.
-Node _substitute(Node tree, Map<MetaLetVariable, Expression> substitutions) {
+T _substitute<T extends Node>(
+    T tree, Map<MetaLetVariable, Expression> substitutions) {
   var generator = new InstantiatorGeneratorVisitor(/*forceCopy:*/ false);
   var instantiator = generator.compile(tree);
   var nodes = new List<MetaLetVariable>.from(generator
@@ -286,7 +290,7 @@
 
   return instantiator(new Map.fromIterable(nodes,
       key: (v) => (v as MetaLetVariable).nameOrPosition,
-      value: (v) => substitutions[v] ?? v));
+      value: (v) => substitutions[v] ?? v)) as T;
 }
 
 /// A temporary variable used in a [MetaLet].
diff --git a/pkg/dev_compiler/lib/src/compiler/js_names.dart b/pkg/dev_compiler/lib/src/compiler/js_names.dart
index 8db3036..0310d63 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_names.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_names.dart
@@ -33,10 +33,11 @@
   }
 
   /// Helper to create an [Identifier] from something that starts as a property.
-  static identifier(LiteralString propertyName) =>
+  static Identifier identifier(LiteralString propertyName) =>
       new Identifier(propertyName.valueWithoutQuotes);
 
   void setQualified(bool qualified) {
+    var name = this.name;
     if (!qualified && name is LiteralString) {
       _expr = identifier(name);
     }
@@ -44,7 +45,7 @@
 
   int get precedenceLevel => _expr.precedenceLevel;
 
-  accept(NodeVisitor visitor) => _expr.accept(visitor);
+  T accept<T>(NodeVisitor<T> visitor) => _expr.accept(visitor);
 
   void visitChildren(NodeVisitor visitor) => _expr.visitChildren(visitor);
 }
@@ -194,7 +195,7 @@
       name = id.name;
       valid = !invalidVariableName(name);
     } else {
-      name = id;
+      name = id as String;
       valid = false;
     }
 
diff --git a/pkg/dev_compiler/lib/src/compiler/js_utils.dart b/pkg/dev_compiler/lib/src/compiler/js_utils.dart
index d557f79..1710810 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_utils.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_utils.dart
@@ -11,10 +11,13 @@
     var stat = fn.body.statements.single;
     if (stat is Return && stat.value is Call) {
       Call call = stat.value;
-      if (call.target is ArrowFun && call.arguments.isEmpty) {
-        ArrowFun innerFun = call.target;
-        if (innerFun.params.isEmpty) {
-          return new Fun(fn.params, innerFun.body,
+      var innerFun = call.target;
+      if (innerFun is ArrowFun &&
+          call.arguments.isEmpty &&
+          innerFun.params.isEmpty) {
+        var body = innerFun.body;
+        if (body is Block) {
+          return new Fun(fn.params, body,
               typeParams: fn.typeParams, returnType: fn.returnType);
         }
       }
diff --git a/pkg/dev_compiler/lib/src/compiler/module_builder.dart b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
index 6546995..53f6735 100644
--- a/pkg/dev_compiler/lib/src/compiler/module_builder.dart
+++ b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
@@ -134,7 +134,10 @@
 
   visitExportDeclaration(ExportDeclaration node) {
     exports.add(node);
-    statements.add(node.exported.toStatement());
+    var exported = node.exported;
+    if (exported is! ExportClause) {
+      statements.add(exported.toStatement());
+    }
   }
 
   visitStatement(Statement node) {
@@ -193,12 +196,12 @@
       }
     }
 
-    var resultModule =
-        js.call("function(#) { 'use strict'; #; }", [parameters, statements]);
     var functionName =
         'load__' + pathToJSIdentifier(module.name.replaceAll('.', '_'));
-    resultModule =
-        new NamedFunction(new Identifier(functionName), resultModule, true);
+    var resultModule = new NamedFunction(
+        new Identifier(functionName),
+        js.fun("function(#) { 'use strict'; #; }", [parameters, statements]),
+        true);
 
     var moduleDef = js.statement("dart_library.library(#, #, #, #)", [
       js.string(module.name, "'"),
diff --git a/pkg/dev_compiler/lib/src/compiler/type_utilities.dart b/pkg/dev_compiler/lib/src/compiler/type_utilities.dart
index f497fc4..a5dfc6f 100644
--- a/pkg/dev_compiler/lib/src/compiler/type_utilities.dart
+++ b/pkg/dev_compiler/lib/src/compiler/type_utilities.dart
@@ -116,7 +116,7 @@
 
   /// Heuristically choose a good name for the cache and generator
   /// variables.
-  JS.Identifier chooseTypeName(DartType type) {
+  JS.TemporaryId chooseTypeName(DartType type) {
     return new JS.TemporaryId(_typeString(type));
   }
 }
diff --git a/pkg/dev_compiler/lib/src/js_ast/builder.dart b/pkg/dev_compiler/lib/src/js_ast/builder.dart
index 1101b7d..16fea13 100644
--- a/pkg/dev_compiler/lib/src/js_ast/builder.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/builder.dart
@@ -202,25 +202,29 @@
    * a list of [Node]s, which will be interpolated into the source at the '#'
    * signs.
    */
-  Expression call(String source, [var arguments]) {
+  Expression call(String source, [arguments]) {
     Template template = _findExpressionTemplate(source);
-    if (arguments == null) return template.instantiate([]);
+    if (arguments == null) return template.instantiate([]) as Expression;
     // We allow a single argument to be given directly.
     if (arguments is! List && arguments is! Map) arguments = [arguments];
-    return template.instantiate(arguments);
+    return template.instantiate(arguments) as Expression;
   }
 
   /**
    * Parses a JavaScript Statement, otherwise just like [call].
    */
-  Statement statement(String source, [var arguments]) {
+  Statement statement(String source, [arguments]) {
     Template template = _findStatementTemplate(source);
-    if (arguments == null) return template.instantiate([]);
+    if (arguments == null) return template.instantiate([]) as Statement;
     // We allow a single argument to be given directly.
     if (arguments is! List && arguments is! Map) arguments = [arguments];
-    return template.instantiate(arguments);
+    return template.instantiate(arguments) as Statement;
   }
 
+  Block block(String source, [arguments]) =>
+      statement(source, arguments) as Block;
+  Fun fun(String source, [arguments]) => call(source, arguments) as Fun;
+
   /**
    * Parses JavaScript written in the `JS` foreign instruction.
    *
@@ -789,7 +793,7 @@
     return false;
   }
 
-  void error(message) {
+  void error(String message) {
     throw new MiniJsParserError(this, message);
   }
 
@@ -970,7 +974,7 @@
     return parseFun();
   }
 
-  Expression parseFun() {
+  Fun parseFun() {
     List<Parameter> params = <Parameter>[];
 
     expectCategory(LPAREN);
@@ -1222,7 +1226,7 @@
     var initialization = <VariableInitialization>[];
 
     do {
-      var declarator;
+      VariableBinding declarator;
       if (firstIdentifier != null) {
         declarator = new Identifier(firstIdentifier);
         firstIdentifier = null;
@@ -1269,17 +1273,18 @@
   ArrayBindingPattern parseArrayBindingPattern() {
     var variables = <DestructuredVariable>[];
     do {
-      var name;
-      var structure;
-      var defaultValue;
+      Identifier name;
+      BindingPattern structure;
+      Expression defaultValue;
 
       var declarator = parseVariableBinding();
-      if (declarator is Identifier)
+      if (declarator is Identifier) {
         name = declarator;
-      else if (declarator is BindingPattern)
+      } else if (declarator is BindingPattern) {
         structure = declarator;
-      else
+      } else {
         error("Unexpected LHS: $declarator");
+      }
 
       if (acceptString("=")) {
         defaultValue = parseExpression();
@@ -1296,8 +1301,8 @@
     var variables = <DestructuredVariable>[];
     do {
       var name = parseIdentifier();
-      var structure;
-      var defaultValue;
+      BindingPattern structure;
+      Expression defaultValue;
 
       if (acceptCategory(COLON)) {
         structure = parseBindingPattern();
@@ -1454,7 +1459,7 @@
     return new Throw(expression);
   }
 
-  Statement parseBreakOrContinue(constructor) {
+  Statement parseBreakOrContinue(Statement Function(String) constructor) {
     var identifier = lastToken;
     if (!skippedNewline && acceptCategory(ALPHA)) {
       expectSemicolon();
@@ -1546,7 +1551,7 @@
   Statement parseFunctionDeclaration() {
     String name = lastToken;
     expectCategory(ALPHA);
-    Expression fun = parseFun();
+    var fun = parseFun();
     return new FunctionDeclaration(new Identifier(name), fun);
   }
 
@@ -1565,7 +1570,7 @@
     return new Try(body, catchPart, finallyPart);
   }
 
-  SwitchClause parseSwitchClause() {
+  SwitchCase parseSwitchClause() {
     Expression expression = null;
     if (acceptString('case')) {
       expression = parseExpression();
@@ -1582,9 +1587,7 @@
         lastToken != 'default') {
       statements.add(parseStatement());
     }
-    return expression == null
-        ? new Default(new Block(statements))
-        : new Case(expression, new Block(statements));
+    return new SwitchCase(expression, new Block(statements));
   }
 
   Statement parseWhile() {
@@ -1611,7 +1614,7 @@
     Expression key = parseExpression();
     expectCategory(RPAREN);
     expectCategory(LBRACE);
-    List<SwitchClause> clauses = new List<SwitchClause>();
+    var clauses = new List<SwitchCase>();
     while (lastCategory != RBRACE) {
       clauses.add(parseSwitchClause());
     }
@@ -1638,7 +1641,7 @@
     expectCategory(LBRACE);
     var methods = new List<Method>();
     while (lastCategory != RBRACE) {
-      methods.add(parseMethodOrProperty(onlyMethods: true));
+      methods.add(parseMethodOrProperty(onlyMethods: true) as Method);
     }
     expectCategory(RBRACE);
     return new ClassExpression(name, heritage, methods);
diff --git a/pkg/dev_compiler/lib/src/js_ast/js_types.dart b/pkg/dev_compiler/lib/src/js_ast/js_types.dart
index a3d1971..6217798b 100644
--- a/pkg/dev_compiler/lib/src/js_ast/js_types.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/js_types.dart
@@ -84,7 +84,7 @@
   AnyTypeRef._() : super();
 
   factory AnyTypeRef() => _any;
-  accept(NodeVisitor visitor) => visitor.visitAnyTypeRef(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitAnyTypeRef(this);
   void visitChildren(NodeVisitor visitor) {}
   _clone() => new AnyTypeRef();
 }
@@ -98,7 +98,7 @@
   UnknownTypeRef._() : super();
 
   factory UnknownTypeRef() => _unknown;
-  accept(NodeVisitor visitor) => visitor.visitUnknownTypeRef(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitUnknownTypeRef(this);
   void visitChildren(NodeVisitor visitor) {}
   _clone() => new UnknownTypeRef();
 }
@@ -107,7 +107,7 @@
   final List<Identifier> path;
   QualifiedTypeRef(this.path);
 
-  accept(NodeVisitor visitor) => visitor.visitQualifiedTypeRef(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitQualifiedTypeRef(this);
   void visitChildren(NodeVisitor visitor) =>
       path.forEach((p) => p.accept(visitor));
   _clone() => new QualifiedTypeRef(path);
@@ -116,7 +116,7 @@
 class ArrayTypeRef extends TypeRef {
   final TypeRef elementType;
   ArrayTypeRef(this.elementType);
-  accept(NodeVisitor visitor) => visitor.visitArrayTypeRef(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrayTypeRef(this);
   void visitChildren(NodeVisitor visitor) {
     elementType.accept(visitor);
   }
@@ -129,7 +129,7 @@
   final List<TypeRef> typeArgs;
   GenericTypeRef(this.rawType, this.typeArgs);
 
-  accept(NodeVisitor visitor) => visitor.visitGenericTypeRef(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitGenericTypeRef(this);
   void visitChildren(NodeVisitor visitor) {
     rawType.accept(visitor);
     typeArgs.forEach((p) => p.accept(visitor));
@@ -142,7 +142,7 @@
   final List<TypeRef> types;
   UnionTypeRef(this.types);
 
-  accept(NodeVisitor visitor) => visitor.visitUnionTypeRef(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitUnionTypeRef(this);
   void visitChildren(NodeVisitor visitor) {
     types.forEach((p) => p.accept(visitor));
   }
@@ -162,7 +162,7 @@
   final TypeRef type;
   OptionalTypeRef(this.type);
 
-  accept(NodeVisitor visitor) => visitor.visitOptionalTypeRef(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitOptionalTypeRef(this);
   void visitChildren(NodeVisitor visitor) {
     type.accept(visitor);
   }
@@ -177,7 +177,7 @@
   final Map<Identifier, TypeRef> types;
   RecordTypeRef(this.types);
 
-  accept(NodeVisitor visitor) => visitor.visitRecordTypeRef(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitRecordTypeRef(this);
   void visitChildren(NodeVisitor visitor) {
     types.values.forEach((p) => p.accept(visitor));
   }
@@ -190,7 +190,7 @@
   final Map<Identifier, TypeRef> paramTypes;
   FunctionTypeRef(this.returnType, this.paramTypes);
 
-  accept(NodeVisitor visitor) => visitor.visitFunctionTypeRef(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitFunctionTypeRef(this);
   void visitChildren(NodeVisitor visitor) {
     returnType.accept(visitor);
     paramTypes.forEach((n, t) {
diff --git a/pkg/dev_compiler/lib/src/js_ast/nodes.dart b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
index 01649b7..cbbfa9b 100644
--- a/pkg/dev_compiler/lib/src/js_ast/nodes.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
@@ -23,8 +23,7 @@
   T visitTry(Try node);
   T visitCatch(Catch node);
   T visitSwitch(Switch node);
-  T visitCase(Case node);
-  T visitDefault(Default node);
+  T visitSwitchCase(SwitchCase node);
   T visitFunctionDeclaration(FunctionDeclaration node);
   T visitLabeledStatement(LabeledStatement node);
   T visitLiteralStatement(LiteralStatement node);
@@ -139,8 +138,7 @@
   T visitLiteralStatement(LiteralStatement node) => visitStatement(node);
 
   T visitCatch(Catch node) => visitNode(node);
-  T visitCase(Case node) => visitNode(node);
-  T visitDefault(Default node) => visitNode(node);
+  T visitSwitchCase(SwitchCase node) => visitNode(node);
 
   T visitExpression(Expression node) => visitNode(node);
 
@@ -148,13 +146,8 @@
   T visitVariableDeclarationList(VariableDeclarationList node) =>
       visitExpression(node);
   T visitAssignment(Assignment node) => visitExpression(node);
-  T visitVariableInitialization(VariableInitialization node) {
-    if (node.value != null) {
-      return visitAssignment(node);
-    } else {
-      return visitExpression(node);
-    }
-  }
+  T visitVariableInitialization(VariableInitialization node) =>
+      visitExpression(node);
 
   T visitConditional(Conditional node) => visitExpression(node);
   T visitNew(New node) => visitExpression(node);
@@ -255,7 +248,7 @@
   /// Closure annotation of this node.
   ClosureAnnotation closureAnnotation;
 
-  accept(NodeVisitor visitor);
+  T accept<T>(NodeVisitor<T> visitor);
   void visitChildren(NodeVisitor visitor);
 
   // Shallow clone of node.  Does not clone positions since the only use of this
@@ -311,7 +304,7 @@
 
   Program(this.body, {this.scriptTag, this.name});
 
-  accept(NodeVisitor visitor) => visitor.visitProgram(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitProgram(this);
   void visitChildren(NodeVisitor visitor) {
     for (ModuleItem statement in body) statement.accept(visitor);
   }
@@ -369,14 +362,14 @@
       !isScope && statements.any((s) => s.shadows(names));
 
   @override
-  Statement toScopedBlock(Set<String> names) {
+  Block toScopedBlock(Set<String> names) {
     var scoped = statements.any((s) => s.shadows(names));
     if (scoped == isScope) return this;
     return new Block(statements, isScope: scoped)
       ..sourceInformation = sourceInformation;
   }
 
-  accept(NodeVisitor visitor) => visitor.visitBlock(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitBlock(this);
   void visitChildren(NodeVisitor visitor) {
     for (Statement statement in statements) statement.accept(visitor);
   }
@@ -394,7 +387,7 @@
     return expression is VariableDeclarationList && expression.shadows(names);
   }
 
-  accept(NodeVisitor visitor) => visitor.visitExpressionStatement(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitExpressionStatement(this);
   void visitChildren(NodeVisitor visitor) {
     expression.accept(visitor);
   }
@@ -405,22 +398,22 @@
 class EmptyStatement extends Statement {
   EmptyStatement();
 
-  accept(NodeVisitor visitor) => visitor.visitEmptyStatement(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitEmptyStatement(this);
   void visitChildren(NodeVisitor visitor) {}
   EmptyStatement _clone() => new EmptyStatement();
 }
 
 class If extends Statement {
   final Expression condition;
-  final Node then;
-  final Node otherwise;
+  final Statement then;
+  final Statement otherwise;
 
   If(this.condition, this.then, this.otherwise);
   If.noElse(this.condition, this.then) : this.otherwise = null;
 
   bool get hasElse => otherwise != null;
 
-  accept(NodeVisitor visitor) => visitor.visitIf(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitIf(this);
 
   void visitChildren(NodeVisitor visitor) {
     condition.accept(visitor);
@@ -443,7 +436,7 @@
 
   For(this.init, this.condition, this.update, Statement body) : super(body);
 
-  accept(NodeVisitor visitor) => visitor.visitFor(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitFor(this);
 
   void visitChildren(NodeVisitor visitor) {
     if (init != null) init.accept(visitor);
@@ -463,7 +456,7 @@
 
   ForIn(this.leftHandSide, this.object, Statement body) : super(body);
 
-  accept(NodeVisitor visitor) => visitor.visitForIn(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitForIn(this);
 
   void visitChildren(NodeVisitor visitor) {
     leftHandSide.accept(visitor);
@@ -482,7 +475,7 @@
 
   ForOf(this.leftHandSide, this.iterable, Statement body) : super(body);
 
-  accept(NodeVisitor visitor) => visitor.visitForOf(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitForOf(this);
 
   void visitChildren(NodeVisitor visitor) {
     leftHandSide.accept(visitor);
@@ -494,11 +487,11 @@
 }
 
 class While extends Loop {
-  final Node condition;
+  final Expression condition;
 
   While(this.condition, Statement body) : super(body);
 
-  accept(NodeVisitor visitor) => visitor.visitWhile(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitWhile(this);
 
   void visitChildren(NodeVisitor visitor) {
     condition.accept(visitor);
@@ -513,7 +506,7 @@
 
   Do(Statement body, this.condition) : super(body);
 
-  accept(NodeVisitor visitor) => visitor.visitDo(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitDo(this);
 
   void visitChildren(NodeVisitor visitor) {
     body.accept(visitor);
@@ -528,7 +521,7 @@
 
   Continue(this.targetLabel);
 
-  accept(NodeVisitor visitor) => visitor.visitContinue(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitContinue(this);
   void visitChildren(NodeVisitor visitor) {}
 
   Continue _clone() => new Continue(targetLabel);
@@ -539,7 +532,7 @@
 
   Break(this.targetLabel);
 
-  accept(NodeVisitor visitor) => visitor.visitBreak(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitBreak(this);
   void visitChildren(NodeVisitor visitor) {}
 
   Break _clone() => new Break(targetLabel);
@@ -552,7 +545,7 @@
 
   Statement toReturn() => this;
 
-  accept(NodeVisitor visitor) => visitor.visitReturn(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitReturn(this);
 
   void visitChildren(NodeVisitor visitor) {
     if (value != null) value.accept(visitor);
@@ -585,7 +578,7 @@
 
   Throw(this.expression);
 
-  accept(NodeVisitor visitor) => visitor.visitThrow(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitThrow(this);
 
   void visitChildren(NodeVisitor visitor) {
     expression.accept(visitor);
@@ -603,7 +596,7 @@
     assert(catchPart != null || finallyPart != null);
   }
 
-  accept(NodeVisitor visitor) => visitor.visitTry(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitTry(this);
 
   void visitChildren(NodeVisitor visitor) {
     body.accept(visitor);
@@ -620,7 +613,7 @@
 
   Catch(this.declaration, this.body);
 
-  accept(NodeVisitor visitor) => visitor.visitCatch(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitCatch(this);
 
   void visitChildren(NodeVisitor visitor) {
     declaration.accept(visitor);
@@ -632,51 +625,37 @@
 
 class Switch extends Statement {
   final Expression key;
-  final List<SwitchClause> cases;
+  final List<SwitchCase> cases;
 
   Switch(this.key, this.cases);
 
-  accept(NodeVisitor visitor) => visitor.visitSwitch(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitSwitch(this);
 
   void visitChildren(NodeVisitor visitor) {
     key.accept(visitor);
-    for (SwitchClause clause in cases) clause.accept(visitor);
+    for (var clause in cases) clause.accept(visitor);
   }
 
   Switch _clone() => new Switch(key, cases);
 }
 
-abstract class SwitchClause extends Node {
+class SwitchCase extends Node {
+  final Expression expression;
   final Block body;
 
-  SwitchClause(this.body);
-}
+  SwitchCase(this.expression, this.body);
+  SwitchCase.defaultCase(this.body) : expression = null;
 
-class Case extends SwitchClause {
-  final Expression expression;
+  bool get isDefault => expression == null;
 
-  Case(this.expression, Block body) : super(body);
-
-  accept(NodeVisitor visitor) => visitor.visitCase(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitSwitchCase(this);
 
   void visitChildren(NodeVisitor visitor) {
-    expression.accept(visitor);
+    expression?.accept(visitor);
     body.accept(visitor);
   }
 
-  Case _clone() => new Case(expression, body);
-}
-
-class Default extends SwitchClause {
-  Default(Block body) : super(body);
-
-  accept(NodeVisitor visitor) => visitor.visitDefault(this);
-
-  void visitChildren(NodeVisitor visitor) {
-    body.accept(visitor);
-  }
-
-  Default _clone() => new Default(body);
+  SwitchCase _clone() => new SwitchCase(expression, body);
 }
 
 class FunctionDeclaration extends Statement {
@@ -685,7 +664,7 @@
 
   FunctionDeclaration(this.name, this.function);
 
-  accept(NodeVisitor visitor) => visitor.visitFunctionDeclaration(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitFunctionDeclaration(this);
 
   void visitChildren(NodeVisitor visitor) {
     name.accept(visitor);
@@ -701,7 +680,7 @@
 
   LabeledStatement(this.label, this.body);
 
-  accept(NodeVisitor visitor) => visitor.visitLabeledStatement(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitLabeledStatement(this);
 
   void visitChildren(NodeVisitor visitor) {
     body.accept(visitor);
@@ -715,7 +694,7 @@
 
   LiteralStatement(this.code);
 
-  accept(NodeVisitor visitor) => visitor.visitLiteralStatement(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralStatement(this);
   void visitChildren(NodeVisitor visitor) {}
 
   LiteralStatement _clone() => new LiteralStatement(code);
@@ -730,7 +709,7 @@
 
   DartYield(this.expression, this.hasStar);
 
-  accept(NodeVisitor visitor) => visitor.visitDartYield(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitDartYield(this);
 
   void visitChildren(NodeVisitor visitor) {
     expression.accept(visitor);
@@ -764,7 +743,7 @@
       new Assignment.compound(left, op, this);
 
   // TODO(jmesserly): make this work for more cases?
-  Statement toVariableDeclaration(Identifier name) =>
+  Statement toVariableDeclaration(VariableBinding name) =>
       new VariableDeclarationList(
           'let', [new VariableInitialization(name, this)]).toStatement();
 }
@@ -776,7 +755,7 @@
   LiteralExpression(this.template) : inputs = const [];
   LiteralExpression.withData(this.template, this.inputs);
 
-  accept(NodeVisitor visitor) => visitor.visitLiteralExpression(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralExpression(this);
 
   void visitChildren(NodeVisitor visitor) {
     if (inputs != null) {
@@ -815,7 +794,8 @@
     return false;
   }
 
-  accept(NodeVisitor visitor) => visitor.visitVariableDeclarationList(this);
+  T accept<T>(NodeVisitor<T> visitor) =>
+      visitor.visitVariableDeclarationList(this);
 
   void visitChildren(NodeVisitor visitor) {
     for (VariableInitialization declaration in declarations) {
@@ -832,16 +812,16 @@
 class Assignment extends Expression {
   final Expression leftHandSide;
   final String op; // Null, if the assignment is not compound.
-  final Expression value; // May be null, for [VariableInitialization]s.
+  final Expression value;
 
-  Assignment(leftHandSide, value) : this.compound(leftHandSide, null, value);
+  Assignment(this.leftHandSide, this.value) : op = null;
   Assignment.compound(this.leftHandSide, this.op, this.value);
 
   int get precedenceLevel => ASSIGNMENT;
 
   bool get isCompound => op != null;
 
-  accept(NodeVisitor visitor) => visitor.visitAssignment(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitAssignment(this);
 
   void visitChildren(NodeVisitor visitor) {
     leftHandSide.accept(visitor);
@@ -851,17 +831,25 @@
   Assignment _clone() => new Assignment.compound(leftHandSide, op, value);
 }
 
-class VariableInitialization extends Assignment {
-  /** [value] may be null. */
-  VariableInitialization(VariableBinding declaration, Expression value)
-      : super(declaration, value);
+class VariableInitialization extends Expression {
+  final VariableBinding declaration;
+  final Expression value; // May be null.
 
-  VariableBinding get declaration => leftHandSide;
+  /// [value] may be null.
+  VariableInitialization(this.declaration, this.value);
 
-  accept(NodeVisitor visitor) => visitor.visitVariableInitialization(this);
+  T accept<T>(NodeVisitor<T> visitor) =>
+      visitor.visitVariableInitialization(this);
 
   VariableInitialization _clone() =>
       new VariableInitialization(declaration, value);
+
+  int get precedenceLevel => ASSIGNMENT;
+
+  void visitChildren(NodeVisitor visitor) {
+    declaration.accept(visitor);
+    if (value != null) value.accept(visitor);
+  }
 }
 
 abstract class VariableBinding extends Expression {
@@ -871,24 +859,39 @@
   bool shadows(Set<String> names);
 }
 
+// TODO(jmesserly): destructuring was originally implemented in the context of
+// Closure Compiler work. Rethink how this is represented.
 class DestructuredVariable extends Expression implements Parameter {
-  /// [LiteralString] or [Identifier].
-  final Expression name;
+  final Identifier name;
+
+  /// The proprety in an object binding pattern, for example:
+  ///
+  ///     let key = 'z';
+  ///     let {[key]: foo} = {z: 'bar'};
+  ///     console.log(foo); // "bar"
+  ///
+  // TODO(jmesserly): parser does not support this feature.
+  final Expression property;
+
   final BindingPattern structure;
   final Expression defaultValue;
   final TypeRef type;
   DestructuredVariable(
-      {this.name, this.structure, this.defaultValue, this.type}) {
+      {this.name,
+      this.property,
+      this.structure,
+      this.defaultValue,
+      this.type}) {
     assert(name != null || structure != null);
   }
 
   bool shadows(Set<String> names) {
-    Expression name = this.name;
-    return names.contains(
-        name is LiteralString ? name.value : (name as Identifier).name);
+    return (name?.shadows(names) ?? false) ||
+        (structure?.shadows(names) ?? false);
   }
 
-  accept(NodeVisitor visitor) => visitor.visitDestructuredVariable(this);
+  T accept<T>(NodeVisitor<T> visitor) =>
+      visitor.visitDestructuredVariable(this);
   void visitChildren(NodeVisitor visitor) {
     name?.accept(visitor);
     structure?.accept(visitor);
@@ -900,7 +903,10 @@
   int get precedenceLevel => PRIMARY;
   @override
   Node _clone() => new DestructuredVariable(
-      name: name, structure: structure, defaultValue: defaultValue);
+      name: name,
+      property: property,
+      structure: structure,
+      defaultValue: defaultValue);
 }
 
 abstract class BindingPattern extends Expression implements VariableBinding {
@@ -923,7 +929,8 @@
       : name = name,
         super([new DestructuredVariable(name: name)]);
 
-  accept(NodeVisitor visitor) => visitor.visitSimpleBindingPattern(this);
+  T accept<T>(NodeVisitor<T> visitor) =>
+      visitor.visitSimpleBindingPattern(this);
 
   @override
   bool shadows(Set<String> names) => names.contains(name.name);
@@ -937,7 +944,8 @@
 
 class ObjectBindingPattern extends BindingPattern {
   ObjectBindingPattern(List<DestructuredVariable> variables) : super(variables);
-  accept(NodeVisitor visitor) => visitor.visitObjectBindingPattern(this);
+  T accept<T>(NodeVisitor<T> visitor) =>
+      visitor.visitObjectBindingPattern(this);
 
   /// Avoid parenthesis when pretty-printing.
   @override
@@ -948,13 +956,13 @@
 
 class ArrayBindingPattern extends BindingPattern {
   ArrayBindingPattern(List<DestructuredVariable> variables) : super(variables);
-  accept(NodeVisitor visitor) => visitor.visitArrayBindingPattern(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrayBindingPattern(this);
 
   /// Avoid parenthesis when pretty-printing.
   @override
   int get precedenceLevel => PRIMARY;
   @override
-  Node _clone() => new ObjectBindingPattern(variables);
+  Node _clone() => new ArrayBindingPattern(variables);
 }
 
 class Conditional extends Expression {
@@ -964,7 +972,7 @@
 
   Conditional(this.condition, this.then, this.otherwise);
 
-  accept(NodeVisitor visitor) => visitor.visitConditional(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitConditional(this);
 
   void visitChildren(NodeVisitor visitor) {
     condition.accept(visitor);
@@ -983,7 +991,7 @@
 
   Call(this.target, this.arguments);
 
-  accept(NodeVisitor visitor) => visitor.visitCall(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitCall(this);
 
   void visitChildren(NodeVisitor visitor) {
     target.accept(visitor);
@@ -998,7 +1006,7 @@
 class New extends Call {
   New(Expression cls, List<Expression> arguments) : super(cls, arguments);
 
-  accept(NodeVisitor visitor) => visitor.visitNew(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitNew(this);
 
   New _clone() => new New(target, arguments);
 
@@ -1012,7 +1020,7 @@
 
   Binary(this.op, this.left, this.right);
 
-  accept(NodeVisitor visitor) => visitor.visitBinary(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitBinary(this);
 
   Binary _clone() => new Binary(op, left, right);
 
@@ -1113,7 +1121,7 @@
 
   Prefix(this.op, this.argument);
 
-  accept(NodeVisitor visitor) => visitor.visitPrefix(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitPrefix(this);
 
   Prefix _clone() => new Prefix(op, argument);
 
@@ -1131,7 +1139,7 @@
   Spread(Expression operand) : super('...', operand);
   int get precedenceLevel => SPREAD;
 
-  accept(NodeVisitor visitor) => visitor.visitSpread(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitSpread(this);
   Spread _clone() => new Spread(argument);
 }
 
@@ -1141,7 +1149,7 @@
 
   Postfix(this.op, this.argument);
 
-  accept(NodeVisitor visitor) => visitor.visitPostfix(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitPostfix(this);
 
   Postfix _clone() => new Postfix(op, argument);
 
@@ -1156,7 +1164,7 @@
   TypeRef get type;
 }
 
-class Identifier extends Expression implements Parameter, VariableBinding {
+class Identifier extends Expression implements Parameter {
   final String name;
   final bool allowRename;
   final TypeRef type;
@@ -1171,7 +1179,7 @@
   bool shadows(Set<String> names) => names.contains(name);
 
   Identifier _clone() => new Identifier(name, allowRename: allowRename);
-  accept(NodeVisitor visitor) => visitor.visitIdentifier(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitIdentifier(this);
   int get precedenceLevel => PRIMARY;
   void visitChildren(NodeVisitor visitor) {}
 }
@@ -1186,7 +1194,7 @@
   bool shadows(Set<String> names) => names.contains(parameter.name);
 
   RestParameter _clone() => new RestParameter(parameter);
-  accept(NodeVisitor visitor) => visitor.visitRestParameter(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitRestParameter(this);
   void visitChildren(NodeVisitor visitor) {
     parameter.accept(visitor);
   }
@@ -1195,7 +1203,7 @@
 }
 
 class This extends Expression {
-  accept(NodeVisitor visitor) => visitor.visitThis(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitThis(this);
   This _clone() => new This();
   int get precedenceLevel => PRIMARY;
   void visitChildren(NodeVisitor visitor) {}
@@ -1223,7 +1231,7 @@
 // `super` is more restricted in the ES6 spec, but for simplicity we accept
 // it anywhere that `this` is accepted.
 class Super extends Expression {
-  accept(NodeVisitor visitor) => visitor.visitSuper(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitSuper(this);
   Super _clone() => new Super();
   int get precedenceLevel => PRIMARY;
   void visitChildren(NodeVisitor visitor) {}
@@ -1239,7 +1247,7 @@
 
   NamedFunction(this.name, this.function, [this.immediatelyInvoked = false]);
 
-  accept(NodeVisitor visitor) => visitor.visitNamedFunction(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitNamedFunction(this);
 
   void visitChildren(NodeVisitor visitor) {
     name.accept(visitor);
@@ -1284,7 +1292,7 @@
       this.typeParams,
       this.returnType});
 
-  accept(NodeVisitor visitor) => visitor.visitFun(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitFun(this);
 
   void visitChildren(NodeVisitor visitor) {
     for (Parameter param in params) param.accept(visitor);
@@ -1307,7 +1315,7 @@
 
   ArrowFun(this.params, this.body, {this.typeParams, this.returnType});
 
-  accept(NodeVisitor visitor) => visitor.visitArrowFun(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrowFun(this);
 
   void visitChildren(NodeVisitor visitor) {
     for (Parameter param in params) param.accept(visitor);
@@ -1359,7 +1367,7 @@
   PropertyAccess.indexed(this.receiver, int index)
       : selector = new LiteralNumber('$index');
 
-  accept(NodeVisitor visitor) => visitor.visitAccess(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitAccess(this);
 
   void visitChildren(NodeVisitor visitor) {
     receiver.accept(visitor);
@@ -1382,7 +1390,7 @@
 
   LiteralBool(this.value);
 
-  accept(NodeVisitor visitor) => visitor.visitLiteralBool(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralBool(this);
   // [visitChildren] inherited from [Literal].
   LiteralBool _clone() => new LiteralBool(value);
 }
@@ -1390,7 +1398,7 @@
 class LiteralNull extends Literal {
   LiteralNull();
 
-  accept(NodeVisitor visitor) => visitor.visitLiteralNull(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralNull(this);
   LiteralNull _clone() => new LiteralNull();
 }
 
@@ -1412,7 +1420,7 @@
   /// Gets the value inside the string without the beginning and end quotes.
   String get valueWithoutQuotes => value.substring(1, value.length - 1);
 
-  accept(NodeVisitor visitor) => visitor.visitLiteralString(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralString(this);
   LiteralString _clone() => new LiteralString(value);
 }
 
@@ -1421,7 +1429,7 @@
 
   LiteralNumber(this.value);
 
-  accept(NodeVisitor visitor) => visitor.visitLiteralNumber(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralNumber(this);
   LiteralNumber _clone() => new LiteralNumber(value);
 
   /**
@@ -1437,7 +1445,7 @@
 
   ArrayInitializer(this.elements, {this.multiline: false});
 
-  accept(NodeVisitor visitor) => visitor.visitArrayInitializer(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrayInitializer(this);
 
   void visitChildren(NodeVisitor visitor) {
     for (Expression element in elements) element.accept(visitor);
@@ -1453,7 +1461,7 @@
  * For example the list [1, , , 2] would contain two holes.
  */
 class ArrayHole extends Expression {
-  accept(NodeVisitor visitor) => visitor.visitArrayHole(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrayHole(this);
 
   void visitChildren(NodeVisitor visitor) {}
 
@@ -1469,10 +1477,10 @@
   /**
    * Constructs a new object-initializer containing the given [properties].
    */
-  ObjectInitializer(this.properties, {multiline: false})
+  ObjectInitializer(this.properties, {bool multiline: false})
       : _multiline = multiline;
 
-  accept(NodeVisitor visitor) => visitor.visitObjectInitializer(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitObjectInitializer(this);
 
   void visitChildren(NodeVisitor visitor) {
     for (Property init in properties) init.accept(visitor);
@@ -1497,7 +1505,7 @@
 
   Property(this.name, this.value);
 
-  accept(NodeVisitor visitor) => visitor.visitProperty(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitProperty(this);
 
   void visitChildren(NodeVisitor visitor) {
     name.accept(visitor);
@@ -1533,7 +1541,7 @@
     assert(strings.length == interpolations.length + 1);
   }
 
-  accept(NodeVisitor visitor) => visitor.visitTemplateString(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitTemplateString(this);
 
   void visitChildren(NodeVisitor visitor) {
     for (var element in interpolations) {
@@ -1553,7 +1561,7 @@
 
   TaggedTemplate(this.tag, this.template);
 
-  accept(NodeVisitor visitor) => visitor.visitTaggedTemplate(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitTaggedTemplate(this);
 
   void visitChildren(NodeVisitor visitor) {
     tag.accept(visitor);
@@ -1577,7 +1585,7 @@
 
   Yield(this.value, {this.star: false});
 
-  accept(NodeVisitor visitor) => visitor.visitYield(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitYield(this);
 
   void visitChildren(NodeVisitor visitor) {
     if (value != null) value.accept(visitor);
@@ -1593,7 +1601,7 @@
 
   ClassDeclaration(this.classExpr);
 
-  accept(NodeVisitor visitor) => visitor.visitClassDeclaration(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitClassDeclaration(this);
   visitChildren(NodeVisitor visitor) => classExpr.accept(visitor);
   ClassDeclaration _clone() => new ClassDeclaration(classExpr);
 }
@@ -1613,7 +1621,7 @@
   ClassExpression(this.name, this.heritage, this.methods,
       {this.typeParams, this.fields});
 
-  accept(NodeVisitor visitor) => visitor.visitClassExpression(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitClassExpression(this);
 
   void visitChildren(NodeVisitor visitor) {
     name.accept(visitor);
@@ -1640,22 +1648,23 @@
   int get precedenceLevel => PRIMARY_LOW_PRECEDENCE;
 }
 
-class Method extends Property {
+class Method extends Node implements Property {
+  final Expression name;
+  final Fun function;
   final bool isGetter;
   final bool isSetter;
   final bool isStatic;
 
-  Method(Expression name, Fun function,
-      {this.isGetter: false, this.isSetter: false, this.isStatic: false})
-      : super(name, function) {
+  Method(this.name, this.function,
+      {this.isGetter: false, this.isSetter: false, this.isStatic: false}) {
     assert(!isGetter || function.params.length == 0);
     assert(!isSetter || function.params.length == 1);
     assert(!isGetter && !isSetter || !function.isGenerator);
   }
 
-  Fun get function => super.value;
+  Fun get value => function;
 
-  accept(NodeVisitor visitor) => visitor.visitMethod(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitMethod(this);
 
   void visitChildren(NodeVisitor visitor) {
     name.accept(visitor);
@@ -1679,7 +1688,8 @@
 
   InterpolatedExpression(this.nameOrPosition);
 
-  accept(NodeVisitor visitor) => visitor.visitInterpolatedExpression(this);
+  T accept<T>(NodeVisitor<T> visitor) =>
+      visitor.visitInterpolatedExpression(this);
   void visitChildren(NodeVisitor visitor) {}
   InterpolatedExpression _clone() => new InterpolatedExpression(nameOrPosition);
 
@@ -1691,7 +1701,7 @@
 
   InterpolatedLiteral(this.nameOrPosition);
 
-  accept(NodeVisitor visitor) => visitor.visitInterpolatedLiteral(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitInterpolatedLiteral(this);
   void visitChildren(NodeVisitor visitor) {}
   InterpolatedLiteral _clone() => new InterpolatedLiteral(nameOrPosition);
 }
@@ -1712,7 +1722,8 @@
 
   InterpolatedParameter(this.nameOrPosition);
 
-  accept(NodeVisitor visitor) => visitor.visitInterpolatedParameter(this);
+  T accept<T>(NodeVisitor<T> visitor) =>
+      visitor.visitInterpolatedParameter(this);
   void visitChildren(NodeVisitor visitor) {}
   InterpolatedParameter _clone() => new InterpolatedParameter(nameOrPosition);
 
@@ -1724,7 +1735,8 @@
 
   InterpolatedSelector(this.nameOrPosition);
 
-  accept(NodeVisitor visitor) => visitor.visitInterpolatedSelector(this);
+  T accept<T>(NodeVisitor<T> visitor) =>
+      visitor.visitInterpolatedSelector(this);
   void visitChildren(NodeVisitor visitor) {}
   InterpolatedSelector _clone() => new InterpolatedSelector(nameOrPosition);
 
@@ -1736,7 +1748,8 @@
 
   InterpolatedStatement(this.nameOrPosition);
 
-  accept(NodeVisitor visitor) => visitor.visitInterpolatedStatement(this);
+  T accept<T>(NodeVisitor<T> visitor) =>
+      visitor.visitInterpolatedStatement(this);
   void visitChildren(NodeVisitor visitor) {}
   InterpolatedStatement _clone() => new InterpolatedStatement(nameOrPosition);
 }
@@ -1749,18 +1762,19 @@
 
   InterpolatedMethod(this.nameOrPosition);
 
-  accept(NodeVisitor visitor) => visitor.visitInterpolatedMethod(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitInterpolatedMethod(this);
   void visitChildren(NodeVisitor visitor) {}
   InterpolatedMethod _clone() => new InterpolatedMethod(nameOrPosition);
 
   int get precedenceLevel => PRIMARY;
-  Expression get name => _unsupported;
-  Expression get value => _unsupported;
-  bool get isGetter => _unsupported;
-  bool get isSetter => _unsupported;
-  bool get isStatic => _unsupported;
-  Fun get function => _unsupported;
-  get _unsupported => throw '$runtimeType does not support this member.';
+  Expression get name => throw _unsupported;
+  Fun get value => throw _unsupported;
+  bool get isGetter => throw _unsupported;
+  bool get isSetter => throw _unsupported;
+  bool get isStatic => throw _unsupported;
+  Fun get function => throw _unsupported;
+  Error get _unsupported =>
+      new UnsupportedError('$runtimeType does not support this member.');
 }
 
 class InterpolatedIdentifier extends Expression
@@ -1773,7 +1787,8 @@
 
   bool shadows(Set<String> names) => false;
 
-  accept(NodeVisitor visitor) => visitor.visitInterpolatedIdentifier(this);
+  T accept<T>(NodeVisitor<T> visitor) =>
+      visitor.visitInterpolatedIdentifier(this);
   void visitChildren(NodeVisitor visitor) {}
   InterpolatedIdentifier _clone() => new InterpolatedIdentifier(nameOrPosition);
 
@@ -1793,7 +1808,7 @@
 
   RegExpLiteral(this.pattern);
 
-  accept(NodeVisitor visitor) => visitor.visitRegExpLiteral(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitRegExpLiteral(this);
   void visitChildren(NodeVisitor visitor) {}
   RegExpLiteral _clone() => new RegExpLiteral(pattern);
 
@@ -1813,7 +1828,7 @@
   Await(this.expression);
 
   int get precedenceLevel => UNARY;
-  accept(NodeVisitor visitor) => visitor.visitAwait(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitAwait(this);
   void visitChildren(NodeVisitor visitor) => expression.accept(visitor);
   Await _clone() => new Await(expression);
 }
@@ -1829,7 +1844,7 @@
 
   Comment(this.comment);
 
-  accept(NodeVisitor visitor) => visitor.visitComment(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitComment(this);
   Comment _clone() => new Comment(comment);
 
   void visitChildren(NodeVisitor visitor) {}
@@ -1848,7 +1863,7 @@
   CommentExpression(this.comment, this.expression);
 
   int get precedenceLevel => PRIMARY;
-  accept(NodeVisitor visitor) => visitor.visitCommentExpression(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitCommentExpression(this);
   CommentExpression _clone() => new CommentExpression(comment, expression);
 
   void visitChildren(NodeVisitor visitor) => expression.accept(visitor);
@@ -1885,7 +1900,7 @@
     return null;
   }
 
-  accept(NodeVisitor visitor) => visitor.visitImportDeclaration(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitImportDeclaration(this);
   void visitChildren(NodeVisitor visitor) {
     if (namedImports != null) {
       for (NameSpecifier name in namedImports) name.accept(visitor);
@@ -1929,7 +1944,9 @@
     if (exported is ClassDeclaration) return [exported.classExpr.name];
     if (exported is FunctionDeclaration) return [exported.name];
     if (exported is VariableDeclarationList) {
-      return exported.declarations.map((i) => i.declaration).toList();
+      return exported.declarations
+          .map((i) => i.declaration as Identifier)
+          .toList();
     }
     if (exported is ExportClause) {
       if (exported.exportStar) return null;
@@ -1938,7 +1955,7 @@
     throw new StateError('invalid export declaration');
   }
 
-  accept(NodeVisitor visitor) => visitor.visitExportDeclaration(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitExportDeclaration(this);
   visitChildren(NodeVisitor visitor) => exported.accept(visitor);
   ExportDeclaration _clone() =>
       new ExportDeclaration(exported, isDefault: isDefault);
@@ -1957,7 +1974,7 @@
   /** True if this is an `export *`. */
   bool get exportStar => exports.length == 1 && exports[0].isStar;
 
-  accept(NodeVisitor visitor) => visitor.visitExportClause(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitExportClause(this);
   void visitChildren(NodeVisitor visitor) {
     for (NameSpecifier name in exports) name.accept(visitor);
     if (from != null) from.accept(visitor);
@@ -1977,7 +1994,7 @@
   /** True if this is a `* as someName` specifier. */
   bool get isStar => name == null;
 
-  accept(NodeVisitor visitor) => visitor.visitNameSpecifier(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitNameSpecifier(this);
   void visitChildren(NodeVisitor visitor) {}
   NameSpecifier _clone() => new NameSpecifier(name, asName: asName);
 }
@@ -1992,7 +2009,7 @@
   final List<ModuleItem> body;
   Module(this.body, {this.name});
 
-  accept(NodeVisitor visitor) => visitor.visitModule(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitModule(this);
   void visitChildren(NodeVisitor visitor) {
     for (ModuleItem item in body) item.accept(visitor);
   }
diff --git a/pkg/dev_compiler/lib/src/js_ast/printer.dart b/pkg/dev_compiler/lib/src/js_ast/printer.dart
index d787256..7688fc7 100644
--- a/pkg/dev_compiler/lib/src/js_ast/printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/printer.dart
@@ -218,7 +218,7 @@
     context.exitNode(node);
   }
 
-  visitCommaSeparated(List<Node> nodes, int hasRequiredType,
+  visitCommaSeparated(List<Expression> nodes, int hasRequiredType,
       {bool newInForInit, bool newAtStatementBegin}) {
     for (int i = 0; i < nodes.length; i++) {
       if (i != 0) {
@@ -303,8 +303,8 @@
   }
 
   void ifOut(If node, bool shouldIndent) {
-    Node then = node.then;
-    Node elsePart = node.otherwise;
+    var then = node.then;
+    var elsePart = node.otherwise;
     bool hasElse = node.hasElse;
 
     // Handle dangling elses and a work-around for Android 4.0 stock browser.
@@ -524,19 +524,16 @@
     outIndentLn("}");
   }
 
-  visitCase(Case node) {
-    outIndent("case");
-    pendingSpace = true;
-    visitNestedExpression(node.expression, EXPRESSION,
-        newInForInit: false, newAtStatementBegin: false);
-    outLn(":");
-    if (!node.body.statements.isEmpty) {
-      blockOut(node.body, true, true);
+  visitSwitchCase(SwitchCase node) {
+    if (node.isDefault) {
+      outIndentLn("default:");
+    } else {
+      outIndent("case");
+      pendingSpace = true;
+      visitNestedExpression(node.expression, EXPRESSION,
+          newInForInit: false, newAtStatementBegin: false);
+      outLn(":");
     }
-  }
-
-  visitDefault(Default node) {
-    outIndentLn("default:");
     if (!node.body.statements.isEmpty) {
       blockOut(node.body, true, true);
     }
@@ -547,7 +544,7 @@
     blockBody(node.body, needsSeparation: false, needsNewline: true);
   }
 
-  void functionOut(Fun fun, Node name) {
+  void functionOut(Fun fun, Identifier name) {
     out("function");
     if (fun.isGenerator) out("*");
     if (name != null) {
@@ -648,29 +645,29 @@
 
   visitDestructuredVariable(DestructuredVariable node) {
     var name = node.name;
-    var hasName = name != null;
-    if (hasName) {
-      if (name is LiteralString) {
-        out("[");
-        out(name.value);
-        out("]");
-      } else {
-        visit(name);
-      }
+    var property = node.property;
+    if (name != null) {
+      visit(node.name);
+    } else if (property != null) {
+      out("[");
+      visit(node.property);
+      out("]");
     }
-    if (node.structure != null) {
-      if (hasName) {
+    var structure = node.structure;
+    if (structure != null) {
+      if (name != null || property != null) {
         out(":");
         spaceOut();
       }
-      visit(node.structure);
+      visit(structure);
     }
     outTypeAnnotation(node.type);
-    if (node.defaultValue != null) {
+    var defaultValue = node.defaultValue;
+    if (defaultValue != null) {
       spaceOut();
       out("=");
       spaceOut();
-      visitNestedExpression(node.defaultValue, EXPRESSION,
+      visitNestedExpression(defaultValue, EXPRESSION,
           newInForInit: false, newAtStatementBegin: false);
     }
   }
@@ -693,9 +690,17 @@
     }
   }
 
-  visitVariableInitialization(VariableInitialization initialization) {
-    outClosureAnnotation(initialization);
-    visitAssignment(initialization);
+  visitVariableInitialization(VariableInitialization init) {
+    outClosureAnnotation(init);
+    visitNestedExpression(init.declaration, LEFT_HAND_SIDE,
+        newInForInit: inForInit, newAtStatementBegin: atStatementBegin);
+    if (init.value != null) {
+      spaceOut();
+      out("=");
+      spaceOut();
+      visitNestedExpression(init.value, ASSIGNMENT,
+          newInForInit: inForInit, newAtStatementBegin: false);
+    }
   }
 
   visitConditional(Conditional cond) {
@@ -971,18 +976,19 @@
     outTypeAnnotation(fun.returnType);
     spaceOut();
     out("=>");
-    if (fun.body is Expression) {
+    var body = fun.body;
+    if (body is Expression) {
       spaceOut();
       // Object initializers require parenthesis to disambiguate
       // AssignmentExpression from FunctionBody. See:
       // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-arrow-function-definitions
       var needsParen = fun.body is ObjectInitializer;
       if (needsParen) out("(");
-      visitNestedExpression(fun.body, ASSIGNMENT,
+      visitNestedExpression(body, ASSIGNMENT,
           newInForInit: false, newAtStatementBegin: false);
       if (needsParen) out(")");
     } else {
-      blockBody(fun.body, needsSeparation: false, needsNewline: false);
+      blockBody(body as Block, needsSeparation: false, needsNewline: false);
     }
     localNamer.leaveScope();
   }
@@ -1233,7 +1239,7 @@
         spaceOut();
       }
     }
-    nameSpecifierListOut(node.namedImports);
+    nameSpecifierListOut(node.namedImports, false);
     fromClauseOut(node.from);
     outSemicolonLn();
   }
@@ -1248,15 +1254,15 @@
   }
 
   visitExportClause(ExportClause node) {
-    nameSpecifierListOut(node.exports);
+    nameSpecifierListOut(node.exports, true);
     fromClauseOut(node.from);
   }
 
-  nameSpecifierListOut(List<NameSpecifier> names) {
+  nameSpecifierListOut(List<NameSpecifier> names, bool export) {
     if (names == null) return;
 
     if (names.length == 1 && names[0].name == '*') {
-      visit(names[0]);
+      nameSpecifierOut(names[0], export);
       return;
     }
 
@@ -1267,7 +1273,7 @@
         out(',');
         spaceOut();
       }
-      visit(names[i]);
+      nameSpecifierOut(names[i], export);
     }
     spaceOut();
     out('}');
@@ -1281,22 +1287,28 @@
     }
   }
 
+  /// This is unused, see [nameSpecifierOut].
   visitNameSpecifier(NameSpecifier node) {
+    throw new UnsupportedError('visitNameSpecifier');
+  }
+
+  nameSpecifierOut(NameSpecifier node, bool export) {
     if (node.isStar) {
       out('*');
     } else {
-      var importName = node.name.name;
-      out(importName);
-
+      var name = node.name.name;
       if (node.asName == null) {
         // If our local was renamed, generate an implicit "as".
-        // This is a convenience feature so imports can be renamed.
+        // This is a convenience feature so imports and exports can be renamed.
         var localName = localNamer.getName(node.name);
-        if (localName != importName) {
+        if (localName != name) {
+          out(export ? localName : name);
           out(' as ');
-          out(localName);
+          out(export ? name : localName);
+          return;
         }
       }
+      out(name);
     }
     if (node.asName != null) {
       out(' as ');
@@ -1463,8 +1475,10 @@
   }
 
   void visitVariableInitialization(VariableInitialization node) {
-    declareVariable(node.declaration);
-    if (node.value != null) node.value.accept(this);
+    // TODO(jmesserly): add ES6 support. Currently not needed because
+    // dart2js does not emit ES6 rest param or destructuring.
+    declareVariable(node.declaration as Identifier);
+    node.value?.accept(this);
   }
 
   void declareVariable(Identifier decl) {
@@ -1515,8 +1529,7 @@
 
   bool visitCatch(Catch node) => node.body.accept(this);
   bool visitSwitch(Switch node) => false;
-  bool visitCase(Case node) => false;
-  bool visitDefault(Default node) => false;
+  bool visitSwitchCase(SwitchCase node) => false;
   bool visitFunctionDeclaration(FunctionDeclaration node) => false;
   bool visitLabeledStatement(LabeledStatement node) => node.body.accept(this);
   bool visitLiteralStatement(LiteralStatement node) => true;
@@ -1590,7 +1603,7 @@
   // moving on to a0, a1, etc.
   String declareVariable(String oldName) {
     if (avoidRenaming(oldName)) return oldName;
-    var newName;
+    String newName;
     if (variableNumber + parameterNumber < LOWER_CASE_LETTERS) {
       // Variables start from z and go backwards, for better gzipability.
       newName = getNameNumber(oldName, LOWER_CASE_LETTERS - 1 - variableNumber);
@@ -1604,7 +1617,7 @@
 
   String declareParameter(String oldName) {
     if (avoidRenaming(oldName)) return oldName;
-    var newName;
+    String newName;
     if (variableNumber + parameterNumber < LOWER_CASE_LETTERS) {
       newName = getNameNumber(oldName, parameterNumber);
     } else {
diff --git a/pkg/dev_compiler/lib/src/js_ast/template.dart b/pkg/dev_compiler/lib/src/js_ast/template.dart
index 4a822f3..6b4bc6c 100644
--- a/pkg/dev_compiler/lib/src/js_ast/template.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/template.dart
@@ -79,15 +79,13 @@
   }
 
   bool _checkNoPlaceholders() {
-    InstantiatorGeneratorVisitor generator =
-        new InstantiatorGeneratorVisitor(false);
+    var generator = new InstantiatorGeneratorVisitor(false);
     generator.compile(ast);
     return generator.analysis.count == 0;
   }
 
   void _compile() {
-    InstantiatorGeneratorVisitor generator =
-        new InstantiatorGeneratorVisitor(forceCopy);
+    var generator = new InstantiatorGeneratorVisitor(forceCopy);
     instantiator = generator.compile(ast);
     positionalArgumentCount = generator.analysis.count;
     Set<String> names = generator.analysis.holeNames;
@@ -104,22 +102,25 @@
         throw 'Wrong number of template arguments, given ${arguments.length}, '
             'expected $positionalArgumentCount:\n$source';
       }
-      return instantiator(arguments);
+      return instantiator(arguments) as Node;
     }
-    assert(arguments is Map);
-    if (holeNames.length < arguments.length) {
-      // This search is in O(n), but we only do it in case of an error, and the
-      // number of holes should be quite limited.
-      String unusedNames =
-          arguments.keys.where((name) => !holeNames.contains(name)).join(", ");
-      throw "Template arguments has unused mappings: $unusedNames";
+    if (arguments is Map) {
+      if (holeNames.length < arguments.length) {
+        // This search is in O(n), but we only do it in case of an new StateError, and the
+        // number of holes should be quite limited.
+        String unusedNames = arguments.keys
+            .where((name) => !holeNames.contains(name))
+            .join(", ");
+        throw "Template arguments has unused mappings: $unusedNames";
+      }
+      if (!holeNames.every((String name) => arguments.containsKey(name))) {
+        String notFound =
+            holeNames.where((name) => !arguments.containsKey(name)).join(", ");
+        throw "Template arguments is missing mappings for: $notFound";
+      }
+      return instantiator(arguments) as Node;
     }
-    if (!holeNames.every((String name) => arguments.containsKey(name))) {
-      String notFound =
-          holeNames.where((name) => !arguments.containsKey(name)).join(", ");
-      throw "Template arguments is missing mappings for: $notFound";
-    }
-    return instantiator(arguments);
+    throw new ArgumentError.value(arguments, 'must be a List or Map');
   }
 }
 
@@ -128,7 +129,7 @@
  * trees. [arguments] is a List for positional templates, or Map for
  * named templates.
  */
-typedef Instantiator(var arguments);
+typedef T Instantiator<T>(arguments);
 
 /**
  * InstantiatorGeneratorVisitor compiles a template.  This class compiles a tree
@@ -138,7 +139,7 @@
 class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
   final bool forceCopy;
 
-  InterpolatedNodeAnalysis analysis = new InterpolatedNodeAnalysis();
+  final analysis = new InterpolatedNodeAnalysis();
 
   /**
    * The entire tree is cloned if [forceCopy] is true.
@@ -147,16 +148,11 @@
 
   Instantiator compile(Node node) {
     analysis.visit(node);
-    Instantiator result = visit(node);
-    return result;
+    return visit(node);
   }
 
-  static error(String message) {
-    throw message;
-  }
-
-  static Instantiator same(Node node) => (arguments) => node;
-  static Node makeNull(arguments) => null;
+  static Instantiator<T> same<T extends Node>(T node) => (arguments) => node;
+  static Null makeNull(arguments) => null;
 
   Instantiator visit(Node node) {
     if (forceCopy || analysis.containsInterpolatedNodes(node)) {
@@ -166,26 +162,29 @@
   }
 
   Instantiator visitNullable(Node node) {
-    if (node == null) return makeNull;
-    return visit(node);
+    return node == null ? makeNull : visit(node);
   }
 
   Instantiator visitSplayable(Node node) {
-    // TODO(sra): Process immediate [InterpolatedNode]s, permitting splaying.
-    return visit(node);
+    // TODO(jmesserly): parameters and methods always support splaying because
+    // they appear in lists. So this method is equivalent to
+    // `visitSplayableExpression`.
+    return visitSplayableExpression(node);
   }
 
   Instantiator visitNode(Node node) {
-    throw 'Unimplemented InstantiatorGeneratorVisitor for $node';
+    throw new UnimplementedError('visit${node.runtimeType}');
   }
 
-  Instantiator visitInterpolatedExpression(InterpolatedExpression node) {
+  Instantiator<Expression> visitInterpolatedExpression(
+      InterpolatedExpression node) {
     var nameOrPosition = node.nameOrPosition;
     return (arguments) {
       var value = arguments[nameOrPosition];
       if (value is Expression) return value;
       if (value is String) return new Identifier(value);
-      error('Interpolated value #$nameOrPosition is not an Expression: $value');
+      throw new StateError(
+          'Interpolated value #$nameOrPosition is not an Expression: $value');
     };
   }
 
@@ -197,7 +196,7 @@
         Expression toExpression(item) {
           if (item is Expression) return item;
           if (item is String) return new Identifier(item);
-          return error('Interpolated value #$nameOrPosition is not '
+          throw new StateError('Interpolated value #$nameOrPosition is not '
               'an Expression or List of Expressions: $value');
         }
 
@@ -208,12 +207,26 @@
     return visit(node);
   }
 
-  Instantiator visitInterpolatedLiteral(InterpolatedLiteral node) {
+  List<T> splayNodes<T extends Node>(List<Instantiator> makers, args) {
+    var exprs = <T>[];
+    for (var instantiator in makers) {
+      var result = instantiator(args);
+      if (result is Iterable) {
+        for (var e in result) exprs.add(e as T);
+      } else {
+        exprs.add(result as T);
+      }
+    }
+    return exprs;
+  }
+
+  Instantiator<Literal> visitInterpolatedLiteral(InterpolatedLiteral node) {
     var nameOrPosition = node.nameOrPosition;
     return (arguments) {
       var value = arguments[nameOrPosition];
       if (value is Literal) return value;
-      error('Interpolated value #$nameOrPosition is not a Literal: $value');
+      throw new StateError(
+          'Interpolated value #$nameOrPosition is not a Literal: $value');
     };
   }
 
@@ -225,7 +238,8 @@
       Parameter toIdentifier(item) {
         if (item is Parameter) return item;
         if (item is String) return new Identifier(item);
-        return error('Interpolated value #$nameOrPosition is not an Identifier'
+        throw new StateError(
+            'Interpolated value #$nameOrPosition is not an Identifier'
             ' or List of Identifiers: $value');
       }
 
@@ -234,7 +248,8 @@
     };
   }
 
-  Instantiator visitInterpolatedSelector(InterpolatedSelector node) {
+  Instantiator<Expression> visitInterpolatedSelector(
+      InterpolatedSelector node) {
     // A selector is an expression, as in `a[selector]`.
     // A String argument converted into a LiteralString, so `a.#` with argument
     // 'foo' generates `a["foo"]` which prints as `a.foo`.
@@ -243,16 +258,19 @@
       var value = arguments[nameOrPosition];
       if (value is Expression) return value;
       if (value is String) return new LiteralString('"$value"');
-      error('Interpolated value #$nameOrPosition is not a selector: $value');
+      throw new StateError(
+          'Interpolated value #$nameOrPosition is not a selector: $value');
     };
   }
 
-  Instantiator visitInterpolatedStatement(InterpolatedStatement node) {
+  Instantiator<Statement> visitInterpolatedStatement(
+      InterpolatedStatement node) {
     var nameOrPosition = node.nameOrPosition;
     return (arguments) {
       var value = arguments[nameOrPosition];
       if (value is Node) return value.toStatement();
-      error('Interpolated value #$nameOrPosition is not a Statement: $value');
+      throw new StateError(
+          'Interpolated value #$nameOrPosition is not a Statement: $value');
     };
   }
 
@@ -262,7 +280,8 @@
       var value = arguments[nameOrPosition];
       Method toMethod(item) {
         if (item is Method) return item;
-        return error('Interpolated value #$nameOrPosition is not a Method '
+        throw new StateError(
+            'Interpolated value #$nameOrPosition is not a Method '
             'or List of Methods: $value');
       }
 
@@ -271,13 +290,14 @@
     };
   }
 
-  Instantiator visitInterpolatedIdentifier(InterpolatedIdentifier node) {
+  Instantiator<Identifier> visitInterpolatedIdentifier(
+      InterpolatedIdentifier node) {
     var nameOrPosition = node.nameOrPosition;
     return (arguments) {
       var item = arguments[nameOrPosition];
       if (item is Identifier) return item;
       if (item is String) return new Identifier(item);
-      return error('Interpolated value #$nameOrPosition is not a '
+      throw new StateError('Interpolated value #$nameOrPosition is not a '
           'Identifier or String: $item');
     };
   }
@@ -290,8 +310,7 @@
         Statement toStatement(item) {
           if (item is Statement) return item;
           if (item is Expression) return item.toStatement();
-          ;
-          return error('Interpolated value #$nameOrPosition is not '
+          throw new StateError('Interpolated value #$nameOrPosition is not '
               'a Statement or List of Statements: $value');
         }
 
@@ -302,250 +321,178 @@
     return visit(node);
   }
 
-  Instantiator visitProgram(Program node) {
-    List instantiators = node.body.map(visitSplayableStatement).toList();
-    return (arguments) {
-      List<Statement> statements = <Statement>[];
-      void add(node) {
-        if (node is EmptyStatement) return;
-        if (node is Iterable) {
-          for (var n in node) statements.add(n);
-        } else {
-          statements.add(node.toStatement());
-        }
-      }
-
-      for (Instantiator instantiator in instantiators) {
-        add(instantiator(arguments));
-      }
-      return new Program(statements);
-    };
+  Instantiator<Program> visitProgram(Program node) {
+    var instantiators = node.body.map(visitSplayableStatement).toList();
+    return (a) => new Program(splayStatements(instantiators, a));
   }
 
-  Instantiator visitBlock(Block node) {
-    List instantiators = node.statements.map(visitSplayableStatement).toList();
-    return (arguments) {
-      List<Statement> statements = <Statement>[];
-      void add(node) {
-        if (node is EmptyStatement) return;
-        if (node is Iterable) {
-          for (var n in node) statements.add(n);
-        } else if (node is Block) {
-          statements.addAll(node.statements);
-        } else {
-          statements.add(node.toStatement());
-        }
+  List<Statement> splayStatements(List<Instantiator> instantiators, arguments) {
+    var statements = <Statement>[];
+    for (var instantiator in instantiators) {
+      var node = instantiator(arguments);
+      if (node is EmptyStatement) continue;
+      if (node is Iterable) {
+        for (var n in node) statements.add(n as Statement);
+      } else if (node is Block && !node.isScope) {
+        statements.addAll(node.statements);
+      } else {
+        statements.add((node as Node).toStatement());
       }
-
-      for (Instantiator instantiator in instantiators) {
-        add(instantiator(arguments));
-      }
-      return new Block(statements);
-    };
+    }
+    return statements;
   }
 
-  Instantiator visitExpressionStatement(ExpressionStatement node) {
-    Instantiator buildExpression = visit(node.expression);
-    return (arguments) {
-      return buildExpression(arguments).toStatement();
-    };
+  Instantiator<Block> visitBlock(Block node) {
+    var instantiators = node.statements.map(visitSplayableStatement).toList();
+    return (a) => new Block(splayStatements(instantiators, a));
   }
 
-  Instantiator visitEmptyStatement(EmptyStatement node) =>
-      (arguments) => new EmptyStatement();
+  Instantiator<Statement> visitExpressionStatement(ExpressionStatement node) {
+    Instantiator<Expression> makeExpression = visit(node.expression);
+    return (a) => makeExpression(a).toStatement();
+  }
 
-  Instantiator visitIf(If node) {
-    if (node.condition is InterpolatedExpression) {
-      return visitIfConditionalCompilation(node);
+  Instantiator<EmptyStatement> visitEmptyStatement(EmptyStatement node) =>
+      (a) => new EmptyStatement();
+
+  Instantiator<Statement> visitIf(If node) {
+    var condition = node.condition;
+    if (condition is InterpolatedExpression) {
+      return visitIfConditionalCompilation(node, condition);
     } else {
       return visitIfNormal(node);
     }
   }
 
-  Instantiator visitIfConditionalCompilation(If node) {
-    // Special version of visitInterpolatedExpression that permits bools.
-    compileCondition(InterpolatedExpression node) {
-      var nameOrPosition = node.nameOrPosition;
-      return (arguments) {
-        var value = arguments[nameOrPosition];
-        if (value is bool) return value;
-        if (value is Expression) return value;
-        if (value is String) return new Identifier(value);
-        error('Interpolated value #$nameOrPosition '
-            'is not an Expression: $value');
-      };
-    }
-
-    var makeCondition = compileCondition(node.condition);
-    Instantiator makeThen = visit(node.then);
-    Instantiator makeOtherwise = visit(node.otherwise);
+  Instantiator<Statement> visitIfConditionalCompilation(
+      If node, InterpolatedExpression condition) {
+    Instantiator<Statement> makeThen = visit(node.then);
+    Instantiator<Statement> makeOtherwise = visit(node.otherwise);
     return (arguments) {
-      var condition = makeCondition(arguments);
-      if (condition is bool) {
-        if (condition == true) {
-          return makeThen(arguments);
-        } else {
-          return makeOtherwise(arguments);
-        }
+      // Allow bools to be used for conditional compliation.
+      var nameOrPosition = condition.nameOrPosition;
+      var value = arguments[nameOrPosition];
+      if (value is bool) {
+        return value ? makeThen(arguments) : makeOtherwise(arguments);
       }
-      return new If(condition, makeThen(arguments), makeOtherwise(arguments));
+      var cond = value is String ? new Identifier(value) : value as Expression;
+      return new If(cond, makeThen(arguments), makeOtherwise(arguments));
     };
   }
 
-  Instantiator visitIfNormal(If node) {
-    Instantiator makeCondition = visit(node.condition);
-    Instantiator makeThen = visit(node.then);
-    Instantiator makeOtherwise = visit(node.otherwise);
-    return (arguments) {
-      return new If(makeCondition(arguments), makeThen(arguments),
-          makeOtherwise(arguments));
-    };
+  Instantiator<Statement> visitIfNormal(If node) {
+    Instantiator<Expression> makeCondition = visit(node.condition);
+    Instantiator<Statement> makeThen = visit(node.then);
+    Instantiator<Statement> makeOtherwise = visit(node.otherwise);
+    return (a) => new If(makeCondition(a), makeThen(a), makeOtherwise(a));
   }
 
-  Instantiator visitFor(For node) {
-    Instantiator makeInit = visitNullable(node.init);
-    Instantiator makeCondition = visitNullable(node.condition);
-    Instantiator makeUpdate = visitNullable(node.update);
-    Instantiator makeBody = visit(node.body);
-    return (arguments) {
-      return new For(makeInit(arguments), makeCondition(arguments),
-          makeUpdate(arguments)?.toVoidExpression(), makeBody(arguments));
-    };
+  Instantiator<Statement> visitFor(For node) {
+    Instantiator<Expression> makeInit = visitNullable(node.init);
+    Instantiator<Expression> makeCondition = visitNullable(node.condition);
+    Instantiator<Expression> makeUpdate = visitNullable(node.update);
+    Instantiator<Statement> makeBody = visit(node.body);
+    return (a) => new For(makeInit(a), makeCondition(a),
+        makeUpdate(a)?.toVoidExpression(), makeBody(a));
   }
 
-  Instantiator visitForIn(ForIn node) {
-    Instantiator makeLeftHandSide = visit(node.leftHandSide);
-    Instantiator makeObject = visit(node.object);
-    Instantiator makeBody = visit(node.body);
-    return (arguments) {
-      return new ForIn(makeLeftHandSide(arguments), makeObject(arguments),
-          makeBody(arguments));
-    };
+  Instantiator<ForIn> visitForIn(ForIn node) {
+    Instantiator<Expression> makeLeftHandSide = visit(node.leftHandSide);
+    Instantiator<Expression> makeObject = visit(node.object);
+    Instantiator<Statement> makeBody = visit(node.body);
+    return (a) => new ForIn(makeLeftHandSide(a), makeObject(a), makeBody(a));
   }
 
-  Instantiator visitForOf(ForOf node) {
-    Instantiator makeLeftHandSide = visit(node.leftHandSide);
-    Instantiator makeObject = visit(node.iterable);
-    Instantiator makeBody = visit(node.body);
-    return (arguments) {
-      return new ForOf(makeLeftHandSide(arguments), makeObject(arguments),
-          makeBody(arguments));
-    };
+  Instantiator<ForOf> visitForOf(ForOf node) {
+    Instantiator<Expression> makeLeftHandSide = visit(node.leftHandSide);
+    Instantiator<Expression> makeObject = visit(node.iterable);
+    Instantiator<Statement> makeBody = visit(node.body);
+    return (a) => new ForOf(makeLeftHandSide(a), makeObject(a), makeBody(a));
   }
 
-  TODO(String name) {
-    throw new UnimplementedError('$this.$name');
+  Instantiator<While> visitWhile(While node) {
+    Instantiator<Expression> makeCondition = visit(node.condition);
+    Instantiator<Statement> makeBody = visit(node.body);
+    return (a) => new While(makeCondition(a), makeBody(a));
   }
 
-  Instantiator visitWhile(While node) {
-    Instantiator makeCondition = visit(node.condition);
-    Instantiator makeBody = visit(node.body);
-    return (arguments) {
-      return new While(makeCondition(arguments), makeBody(arguments));
-    };
+  Instantiator<Do> visitDo(Do node) {
+    Instantiator<Statement> makeBody = visit(node.body);
+    Instantiator<Expression> makeCondition = visit(node.condition);
+    return (a) => new Do(makeBody(a), makeCondition(a));
   }
 
-  Instantiator visitDo(Do node) {
-    Instantiator makeBody = visit(node.body);
-    Instantiator makeCondition = visit(node.condition);
-    return (arguments) {
-      return new Do(makeBody(arguments), makeCondition(arguments));
-    };
-  }
+  Instantiator<Continue> visitContinue(Continue node) =>
+      (a) => new Continue(node.targetLabel);
 
-  Instantiator visitContinue(Continue node) =>
-      (arguments) => new Continue(node.targetLabel);
+  Instantiator<Break> visitBreak(Break node) =>
+      (a) => new Break(node.targetLabel);
 
-  Instantiator visitBreak(Break node) =>
-      (arguments) => new Break(node.targetLabel);
-
-  Instantiator visitReturn(Return node) {
+  Instantiator<Statement> visitReturn(Return node) {
     if (node.value == null) return (args) => new Return();
-    Instantiator makeExpression = visit(node.value);
-    return (args) => makeExpression(args).toReturn();
+    Instantiator<Expression> makeExpression = visit(node.value);
+    return (a) => makeExpression(a).toReturn();
   }
 
-  Instantiator visitDartYield(DartYield node) {
-    Instantiator makeExpression = visit(node.expression);
-    return (arguments) =>
-        new DartYield(makeExpression(arguments), node.hasStar);
+  Instantiator<DartYield> visitDartYield(DartYield node) {
+    Instantiator<Expression> makeExpression = visit(node.expression);
+    return (a) => new DartYield(makeExpression(a), node.hasStar);
   }
 
-  Instantiator visitThrow(Throw node) {
-    Instantiator makeExpression = visit(node.expression);
-    return (arguments) => new Throw(makeExpression(arguments));
+  Instantiator<Throw> visitThrow(Throw node) {
+    Instantiator<Expression> makeExpression = visit(node.expression);
+    return (a) => new Throw(makeExpression(a));
   }
 
-  Instantiator visitTry(Try node) {
-    Instantiator makeBody = visit(node.body);
-    Instantiator makeCatch = visitNullable(node.catchPart);
-    Instantiator makeFinally = visitNullable(node.finallyPart);
-    return (arguments) => new Try(
-        makeBody(arguments), makeCatch(arguments), makeFinally(arguments));
+  Instantiator<Try> visitTry(Try node) {
+    Instantiator<Block> makeBody = visit(node.body);
+    Instantiator<Catch> makeCatch = visitNullable(node.catchPart);
+    Instantiator<Block> makeFinally = visitNullable(node.finallyPart);
+    return (a) => new Try(makeBody(a), makeCatch(a), makeFinally(a));
   }
 
-  Instantiator visitCatch(Catch node) {
-    Instantiator makeDeclaration = visit(node.declaration);
-    Instantiator makeBody = visit(node.body);
-    return (arguments) =>
-        new Catch(makeDeclaration(arguments), makeBody(arguments));
+  Instantiator<Catch> visitCatch(Catch node) {
+    Instantiator<Identifier> makeDeclaration = visit(node.declaration);
+    Instantiator<Block> makeBody = visit(node.body);
+    return (a) => new Catch(makeDeclaration(a), makeBody(a));
   }
 
-  Instantiator visitSwitch(Switch node) {
-    Instantiator makeKey = visit(node.key);
-    Iterable<Instantiator> makeCases = node.cases.map(visit);
+  Instantiator<Switch> visitSwitch(Switch node) {
+    Instantiator<Expression> makeKey = visit(node.key);
+    var makeCases = node.cases.map(visitSwitchCase).toList();
+    return (a) => new Switch(makeKey(a), makeCases.map((m) => m(a)).toList());
+  }
+
+  Instantiator<SwitchCase> visitSwitchCase(SwitchCase node) {
+    Instantiator<Expression> makeExpression = visitNullable(node.expression);
+    Instantiator<Block> makeBody = visit(node.body);
     return (arguments) {
-      return new Switch(
-          makeKey(arguments),
-          makeCases
-              .map((makeCase) => makeCase(arguments) as SwitchClause)
-              .toList());
+      return new SwitchCase(makeExpression(arguments), makeBody(arguments));
     };
   }
 
-  Instantiator visitCase(Case node) {
-    Instantiator makeExpression = visit(node.expression);
-    Instantiator makeBody = visit(node.body);
-    return (arguments) {
-      return new Case(makeExpression(arguments), makeBody(arguments));
-    };
+  Instantiator<FunctionDeclaration> visitFunctionDeclaration(
+      FunctionDeclaration node) {
+    Instantiator<Identifier> makeName = visit(node.name);
+    Instantiator<Fun> makeFunction = visit(node.function);
+    return (a) => new FunctionDeclaration(makeName(a), makeFunction(a));
   }
 
-  Instantiator visitDefault(Default node) {
-    Instantiator makeBody = visit(node.body);
-    return (arguments) {
-      return new Default(makeBody(arguments));
-    };
+  Instantiator<LabeledStatement> visitLabeledStatement(LabeledStatement node) {
+    Instantiator<Statement> makeBody = visit(node.body);
+    return (a) => new LabeledStatement(node.label, makeBody(a));
   }
 
-  Instantiator visitFunctionDeclaration(FunctionDeclaration node) {
-    Instantiator makeName = visit(node.name);
-    Instantiator makeFunction = visit(node.function);
-    return (arguments) =>
-        new FunctionDeclaration(makeName(arguments), makeFunction(arguments));
-  }
-
-  Instantiator visitLabeledStatement(LabeledStatement node) {
-    Instantiator makeBody = visit(node.body);
-    return (arguments) => new LabeledStatement(node.label, makeBody(arguments));
-  }
-
-  Instantiator visitLiteralStatement(LiteralStatement node) =>
-      TODO('visitLiteralStatement');
+  Instantiator visitLiteralStatement(LiteralStatement node) => visitNode(node);
   Instantiator visitLiteralExpression(LiteralExpression node) =>
-      TODO('visitLiteralExpression');
+      visitNode(node);
 
-  Instantiator visitVariableDeclarationList(VariableDeclarationList node) {
-    List<Instantiator> declarationMakers =
-        node.declarations.map(visit).toList();
-    return (arguments) {
-      List<VariableInitialization> declarations = <VariableInitialization>[];
-      for (Instantiator instantiator in declarationMakers) {
-        var result = instantiator(arguments);
-        declarations.add(result);
-      }
-      return new VariableDeclarationList(node.keyword, declarations);
-    };
+  Instantiator<VariableDeclarationList> visitVariableDeclarationList(
+      VariableDeclarationList node) {
+    var declarationMakers =
+        node.declarations.map(visitVariableInitialization).toList();
+    return (a) => new VariableDeclarationList(
+        node.keyword, declarationMakers.map((m) => m(a)).toList());
   }
 
   Instantiator visitAssignment(Assignment node) {
@@ -558,260 +505,185 @@
     };
   }
 
-  Instantiator visitVariableInitialization(VariableInitialization node) {
-    Instantiator makeDeclaration = visit(node.declaration);
-    Instantiator makeValue = visitNullable(node.value);
-    return (arguments) {
-      return new VariableInitialization(
-          makeDeclaration(arguments), makeValue(arguments));
-    };
+  Instantiator<VariableInitialization> visitVariableInitialization(
+      VariableInitialization node) {
+    Instantiator<VariableBinding> makeDeclaration = visit(node.declaration);
+    Instantiator<Expression> makeValue = visitNullable(node.value);
+    return (a) => new VariableInitialization(makeDeclaration(a), makeValue(a));
   }
 
-  Instantiator visitConditional(Conditional cond) {
-    Instantiator makeCondition = visit(cond.condition);
-    Instantiator makeThen = visit(cond.then);
-    Instantiator makeOtherwise = visit(cond.otherwise);
-    return (arguments) => new Conditional(makeCondition(arguments),
-        makeThen(arguments), makeOtherwise(arguments));
+  Instantiator<Conditional> visitConditional(Conditional cond) {
+    Instantiator<Expression> makeCondition = visit(cond.condition);
+    Instantiator<Expression> makeThen = visit(cond.then);
+    Instantiator<Expression> makeOtherwise = visit(cond.otherwise);
+    return (a) =>
+        new Conditional(makeCondition(a), makeThen(a), makeOtherwise(a));
   }
 
-  Instantiator visitNew(New node) => handleCallOrNew(node,
-      (target, arguments) => new New(target, arguments as List<Expression>));
+  Instantiator<Call> visitNew(New node) => handleCallOrNew(node, true);
 
-  Instantiator visitCall(Call node) => handleCallOrNew(node,
-      (target, arguments) => new Call(target, arguments as List<Expression>));
+  Instantiator<Call> visitCall(Call node) => handleCallOrNew(node, false);
 
-  Instantiator handleCallOrNew(Call node, finish(target, arguments)) {
-    Instantiator makeTarget = visit(node.target);
-    Iterable<Instantiator> argumentMakers =
-        node.arguments.map(visitSplayableExpression).toList();
+  Instantiator<Call> handleCallOrNew(Call node, bool isNew) {
+    Instantiator<Expression> makeTarget = visit(node.target);
+    var argumentMakers = node.arguments.map(visitSplayableExpression).toList();
 
     // TODO(sra): Avoid copying call arguments if no interpolation or forced
     // copying.
-    return (arguments) {
-      Node target = makeTarget(arguments);
-      List<Expression> callArguments = <Expression>[];
-      for (Instantiator instantiator in argumentMakers) {
-        var result = instantiator(arguments);
-        if (result is Iterable) {
-          for (var r in result) callArguments.add(r);
-        } else {
-          callArguments.add(result);
-        }
-      }
-      return finish(target, callArguments.toList(growable: false));
+    return (a) {
+      var target = makeTarget(a);
+      var callArgs = splayNodes<Expression>(argumentMakers, a);
+      return isNew ? new New(target, callArgs) : new Call(target, callArgs);
     };
   }
 
-  Instantiator visitBinary(Binary node) {
-    Instantiator makeLeft = visit(node.left);
-    Instantiator makeRight = visit(node.right);
+  Instantiator<Binary> visitBinary(Binary node) {
+    Instantiator<Expression> makeLeft = visit(node.left);
+    Instantiator<Expression> makeRight = visit(node.right);
     String op = node.op;
-    return (arguments) =>
-        new Binary(op, makeLeft(arguments), makeRight(arguments));
+    return (a) => new Binary(op, makeLeft(a), makeRight(a));
   }
 
-  Instantiator visitPrefix(Prefix node) {
-    Instantiator makeOperand = visit(node.argument);
+  Instantiator<Prefix> visitPrefix(Prefix node) {
+    Instantiator<Expression> makeOperand = visit(node.argument);
     String op = node.op;
-    return (arguments) => new Prefix(op, makeOperand(arguments));
+    return (a) => new Prefix(op, makeOperand(a));
   }
 
-  Instantiator visitPostfix(Postfix node) {
-    Instantiator makeOperand = visit(node.argument);
+  Instantiator<Postfix> visitPostfix(Postfix node) {
+    Instantiator<Expression> makeOperand = visit(node.argument);
     String op = node.op;
-    return (arguments) => new Postfix(op, makeOperand(arguments));
+    return (a) => new Postfix(op, makeOperand(a));
   }
 
-  Instantiator visitThis(This node) => (arguments) => new This();
-  Instantiator visitSuper(Super node) => (arguments) => new Super();
+  Instantiator<This> visitThis(This node) => (a) => new This();
+  Instantiator<Super> visitSuper(Super node) => (a) => new Super();
 
-  Instantiator visitIdentifier(Identifier node) =>
-      (arguments) => new Identifier(node.name);
+  Instantiator<Identifier> visitIdentifier(Identifier node) =>
+      (a) => new Identifier(node.name);
 
-  Instantiator visitSpread(Spread node) =>
-      (args) => new Spread(visit(node.argument)(args));
-
-  Instantiator visitYield(Yield node) =>
-      (args) => new Yield(node.value != null ? visit(node.value)(args) : null,
-          star: node.star);
-
-  Instantiator visitRestParameter(RestParameter node) =>
-      (args) => new RestParameter(visit(node.parameter)(args));
-
-  Instantiator visitAccess(PropertyAccess node) {
-    Instantiator makeReceiver = visit(node.receiver);
-    Instantiator makeSelector = visit(node.selector);
-    return (arguments) =>
-        new PropertyAccess(makeReceiver(arguments), makeSelector(arguments));
+  Instantiator<Spread> visitSpread(Spread node) {
+    var maker = visit(node.argument);
+    return (a) => new Spread(maker(a) as Expression);
   }
 
-  Instantiator visitNamedFunction(NamedFunction node) {
-    Instantiator makeDeclaration = visit(node.name);
-    Instantiator makeFunction = visit(node.function);
-    return (arguments) =>
-        new NamedFunction(makeDeclaration(arguments), makeFunction(arguments));
+  Instantiator<Yield> visitYield(Yield node) {
+    var maker = visitNullable(node.value);
+    return (a) => new Yield(maker(a) as Expression, star: node.star);
   }
 
-  Instantiator visitFunctionExpression(FunctionExpression node) {
-    List<Instantiator> paramMakers = node.params.map(visitSplayable).toList();
-    Instantiator makeBody = visit(node.body);
-    // TODO(sra): Avoid copying params if no interpolation or forced copying.
-    return (arguments) {
-      List<Parameter> params = <Parameter>[];
-      for (Instantiator instantiator in paramMakers) {
-        var result = instantiator(arguments);
-        if (result is Iterable) {
-          for (var r in result) params.add(r);
-        } else {
-          params.add(result);
-        }
-      }
-      var body = makeBody(arguments);
-      if (node is ArrowFun) {
-        return new ArrowFun(params, body);
-      } else if (node is Fun) {
-        return new Fun(params, body,
-            isGenerator: node.isGenerator, asyncModifier: node.asyncModifier);
-      } else {
-        throw "Unknown FunctionExpression type ${node.runtimeType}: $node";
-      }
-    };
+  Instantiator<RestParameter> visitRestParameter(RestParameter node) {
+    var maker = visit(node.parameter);
+    return (a) => new RestParameter(maker(a) as Identifier);
   }
 
-  Instantiator visitFun(Fun node) => visitFunctionExpression(node);
+  Instantiator<PropertyAccess> visitAccess(PropertyAccess node) {
+    Instantiator<Expression> makeReceiver = visit(node.receiver);
+    Instantiator<Expression> makeSelector = visit(node.selector);
+    return (a) => new PropertyAccess(makeReceiver(a), makeSelector(a));
+  }
 
-  Instantiator visitArrowFun(ArrowFun node) => visitFunctionExpression(node);
+  Instantiator<NamedFunction> visitNamedFunction(NamedFunction node) {
+    Instantiator<Identifier> makeDeclaration = visit(node.name);
+    Instantiator<Fun> makeFunction = visit(node.function);
+    return (a) => new NamedFunction(makeDeclaration(a), makeFunction(a));
+  }
 
-  Instantiator visitLiteralBool(LiteralBool node) =>
-      (arguments) => new LiteralBool(node.value);
+  Instantiator<Fun> visitFun(Fun node) {
+    var paramMakers = node.params.map(visitSplayable).toList();
+    Instantiator<Block> makeBody = visit(node.body);
+    return (a) => new Fun(splayNodes(paramMakers, a), makeBody(a),
+        isGenerator: node.isGenerator, asyncModifier: node.asyncModifier);
+  }
 
-  Instantiator visitLiteralString(LiteralString node) =>
-      (arguments) => new LiteralString(node.value);
+  Instantiator<ArrowFun> visitArrowFun(ArrowFun node) {
+    var paramMakers = node.params.map(visitSplayable).toList();
+    Instantiator makeBody = visit(node.body as Node);
+    return (a) => new ArrowFun(splayNodes(paramMakers, a), makeBody(a));
+  }
 
-  Instantiator visitLiteralNumber(LiteralNumber node) =>
-      (arguments) => new LiteralNumber(node.value);
+  Instantiator<LiteralBool> visitLiteralBool(LiteralBool node) =>
+      (a) => new LiteralBool(node.value);
 
-  Instantiator visitLiteralNull(LiteralNull node) =>
-      (arguments) => new LiteralNull();
+  Instantiator<LiteralString> visitLiteralString(LiteralString node) =>
+      (a) => new LiteralString(node.value);
 
-  Instantiator visitArrayInitializer(ArrayInitializer node) {
-    List<Instantiator> elementMakers =
-        node.elements.map(visitSplayableExpression).toList(growable: false);
-    return (arguments) {
-      var elements = <Expression>[];
-      for (var instantiator in elementMakers) {
-        var element = instantiator(arguments);
-        if (element is Iterable) {
-          elements.addAll(element);
-        } else {
-          elements.add(element);
-        }
-      }
-      return new ArrayInitializer(elements);
-    };
+  Instantiator<LiteralNumber> visitLiteralNumber(LiteralNumber node) =>
+      (a) => new LiteralNumber(node.value);
+
+  Instantiator<LiteralNull> visitLiteralNull(LiteralNull node) =>
+      (a) => new LiteralNull();
+
+  Instantiator<ArrayInitializer> visitArrayInitializer(ArrayInitializer node) {
+    var makers = node.elements.map(visitSplayableExpression).toList();
+    return (a) => new ArrayInitializer(splayNodes(makers, a));
   }
 
   Instantiator visitArrayHole(ArrayHole node) {
     return (arguments) => new ArrayHole();
   }
 
-  Instantiator visitObjectInitializer(ObjectInitializer node) {
-    List<Instantiator> propertyMakers =
-        node.properties.map(visitSplayable).toList();
-    return (arguments) {
-      List<Property> properties = <Property>[];
-      for (Instantiator instantiator in propertyMakers) {
-        var result = instantiator(arguments);
-        if (result is Iterable) {
-          for (var r in result) properties.add(r);
-        } else {
-          properties.add(result);
-        }
-      }
-      return new ObjectInitializer(properties);
-    };
+  Instantiator<ObjectInitializer> visitObjectInitializer(
+      ObjectInitializer node) {
+    var propertyMakers = node.properties.map(visitSplayable).toList();
+    return (a) => new ObjectInitializer(splayNodes(propertyMakers, a));
   }
 
-  Instantiator visitProperty(Property node) {
-    Instantiator makeName = visit(node.name);
-    Instantiator makeValue = visit(node.value);
-    return (arguments) {
-      return new Property(makeName(arguments), makeValue(arguments));
-    };
+  Instantiator<Property> visitProperty(Property node) {
+    Instantiator<Expression> makeName = visit(node.name);
+    Instantiator<Expression> makeValue = visit(node.value);
+    return (a) => new Property(makeName(a), makeValue(a));
   }
 
-  Instantiator visitRegExpLiteral(RegExpLiteral node) =>
-      (arguments) => new RegExpLiteral(node.pattern);
+  Instantiator<RegExpLiteral> visitRegExpLiteral(RegExpLiteral node) =>
+      (a) => new RegExpLiteral(node.pattern);
 
-  Instantiator visitTemplateString(TemplateString node) {
-    Iterable<Instantiator> makeElements = node.interpolations.map(visit);
-    return (arguments) => new TemplateString(node.strings,
-        makeElements.map((m) => m(arguments)).toList(growable: false));
+  Instantiator<TemplateString> visitTemplateString(TemplateString node) {
+    var makeElements = node.interpolations.map(visit).toList();
+    return (a) => new TemplateString(node.strings, splayNodes(makeElements, a));
   }
 
-  Instantiator visitTaggedTemplate(TaggedTemplate node) {
-    Instantiator makeTag = visit(node.tag);
-    Instantiator makeTemplate = visit(node.template);
-    return (arguments) {
-      return new TaggedTemplate(makeTag(arguments), makeTemplate(arguments));
-    };
+  Instantiator<TaggedTemplate> visitTaggedTemplate(TaggedTemplate node) {
+    Instantiator<Expression> makeTag = visit(node.tag);
+    var makeTemplate = visitTemplateString(node.template);
+    return (a) => new TaggedTemplate(makeTag(a), makeTemplate(a));
   }
 
   Instantiator visitClassDeclaration(ClassDeclaration node) {
-    Instantiator makeClass = visit(node.classExpr);
-    return (arguments) {
-      return new ClassDeclaration(makeClass(arguments));
-    };
+    var makeClass = visitClassExpression(node.classExpr);
+    return (a) => new ClassDeclaration(makeClass(a));
   }
 
-  Instantiator visitClassExpression(ClassExpression node) {
-    List<Instantiator> makeMethods =
-        node.methods.map(visitSplayableExpression).toList(growable: true);
-    Instantiator makeName = visit(node.name);
-    Instantiator makeHeritage = visit(node.heritage);
+  Instantiator<ClassExpression> visitClassExpression(ClassExpression node) {
+    var makeMethods = node.methods.map(visitSplayableExpression).toList();
+    Instantiator<Identifier> makeName = visit(node.name);
+    Instantiator<Expression> makeHeritage = visit(node.heritage);
 
-    return (arguments) {
-      var methods = <Method>[];
-      for (Instantiator instantiator in makeMethods) {
-        var result = instantiator(arguments);
-        if (result is Iterable) {
-          for (var r in result) methods.add(r);
-        } else {
-          methods.add(result);
-        }
-      }
-      return new ClassExpression(
-          makeName(arguments), makeHeritage(arguments), methods);
-    };
+    return (a) => new ClassExpression(
+        makeName(a), makeHeritage(a), splayNodes(makeMethods, a));
   }
 
-  Instantiator visitMethod(Method node) {
-    Instantiator makeName = visit(node.name);
-    Instantiator makeFunction = visit(node.function);
-    return (arguments) {
-      return new Method(makeName(arguments), makeFunction(arguments),
-          isGetter: node.isGetter,
-          isSetter: node.isSetter,
-          isStatic: node.isStatic);
-    };
+  Instantiator<Method> visitMethod(Method node) {
+    Instantiator<Expression> makeName = visit(node.name);
+    Instantiator<Fun> makeFunction = visit(node.function);
+    return (a) => new Method(makeName(a), makeFunction(a),
+        isGetter: node.isGetter,
+        isSetter: node.isSetter,
+        isStatic: node.isStatic);
   }
 
-  Instantiator visitComment(Comment node) =>
-      (arguments) => new Comment(node.comment);
+  Instantiator<Comment> visitComment(Comment node) =>
+      (a) => new Comment(node.comment);
 
-  Instantiator visitCommentExpression(CommentExpression node) {
-    Instantiator makeExpr = visit(node.expression);
-    return (arguments) {
-      return new CommentExpression(node.comment, makeExpr(arguments));
-    };
+  Instantiator<CommentExpression> visitCommentExpression(
+      CommentExpression node) {
+    Instantiator<Expression> makeExpr = visit(node.expression);
+    return (a) => new CommentExpression(node.comment, makeExpr(a));
   }
 
-  Instantiator visitAwait(Await node) {
-    Instantiator makeExpression = visit(node.expression);
-    return (arguments) {
-      return new Await(makeExpression(arguments));
-    };
+  Instantiator<Await> visitAwait(Await node) {
+    Instantiator<Expression> makeExpr = visit(node.expression);
+    return (a) => new Await(makeExpr(a));
   }
 
   // Note: these are not supported yet in the interpolation grammar.
@@ -856,39 +728,36 @@
       throw new UnimplementedError();
 
   @override
-  Instantiator visitDestructuredVariable(DestructuredVariable node) {
-    Instantiator makeName = visit(node.name);
-    Instantiator makeStructure = visit(node.structure);
-    Instantiator makeDefaultValue = visit(node.defaultValue);
-    return (arguments) {
-      return new DestructuredVariable(
-          name: makeName(arguments),
-          structure: makeStructure(arguments),
-          defaultValue: makeDefaultValue(arguments));
-    };
+  Instantiator<DestructuredVariable> visitDestructuredVariable(
+      DestructuredVariable node) {
+    Instantiator<Identifier> makeName = visitNullable(node.name);
+    Instantiator<Expression> makeProperty = visitNullable(node.property);
+    Instantiator<BindingPattern> makeStructure = visitNullable(node.structure);
+    Instantiator<Expression> makeDefaultValue =
+        visitNullable(node.defaultValue);
+    return (a) => new DestructuredVariable(
+        name: makeName(a),
+        property: makeProperty(a),
+        structure: makeStructure(a),
+        defaultValue: makeDefaultValue(a));
   }
 
   @override
-  Instantiator visitArrayBindingPattern(ArrayBindingPattern node) {
+  Instantiator<ArrayBindingPattern> visitArrayBindingPattern(
+      ArrayBindingPattern node) {
     List<Instantiator> makeVars = node.variables.map(this.visit).toList();
-    return (arguments) {
-      return new ArrayBindingPattern(
-          makeVars.map((m) => m(arguments) as DestructuredVariable).toList());
-    };
+    return (a) => new ArrayBindingPattern(splayNodes(makeVars, a));
   }
 
   @override
   Instantiator visitObjectBindingPattern(ObjectBindingPattern node) {
     List<Instantiator> makeVars = node.variables.map(this.visit).toList();
-    return (arguments) {
-      return new ObjectBindingPattern(
-          makeVars.map((m) => m(arguments) as DestructuredVariable).toList());
-    };
+    return (a) => new ObjectBindingPattern(splayNodes(makeVars, a));
   }
 
   @override
   Instantiator visitSimpleBindingPattern(SimpleBindingPattern node) =>
-      (arguments) => new SimpleBindingPattern(new Identifier(node.name.name));
+      (a) => new SimpleBindingPattern(new Identifier(node.name.name));
 }
 
 /**
@@ -918,7 +787,7 @@
 
   visitInterpolatedNode(InterpolatedNode node) {
     containsInterpolatedNode.add(node);
-    if (node.isNamed) holeNames.add(node.nameOrPosition);
+    if (node.isNamed) holeNames.add(node.nameOrPosition as String);
     ++count;
   }
 }
diff --git a/pkg/dev_compiler/lib/src/js_ast/type_printer.dart b/pkg/dev_compiler/lib/src/js_ast/type_printer.dart
index ff859aa..f0252c7 100644
--- a/pkg/dev_compiler/lib/src/js_ast/type_printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/type_printer.dart
@@ -100,7 +100,7 @@
       if (node.paramTypes == null) {
         out('...any');
       } else {
-        outSeparated(", ", node.paramTypes.keys, (name) {
+        outSeparated(", ", node.paramTypes.keys, (Identifier name) {
           var paramType = node.paramTypes[name];
           visit(name);
           _outTypeAnnotation(paramType);
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index bdc4519..f3f1108 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -132,7 +132,7 @@
   var declaredVariables = parseAndRemoveDeclaredVariables(args);
   var argResults = argParser.parse(args);
 
-  if (argResults['help'] || args.isEmpty) {
+  if (argResults['help'] as bool || args.isEmpty) {
     print(_usageMessage(argParser));
     return new CompilerResult.noState(true);
   }
@@ -140,8 +140,8 @@
   var moduleFormat = parseModuleFormatOption(argResults).first;
   var ddcPath = path.dirname(path.dirname(path.fromUri(Platform.script)));
 
-  var multiRoots = [];
-  for (var s in argResults['summary-input-dir']) {
+  var multiRoots = <Uri>[];
+  for (var s in argResults['summary-input-dir'] as List<String>) {
     var uri = stringToUri(s);
     if (!uri.path.endsWith('/')) {
       uri = uri.replace(path: '${uri.path}/');
@@ -150,15 +150,16 @@
   }
   multiRoots.add(Uri.base);
 
-  var customScheme = argResults['custom-app-scheme'];
-  var summaryUris = argResults['summary']
+  var customScheme = argResults['custom-app-scheme'] as String;
+  var summaryUris = (argResults['summary'] as List<String>)
       .map((s) => stringToCustomUri(s, multiRoots, customScheme))
       .toList();
 
-  var sdkSummaryPath = argResults['dart-sdk-summary'] ?? defaultSdkSummaryPath;
+  var sdkSummaryPath =
+      argResults['dart-sdk-summary'] as String ?? defaultSdkSummaryPath;
 
-  var packageFile =
-      argResults['packages'] ?? path.absolute(ddcPath, '..', '..', '.packages');
+  var packageFile = argResults['packages'] as String ??
+      path.absolute(ddcPath, '..', '..', '.packages');
 
   var inputs = argResults.rest
       .map((s) => stringToCustomUri(s, [Uri.base], customScheme))
@@ -203,7 +204,7 @@
   var jsModule = compileToJSModule(
       result.program, result.inputSummaries, summaryUris, declaredVariables);
   var jsCode = jsProgramToCode(jsModule, moduleFormat,
-      buildSourceMap: argResults['source-map'],
+      buildSourceMap: argResults['source-map'] as bool,
       jsUrl: path.toUri(output).toString(),
       mapUrl: path.toUri(output + '.map').toString(),
       customScheme: customScheme);
@@ -249,7 +250,7 @@
     String customScheme}) {
   var opts = new JS.JavaScriptPrintingOptions(
       allowKeywordsInProperties: true, allowSingleLineIfStatements: true);
-  var printer;
+  JS.SimpleJavaScriptPrintingContext printer;
   SourceMapBuilder sourceMap;
   if (buildSourceMap) {
     var sourceMapContext = new SourceMapPrintingContext();
@@ -293,7 +294,7 @@
   // Convert to a local file path if it's not.
   sourceMapPath = path.fromUri(_sourceToUri(sourceMapPath, customScheme));
   var sourceMapDir = path.dirname(path.absolute(sourceMapPath));
-  var list = new List.from(map['sources']);
+  var list = (map['sources'] as List).toList();
   map['sources'] = list;
 
   String makeRelative(String sourcePath) {
@@ -319,9 +320,9 @@
   }
 
   for (int i = 0; i < list.length; i++) {
-    list[i] = makeRelative(list[i]);
+    list[i] = makeRelative(list[i] as String);
   }
-  map['file'] = makeRelative(map['file']);
+  map['file'] = makeRelative(map['file'] as String);
   return map;
 }
 
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index c8047fa..62ac08d 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -280,22 +280,29 @@
 
     // Initialize our library variables.
     var items = <JS.ModuleItem>[];
+    var exports = <JS.NameSpecifier>[];
+    var root = new JS.Identifier('_root');
+    items.add(js.statement('const # = Object.create(null)', [root]));
+
+    void emitLibrary(JS.Identifier id) {
+      items.add(js.statement('const # = Object.create(#)', [id, root]));
+      exports.add(new JS.NameSpecifier(id));
+    }
+
     for (var library in libraries) {
       var libraryTemp = library == ddcRuntime
           ? _runtimeModule
           : new JS.TemporaryId(jsLibraryName(library));
       _libraries[library] = libraryTemp;
-      items.add(new JS.ExportDeclaration(
-          js.call('const # = Object.create(null)', [libraryTemp])));
-
-      // dart:_runtime has a magic module that holds extension method symbols.
-      // TODO(jmesserly): find a cleaner design for this.
-      if (library == ddcRuntime) {
-        items.add(new JS.ExportDeclaration(js
-            .call('const # = Object.create(null)', [_extensionSymbolsModule])));
-      }
+      emitLibrary(libraryTemp);
     }
 
+    // dart:_runtime has a magic module that holds extension method symbols.
+    // TODO(jmesserly): find a cleaner design for this.
+    if (ddcRuntime != null) emitLibrary(_extensionSymbolsModule);
+
+    items.add(new JS.ExportDeclaration(new JS.ExportClause(exports)));
+
     // Collect all class/type Element -> Node mappings
     // in case we need to forward declare any classes.
     _pendingClasses = new HashSet.identity();
@@ -320,7 +327,7 @@
     _finishImports(items);
     // Initialize extension symbols
     _extensionSymbols.forEach((name, id) {
-      var value =
+      JS.Expression value =
           new JS.PropertyAccess(_extensionSymbolsModule, _propertyName(name));
       if (ddcRuntime != null) {
         value = js.call('# = Symbol(#)', [value, js.string("dartx.$name")]);
@@ -435,7 +442,8 @@
     } else {
       _emitLibraryProcedures(library);
       var fields = library.fields;
-      if (fields.isNotEmpty) _moduleItems.add(_emitLazyFields(library, fields));
+      if (fields.isNotEmpty)
+        _moduleItems.add(_emitLazyFields(emitLibraryName(library), fields));
     }
 
     _currentLibrary = null;
@@ -671,7 +679,7 @@
       return base;
     }
 
-    var mixins = [];
+    var mixins = <InterfaceType>[];
     var mixedInType = c.mixedInType;
     var superclass = c.superclass;
     var supertype = c.supertype.asInterfaceType;
@@ -1094,7 +1102,7 @@
             .toStatement());
       }
     } else if (fields.isNotEmpty) {
-      body.add(_emitLazyFields(c, fields));
+      body.add(_emitLazyFields(_emitTopLevelName(c), fields));
     }
   }
 
@@ -1443,7 +1451,7 @@
   }
 
   JS.Expression _finishConstructorFunction(
-      List<JS.Parameter> params, JS.Block body, isCallable) {
+      List<JS.Parameter> params, JS.Block body, bool isCallable) {
     // We consider a class callable if it inherits from anything with a `call`
     // method. As a result, we can know the callable JS function was created
     // at the first constructor that was hit.
@@ -1566,7 +1574,7 @@
       // Dart does not use ES6 constructors.
       // Add an error to catch any invalid usage.
       jsMethods.add(
-          new JS.Method(_propertyName('constructor'), js.call(r'''function() {
+          new JS.Method(_propertyName('constructor'), js.fun(r'''function() {
                   throw Error("use `new " + #.typeName(#.getReifiedType(this)) +
                       ".new(...)` to create a Dart object");
               }''', [_runtimeModule, _runtimeModule])));
@@ -1661,13 +1669,13 @@
   JS.Fun _emitNativeFunctionBody(Procedure node) {
     String name = getAnnotationName(node, isJSAnnotation) ?? node.name.name;
     if (node.isGetter) {
-      return new JS.Fun([], js.statement('{ return this.#; }', [name]));
+      return new JS.Fun([], js.block('{ return this.#; }', [name]));
     } else if (node.isSetter) {
       var params = _emitFormalParameters(node.function);
       return new JS.Fun(
-          params, js.statement('{ this.# = #; }', [name, params.last]));
+          params, js.block('{ this.# = #; }', [name, params.last]));
     } else {
-      return js.call(
+      return js.fun(
           'function (...args) { return this.#.apply(this, args); }', name);
     }
   }
@@ -1700,12 +1708,12 @@
       return [
         new JS.Method(
             name,
-            js.call('function(x) { return super.# = #._check(x); }', [
+            js.fun('function(x) { return super.# = #._check(x); }', [
               name,
               _emitType(superSubstition.substituteType(superMember.setterType))
             ]),
             isSetter: true),
-        new JS.Method(name, js.call('function() { return super.#; }', [name]),
+        new JS.Method(name, js.fun('function() { return super.#; }', [name]),
             isGetter: true)
       ];
     }
@@ -1866,7 +1874,7 @@
         fnBody = js.call('#._check(#)', [_emitType(returnType), fnBody]);
       }
 
-      var fn = new JS.Fun(fnArgs, js.statement('{ return #; }', [fnBody]),
+      var fn = new JS.Fun(fnArgs, js.block('{ return #; }', [fnBody]),
           typeParams: typeParams);
 
       return new JS.Method(
@@ -1922,7 +1930,7 @@
 
     var mocks = _classProperties.mockMembers;
     if (!mocks.containsKey(field.name.name)) {
-      var getter = js.call('function() { return this[#]; }', [virtualField]);
+      var getter = js.fun('function() { return this[#]; }', [virtualField]);
       result.add(new JS.Method(name, getter, isGetter: true)
         ..sourceInformation = _nodeStart(field));
     }
@@ -1940,7 +1948,7 @@
         jsCode = 'function(value) { #[#] = value; }';
       }
 
-      result.add(new JS.Method(name, js.call(jsCode, args), isSetter: true)
+      result.add(new JS.Method(name, js.fun(jsCode, args), isSetter: true)
         ..sourceInformation = _nodeStart(field));
     }
 
@@ -1961,14 +1969,14 @@
 
     var name = getAnnotationName(field, isJSName) ?? field.name.name;
     // Generate getter
-    var fn = new JS.Fun([], js.statement('{ return this.#; }', [name]));
+    var fn = new JS.Fun([], js.block('{ return this.#; }', [name]));
     var method = new JS.Method(_declareMemberName(field), fn, isGetter: true);
     jsMethods.add(method);
 
     // Generate setter
     if (!field.isFinal) {
       var value = new JS.TemporaryId('value');
-      fn = new JS.Fun([value], js.statement('{ this.# = #; }', [name, value]));
+      fn = new JS.Fun([value], js.block('{ this.# = #; }', [name, value]));
       method = new JS.Method(_declareMemberName(field), fn, isSetter: true);
       jsMethods.add(method);
     }
@@ -1990,7 +1998,7 @@
       if (!setters.containsKey(name) &&
           _classProperties.inheritedSetters.contains(name)) {
         // Generate a setter that forwards to super.
-        var fn = js.call('function(value) { super[#] = value; }', [memberName]);
+        var fn = js.fun('function(value) { super[#] = value; }', [memberName]);
         return new JS.Method(memberName, fn, isSetter: true);
       }
     } else {
@@ -1998,7 +2006,7 @@
       if (!getters.containsKey(name) &&
           _classProperties.inheritedGetters.contains(name)) {
         // Generate a getter that forwards to super.
-        var fn = js.call('function() { return super[#]; }', [memberName]);
+        var fn = js.fun('function() { return super[#]; }', [memberName]);
         return new JS.Method(memberName, fn, isGetter: true);
       }
     }
@@ -2118,7 +2126,7 @@
       var init = field.initializer;
       if (init == null ||
           init is BasicLiteral ||
-          _isInlineJSCall(init) ||
+          init is StaticInvocation && isInlineJS(init.target) ||
           init is ConstructorInvocation &&
               isSdkInternalRuntime(init.target.enclosingLibrary)) {
         _currentUri = field.fileUri;
@@ -2132,16 +2140,13 @@
     }
 
     _currentUri = savedUri;
-    return _emitLazyFields(_currentLibrary, lazyFields);
+    return _emitLazyFields(emitLibraryName(_currentLibrary), lazyFields);
   }
 
-  JS.Statement _emitLazyFields(NamedNode target, Iterable<Field> fields) {
+  JS.Statement _emitLazyFields(JS.Expression objExpr, Iterable<Field> fields) {
     var accessors = <JS.Method>[];
     var savedUri = _currentUri;
 
-    var objExpr =
-        target is Class ? _emitTopLevelName(target) : emitLibraryName(target);
-
     for (var field in fields) {
       _currentUri = field.fileUri;
       var name = field.name.name;
@@ -2437,16 +2442,19 @@
     return libraryJSName != null ? '$libraryJSName.$jsName' : jsName;
   }
 
-  JS.Expression _emitJSInterop(NamedNode n) {
+  JS.PropertyAccess _emitJSInterop(NamedNode n) {
     var jsName = _getJSNameWithoutGlobal(n);
     if (jsName == null) return null;
     return _emitJSInteropForGlobal(jsName);
   }
 
-  JS.Expression _emitJSInteropForGlobal(String name) {
-    var access = _callHelper('global');
-    for (var part in name.split('.')) {
-      access = new JS.PropertyAccess(access, js.escapedString(part, "'"));
+  JS.PropertyAccess _emitJSInteropForGlobal(String name) {
+    var parts = name.split('.');
+    if (parts.isEmpty) parts = [''];
+    JS.PropertyAccess access;
+    for (var part in parts) {
+      access = new JS.PropertyAccess(
+          access ?? _callHelper('global'), js.escapedString(part, "'"));
     }
     return access;
   }
@@ -2510,7 +2518,7 @@
   }
 
   JS.Expression _emitFunctionTagged(JS.Expression fn, FunctionType type,
-      {topLevel: false}) {
+      {bool topLevel: false}) {
     var lazy = topLevel && !_typeIsLoaded(type);
     var typeRep = visitFunctionType(type);
     return _callHelper(lazy ? 'lazyFn(#, () => #)' : 'fn(#, #)', [fn, typeRep]);
@@ -2533,7 +2541,7 @@
   }
 
   /// Emits a Dart [type] into code.
-  JS.Expression _emitType(DartType type) => type.accept(this);
+  JS.Expression _emitType(DartType type) => type.accept(this) as JS.Expression;
 
   JS.Expression _emitInvalidNode(Node node, [String message = '']) {
     if (message.isNotEmpty) message += ' ';
@@ -2588,7 +2596,7 @@
     }
 
     var args = type.typeArguments;
-    Iterable jsArgs = null;
+    Iterable<JS.Expression> jsArgs = null;
     if (args.any((a) => a != const DynamicType())) {
       jsArgs = args.map(_emitType);
     } else if (lowerGeneric) {
@@ -2729,9 +2737,9 @@
   @override
   visitTypedefType(type, {bool lowerGeneric: false}) {
     var args = type.typeArguments;
-    Iterable jsArgs = null;
+    List<JS.Expression> jsArgs = null;
     if (args.any((a) => a != const DynamicType())) {
-      jsArgs = args.map(_emitType);
+      jsArgs = args.map(_emitType).toList();
     } else if (lowerGeneric) {
       jsArgs = [];
     }
@@ -2797,7 +2805,7 @@
     });
   }
 
-  List<JS.Parameter> _emitTypeFormals(List<TypeParameter> typeFormals) {
+  List<JS.Identifier> _emitTypeFormals(List<TypeParameter> typeFormals) {
     return typeFormals
         .map((t) => new JS.Identifier(getTypeParameterName(t)))
         .toList();
@@ -2807,7 +2815,7 @@
     // Transforms `sync*` `async` and `async*` function bodies
     // using ES6 generators.
 
-    emitGeneratorFn(Iterable<JS.Expression> getParameters(JS.Block jsBody)) {
+    emitGeneratorFn(List<JS.Parameter> getParameters(JS.Block jsBody)) {
       var savedController = _asyncStarController;
       _asyncStarController = function.asyncMarker == AsyncMarker.AsyncStar
           ? new JS.TemporaryId('stream')
@@ -2820,12 +2828,15 @@
         // TODO(jmesserly): this will emit argument initializers (for default
         // values) inside the generator function body. Is that the best place?
         var jsBody = _emitFunctionBody(function);
-        gen = new JS.Fun(getParameters(jsBody), jsBody, isGenerator: true);
+        var genFn =
+            new JS.Fun(getParameters(jsBody), jsBody, isGenerator: true);
 
         // Name the function if possible, to get better stack traces.
+        gen = genFn;
         if (name != null) {
-          name = JS.friendlyNameForDartOperator[name] ?? name;
-          gen = new JS.NamedFunction(new JS.TemporaryId(name), gen);
+          gen = new JS.NamedFunction(
+              new JS.TemporaryId(JS.friendlyNameForDartOperator[name] ?? name),
+              genFn);
         }
 
         gen.sourceInformation = _nodeEnd(function.fileEndOffset);
@@ -3065,7 +3076,7 @@
 
   JS.Statement _visitStatement(Statement s) {
     if (s == null) return null;
-    var result = s.accept(this);
+    var result = s.accept(this) as JS.Statement;
     // TODO(jmesserly): is the `is! Block` still necessary?
     if (s is! Block) result.sourceInformation = _nodeStart(s);
 
@@ -3122,10 +3133,12 @@
       if (op == '||') return shortCircuit('# || #');
     }
 
-    var result = _visitExpression(node);
-    if (node.getStaticType(types) != coreTypes.boolClass.rawType) {
-      return _callHelper('dtest(#)', result);
+    if (node is AsExpression && node.isTypeError) {
+      assert(node.getStaticType(types) == types.boolType);
+      return _callHelper('dtest(#)', _visitExpression(node.operand));
     }
+
+    var result = _visitExpression(node);
     if (isNullable(node)) result = _callHelper('test(#)', result);
     return result;
   }
@@ -3196,9 +3209,9 @@
   @override
   visitExpressionStatement(ExpressionStatement node) {
     var expr = node.expression;
-    if (_isInlineJSCall(expr)) {
+    if (expr is StaticInvocation && isInlineJS(expr.target)) {
       var inlineJS = _emitInlineJSCode(expr);
-      return inlineJS is JS.Expression ? inlineJS.toStatement() : inlineJS;
+      return inlineJS is JS.Statement ? inlineJS : inlineJS.toStatement();
     }
     return _visitExpression(expr).toStatement();
   }
@@ -3235,7 +3248,7 @@
     ]);
   }
 
-  static isBreakable(Statement stmt) {
+  static bool isBreakable(Statement stmt) {
     // These are conservatively the things that compile to things that can be
     // the target of a break without a label.
     return stmt is ForStatement ||
@@ -3247,7 +3260,7 @@
 
   @override
   visitLabeledStatement(LabeledStatement node) {
-    var saved;
+    List<LabeledStatement> saved;
     var target = _effectiveTargets[node];
     // If the effective target is known then this statement is either contained
     // in a labeled statement or a loop.  It has already been processed when
@@ -3258,8 +3271,9 @@
       var statements = [node];
       target = node.body;
       while (target is LabeledStatement) {
-        statements.add(target);
-        target = (target as LabeledStatement).body;
+        var labeled = target as LabeledStatement;
+        statements.add(labeled);
+        target = labeled.body;
       }
       for (var statement in statements) _effectiveTargets[statement] = target;
 
@@ -3301,9 +3315,9 @@
 
     // It is a break if the target labeled statement encloses the effective
     // target.
-    var current = node.target;
+    Statement current = node.target;
     while (current is LabeledStatement) {
-      current = current.body;
+      current = (current as LabeledStatement).body;
     }
     if (identical(current, target)) {
       return new JS.Break(name);
@@ -3321,15 +3335,16 @@
     // it is not possible to continue to an outer loop without a label.
     _currentContinueTargets = <LabeledStatement>[];
     while (body is LabeledStatement) {
-      _currentContinueTargets.add(body);
-      _effectiveTargets[body] = loop;
-      body = (body as LabeledStatement).body;
+      var labeled = body as LabeledStatement;
+      _currentContinueTargets.add(labeled);
+      _effectiveTargets[labeled] = loop;
+      body = labeled.body;
     }
     return body;
   }
 
-  JS.Statement translateLoop(Statement node, JS.Statement action()) {
-    var savedBreakTargets;
+  T translateLoop<T extends JS.Statement>(Statement node, T action()) {
+    List<LabeledStatement> savedBreakTargets;
     if (_currentBreakTargets.isNotEmpty &&
         _effectiveTargets[_currentBreakTargets.first] != node) {
       // If breaking without a label targets some other (outer) loop, then
@@ -3458,19 +3473,19 @@
 
   @override
   visitSwitchStatement(SwitchStatement node) {
-    var cases = <JS.SwitchClause>[];
+    var cases = <JS.SwitchCase>[];
     var emptyBlock = new JS.Block.empty();
     for (var c in node.cases) {
       // TODO(jmesserly): make sure we are statically checking fall through
-      var body = _visitStatement(c.body);
+      var body = _visitStatement(c.body).toBlock();
       var expressions = c.expressions;
       var last =
           expressions.isNotEmpty && !c.isDefault ? expressions.last : null;
       for (var e in expressions) {
         var jsExpr = _visitExpression(e);
-        cases.add(new JS.Case(jsExpr, e == last ? body : emptyBlock));
+        cases.add(new JS.SwitchCase(jsExpr, e == last ? body : emptyBlock));
       }
-      if (c.isDefault) cases.add(new JS.Default(body));
+      if (c.isDefault) cases.add(new JS.SwitchCase.defaultCase(body));
     }
 
     return new JS.Switch(_visitExpression(node.expression), cases);
@@ -3930,7 +3945,9 @@
       Expression node, JS.Expression uncoerced) {
     // Don't coerce if the parent will coerce.
     var parent = node.parent;
-    if (_nodeIsBitwiseOperation(parent)) return uncoerced;
+    if (parent is InvocationExpression && _nodeIsBitwiseOperation(parent)) {
+      return uncoerced;
+    }
 
     // Don't do a no-op coerce if the most significant bit is zero.
     if (_is31BitUnsigned(node)) return uncoerced;
@@ -3958,15 +3975,13 @@
     return js.call('# >>> 0', uncoerced);
   }
 
-  bool _nodeIsBitwiseOperation(Node node) {
-    if (node is InvocationExpression) {
-      switch (node.name.name) {
-        case '&':
-        case '|':
-        case '^':
-        case '~':
-          return true;
-      }
+  bool _nodeIsBitwiseOperation(InvocationExpression node) {
+    switch (node.name.name) {
+      case '&':
+      case '|':
+      case '^':
+      case '~':
+        return true;
     }
     return false;
   }
@@ -3984,17 +3999,15 @@
     if (expr is IntLiteral) return expr.value >= 0;
 
     // TODO(sra): Lengths of known list types etc.
-    return _nodeIsBitwiseOperation(expr);
+    return expr is InvocationExpression && _nodeIsBitwiseOperation(expr);
   }
 
   /// Does the parent of [node] mask the result to [width] bits or fewer?
   bool _parentMasksToWidth(Expression node, int width) {
     var parent = node.parent;
     if (parent == null) return false;
-    if (_nodeIsBitwiseOperation(parent)) {
-      if (parent is InvocationExpression &&
-          parent.name.name == '&' &&
-          parent.arguments.positional.length == 1) {
+    if (parent is InvocationExpression && _nodeIsBitwiseOperation(parent)) {
+      if (parent.name.name == '&' && parent.arguments.positional.length == 1) {
         var left = getInvocationReceiver(parent);
         var right = parent.arguments.positional[0];
         final int MAX = (1 << width) - 1;
@@ -4253,7 +4266,7 @@
         assert(member is Procedure
             ? member.isSetter == setter
             : !setter || !(member as Field).isFinal);
-        var fn = js.call(
+        var fn = js.fun(
             setter
                 ? 'function(x) { super[#] = x; }'
                 : 'function() { return super[#]; }',
@@ -4271,7 +4284,7 @@
           params.add(namedArgumentTemp);
         }
 
-        var fn = js.call(
+        var fn = js.fun(
             'function(#) { return super[#](#); }', [params, jsName, params]);
         name = JS.friendlyNameForDartOperator[name] ?? name;
         return new JS.Method(new JS.TemporaryId(name), fn);
@@ -4283,7 +4296,7 @@
   @override
   visitStaticInvocation(StaticInvocation node) {
     var target = node.target;
-    if (isInlineJS(target)) return _emitInlineJSCode(node);
+    if (isInlineJS(target)) return _emitInlineJSCode(node) as JS.Expression;
     if (target.isFactory) return _emitFactoryInvocation(node);
 
     if (target.name.name == 'extensionSymbol' &&
@@ -4324,8 +4337,7 @@
       if (arg is StaticInvocation &&
           isJSSpreadInvocation(arg.target) &&
           arg.arguments.positional.length == 1) {
-        args.add(new JS.RestParameter(
-            _visitExpression(arg.arguments.positional[0])));
+        args.add(new JS.Spread(_visitExpression(arg.arguments.positional[0])));
       } else {
         args.add(_visitExpression(arg));
       }
@@ -4640,7 +4652,8 @@
       _visitTest(node.condition),
       _visitExpression(node.then),
       _visitExpression(node.otherwise)
-    ]);
+    ])
+      ..sourceInformation = _nodeStart(node.condition);
   }
 
   @override
@@ -4864,7 +4877,8 @@
     }
 
     if (!node.isConst) {
-      var mapType = _emitMapImplType(node.getStaticType(types));
+      var mapType =
+          _emitMapImplType(node.getStaticType(types) as InterfaceType);
       if (node.entries.isEmpty) {
         return js.call('new #.new()', [mapType]);
       }
@@ -4882,7 +4896,7 @@
   visitFunctionExpression(FunctionExpression node) {
     var fn = _emitArrowFunction(node);
     if (!_reifyFunctionType(_currentFunction)) return fn;
-    return _emitFunctionTagged(fn, node.getStaticType(types));
+    return _emitFunctionTagged(fn, node.getStaticType(types) as FunctionType);
   }
 
   JS.ArrowFun _emitArrowFunction(FunctionExpression node) {
@@ -5064,12 +5078,13 @@
     if (statements.length != 1) return false;
     body = statements[0];
   }
-  return body is ReturnStatement && _isInlineJSCall(body.expression);
+  if (body is ReturnStatement) {
+    var expr = body.expression;
+    return expr is StaticInvocation && isInlineJS(expr.target);
+  }
+  return false;
 }
 
-bool _isInlineJSCall(Expression expr) =>
-    expr is StaticInvocation && isInlineJS(expr.target);
-
 /// Return true if this is one of the methods/properties on all Dart Objects
 /// (toString, hashCode, noSuchMethod, runtimeType).
 ///
diff --git a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
index 2571702..c16ad0d 100644
--- a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
+++ b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
@@ -9,12 +9,12 @@
 Constructor unnamedConstructor(Class c) =>
     c.constructors.firstWhere((c) => c.name.name == '', orElse: () => null);
 
-/// Returns the enclosing library for reference [r].
-Library getLibrary(NamedNode n) {
-  while (n != null && n is! Library) {
-    n = n.parent;
+/// Returns the enclosing library for reference [node].
+Library getLibrary(NamedNode node) {
+  for (TreeNode n = node; n != null; n = n.parent) {
+    if (n is Library) return n;
   }
-  return n;
+  return null;
 }
 
 final Pattern _syntheticTypeCharacters = new RegExp('[&^#.]');
@@ -132,7 +132,7 @@
   final CoreTypes coreTypes;
   ConstantVisitor(this.coreTypes);
 
-  bool isConstant(Expression e) => e.accept(this);
+  bool isConstant(Expression e) => e.accept(this) as bool;
 
   defaultExpression(node) => false;
   defaultBasicLiteral(node) => true;
diff --git a/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart b/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
index bdfd687..0dd31c6 100644
--- a/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
+++ b/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
@@ -53,7 +53,8 @@
   void exitFunction(FunctionNode fn) => _variableInference.exitFunction(fn);
 
   /// Returns true if [expr] can be null.
-  bool isNullable(Expression expr) => expr != null ? expr.accept(this) : false;
+  bool isNullable(Expression expr) =>
+      expr != null ? expr.accept(this) as bool : false;
 
   @override
   defaultExpression(Expression node) => true;
diff --git a/pkg/dev_compiler/lib/src/kernel/property_model.dart b/pkg/dev_compiler/lib/src/kernel/property_model.dart
index 76e9761..84fc2e4 100644
--- a/pkg/dev_compiler/lib/src/kernel/property_model.dart
+++ b/pkg/dev_compiler/lib/src/kernel/property_model.dart
@@ -82,11 +82,14 @@
     // Class can only look up inherited members with an O(N) scan through
     // the class, so we build up a mapping of all fields in the library ahead of
     // time.
-    var allFields = new HashMap<Class, HashMap<String, Field>>.fromIterable(
-        allClasses,
-        value: (t) => new HashMap.fromIterable(
-            t.fields.where((f) => !f.isStatic),
-            key: (f) => f.name));
+    Map<String, Field> getInstanceFieldMap(Class c) {
+      var instanceFields = c.fields.where((f) => !f.isStatic);
+      return new HashMap.fromIterables(
+          instanceFields.map((f) => f.name.name), instanceFields);
+    }
+
+    var allFields = new HashMap.fromIterables(
+        allClasses, allClasses.map(getInstanceFieldMap));
 
     for (var class_ in allClasses) {
       Set<Class> superclasses = null;
diff --git a/pkg/dev_compiler/lib/src/kernel/type_table.dart b/pkg/dev_compiler/lib/src/kernel/type_table.dart
index 3eede2c..bfb5e9c 100644
--- a/pkg/dev_compiler/lib/src/kernel/type_table.dart
+++ b/pkg/dev_compiler/lib/src/kernel/type_table.dart
@@ -113,7 +113,7 @@
 
   /// Heuristically choose a good name for the cache and generator
   /// variables.
-  JS.Identifier chooseTypeName(DartType type) {
+  JS.TemporaryId chooseTypeName(DartType type) {
     return new JS.TemporaryId(_typeString(type));
   }
 }
diff --git a/pkg/dev_compiler/test/codegen_test.dart b/pkg/dev_compiler/test/codegen_test.dart
index 6e270c9..d8327f4 100644
--- a/pkg/dev_compiler/test/codegen_test.dart
+++ b/pkg/dev_compiler/test/codegen_test.dart
@@ -14,13 +14,7 @@
 
 import 'dart:convert';
 import 'dart:io' show Directory, File, Platform;
-import 'package:analyzer/analyzer.dart'
-    show
-        ExportDirective,
-        ImportDirective,
-        StringLiteral,
-        UriBasedDirective,
-        parseDirectives;
+import 'package:analyzer/analyzer.dart' show StringLiteral, parseDirectives;
 import 'package:analyzer/src/command_line/arguments.dart'
     show defineAnalysisArguments;
 import 'package:analyzer/src/dart/ast/ast.dart';
@@ -431,7 +425,7 @@
 
   var unit = parseDirectives(contents, name: from, suppressErrors: true);
   for (var d in unit.directives) {
-    if (d is ImportDirective || d is ExportDirective) {
+    if (d is NamespaceDirectiveImpl) {
       String uri = _resolveDirective(d);
       if (uri == null ||
           uri.startsWith('dart:') ||
@@ -449,14 +443,12 @@
 }
 
 /// Simplified from ParseDartTask.resolveDirective.
-String _resolveDirective(UriBasedDirective directive) {
+String _resolveDirective(NamespaceDirectiveImpl directive) {
   StringLiteral uriLiteral = directive.uri;
   String uriContent = uriLiteral.stringValue;
   if (uriContent != null) {
     uriContent = uriContent.trim();
     directive.uriContent = uriContent;
   }
-  return (directive as UriBasedDirectiveImpl).validate() == null
-      ? uriContent
-      : null;
+  return directive.validate() == null ? uriContent : null;
 }
diff --git a/pkg/dev_compiler/test/js/builder_test.dart b/pkg/dev_compiler/test/js/builder_test.dart
index c02909c..6604d4a 100644
--- a/pkg/dev_compiler/test/js/builder_test.dart
+++ b/pkg/dev_compiler/test/js/builder_test.dart
@@ -3,7 +3,7 @@
 
 final _prenumberedPlaceholders = new RegExp(r'#\d+');
 
-_parser(String src) =>
+MiniJsParser _parser(String src) =>
     new MiniJsParser(src.replaceAll(_prenumberedPlaceholders, '#'));
 
 _check(Node node, String expected) =>
diff --git a/pkg/dev_compiler/test/sourcemap/common.dart b/pkg/dev_compiler/test/sourcemap/common.dart
index 4945d20..3170c17 100644
--- a/pkg/dev_compiler/test/sourcemap/common.dart
+++ b/pkg/dev_compiler/test/sourcemap/common.dart
@@ -67,7 +67,7 @@
     var outWrapperPath = path.join(data.outDir.path, "wrapper.js");
     ProcessResult runResult =
         runD8AndStep(data.outDir.path, data.code, ['--module', outWrapperPath]);
-    data.d8Output = runResult.stdout.split("\n");
+    data.d8Output = (runResult.stdout as String).split("\n");
     return pass(data);
   }
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assign_call_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assign_call_test.dart
index 7e78059..f44926d 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assign_call_test.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assign_call_test.dart
@@ -19,6 +19,6 @@
   /*bc:12*/ print(g);
 }
 
-foo() {
+int foo() {
   return 42;
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_conditional_expression.dart b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_conditional_expression.dart
index 8d68e54..8ea00cf 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_conditional_expression.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_conditional_expression.dart
@@ -9,7 +9,7 @@
   print(/*bc:4*/ ! /*bc:3*/ foo() ? /*bc:5*/ bar() : baz());
 }
 
-foo() {
+bool foo() {
   return false;
 }
 
diff --git a/pkg/dev_compiler/test/testing.dart b/pkg/dev_compiler/test/testing.dart
index f5b8034..d350f57 100644
--- a/pkg/dev_compiler/test/testing.dart
+++ b/pkg/dev_compiler/test/testing.dart
@@ -21,9 +21,7 @@
 
 class TestUriResolver extends ResourceUriResolver {
   final MemoryResourceProvider provider;
-  TestUriResolver(provider)
-      : provider = provider,
-        super(provider);
+  TestUriResolver(this.provider) : super(provider);
 
   @override
   Source resolveAbsolute(Uri uri, [Uri actualUri]) {
diff --git a/pkg/dev_compiler/tool/build_pkgs.dart b/pkg/dev_compiler/tool/build_pkgs.dart
index 7662b36..904aad3 100755
--- a/pkg/dev_compiler/tool/build_pkgs.dart
+++ b/pkg/dev_compiler/tool/build_pkgs.dart
@@ -65,10 +65,10 @@
         argParser, 'Unexpected arguments "${argResults.rest.join(' ')}".');
   }
 
-  var isTravis = argResults["travis"];
-  analyzerSummary = argResults["analyzer-sdk"];
-  kernelSummary = argResults["kernel-sdk"];
-  outputDirectory = argResults["output"];
+  var isTravis = argResults["travis"] as bool;
+  analyzerSummary = argResults["analyzer-sdk"] as String;
+  kernelSummary = argResults["kernel-sdk"] as String;
+  outputDirectory = argResults["output"] as String;
 
   new Directory(pkgDirectory).createSync(recursive: true);
 
diff --git a/pkg/dev_compiler/tool/global_compile.dart b/pkg/dev_compiler/tool/global_compile.dart
index c480116..1f344c5 100644
--- a/pkg/dev_compiler/tool/global_compile.dart
+++ b/pkg/dev_compiler/tool/global_compile.dart
@@ -6,14 +6,7 @@
 import 'dart:async';
 import 'dart:io';
 
-import 'package:analyzer/analyzer.dart'
-    show
-        ExportDirective,
-        ImportDirective,
-        PartDirective,
-        StringLiteral,
-        UriBasedDirective,
-        parseDirectives;
+import 'package:analyzer/analyzer.dart' show StringLiteral, parseDirectives;
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:args/args.dart' show ArgParser;
 import 'package:path/path.dart' as path;
@@ -252,16 +245,14 @@
 }
 
 /// Simplified from ParseDartTask.resolveDirective.
-String _resolveDirective(UriBasedDirective directive) {
+String _resolveDirective(UriBasedDirectiveImpl directive) {
   StringLiteral uriLiteral = directive.uri;
   String uriContent = uriLiteral.stringValue;
   if (uriContent != null) {
     uriContent = uriContent.trim();
     directive.uriContent = uriContent;
   }
-  return (directive as UriBasedDirectiveImpl).validate() == null
-      ? uriContent
-      : null;
+  return directive.validate() == null ? uriContent : null;
 }
 
 String _loadFile(String uri, String packageRoot) {
@@ -280,11 +271,11 @@
     var entryDir = path.dirname(entryPoint);
     var unit = parseDirectives(source, name: entryPoint, suppressErrors: true);
     for (var d in unit.directives) {
-      if (d is ImportDirective || d is ExportDirective) {
+      if (d is NamespaceDirectiveImpl) {
         var uri = _resolveDirective(d);
         processDependence(entryPoint, canonicalize(uri, entryDir));
         transitiveFiles(uri, entryDir, packageRoot);
-      } else if (d is PartDirective) {
+      } else if (d is PartDirectiveImpl) {
         var uri = _resolveDirective(d);
         processFile(canonicalize(uri, entryDir));
       }
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
index b78c49f..9f59400 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
@@ -15,7 +15,7 @@
   final bool isGetter;
   final bool isSetter;
 
-  InvocationImpl(memberName, this.positionalArguments,
+  InvocationImpl(memberName, List<Object> positionalArguments,
       {namedArguments,
       List typeArguments,
       this.isMethod: false,
@@ -23,6 +23,7 @@
       this.isSetter: false})
       : memberName =
             isSetter ? _setterSymbol(memberName) : _dartSymbol(memberName),
+        positionalArguments = new List.unmodifiable(positionalArguments),
         namedArguments = _namedArgsToSymbols(namedArguments),
         typeArguments = typeArguments == null
             ? const []
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
index f1d4f56..44f9f8b 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
@@ -37,7 +37,7 @@
 final Function(Object, Object) getOwnPropertyDescriptor =
     JS('', 'Object.getOwnPropertyDescriptor');
 
-final Function(Object) getOwnPropertyNames =
+final Iterable Function(Object) getOwnPropertyNames =
     JS('', 'Object.getOwnPropertyNames');
 
 final Function(Object) getOwnPropertySymbols =
diff --git a/pkg/dev_compiler/tool/patch_sdk.dart b/pkg/dev_compiler/tool/patch_sdk.dart
index b1a4bcc4..6032c60 100755
--- a/pkg/dev_compiler/tool/patch_sdk.dart
+++ b/pkg/dev_compiler/tool/patch_sdk.dart
@@ -10,6 +10,7 @@
 import 'dart:math' as math;
 
 import 'package:analyzer/analyzer.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:path/path.dart' as path;
 
@@ -66,7 +67,7 @@
 
     var libraryOut = path.join(sdkLibIn, library.path);
     var libraryOverride = path.join(patchDir, 'lib', library.path);
-    var libraryIn;
+    String libraryIn;
     if (library.path.contains(INTERNAL_PATH)) {
       libraryIn =
           path.join(privateIn, library.path.replaceAll(INTERNAL_PATH, ''));
@@ -265,10 +266,10 @@
     }
   }
 
-  void _maybePatch(AstNode node) {
+  void _maybePatch(Declaration node) {
     if (node is FieldDeclaration) return;
 
-    var externalKeyword = (node as dynamic).externalKeyword;
+    Token externalKeyword = (node as dynamic).externalKeyword;
     if (externalKeyword == null) return;
 
     var name = _qualifiedName(node);
@@ -303,9 +304,9 @@
   final String contents;
   final CompilationUnit unit;
 
-  final Map patches = <String, Declaration>{};
-  final Map mergeMembers = <String, List<ClassMember>>{};
-  final List mergeDeclarations = <CompilationUnitMember>[];
+  final patches = <String, Declaration>{};
+  final mergeMembers = <String, List<ClassMember>>{};
+  final mergeDeclarations = <CompilationUnitMember>[];
 
   PatchFinder.parseAndVisit(String contents)
       : contents = contents,
@@ -358,12 +359,12 @@
     result = "${parent.name.name}.";
   }
 
-  var name = (node as dynamic).name;
+  SimpleIdentifier name = (node as dynamic).name;
   if (name != null) result += name.name;
 
   // Make sure setters and getters don't collide.
-  if ((node is FunctionDeclaration || node is MethodDeclaration) &&
-      (node as dynamic).isSetter) {
+  if (node is FunctionDeclaration && node.isSetter ||
+      node is MethodDeclaration && node.isSetter) {
     result += "=";
   }
 
diff --git a/pkg/dev_compiler/web/stack_trace_mapper.dart b/pkg/dev_compiler/web/stack_trace_mapper.dart
index 89b2389..a5cdd4d 100644
--- a/pkg/dev_compiler/web/stack_trace_mapper.dart
+++ b/pkg/dev_compiler/web/stack_trace_mapper.dart
@@ -75,11 +75,8 @@
     if (!_bundle.containsMapping(uri)) {
       var rawMap = _provider(uri);
       if (rawMap != null) {
-        if (rawMap is! String) {
-          // The sourcemap was passed as regular JavaScript JSON.
-          rawMap = _stringify(rawMap);
-        }
-        SingleMapping mapping = parse(rawMap);
+        var strMap = rawMap is String ? rawMap : _stringify(rawMap);
+        var mapping = parse(strMap) as SingleMapping;
         mapping
           ..targetUrl = uri
           ..sourceRoot = '${path.dirname(uri)}/';
diff --git a/pkg/front_end/lib/src/api_prototype/kernel_generator.dart b/pkg/front_end/lib/src/api_prototype/kernel_generator.dart
index 753cb83..ddf30e1 100644
--- a/pkg/front_end/lib/src/api_prototype/kernel_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/kernel_generator.dart
@@ -13,9 +13,7 @@
 
 import '../fasta/compiler_context.dart' show CompilerContext;
 
-import '../fasta/fasta_codes.dart' show messageMissingMain;
-
-import '../fasta/parser.dart' show noLength;
+import '../fasta/fasta_codes.dart' show messageMissingMain, noLength;
 
 import '../fasta/severity.dart' show Severity;
 
diff --git a/pkg/front_end/lib/src/api_unstable/dart2js.dart b/pkg/front_end/lib/src/api_unstable/dart2js.dart
index 57f3e25..bad1ff9 100644
--- a/pkg/front_end/lib/src/api_unstable/dart2js.dart
+++ b/pkg/front_end/lib/src/api_unstable/dart2js.dart
@@ -17,9 +17,7 @@
 
 import '../fasta/compiler_context.dart' show CompilerContext;
 
-import '../fasta/fasta_codes.dart' show messageMissingMain;
-
-import '../fasta/parser.dart' show noLength;
+import '../fasta/fasta_codes.dart' show messageMissingMain, noLength;
 
 import '../fasta/severity.dart' show Severity;
 
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index 78da339..6739a47 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -44,6 +44,7 @@
         messageCantInferPackagesFromPackageUri,
         messageInternalProblemProvidedBothCompileSdkAndSdkSummary,
         messageMissingInput,
+        noLength,
         templateCannotReadPackagesFile,
         templateCannotReadSdkSpecification,
         templateInputFileNotFound,
@@ -54,8 +55,6 @@
 
 import '../fasta/messages.dart' show getLocation;
 
-import '../fasta/parser.dart' show noLength;
-
 import '../fasta/problems.dart' show unimplemented;
 
 import '../fasta/severity.dart' show Severity;
@@ -233,32 +232,9 @@
     if (_reportMessages) command_line_reporting.report(message, severity);
   }
 
+  // TODO(askesc): Remove this and direct callers directly to report.
   void reportWithoutLocation(Message message, Severity severity) {
-    if (_raw.onProblem != null) {
-      _raw.onProblem(
-          message.withLocation(null, -1, noLength),
-          severity,
-          command_line_reporting.formatWithoutLocation(message, severity),
-          -1,
-          -1);
-      if (command_line_reporting.shouldThrowOn(severity)) {
-        if (verbose) print(StackTrace.current);
-        throw new deprecated_InputError(
-            null,
-            -1,
-            "Compilation aborted due to fatal "
-            "${command_line_reporting.severityName(severity)}.");
-      }
-      return;
-    }
-    if (_raw.onError != null) {
-      _raw.onError(new _CompilationMessage(
-          message.withLocation(null, -1, noLength), severity));
-    }
-
-    if (_reportMessages) {
-      command_line_reporting.reportWithoutLocation(message, severity);
-    }
+    report(message.withoutLocation(), severity);
   }
 
   /// Runs various validations checks on the input options. For instance,
diff --git a/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart b/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart
index 65cd053..d059f88 100644
--- a/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart
@@ -4,9 +4,7 @@
 
 library fasta.constructor_reference_builder;
 
-import '../messages.dart' show templateConstructorNotFound;
-
-import '../parser.dart' show noLength;
+import '../messages.dart' show noLength, templateConstructorNotFound;
 
 import 'builder.dart'
     show
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 7782a3b..054a552 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -27,5 +27,5 @@
 
   bool get isField => true;
 
-  bool get hasImplicitType;
+  bool get hasTypeInferredFromInitializer;
 }
diff --git a/pkg/front_end/lib/src/fasta/command_line_reporting.dart b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
index 02802e0..fe28e9c 100644
--- a/pkg/front_end/lib/src/fasta/command_line_reporting.dart
+++ b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
@@ -19,12 +19,10 @@
 import 'deprecated_problems.dart'
     show Crash, deprecated_InputError, safeToString;
 
-import 'fasta_codes.dart' show LocatedMessage, Message;
+import 'fasta_codes.dart' show LocatedMessage;
 
 import 'messages.dart' show getLocation, getSourceLine, isVerbose;
 
-import 'parser.dart' show noLength;
-
 import 'problems.dart' show unexpected;
 
 import 'severity.dart' show Severity;
@@ -36,13 +34,9 @@
 /// Formats [message] as a string that is suitable for output from a
 /// command-line tool. This includes source snippets and different colors based
 /// on [severity].
-///
-/// This is shared implementation used by methods below, and isn't intended to
-/// be called directly.
-String formatInternal(
-    Message message, Severity severity, Uri uri, int offset, int length,
-    {Location location}) {
+String format(LocatedMessage message, Severity severity, {Location location}) {
   try {
+    int length = message.length;
     if (length < 1) {
       // TODO(ahe): Throw in this situation. It is normally an error caused by
       // empty names.
@@ -73,13 +67,14 @@
           break;
 
         default:
-          return unexpected("$severity", "formatInternal", -1, null);
+          return unexpected("$severity", "format", -1, null);
       }
     }
 
-    if (uri != null) {
-      String path = relativizeUri(uri);
-      location ??= (offset == -1 ? null : getLocation(uri, offset));
+    if (message.uri != null) {
+      String path = relativizeUri(message.uri);
+      int offset = message.charOffset;
+      location ??= (offset == -1 ? null : getLocation(message.uri, offset));
       String sourceLine = getSourceLine(location);
       if (sourceLine == null) {
         sourceLine = "";
@@ -110,7 +105,7 @@
         "[${message.code.name}] ${safeToString(message.message)}\n"
         "${safeToString(error)}\n"
         "$trace");
-    throw new Crash(uri, offset, error, trace);
+    throw new Crash(message.uri, message.charOffset, error, trace);
   }
 }
 
@@ -234,34 +229,3 @@
   _printAndThrowIfDebugging(
       format(message, severity), severity, message.uri, message.charOffset);
 }
-
-/// Similar to [report].
-///
-/// This method isn't intended to be called directly. Use
-/// [CompilerContext.reportWithoutLocation] instead.
-void reportWithoutLocation(Message message, Severity severity) {
-  if (isHidden(severity)) return;
-  if (isCompileTimeError(severity)) {
-    CompilerContext.current.logError(message, severity);
-  }
-  _printAndThrowIfDebugging(
-      formatWithoutLocation(message, severity), severity, null, -1);
-}
-
-/// Formats [message] as described in [formatInternal].
-///
-/// This method isn't intended to be called directly. Use
-/// [CompilerContext.format] instead.
-String format(LocatedMessage message, Severity severity, {Location location}) {
-  return formatInternal(message.messageObject, severity, message.uri,
-      message.charOffset, message.length,
-      location: location);
-}
-
-/// Formats [message] as described in [formatInternal].
-///
-/// This method isn't intended to be called directly. Use
-/// [CompilerContext.formatWithoutLocation] instead.
-String formatWithoutLocation(Message message, Severity severity) {
-  return formatInternal(message, severity, null, -1, noLength);
-}
diff --git a/pkg/front_end/lib/src/fasta/compiler_context.dart b/pkg/front_end/lib/src/fasta/compiler_context.dart
index c34c57f..77ab869 100644
--- a/pkg/front_end/lib/src/fasta/compiler_context.dart
+++ b/pkg/front_end/lib/src/fasta/compiler_context.dart
@@ -65,6 +65,7 @@
   }
 
   /// Report [message], for example, by printing it.
+  // TODO(askesc): Remove this and direct callers directly to report.
   void reportWithoutLocation(Message message, Severity severity) {
     options.reportWithoutLocation(message, severity);
   }
@@ -75,8 +76,9 @@
   }
 
   /// Format [message] as a text string that can be included in generated code.
+  // TODO(askesc): Remove this and direct callers directly to format.
   String formatWithoutLocation(Message message, Severity severity) {
-    return command_line_reporting.formatWithoutLocation(message, severity);
+    return command_line_reporting.format(message.withoutLocation(), severity);
   }
 
   void logError(Object message, Severity severity) {
diff --git a/pkg/front_end/lib/src/fasta/deprecated_problems.dart b/pkg/front_end/lib/src/fasta/deprecated_problems.dart
index b69bb9d..935e73f 100644
--- a/pkg/front_end/lib/src/fasta/deprecated_problems.dart
+++ b/pkg/front_end/lib/src/fasta/deprecated_problems.dart
@@ -13,9 +13,8 @@
 
 import 'command_line_reporting.dart' show shouldThrowOn;
 
-import 'messages.dart' show LocatedMessage, isVerbose, templateUnspecified;
-
-import 'parser.dart' show noLength;
+import 'messages.dart'
+    show LocatedMessage, noLength, isVerbose, templateUnspecified;
 
 import 'severity.dart' show Severity;
 
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes.dart b/pkg/front_end/lib/src/fasta/fasta_codes.dart
index 4d2a4d3..d3b42b9 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes.dart
@@ -16,6 +16,8 @@
 
 part 'fasta_codes_generated.dart';
 
+const int noLength = 1;
+
 class Code<T> {
   final String name;
 
@@ -47,6 +49,10 @@
   LocatedMessage withLocation(Uri uri, int charOffset, int length) {
     return new LocatedMessage(uri, charOffset, length, this);
   }
+
+  LocatedMessage withoutLocation() {
+    return new LocatedMessage(null, -1, noLength, this);
+  }
 }
 
 class MessageCode extends Code<Null> implements Message {
@@ -73,6 +79,10 @@
   LocatedMessage withLocation(Uri uri, int charOffset, int length) {
     return new LocatedMessage(uri, charOffset, length, this);
   }
+
+  LocatedMessage withoutLocation() {
+    return new LocatedMessage(null, -1, noLength, this);
+  }
 }
 
 class Template<T> {
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 8389e2d..00f7201 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -8,7 +8,7 @@
 
 import '../fasta_codes.dart' as fasta;
 
-import '../fasta_codes.dart' show LocatedMessage, Message, Template;
+import '../fasta_codes.dart' show LocatedMessage, Message, noLength, Template;
 
 import '../messages.dart' as messages show getLocationFromUri;
 
@@ -23,7 +23,6 @@
         closeBraceTokenFor,
         lengthForToken,
         lengthOfSpan,
-        noLength,
         offsetForToken,
         optional;
 
@@ -463,7 +462,9 @@
         }
         field.initializer = initializer;
         _typeInferrer.inferFieldInitializer(
-            this, field.hasImplicitType ? null : field.builtType, initializer);
+            this,
+            field.hasTypeInferredFromInitializer ? null : field.builtType,
+            initializer);
       }
     }
     pop(); // Type.
@@ -604,7 +605,7 @@
       return member.procedure.function.returnType;
     } else {
       assert(member is KernelConstructorBuilder);
-      return null;
+      return const DynamicType();
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
index 2a3d2d5..1fb2094 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -18,12 +18,11 @@
         templateNotAType,
         templateUnresolvedPrefixInTypeAnnotation;
 
-import '../messages.dart' show Message;
+import '../messages.dart' show Message, noLength;
 
 import '../names.dart' show callName, lengthName;
 
-import '../parser.dart'
-    show lengthForToken, lengthOfSpan, noLength, offsetForToken;
+import '../parser.dart' show lengthForToken, lengthOfSpan, offsetForToken;
 
 import '../problems.dart' show unhandled, unimplemented, unsupported;
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
index d542d10..b4e425e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
@@ -40,6 +40,7 @@
         messagePatchClassTypeVariablesMismatch,
         messagePatchDeclarationMismatch,
         messagePatchDeclarationOrigin,
+        noLength,
         templateOverriddenMethodCause,
         templateOverrideFewerNamedArguments,
         templateOverrideFewerPositionalArguments,
@@ -50,8 +51,6 @@
         templateOverrideTypeVariablesMismatch,
         templateRedirectionTargetNotFound;
 
-import '../parser.dart' show noLength;
-
 import '../problems.dart' show unexpected, unhandled, unimplemented;
 
 import '../type_inference/type_schema.dart' show UnknownType;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
index b915987..18cca9e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
@@ -32,13 +32,12 @@
 import '../fasta_codes.dart'
     show
         messageNoUnnamedConstructorInObject,
+        noLength,
         templateDuplicatedName,
         templateEnumConstantSameNameAsEnclosing;
 
 import '../modifier.dart' show constMask, finalMask, staticMask;
 
-import '../parser.dart' show noLength;
-
 import '../source/source_class_builder.dart' show SourceClassBuilder;
 
 import 'kernel_builder.dart'
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
index 9a1756a..0e60a3e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
@@ -130,5 +130,6 @@
   DartType get builtType => field.type;
 
   @override
-  bool get hasImplicitType => type == null;
+  bool get hasTypeInferredFromInitializer =>
+      ShadowField.hasTypeInferredFromInitializer(field);
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart
index 044e692..6bf1aa2 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart
@@ -15,9 +15,7 @@
 
 import 'package:kernel/type_algebra.dart' show substitute;
 
-import '../parser.dart' show noLength;
-
-import '../fasta_codes.dart' show templateCyclicTypedef;
+import '../fasta_codes.dart' show noLength, templateCyclicTypedef;
 
 import 'kernel_builder.dart'
     show
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart
index 63a43ad..7e6aeb3 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart
@@ -13,9 +13,7 @@
         Supertype,
         TypeParameter;
 
-import '../fasta_codes.dart' show messageSupertypeIsFunction;
-
-import '../parser.dart' show noLength;
+import '../fasta_codes.dart' show messageSupertypeIsFunction, noLength;
 
 import '../problems.dart' show unsupported;
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_invalid_type_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_invalid_type_builder.dart
index dffdd01..5d8004a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_invalid_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_invalid_type_builder.dart
@@ -6,9 +6,8 @@
 
 import 'package:kernel/ast.dart' show DartType, InvalidType;
 
-import '../fasta_codes.dart' show LocatedMessage, Message, templateTypeNotFound;
-
-import '../parser.dart' show noLength;
+import '../fasta_codes.dart'
+    show LocatedMessage, Message, noLength, templateTypeNotFound;
 
 import 'kernel_builder.dart'
     show InvalidTypeBuilder, KernelTypeBuilder, LibraryBuilder;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
index 78bc875..25054fe 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
@@ -18,6 +18,7 @@
         messageConflictsWithTypeVariableCause,
         messageTypeVariableDuplicatedName,
         messageTypeVariableSameNameAsEnclosing,
+        noLength,
         templateConflictsWithTypeVariable,
         templateDuplicatedExport,
         templateDuplicatedExportInType,
@@ -38,8 +39,6 @@
 import '../modifier.dart'
     show abstractMask, namedMixinApplicationMask, staticMask;
 
-import '../parser.dart' show noLength;
-
 import '../problems.dart' show unhandled;
 
 import '../source/source_class_builder.dart' show SourceClassBuilder;
@@ -75,9 +74,9 @@
         LoadLibraryBuilder,
         MemberBuilder,
         MetadataBuilder,
-        NamedTypeBuilder,
         PrefixBuilder,
         ProcedureBuilder,
+        QualifiedName,
         Scope,
         TypeBuilder,
         TypeVariableBuilder,
@@ -96,9 +95,6 @@
 
   final KernelLibraryBuilder actualOrigin;
 
-  final Map<String, SourceClassBuilder> mixinApplicationClasses =
-      <String, SourceClassBuilder>{};
-
   final List<KernelFunctionBuilder> nativeMethods = <KernelFunctionBuilder>[];
 
   final List<KernelTypeVariableBuilder> boundlessTypeVariables =
@@ -175,9 +171,7 @@
         modifiers,
         className,
         typeVariables,
-        applyMixins(supertype, supertypeOffset,
-            isSyntheticMixinImplementation: true,
-            subclassName: className,
+        applyMixins(supertype, supertypeOffset, className,
             typeVariables: typeVariables),
         interfaces,
         classScope,
@@ -251,269 +245,199 @@
     return typeVariablesByName;
   }
 
-  KernelTypeBuilder applyMixin(
-      KernelTypeBuilder supertype, KernelTypeBuilder mixin, String signature,
+  KernelTypeBuilder applyMixins(
+      KernelTypeBuilder type, int charOffset, String subclassName,
       {String documentationComment,
       List<MetadataBuilder> metadata,
-      bool isSyntheticMixinImplementation: false,
       String name,
       List<TypeVariableBuilder> typeVariables,
-      int modifiers: abstractMask,
-      List<KernelTypeBuilder> interfaces,
-      int charOffset: -1}) {
-    var constructors = <String, MemberBuilder>{};
-    bool isNamed = name != null;
-    SourceClassBuilder builder;
-    if (isNamed) {
-      modifiers |= namedMixinApplicationMask;
-    } else {
-      name = "${supertype.name}";
-      int index = name.indexOf("^");
-      if (index != -1) {
-        name = name.substring(0, index);
-      }
-      name = "_$name&${mixin.name}$signature";
-      builder = mixinApplicationClasses[name];
-    }
-    if (builder == null) {
-      builder = new SourceClassBuilder(
-          metadata,
-          modifiers,
-          name,
-          typeVariables,
-          supertype,
-          interfaces,
-          new Scope(<String, MemberBuilder>{}, <String, MemberBuilder>{},
-              scope.withTypeVariables(typeVariables),
-              "mixin $name", isModifiable: false),
-          new Scope(constructors, null, null, "constructors",
-              isModifiable: false),
-          this,
-          <ConstructorReferenceBuilder>[],
-          charOffset,
-          TreeNode.noOffset,
-          null,
-          mixin);
-      loader.target.metadataCollector
-          ?.setDocumentationComment(builder.target, documentationComment);
-      builder.cls.isSyntheticMixinImplementation =
-          isSyntheticMixinImplementation;
-      addBuilder(name, builder, charOffset);
-      if (!isNamed) {
-        mixinApplicationClasses[name] = builder;
-      }
-    }
-    return addNamedType(name, <KernelTypeBuilder>[], charOffset)
-      ..bind(isNamed ? builder : null);
-  }
-
-  KernelTypeBuilder applyMixins(KernelTypeBuilder type, int charOffset,
-      {String documentationComment,
-      List<MetadataBuilder> metadata,
-      bool isSyntheticMixinImplementation: false,
-      String name,
-      String subclassName,
-      List<TypeVariableBuilder> typeVariables,
-      int modifiers: abstractMask,
+      int modifiers,
       List<KernelTypeBuilder> interfaces}) {
+    if (name == null) {
+      // The following parameters should only be used when building a named
+      // mixin application.
+      if (documentationComment != null) {
+        unhandled("documentationComment", "unnamed mixin application",
+            charOffset, fileUri);
+      } else if (metadata != null) {
+        unhandled("metadata", "unnamed mixin application", charOffset, fileUri);
+      } else if (interfaces != null) {
+        unhandled(
+            "interfaces", "unnamed mixin application", charOffset, fileUri);
+      }
+    }
     if (type is KernelMixinApplicationBuilder) {
-      subclassName ??= name;
-      List<List<String>> signatureParts = <List<String>>[];
-      Map<String, String> unresolved = <String, String>{};
-      Map<String, String> unresolvedReversed = <String, String>{};
-      int unresolvedCount = 0;
-      Map<String, TypeBuilder> freeTypes = <String, TypeBuilder>{};
-
-      if (name == null || type.mixins.length != 1) {
-        TypeBuilder last = type.mixins.last;
-
-        /// Compute a signature of the type arguments used by the supertype and
-        /// mixins. These types are free variables. At this point we can't
-        /// trust that the number of type arguments match the type parameters,
-        /// so we also need to be able to detect missing type arguments.  To do
-        /// so, we separate each list of type arguments by `^` and type
-        /// arguments by `&`. For example, the mixin `C<S> with M<T, U>` would
-        /// look like this:
-        ///
-        ///     ^#U0^#U1&#U2
-        ///
-        /// Where `#U0`, `#U1`, and `#U2` are the free variables arising from
-        /// `S`, `T`, and `U` respectively.
-        ///
-        /// As we can resolve any type parameters used at this point, those are
-        /// named `#T0` and so forth. This reduces the number of free variables
-        /// which is crucial for memory usage and the Dart VM's bootstrap
-        /// sequence.
-        ///
-        /// For example, consider this use of mixin applications:
-        ///
-        ///     class _InternalLinkedHashMap<K, V> extends _HashVMBase
-        ///         with
-        ///             MapMixin<K, V>,
-        ///             _LinkedHashMapMixin<K, V>,
-        ///             _HashBase,
-        ///             _OperatorEqualsAndHashCode {}
-        ///
-        /// In this case, only two variables are free, and we produce this
-        /// signature: `^^#T0&#T1^#T0&#T1^^`. Assume another class uses the
-        /// sames mixins but with missing type arguments for `MapMixin`, its
-        /// signature would be: `^^^#T0&#T1^^`.
-        ///
-        /// Note that we do not need to compute a signature for a named mixin
-        /// application with only one mixin as we don't have to invent a name
-        /// for any classes in this situation.
-        void analyzeArguments(TypeBuilder type) {
-          if (name != null && type == last) {
-            // The last mixin of a named mixin application doesn't contribute
-            // to free variables.
-            return;
-          }
-          if (type is NamedTypeBuilder) {
-            List<String> part = <String>[];
-            for (int i = 0; i < (type.arguments?.length ?? 0); i++) {
-              var argument = type.arguments[i];
-              String name;
-              if (argument is NamedTypeBuilder) {
-                if (argument.builder != null) {
-                  int index = typeVariables?.indexOf(argument.builder) ?? -1;
-                  if (index != -1) {
-                    name = "#T${index}";
-                  }
-                } else if (argument.arguments == null) {
-                  name = unresolved["${argument.name}"] ??=
-                      "#U${unresolvedCount++}";
-                }
-              }
-              name ??= "#U${unresolvedCount++}";
-              unresolvedReversed[name] = "${argument.name}";
-              freeTypes[name] = argument;
-              part.add(name);
-              type.arguments[i] = new KernelNamedTypeBuilder(name, null);
-            }
-            signatureParts.add(part);
-          }
-        }
-
-        analyzeArguments(type.supertype);
-        type.mixins.forEach(analyzeArguments);
-      }
-      KernelTypeBuilder supertype = type.supertype;
-      List<List<String>> currentSignatureParts = <List<String>>[];
-      int currentSignatureCount = 0;
-      String computeSignature() {
-        if (freeTypes.isEmpty) return "";
-        currentSignatureParts.add(signatureParts[currentSignatureCount++]);
-        if (currentSignatureParts.any((l) => l.isNotEmpty)) {
-          return "^${currentSignatureParts.map((l) => l.join('&')).join('^')}";
+      String extractName(name) {
+        if (name is QualifiedName) {
+          return name.suffix;
         } else {
-          return "";
+          return name;
         }
       }
 
-      Map<String, TypeVariableBuilder> computeTypeVariables() {
-        Map<String, TypeVariableBuilder> variables =
-            <String, TypeVariableBuilder>{};
-        for (List<String> strings in currentSignatureParts) {
-          for (String name in strings) {
-            variables[name] ??= addTypeVariable(name, null, -1);
-          }
+      // Documentation below assumes the given mixin application is in one of
+      // these forms:
+      //
+      //     class C extends S with M1, M2, M3;
+      //     class Named = S with M1, M2, M3;
+      //
+      // When we refer to the subclass, we mean `C` or `Named`.
+
+      /// The current supertype.
+      ///
+      /// Starts out having the value `S` and on each iteration of the loop
+      /// below, it will take on the value corresponding to:
+      ///
+      /// 1. `S with M1`.
+      /// 2. `(S with M1) with M2`.
+      /// 3. `((S with M1) with M2) with M3`.
+      KernelTypeBuilder supertype = type.supertype;
+
+      /// The variable part of the mixin application's synthetic name. It
+      /// starts out as the name of the superclass, but is only used after it
+      /// has been combined with the name of the current mixin. In the examples
+      /// from above, it will take these values:
+      ///
+      /// 1. `S&M1`
+      /// 2. `S&M1&M2`
+      /// 3. `S&M1&M2&M3`.
+      ///
+      /// The full name of the mixin application is obtained by prepending the
+      /// name of the subclass (`C` or `Named` in the above examples) to the
+      /// running name. For the example `C`, that leads to these full names:
+      ///
+      /// 1. `_C&S&M1`
+      /// 2. `_C&S&M1&M2`
+      /// 3. `_C&S&M1&M2&M3`.
+      ///
+      /// For a named mixin application, the last name has been given by the
+      /// programmer, so for the example `Named` we see these full names:
+      ///
+      /// 1. `_Named&S&M1`
+      /// 2. `_Named&S&M1&M2`
+      /// 3. `Named`.
+      String runningName = extractName(supertype.name);
+
+      /// True when we're building a named mixin application. Notice that for
+      /// the `Named` example above, this is only true on the last
+      /// iteration because only the full mixin application is named.
+      bool isNamedMixinApplication;
+
+      /// The names of the type variables of the subclass.
+      Set<String> typeVariableNames;
+      if (typeVariables != null) {
+        typeVariableNames = new Set<String>();
+        for (TypeVariableBuilder typeVariable in typeVariables) {
+          typeVariableNames.add(typeVariable.name);
         }
-        return variables;
       }
 
-      checkArguments(t) {
-        for (var argument in t.arguments ?? const []) {
-          if (argument.builder == null && argument.name.startsWith("#")) {
-            throw "No builder on ${argument.name}";
+      /// The type variables used in [supertype] and the current mixin.
+      Map<String, TypeVariableBuilder> usedTypeVariables;
+
+      /// Helper function that updates [usedTypeVariables]. It needs to be
+      /// called twice per iteration: once on supertype and once on the current
+      /// mixin.
+      void computeUsedTypeVariables(KernelNamedTypeBuilder type) {
+        List<KernelTypeBuilder> typeArguments = type.arguments;
+        if (typeArguments != null && typeVariables != null) {
+          for (KernelTypeBuilder argument in typeArguments) {
+            if (typeVariableNames.contains(argument.name)) {
+              usedTypeVariables ??= <String, TypeVariableBuilder>{};
+              KernelTypeVariableBuilder freshTypeVariable =
+                  (usedTypeVariables[argument.name] ??=
+                      addTypeVariable(argument.name, null, charOffset));
+              // Notice that [argument] may have been created below as part of
+              // [applicationTypeArguments] and have to be rebound now
+              // (otherwise it would refer to a type variable in the subclass).
+              argument.bind(freshTypeVariable);
+            } else {
+              if (argument is KernelNamedTypeBuilder) {
+                computeUsedTypeVariables(argument);
+              }
+            }
           }
         }
       }
 
-      computeSignature(); // This combines the supertype with the first mixin.
-      for (int i = 0; i < type.mixins.length - 1; i++) {
-        Set<String> supertypeArguments = new Set<String>();
-        for (var part in currentSignatureParts) {
-          supertypeArguments.addAll(part);
+      /// Iterate over the mixins from left to right. At the end of each
+      /// iteration, a new [supertype] is computed that is the mixin
+      /// application of [supertype] with the current mixin.
+      for (int i = 0; i < type.mixins.length; i++) {
+        KernelTypeBuilder mixin = type.mixins[i];
+        isNamedMixinApplication = name != null && mixin == type.mixins.last;
+        usedTypeVariables = null;
+        if (!isNamedMixinApplication) {
+          if (supertype is KernelNamedTypeBuilder) {
+            computeUsedTypeVariables(supertype);
+          }
+          if (mixin is KernelNamedTypeBuilder) {
+            runningName += "&${extractName(mixin.name)}";
+            computeUsedTypeVariables(mixin);
+          }
         }
-        String signature = computeSignature();
-        var variables = computeTypeVariables();
-        if (supertypeArguments.isNotEmpty) {
-          supertype = addNamedType(
-              supertype.name,
-              supertypeArguments
-                  .map((n) => addNamedType(n, null, -1)..bind(variables[n]))
-                  .toList(),
-              -1);
+        String fullname =
+            isNamedMixinApplication ? name : "_$subclassName&$runningName";
+        List<TypeVariableBuilder> applicationTypeVariables;
+        List<KernelTypeBuilder> applicationTypeArguments;
+        if (isNamedMixinApplication) {
+          // If this is a named mixin application, it must be given all the
+          // declarated type variables.
+          applicationTypeVariables = typeVariables;
+        } else {
+          // Otherwise, we pass the fresh type variables to the mixin
+          // application in the same order as they're declared on the subclass.
+          if (usedTypeVariables != null) {
+            applicationTypeVariables = <TypeVariableBuilder>[];
+            applicationTypeArguments = <KernelTypeBuilder>[];
+            for (TypeVariableBuilder typeVariable in typeVariables) {
+              TypeVariableBuilder freshTypeVariable =
+                  usedTypeVariables[typeVariable.name];
+              if (freshTypeVariable != null) {
+                applicationTypeVariables.add(freshTypeVariable);
+                applicationTypeArguments.add(
+                    addNamedType(typeVariable.name, null, charOffset)..bind(
+                        // This may be rebound in the next iteration when
+                        // calling [computeUsedTypeVariables].
+                        typeVariable));
+              }
+            }
+          }
         }
-        KernelNamedTypeBuilder mixin = type.mixins[i];
-        for (var type in mixin.arguments ?? const []) {
-          type.bind(variables[type.name]);
+        SourceClassBuilder application = new SourceClassBuilder(
+            isNamedMixinApplication ? metadata : null,
+            isNamedMixinApplication
+                ? modifiers | namedMixinApplicationMask
+                : abstractMask,
+            fullname,
+            applicationTypeVariables,
+            supertype,
+            isNamedMixinApplication ? interfaces : null,
+            new Scope(<String, MemberBuilder>{}, <String, MemberBuilder>{},
+                scope.withTypeVariables(typeVariables),
+                "mixin $fullname ", isModifiable: false),
+            new Scope(<String, MemberBuilder>{}, null, null, "constructors",
+                isModifiable: false),
+            this,
+            <ConstructorReferenceBuilder>[],
+            charOffset,
+            TreeNode.noOffset,
+            null,
+            mixin);
+        if (isNamedMixinApplication) {
+          loader.target.metadataCollector?.setDocumentationComment(
+              application.target, documentationComment);
         }
-        checkArguments(supertype);
-        checkArguments(mixin);
-        supertype = applyMixin(supertype, mixin, signature,
-            isSyntheticMixinImplementation: true,
-            typeVariables: new List<TypeVariableBuilder>.from(variables.values),
-            // TODO(ahe): Eventually, the charOffset should be -1 as these
-            // classes are canonicalized and synthetic. For now, for the
-            // benefit of dart2js, we add offsets to help the compiler during
-            // the migration process. We add i because dart2js uses these
-            // numbers to sort the classes by. Adding i isn't precisely what
-            // dart2js does, but it should be good enough.
-            charOffset: charOffset + i);
+        // TODO(ahe, kmillikin): Should always be true?
+        // pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart can't
+        // handle that :(
+        application.cls.isSyntheticMixinImplementation =
+            !isNamedMixinApplication;
+        addBuilder(fullname, application, charOffset);
+        supertype =
+            addNamedType(fullname, applicationTypeArguments, charOffset);
       }
-      KernelNamedTypeBuilder mixin = type.mixins.last;
-
-      Set<String> supertypeArguments = new Set<String>();
-      for (var part in currentSignatureParts) {
-        supertypeArguments.addAll(part);
-      }
-      String signature = name == null ? computeSignature() : "";
-      var variables;
-      if (name == null) {
-        variables = computeTypeVariables();
-        typeVariables = new List<TypeVariableBuilder>.from(variables.values);
-        if (supertypeArguments.isNotEmpty) {
-          supertype = addNamedType(
-              supertype.name,
-              supertypeArguments
-                  .map((n) => addNamedType(n, null, -1)..bind(variables[n]))
-                  .toList(),
-              -1);
-        }
-      } else {
-        if (supertypeArguments.isNotEmpty) {
-          supertype = addNamedType(supertype.name,
-              supertypeArguments.map((n) => freeTypes[n]).toList(), -1);
-        }
-      }
-
-      if (name == null) {
-        for (var type in mixin.arguments ?? const []) {
-          type.bind(variables[type.name]);
-        }
-      }
-      checkArguments(supertype);
-      checkArguments(mixin);
-
-      KernelNamedTypeBuilder t = applyMixin(supertype, mixin, signature,
-          documentationComment: documentationComment,
-          metadata: metadata,
-          name: name,
-          isSyntheticMixinImplementation: isSyntheticMixinImplementation,
-          typeVariables: typeVariables,
-          modifiers: modifiers,
-          interfaces: interfaces,
-          charOffset: charOffset);
-      if (name == null) {
-        var builder = t.builder;
-        t = addNamedType(
-            t.name, freeTypes.keys.map((k) => freeTypes[k]).toList(), -1);
-        if (builder != null) {
-          t.bind(builder);
-        }
-      }
-      return t;
+      return supertype;
     } else {
       return type;
     }
@@ -530,7 +454,8 @@
       int charOffset) {
     // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`.
     endNestedDeclaration(name).resolveTypes(typeVariables, this);
-    KernelNamedTypeBuilder supertype = applyMixins(mixinApplication, charOffset,
+    KernelNamedTypeBuilder supertype = applyMixins(
+        mixinApplication, charOffset, name,
         documentationComment: documentationComment,
         metadata: metadata,
         name: name,
@@ -1072,14 +997,6 @@
 
   @override
   void includePart(covariant KernelLibraryBuilder part) {
-    part.mixinApplicationClasses
-        .forEach((String name, SourceClassBuilder builder) {
-      SourceClassBuilder existing =
-          mixinApplicationClasses.putIfAbsent(name, () => builder);
-      if (existing != builder) {
-        part.scope.local.remove(name);
-      }
-    });
     super.includePart(part);
     nativeMethods.addAll(part.nativeMethods);
     boundlessTypeVariables.addAll(part.boundlessTypeVariables);
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart
index 299756e..3428329 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart
@@ -7,9 +7,7 @@
 import 'package:kernel/ast.dart' show DartType, Supertype;
 
 import '../messages.dart'
-    show templateSupertypeIsIllegal, templateSupertypeIsTypeVariable;
-
-import '../parser.dart' show noLength;
+    show noLength, templateSupertypeIsIllegal, templateSupertypeIsTypeVariable;
 
 import 'kernel_builder.dart'
     show
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
index 9f9701d..e239fa77 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
@@ -49,9 +49,8 @@
         messageNonInstanceTypeVariableUse,
         messagePatchDeclarationMismatch,
         messagePatchDeclarationOrigin,
-        messagePatchNonExternal;
-
-import '../parser.dart' show noLength;
+        messagePatchNonExternal,
+        noLength;
 
 import '../problems.dart' show unexpected;
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index a7447ef..4e9fc11 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -390,6 +390,7 @@
 
   _ComplexAssignmentInferenceResult _inferRhs(
       ShadowTypeInferrer inferrer, DartType readType, DartType writeContext) {
+    assert(writeContext != null);
     var writeOffset = write == null ? -1 : write.fileOffset;
     Procedure combinerMember;
     DartType combinedType;
@@ -448,7 +449,8 @@
       _storeLetType(inferrer, replacedRhs ?? rhs, rhsType);
       if (nullAwareCombiner != null) {
         MethodInvocation equalsInvocation = nullAwareCombiner.condition;
-        inferrer.findMethodInvocationMember(writeContext, equalsInvocation,
+        inferrer.findMethodInvocationMember(
+            greatestClosure(inferrer.coreTypes, writeContext), equalsInvocation,
             silent: true);
         // Note: the case of readType=null only happens for erroneous code.
         combinedType = readType == null
@@ -782,6 +784,9 @@
     type = inferredType;
   }
 
+  static bool hasTypeInferredFromInitializer(ShadowField field) =>
+      field._inferenceNode is FieldInitializerInferenceNode;
+
   static bool isImplicitlyTyped(ShadowField field) => field._isImplicitlyTyped;
 
   static void setInferenceNode(ShadowField field, InferenceNode node) {
@@ -1079,7 +1084,7 @@
         inferrer.getCalleeFunctionType(writeMember, receiverType, false);
     DartType expectedIndexTypeForWrite;
     DartType indexContext = const UnknownType();
-    DartType writeContext;
+    DartType writeContext = const UnknownType();
     if (calleeType.positionalParameters.length >= 2) {
       // TODO(paulberry): we ought to get a context for the index expression
       // from the index formal parameter, but analyzer doesn't so for now we
@@ -1089,7 +1094,7 @@
     }
     var indexType = inferrer.inferExpression(index, indexContext, true);
     _storeLetType(inferrer, index, indexType);
-    if (writeContext != null) {
+    if (writeContext is! UnknownType) {
       inferrer.ensureAssignable(
           expectedIndexTypeForWrite,
           indexType,
@@ -1660,10 +1665,9 @@
     var closureContext = inferrer.closureContext;
     var typeContext = !closureContext.isGenerator
         ? closureContext.returnOrYieldContext
-        : null;
+        : const UnknownType();
     var inferredType = expression != null
-        ? inferrer.inferExpression(
-            expression, typeContext ?? const UnknownType(), true)
+        ? inferrer.inferExpression(expression, typeContext, true)
         : const VoidType();
     // Analyzer treats bare `return` statements as having no effect on the
     // inferred type of the closure.  TODO(paulberry): is this what we want
@@ -1695,14 +1699,14 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    DartType readType;
+    DartType readType = const DynamicType(); // Only used in error recovery
     var read = this.read;
     if (read is StaticGet) {
       readType = read.target.getterType;
       _storeLetType(inferrer, read, readType);
     }
     Member writeMember;
-    DartType writeContext;
+    DartType writeContext = const UnknownType();
     var write = this.write;
     if (write is StaticSet) {
       writeContext = write.target.setterType;
@@ -2193,7 +2197,7 @@
     if (read is VariableGet) {
       readType = read.promotedType ?? read.variable.type;
     }
-    DartType writeContext;
+    DartType writeContext = const UnknownType();
     var write = this.write;
     if (write is VariableSet) {
       writeContext = write.variable.type;
@@ -2347,17 +2351,21 @@
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
     var closureContext = inferrer.closureContext;
-    var typeContext =
-        closureContext.isGenerator ? closureContext.returnOrYieldContext : null;
-    if (isYieldStar && typeContext != null) {
-      typeContext = inferrer.wrapType(
-          typeContext,
-          closureContext.isAsync
-              ? inferrer.coreTypes.streamClass
-              : inferrer.coreTypes.iterableClass);
+    DartType inferredType;
+    if (closureContext.isGenerator) {
+      var typeContext = closureContext.returnOrYieldContext;
+      if (isYieldStar && typeContext != null) {
+        typeContext = inferrer.wrapType(
+            typeContext,
+            closureContext.isAsync
+                ? inferrer.coreTypes.streamClass
+                : inferrer.coreTypes.iterableClass);
+      }
+      inferredType = inferrer.inferExpression(expression, typeContext, true);
+    } else {
+      inferredType =
+          inferrer.inferExpression(expression, const UnknownType(), true);
     }
-    var inferredType = inferrer.inferExpression(
-        expression, typeContext ?? const UnknownType(), true);
     closureContext.handleYield(
         inferrer, isYieldStar, inferredType, expression, fileOffset);
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 282980e..c0b4ad3 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -59,10 +59,9 @@
         LocatedMessage,
         messageConstConstructorNonFinalField,
         messageConstConstructorNonFinalFieldCause,
+        noLength,
         templateSuperclassHasNoDefaultConstructor;
 
-import '../parser.dart' show noLength;
-
 import '../problems.dart' show unhandled;
 
 import '../severity.dart' show Severity;
diff --git a/pkg/front_end/lib/src/fasta/kernel/verifier.dart b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
index 045c9f3..6cfa12c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/verifier.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
@@ -28,9 +28,7 @@
 import '../compiler_context.dart' show CompilerContext;
 
 import '../fasta_codes.dart'
-    show LocatedMessage, templateInternalVerificationError;
-
-import '../parser.dart' show noLength;
+    show LocatedMessage, noLength, templateInternalVerificationError;
 
 import '../severity.dart' show Severity;
 
diff --git a/pkg/front_end/lib/src/fasta/loader.dart b/pkg/front_end/lib/src/fasta/loader.dart
index ad04feb..d14ac1e 100644
--- a/pkg/front_end/lib/src/fasta/loader.dart
+++ b/pkg/front_end/lib/src/fasta/loader.dart
@@ -16,14 +16,13 @@
     show
         LocatedMessage,
         Message,
+        noLength,
         SummaryTemplate,
         Template,
         messagePlatformPrivateLibraryAccess,
         templateInternalProblemMissingSeverity,
         templateSourceBodySummary;
 
-import 'parser.dart' show noLength;
-
 import 'problems.dart' show internalProblem;
 
 import 'severity.dart' show Severity;
diff --git a/pkg/front_end/lib/src/fasta/parser.dart b/pkg/front_end/lib/src/fasta/parser.dart
index 8419609..17c0d5c 100644
--- a/pkg/front_end/lib/src/fasta/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser.dart
@@ -35,7 +35,6 @@
         closeBraceTokenFor,
         lengthForToken,
         lengthOfSpan,
-        noLength,
         offsetForToken,
         optional;
 
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index 5a847d1..896f9f0 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -2468,7 +2468,8 @@
         if (!token.isIdentifier) {
           if (memberKind == MemberKind.TopLevelField ||
               memberKind == MemberKind.NonStaticField ||
-              memberKind == MemberKind.StaticField) {
+              memberKind == MemberKind.StaticField ||
+              memberKind == MemberKind.Local) {
             reportRecoverableError(
                 begin, fasta.messageMissingConstFinalVarOrType);
             listener.handleNoType(beforeBegin);
diff --git a/pkg/front_end/lib/src/fasta/parser/util.dart b/pkg/front_end/lib/src/fasta/parser/util.dart
index 3a503aa..f16353d 100644
--- a/pkg/front_end/lib/src/fasta/parser/util.dart
+++ b/pkg/front_end/lib/src/fasta/parser/util.dart
@@ -6,12 +6,12 @@
 
 import 'package:kernel/ast.dart' show TreeNode;
 
+import '../fasta_codes.dart' show noLength;
+
 import '../scanner.dart' show Token;
 
 import '../../scanner/token.dart' show BeginToken;
 
-const int noLength = 1;
-
 /// Returns true if [token] is the symbol or keyword [value].
 bool optional(String value, Token token) {
   return identical(value, token.stringValue);
@@ -48,7 +48,7 @@
 /// A null-aware alternative to `token.length`.  If [token] is `null`, returns
 /// [noLength].
 int lengthForToken(Token token) {
-  return token == null ? 1 : token.length;
+  return token == null ? noLength : token.length;
 }
 
 /// Returns the length of the span from [begin] to [end] (inclusive). If both
diff --git a/pkg/front_end/lib/src/fasta/problems.dart b/pkg/front_end/lib/src/fasta/problems.dart
index d9b0777..d16e520 100644
--- a/pkg/front_end/lib/src/fasta/problems.dart
+++ b/pkg/front_end/lib/src/fasta/problems.dart
@@ -9,13 +9,12 @@
 import 'messages.dart'
     show
         Message,
+        noLength,
         templateInternalProblemUnexpected,
         templateInternalProblemUnhandled,
         templateInternalProblemUnimplemented,
         templateInternalProblemUnsupported;
 
-import 'parser.dart' show noLength;
-
 import 'severity.dart' show Severity;
 
 /// Used to report an internal error.
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index a09cdd2..eb8e9c5 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -13,6 +13,7 @@
 
 import '../fasta_codes.dart'
     show
+        noLength,
         templateConflictsWithConstructor,
         templateConflictsWithFactory,
         templateConflictsWithMember,
@@ -39,8 +40,6 @@
 
 import '../kernel/kernel_shadow_ast.dart' show ShadowClass;
 
-import '../parser.dart' show noLength;
-
 import '../problems.dart' show unexpected, unhandled;
 
 import 'source_library_builder.dart' show SourceLibraryBuilder;
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 01d6e4b..2980d2f 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -42,6 +42,7 @@
         messageExpectedUri,
         messageMemberWithSameNameAsClass,
         messagePartOfSelf,
+        noLength,
         templateConflictsWithMember,
         templateConflictsWithSetter,
         templateCouldNotParseUri,
@@ -59,8 +60,6 @@
 
 import '../configuration.dart' show Configuration;
 
-import '../parser.dart' show noLength;
-
 import '../problems.dart' show unhandled;
 
 import 'source_loader.dart' show SourceLoader;
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 534367c..fcac936 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -46,6 +46,7 @@
     show
         LocatedMessage,
         Message,
+        noLength,
         SummaryTemplate,
         Template,
         templateAmbiguousSupertypes,
@@ -69,7 +70,7 @@
 
 import '../parser/class_member_parser.dart' show ClassMemberParser;
 
-import '../parser.dart' show lengthForToken, noLength, offsetForToken;
+import '../parser.dart' show lengthForToken, offsetForToken;
 
 import '../problems.dart' show internalProblem;
 
diff --git a/pkg/front_end/lib/src/fasta/testing/validating_instrumentation.dart b/pkg/front_end/lib/src/fasta/testing/validating_instrumentation.dart
index dae1dc7..f16d6af 100644
--- a/pkg/front_end/lib/src/fasta/testing/validating_instrumentation.dart
+++ b/pkg/front_end/lib/src/fasta/testing/validating_instrumentation.dart
@@ -14,9 +14,7 @@
 
 import '../compiler_context.dart' show CompilerContext;
 
-import '../messages.dart' show templateUnspecified;
-
-import '../parser.dart' show noLength;
+import '../messages.dart' show noLength, templateUnspecified;
 
 import '../scanner.dart' show ScannerResult, Token, scan;
 
diff --git a/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart b/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart
index be842cf..ced42ae 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart
@@ -18,8 +18,6 @@
 import 'package:kernel/type_algebra.dart';
 import 'package:kernel/type_environment.dart';
 
-import '../parser.dart' show noLength;
-
 /// Set this flag to `true` to cause debugging information about covariance
 /// checks to be printed to standard output.
 const bool debugCovariance = false;
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
index 9e4d468..0f78fba 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
@@ -26,9 +26,7 @@
 
 import '../deprecated_problems.dart' show Crash;
 
-import '../messages.dart' show getLocationFromNode;
-
-import '../parser.dart' show noLength;
+import '../messages.dart' show getLocationFromNode, noLength;
 
 /// Concrete class derived from [InferenceNode] to represent type inference of a
 /// field based on its initializer.
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 9cbbcb7..8dccab2 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -81,8 +81,6 @@
 
 import '../names.dart' show callName;
 
-import '../parser.dart' show noLength;
-
 import '../problems.dart' show unexpected, unhandled;
 
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
@@ -195,7 +193,9 @@
   }
 
   ClosureContext._(this.isAsync, this.isGenerator, this.returnOrYieldContext,
-      this._needToInferReturnType, this._needImplicitDowncasts);
+      this._needToInferReturnType, this._needImplicitDowncasts) {
+    assert(returnOrYieldContext != null);
+  }
 
   /// Updates the inferred return type based on the presence of a return
   /// statement returning the given [type].
@@ -446,12 +446,13 @@
         typeSchemaEnvironment.isSubtypeOf(actualType, expectedType);
   }
 
-  /// Checks whether [actualType] can be assigned to [expectedType], and inserts
-  /// an implicit downcast if appropriate.
+  /// Checks whether [actualType] can be assigned to the greatest closure of
+  /// [expectedType], and inserts an implicit downcast if appropriate.
   Expression ensureAssignable(DartType expectedType, DartType actualType,
       Expression expression, int fileOffset,
       {bool isReturnFromAsync = false}) {
-    assert(expectedType == null || isKnown(expectedType));
+    assert(expectedType != null);
+    expectedType = greatestClosure(coreTypes, expectedType);
 
     DartType initialExpectedType = expectedType;
     if (isReturnFromAsync && !isAssignable(expectedType, actualType)) {
@@ -498,7 +499,7 @@
               new NullLiteral()..fileOffset = fileOffset, tearOff, actualType);
           var let = new Let(t, conditional);
           parent?.replaceChild(expression, let);
-          expression = conditional;
+          expression = let;
         }
       }
     }
@@ -549,6 +550,8 @@
       Expression receiver,
       bool setter: false,
       bool silent: false}) {
+    assert(receiverType != null && isKnown(receiverType));
+
     // Our non-strong golden files currently don't include interface
     // targets, so we can't store the interface target without causing tests
     // to fail.  TODO(paulberry): fix this.
@@ -793,7 +796,7 @@
     if (type is InterfaceType && identical(type.classNode, class_)) {
       return type.typeArguments[0];
     } else {
-      return null;
+      return const UnknownType();
     }
   }
 
@@ -1135,7 +1138,11 @@
 
   DartType inferLocalFunction(FunctionNode function, DartType typeContext,
       int fileOffset, DartType returnContext) {
-    bool hasImplicitReturnType = returnContext == null;
+    bool hasImplicitReturnType = false;
+    if (returnContext == null) {
+      hasImplicitReturnType = true;
+      returnContext = const DynamicType();
+    }
     if (!isTopLevel) {
       var positionalParameters = function.positionalParameters;
       for (var i = 0; i < positionalParameters.length; i++) {
@@ -1234,9 +1241,7 @@
     // Let `N'` be `N[T/S]`.  The [ClosureContext] constructor will adjust
     // accordingly if the closure is declared with `async`, `async*`, or
     // `sync*`.
-    if (returnContext != null) {
-      returnContext = substitution.substituteType(returnContext);
-    }
+    returnContext = substitution.substituteType(returnContext);
 
     // Apply type inference to `B` in return context `N’`, with any references
     // to `xi` in `B` having type `Pi`.  This produces `B’`.
diff --git a/pkg/front_end/testcases/bug32426.dart b/pkg/front_end/testcases/bug32426.dart
new file mode 100644
index 0000000..cb70b9b
--- /dev/null
+++ b/pkg/front_end/testcases/bug32426.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+abstract class I {
+  void call();
+}
+
+class C implements I {
+  void call([int x]) {}
+}
+
+main() {
+  I i = new C();
+  void Function([int]) f = i;
+}
diff --git a/pkg/front_end/testcases/bug32426.dart.direct.expect b/pkg/front_end/testcases/bug32426.dart.direct.expect
new file mode 100644
index 0000000..1e86267
--- /dev/null
+++ b/pkg/front_end/testcases/bug32426.dart.direct.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method call() → void;
+}
+class C extends core::Object implements self::I {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call([core::int x = null]) → void {}
+}
+static method main() → dynamic {
+  self::I i = new self::C::•();
+  ([core::int]) → void f = i;
+}
diff --git a/pkg/front_end/testcases/bug32426.dart.outline.expect b/pkg/front_end/testcases/bug32426.dart.outline.expect
new file mode 100644
index 0000000..f4a907d
--- /dev/null
+++ b/pkg/front_end/testcases/bug32426.dart.outline.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    ;
+  abstract method call() → void;
+}
+class C extends core::Object implements self::I {
+  synthetic constructor •() → void
+    ;
+  method call([core::int x]) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/bug32426.dart.strong.expect b/pkg/front_end/testcases/bug32426.dart.strong.expect
new file mode 100644
index 0000000..4c681bf
--- /dev/null
+++ b/pkg/front_end/testcases/bug32426.dart.strong.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method call() → void;
+}
+class C extends core::Object implements self::I {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call([core::int x = null]) → void {}
+}
+static method main() → dynamic {
+  self::I i = new self::C::•();
+  ([core::int]) → void f = (let final self::I #t1 = i in #t1.==(null) ?{() → void} null : #t1.{self::I::call}) as{TypeError} ([core::int]) → void;
+}
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart
new file mode 100644
index 0000000..3d735e5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*@testedFeatures=inference*/
+library test;
+
+abstract class A {
+  Iterable<String> get foo;
+}
+
+class B implements A {
+  final /*@topType=Iterable<String>*/ foo = /*@typeArgs=String*/ const [];
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.direct.expect
new file mode 100644
index 0000000..95f7601
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.direct.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract get foo() → core::Iterable<core::String>;
+}
+class B extends core::Object implements self::A {
+  final field dynamic foo = const <dynamic>[];
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.outline.expect
new file mode 100644
index 0000000..872d11c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.outline.expect
@@ -0,0 +1,16 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → void
+    ;
+  abstract get foo() → core::Iterable<core::String>;
+}
+class B extends core::Object implements self::A {
+  final field dynamic foo;
+  synthetic constructor •() → void
+    ;
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.strong.expect
new file mode 100644
index 0000000..f7a8373
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.strong.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract get foo() → core::Iterable<core::String>;
+}
+class B extends core::Object implements self::A {
+  final field core::Iterable<core::String> foo = const <core::String>[];
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.direct.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.direct.expect
index 082497c..e32aaba 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.direct.expect
@@ -39,9 +39,9 @@
     : super core::Object::•()
     ;
 }
-abstract class _Object&B = core::Object with self::B {
+abstract class _G&Object&B = core::Object with self::B {
 }
-class G extends self::_Object&B {
+class G extends self::_G&Object&B {
   field dynamic x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect
index 6e8f7c6..1228829 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect
@@ -33,9 +33,9 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _Object&B = core::Object with self::B {
+abstract class _G&Object&B = core::Object with self::B {
 }
-class G extends self::_Object&B {
+class G extends self::_G&Object&B {
   field dynamic x;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.expect
index 6666c4d..bc12de8 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.expect
@@ -39,9 +39,9 @@
     : super core::Object::•()
     ;
 }
-abstract class _Object&B = core::Object with self::B {
+abstract class _G&Object&B = core::Object with self::B {
 }
-class G extends self::_Object&B {
+class G extends self::_G&Object&B {
   field core::int x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.direct.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.direct.expect
index 1dd6525..47d371a 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.direct.expect
@@ -38,9 +38,9 @@
     : super core::Object::•()
     ;
 }
-abstract class _Object&B = core::Object with self::B {
+abstract class _G&Object&B = core::Object with self::B {
 }
-class G extends self::_Object&B {
+class G extends self::_G&Object&B {
   field dynamic x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect
index 762f38c..bf71555 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect
@@ -33,9 +33,9 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _Object&B = core::Object with self::B {
+abstract class _G&Object&B = core::Object with self::B {
 }
-class G extends self::_Object&B {
+class G extends self::_G&Object&B {
   field dynamic x;
   synthetic constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.expect
index 30834b6..13ed540 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.expect
@@ -38,9 +38,9 @@
     : super core::Object::•()
     ;
 }
-abstract class _Object&B = core::Object with self::B {
+abstract class _G&Object&B = core::Object with self::B {
 }
-class G extends self::_Object&B {
+class G extends self::_G&Object&B {
   field core::int x = null;
   synthetic constructor •() → void
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.direct.expect
index 58666dc..5bb0107b 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.direct.expect
@@ -17,9 +17,9 @@
     : super core::Object::•()
     ;
 }
-abstract class _M1&M0 = self::M1 with self::M0<dynamic, dynamic> {
+abstract class _A&M1&M0 = self::M1 with self::M0<dynamic, dynamic> {
 }
-class A extends self::_M1&M0 {
+class A extends self::_A&M1&M0 {
   synthetic constructor •() → void
     : super self::M1::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.outline.expect
index 43cd31c..d2d243e 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.outline.expect
@@ -14,9 +14,9 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _M1&M0 = self::M1 with self::M0<dynamic, dynamic> {
+abstract class _A&M1&M0 = self::M1 with self::M0<dynamic, dynamic> {
 }
-class A extends self::_M1&M0 {
+class A extends self::_A&M1&M0 {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.strong.expect
index c6be946..c88b202 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.strong.expect
@@ -17,9 +17,9 @@
     : super core::Object::•()
     ;
 }
-abstract class _M1&M0 = self::M1 with self::M0<core::int, core::String> {
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, core::String> {
 }
-class A extends self::_M1&M0 {
+class A extends self::_A&M1&M0 {
   synthetic constructor •() → void
     : super self::M1::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.direct.expect
index 91adf7b..99c0ac1 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.direct.expect
@@ -17,9 +17,9 @@
     : super core::Object::•()
     ;
 }
-abstract class _M1&M0 = self::M1 with self::M0<dynamic, dynamic> {
+abstract class _A&M1&M0 = self::M1 with self::M0<dynamic, dynamic> {
 }
-class A extends self::_M1&M0 {
+class A extends self::_A&M1&M0 {
   synthetic constructor •() → void
     : super self::M1::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.outline.expect
index bd994a1..b32af06 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.outline.expect
@@ -14,9 +14,9 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _M1&M0 = self::M1 with self::M0<dynamic, dynamic> {
+abstract class _A&M1&M0 = self::M1 with self::M0<dynamic, dynamic> {
 }
-class A extends self::_M1&M0 {
+class A extends self::_A&M1&M0 {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.strong.expect
index c455b6c..fc43a81 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.strong.expect
@@ -17,9 +17,9 @@
     : super core::Object::•()
     ;
 }
-abstract class _M1&M0 = self::M1 with self::M0<core::int, core::int> {
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, core::int> {
 }
-class A extends self::_M1&M0 {
+class A extends self::_A&M1&M0 {
   synthetic constructor •() → void
     : super self::M1::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.direct.expect
index 55f52e1..1bf2b7f 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.direct.expect
@@ -17,9 +17,9 @@
     : super core::Object::•()
     ;
 }
-abstract class _M1&M0 = self::M1 with self::M0<dynamic, dynamic> {
+abstract class _A&M1&M0 = self::M1 with self::M0<dynamic, dynamic> {
 }
-class A extends self::_M1&M0 {
+class A extends self::_A&M1&M0 {
   synthetic constructor •() → void
     : super self::M1::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.outline.expect
index 2271436..5a8614d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.outline.expect
@@ -14,9 +14,9 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _M1&M0 = self::M1 with self::M0<dynamic, dynamic> {
+abstract class _A&M1&M0 = self::M1 with self::M0<dynamic, dynamic> {
 }
-class A extends self::_M1&M0 {
+class A extends self::_A&M1&M0 {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.expect
index 7256dd1..261aee6 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.expect
@@ -17,9 +17,9 @@
     : super core::Object::•()
     ;
 }
-abstract class _M1&M0 = self::M1 with self::M0<core::int, core::Comparable<dynamic>> {
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, core::Comparable<dynamic>> {
 }
-class A extends self::_M1&M0 {
+class A extends self::_A&M1&M0 {
   synthetic constructor •() → void
     : super self::M1::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.direct.expect
index 3ac06e1..732cded 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.direct.expect
@@ -12,9 +12,9 @@
     : super core::Object::•()
     ;
 }
-abstract class _I&J^#T0^#T1<#T0 extends core::Object, #T1 extends core::Object> = self::I<self::_I&J^#T0^#T1::#T0> with self::J<self::_I&J^#T0^#T1::#T1> {
+abstract class _M0&I&J<X extends core::Object, Y extends core::Object> = self::I<self::_M0&I&J::X> with self::J<self::_M0&I&J::Y> {
 }
-class M0<X extends core::Object, Y extends core::Object> extends self::_I&J^#T0^#T1<self::M0::X, self::M0::Y> {
+class M0<X extends core::Object, Y extends core::Object> extends self::_M0&I&J<self::M0::X, self::M0::Y> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
@@ -29,9 +29,9 @@
     : super self::M1::•()
     ;
 }
-abstract class _M2&M0 = self::M2 with self::M0<dynamic, dynamic> {
+abstract class _A&M2&M0 = self::M2 with self::M0<dynamic, dynamic> {
 }
-class A extends self::_M2&M0 {
+class A extends self::_A&M2&M0 {
   synthetic constructor •() → void
     : super self::M2::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.outline.expect
index 57ed82e..5d417f7 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.outline.expect
@@ -10,9 +10,9 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _I&J^#T0^#T1<#T0 extends core::Object, #T1 extends core::Object> = self::I<self::_I&J^#T0^#T1::#T0> with self::J<self::_I&J^#T0^#T1::#T1> {
+abstract class _M0&I&J<X extends core::Object, Y extends core::Object> = self::I<self::_M0&I&J::X> with self::J<self::_M0&I&J::Y> {
 }
-class M0<X extends core::Object, Y extends core::Object> extends self::_I&J^#T0^#T1<self::M0::X, self::M0::Y> {
+class M0<X extends core::Object, Y extends core::Object> extends self::_M0&I&J<self::M0::X, self::M0::Y> {
   synthetic constructor •() → void
     ;
 }
@@ -24,9 +24,9 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _M2&M0 = self::M2 with self::M0<dynamic, dynamic> {
+abstract class _A&M2&M0 = self::M2 with self::M0<dynamic, dynamic> {
 }
-class A extends self::_M2&M0 {
+class A extends self::_A&M2&M0 {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.strong.expect
index 420f505..92d614a 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.strong.expect
@@ -12,9 +12,9 @@
     : super core::Object::•()
     ;
 }
-abstract class _I&J^#T0^#T1<#T0 extends core::Object, #T1 extends core::Object> = self::I<self::_I&J^#T0^#T1::#T0> with self::J<self::_I&J^#T0^#T1::#T1> {
+abstract class _M0&I&J<X extends core::Object, Y extends core::Object> = self::I<self::_M0&I&J::X> with self::J<self::_M0&I&J::Y> {
 }
-class M0<X extends core::Object, Y extends core::Object> extends self::_I&J^#T0^#T1<self::M0::X, self::M0::Y> {
+class M0<X extends core::Object, Y extends core::Object> extends self::_M0&I&J<self::M0::X, self::M0::Y> {
   synthetic constructor •() → void
     : super self::I::•()
     ;
@@ -29,9 +29,9 @@
     : super self::M1::•()
     ;
 }
-abstract class _M2&M0 = self::M2 with self::M0<core::int, core::double> {
+abstract class _A&M2&M0 = self::M2 with self::M0<core::int, core::double> {
 }
-class A extends self::_M2&M0 {
+class A extends self::_A&M2&M0 {
   synthetic constructor •() → void
     : super self::M2::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.direct.expect
index e1b1656..ce175b8 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.direct.expect
@@ -22,9 +22,9 @@
     : super self::M1::•()
     ;
 }
-abstract class _M2&M0^#U0^<#U0 extends core::Object> = self::M2<self::_M2&M0^#U0^::#U0> with self::M0<dynamic> {
+abstract class _A&M2&M0 = self::M2<core::int> with self::M0<dynamic> {
 }
-class A extends self::_M2&M0^#U0^<core::int> {
+class A extends self::_A&M2&M0 {
   synthetic constructor •() → void
     : super self::M2::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.outline.expect
index 130fe8c8..a626b7e 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.outline.expect
@@ -18,9 +18,9 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _M2&M0^#U0^<#U0 extends core::Object> = self::M2<self::_M2&M0^#U0^::#U0> with self::M0<dynamic> {
+abstract class _A&M2&M0 = self::M2<core::int> with self::M0<dynamic> {
 }
-class A extends self::_M2&M0^#U0^<core::int> {
+class A extends self::_A&M2&M0 {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.strong.expect
index 07bb906..bc3f07d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.strong.expect
@@ -22,9 +22,9 @@
     : super self::M1::•()
     ;
 }
-abstract class _M2&M0^#U0^<#U0 extends core::Object> = self::M2<self::_M2&M0^#U0^::#U0> with self::M0<core::Map<self::_M2&M0^#U0^::#U0, self::_M2&M0^#U0^::#U0>> {
+abstract class _A&M2&M0 = self::M2<core::int> with self::M0<core::Map<core::int, core::int>> {
 }
-class A extends self::_M2&M0^#U0^<core::int> {
+class A extends self::_A&M2&M0 {
   synthetic constructor •() → void
     : super self::M2::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.direct.expect
index a445dca..58630ac 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.direct.expect
@@ -17,9 +17,9 @@
     : super self::I::•()
     ;
 }
-abstract class _M0&M1^#U0^<#U0 extends core::Object> = self::M0<self::_M0&M1^#U0^::#U0> with self::M1<dynamic> {
+abstract class _A&M0&M1 = self::M0<core::int> with self::M1<dynamic> {
 }
-class A extends self::_M0&M1^#U0^<core::int> {
+class A extends self::_A&M0&M1 {
   synthetic constructor •() → void
     : super self::M0::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.outline.expect
index 185c73d..e7482bf 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.outline.expect
@@ -14,9 +14,9 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _M0&M1^#U0^<#U0 extends core::Object> = self::M0<self::_M0&M1^#U0^::#U0> with self::M1<dynamic> {
+abstract class _A&M0&M1 = self::M0<core::int> with self::M1<dynamic> {
 }
-class A extends self::_M0&M1^#U0^<core::int> {
+class A extends self::_A&M0&M1 {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.strong.expect
index 046015f..a21a809 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.strong.expect
@@ -17,9 +17,9 @@
     : super self::I::•()
     ;
 }
-abstract class _M0&M1^#U0^<#U0 extends core::Object> = self::M0<self::_M0&M1^#U0^::#U0> with self::M1<self::_M0&M1^#U0^::#U0> {
+abstract class _A&M0&M1 = self::M0<core::int> with self::M1<core::int> {
 }
-class A extends self::_M0&M1^#U0^<core::int> {
+class A extends self::_A&M0&M1 {
   synthetic constructor •() → void
     : super self::M0::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.direct.expect
index 51ca970..848a79e 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.direct.expect
@@ -22,11 +22,11 @@
     : super self::I::•()
     ;
 }
-abstract class _M0&M1^#U0^<#U0 extends core::Object> = self::M0<self::_M0&M1^#U0^::#U0> with self::M1<dynamic> {
+abstract class _A&M0&M1 = self::M0<core::int> with self::M1<dynamic> {
 }
-abstract class __M0&M1&M2^#U0^^<#U0 extends core::Object> = self::_M0&M1^#U0^<self::__M0&M1&M2^#U0^^::#U0> with self::M2<dynamic> {
+abstract class _A&M0&M1&M2 = self::_A&M0&M1 with self::M2<dynamic> {
 }
-class A extends self::__M0&M1&M2^#U0^^<core::int> {
+class A extends self::_A&M0&M1&M2 {
   synthetic constructor •() → void
     : super self::M0::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.outline.expect
index 453336f..acc4658 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.outline.expect
@@ -18,11 +18,11 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _M0&M1^#U0^<#U0 extends core::Object> = self::M0<self::_M0&M1^#U0^::#U0> with self::M1<dynamic> {
+abstract class _A&M0&M1 = self::M0<core::int> with self::M1<dynamic> {
 }
-abstract class __M0&M1&M2^#U0^^<#U0 extends core::Object> = self::_M0&M1^#U0^<self::__M0&M1&M2^#U0^^::#U0> with self::M2<dynamic> {
+abstract class _A&M0&M1&M2 = self::_A&M0&M1 with self::M2<dynamic> {
 }
-class A extends self::__M0&M1&M2^#U0^^<core::int> {
+class A extends self::_A&M0&M1&M2 {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.strong.expect
index 6cc9bf5..036d56c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.strong.expect
@@ -22,11 +22,11 @@
     : super self::I::•()
     ;
 }
-abstract class _M0&M1^#U0^<#U0 extends core::Object> = self::M0<self::_M0&M1^#U0^::#U0> with self::M1<self::_M0&M1^#U0^::#U0> {
+abstract class _A&M0&M1 = self::M0<core::int> with self::M1<core::int> {
 }
-abstract class __M0&M1&M2^#U0^^<#U0 extends core::Object> = self::_M0&M1^#U0^<self::__M0&M1&M2^#U0^^::#U0> with self::M2<self::__M0&M1&M2^#U0^^::#U0> {
+abstract class _A&M0&M1&M2 = self::_A&M0&M1 with self::M2<core::int> {
 }
-class A extends self::__M0&M1&M2^#U0^^<core::int> {
+class A extends self::_A&M0&M1&M2 {
   synthetic constructor •() → void
     : super self::M0::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
index 2613be2..a9749fe 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
@@ -17,11 +17,11 @@
     : super self::I::•()
     ;
 }
-abstract class _Object&M0 = core::Object with self::M0<dynamic> {
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
 }
-abstract class __Object&M0&M1^^^#U0<#U0 extends core::Object> = self::_Object&M0 with self::M1<self::__Object&M0&M1^^^#U0::#U0> {
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<core::int> {
 }
-class A extends self::__Object&M0&M1^^^#U0<core::int> {
+class A extends self::_A&Object&M0&M1 {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect
index 299bf73..f83992c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect
@@ -14,11 +14,11 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _Object&M0 = core::Object with self::M0<dynamic> {
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
 }
-abstract class __Object&M0&M1^^^#U0<#U0 extends core::Object> = self::_Object&M0 with self::M1<self::__Object&M0&M1^^^#U0::#U0> {
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<core::int> {
 }
-class A extends self::__Object&M0&M1^^^#U0<core::int> {
+class A extends self::_A&Object&M0&M1 {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
index 2613be2..a9749fe 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
@@ -17,11 +17,11 @@
     : super self::I::•()
     ;
 }
-abstract class _Object&M0 = core::Object with self::M0<dynamic> {
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
 }
-abstract class __Object&M0&M1^^^#U0<#U0 extends core::Object> = self::_Object&M0 with self::M1<self::__Object&M0&M1^^^#U0::#U0> {
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<core::int> {
 }
-class A extends self::__Object&M0&M1^^^#U0<core::int> {
+class A extends self::_A&Object&M0&M1 {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
index 7928f75..b341add 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
@@ -17,11 +17,11 @@
     : super self::I::•()
     ;
 }
-abstract class _Object&M0 = core::Object with self::M0<dynamic> {
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
 }
-abstract class __Object&M0&M1 = self::_Object&M0 with self::M1<dynamic> {
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> {
 }
-class A extends self::__Object&M0&M1 implements self::I<core::int> {
+class A extends self::_A&Object&M0&M1 implements self::I<core::int> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.outline.expect
index 75c5146..46f1868 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.outline.expect
@@ -14,11 +14,11 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _Object&M0 = core::Object with self::M0<dynamic> {
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
 }
-abstract class __Object&M0&M1 = self::_Object&M0 with self::M1<dynamic> {
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> {
 }
-class A extends self::__Object&M0&M1 implements self::I<core::int> {
+class A extends self::_A&Object&M0&M1 implements self::I<core::int> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
index 7928f75..b341add 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
@@ -17,11 +17,11 @@
     : super self::I::•()
     ;
 }
-abstract class _Object&M0 = core::Object with self::M0<dynamic> {
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
 }
-abstract class __Object&M0&M1 = self::_Object&M0 with self::M1<dynamic> {
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> {
 }
-class A extends self::__Object&M0&M1 implements self::I<core::int> {
+class A extends self::_A&Object&M0&M1 implements self::I<core::int> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
index f3fb9a5..f15969d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
@@ -17,11 +17,11 @@
     : super core::Object::•()
     ;
 }
-abstract class _Object&M0 = core::Object with self::M0<dynamic> {
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
 }
-abstract class __Object&M0&M1 = self::_Object&M0 with self::M1<dynamic> {
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> {
 }
-class A extends self::__Object&M0&M1 {
+class A extends self::_A&Object&M0&M1 {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect
index 43277d0..4e5c65c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect
@@ -14,11 +14,11 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _Object&M0 = core::Object with self::M0<dynamic> {
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
 }
-abstract class __Object&M0&M1 = self::_Object&M0 with self::M1<dynamic> {
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> {
 }
-class A extends self::__Object&M0&M1 {
+class A extends self::_A&Object&M0&M1 {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
index f3fb9a5..f15969d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
@@ -17,11 +17,11 @@
     : super core::Object::•()
     ;
 }
-abstract class _Object&M0 = core::Object with self::M0<dynamic> {
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
 }
-abstract class __Object&M0&M1 = self::_Object&M0 with self::M1<dynamic> {
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> {
 }
-class A extends self::__Object&M0&M1 {
+class A extends self::_A&Object&M0&M1 {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
index ba12e18..1cf79e6 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
@@ -17,11 +17,11 @@
     : super core::Object::•()
     ;
 }
-abstract class _Object&M0 = core::Object with self::M0<dynamic> {
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
 }
-abstract class __Object&M0&M1 = self::_Object&M0 with self::M1<dynamic> {
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> {
 }
-class A extends self::__Object&M0&M1 {
+class A extends self::_A&Object&M0&M1 {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect
index 7a9af6b..82b7624 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect
@@ -14,11 +14,11 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _Object&M0 = core::Object with self::M0<dynamic> {
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
 }
-abstract class __Object&M0&M1 = self::_Object&M0 with self::M1<dynamic> {
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> {
 }
-class A extends self::__Object&M0&M1 {
+class A extends self::_A&Object&M0&M1 {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
index ba12e18..1cf79e6 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
@@ -17,11 +17,11 @@
     : super core::Object::•()
     ;
 }
-abstract class _Object&M0 = core::Object with self::M0<dynamic> {
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
 }
-abstract class __Object&M0&M1 = self::_Object&M0 with self::M1<dynamic> {
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> {
 }
-class A extends self::__Object&M0&M1 {
+class A extends self::_A&Object&M0&M1 {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/mixin.dart.direct.expect b/pkg/front_end/testcases/mixin.dart.direct.expect
index 82cbfbd..7ebdddc 100644
--- a/pkg/front_end/testcases/mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/mixin.dart.direct.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class _Object&M1 = core::Object with self::M1 {
+abstract class _B&Object&M1 = core::Object with self::M1 {
 }
-abstract class __Object&M1&M2 = self::_Object&M1 with self::M2 {
+abstract class _B&Object&M1&M2 = self::_B&Object&M1 with self::M2 {
 }
-class B extends self::__Object&M1&M2 {
+class B extends self::_B&Object&M1&M2 {
   constructor •(dynamic value) → void
     : super core::Object::•()
     ;
@@ -25,7 +25,11 @@
   method m() → dynamic
     return core::print("M2");
 }
-class C extends self::__Object&M1&M2 {
+abstract class _C&Object&M1 = core::Object with self::M1 {
+}
+abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 {
+}
+class C extends self::_C&Object&M1&M2 {
   constructor •(dynamic value) → void
     : super core::Object::•()
     ;
@@ -37,9 +41,9 @@
   method m() → dynamic
     return core::print(self::G1::T);
 }
-abstract class _Object&G1^^#T0<#T0 extends core::Object> = core::Object with self::G1<self::_Object&G1^^#T0::#T0> {
+abstract class _D&Object&G1<S extends core::Object> = core::Object with self::G1<self::_D&Object&G1::S> {
 }
-class D<S extends core::Object> extends self::_Object&G1^^#T0<self::D::S> {
+class D<S extends core::Object> extends self::_D&Object&G1<self::D::S> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/mixin.dart.outline.expect b/pkg/front_end/testcases/mixin.dart.outline.expect
index f2e9d27..ec5b2f3 100644
--- a/pkg/front_end/testcases/mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/mixin.dart.outline.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class _Object&M1 = core::Object with self::M1 {
+abstract class _B&Object&M1 = core::Object with self::M1 {
 }
-abstract class __Object&M1&M2 = self::_Object&M1 with self::M2 {
+abstract class _B&Object&M1&M2 = self::_B&Object&M1 with self::M2 {
 }
-class B extends self::__Object&M1&M2 {
+class B extends self::_B&Object&M1&M2 {
   constructor •(dynamic value) → void
     ;
 }
@@ -22,7 +22,11 @@
   method m() → dynamic
     ;
 }
-class C extends self::__Object&M1&M2 {
+abstract class _C&Object&M1 = core::Object with self::M1 {
+}
+abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 {
+}
+class C extends self::_C&Object&M1&M2 {
   constructor •(dynamic value) → void
     ;
 }
@@ -32,9 +36,9 @@
   method m() → dynamic
     ;
 }
-abstract class _Object&G1^^#T0<#T0 extends core::Object> = core::Object with self::G1<self::_Object&G1^^#T0::#T0> {
+abstract class _D&Object&G1<S extends core::Object> = core::Object with self::G1<self::_D&Object&G1::S> {
 }
-class D<S extends core::Object> extends self::_Object&G1^^#T0<self::D::S> {
+class D<S extends core::Object> extends self::_D&Object&G1<self::D::S> {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/mixin.dart.strong.expect b/pkg/front_end/testcases/mixin.dart.strong.expect
index bdaa070..b60be6e 100644
--- a/pkg/front_end/testcases/mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/mixin.dart.strong.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class _Object&M1 = core::Object with self::M1 {
+abstract class _B&Object&M1 = core::Object with self::M1 {
 }
-abstract class __Object&M1&M2 = self::_Object&M1 with self::M2 {
+abstract class _B&Object&M1&M2 = self::_B&Object&M1 with self::M2 {
 }
-class B extends self::__Object&M1&M2 {
+class B extends self::_B&Object&M1&M2 {
   constructor •(dynamic value) → void
     : super core::Object::•()
     ;
@@ -25,7 +25,11 @@
   method m() → dynamic
     return core::print("M2");
 }
-class C extends self::__Object&M1&M2 {
+abstract class _C&Object&M1 = core::Object with self::M1 {
+}
+abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 {
+}
+class C extends self::_C&Object&M1&M2 {
   constructor •(dynamic value) → void
     : super core::Object::•()
     ;
@@ -37,9 +41,9 @@
   method m() → dynamic
     return core::print(self::G1::T);
 }
-abstract class _Object&G1^^#T0<#T0 extends core::Object> = core::Object with self::G1<self::_Object&G1^^#T0::#T0> {
+abstract class _D&Object&G1<S extends core::Object> = core::Object with self::G1<self::_D&Object&G1::S> {
 }
-class D<S extends core::Object> extends self::_Object&G1^^#T0<self::D::S> {
+class D<S extends core::Object> extends self::_D&Object&G1<self::D::S> {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/mixin_super_repeated.dart b/pkg/front_end/testcases/mixin_super_repeated.dart
new file mode 100644
index 0000000..e9453fd
--- /dev/null
+++ b/pkg/front_end/testcases/mixin_super_repeated.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+abstract class M {
+  var m;
+}
+
+abstract class N extends M {
+  void set superM(value) {
+    super.m = value;
+  }
+
+  get superM => super.m;
+}
+
+class S {}
+
+class Named = S with M, N, M;
+
+main() {
+  Named named = new Named();
+  named.m = 42;
+  named.superM = 87;
+  if (named.m != 42) {
+    throw "Bad mixin translation of set:superM";
+  }
+  if (named.superM != 87) {
+    throw "Bad mixin translation of get:superM";
+  }
+}
diff --git a/pkg/front_end/testcases/mixin_super_repeated.dart.direct.expect b/pkg/front_end/testcases/mixin_super_repeated.dart.direct.expect
new file mode 100644
index 0000000..84f870b
--- /dev/null
+++ b/pkg/front_end/testcases/mixin_super_repeated.dart.direct.expect
@@ -0,0 +1,45 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class M extends core::Object {
+  field dynamic m = null;
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+abstract class N extends self::M {
+  synthetic constructor •() → void
+    : super self::M::•()
+    ;
+  set superM(dynamic value) → void {
+    super.{self::M::m} = value;
+  }
+  get superM() → dynamic
+    return super.{self::M::m};
+}
+class S extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+abstract class _Named&S&M = self::S with self::M {
+}
+abstract class _Named&S&M&N = self::_Named&S&M with self::N {
+}
+class Named = self::_Named&S&M&N with self::M {
+  synthetic constructor •() → void
+    : super self::S::•()
+    ;
+}
+static method main() → dynamic {
+  self::Named named = new self::Named::•();
+  named.m = 42;
+  named.superM = 87;
+  if(!named.m.==(42)) {
+    throw "Bad mixin translation of set:superM";
+  }
+  if(!named.superM.==(87)) {
+    throw "Bad mixin translation of get:superM";
+  }
+}
diff --git a/pkg/front_end/testcases/mixin_super_repeated.dart.outline.expect b/pkg/front_end/testcases/mixin_super_repeated.dart.outline.expect
new file mode 100644
index 0000000..a267b35
--- /dev/null
+++ b/pkg/front_end/testcases/mixin_super_repeated.dart.outline.expect
@@ -0,0 +1,32 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class M extends core::Object {
+  field dynamic m;
+  synthetic constructor •() → void
+    ;
+}
+abstract class N extends self::M {
+  synthetic constructor •() → void
+    ;
+  set superM(dynamic value) → void
+    ;
+  get superM() → dynamic
+    ;
+}
+class S extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+abstract class _Named&S&M = self::S with self::M {
+}
+abstract class _Named&S&M&N = self::_Named&S&M with self::N {
+}
+class Named = self::_Named&S&M&N with self::M {
+  synthetic constructor •() → void
+    : super self::S::•()
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/mixin_super_repeated.dart.strong.expect b/pkg/front_end/testcases/mixin_super_repeated.dart.strong.expect
new file mode 100644
index 0000000..4ece1f0
--- /dev/null
+++ b/pkg/front_end/testcases/mixin_super_repeated.dart.strong.expect
@@ -0,0 +1,45 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class M extends core::Object {
+  field dynamic m = null;
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+abstract class N extends self::M {
+  synthetic constructor •() → void
+    : super self::M::•()
+    ;
+  set superM(dynamic value) → void {
+    super.{self::M::m} = value;
+  }
+  get superM() → dynamic
+    return super.{self::M::m};
+}
+class S extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+abstract class _Named&S&M = self::S with self::M {
+}
+abstract class _Named&S&M&N = self::_Named&S&M with self::N {
+}
+class Named = self::_Named&S&M&N with self::M {
+  synthetic constructor •() → void
+    : super self::S::•()
+    ;
+}
+static method main() → dynamic {
+  self::Named named = new self::Named::•();
+  named.{self::M::m} = 42;
+  named.{self::N::superM} = 87;
+  if(!named.{self::M::m}.==(42)) {
+    throw "Bad mixin translation of set:superM";
+  }
+  if(!named.{self::N::superM}.==(87)) {
+    throw "Bad mixin translation of get:superM";
+  }
+}
diff --git a/pkg/front_end/testcases/qualified.dart.direct.expect b/pkg/front_end/testcases/qualified.dart.direct.expect
index 07abef7..85f2bbf 100644
--- a/pkg/front_end/testcases/qualified.dart.direct.expect
+++ b/pkg/front_end/testcases/qualified.dart.direct.expect
@@ -7,9 +7,9 @@
   method method() → invalid-type {}
   static factory WrongName() → self::Bad {}
 }
-abstract class _lib.Supertype&lib.Mixin = lib::Supertype with lib::Mixin {
+abstract class _WithMixin&Supertype&Mixin = lib::Supertype with lib::Mixin {
 }
-class WithMixin extends self::_lib.Supertype&lib.Mixin {
+class WithMixin extends self::_WithMixin&Supertype&Mixin {
   synthetic constructor •() → void
     : super lib::Supertype::•()
     ;
diff --git a/pkg/front_end/testcases/qualified.dart.outline.expect b/pkg/front_end/testcases/qualified.dart.outline.expect
index 16d0055..1214470 100644
--- a/pkg/front_end/testcases/qualified.dart.outline.expect
+++ b/pkg/front_end/testcases/qualified.dart.outline.expect
@@ -9,9 +9,9 @@
   static factory WrongName() → self::Bad
     ;
 }
-abstract class _lib.Supertype&lib.Mixin = lib::Supertype with lib::Mixin {
+abstract class _WithMixin&Supertype&Mixin = lib::Supertype with lib::Mixin {
 }
-class WithMixin extends self::_lib.Supertype&lib.Mixin {
+class WithMixin extends self::_WithMixin&Supertype&Mixin {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/qualified.dart.strong.expect b/pkg/front_end/testcases/qualified.dart.strong.expect
index 79b0cfb..4522e74 100644
--- a/pkg/front_end/testcases/qualified.dart.strong.expect
+++ b/pkg/front_end/testcases/qualified.dart.strong.expect
@@ -7,9 +7,9 @@
   method method() → invalid-type {}
   static factory WrongName() → self::Bad {}
 }
-abstract class _lib.Supertype&lib.Mixin = lib::Supertype with lib::Mixin {
+abstract class _WithMixin&Supertype&Mixin = lib::Supertype with lib::Mixin {
 }
-class WithMixin extends self::_lib.Supertype&lib.Mixin {
+class WithMixin extends self::_WithMixin&Supertype&Mixin {
   synthetic constructor •() → void
     : super lib::Supertype::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.direct.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.direct.expect
index af20a91..8d36ce1 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.direct.expect
@@ -8,11 +8,11 @@
     : super core::Object::•()
     ;
 }
-abstract class _Object&Mixin = core::Object with self::Mixin {
+abstract class _A&Object&Mixin = core::Object with self::Mixin {
 }
-abstract class __Object&Mixin&Mixin = self::_Object&Mixin with self::Mixin {
+abstract class _A&Object&Mixin&Mixin = self::_A&Object&Mixin with self::Mixin {
 }
-class A extends self::__Object&Mixin&Mixin {
+class A extends self::_A&Object&Mixin&Mixin {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.outline.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.outline.expect
index 68a7de9..494e9e1 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.outline.expect
@@ -7,11 +7,11 @@
   synthetic constructor •() → void
     ;
 }
-abstract class _Object&Mixin = core::Object with self::Mixin {
+abstract class _A&Object&Mixin = core::Object with self::Mixin {
 }
-abstract class __Object&Mixin&Mixin = self::_Object&Mixin with self::Mixin {
+abstract class _A&Object&Mixin&Mixin = self::_A&Object&Mixin with self::Mixin {
 }
-class A extends self::__Object&Mixin&Mixin {
+class A extends self::_A&Object&Mixin&Mixin {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.strong.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.strong.expect
index af20a91..8d36ce1 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.strong.expect
@@ -8,11 +8,11 @@
     : super core::Object::•()
     ;
 }
-abstract class _Object&Mixin = core::Object with self::Mixin {
+abstract class _A&Object&Mixin = core::Object with self::Mixin {
 }
-abstract class __Object&Mixin&Mixin = self::_Object&Mixin with self::Mixin {
+abstract class _A&Object&Mixin&Mixin = self::_A&Object&Mixin with self::Mixin {
 }
-class A extends self::__Object&Mixin&Mixin {
+class A extends self::_A&Object&Mixin&Mixin {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.direct.expect
index 0d5738c..524ca4d 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.direct.expect
@@ -14,9 +14,9 @@
   method foo() → dynamic
     return core::print("foo");
 }
-abstract class _Base&Mixin = self::Base with self::Mixin {
+abstract class _Sub&Base&Mixin = self::Base with self::Mixin {
 }
-class Sub extends self::_Base&Mixin {
+class Sub extends self::_Sub&Base&Mixin {
   synthetic constructor •() → void
     : super self::Base::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.outline.expect
index 7694753..f322f88 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.outline.expect
@@ -12,9 +12,9 @@
   method foo() → dynamic
     ;
 }
-abstract class _Base&Mixin = self::Base with self::Mixin {
+abstract class _Sub&Base&Mixin = self::Base with self::Mixin {
 }
-class Sub extends self::_Base&Mixin {
+class Sub extends self::_Sub&Base&Mixin {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.strong.expect
index a970df5..55136c8 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.strong.expect
@@ -14,9 +14,9 @@
   method foo() → dynamic
     return core::print("foo");
 }
-abstract class _Base&Mixin = self::Base with self::Mixin {
+abstract class _Sub&Base&Mixin = self::Base with self::Mixin {
 }
-class Sub extends self::_Base&Mixin {
+class Sub extends self::_Sub&Base&Mixin {
   synthetic constructor •() → void
     : super self::Base::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.direct.expect
index 35cf1612..1e8a13f 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.direct.expect
@@ -10,9 +10,9 @@
   method foo() → dynamic
     return 87;
 }
-abstract class _Object&Mixin = core::Object with self::Mixin {
+abstract class _Foo&Object&Mixin = core::Object with self::Mixin {
 }
-class Foo extends self::_Object&Mixin {
+class Foo extends self::_Foo&Object&Mixin {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.outline.expect
index f5c3d07..c254729 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.outline.expect
@@ -9,9 +9,9 @@
   method foo() → dynamic
     ;
 }
-abstract class _Object&Mixin = core::Object with self::Mixin {
+abstract class _Foo&Object&Mixin = core::Object with self::Mixin {
 }
-class Foo extends self::_Object&Mixin {
+class Foo extends self::_Foo&Object&Mixin {
   synthetic constructor •() → void
     ;
   method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.strong.expect
index d0251cd..a336a75 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.strong.expect
@@ -10,9 +10,9 @@
   method foo() → dynamic
     return 87;
 }
-abstract class _Object&Mixin = core::Object with self::Mixin {
+abstract class _Foo&Object&Mixin = core::Object with self::Mixin {
 }
-class Foo extends self::_Object&Mixin {
+class Foo extends self::_Foo&Object&Mixin {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect
index 0dfe536..25388a4 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect
@@ -12,16 +12,16 @@
   method f() → dynamic
     return 3;
 }
-abstract class _Super&Mixin^#T0^#T0<#T0 extends core::Object> = self::Super<self::_Super&Mixin^#T0^#T0::#T0> with mix::Mixin<self::_Super&Mixin^#T0^#T0::#T0> {
+abstract class _C&Super&Mixin<V extends core::Object> = self::Super<self::_C&Super&Mixin::V> with mix::Mixin<self::_C&Super&Mixin::V> {
 }
-class C<V extends core::Object> extends self::_Super&Mixin^#T0^#T0<self::C::V> {
+class C<V extends core::Object> extends self::_C&Super&Mixin<self::C::V> {
   synthetic constructor •() → void
     : super self::Super::•()
     ;
 }
-abstract class _Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> {
+abstract class _D&Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> {
 }
-class D extends self::_Super&Mixin {
+class D extends self::_D&Super&Mixin {
   synthetic constructor •() → void
     : super self::Super::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect
index 5c8d386..e1bc111 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect
@@ -11,15 +11,15 @@
   method f() → dynamic
     ;
 }
-abstract class _Super&Mixin^#T0^#T0<#T0 extends core::Object> = self::Super<self::_Super&Mixin^#T0^#T0::#T0> with mix::Mixin<self::_Super&Mixin^#T0^#T0::#T0> {
+abstract class _C&Super&Mixin<V extends core::Object> = self::Super<self::_C&Super&Mixin::V> with mix::Mixin<self::_C&Super&Mixin::V> {
 }
-class C<V extends core::Object> extends self::_Super&Mixin^#T0^#T0<self::C::V> {
+class C<V extends core::Object> extends self::_C&Super&Mixin<self::C::V> {
   synthetic constructor •() → void
     ;
 }
-abstract class _Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> {
+abstract class _D&Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> {
 }
-class D extends self::_Super&Mixin {
+class D extends self::_D&Super&Mixin {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
index fb1ba40..6a403fb 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
@@ -12,18 +12,18 @@
   method f() → dynamic
     return 3;
 }
-abstract class _Super&Mixin^#T0^#T0<#T0 extends core::Object> = self::Super<self::_Super&Mixin^#T0^#T0::#T0> with mix::Mixin<self::_Super&Mixin^#T0^#T0::#T0> {
+abstract class _C&Super&Mixin<V extends core::Object> = self::Super<self::_C&Super&Mixin::V> with mix::Mixin<self::_C&Super&Mixin::V> {
 }
-class C<V extends core::Object> extends self::_Super&Mixin^#T0^#T0<self::C::V> {
+class C<V extends core::Object> extends self::_C&Super&Mixin<self::C::V> {
   synthetic constructor •() → void
     : super self::Super::•()
     ;
 }
-abstract class _Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> {
+abstract class _D&Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> {
   abstract forwarding-stub method g(generic-covariant-impl dynamic a) → dynamic;
   abstract forwarding-stub set t(generic-covariant-impl dynamic _) → void;
 }
-class D extends self::_Super&Mixin {
+class D extends self::_D&Super&Mixin {
   synthetic constructor •() → void
     : super self::Super::•()
     ;
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.direct.expect b/pkg/front_end/testcases/regress/issue_32182.dart.direct.expect
index 4a0cedc..634143d 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.direct.expect
@@ -14,9 +14,9 @@
   method m() → dynamic
     return 42;
 }
-abstract class _A&M^#U0^<#U0 extends core::Object> = self::A<self::_A&M^#U0^::#U0> with self::M {
+abstract class _C&A&M = self::A<self::A<dynamic>> with self::M {
 }
-class C extends self::_A&M^#U0^<self::A<dynamic>> {
+class C extends self::_C&A&M {
   synthetic constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.outline.expect b/pkg/front_end/testcases/regress/issue_32182.dart.outline.expect
index b04b47b..92da155 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.outline.expect
@@ -12,9 +12,9 @@
   method m() → dynamic
     ;
 }
-abstract class _A&M^#U0^<#U0 extends core::Object> = self::A<self::_A&M^#U0^::#U0> with self::M {
+abstract class _C&A&M = self::A<self::A<dynamic>> with self::M {
 }
-class C extends self::_A&M^#U0^<self::A<dynamic>> {
+class C extends self::_C&A&M {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32182.dart.strong.expect
index 9bf3c1c..e9a1802 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.strong.expect
@@ -14,9 +14,9 @@
   method m() → dynamic
     return 42;
 }
-abstract class _A&M^#U0^<#U0 extends core::Object> = self::A<self::_A&M^#U0^::#U0> with self::M {
+abstract class _C&A&M = self::A<self::A<dynamic>> with self::M {
 }
-class C extends self::_A&M^#U0^<self::A<dynamic>> {
+class C extends self::_C&A&M {
   synthetic constructor •() → void
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/shaker/empty_program.dart.outline.expect b/pkg/front_end/testcases/shaker/empty_program.dart.outline.expect
index 8e30b21..636512b 100644
--- a/pkg/front_end/testcases/shaker/empty_program.dart.outline.expect
+++ b/pkg/front_end/testcases/shaker/empty_program.dart.outline.expect
@@ -321,6 +321,7 @@
 }
 abstract class Invocation extends self::Object {
   abstract get memberName() → self::Symbol;
+  get typeArguments() → self::List<self::Type>;
   abstract get positionalArguments() → self::List<dynamic>;
   abstract get namedArguments() → self::Map<self::Symbol, dynamic>;
   abstract get isMethod() → self::bool;
diff --git a/pkg/front_end/testcases/shaker/empty_program.dart.shaker.expect b/pkg/front_end/testcases/shaker/empty_program.dart.shaker.expect
index 56ce3ff..3844c72 100644
--- a/pkg/front_end/testcases/shaker/empty_program.dart.shaker.expect
+++ b/pkg/front_end/testcases/shaker/empty_program.dart.shaker.expect
@@ -263,6 +263,7 @@
     - toRadixString
   - class Invocation
     - memberName
+    - typeArguments
     - positionalArguments
     - namedArguments
     - isMethod
diff --git a/pkg/front_end/testcases/shaker/source_top.dart.outline.expect b/pkg/front_end/testcases/shaker/source_top.dart.outline.expect
index 781008f..019bb8a 100644
--- a/pkg/front_end/testcases/shaker/source_top.dart.outline.expect
+++ b/pkg/front_end/testcases/shaker/source_top.dart.outline.expect
@@ -17,9 +17,9 @@
   synthetic constructor •() → void
     : super core::Object::•();
 }
-abstract class _Object&A3 extends core::Object implements sou::A3 {
+abstract class _C3&Object&A3 extends core::Object implements sou::A3 {
 }
-class C3 extends self::_Object&A3 {
+class C3 extends self::_C3&Object&A3 {
   synthetic constructor •() → void
     : super core::Object::•();
 }
diff --git a/pkg/front_end/testcases/shaker/transitive_mixins.dart.outline.expect b/pkg/front_end/testcases/shaker/transitive_mixins.dart.outline.expect
index d56843d..b823ddf 100644
--- a/pkg/front_end/testcases/shaker/transitive_mixins.dart.outline.expect
+++ b/pkg/front_end/testcases/shaker/transitive_mixins.dart.outline.expect
@@ -17,8 +17,8 @@
 }
 class B extends core::Object {
 }
-abstract class _Object&A extends core::Object implements self::A {
+abstract class _C&Object&A extends core::Object implements self::A {
 }
-class C extends self::_Object&A implements self::B {
+class C extends self::_C&Object&A implements self::B {
 }
 
diff --git a/pkg/front_end/testcases/shaker/transitive_mixins.dart.shaker.expect b/pkg/front_end/testcases/shaker/transitive_mixins.dart.shaker.expect
index 749fe7e..b083426 100644
--- a/pkg/front_end/testcases/shaker/transitive_mixins.dart.shaker.expect
+++ b/pkg/front_end/testcases/shaker/transitive_mixins.dart.shaker.expect
@@ -5,5 +5,5 @@
 library pkg/front_end/testcases/shaker/transitive_mixins_lib.dart:
   - class A
   - class B
-  - class _Object&A
+  - class _C&Object&A
   - class C
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 7c5d041..647c7e5 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -48,6 +48,7 @@
 front_end/tool/incremental_perf_test: Slow, Pass
 kernel/test/closures_test: Slow, Pass
 kernel/testcases/*: Skip # These are not tests but input for tests.
+vm/test/transformations/type_flow/transformer_test: Slow, Pass
 vm/testcases/*: SkipByDesign # These are not tests but input for tests.
 
 [ $compiler == dart2analyzer ]
@@ -68,18 +69,13 @@
 collection/test/equality_test/05: Fail # Issue 1533
 collection/test/equality_test/none: Pass, Fail # Issue 14348
 compiler/tool/*: SkipByDesign # Only meant to run on vm
-front_end/test/dependency_grapher_test: SkipByDesign # Uses dart:io
-front_end/test/incremental_kernel_generator_test: SkipByDesign # Uses dart:io
-front_end/test/incremental_load_from_dill_test: SkipByDesign # Uses dart:io
-front_end/test/incremental_resolved_ast_generator_test: SkipByDesign # Uses dart:io
-front_end/test/memory_file_system_test: CompileTimeError # Issue 23773
-front_end/test/src/base/file_repository_test: SkipByDesign # Uses dart:io
-front_end/test/src/base/libraries_reader_test: SkipByDesign # Uses dart:io
-front_end/test/src/base/processed_options_test: SkipByDesign # Uses dart:io
-front_end/test/standard_file_system_test: SkipByDesign # Uses dart:io
-front_end/test/subpackage_relationships_test: SkipByDesign # Uses dart:io
+front_end/test/*: SkipByDesign # Only meant to run on vm, most use dart:mirrors and dart:io
 front_end/tool/*: SkipByDesign # Only meant to run on vm
+status_file/test/normalize_test: SkipByDesign # Uses dart:io
+status_file/test/parse_and_normalize_test: SkipByDesign # Uses dart:io
+status_file/test/repo_status_files_test: SkipByDesign # Uses dart:io
 telemetry/test/*: SkipByDesign # Only meant to run on vm
+testing/*: SkipByDesign # Only meant to run on vm
 typed_data/test/typed_buffers_test/01: Fail # Not supporting Int64List, Uint64List.
 
 [ $compiler == none ]
@@ -183,8 +179,10 @@
 [ $compiler == dart2js && $csp ]
 mutation_observer: Skip # This test cannot run under CSP because it is injecting a JavaScript polyfill
 
-[ $compiler == dart2js && $fast_startup ]
-front_end/test/*: SkipByDesign # Tests written with dart:mirrors.
+[ $compiler == dart2js && $fasta && $host_checked ]
+analysis_server_client/test/analysis_server_client_test: Crash
+js_ast/test/printer_callback_test: Crash
+js_ast/test/string_escape_test: Crash
 
 [ $compiler == dart2js && ($runtime == chrome || $runtime == ff) ]
 async/test/stream_zip_test: SkipSlow # Times out. Issue 22050
diff --git a/pkg/vm/lib/transformations/type_flow/analysis.dart b/pkg/vm/lib/transformations/type_flow/analysis.dart
index 92f7ec2..0b6bd2e 100644
--- a/pkg/vm/lib/transformations/type_flow/analysis.dart
+++ b/pkg/vm/lib/transformations/type_flow/analysis.dart
@@ -34,7 +34,6 @@
 // * Support function types, better handle closures.
 // * Support generic types: substitution, passing type arguments. Figure out
 //   when generic type should be approximated.
-// * Support named parameters (remove their approximation with static types).
 //
 // === Efficiency of the analysis ===
 // * Add benchmark to measure analysis time continuously.
@@ -182,7 +181,7 @@
   Type _processFunction(TypeFlowAnalysis typeFlowAnalysis) {
     final Member member = selector.member;
     if (selector.memberAgreesToCallKind(member)) {
-      if (_isLegalNumberOfArguments()) {
+      if (_argumentsValid()) {
         return typeFlowAnalysis
             .getSummary(member)
             .apply(args, typeFlowAnalysis.hierarchyCache, typeFlowAnalysis);
@@ -210,7 +209,7 @@
     }
   }
 
-  bool _isLegalNumberOfArguments() {
+  bool _argumentsValid() {
     final function = selector.member.function;
     assertx(function != null);
 
@@ -229,6 +228,16 @@
       return false;
     }
 
+    if (args.names.isNotEmpty) {
+      // TODO(dartbug.com/32292): make sure parameters are sorted in kernel AST
+      // and iterate parameters in parallel, without lookup.
+      for (var name in args.names) {
+        if (findNamedParameter(function, name) == null) {
+          return false;
+        }
+      }
+    }
+
     return true;
   }
 }
@@ -668,7 +677,7 @@
   final int _id;
   final Class class_;
   final Set<_ClassData> supertypes; // List of super-types including this.
-  final Set<_ClassData> allocatedSubtypes = new Set<_ClassData>();
+  final Set<_ClassData> _allocatedSubtypes = new Set<_ClassData>();
 
   /// Flag indicating if this class has a noSuchMethod() method not inherited
   /// from Object.
@@ -683,6 +692,33 @@
   ConcreteType get concreteType =>
       _concreteType ??= new ConcreteType(this, class_.rawType);
 
+  Type _specializedConeType;
+  Type get specializedConeType =>
+      _specializedConeType ??= _calculateConeTypeSpecialization();
+
+  Type _calculateConeTypeSpecialization() {
+    final int numSubTypes = _allocatedSubtypes.length;
+    if (numSubTypes == 0) {
+      return new Type.empty();
+    } else if (numSubTypes == 1) {
+      return _allocatedSubtypes.single.concreteType;
+    } else {
+      List<ConcreteType> types = new List<ConcreteType>();
+      for (var sub in _allocatedSubtypes) {
+        types.add(sub.concreteType);
+      }
+      // SetType constructor expects a list of ConcreteTypes sorted by classId
+      // (for faster intersections and unions).
+      types.sort();
+      return new SetType(types);
+    }
+  }
+
+  void addAllocatedSubtype(_ClassData subType) {
+    _allocatedSubtypes.add(subType);
+    _specializedConeType = null; // Reset cached specialization.
+  }
+
   @override
   int get hashCode => _id;
 
@@ -746,11 +782,11 @@
     final _ClassData classData = getClassData(cl);
 
     if (allocatedClasses.add(cl)) {
-      classData.allocatedSubtypes.add(classData);
+      classData.addAllocatedSubtype(classData);
       classData.invalidateDependentInvocations(_typeFlowAnalysis.workList);
 
       for (var supertype in classData.supertypes) {
-        supertype.allocatedSubtypes.add(classData);
+        supertype.addAllocatedSubtype(classData);
         supertype.invalidateDependentInvocations(_typeFlowAnalysis.workList);
       }
 
@@ -842,26 +878,11 @@
 
     _ClassData classData = getClassData(baseClass);
 
-    final allocatedSubtypes = classData.allocatedSubtypes;
     if (!_sealed) {
       classData.addDependentInvocation(_typeFlowAnalysis.currentInvocation);
     }
 
-    final int numSubTypes = allocatedSubtypes.length;
-
-    if (numSubTypes == 0) {
-      return new Type.empty();
-    } else if (numSubTypes == 1) {
-      return allocatedSubtypes.single.concreteType;
-    } else {
-      List<ConcreteType> types = new List<ConcreteType>();
-      for (var sub in allocatedSubtypes) {
-        types.add(sub.concreteType);
-      }
-      // TODO(alexmarkov): cache result of specialization or keep allocatedSubtypes sorted
-      types.sort();
-      return new SetType(types);
-    }
+    return classData.specializedConeType;
   }
 
   bool hasNonTrivialNoSuchMethod(Class c) {
diff --git a/pkg/vm/lib/transformations/type_flow/calls.dart b/pkg/vm/lib/transformations/type_flow/calls.dart
index cb4d30d..02166f9 100644
--- a/pkg/vm/lib/transformations/type_flow/calls.dart
+++ b/pkg/vm/lib/transformations/type_flow/calls.dart
@@ -155,15 +155,15 @@
 }
 
 /// Arguments passed to a call, including implicit receiver argument.
-// TODO(alexmarkov): use this class instead of List<Type> / List<TypeExpr>.
 // TODO(alexmarkov): take type arguments into account
-// TODO(alexmarkov): keep names sorted
 class Args<T extends TypeExpr> {
   final List<T> values;
   final List<String> names;
   int _hashCode;
 
-  Args(this.values, {this.names = const <String>[]});
+  Args(this.values, {this.names = const <String>[]}) {
+    assertx(isSorted(names));
+  }
 
   Args.withReceiver(Args<T> args, T receiver)
       : values = new List.from(args.values),
@@ -172,9 +172,7 @@
   }
 
   int get positionalCount => values.length - names.length;
-
-  // TODO(alexmarkov): get rid of this method
-  List<T> get positional => values.sublist(0, positionalCount);
+  int get namedCount => names.length;
 
   T get receiver => values[0];
 
diff --git a/pkg/vm/lib/transformations/type_flow/summary.dart b/pkg/vm/lib/transformations/type_flow/summary.dart
index 58a259c..f4e9f38 100644
--- a/pkg/vm/lib/transformations/type_flow/summary.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary.dart
@@ -30,10 +30,10 @@
     return type;
   }
 
-  String get name => "t$index";
+  String get label => "t$index";
 
   @override
-  String toString() => name;
+  String toString() => label;
 
   /// Prints body of this statement.
   String dump();
@@ -58,20 +58,21 @@
 
 /// Input parameter of the summary.
 class Parameter extends Statement {
-  final String _name;
+  final String name;
   final Type staticType;
   Type defaultValue;
   Type _argumentType = const EmptyType();
 
-  Parameter(this._name, this.staticType);
+  Parameter(this.name, this.staticType);
 
-  String get name => _name != null ? "%$_name" : super.name;
+  @override
+  String get label => "%$name";
 
   @override
   void accept(StatementVisitor visitor) => visitor.visitParameter(this);
 
   @override
-  String dump() => "$name = _Parameter #$index [$staticType]";
+  String dump() => "$label = _Parameter #$index [$staticType]";
 
   @override
   Type apply(List<Type> computedTypes, TypeHierarchy typeHierarchy,
@@ -96,7 +97,7 @@
   void accept(StatementVisitor visitor) => visitor.visitNarrow(this);
 
   @override
-  String dump() => "$name = _Narrow ($arg to $type)";
+  String dump() => "$label = _Narrow ($arg to $type)";
 
   @override
   Type apply(List<Type> computedTypes, TypeHierarchy typeHierarchy,
@@ -112,13 +113,14 @@
 
   Join(this._name, this.staticType);
 
-  String get name => _name ?? super.name;
+  @override
+  String get label => _name ?? super.label;
 
   @override
   void accept(StatementVisitor visitor) => visitor.visitJoin(this);
 
   @override
-  String dump() => "$name = _Join [$staticType] (${values.join(", ")})";
+  String dump() => "$label = _Join [$staticType] (${values.join(", ")})";
 
   @override
   Type apply(List<Type> computedTypes, TypeHierarchy typeHierarchy,
@@ -144,7 +146,7 @@
   void accept(StatementVisitor visitor) => visitor.visitCall(this);
 
   @override
-  String dump() => "$name${isResultUsed ? '*' : ''} = _Call $selector $args";
+  String dump() => "$label${isResultUsed ? '*' : ''} = _Call $selector $args";
 
   @override
   Type apply(List<Type> computedTypes, TypeHierarchy typeHierarchy,
@@ -238,12 +240,16 @@
 /// one member, function or initializer.
 class Summary {
   final int parameterCount;
+  final int positionalParameterCount;
   final int requiredParameterCount;
 
   List<Statement> _statements = <Statement>[];
   TypeExpr result = null;
 
-  Summary({this.parameterCount: 0, this.requiredParameterCount: 0});
+  Summary(
+      {this.parameterCount: 0,
+      this.positionalParameterCount: 0,
+      this.requiredParameterCount: 0});
 
   List<Statement> get statements => _statements;
 
@@ -267,11 +273,12 @@
   /// Apply this summary to the given arguments and return the resulting type.
   Type apply(Args<Type> arguments, TypeHierarchy typeHierarchy,
       CallHandler callHandler) {
-    // TODO(alexmarkov): take named parameters into account
-    final args = arguments.positional;
-
-    assertx(args.length >= requiredParameterCount);
-    assertx(args.length <= parameterCount);
+    final args = arguments.values;
+    final positionalArgCount = arguments.positionalCount;
+    final namedArgCount = arguments.namedCount;
+    assertx(requiredParameterCount <= positionalArgCount);
+    assertx(positionalArgCount <= positionalParameterCount);
+    assertx(namedArgCount <= parameterCount - positionalParameterCount);
 
     // Interpret statements sequentially, calculating the result type
     // of each statement and putting it into the 'types' list parallel
@@ -284,21 +291,40 @@
 
     List<Type> types = new List<Type>(_statements.length);
 
-    types.setAll(0, args);
+    types.setRange(0, positionalArgCount, args);
 
-    for (int i = 0; i < args.length; i++) {
+    for (int i = 0; i < positionalArgCount; i++) {
       Parameter param = _statements[i] as Parameter;
       param._observeArgumentType(args[i], typeHierarchy);
       types[i] = args[i].intersection(param.staticType, typeHierarchy);
     }
 
-    for (int i = args.length; i < parameterCount; i++) {
+    for (int i = positionalArgCount; i < positionalParameterCount; i++) {
       Parameter param = _statements[i] as Parameter;
+      assertx(param.defaultValue != null);
       param._observeArgumentType(param.defaultValue, typeHierarchy);
       types[i] = param.defaultValue;
-      assertx(types[i] != null);
     }
 
+    final argNames = arguments.names;
+    int argIndex = 0;
+    for (int i = positionalParameterCount; i < parameterCount; i++) {
+      Parameter param = _statements[i] as Parameter;
+      assertx(param.defaultValue != null);
+      if ((argIndex < namedArgCount) && (argNames[argIndex] == param.name)) {
+        Type argType = args[positionalArgCount + argIndex];
+        argIndex++;
+        param._observeArgumentType(argType, typeHierarchy);
+        types[i] = argType.intersection(param.staticType, typeHierarchy);
+      } else {
+        assertx((argIndex == namedArgCount) ||
+            (param.name.compareTo(argNames[argIndex]) < 0));
+        param._observeArgumentType(param.defaultValue, typeHierarchy);
+        types[i] = param.defaultValue;
+      }
+    }
+    assertx(argIndex == namedArgCount);
+
     for (int i = parameterCount; i < _statements.length; i++) {
       // Test if tracing is enabled to avoid expensive message formatting.
       if (kPrintTrace) {
@@ -316,12 +342,16 @@
   }
 
   Args<Type> get argumentTypes {
-    final positional = new List<Type>(parameterCount);
+    final argTypes = new List<Type>(parameterCount);
+    final argNames =
+        new List<String>(parameterCount - positionalParameterCount);
     for (int i = 0; i < parameterCount; i++) {
       Parameter param = _statements[i] as Parameter;
-      positional[i] = param.argumentType;
+      argTypes[i] = param.argumentType;
+      if (i >= positionalParameterCount) {
+        argNames[i - positionalParameterCount] = param.name;
+      }
     }
-    // TODO(alexmarkov): support named parameters
-    return new Args<Type>(positional);
+    return new Args<Type>(argTypes, names: argNames);
   }
 }
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index cb96d73..94a6d37 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -36,14 +36,28 @@
   _SummaryNormalizer(this._summary);
 
   void normalize() {
-    var statements = _summary.statements;
+    final List<Statement> statements = _summary.statements;
     _summary.reset();
 
-    for (int i = 0; i < _summary.parameterCount; i++) {
+    for (int i = 0; i < _summary.positionalParameterCount; i++) {
       _processed.add(statements[i]);
       _summary.add(statements[i]);
     }
 
+    // Sort named parameters.
+    // TODO(dartbug.com/32292): make sure parameters are sorted in kernel AST
+    // and remove this sorting.
+    if (_summary.positionalParameterCount < _summary.parameterCount) {
+      List<Statement> namedParams = statements.sublist(
+          _summary.positionalParameterCount, _summary.parameterCount);
+      namedParams.sort((Statement s1, Statement s2) =>
+          (s1 as Parameter).name.compareTo((s2 as Parameter).name));
+      namedParams.forEach((Statement st) {
+        _processed.add(st);
+        _summary.add(st);
+      });
+    }
+
     for (Statement st in statements) {
       if (st is Call) {
         _normalizeExpr(st, false);
@@ -255,7 +269,10 @@
       final firstParamIndex = hasReceiver ? 1 : 0;
 
       _summary = new Summary(
-          parameterCount:
+          parameterCount: firstParamIndex +
+              function.positionalParameters.length +
+              function.namedParameters.length,
+          positionalParameterCount:
               firstParamIndex + function.positionalParameters.length,
           requiredParameterCount:
               firstParamIndex + function.requiredParameterCount);
@@ -271,16 +288,20 @@
       for (VariableDeclaration param in function.positionalParameters) {
         _declareParameter(param.name, param.type, param.initializer);
       }
-
-      int count = 0;
-      for (VariableDeclaration param in function.positionalParameters) {
-        Join v = _declareVariable(param);
-        v.values.add(_summary.statements[firstParamIndex + count]);
-        ++count;
+      for (VariableDeclaration param in function.namedParameters) {
+        _declareParameter(param.name, param.type, param.initializer);
       }
 
-      // TODO(alexmarkov): take named parameters into account
-      function.namedParameters.forEach(_declareVariableWithStaticType);
+      int count = firstParamIndex;
+      for (VariableDeclaration param in function.positionalParameters) {
+        Join v = _declareVariable(param);
+        v.values.add(_summary.statements[count++]);
+      }
+      for (VariableDeclaration param in function.namedParameters) {
+        Join v = _declareVariable(param);
+        v.values.add(_summary.statements[count++]);
+      }
+      assertx(count == _summary.parameterCount);
 
       _returnValue = new Join("%result", function.returnType);
       _summary.add(_returnValue);
@@ -331,7 +352,8 @@
     final member = selector.member;
     assertx(member != null);
 
-    List<Type> args = <Type>[];
+    final List<Type> args = <Type>[];
+    final List<String> names = <String>[];
 
     if (hasReceiverArg(member) &&
         (selector.callKind != CallKind.FieldInitializer)) {
@@ -346,11 +368,20 @@
           final function = member.function;
           assertx(function != null);
 
-          for (int i = 0; i < function.positionalParameters.length; i++) {
+          final int paramCount = function.positionalParameters.length +
+              function.namedParameters.length;
+          for (int i = 0; i < paramCount; i++) {
             args.add(new Type.nullableAny());
           }
 
-          // TODO(alexmarkov): take named parameters into account
+          if (function.namedParameters.isNotEmpty) {
+            for (var param in function.namedParameters) {
+              names.add(param.name);
+            }
+            // TODO(dartbug.com/32292): make sure parameters are sorted in
+            // kernel AST and remove this sorting.
+            names.sort();
+          }
         }
         break;
 
@@ -365,24 +396,35 @@
         break;
     }
 
-    return new Args<Type>(args);
+    return new Args<Type>(args, names: names);
   }
 
   TypeExpr _visit(TreeNode node) => node.accept(this);
 
   Args<TypeExpr> _visitArguments(TypeExpr receiver, Arguments arguments) {
-    var args = <TypeExpr>[];
+    final args = <TypeExpr>[];
     if (receiver != null) {
       args.add(receiver);
     }
     for (Expression arg in arguments.positional) {
       args.add(_visit(arg));
     }
-    // TODO(alexmarkov): take named arguments into account
-    for (NamedExpression arg in arguments.named) {
-      _visit(arg.value);
+    if (arguments.named.isNotEmpty) {
+      final names = <String>[];
+      final map = <String, TypeExpr>{};
+      for (NamedExpression arg in arguments.named) {
+        final name = arg.name;
+        names.add(name);
+        map[name] = _visit(arg.value);
+      }
+      names.sort();
+      for (var name in names) {
+        args.add(map[name]);
+      }
+      return new Args<TypeExpr>(args, names: names);
+    } else {
+      return new Args<TypeExpr>(args);
     }
-    return new Args<TypeExpr>(args);
   }
 
   Parameter _declareParameter(
@@ -404,12 +446,15 @@
     return param;
   }
 
-  Join _declareVariable(VariableDeclaration decl) {
+  Join _declareVariable(VariableDeclaration decl, {bool addInitType: false}) {
     Join v = new Join(decl.name, decl.type);
     _summary.add(v);
     _variables[decl] = v;
     if (decl.initializer != null) {
-      v.values.add(_visit(decl.initializer));
+      TypeExpr initType = _visit(decl.initializer);
+      if (addInitType) {
+        v.values.add(initType);
+      }
     }
     return v;
   }
@@ -594,7 +639,7 @@
 
   @override
   TypeExpr visitLet(Let node) {
-    _declareVariable(node.variable);
+    _declareVariable(node.variable, addInitType: true);
     return _visit(node.body);
   }
 
@@ -1037,7 +1082,7 @@
 
   @override
   visitVariableDeclaration(VariableDeclaration node) {
-    final v = _declareVariable(node);
+    final v = _declareVariable(node, addInitType: true);
     if (node.initializer == null) {
       v.values.add(_nullType);
     }
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index 9bb6c65..7d5480c 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -214,8 +214,17 @@
               positionalParams[i], argTypes.values[firstParamIndex + i]);
         }
 
+        // TODO(dartbug.com/32292): make sure parameters are sorted in kernel
+        // AST and iterate parameters in parallel, without lookup.
+        final names = argTypes.names;
+        for (int i = 0; i < names.length; i++) {
+          final param = findNamedParameter(member.function, names[i]);
+          assertx(param != null);
+          _setInferredType(param,
+              argTypes.values[firstParamIndex + positionalParams.length + i]);
+        }
+
         // TODO(alexmarkov): figure out how to pass receiver type.
-        // TODO(alexmarkov): support named parameters
       }
     } else if (!member.isAbstract) {
       _setUnreachable(member);
diff --git a/pkg/vm/lib/transformations/type_flow/types.dart b/pkg/vm/lib/transformations/type_flow/types.dart
index 7b0b6f8..a964682 100644
--- a/pkg/vm/lib/transformations/type_flow/types.dart
+++ b/pkg/vm/lib/transformations/type_flow/types.dart
@@ -234,16 +234,7 @@
   /// Creates a new SetType using list of concrete types sorted by classId.
   SetType(this.types) {
     assertx(types.length >= 2);
-    assertx(_isSorted(types));
-  }
-
-  static bool _isSorted(List<ConcreteType> types) {
-    for (int i = 0; i < types.length - 1; i++) {
-      if (types[i].classId.compareTo(types[i + 1].classId) >= 0) {
-        return false;
-      }
-    }
-    return true;
+    assertx(isSorted(types));
   }
 
   @override
diff --git a/pkg/vm/lib/transformations/type_flow/utils.dart b/pkg/vm/lib/transformations/type_flow/utils.dart
index 865907e..75dd3dc 100644
--- a/pkg/vm/lib/transformations/type_flow/utils.dart
+++ b/pkg/vm/lib/transformations/type_flow/utils.dart
@@ -6,7 +6,8 @@
 /// analysis.
 library vm.transformations.type_flow.utils;
 
-import 'package:kernel/ast.dart' show Member, Constructor;
+import 'package:kernel/ast.dart'
+    show Constructor, FunctionNode, Member, VariableDeclaration;
 
 const bool kPrintTrace =
     const bool.fromEnvironment('global.type.flow.print.trace');
@@ -47,6 +48,22 @@
 bool hasReceiverArg(Member member) =>
     member.isInstanceMember || (member is Constructor);
 
+/// Returns true if elements in [list] are in strictly increasing order.
+/// List with duplicates is considered not sorted.
+bool isSorted(List list) {
+  for (int i = 0; i < list.length - 1; i++) {
+    if (list[i].compareTo(list[i + 1]) >= 0) {
+      return false;
+    }
+  }
+  return true;
+}
+
+VariableDeclaration findNamedParameter(FunctionNode function, String name) {
+  return function.namedParameters
+      .firstWhere((p) => p.name == name, orElse: () => null);
+}
+
 /// Holds various statistic counters for type flow analysis.
 class Statistics {
   static int summariesCreated = 0;
diff --git a/pkg/vm/test/frontend_server_test.dart b/pkg/vm/test/frontend_server_test.dart
index 481eb0c..1e4f4c1 100644
--- a/pkg/vm/test/frontend_server_test.dart
+++ b/pkg/vm/test/frontend_server_test.dart
@@ -45,8 +45,7 @@
         argThat(equals('server.dart')),
         captureAny,
         generator: any,
-      ))
-          .captured;
+      )).captured;
       expect(capturedArgs.single['sdk-root'], equals('sdkroot'));
       expect(capturedArgs.single['strong'], equals(false));
     });
@@ -64,8 +63,7 @@
         argThat(equals('server.dart')),
         captureAny,
         generator: any,
-      ))
-          .captured;
+      )).captured;
       expect(capturedArgs.single['sdk-root'], equals('sdkroot'));
       expect(capturedArgs.single['strong'], equals(true));
     });
@@ -83,8 +81,7 @@
         argThat(equals('server.dart')),
         captureAny,
         generator: any,
-      ))
-          .captured;
+      )).captured;
       expect(capturedArgs.single['sdk-root'], equals('sdkroot'));
       expect(capturedArgs.single['link-platform'], equals(true));
       expect(capturedArgs.single['strong'], equals(false));
@@ -425,8 +422,7 @@
           argThat(equals('server.dart')),
           captureAny,
           generator: any,
-        ))
-            .captured;
+        )).captured;
         expect(capturedArgs.single['sdk-root'], equals('sdkroot'));
         expect(capturedArgs.single['strong'], equals(false));
       });
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/params.dart b/pkg/vm/testcases/transformations/type_flow/summary_collector/params.dart
new file mode 100644
index 0000000..e09015d
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/params.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+t1(a1, a2, a3) => a1.foo1() + a2.foo2() + a3.foo3();
+
+t2(a3, a2, a1) => a1.foo1() + a2.foo2() + a3.foo3();
+
+t3(a1, a2, a3, [a4, a5, a6]) =>
+    a1.foo1() + a2.foo2() + a3.foo3() + a4.foo4() + a5.foo5() + a6.foo6();
+
+t4(a1, a2, a3, [a6, a5, a4]) =>
+    a1.foo1() + a2.foo2() + a3.foo3() + a4.foo4() + a5.foo5() + a6.foo6();
+
+t5(a1, a2, a3, {a4, a5, a6}) =>
+    a1.foo1() + a2.foo2() + a3.foo3() + a4.foo4() + a5.foo5() + a6.foo6();
+
+t6(a1, a2, a3, {a6, a5, a4}) =>
+    a1.foo1() + a2.foo2() + a3.foo3() + a4.foo4() + a5.foo5() + a6.foo6();
+
+t7(a1, a2, a3, {a5, a4, a6}) =>
+    a1.foo1() + a2.foo2() + a3.foo3() + a4.foo4() + a5.foo5() + a6.foo6();
+
+calls(x1, x2, x3, x4, x5, x6, x7, x8, x9) {
+  t1(x1, x2, x3);
+  t2(x1, x2, x3);
+  t3(x1, x2, x3);
+  t3(x1, x2, x3, x4);
+  t4(x1, x2, x3, x4, x5);
+  t5(x1, x2, x3);
+  t5(x1, x2, x3, a4: x4);
+  t5(x1, x2, x3, a5: x4);
+  t5(x1, x2, x3, a6: x4, a5: x5);
+  t6(x1, x2, x3, a4: x4, a6: x5);
+  t6(x1, x2, x3, a4: x4, a5: x5, a6: x6);
+  t7(x1, x2, x3, a4: x4, a6: x5, a5: x6);
+}
+
+main() {}
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/params.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/params.dart.expect
new file mode 100644
index 0000000..02d140f
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/params.dart.expect
@@ -0,0 +1,141 @@
+------------ #lib::t1 ------------
+%a1 = _Parameter #0 [_T ANY?]
+%a2 = _Parameter #1 [_T ANY?]
+%a3 = _Parameter #2 [_T ANY?]
+t3* = _Call dynamic [foo1] (%a1)
+t4* = _Call dynamic [foo2] (%a2)
+t5* = _Call dynamic [+] (t3, t4)
+t6* = _Call dynamic [foo3] (%a3)
+t7* = _Call dynamic [+] (t5, t6)
+RESULT: t7
+------------ #lib::t2 ------------
+%a3 = _Parameter #0 [_T ANY?]
+%a2 = _Parameter #1 [_T ANY?]
+%a1 = _Parameter #2 [_T ANY?]
+t3* = _Call dynamic [foo1] (%a1)
+t4* = _Call dynamic [foo2] (%a2)
+t5* = _Call dynamic [+] (t3, t4)
+t6* = _Call dynamic [foo3] (%a3)
+t7* = _Call dynamic [+] (t5, t6)
+RESULT: t7
+------------ #lib::t3 ------------
+%a1 = _Parameter #0 [_T ANY?]
+%a2 = _Parameter #1 [_T ANY?]
+%a3 = _Parameter #2 [_T ANY?]
+%a4 = _Parameter #3 [_T ANY?]
+%a5 = _Parameter #4 [_T ANY?]
+%a6 = _Parameter #5 [_T ANY?]
+t6* = _Call dynamic [foo1] (%a1)
+t7* = _Call dynamic [foo2] (%a2)
+t8* = _Call dynamic [+] (t6, t7)
+t9* = _Call dynamic [foo3] (%a3)
+t10* = _Call dynamic [+] (t8, t9)
+t11* = _Call dynamic [foo4] (%a4)
+t12* = _Call dynamic [+] (t10, t11)
+t13* = _Call dynamic [foo5] (%a5)
+t14* = _Call dynamic [+] (t12, t13)
+t15* = _Call dynamic [foo6] (%a6)
+t16* = _Call dynamic [+] (t14, t15)
+RESULT: t16
+------------ #lib::t4 ------------
+%a1 = _Parameter #0 [_T ANY?]
+%a2 = _Parameter #1 [_T ANY?]
+%a3 = _Parameter #2 [_T ANY?]
+%a6 = _Parameter #3 [_T ANY?]
+%a5 = _Parameter #4 [_T ANY?]
+%a4 = _Parameter #5 [_T ANY?]
+t6* = _Call dynamic [foo1] (%a1)
+t7* = _Call dynamic [foo2] (%a2)
+t8* = _Call dynamic [+] (t6, t7)
+t9* = _Call dynamic [foo3] (%a3)
+t10* = _Call dynamic [+] (t8, t9)
+t11* = _Call dynamic [foo4] (%a4)
+t12* = _Call dynamic [+] (t10, t11)
+t13* = _Call dynamic [foo5] (%a5)
+t14* = _Call dynamic [+] (t12, t13)
+t15* = _Call dynamic [foo6] (%a6)
+t16* = _Call dynamic [+] (t14, t15)
+RESULT: t16
+------------ #lib::t5 ------------
+%a1 = _Parameter #0 [_T ANY?]
+%a2 = _Parameter #1 [_T ANY?]
+%a3 = _Parameter #2 [_T ANY?]
+%a4 = _Parameter #3 [_T ANY?]
+%a5 = _Parameter #4 [_T ANY?]
+%a6 = _Parameter #5 [_T ANY?]
+t6* = _Call dynamic [foo1] (%a1)
+t7* = _Call dynamic [foo2] (%a2)
+t8* = _Call dynamic [+] (t6, t7)
+t9* = _Call dynamic [foo3] (%a3)
+t10* = _Call dynamic [+] (t8, t9)
+t11* = _Call dynamic [foo4] (%a4)
+t12* = _Call dynamic [+] (t10, t11)
+t13* = _Call dynamic [foo5] (%a5)
+t14* = _Call dynamic [+] (t12, t13)
+t15* = _Call dynamic [foo6] (%a6)
+t16* = _Call dynamic [+] (t14, t15)
+RESULT: t16
+------------ #lib::t6 ------------
+%a1 = _Parameter #0 [_T ANY?]
+%a2 = _Parameter #1 [_T ANY?]
+%a3 = _Parameter #2 [_T ANY?]
+%a4 = _Parameter #3 [_T ANY?]
+%a5 = _Parameter #4 [_T ANY?]
+%a6 = _Parameter #5 [_T ANY?]
+t6* = _Call dynamic [foo1] (%a1)
+t7* = _Call dynamic [foo2] (%a2)
+t8* = _Call dynamic [+] (t6, t7)
+t9* = _Call dynamic [foo3] (%a3)
+t10* = _Call dynamic [+] (t8, t9)
+t11* = _Call dynamic [foo4] (%a4)
+t12* = _Call dynamic [+] (t10, t11)
+t13* = _Call dynamic [foo5] (%a5)
+t14* = _Call dynamic [+] (t12, t13)
+t15* = _Call dynamic [foo6] (%a6)
+t16* = _Call dynamic [+] (t14, t15)
+RESULT: t16
+------------ #lib::t7 ------------
+%a1 = _Parameter #0 [_T ANY?]
+%a2 = _Parameter #1 [_T ANY?]
+%a3 = _Parameter #2 [_T ANY?]
+%a4 = _Parameter #3 [_T ANY?]
+%a5 = _Parameter #4 [_T ANY?]
+%a6 = _Parameter #5 [_T ANY?]
+t6* = _Call dynamic [foo1] (%a1)
+t7* = _Call dynamic [foo2] (%a2)
+t8* = _Call dynamic [+] (t6, t7)
+t9* = _Call dynamic [foo3] (%a3)
+t10* = _Call dynamic [+] (t8, t9)
+t11* = _Call dynamic [foo4] (%a4)
+t12* = _Call dynamic [+] (t10, t11)
+t13* = _Call dynamic [foo5] (%a5)
+t14* = _Call dynamic [+] (t12, t13)
+t15* = _Call dynamic [foo6] (%a6)
+t16* = _Call dynamic [+] (t14, t15)
+RESULT: t16
+------------ #lib::calls ------------
+%x1 = _Parameter #0 [_T ANY?]
+%x2 = _Parameter #1 [_T ANY?]
+%x3 = _Parameter #2 [_T ANY?]
+%x4 = _Parameter #3 [_T ANY?]
+%x5 = _Parameter #4 [_T ANY?]
+%x6 = _Parameter #5 [_T ANY?]
+%x7 = _Parameter #6 [_T ANY?]
+%x8 = _Parameter #7 [_T ANY?]
+%x9 = _Parameter #8 [_T ANY?]
+t9 = _Call direct [#lib::t1] (%x1, %x2, %x3)
+t10 = _Call direct [#lib::t2] (%x1, %x2, %x3)
+t11 = _Call direct [#lib::t3] (%x1, %x2, %x3)
+t12 = _Call direct [#lib::t3] (%x1, %x2, %x3, %x4)
+t13 = _Call direct [#lib::t4] (%x1, %x2, %x3, %x4, %x5)
+t14 = _Call direct [#lib::t5] (%x1, %x2, %x3)
+t15 = _Call direct [#lib::t5] (%x1, %x2, %x3, a4: %x4)
+t16 = _Call direct [#lib::t5] (%x1, %x2, %x3, a5: %x4)
+t17 = _Call direct [#lib::t5] (%x1, %x2, %x3, a5: %x5, a6: %x4)
+t18 = _Call direct [#lib::t6] (%x1, %x2, %x3, a4: %x4, a6: %x5)
+t19 = _Call direct [#lib::t6] (%x1, %x2, %x3, a4: %x4, a5: %x5, a6: %x6)
+t20 = _Call direct [#lib::t7] (%x1, %x2, %x3, a4: %x4, a5: %x6, a6: %x5)
+RESULT: _T {}?
+------------ #lib::main ------------
+
+RESULT: _T {}?
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
index c400675..44d8318 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
@@ -14,11 +14,10 @@
 a1 = _Join [dart.core::Object] (%a1, _T (#lib::A), _T (#lib::B))
 t5 = _Call direct [#lib::bar] (a1, _T (dart.core::int)+)
 t6 = _Call direct [#lib::B::] (_T (#lib::B))
-a2 = _Join [dart.core::Object] (_T {}?, %a2)
-t8 = _Call [dart.core::Object::==] (a1, a2)
-t9 = _Join [dart.core::Object] (a1, a2)
-t10 = _Narrow (t9 to _T (dart.core::Object)+?)
-RESULT: t10
+t7 = _Call [dart.core::Object::==] (a1, %a2)
+t8 = _Join [dart.core::Object] (a1, %a2)
+t9 = _Narrow (t8 to _T (dart.core::Object)+?)
+RESULT: t9
 ------------ #lib::bar ------------
 %a1 = _Parameter #0 [_T (dart.core::Object)+?]
 %a2 = _Parameter #1 [_T (dart.core::int)+?]
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart
index 9fa7451..515824c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart
@@ -28,7 +28,7 @@
   aa.foo();
 }
 
-void callerA3(A aa) {
+void callerA3({A aa}) {
   aa.foo();
 }
 
@@ -51,7 +51,7 @@
   callerA1(new B());
   callerA1(new C());
   callerA2(new B());
-  callerA3(new C());
+  callerA3(aa: new C());
   callerA4(dd);
   dd = new D();
 
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
index 9fd98bb..8843409 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
@@ -42,7 +42,7 @@
 static method callerA2([@vm.inferred-type.metadata=#lib::B] self::A aa) → void {
   [@vm.direct-call.metadata=#lib::B::foo] aa.{self::A::foo}();
 }
-static method callerA3([@vm.inferred-type.metadata=#lib::C] self::A aa) → void {
+static method callerA3({[@vm.inferred-type.metadata=#lib::C] self::A aa = null}) → void {
   [@vm.direct-call.metadata=#lib::C::foo] aa.{self::A::foo}();
 }
 static method callerA4([@vm.inferred-type.metadata=#lib::D?] self::A aa) → void {
@@ -58,7 +58,7 @@
   self::callerA1(new self::B::•());
   self::callerA1(new self::C::•());
   self::callerA2(new self::B::•());
-  self::callerA3(new self::C::•());
+  self::callerA3(aa: new self::C::•());
   self::callerA4([@vm.inferred-type.metadata=#lib::D?] self::dd);
   self::dd = new self::D::•();
   self::callerE1("abc");
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
index a3755e4..977c750 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
@@ -35,12 +35,12 @@
     : super core::Object::•()
     ;
 }
-abstract class _D&C extends self::D implements self::C {
+abstract class _E&D&C extends self::D implements self::C {
   synthetic constructor •() → void
     : super self::D::•()
     ;
 }
-class E extends self::_D&C {
+class E extends self::_E&D&C {
   synthetic constructor •() → void
     : super self::D::•()
     ;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart
index ab479a7..a85118e 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart
@@ -12,6 +12,10 @@
 
 class T5 {}
 
+class T6 {}
+
+class T7 {}
+
 abstract class A {
   foo();
   get bar;
@@ -54,6 +58,14 @@
   }
 }
 
+class H {
+  foo({left, right}) => new T6();
+
+  noSuchMethod(Invocation invocation) {
+    return new T7();
+  }
+}
+
 A bb = new B();
 A dd = new D();
 
@@ -83,4 +95,9 @@
   dynamic gg = new G();
 
   print(gg.noSuchMethod(null, null));
+
+  dynamic hh = new H();
+
+  print(hh.foo(right: 2, left: 1));
+  print(hh.foo(left: 1, top: 2));
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
index 9b51a47..61fb50e 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
@@ -27,6 +27,16 @@
     : super core::Object::•()
     ;
 }
+class T6 extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class T7 extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
 abstract class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
@@ -84,6 +94,16 @@
     return new self::T5::•();
   }
 }
+class H extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo({[@vm.inferred-type.metadata=!] dynamic left = null, [@vm.inferred-type.metadata=!] dynamic right = null}) → dynamic
+    return new self::T6::•();
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return new self::T7::•();
+  }
+}
 [@vm.inferred-type.metadata=#lib::B]static field self::A bb = new self::B::•();
 [@vm.inferred-type.metadata=#lib::D]static field self::A dd = new self::D::•();
 [@vm.inferred-type.metadata=dart.core::Null?]static field core::Function unknown;
@@ -104,4 +124,7 @@
   new self::F::•();
   dynamic gg = new self::G::•();
   core::print([@vm.inferred-type.metadata=#lib::T5] gg.noSuchMethod(null, null));
+  dynamic hh = new self::H::•();
+  core::print([@vm.inferred-type.metadata=#lib::T6] hh.foo(right: 2, left: 1));
+  core::print([@vm.inferred-type.metadata=#lib::T7] hh.foo(left: 1, top: 2));
 }
diff --git a/runtime/lib/collection_patch.dart b/runtime/lib/collection_patch.dart
index 709e13e..05cf6e1 100644
--- a/runtime/lib/collection_patch.dart
+++ b/runtime/lib/collection_patch.dart
@@ -9,7 +9,7 @@
 
 import "dart:_internal" as internal;
 
-import "dart:_internal" show patch;
+import "dart:_internal" show patch, IterableElementError;
 
 import "dart:typed_data" show Uint32List;
 
@@ -599,6 +599,29 @@
     return null;
   }
 
+  E get first {
+    for (int i = 0; i < _buckets.length; i++) {
+      var entry = _buckets[i];
+      if (entry != null) {
+        return entry.key;
+      }
+    }
+    throw IterableElementError.noElement();
+  }
+
+  E get last {
+    for (int i = _buckets.length - 1; i >= 0; i--) {
+      var entry = _buckets[i];
+      if (entry != null) {
+        while (entry.next != null) {
+          entry = entry.next;
+        }
+        return entry.key;
+      }
+    }
+    throw IterableElementError.noElement();
+  }
+
   // Set.
 
   bool add(E element) {
diff --git a/runtime/lib/compact_hash.dart b/runtime/lib/compact_hash.dart
index 7961370..82bc532 100644
--- a/runtime/lib/compact_hash.dart
+++ b/runtime/lib/compact_hash.dart
@@ -469,6 +469,26 @@
 
   int get length => _usedData - _deletedKeys;
 
+  E get first {
+    for (int offset = 0; offset < _usedData; offset++) {
+      Object current = _data[offset];
+      if (!_HashBase._isDeleted(_data, current)) {
+        return current;
+      }
+    }
+    throw IterableElementError.noElement();
+  }
+
+  E get last {
+    for (int offset = _usedData - 1; offset >= 0; offset--) {
+      Object current = _data[offset];
+      if (!_HashBase._isDeleted(_data, current)) {
+        return current;
+      }
+    }
+    throw IterableElementError.noElement();
+  }
+
   void _rehash() {
     if ((_deletedKeys << 1) > _usedData) {
       _init(_index.length, _hashMask, _data, _usedData);
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index 26d8f3d..6ee28f1 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -294,7 +294,7 @@
   bool get isPrivate => _n(simpleName).startsWith('_');
 
   Symbol get qualifiedName => _computeQualifiedName(owner, simpleName);
-  Symbol get constructorName => const Symbol('');
+  Symbol get constructorName => Symbol.empty;
 
   TypeMirror get returnType => _target.type;
   List<ParameterMirror> get parameters {
diff --git a/runtime/lib/object.cc b/runtime/lib/object.cc
index a64c3c6..a7c256b 100644
--- a/runtime/lib/object.cc
+++ b/runtime/lib/object.cc
@@ -112,11 +112,19 @@
     return Bool::True().raw();
   }
 
+  if (left.GetTypeArguments() == right.GetTypeArguments()) {
+    return Bool::True().raw();
+  }
   const TypeArguments& left_type_arguments =
       TypeArguments::Handle(left.GetTypeArguments());
   const TypeArguments& right_type_arguments =
       TypeArguments::Handle(right.GetTypeArguments());
-  return Bool::Get(left_type_arguments.Equals(right_type_arguments)).raw();
+  const intptr_t num_type_args = cls.NumTypeArguments();
+  const intptr_t num_type_params = cls.NumTypeParameters();
+  return Bool::Get(left_type_arguments.IsSubvectorEquivalent(
+                       right_type_arguments, num_type_args - num_type_params,
+                       num_type_params))
+      .raw();
 }
 
 DEFINE_NATIVE_ENTRY(Object_instanceOf, 4) {
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index 040f075..65d32b9 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -35,7 +35,6 @@
 # Tests with known analyzer issues
 [ $compiler == dart2analyzer ]
 developer_extension_test: SkipByDesign
-evaluate_activation_in_method_class_test: RuntimeError # Issue 24478, also, test is excluded in .analysis_options
 get_isolate_after_language_error_test: SkipByDesign
 
 # Kernel version of tests
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index baff3ed..0c37c31 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -123,3 +123,7 @@
 rewind_test: Pass, RuntimeError
 set_name_rpc_test: RuntimeError # Please triage.
 unused_changes_in_last_reload_test: Skip # Times out on sim architectures.
+
+[ $compiler == fasta && $strong ]
+add_breakpoint_rpc_test: CompileTimeError
+
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 16e041d..bf9dfa1 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -194,10 +194,6 @@
 cc/Debugger_SetBreakpointInPartOfLibrary: Crash
 cc/FunctionSourceFingerprint: Fail
 cc/GenerateSource: Skip # Cannot generate source from a kernel binary. 
-cc/IsolateReload_EnumDelete: Fail
-cc/IsolateReload_EnumReorderIdentical: Fail
-cc/IsolateReload_EnumToNotEnum: Skip
-cc/IsolateReload_NotEnumToEnum: Skip
 cc/IsolateReload_NotTypedefToTypedef: Fail
 cc/IsolateReload_TypedefToNotTypedef: Fail
 cc/Parser_AllocateVariables_CaptureLoopVar: Fail
@@ -246,7 +242,6 @@
 dart/spawn_shutdown_test: SkipSlow
 
 [ $compiler == dartk && $runtime == vm && $system == macos ]
-cc/IsolateReload_EnumDelete: Crash
 cc/IsolateReload_LibraryLookup: Fail, Crash
 cc/IsolateReload_TearOff_AddArguments: Fail
 cc/IsolateReload_TearOff_Instance_Equality: Fail
diff --git a/runtime/vm/atomic.h b/runtime/vm/atomic.h
index e4dd4ab..1d18a2c 100644
--- a/runtime/vm/atomic.h
+++ b/runtime/vm/atomic.h
@@ -43,6 +43,13 @@
   static T LoadRelaxed(T* ptr) {
     return *static_cast<volatile T*>(ptr);
   }
+
+  template <typename T>
+  static T* CompareAndSwapPointer(T** slot, T* old_value, T* new_value) {
+    return reinterpret_cast<T*>(AtomicOperations::CompareAndSwapWord(
+        reinterpret_cast<uword*>(slot), reinterpret_cast<uword>(old_value),
+        reinterpret_cast<uword>(new_value)));
+  }
 };
 
 }  // namespace dart
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 3c8a853..e8dde2e 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -4,6 +4,7 @@
 
 #include "vm/class_finalizer.h"
 
+#include "vm/compiler/jit/compiler.h"
 #include "vm/flags.h"
 #include "vm/hash_table.h"
 #include "vm/heap.h"
@@ -2719,27 +2720,21 @@
 void ClassFinalizer::AllocateEnumValues(const Class& enum_cls) {
   Thread* thread = Thread::Current();
   Zone* zone = thread->zone();
+
   const Field& index_field =
       Field::Handle(zone, enum_cls.LookupInstanceField(Symbols::Index()));
   ASSERT(!index_field.IsNull());
+
   const Field& name_field = Field::Handle(
       zone, enum_cls.LookupInstanceFieldAllowPrivate(Symbols::_name()));
   ASSERT(!name_field.IsNull());
-  const Field& values_field =
-      Field::Handle(zone, enum_cls.LookupStaticField(Symbols::Values()));
-  ASSERT(!values_field.IsNull());
-  ASSERT(Instance::Handle(zone, values_field.StaticValue()).IsArray());
-  Array& values_list =
-      Array::Handle(zone, Array::RawCast(values_field.StaticValue()));
-  const String& enum_name = String::Handle(enum_cls.ScrubbedName());
-  const String& name_prefix =
-      String::Handle(String::Concat(enum_name, Symbols::Dot()));
 
+  const String& enum_name = String::Handle(zone, enum_cls.ScrubbedName());
+
+  const Array& fields = Array::Handle(zone, enum_cls.fields());
   Field& field = Field::Handle(zone);
-  Instance& ordinal_value = Instance::Handle(zone);
   Instance& enum_value = Instance::Handle(zone);
-
-  String& enum_ident = String::Handle();
+  String& enum_ident = String::Handle(zone);
 
   enum_ident =
       Symbols::FromConcat(thread, Symbols::_DeletedEnumPrefix(), enum_name);
@@ -2750,44 +2745,70 @@
   enum_value = enum_value.CheckAndCanonicalize(thread, &error_msg);
   ASSERT(!enum_value.IsNull());
   ASSERT(enum_value.IsCanonical());
-  field = enum_cls.LookupStaticField(Symbols::_DeletedEnumSentinel());
-  ASSERT(!field.IsNull());
-  field.SetStaticValue(enum_value, true);
-  field.RecordStore(enum_value);
+  const Field& sentinel = Field::Handle(
+      zone, enum_cls.LookupStaticField(Symbols::_DeletedEnumSentinel()));
+  ASSERT(!sentinel.IsNull());
+  sentinel.SetStaticValue(enum_value, true);
+  sentinel.RecordStore(enum_value);
 
-  const Array& fields = Array::Handle(zone, enum_cls.fields());
-  for (intptr_t i = 0; i < fields.Length(); i++) {
-    field = Field::RawCast(fields.At(i));
-    if (!field.is_static()) continue;
-    ordinal_value = field.StaticValue();
-    // The static fields that need to be initialized with enum instances
-    // contain the smi value of the ordinal number, which was stored in
-    // the field by the parser. Other fields contain non-smi values.
-    if (!ordinal_value.IsSmi()) continue;
-    enum_ident = field.name();
-    // Construct the string returned by toString.
-    ASSERT(!enum_ident.IsNull());
-    // For the user-visible name of the enumeration value, we need to
-    // unmangle private names.
-    if (enum_ident.CharAt(0) == '_') {
-      enum_ident = String::ScrubName(enum_ident);
+  if (thread->isolate()->use_dart_frontend()) {
+    Object& result = Object::Handle(zone);
+    for (intptr_t i = 0; i < fields.Length(); i++) {
+      field = Field::RawCast(fields.At(i));
+      if (!field.is_static() || !field.is_const() ||
+          (sentinel.raw() == field.raw())) {
+        continue;
+      }
+      field.SetStaticValue(Object::transition_sentinel());
+      result = Compiler::EvaluateStaticInitializer(field);
+      ASSERT(!result.IsError());
+      field.SetStaticValue(Instance::Cast(result), true);
+      field.RecordStore(Instance::Cast(result));
     }
-    enum_ident = Symbols::FromConcat(thread, name_prefix, enum_ident);
-    enum_value = Instance::New(enum_cls, Heap::kOld);
-    enum_value.SetField(index_field, ordinal_value);
-    enum_value.SetField(name_field, enum_ident);
-    enum_value = enum_value.CheckAndCanonicalize(thread, &error_msg);
-    ASSERT(!enum_value.IsNull());
-    ASSERT(enum_value.IsCanonical());
-    field.SetStaticValue(enum_value, true);
-    field.RecordStore(enum_value);
-    intptr_t ord = Smi::Cast(ordinal_value).Value();
-    ASSERT(ord < values_list.Length());
-    values_list.SetAt(ord, enum_value);
+  } else {
+    const String& name_prefix =
+        String::Handle(String::Concat(enum_name, Symbols::Dot()));
+    Instance& ordinal_value = Instance::Handle(zone);
+    Array& values_list = Array::Handle(zone);
+    const Field& values_field =
+        Field::Handle(zone, enum_cls.LookupStaticField(Symbols::Values()));
+    ASSERT(!values_field.IsNull());
+    ASSERT(Instance::Handle(zone, values_field.StaticValue()).IsArray());
+    values_list = Array::RawCast(values_field.StaticValue());
+    const Array& fields = Array::Handle(zone, enum_cls.fields());
+    for (intptr_t i = 0; i < fields.Length(); i++) {
+      field = Field::RawCast(fields.At(i));
+      if (!field.is_static()) continue;
+      ordinal_value = field.StaticValue();
+      // The static fields that need to be initialized with enum instances
+      // contain the smi value of the ordinal number, which was stored in
+      // the field by the parser. Other fields contain non-smi values.
+      if (!ordinal_value.IsSmi()) continue;
+      enum_ident = field.name();
+      // Construct the string returned by toString.
+      ASSERT(!enum_ident.IsNull());
+      // For the user-visible name of the enumeration value, we need to
+      // unmangle private names.
+      if (enum_ident.CharAt(0) == '_') {
+        enum_ident = String::ScrubName(enum_ident);
+      }
+      enum_ident = Symbols::FromConcat(thread, name_prefix, enum_ident);
+      enum_value = Instance::New(enum_cls, Heap::kOld);
+      enum_value.SetField(index_field, ordinal_value);
+      enum_value.SetField(name_field, enum_ident);
+      enum_value = enum_value.CheckAndCanonicalize(thread, &error_msg);
+      ASSERT(!enum_value.IsNull());
+      ASSERT(enum_value.IsCanonical());
+      field.SetStaticValue(enum_value, true);
+      field.RecordStore(enum_value);
+      intptr_t ord = Smi::Cast(ordinal_value).Value();
+      ASSERT(ord < values_list.Length());
+      values_list.SetAt(ord, enum_value);
+    }
+    values_list.MakeImmutable();
+    values_list ^= values_list.CheckAndCanonicalize(thread, &error_msg);
+    ASSERT(!values_list.IsNull());
   }
-  values_list.MakeImmutable();
-  values_list ^= values_list.CheckAndCanonicalize(thread, &error_msg);
-  ASSERT(!values_list.IsNull());
 }
 
 bool ClassFinalizer::IsSuperCycleFree(const Class& cls) {
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index f1ec175..2b8015a 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -322,8 +322,8 @@
     case kEndPosition:
       end_position_ = builder_->ReadPosition();  // read end position.
       if (++next_read_ == field) return;
-    case kIsAbstract:
-      is_abstract_ = builder_->ReadBool();  // read is_abstract.
+    case kFlags:
+      flags_ = builder_->ReadFlags();  // read flags.
       if (++next_read_ == field) return;
     case kNameIndex:
       name_index_ = builder_->ReadStringReference();  // read name index.
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index aac0ad34..dda7bbd 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -388,7 +388,7 @@
     kCanonicalName,
     kPosition,
     kEndPosition,
-    kIsAbstract,
+    kFlags,
     kNameIndex,
     kSourceUriIndex,
     kAnnotations,
@@ -403,6 +403,11 @@
     kEnd,
   };
 
+  enum Flag {
+    kIsAbstract = 1,
+    kIsEnumClass = 2,
+  };
+
   explicit ClassHelper(StreamingFlowGraphBuilder* builder) {
     builder_ = builder;
     next_read_ = kStart;
@@ -417,14 +422,18 @@
   void SetNext(Field field) { next_read_ = field; }
   void SetJustRead(Field field) { next_read_ = field + 1; }
 
+  bool is_abstract() { return flags_ & Flag::kIsAbstract; }
+
+  bool is_enum_class() { return flags_ & Flag::kIsEnumClass; }
+
   NameIndex canonical_name_;
   TokenPosition position_;
   TokenPosition end_position_;
-  bool is_abstract_;
   StringIndex name_index_;
   intptr_t source_uri_index_;
   intptr_t annotation_count_;
   intptr_t procedure_count_;
+  uint8_t flags_;
 
  private:
   StreamingFlowGraphBuilder* builder_;
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 6b2e819..831115a 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -17,6 +17,7 @@
 #include "vm/reusable_handles.h"
 #include "vm/service_isolate.h"
 #include "vm/symbols.h"
+#include "vm/thread.h"
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
 namespace dart {
@@ -966,7 +967,7 @@
   class_helper->SetJustRead(ClassHelper::kImplementedClasses);
   klass->set_interfaces(interfaces);
 
-  if (class_helper->is_abstract_) klass->set_is_abstract();
+  if (class_helper->is_abstract()) klass->set_is_abstract();
 }
 
 // Workaround for http://dartbug.com/32087: currently Kernel front-end
@@ -1016,6 +1017,9 @@
   Class& klass = LookupClass(class_helper.canonical_name_);
   klass.set_kernel_offset(class_offset - correction_offset_);
 
+  class_helper.ReadUntilIncluding(ClassHelper::kFlags);
+  if (class_helper.is_enum_class()) klass.set_is_enum_class();
+
   // The class needs to have a script because all the functions in the class
   // will inherit it.  The predicate Function::IsOptimizable uses the absence of
   // a script to detect test functions that should not be optimized.
@@ -1070,7 +1074,6 @@
                                       ClassHelper* class_helper) {
   fields_.Clear();
   functions_.Clear();
-
   ActiveClassScope active_class_scope(&active_class_, &klass);
   if (library.raw() == Library::InternalLibrary() &&
       klass.Name() == Symbols::ClassID().raw()) {
@@ -1122,8 +1125,22 @@
       }
       fields_.Add(&field);
     }
-    klass.AddFields(fields_);
     class_helper->SetJustRead(ClassHelper::kFields);
+
+    if (I->use_dart_frontend() && klass.is_enum_class()) {
+      // Add static field 'const _deleted_enum_sentinel'.
+      // This field does not need to be of type E.
+      Field& deleted_enum_sentinel = Field::ZoneHandle(Z);
+      deleted_enum_sentinel = Field::New(
+          Symbols::_DeletedEnumSentinel(),
+          /* is_static = */ true,
+          /* is_final = */ true,
+          /* is_const = */ true,
+          /* is_reflectable = */ false, klass, Object::dynamic_type(),
+          TokenPosition::kNoSource, TokenPosition::kNoSource);
+      fields_.Add(&deleted_enum_sentinel);
+    }
+    klass.AddFields(fields_);
   }
 
   class_helper->ReadUntilExcluding(ClassHelper::kConstructors);
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index e03dcb1..f7113a6 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -17613,9 +17613,24 @@
     // Canonicalize the type arguments.
     TypeArguments& type_args = TypeArguments::Handle(zone, arguments());
     // In case the type is first canonicalized at runtime, its type argument
-    // vector may be longer than necessary. This is not an issue.
-    ASSERT(type_args.IsNull() ||
-           (type_args.Length() >= cls.NumTypeArguments()));
+    // vector may be longer than necessary. If so, reallocate a vector of the
+    // exact size to prevent multiple "canonical" types.
+    if (!type_args.IsNull()) {
+      const intptr_t num_type_args = cls.NumTypeArguments();
+      ASSERT(type_args.Length() >= num_type_args);
+      if (type_args.Length() > num_type_args) {
+        TypeArguments& new_type_args =
+            TypeArguments::Handle(zone, TypeArguments::New(num_type_args));
+        AbstractType& type_arg = AbstractType::Handle(zone);
+        for (intptr_t i = 0; i < num_type_args; i++) {
+          type_arg = type_args.TypeAt(i);
+          new_type_args.SetTypeAt(i, type_arg);
+        }
+        type_args = new_type_args.raw();
+        set_arguments(type_args);
+        SetHash(0);  // Flush cached hash value.
+      }
+    }
     type_args = type_args.Canonicalize(trail);
     if (IsCanonical()) {
       // Canonicalizing type_args canonicalized this type as a side effect.
diff --git a/runtime/vm/simulator_arm.cc b/runtime/vm/simulator_arm.cc
index f0264a6..ca885ea 100644
--- a/runtime/vm/simulator_arm.cc
+++ b/runtime/vm/simulator_arm.cc
@@ -747,11 +747,27 @@
   static Redirection* Get(uword external_function,
                           Simulator::CallKind call_kind,
                           int argument_count) {
-    Redirection* current;
-    for (current = list_; current != NULL; current = current->next_) {
+    MutexLocker ml(mutex_);
+
+    for (Redirection* current = list_; current != NULL;
+         current = current->next_) {
       if (current->external_function_ == external_function) return current;
     }
-    return new Redirection(external_function, call_kind, argument_count);
+
+    Redirection* redirection =
+        new Redirection(external_function, call_kind, argument_count);
+    redirection->next_ = list_;
+
+    // Use a memory fence to ensure all pending writes are written at the time
+    // of updating the list head, so the profiling thread always has a valid
+    // list to look at.
+    Redirection* old_head = list_;
+    Redirection* replaced_list_head =
+        AtomicOperations::CompareAndSwapPointer<Redirection>(&list_, old_head,
+                                                             redirection);
+    ASSERT(old_head == replaced_list_head);
+
+    return redirection;
   }
 
   static Redirection* FromSvcInstruction(Instr* svc_instruction) {
@@ -761,6 +777,10 @@
     return reinterpret_cast<Redirection*>(addr_of_redirection);
   }
 
+  // Please note that this function is called by the signal handler of the
+  // profiling thread.  It can therefore run at any point in time and is not
+  // allowed to hold any locks - which is precisely the reason why the list is
+  // prepend-only and a memory fence is used when writing the list head [list_]!
   static uword FunctionForRedirect(uword address_of_svc) {
     Redirection* current;
     for (current = list_; current != NULL; current = current->next_) {
@@ -778,18 +798,8 @@
       : external_function_(external_function),
         call_kind_(call_kind),
         argument_count_(argument_count),
-        svc_instruction_(Instr::kSimulatorRedirectInstruction) {
-    // Atomically prepend this element to the front of the global list.
-    // Note: Since elements are never removed, there is no ABA issue.
-    Redirection* list_head = list_;
-    do {
-      next_ = list_head;
-      list_head =
-          reinterpret_cast<Redirection*>(AtomicOperations::CompareAndSwapWord(
-              reinterpret_cast<uword*>(&list_), reinterpret_cast<uword>(next_),
-              reinterpret_cast<uword>(this)));
-    } while (list_head != next_);
-  }
+        svc_instruction_(Instr::kSimulatorRedirectInstruction),
+        next_(NULL) {}
 
   uword external_function_;
   Simulator::CallKind call_kind_;
@@ -797,9 +807,11 @@
   uint32_t svc_instruction_;
   Redirection* next_;
   static Redirection* list_;
+  static Mutex* mutex_;
 };
 
 Redirection* Redirection::list_ = NULL;
+Mutex* Redirection::mutex_ = new Mutex();
 
 uword Simulator::RedirectExternalReference(uword function,
                                            CallKind call_kind,
diff --git a/runtime/vm/simulator_arm64.cc b/runtime/vm/simulator_arm64.cc
index 4c9495a..eece8ad 100644
--- a/runtime/vm/simulator_arm64.cc
+++ b/runtime/vm/simulator_arm64.cc
@@ -784,11 +784,27 @@
   static Redirection* Get(uword external_function,
                           Simulator::CallKind call_kind,
                           int argument_count) {
-    Redirection* current;
-    for (current = list_; current != NULL; current = current->next_) {
+    MutexLocker ml(mutex_);
+
+    for (Redirection* current = list_; current != NULL;
+         current = current->next_) {
       if (current->external_function_ == external_function) return current;
     }
-    return new Redirection(external_function, call_kind, argument_count);
+
+    Redirection* redirection =
+        new Redirection(external_function, call_kind, argument_count);
+    redirection->next_ = list_;
+
+    // Use a memory fence to ensure all pending writes are written at the time
+    // of updating the list head, so the profiling thread always has a valid
+    // list to look at.
+    Redirection* old_head = list_;
+    Redirection* replaced_list_head =
+        AtomicOperations::CompareAndSwapPointer<Redirection>(&list_, old_head,
+                                                             redirection);
+    ASSERT(old_head == replaced_list_head);
+
+    return redirection;
   }
 
   static Redirection* FromHltInstruction(Instr* hlt_instruction) {
@@ -798,6 +814,10 @@
     return reinterpret_cast<Redirection*>(addr_of_redirection);
   }
 
+  // Please note that this function is called by the signal handler of the
+  // profiling thread.  It can therefore run at any point in time and is not
+  // allowed to hold any locks - which is precisely the reason why the list is
+  // prepend-only and a memory fence is used when writing the list head [list_]!
   static uword FunctionForRedirect(uword address_of_hlt) {
     Redirection* current;
     for (current = list_; current != NULL; current = current->next_) {
@@ -816,18 +836,7 @@
         call_kind_(call_kind),
         argument_count_(argument_count),
         hlt_instruction_(Instr::kSimulatorRedirectInstruction),
-        next_(list_) {
-    // Atomically prepend this element to the front of the global list.
-    // Note: Since elements are never removed, there is no ABA issue.
-    Redirection* list_head = list_;
-    do {
-      next_ = list_head;
-      list_head =
-          reinterpret_cast<Redirection*>(AtomicOperations::CompareAndSwapWord(
-              reinterpret_cast<uword*>(&list_), reinterpret_cast<uword>(next_),
-              reinterpret_cast<uword>(this)));
-    } while (list_head != next_);
-  }
+        next_(NULL) {}
 
   uword external_function_;
   Simulator::CallKind call_kind_;
@@ -835,9 +844,11 @@
   uint32_t hlt_instruction_;
   Redirection* next_;
   static Redirection* list_;
+  static Mutex* mutex_;
 };
 
 Redirection* Redirection::list_ = NULL;
+Mutex* Redirection::mutex_ = new Mutex();
 
 uword Simulator::RedirectExternalReference(uword function,
                                            CallKind call_kind,
diff --git a/sdk/lib/_internal/js_runtime/lib/js_mirrors.dart b/sdk/lib/_internal/js_runtime/lib/js_mirrors.dart
index db3605e..7aebc9e 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_mirrors.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_mirrors.dart
@@ -1602,7 +1602,7 @@
   bool get isPrivate => n(simpleName).startsWith('_');
 
   Symbol get qualifiedName => computeQualifiedName(owner, simpleName);
-  Symbol get constructorName => const Symbol('');
+  Symbol get constructorName => Symbol.empty;
 
   TypeMirror get returnType => _target.type;
   List<ParameterMirror> get parameters {
@@ -2462,10 +2462,10 @@
   Symbol get constructorName {
     // TODO(ahe): I believe it is more appropriate to throw an exception or
     // return null.
-    if (!isConstructor) return const Symbol('');
+    if (!isConstructor) return Symbol.empty;
     String name = n(simpleName);
     int index = name.indexOf('.');
-    if (index == -1) return const Symbol('');
+    if (index == -1) return Symbol.empty;
     return s(name.substring(index + 1));
   }
 
diff --git a/sdk/lib/async/zone.dart b/sdk/lib/async/zone.dart
index 4dac8c6..fa49808 100644
--- a/sdk/lib/async/zone.dart
+++ b/sdk/lib/async/zone.dart
@@ -284,7 +284,7 @@
    * desired behavior.
    */
   static const Zone root = _rootZone;
-  /** Deprecated, use [root] instead. */
+  @Deprecated("Use root instead")
   static const Zone ROOT = root;
 
   /** The currently running zone. */
diff --git a/sdk/lib/convert/ascii.dart b/sdk/lib/convert/ascii.dart
index 2639ca8..cd54517 100644
--- a/sdk/lib/convert/ascii.dart
+++ b/sdk/lib/convert/ascii.dart
@@ -17,7 +17,7 @@
  *                                 0x20, 0x41, 0x53, 0x43, 0x49, 0x49, 0x21]);
  */
 const AsciiCodec ascii = const AsciiCodec();
-/** Deprecated, use [ascii] instead. */
+@Deprecated("Use ascii instead")
 const AsciiCodec ASCII = ascii;
 
 const int _asciiMask = 0x7F;
diff --git a/sdk/lib/convert/base64.dart b/sdk/lib/convert/base64.dart
index b538aae..bbccf95 100644
--- a/sdk/lib/convert/base64.dart
+++ b/sdk/lib/convert/base64.dart
@@ -18,7 +18,7 @@
  *     var decoded = base64.decode("YmzDpWLDpnJncsO4ZAo=");
  */
 const Base64Codec base64 = const Base64Codec();
-/** Deprecated, use [base64] instead. */
+@Deprecated("Use base64 instead")
 const Base64Codec BASE64 = base64;
 
 /**
@@ -35,7 +35,7 @@
  *     var decoded = base64Url.decode("YmzDpWLDpnJncsO4ZAo=");
  */
 const Base64Codec base64Url = const Base64Codec.urlSafe();
-/** Deprecated, use [base64Url] instead. */
+@Deprecated("Use base64Url instead")
 const Base64Codec BASE64URL = base64Url;
 
 // Constants used in more than one class.
diff --git a/sdk/lib/convert/html_escape.dart b/sdk/lib/convert/html_escape.dart
index e7cb4ab..befde38 100644
--- a/sdk/lib/convert/html_escape.dart
+++ b/sdk/lib/convert/html_escape.dart
@@ -25,7 +25,7 @@
  * tag, but not inside a quoted attribute value, is still dangerous.
  */
 const HtmlEscape htmlEscape = const HtmlEscape();
-/** Deprecated, use [htmlEscape] instead. */
+@Deprecated("Use htmlEscape instead")
 const HtmlEscape HTML_ESCAPE = htmlEscape;
 
 /**
@@ -72,7 +72,7 @@
    */
   static const HtmlEscapeMode unknown =
       const HtmlEscapeMode._('unknown', true, true, true, true);
-  /** Deprecated, use [unknown] instead. */
+  @Deprecated("Use unknown instead")
   static const HtmlEscapeMode UNKNOWN = unknown;
 
   /**
@@ -87,7 +87,7 @@
    */
   static const HtmlEscapeMode attribute =
       const HtmlEscapeMode._('attribute', true, true, false, false);
-  /** Deprecated, use [attribute] instead. */
+  @Deprecated("Use attribute instead")
   static const HtmlEscapeMode ATTRIBUTE = attribute;
 
   /**
@@ -102,7 +102,7 @@
    */
   static const HtmlEscapeMode sqAttribute =
       const HtmlEscapeMode._('attribute', true, false, true, false);
-  /** Deprecated, use [sqAttribute] instead. */
+  @Deprecated("Use sqAttribute instead")
   static const HtmlEscapeMode SQ_ATTRIBUTE = sqAttribute;
 
   /**
@@ -116,7 +116,7 @@
    */
   static const HtmlEscapeMode element =
       const HtmlEscapeMode._('element', true, false, false, false);
-  /** Deprecated, use [element] instead. */
+  @Deprecated("Use element instead")
   static const HtmlEscapeMode ELEMENT = element;
 
   const HtmlEscapeMode._(this._name, this.escapeLtGt, this.escapeQuot,
diff --git a/sdk/lib/convert/json.dart b/sdk/lib/convert/json.dart
index bc50a00..b9095d1 100644
--- a/sdk/lib/convert/json.dart
+++ b/sdk/lib/convert/json.dart
@@ -66,7 +66,7 @@
  *     var decoded = json.decode('["foo", { "bar": 499 }]');
  */
 const JsonCodec json = const JsonCodec();
-/** Deprecated, use [json] instead. */
+@Deprecated("Use json instead")
 const JsonCodec JSON = json;
 
 typedef _Reviver(Object key, Object value);
diff --git a/sdk/lib/convert/latin1.dart b/sdk/lib/convert/latin1.dart
index af386ce..a2f8e8a 100644
--- a/sdk/lib/convert/latin1.dart
+++ b/sdk/lib/convert/latin1.dart
@@ -17,7 +17,7 @@
  *                                  0x72, 0x67, 0x72, 0xf8, 0x64]);
  */
 const Latin1Codec latin1 = const Latin1Codec();
-/** Deprecated, use [latin1] instead. */
+@Deprecated("Use latin1 instead")
 const Latin1Codec LATIN1 = latin1;
 
 const int _latin1Mask = 0xFF;
diff --git a/sdk/lib/convert/utf.dart b/sdk/lib/convert/utf.dart
index b5850a6..17bde46 100644
--- a/sdk/lib/convert/utf.dart
+++ b/sdk/lib/convert/utf.dart
@@ -6,12 +6,12 @@
 
 /** The Unicode Replacement character `U+FFFD` (�). */
 const int unicodeReplacementCharacterRune = 0xFFFD;
-/** Deprecated, use [unicodeReplacementCharacterRune] instead. */
+@Deprecated("Use unicodeReplacementCharacterRune instead")
 const int UNICODE_REPLACEMENT_CHARACTER_RUNE = unicodeReplacementCharacterRune;
 
 /** The Unicode Byte Order Marker (BOM) character `U+FEFF`. */
 const int unicodeBomCharacterRune = 0xFEFF;
-/** Deprecated, use [unicodeBomCharacterRune] instead. */
+@Deprecated("Use unicodeBomCharacterRune instead")
 const int UNICODE_BOM_CHARACTER_RUNE = unicodeBomCharacterRune;
 
 /**
@@ -27,7 +27,7 @@
  *                                0x72, 0x67, 0x72, 0xc3, 0xb8, 0x64]);
  */
 const Utf8Codec utf8 = const Utf8Codec();
-/** Deprecated, use [Utf8Codec] instead. */
+@Deprecated("Use Utf8Codec instead")
 const Utf8Codec UTF8 = utf8;
 
 /**
diff --git a/sdk/lib/core/annotations.dart b/sdk/lib/core/annotations.dart
index 3071723..c0234f5 100644
--- a/sdk/lib/core/annotations.dart
+++ b/sdk/lib/core/annotations.dart
@@ -214,3 +214,55 @@
  */
 @deprecated
 const Object proxy = const _Proxy();
+
+/**
+ * A hint to tools.
+ *
+ * Tools that work with Dart programs may accept hints to guide their behavior
+ * as `pragma` annotations on declarations.
+ * Each tool decides which hints it accepts, what they mean, and whether and
+ * how they apply to sub-parts of the annotated entity.
+ *
+ * Tools that recognize pragma hints should pick a pragma prefix to identify
+ * the tool. They should recognize any hint with a [name] starting with their
+ * prefix followed by `:` as if it was intended for that tool. A hint with a
+ * prefix for another tool should be ignored (unless compatibility with that
+ * other tool is a goal).
+ *
+ * A tool may recognize unprefixed names as well, if they would recognize that
+ * name with their own prefix in front.
+ *
+ * If the hint can be parameterized, an extra [options] object can be added as well.
+ *
+ * For example:
+ *
+ * ```dart
+ * @pragma('Tool:pragma-name', [param1, param2, ...])
+ * class Foo { }
+ *
+ * @pragma('OtherTool:other-pragma')
+ * void foo() { }
+ * ```
+ *
+ * Here class Foo is annotated with a Tool specific pragma 'pragma-name' and
+ * function foo is annotated with a pragma 'other-pragma' specific to OtherTool.
+ *
+ */
+class pragma {
+  /**
+   * The name of the hint.
+   *
+   * A string that is recognized by one or more tools, or such a string prefixed
+   * by a tool identifier and a colon, which is only recognized by that
+   * particular tool.
+   */
+  final String name;
+
+  /** Optional extra data parameterizing the hint. */
+  final Object options;
+
+  /** Creates a hint named [name] with optional [options]. */
+  const factory pragma(String name, [Object options]) = pragma._;
+
+  const pragma._(this.name, [this.options]);
+}
diff --git a/sdk/lib/core/date_time.dart b/sdk/lib/core/date_time.dart
index 33913b4..ccc850b 100644
--- a/sdk/lib/core/date_time.dart
+++ b/sdk/lib/core/date_time.dart
@@ -131,21 +131,21 @@
   static const int sunday = 7;
   static const int daysPerWeek = 7;
 
-  /** Deprecated, use [monday] instead. */
+  @Deprecated("Use monday instead")
   static const int MONDAY = monday;
-  /** Deprecated, use [tuesday] instead. */
+  @Deprecated("Use tuesday instead")
   static const int TUESDAY = tuesday;
-  /** Deprecated, use [wednesday] instead. */
+  @Deprecated("Use wednesday instead")
   static const int WEDNESDAY = wednesday;
-  /** Deprecated, use [thursday] instead. */
+  @Deprecated("Use thursday instead")
   static const int THURSDAY = thursday;
-  /** Deprecated, use [friday] instead. */
+  @Deprecated("Use friday instead")
   static const int FRIDAY = friday;
-  /** Deprecated, use [saturday] instead. */
+  @Deprecated("Use saturday instead")
   static const int SATURDAY = saturday;
-  /** Deprecated, use [sunday] instead. */
+  @Deprecated("Use sunday instead")
   static const int SUNDAY = sunday;
-  /** Deprecated, use [daysPerWeek] instead. */
+  @Deprecated("Use daysPerWeek instead")
   static const int DAYS_PER_WEEK = daysPerWeek;
 
   // Month constants that are returned by the [month] getter.
@@ -163,31 +163,31 @@
   static const int december = 12;
   static const int monthsPerYear = 12;
 
-  /** Deprecated, use [january] instead. */
+  @Deprecated("Use january instead")
   static const int JANUARY = january;
-  /** Deprecated, use [february] instead. */
+  @Deprecated("Use february instead")
   static const int FEBRUARY = february;
-  /** Deprecated, use [march] instead. */
+  @Deprecated("Use march instead")
   static const int MARCH = march;
-  /** Deprecated, use [april] instead. */
+  @Deprecated("Use april instead")
   static const int APRIL = april;
-  /** Deprecated, use [may] instead. */
+  @Deprecated("Use may instead")
   static const int MAY = may;
-  /** Deprecated, use [june] instead. */
+  @Deprecated("Use june instead")
   static const int JUNE = june;
-  /** Deprecated, use [july] instead. */
+  @Deprecated("Use july instead")
   static const int JULY = july;
-  /** Deprecated, use [august] instead. */
+  @Deprecated("Use august instead")
   static const int AUGUST = august;
-  /** Deprecated, use [september] instead. */
+  @Deprecated("Use september instead")
   static const int SEPTEMBER = september;
-  /** Deprecated, use [october] instead. */
+  @Deprecated("Use october instead")
   static const int OCTOBER = october;
-  /** Deprecated, use [november] instead. */
+  @Deprecated("Use november instead")
   static const int NOVEMBER = november;
-  /** Deprecated, use [december] instead. */
+  @Deprecated("Use december instead")
   static const int DECEMBER = december;
-  /** Deprecated, use [monthsPerYear] instead. */
+  @Deprecated("Use monthsPerYear instead")
   static const int MONTHS_PER_YEAR = monthsPerYear;
 
   /**
diff --git a/sdk/lib/core/double.dart b/sdk/lib/core/double.dart
index 2d62636..e10a99b 100644
--- a/sdk/lib/core/double.dart
+++ b/sdk/lib/core/double.dart
@@ -23,19 +23,19 @@
  * double.
  */
 abstract class double extends num {
-  /** Deprecated, use [nan] instead. */
+  @Deprecated("Use nan instead")
   static const double NAN = nan;
   static const double nan = 0.0 / 0.0;
-  /** Deprecated, use [infinity] instead. */
+  @Deprecated("Use infinity instead")
   static const double INFINITY = infinity;
   static const double infinity = 1.0 / 0.0;
-  /** Deprecated, use [negativeInfinity] instead. */
+  @Deprecated("Use negativeInfinity instead")
   static const double NEGATIVE_INFINITY = negativeInfinity;
   static const double negativeInfinity = -infinity;
-  /** Deprecated, use [minPositive] instead. */
+  @Deprecated("Use minPositive instead")
   static const double MIN_POSITIVE = minPositive;
   static const double minPositive = 5e-324;
-  /** Deprecated, use [maxFinite] instead. */
+  @Deprecated("Use maxFinite instead")
   static const double MAX_FINITE = maxFinite;
   static const double maxFinite = 1.7976931348623157e+308;
 
diff --git a/sdk/lib/core/duration.dart b/sdk/lib/core/duration.dart
index 92f7ede..393fa9d 100644
--- a/sdk/lib/core/duration.dart
+++ b/sdk/lib/core/duration.dart
@@ -76,37 +76,37 @@
 
   static const Duration zero = const Duration(seconds: 0);
 
-  /** Deprecated, use [microsecondsPerMillisecond] instead. */
+  @Deprecated("Use microsecondsPerMillisecond instead")
   static const int MICROSECONDS_PER_MILLISECOND = microsecondsPerMillisecond;
-  /** Deprecated, use [millisecondsPerSecond] instead. */
+  @Deprecated("Use millisecondsPerSecond instead")
   static const int MILLISECONDS_PER_SECOND = millisecondsPerSecond;
-  /** Deprecated, use [secondsPerMinute] instead. */
+  @Deprecated("Use secondsPerMinute instead")
   static const int SECONDS_PER_MINUTE = secondsPerMinute;
-  /** Deprecated, use [minutesPerHour] instead. */
+  @Deprecated("Use minutesPerHour instead")
   static const int MINUTES_PER_HOUR = minutesPerHour;
-  /** Deprecated, use [hoursPerDay] instead. */
+  @Deprecated("Use hoursPerDay instead")
   static const int HOURS_PER_DAY = hoursPerDay;
-  /** Deprecated, use [microsecondsPerSecond] instead. */
+  @Deprecated("Use microsecondsPerSecond instead")
   static const int MICROSECONDS_PER_SECOND = microsecondsPerSecond;
-  /** Deprecated, use [microsecondsPerMinute] instead. */
+  @Deprecated("Use microsecondsPerMinute instead")
   static const int MICROSECONDS_PER_MINUTE = microsecondsPerMinute;
-  /** Deprecated, use [microsecondsPerHour] instead. */
+  @Deprecated("Use microsecondsPerHour instead")
   static const int MICROSECONDS_PER_HOUR = microsecondsPerHour;
-  /** Deprecated, use [microsecondsPerDay] instead. */
+  @Deprecated("Use microsecondsPerDay instead")
   static const int MICROSECONDS_PER_DAY = microsecondsPerDay;
-  /** Deprecated, use [millisecondsPerMinute] instead. */
+  @Deprecated("Use millisecondsPerMinute instead")
   static const int MILLISECONDS_PER_MINUTE = millisecondsPerMinute;
-  /** Deprecated, use [millisecondsPerHour] instead. */
+  @Deprecated("Use millisecondsPerHour instead")
   static const int MILLISECONDS_PER_HOUR = millisecondsPerHour;
-  /** Deprecated, use [millisecondsPerDay] instead. */
+  @Deprecated("Use millisecondsPerDay instead")
   static const int MILLISECONDS_PER_DAY = millisecondsPerDay;
-  /** Deprecated, use [secondsPerHour] instead. */
+  @Deprecated("Use secondsPerHour instead")
   static const int SECONDS_PER_HOUR = secondsPerHour;
-  /** Deprecated, use [secondsPerDay] instead. */
+  @Deprecated("Use secondsPerDay instead")
   static const int SECONDS_PER_DAY = secondsPerDay;
-  /** Deprecated, use [minutesPerDay] instead. */
+  @Deprecated("Use minutesPerDay instead")
   static const int MINUTES_PER_DAY = minutesPerDay;
-  /** Deprecated, use [zero] instead. */
+  @Deprecated("Use zero instead")
   static const Duration ZERO = zero;
 
   /*
diff --git a/sdk/lib/core/invocation.dart b/sdk/lib/core/invocation.dart
index 9e32581..3cae040 100644
--- a/sdk/lib/core/invocation.dart
+++ b/sdk/lib/core/invocation.dart
@@ -12,22 +12,77 @@
  * on it.
  */
 abstract class Invocation {
+  Invocation();
+
+  /**
+   * Creates an invocation corresponding to a method invocation.
+   *
+   * The method invocation has no type arguments.
+   * If the named arguments are omitted, they default to no named arguments.
+   */
+  factory Invocation.method(
+          Symbol memberName, Iterable<Object> positionalArguments,
+          [Map<Symbol, Object> namedArguments]) =>
+      new _Invocation.method(
+          memberName, null, positionalArguments, namedArguments);
+
+  /**
+   * Creates an invocation corresponding to a generic method invocation.
+   *
+   * If [typeArguments] is `null` or empty, the constructor is equivalent to
+   * calling [Invocation.method] with the remaining arguments.
+   * All the individual type arguments must be non-null.
+   *
+   * If the named arguments are omitted, they default to no named arguments.
+   */
+  factory Invocation.genericMethod(Symbol memberName,
+          Iterable<Type> typeArguments, Iterable<Object> positionalArguments,
+          [Map<Symbol, Object> namedArguments]) =>
+      new _Invocation.method(
+          memberName, typeArguments, positionalArguments, namedArguments);
+
+  /**
+   * Creates an invocation corresponding to a getter invocation.
+   */
+  factory Invocation.getter(Symbol name) = _Invocation.getter;
+
+  /**
+   * Creates an invocation corresponding to a setter invocation.
+   *
+   * This constructor accepts any [Symbol] as [memberName], but remember that
+   * *actual setter names* end in `=`, so the invocation corresponding
+   * to `object.member = value` is
+   * ```dart
+   * Invocation.setter(const Symbol("member="), value)
+   * ```
+   */
+  factory Invocation.setter(Symbol memberName, Object argument) =
+      _Invocation.setter;
+
   /** The name of the invoked member. */
   Symbol get memberName;
 
   /**
+   * An unmodifiable view of the type arguments of the call.
+   *
+   * If the member is a getter, setter or operator,
+   * the type argument list is always empty.
+   */
+  List<Type> get typeArguments => const <Type>[];
+
+  /**
    * An unmodifiable view of the positional arguments of the call.
    *
    * If the member is a getter, the positional arguments list is
-   * empty.
+   * always empty.
    */
-  List get positionalArguments;
+  List<dynamic> get positionalArguments;
 
   /**
    * An unmodifiable view of the named arguments of the call.
    *
-   * If the member is a getter, setter or operator, the named
-   * arguments map is empty.
+   * If the member is a getter, setter or operator,
+   * the named arguments map is always empty.
    */
   Map<Symbol, dynamic> get namedArguments;
 
@@ -52,3 +107,57 @@
   /** Whether the invocation was a getter or a setter call. */
   bool get isAccessor => isGetter || isSetter;
 }
+
+/** Implementation of [Invocation] used by its factory constructors. */
+class _Invocation implements Invocation {
+  final Symbol memberName;
+  final List<Type> typeArguments;
+  // Positional arguments is `null` for getters only.
+  final List<Object> _positional;
+  // Named arguments is `null` for accessors only.
+  final Map<Symbol, Object> _named;
+
+  _Invocation.method(this.memberName, Iterable<Type> types,
+      Iterable<Object> positional, Map<Symbol, Object> named)
+      : typeArguments = _ensureNonNullTypes(_makeUnmodifiable<Type>(types)),
+        _positional = _makeUnmodifiable<Object>(positional) ?? const <Object>[],
+        _named = (named == null || named.isEmpty)
+            ? const <Symbol, Object>{}
+            : new Map<Symbol, Object>.unmodifiable(named);
+
+  _Invocation.getter(this.memberName)
+      : typeArguments = const <Type>[],
+        _positional = null,
+        _named = null;
+
+  _Invocation.setter(this.memberName, Object argument)
+      : typeArguments = const <Type>[],
+        _positional = new List<Object>.unmodifiable([argument]),
+        _named = null;
+
+  List<dynamic> get positionalArguments => _positional ?? const <Object>[];
+
+  Map<Symbol, dynamic> get namedArguments => _named ?? const <Symbol, Object>{};
+
+  bool get isMethod => _named != null;
+  bool get isGetter => _positional == null;
+  bool get isSetter => _positional != null && _named == null;
+  bool get isAccessor => _named == null;
+
+  /// Checks that the elements of [types] are not null.
+  static List<Type> _ensureNonNullTypes(List<Type> types) {
+    if (types == null) return const <Type>[];
+    for (int i = 0; i < types.length; i++) {
+      if (types[i] == null) {
+        throw new ArgumentError(
+            "Type arguments must be non-null, was null at index $i.");
+      }
+    }
+    return types;
+  }
+
+  static List<T> _makeUnmodifiable<T>(Iterable<T> elements) {
+    if (elements == null) return null;
+    return new List<T>.unmodifiable(elements);
+  }
+}
diff --git a/sdk/lib/core/symbol.dart b/sdk/lib/core/symbol.dart
index e399d9c..ac0fc65 100644
--- a/sdk/lib/core/symbol.dart
+++ b/sdk/lib/core/symbol.dart
@@ -6,6 +6,17 @@
 
 /// Opaque name used by mirrors, invocations and [Function.apply].
 abstract class Symbol {
+  /** The symbol corresponding to the name of the unary minus operator. */
+  static const Symbol unaryMinus = const Symbol("unary-");
+
+  /**
+   * The empty symbol.
+   *
+   * The empty symbol is the name of libraries with no library declaration,
+   * and the base-name of the unnamed constructor.
+   */
+  static const Symbol empty = const Symbol("");
+
   /**
    * Constructs a new Symbol.
    *
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index bcc4df5..5fec1c0 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -68,11 +68,11 @@
 class Isolate {
   /** Argument to `ping` and `kill`: Ask for immediate action. */
   static const int immediate = 0;
-  /** Deprecated. Use [immediate] instead. */
+  @Deprecated("Use immediate instead")
   static const int IMMEDIATE = immediate;
   /** Argument to `ping` and `kill`: Ask for action before the next event. */
   static const int beforeNextEvent = 1;
-  /** Deprecated. Use [beforeNextEvent] instead. */
+  @Deprecated("Use beforeNextEvent instead")
   static const int BEFORE_NEXT_EVENT = beforeNextEvent;
 
   /**
diff --git a/sdk/lib/math/math.dart b/sdk/lib/math/math.dart
index 68cad30..8e0a30f 100644
--- a/sdk/lib/math/math.dart
+++ b/sdk/lib/math/math.dart
@@ -66,21 +66,21 @@
  */
 const double sqrt2 = 1.4142135623730951;
 
-/** Deprecated, use [e] instead. */
+@Deprecated("Use e instead")
 const double E = e;
-/** Deprecated, use [ln10] instead. */
+@Deprecated("Use ln10 instead")
 const double LN10 = ln10;
-/** Deprecated, use [ln2] instead. */
+@Deprecated("Use ln2 instead")
 const double LN2 = ln2;
-/** Deprecated, use [log2e] instead. */
+@Deprecated("Use log2e instead")
 const double LOG2E = log2e;
-/** Deprecated, use [log10e] instead. */
+@Deprecated("Use log10e instead")
 const double LOG10E = log10e;
-/** Deprecated, use [pi] instead. */
+@Deprecated("Use pi instead")
 const double PI = pi;
-/** Deprecated, use [sqrt1_2] instead. */
+@Deprecated("Use sqrt1_2 instead")
 const double SQRT1_2 = sqrt1_2;
-/** Deprecated, use [sqrt2] instead. */
+@Deprecated("Use sqrt2 instead")
 const double SQRT2 = sqrt2;
 
 /**
diff --git a/sdk/lib/typed_data/typed_data.dart b/sdk/lib/typed_data/typed_data.dart
index 9c20289..d4a1e0e 100644
--- a/sdk/lib/typed_data/typed_data.dart
+++ b/sdk/lib/typed_data/typed_data.dart
@@ -412,7 +412,7 @@
 }
 
 // TODO(lrn): Remove class for Dart 2.0.
-/** Deprecated, use [Endian] instead. */
+@Deprecated("Use Endian instead")
 abstract class Endianness {
   Endianness._(); // prevent construction.
   /** Deprecated, use [Endian.big] instead. */
@@ -781,7 +781,7 @@
     return buffer.asInt8List(offsetInBytes, length);
   }
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 1;
 }
@@ -840,7 +840,7 @@
    */
   List<int> operator +(List<int> other);
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 1;
 }
@@ -891,7 +891,7 @@
     return buffer.asUint8ClampedList(offsetInBytes, length);
   }
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 1;
 }
@@ -945,7 +945,7 @@
     return buffer.asInt16List(offsetInBytes, length);
   }
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 2;
 }
@@ -1000,7 +1000,7 @@
     return buffer.asUint16List(offsetInBytes, length);
   }
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 2;
 }
@@ -1054,7 +1054,7 @@
     return buffer.asInt32List(offsetInBytes, length);
   }
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 4;
 }
@@ -1109,7 +1109,7 @@
     return buffer.asUint32List(offsetInBytes, length);
   }
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 4;
 }
@@ -1163,7 +1163,7 @@
     return buffer.asInt64List(offsetInBytes, length);
   }
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 8;
 }
@@ -1218,7 +1218,7 @@
     return buffer.asUint64List(offsetInBytes, length);
   }
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 8;
 }
@@ -1273,7 +1273,7 @@
     return buffer.asFloat32List(offsetInBytes, length);
   }
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 4;
 }
@@ -1321,7 +1321,7 @@
     return buffer.asFloat64List(offsetInBytes, length);
   }
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 8;
 }
@@ -1376,7 +1376,7 @@
    */
   List<Float32x4> operator +(List<Float32x4> other);
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 16;
 }
@@ -1431,7 +1431,7 @@
    */
   List<Int32x4> operator +(List<Int32x4> other);
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 16;
 }
@@ -1486,7 +1486,7 @@
     return buffer.asFloat64x2List(offsetInBytes, length);
   }
 
-  /** Deprecated, use [bytesPerElement] instead. */
+  @Deprecated("Use bytesPerElement instead")
   static const int BYTES_PER_ELEMENT = bytesPerElement;
   static const int bytesPerElement = 16;
 }
@@ -1826,517 +1826,517 @@
   static const int wwwy = 0x7F;
   static const int wwwz = 0xBF;
   static const int wwww = 0xFF;
-  /** Deprecated, use [xxxx] instead. */
+  @Deprecated("Use xxxx instead")
   static const int XXXX = xxxx;
-  /** Deprecated, use [xxxy] instead. */
+  @Deprecated("Use xxxy instead")
   static const int XXXY = xxxy;
-  /** Deprecated, use [xxxz] instead. */
+  @Deprecated("Use xxxz instead")
   static const int XXXZ = xxxz;
-  /** Deprecated, use [xxxw] instead. */
+  @Deprecated("Use xxxw instead")
   static const int XXXW = xxxw;
-  /** Deprecated, use [xxyx] instead. */
+  @Deprecated("Use xxyx instead")
   static const int XXYX = xxyx;
-  /** Deprecated, use [xxyy] instead. */
+  @Deprecated("Use xxyy instead")
   static const int XXYY = xxyy;
-  /** Deprecated, use [xxyz] instead. */
+  @Deprecated("Use xxyz instead")
   static const int XXYZ = xxyz;
-  /** Deprecated, use [xxyw] instead. */
+  @Deprecated("Use xxyw instead")
   static const int XXYW = xxyw;
-  /** Deprecated, use [xxzx] instead. */
+  @Deprecated("Use xxzx instead")
   static const int XXZX = xxzx;
-  /** Deprecated, use [xxzy] instead. */
+  @Deprecated("Use xxzy instead")
   static const int XXZY = xxzy;
-  /** Deprecated, use [xxzz] instead. */
+  @Deprecated("Use xxzz instead")
   static const int XXZZ = xxzz;
-  /** Deprecated, use [xxzw] instead. */
+  @Deprecated("Use xxzw instead")
   static const int XXZW = xxzw;
-  /** Deprecated, use [xxwx] instead. */
+  @Deprecated("Use xxwx instead")
   static const int XXWX = xxwx;
-  /** Deprecated, use [xxwy] instead. */
+  @Deprecated("Use xxwy instead")
   static const int XXWY = xxwy;
-  /** Deprecated, use [xxwz] instead. */
+  @Deprecated("Use xxwz instead")
   static const int XXWZ = xxwz;
-  /** Deprecated, use [xxww] instead. */
+  @Deprecated("Use xxww instead")
   static const int XXWW = xxww;
-  /** Deprecated, use [xyxx] instead. */
+  @Deprecated("Use xyxx instead")
   static const int XYXX = xyxx;
-  /** Deprecated, use [xyxy] instead. */
+  @Deprecated("Use xyxy instead")
   static const int XYXY = xyxy;
-  /** Deprecated, use [xyxz] instead. */
+  @Deprecated("Use xyxz instead")
   static const int XYXZ = xyxz;
-  /** Deprecated, use [xyxw] instead. */
+  @Deprecated("Use xyxw instead")
   static const int XYXW = xyxw;
-  /** Deprecated, use [xyyx] instead. */
+  @Deprecated("Use xyyx instead")
   static const int XYYX = xyyx;
-  /** Deprecated, use [xyyy] instead. */
+  @Deprecated("Use xyyy instead")
   static const int XYYY = xyyy;
-  /** Deprecated, use [xyyz] instead. */
+  @Deprecated("Use xyyz instead")
   static const int XYYZ = xyyz;
-  /** Deprecated, use [xyyw] instead. */
+  @Deprecated("Use xyyw instead")
   static const int XYYW = xyyw;
-  /** Deprecated, use [xyzx] instead. */
+  @Deprecated("Use xyzx instead")
   static const int XYZX = xyzx;
-  /** Deprecated, use [xyzy] instead. */
+  @Deprecated("Use xyzy instead")
   static const int XYZY = xyzy;
-  /** Deprecated, use [xyzz] instead. */
+  @Deprecated("Use xyzz instead")
   static const int XYZZ = xyzz;
-  /** Deprecated, use [xyzw] instead. */
+  @Deprecated("Use xyzw instead")
   static const int XYZW = xyzw;
-  /** Deprecated, use [xywx] instead. */
+  @Deprecated("Use xywx instead")
   static const int XYWX = xywx;
-  /** Deprecated, use [xywy] instead. */
+  @Deprecated("Use xywy instead")
   static const int XYWY = xywy;
-  /** Deprecated, use [xywz] instead. */
+  @Deprecated("Use xywz instead")
   static const int XYWZ = xywz;
-  /** Deprecated, use [xyww] instead. */
+  @Deprecated("Use xyww instead")
   static const int XYWW = xyww;
-  /** Deprecated, use [xzxx] instead. */
+  @Deprecated("Use xzxx instead")
   static const int XZXX = xzxx;
-  /** Deprecated, use [xzxy] instead. */
+  @Deprecated("Use xzxy instead")
   static const int XZXY = xzxy;
-  /** Deprecated, use [xzxz] instead. */
+  @Deprecated("Use xzxz instead")
   static const int XZXZ = xzxz;
-  /** Deprecated, use [xzxw] instead. */
+  @Deprecated("Use xzxw instead")
   static const int XZXW = xzxw;
-  /** Deprecated, use [xzyx] instead. */
+  @Deprecated("Use xzyx instead")
   static const int XZYX = xzyx;
-  /** Deprecated, use [xzyy] instead. */
+  @Deprecated("Use xzyy instead")
   static const int XZYY = xzyy;
-  /** Deprecated, use [xzyz] instead. */
+  @Deprecated("Use xzyz instead")
   static const int XZYZ = xzyz;
-  /** Deprecated, use [xzyw] instead. */
+  @Deprecated("Use xzyw instead")
   static const int XZYW = xzyw;
-  /** Deprecated, use [xzzx] instead. */
+  @Deprecated("Use xzzx instead")
   static const int XZZX = xzzx;
-  /** Deprecated, use [xzzy] instead. */
+  @Deprecated("Use xzzy instead")
   static const int XZZY = xzzy;
-  /** Deprecated, use [xzzz] instead. */
+  @Deprecated("Use xzzz instead")
   static const int XZZZ = xzzz;
-  /** Deprecated, use [xzzw] instead. */
+  @Deprecated("Use xzzw instead")
   static const int XZZW = xzzw;
-  /** Deprecated, use [xzwx] instead. */
+  @Deprecated("Use xzwx instead")
   static const int XZWX = xzwx;
-  /** Deprecated, use [xzwy] instead. */
+  @Deprecated("Use xzwy instead")
   static const int XZWY = xzwy;
-  /** Deprecated, use [xzwz] instead. */
+  @Deprecated("Use xzwz instead")
   static const int XZWZ = xzwz;
-  /** Deprecated, use [xzww] instead. */
+  @Deprecated("Use xzww instead")
   static const int XZWW = xzww;
-  /** Deprecated, use [xwxx] instead. */
+  @Deprecated("Use xwxx instead")
   static const int XWXX = xwxx;
-  /** Deprecated, use [xwxy] instead. */
+  @Deprecated("Use xwxy instead")
   static const int XWXY = xwxy;
-  /** Deprecated, use [xwxz] instead. */
+  @Deprecated("Use xwxz instead")
   static const int XWXZ = xwxz;
-  /** Deprecated, use [xwxw] instead. */
+  @Deprecated("Use xwxw instead")
   static const int XWXW = xwxw;
-  /** Deprecated, use [xwyx] instead. */
+  @Deprecated("Use xwyx instead")
   static const int XWYX = xwyx;
-  /** Deprecated, use [xwyy] instead. */
+  @Deprecated("Use xwyy instead")
   static const int XWYY = xwyy;
-  /** Deprecated, use [xwyz] instead. */
+  @Deprecated("Use xwyz instead")
   static const int XWYZ = xwyz;
-  /** Deprecated, use [xwyw] instead. */
+  @Deprecated("Use xwyw instead")
   static const int XWYW = xwyw;
-  /** Deprecated, use [xwzx] instead. */
+  @Deprecated("Use xwzx instead")
   static const int XWZX = xwzx;
-  /** Deprecated, use [xwzy] instead. */
+  @Deprecated("Use xwzy instead")
   static const int XWZY = xwzy;
-  /** Deprecated, use [xwzz] instead. */
+  @Deprecated("Use xwzz instead")
   static const int XWZZ = xwzz;
-  /** Deprecated, use [xwzw] instead. */
+  @Deprecated("Use xwzw instead")
   static const int XWZW = xwzw;
-  /** Deprecated, use [xwwx] instead. */
+  @Deprecated("Use xwwx instead")
   static const int XWWX = xwwx;
-  /** Deprecated, use [xwwy] instead. */
+  @Deprecated("Use xwwy instead")
   static const int XWWY = xwwy;
-  /** Deprecated, use [xwwz] instead. */
+  @Deprecated("Use xwwz instead")
   static const int XWWZ = xwwz;
-  /** Deprecated, use [xwww] instead. */
+  @Deprecated("Use xwww instead")
   static const int XWWW = xwww;
-  /** Deprecated, use [yxxx] instead. */
+  @Deprecated("Use yxxx instead")
   static const int YXXX = yxxx;
-  /** Deprecated, use [yxxy] instead. */
+  @Deprecated("Use yxxy instead")
   static const int YXXY = yxxy;
-  /** Deprecated, use [yxxz] instead. */
+  @Deprecated("Use yxxz instead")
   static const int YXXZ = yxxz;
-  /** Deprecated, use [yxxw] instead. */
+  @Deprecated("Use yxxw instead")
   static const int YXXW = yxxw;
-  /** Deprecated, use [yxyx] instead. */
+  @Deprecated("Use yxyx instead")
   static const int YXYX = yxyx;
-  /** Deprecated, use [yxyy] instead. */
+  @Deprecated("Use yxyy instead")
   static const int YXYY = yxyy;
-  /** Deprecated, use [yxyz] instead. */
+  @Deprecated("Use yxyz instead")
   static const int YXYZ = yxyz;
-  /** Deprecated, use [yxyw] instead. */
+  @Deprecated("Use yxyw instead")
   static const int YXYW = yxyw;
-  /** Deprecated, use [yxzx] instead. */
+  @Deprecated("Use yxzx instead")
   static const int YXZX = yxzx;
-  /** Deprecated, use [yxzy] instead. */
+  @Deprecated("Use yxzy instead")
   static const int YXZY = yxzy;
-  /** Deprecated, use [yxzz] instead. */
+  @Deprecated("Use yxzz instead")
   static const int YXZZ = yxzz;
-  /** Deprecated, use [yxzw] instead. */
+  @Deprecated("Use yxzw instead")
   static const int YXZW = yxzw;
-  /** Deprecated, use [yxwx] instead. */
+  @Deprecated("Use yxwx instead")
   static const int YXWX = yxwx;
-  /** Deprecated, use [yxwy] instead. */
+  @Deprecated("Use yxwy instead")
   static const int YXWY = yxwy;
-  /** Deprecated, use [yxwz] instead. */
+  @Deprecated("Use yxwz instead")
   static const int YXWZ = yxwz;
-  /** Deprecated, use [yxww] instead. */
+  @Deprecated("Use yxww instead")
   static const int YXWW = yxww;
-  /** Deprecated, use [yyxx] instead. */
+  @Deprecated("Use yyxx instead")
   static const int YYXX = yyxx;
-  /** Deprecated, use [yyxy] instead. */
+  @Deprecated("Use yyxy instead")
   static const int YYXY = yyxy;
-  /** Deprecated, use [yyxz] instead. */
+  @Deprecated("Use yyxz instead")
   static const int YYXZ = yyxz;
-  /** Deprecated, use [yyxw] instead. */
+  @Deprecated("Use yyxw instead")
   static const int YYXW = yyxw;
-  /** Deprecated, use [yyyx] instead. */
+  @Deprecated("Use yyyx instead")
   static const int YYYX = yyyx;
-  /** Deprecated, use [yyyy] instead. */
+  @Deprecated("Use yyyy instead")
   static const int YYYY = yyyy;
-  /** Deprecated, use [yyyz] instead. */
+  @Deprecated("Use yyyz instead")
   static const int YYYZ = yyyz;
-  /** Deprecated, use [yyyw] instead. */
+  @Deprecated("Use yyyw instead")
   static const int YYYW = yyyw;
-  /** Deprecated, use [yyzx] instead. */
+  @Deprecated("Use yyzx instead")
   static const int YYZX = yyzx;
-  /** Deprecated, use [yyzy] instead. */
+  @Deprecated("Use yyzy instead")
   static const int YYZY = yyzy;
-  /** Deprecated, use [yyzz] instead. */
+  @Deprecated("Use yyzz instead")
   static const int YYZZ = yyzz;
-  /** Deprecated, use [yyzw] instead. */
+  @Deprecated("Use yyzw instead")
   static const int YYZW = yyzw;
-  /** Deprecated, use [yywx] instead. */
+  @Deprecated("Use yywx instead")
   static const int YYWX = yywx;
-  /** Deprecated, use [yywy] instead. */
+  @Deprecated("Use yywy instead")
   static const int YYWY = yywy;
-  /** Deprecated, use [yywz] instead. */
+  @Deprecated("Use yywz instead")
   static const int YYWZ = yywz;
-  /** Deprecated, use [yyww] instead. */
+  @Deprecated("Use yyww instead")
   static const int YYWW = yyww;
-  /** Deprecated, use [yzxx] instead. */
+  @Deprecated("Use yzxx instead")
   static const int YZXX = yzxx;
-  /** Deprecated, use [yzxy] instead. */
+  @Deprecated("Use yzxy instead")
   static const int YZXY = yzxy;
-  /** Deprecated, use [yzxz] instead. */
+  @Deprecated("Use yzxz instead")
   static const int YZXZ = yzxz;
-  /** Deprecated, use [yzxw] instead. */
+  @Deprecated("Use yzxw instead")
   static const int YZXW = yzxw;
-  /** Deprecated, use [yzyx] instead. */
+  @Deprecated("Use yzyx instead")
   static const int YZYX = yzyx;
-  /** Deprecated, use [yzyy] instead. */
+  @Deprecated("Use yzyy instead")
   static const int YZYY = yzyy;
-  /** Deprecated, use [yzyz] instead. */
+  @Deprecated("Use yzyz instead")
   static const int YZYZ = yzyz;
-  /** Deprecated, use [yzyw] instead. */
+  @Deprecated("Use yzyw instead")
   static const int YZYW = yzyw;
-  /** Deprecated, use [yzzx] instead. */
+  @Deprecated("Use yzzx instead")
   static const int YZZX = yzzx;
-  /** Deprecated, use [yzzy] instead. */
+  @Deprecated("Use yzzy instead")
   static const int YZZY = yzzy;
-  /** Deprecated, use [yzzz] instead. */
+  @Deprecated("Use yzzz instead")
   static const int YZZZ = yzzz;
-  /** Deprecated, use [yzzw] instead. */
+  @Deprecated("Use yzzw instead")
   static const int YZZW = yzzw;
-  /** Deprecated, use [yzwx] instead. */
+  @Deprecated("Use yzwx instead")
   static const int YZWX = yzwx;
-  /** Deprecated, use [yzwy] instead. */
+  @Deprecated("Use yzwy instead")
   static const int YZWY = yzwy;
-  /** Deprecated, use [yzwz] instead. */
+  @Deprecated("Use yzwz instead")
   static const int YZWZ = yzwz;
-  /** Deprecated, use [yzww] instead. */
+  @Deprecated("Use yzww instead")
   static const int YZWW = yzww;
-  /** Deprecated, use [ywxx] instead. */
+  @Deprecated("Use ywxx instead")
   static const int YWXX = ywxx;
-  /** Deprecated, use [ywxy] instead. */
+  @Deprecated("Use ywxy instead")
   static const int YWXY = ywxy;
-  /** Deprecated, use [ywxz] instead. */
+  @Deprecated("Use ywxz instead")
   static const int YWXZ = ywxz;
-  /** Deprecated, use [ywxw] instead. */
+  @Deprecated("Use ywxw instead")
   static const int YWXW = ywxw;
-  /** Deprecated, use [ywyx] instead. */
+  @Deprecated("Use ywyx instead")
   static const int YWYX = ywyx;
-  /** Deprecated, use [ywyy] instead. */
+  @Deprecated("Use ywyy instead")
   static const int YWYY = ywyy;
-  /** Deprecated, use [ywyz] instead. */
+  @Deprecated("Use ywyz instead")
   static const int YWYZ = ywyz;
-  /** Deprecated, use [ywyw] instead. */
+  @Deprecated("Use ywyw instead")
   static const int YWYW = ywyw;
-  /** Deprecated, use [ywzx] instead. */
+  @Deprecated("Use ywzx instead")
   static const int YWZX = ywzx;
-  /** Deprecated, use [ywzy] instead. */
+  @Deprecated("Use ywzy instead")
   static const int YWZY = ywzy;
-  /** Deprecated, use [ywzz] instead. */
+  @Deprecated("Use ywzz instead")
   static const int YWZZ = ywzz;
-  /** Deprecated, use [ywzw] instead. */
+  @Deprecated("Use ywzw instead")
   static const int YWZW = ywzw;
-  /** Deprecated, use [ywwx] instead. */
+  @Deprecated("Use ywwx instead")
   static const int YWWX = ywwx;
-  /** Deprecated, use [ywwy] instead. */
+  @Deprecated("Use ywwy instead")
   static const int YWWY = ywwy;
-  /** Deprecated, use [ywwz] instead. */
+  @Deprecated("Use ywwz instead")
   static const int YWWZ = ywwz;
-  /** Deprecated, use [ywww] instead. */
+  @Deprecated("Use ywww instead")
   static const int YWWW = ywww;
-  /** Deprecated, use [zxxx] instead. */
+  @Deprecated("Use zxxx instead")
   static const int ZXXX = zxxx;
-  /** Deprecated, use [zxxy] instead. */
+  @Deprecated("Use zxxy instead")
   static const int ZXXY = zxxy;
-  /** Deprecated, use [zxxz] instead. */
+  @Deprecated("Use zxxz instead")
   static const int ZXXZ = zxxz;
-  /** Deprecated, use [zxxw] instead. */
+  @Deprecated("Use zxxw instead")
   static const int ZXXW = zxxw;
-  /** Deprecated, use [zxyx] instead. */
+  @Deprecated("Use zxyx instead")
   static const int ZXYX = zxyx;
-  /** Deprecated, use [zxyy] instead. */
+  @Deprecated("Use zxyy instead")
   static const int ZXYY = zxyy;
-  /** Deprecated, use [zxyz] instead. */
+  @Deprecated("Use zxyz instead")
   static const int ZXYZ = zxyz;
-  /** Deprecated, use [zxyw] instead. */
+  @Deprecated("Use zxyw instead")
   static const int ZXYW = zxyw;
-  /** Deprecated, use [zxzx] instead. */
+  @Deprecated("Use zxzx instead")
   static const int ZXZX = zxzx;
-  /** Deprecated, use [zxzy] instead. */
+  @Deprecated("Use zxzy instead")
   static const int ZXZY = zxzy;
-  /** Deprecated, use [zxzz] instead. */
+  @Deprecated("Use zxzz instead")
   static const int ZXZZ = zxzz;
-  /** Deprecated, use [zxzw] instead. */
+  @Deprecated("Use zxzw instead")
   static const int ZXZW = zxzw;
-  /** Deprecated, use [zxwx] instead. */
+  @Deprecated("Use zxwx instead")
   static const int ZXWX = zxwx;
-  /** Deprecated, use [zxwy] instead. */
+  @Deprecated("Use zxwy instead")
   static const int ZXWY = zxwy;
-  /** Deprecated, use [zxwz] instead. */
+  @Deprecated("Use zxwz instead")
   static const int ZXWZ = zxwz;
-  /** Deprecated, use [zxww] instead. */
+  @Deprecated("Use zxww instead")
   static const int ZXWW = zxww;
-  /** Deprecated, use [zyxx] instead. */
+  @Deprecated("Use zyxx instead")
   static const int ZYXX = zyxx;
-  /** Deprecated, use [zyxy] instead. */
+  @Deprecated("Use zyxy instead")
   static const int ZYXY = zyxy;
-  /** Deprecated, use [zyxz] instead. */
+  @Deprecated("Use zyxz instead")
   static const int ZYXZ = zyxz;
-  /** Deprecated, use [zyxw] instead. */
+  @Deprecated("Use zyxw instead")
   static const int ZYXW = zyxw;
-  /** Deprecated, use [zyyx] instead. */
+  @Deprecated("Use zyyx instead")
   static const int ZYYX = zyyx;
-  /** Deprecated, use [zyyy] instead. */
+  @Deprecated("Use zyyy instead")
   static const int ZYYY = zyyy;
-  /** Deprecated, use [zyyz] instead. */
+  @Deprecated("Use zyyz instead")
   static const int ZYYZ = zyyz;
-  /** Deprecated, use [zyyw] instead. */
+  @Deprecated("Use zyyw instead")
   static const int ZYYW = zyyw;
-  /** Deprecated, use [zyzx] instead. */
+  @Deprecated("Use zyzx instead")
   static const int ZYZX = zyzx;
-  /** Deprecated, use [zyzy] instead. */
+  @Deprecated("Use zyzy instead")
   static const int ZYZY = zyzy;
-  /** Deprecated, use [zyzz] instead. */
+  @Deprecated("Use zyzz instead")
   static const int ZYZZ = zyzz;
-  /** Deprecated, use [zyzw] instead. */
+  @Deprecated("Use zyzw instead")
   static const int ZYZW = zyzw;
-  /** Deprecated, use [zywx] instead. */
+  @Deprecated("Use zywx instead")
   static const int ZYWX = zywx;
-  /** Deprecated, use [zywy] instead. */
+  @Deprecated("Use zywy instead")
   static const int ZYWY = zywy;
-  /** Deprecated, use [zywz] instead. */
+  @Deprecated("Use zywz instead")
   static const int ZYWZ = zywz;
-  /** Deprecated, use [zyww] instead. */
+  @Deprecated("Use zyww instead")
   static const int ZYWW = zyww;
-  /** Deprecated, use [zzxx] instead. */
+  @Deprecated("Use zzxx instead")
   static const int ZZXX = zzxx;
-  /** Deprecated, use [zzxy] instead. */
+  @Deprecated("Use zzxy instead")
   static const int ZZXY = zzxy;
-  /** Deprecated, use [zzxz] instead. */
+  @Deprecated("Use zzxz instead")
   static const int ZZXZ = zzxz;
-  /** Deprecated, use [zzxw] instead. */
+  @Deprecated("Use zzxw instead")
   static const int ZZXW = zzxw;
-  /** Deprecated, use [zzyx] instead. */
+  @Deprecated("Use zzyx instead")
   static const int ZZYX = zzyx;
-  /** Deprecated, use [zzyy] instead. */
+  @Deprecated("Use zzyy instead")
   static const int ZZYY = zzyy;
-  /** Deprecated, use [zzyz] instead. */
+  @Deprecated("Use zzyz instead")
   static const int ZZYZ = zzyz;
-  /** Deprecated, use [zzyw] instead. */
+  @Deprecated("Use zzyw instead")
   static const int ZZYW = zzyw;
-  /** Deprecated, use [zzzx] instead. */
+  @Deprecated("Use zzzx instead")
   static const int ZZZX = zzzx;
-  /** Deprecated, use [zzzy] instead. */
+  @Deprecated("Use zzzy instead")
   static const int ZZZY = zzzy;
-  /** Deprecated, use [zzzz] instead. */
+  @Deprecated("Use zzzz instead")
   static const int ZZZZ = zzzz;
-  /** Deprecated, use [zzzw] instead. */
+  @Deprecated("Use zzzw instead")
   static const int ZZZW = zzzw;
-  /** Deprecated, use [zzwx] instead. */
+  @Deprecated("Use zzwx instead")
   static const int ZZWX = zzwx;
-  /** Deprecated, use [zzwy] instead. */
+  @Deprecated("Use zzwy instead")
   static const int ZZWY = zzwy;
-  /** Deprecated, use [zzwz] instead. */
+  @Deprecated("Use zzwz instead")
   static const int ZZWZ = zzwz;
-  /** Deprecated, use [zzww] instead. */
+  @Deprecated("Use zzww instead")
   static const int ZZWW = zzww;
-  /** Deprecated, use [zwxx] instead. */
+  @Deprecated("Use zwxx instead")
   static const int ZWXX = zwxx;
-  /** Deprecated, use [zwxy] instead. */
+  @Deprecated("Use zwxy instead")
   static const int ZWXY = zwxy;
-  /** Deprecated, use [zwxz] instead. */
+  @Deprecated("Use zwxz instead")
   static const int ZWXZ = zwxz;
-  /** Deprecated, use [zwxw] instead. */
+  @Deprecated("Use zwxw instead")
   static const int ZWXW = zwxw;
-  /** Deprecated, use [zwyx] instead. */
+  @Deprecated("Use zwyx instead")
   static const int ZWYX = zwyx;
-  /** Deprecated, use [zwyy] instead. */
+  @Deprecated("Use zwyy instead")
   static const int ZWYY = zwyy;
-  /** Deprecated, use [zwyz] instead. */
+  @Deprecated("Use zwyz instead")
   static const int ZWYZ = zwyz;
-  /** Deprecated, use [zwyw] instead. */
+  @Deprecated("Use zwyw instead")
   static const int ZWYW = zwyw;
-  /** Deprecated, use [zwzx] instead. */
+  @Deprecated("Use zwzx instead")
   static const int ZWZX = zwzx;
-  /** Deprecated, use [zwzy] instead. */
+  @Deprecated("Use zwzy instead")
   static const int ZWZY = zwzy;
-  /** Deprecated, use [zwzz] instead. */
+  @Deprecated("Use zwzz instead")
   static const int ZWZZ = zwzz;
-  /** Deprecated, use [zwzw] instead. */
+  @Deprecated("Use zwzw instead")
   static const int ZWZW = zwzw;
-  /** Deprecated, use [zwwx] instead. */
+  @Deprecated("Use zwwx instead")
   static const int ZWWX = zwwx;
-  /** Deprecated, use [zwwy] instead. */
+  @Deprecated("Use zwwy instead")
   static const int ZWWY = zwwy;
-  /** Deprecated, use [zwwz] instead. */
+  @Deprecated("Use zwwz instead")
   static const int ZWWZ = zwwz;
-  /** Deprecated, use [zwww] instead. */
+  @Deprecated("Use zwww instead")
   static const int ZWWW = zwww;
-  /** Deprecated, use [wxxx] instead. */
+  @Deprecated("Use wxxx instead")
   static const int WXXX = wxxx;
-  /** Deprecated, use [wxxy] instead. */
+  @Deprecated("Use wxxy instead")
   static const int WXXY = wxxy;
-  /** Deprecated, use [wxxz] instead. */
+  @Deprecated("Use wxxz instead")
   static const int WXXZ = wxxz;
-  /** Deprecated, use [wxxw] instead. */
+  @Deprecated("Use wxxw instead")
   static const int WXXW = wxxw;
-  /** Deprecated, use [wxyx] instead. */
+  @Deprecated("Use wxyx instead")
   static const int WXYX = wxyx;
-  /** Deprecated, use [wxyy] instead. */
+  @Deprecated("Use wxyy instead")
   static const int WXYY = wxyy;
-  /** Deprecated, use [wxyz] instead. */
+  @Deprecated("Use wxyz instead")
   static const int WXYZ = wxyz;
-  /** Deprecated, use [wxyw] instead. */
+  @Deprecated("Use wxyw instead")
   static const int WXYW = wxyw;
-  /** Deprecated, use [wxzx] instead. */
+  @Deprecated("Use wxzx instead")
   static const int WXZX = wxzx;
-  /** Deprecated, use [wxzy] instead. */
+  @Deprecated("Use wxzy instead")
   static const int WXZY = wxzy;
-  /** Deprecated, use [wxzz] instead. */
+  @Deprecated("Use wxzz instead")
   static const int WXZZ = wxzz;
-  /** Deprecated, use [wxzw] instead. */
+  @Deprecated("Use wxzw instead")
   static const int WXZW = wxzw;
-  /** Deprecated, use [wxwx] instead. */
+  @Deprecated("Use wxwx instead")
   static const int WXWX = wxwx;
-  /** Deprecated, use [wxwy] instead. */
+  @Deprecated("Use wxwy instead")
   static const int WXWY = wxwy;
-  /** Deprecated, use [wxwz] instead. */
+  @Deprecated("Use wxwz instead")
   static const int WXWZ = wxwz;
-  /** Deprecated, use [wxww] instead. */
+  @Deprecated("Use wxww instead")
   static const int WXWW = wxww;
-  /** Deprecated, use [wyxx] instead. */
+  @Deprecated("Use wyxx instead")
   static const int WYXX = wyxx;
-  /** Deprecated, use [wyxy] instead. */
+  @Deprecated("Use wyxy instead")
   static const int WYXY = wyxy;
-  /** Deprecated, use [wyxz] instead. */
+  @Deprecated("Use wyxz instead")
   static const int WYXZ = wyxz;
-  /** Deprecated, use [wyxw] instead. */
+  @Deprecated("Use wyxw instead")
   static const int WYXW = wyxw;
-  /** Deprecated, use [wyyx] instead. */
+  @Deprecated("Use wyyx instead")
   static const int WYYX = wyyx;
-  /** Deprecated, use [wyyy] instead. */
+  @Deprecated("Use wyyy instead")
   static const int WYYY = wyyy;
-  /** Deprecated, use [wyyz] instead. */
+  @Deprecated("Use wyyz instead")
   static const int WYYZ = wyyz;
-  /** Deprecated, use [wyyw] instead. */
+  @Deprecated("Use wyyw instead")
   static const int WYYW = wyyw;
-  /** Deprecated, use [wyzx] instead. */
+  @Deprecated("Use wyzx instead")
   static const int WYZX = wyzx;
-  /** Deprecated, use [wyzy] instead. */
+  @Deprecated("Use wyzy instead")
   static const int WYZY = wyzy;
-  /** Deprecated, use [wyzz] instead. */
+  @Deprecated("Use wyzz instead")
   static const int WYZZ = wyzz;
-  /** Deprecated, use [wyzw] instead. */
+  @Deprecated("Use wyzw instead")
   static const int WYZW = wyzw;
-  /** Deprecated, use [wywx] instead. */
+  @Deprecated("Use wywx instead")
   static const int WYWX = wywx;
-  /** Deprecated, use [wywy] instead. */
+  @Deprecated("Use wywy instead")
   static const int WYWY = wywy;
-  /** Deprecated, use [wywz] instead. */
+  @Deprecated("Use wywz instead")
   static const int WYWZ = wywz;
-  /** Deprecated, use [wyww] instead. */
+  @Deprecated("Use wyww instead")
   static const int WYWW = wyww;
-  /** Deprecated, use [wzxx] instead. */
+  @Deprecated("Use wzxx instead")
   static const int WZXX = wzxx;
-  /** Deprecated, use [wzxy] instead. */
+  @Deprecated("Use wzxy instead")
   static const int WZXY = wzxy;
-  /** Deprecated, use [wzxz] instead. */
+  @Deprecated("Use wzxz instead")
   static const int WZXZ = wzxz;
-  /** Deprecated, use [wzxw] instead. */
+  @Deprecated("Use wzxw instead")
   static const int WZXW = wzxw;
-  /** Deprecated, use [wzyx] instead. */
+  @Deprecated("Use wzyx instead")
   static const int WZYX = wzyx;
-  /** Deprecated, use [wzyy] instead. */
+  @Deprecated("Use wzyy instead")
   static const int WZYY = wzyy;
-  /** Deprecated, use [wzyz] instead. */
+  @Deprecated("Use wzyz instead")
   static const int WZYZ = wzyz;
-  /** Deprecated, use [wzyw] instead. */
+  @Deprecated("Use wzyw instead")
   static const int WZYW = wzyw;
-  /** Deprecated, use [wzzx] instead. */
+  @Deprecated("Use wzzx instead")
   static const int WZZX = wzzx;
-  /** Deprecated, use [wzzy] instead. */
+  @Deprecated("Use wzzy instead")
   static const int WZZY = wzzy;
-  /** Deprecated, use [wzzz] instead. */
+  @Deprecated("Use wzzz instead")
   static const int WZZZ = wzzz;
-  /** Deprecated, use [wzzw] instead. */
+  @Deprecated("Use wzzw instead")
   static const int WZZW = wzzw;
-  /** Deprecated, use [wzwx] instead. */
+  @Deprecated("Use wzwx instead")
   static const int WZWX = wzwx;
-  /** Deprecated, use [wzwy] instead. */
+  @Deprecated("Use wzwy instead")
   static const int WZWY = wzwy;
-  /** Deprecated, use [wzwz] instead. */
+  @Deprecated("Use wzwz instead")
   static const int WZWZ = wzwz;
-  /** Deprecated, use [wzww] instead. */
+  @Deprecated("Use wzww instead")
   static const int WZWW = wzww;
-  /** Deprecated, use [wwxx] instead. */
+  @Deprecated("Use wwxx instead")
   static const int WWXX = wwxx;
-  /** Deprecated, use [wwxy] instead. */
+  @Deprecated("Use wwxy instead")
   static const int WWXY = wwxy;
-  /** Deprecated, use [wwxz] instead. */
+  @Deprecated("Use wwxz instead")
   static const int WWXZ = wwxz;
-  /** Deprecated, use [wwxw] instead. */
+  @Deprecated("Use wwxw instead")
   static const int WWXW = wwxw;
-  /** Deprecated, use [wwyx] instead. */
+  @Deprecated("Use wwyx instead")
   static const int WWYX = wwyx;
-  /** Deprecated, use [wwyy] instead. */
+  @Deprecated("Use wwyy instead")
   static const int WWYY = wwyy;
-  /** Deprecated, use [wwyz] instead. */
+  @Deprecated("Use wwyz instead")
   static const int WWYZ = wwyz;
-  /** Deprecated, use [wwyw] instead. */
+  @Deprecated("Use wwyw instead")
   static const int WWYW = wwyw;
-  /** Deprecated, use [wwzx] instead. */
+  @Deprecated("Use wwzx instead")
   static const int WWZX = wwzx;
-  /** Deprecated, use [wwzy] instead. */
+  @Deprecated("Use wwzy instead")
   static const int WWZY = wwzy;
-  /** Deprecated, use [wwzz] instead. */
+  @Deprecated("Use wwzz instead")
   static const int WWZZ = wwzz;
-  /** Deprecated, use [wwzw] instead. */
+  @Deprecated("Use wwzw instead")
   static const int WWZW = wwzw;
-  /** Deprecated, use [wwwx] instead. */
+  @Deprecated("Use wwwx instead")
   static const int WWWX = wwwx;
-  /** Deprecated, use [wwwy] instead. */
+  @Deprecated("Use wwwy instead")
   static const int WWWY = wwwy;
-  /** Deprecated, use [wwwz] instead. */
+  @Deprecated("Use wwwz instead")
   static const int WWWZ = wwwz;
-  /** Deprecated, use [wwww] instead. */
+  @Deprecated("Use wwww instead")
   static const int WWWW = wwww;
 
   /// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
@@ -2677,517 +2677,517 @@
   static const int wwwy = 0x7F;
   static const int wwwz = 0xBF;
   static const int wwww = 0xFF;
-  /** Deprecated, use [xxxx] instead. */
+  @Deprecated("Use xxxx instead")
   static const int XXXX = xxxx;
-  /** Deprecated, use [xxxy] instead. */
+  @Deprecated("Use xxxy instead")
   static const int XXXY = xxxy;
-  /** Deprecated, use [xxxz] instead. */
+  @Deprecated("Use xxxz instead")
   static const int XXXZ = xxxz;
-  /** Deprecated, use [xxxw] instead. */
+  @Deprecated("Use xxxw instead")
   static const int XXXW = xxxw;
-  /** Deprecated, use [xxyx] instead. */
+  @Deprecated("Use xxyx instead")
   static const int XXYX = xxyx;
-  /** Deprecated, use [xxyy] instead. */
+  @Deprecated("Use xxyy instead")
   static const int XXYY = xxyy;
-  /** Deprecated, use [xxyz] instead. */
+  @Deprecated("Use xxyz instead")
   static const int XXYZ = xxyz;
-  /** Deprecated, use [xxyw] instead. */
+  @Deprecated("Use xxyw instead")
   static const int XXYW = xxyw;
-  /** Deprecated, use [xxzx] instead. */
+  @Deprecated("Use xxzx instead")
   static const int XXZX = xxzx;
-  /** Deprecated, use [xxzy] instead. */
+  @Deprecated("Use xxzy instead")
   static const int XXZY = xxzy;
-  /** Deprecated, use [xxzz] instead. */
+  @Deprecated("Use xxzz instead")
   static const int XXZZ = xxzz;
-  /** Deprecated, use [xxzw] instead. */
+  @Deprecated("Use xxzw instead")
   static const int XXZW = xxzw;
-  /** Deprecated, use [xxwx] instead. */
+  @Deprecated("Use xxwx instead")
   static const int XXWX = xxwx;
-  /** Deprecated, use [xxwy] instead. */
+  @Deprecated("Use xxwy instead")
   static const int XXWY = xxwy;
-  /** Deprecated, use [xxwz] instead. */
+  @Deprecated("Use xxwz instead")
   static const int XXWZ = xxwz;
-  /** Deprecated, use [xxww] instead. */
+  @Deprecated("Use xxww instead")
   static const int XXWW = xxww;
-  /** Deprecated, use [xyxx] instead. */
+  @Deprecated("Use xyxx instead")
   static const int XYXX = xyxx;
-  /** Deprecated, use [xyxy] instead. */
+  @Deprecated("Use xyxy instead")
   static const int XYXY = xyxy;
-  /** Deprecated, use [xyxz] instead. */
+  @Deprecated("Use xyxz instead")
   static const int XYXZ = xyxz;
-  /** Deprecated, use [xyxw] instead. */
+  @Deprecated("Use xyxw instead")
   static const int XYXW = xyxw;
-  /** Deprecated, use [xyyx] instead. */
+  @Deprecated("Use xyyx instead")
   static const int XYYX = xyyx;
-  /** Deprecated, use [xyyy] instead. */
+  @Deprecated("Use xyyy instead")
   static const int XYYY = xyyy;
-  /** Deprecated, use [xyyz] instead. */
+  @Deprecated("Use xyyz instead")
   static const int XYYZ = xyyz;
-  /** Deprecated, use [xyyw] instead. */
+  @Deprecated("Use xyyw instead")
   static const int XYYW = xyyw;
-  /** Deprecated, use [xyzx] instead. */
+  @Deprecated("Use xyzx instead")
   static const int XYZX = xyzx;
-  /** Deprecated, use [xyzy] instead. */
+  @Deprecated("Use xyzy instead")
   static const int XYZY = xyzy;
-  /** Deprecated, use [xyzz] instead. */
+  @Deprecated("Use xyzz instead")
   static const int XYZZ = xyzz;
-  /** Deprecated, use [xyzw] instead. */
+  @Deprecated("Use xyzw instead")
   static const int XYZW = xyzw;
-  /** Deprecated, use [xywx] instead. */
+  @Deprecated("Use xywx instead")
   static const int XYWX = xywx;
-  /** Deprecated, use [xywy] instead. */
+  @Deprecated("Use xywy instead")
   static const int XYWY = xywy;
-  /** Deprecated, use [xywz] instead. */
+  @Deprecated("Use xywz instead")
   static const int XYWZ = xywz;
-  /** Deprecated, use [xyww] instead. */
+  @Deprecated("Use xyww instead")
   static const int XYWW = xyww;
-  /** Deprecated, use [xzxx] instead. */
+  @Deprecated("Use xzxx instead")
   static const int XZXX = xzxx;
-  /** Deprecated, use [xzxy] instead. */
+  @Deprecated("Use xzxy instead")
   static const int XZXY = xzxy;
-  /** Deprecated, use [xzxz] instead. */
+  @Deprecated("Use xzxz instead")
   static const int XZXZ = xzxz;
-  /** Deprecated, use [xzxw] instead. */
+  @Deprecated("Use xzxw instead")
   static const int XZXW = xzxw;
-  /** Deprecated, use [xzyx] instead. */
+  @Deprecated("Use xzyx instead")
   static const int XZYX = xzyx;
-  /** Deprecated, use [xzyy] instead. */
+  @Deprecated("Use xzyy instead")
   static const int XZYY = xzyy;
-  /** Deprecated, use [xzyz] instead. */
+  @Deprecated("Use xzyz instead")
   static const int XZYZ = xzyz;
-  /** Deprecated, use [xzyw] instead. */
+  @Deprecated("Use xzyw instead")
   static const int XZYW = xzyw;
-  /** Deprecated, use [xzzx] instead. */
+  @Deprecated("Use xzzx instead")
   static const int XZZX = xzzx;
-  /** Deprecated, use [xzzy] instead. */
+  @Deprecated("Use xzzy instead")
   static const int XZZY = xzzy;
-  /** Deprecated, use [xzzz] instead. */
+  @Deprecated("Use xzzz instead")
   static const int XZZZ = xzzz;
-  /** Deprecated, use [xzzw] instead. */
+  @Deprecated("Use xzzw instead")
   static const int XZZW = xzzw;
-  /** Deprecated, use [xzwx] instead. */
+  @Deprecated("Use xzwx instead")
   static const int XZWX = xzwx;
-  /** Deprecated, use [xzwy] instead. */
+  @Deprecated("Use xzwy instead")
   static const int XZWY = xzwy;
-  /** Deprecated, use [xzwz] instead. */
+  @Deprecated("Use xzwz instead")
   static const int XZWZ = xzwz;
-  /** Deprecated, use [xzww] instead. */
+  @Deprecated("Use xzww instead")
   static const int XZWW = xzww;
-  /** Deprecated, use [xwxx] instead. */
+  @Deprecated("Use xwxx instead")
   static const int XWXX = xwxx;
-  /** Deprecated, use [xwxy] instead. */
+  @Deprecated("Use xwxy instead")
   static const int XWXY = xwxy;
-  /** Deprecated, use [xwxz] instead. */
+  @Deprecated("Use xwxz instead")
   static const int XWXZ = xwxz;
-  /** Deprecated, use [xwxw] instead. */
+  @Deprecated("Use xwxw instead")
   static const int XWXW = xwxw;
-  /** Deprecated, use [xwyx] instead. */
+  @Deprecated("Use xwyx instead")
   static const int XWYX = xwyx;
-  /** Deprecated, use [xwyy] instead. */
+  @Deprecated("Use xwyy instead")
   static const int XWYY = xwyy;
-  /** Deprecated, use [xwyz] instead. */
+  @Deprecated("Use xwyz instead")
   static const int XWYZ = xwyz;
-  /** Deprecated, use [xwyw] instead. */
+  @Deprecated("Use xwyw instead")
   static const int XWYW = xwyw;
-  /** Deprecated, use [xwzx] instead. */
+  @Deprecated("Use xwzx instead")
   static const int XWZX = xwzx;
-  /** Deprecated, use [xwzy] instead. */
+  @Deprecated("Use xwzy instead")
   static const int XWZY = xwzy;
-  /** Deprecated, use [xwzz] instead. */
+  @Deprecated("Use xwzz instead")
   static const int XWZZ = xwzz;
-  /** Deprecated, use [xwzw] instead. */
+  @Deprecated("Use xwzw instead")
   static const int XWZW = xwzw;
-  /** Deprecated, use [xwwx] instead. */
+  @Deprecated("Use xwwx instead")
   static const int XWWX = xwwx;
-  /** Deprecated, use [xwwy] instead. */
+  @Deprecated("Use xwwy instead")
   static const int XWWY = xwwy;
-  /** Deprecated, use [xwwz] instead. */
+  @Deprecated("Use xwwz instead")
   static const int XWWZ = xwwz;
-  /** Deprecated, use [xwww] instead. */
+  @Deprecated("Use xwww instead")
   static const int XWWW = xwww;
-  /** Deprecated, use [yxxx] instead. */
+  @Deprecated("Use yxxx instead")
   static const int YXXX = yxxx;
-  /** Deprecated, use [yxxy] instead. */
+  @Deprecated("Use yxxy instead")
   static const int YXXY = yxxy;
-  /** Deprecated, use [yxxz] instead. */
+  @Deprecated("Use yxxz instead")
   static const int YXXZ = yxxz;
-  /** Deprecated, use [yxxw] instead. */
+  @Deprecated("Use yxxw instead")
   static const int YXXW = yxxw;
-  /** Deprecated, use [yxyx] instead. */
+  @Deprecated("Use yxyx instead")
   static const int YXYX = yxyx;
-  /** Deprecated, use [yxyy] instead. */
+  @Deprecated("Use yxyy instead")
   static const int YXYY = yxyy;
-  /** Deprecated, use [yxyz] instead. */
+  @Deprecated("Use yxyz instead")
   static const int YXYZ = yxyz;
-  /** Deprecated, use [yxyw] instead. */
+  @Deprecated("Use yxyw instead")
   static const int YXYW = yxyw;
-  /** Deprecated, use [yxzx] instead. */
+  @Deprecated("Use yxzx instead")
   static const int YXZX = yxzx;
-  /** Deprecated, use [yxzy] instead. */
+  @Deprecated("Use yxzy instead")
   static const int YXZY = yxzy;
-  /** Deprecated, use [yxzz] instead. */
+  @Deprecated("Use yxzz instead")
   static const int YXZZ = yxzz;
-  /** Deprecated, use [yxzw] instead. */
+  @Deprecated("Use yxzw instead")
   static const int YXZW = yxzw;
-  /** Deprecated, use [yxwx] instead. */
+  @Deprecated("Use yxwx instead")
   static const int YXWX = yxwx;
-  /** Deprecated, use [yxwy] instead. */
+  @Deprecated("Use yxwy instead")
   static const int YXWY = yxwy;
-  /** Deprecated, use [yxwz] instead. */
+  @Deprecated("Use yxwz instead")
   static const int YXWZ = yxwz;
-  /** Deprecated, use [yxww] instead. */
+  @Deprecated("Use yxww instead")
   static const int YXWW = yxww;
-  /** Deprecated, use [yyxx] instead. */
+  @Deprecated("Use yyxx instead")
   static const int YYXX = yyxx;
-  /** Deprecated, use [yyxy] instead. */
+  @Deprecated("Use yyxy instead")
   static const int YYXY = yyxy;
-  /** Deprecated, use [yyxz] instead. */
+  @Deprecated("Use yyxz instead")
   static const int YYXZ = yyxz;
-  /** Deprecated, use [yyxw] instead. */
+  @Deprecated("Use yyxw instead")
   static const int YYXW = yyxw;
-  /** Deprecated, use [yyyx] instead. */
+  @Deprecated("Use yyyx instead")
   static const int YYYX = yyyx;
-  /** Deprecated, use [yyyy] instead. */
+  @Deprecated("Use yyyy instead")
   static const int YYYY = yyyy;
-  /** Deprecated, use [yyyz] instead. */
+  @Deprecated("Use yyyz instead")
   static const int YYYZ = yyyz;
-  /** Deprecated, use [yyyw] instead. */
+  @Deprecated("Use yyyw instead")
   static const int YYYW = yyyw;
-  /** Deprecated, use [yyzx] instead. */
+  @Deprecated("Use yyzx instead")
   static const int YYZX = yyzx;
-  /** Deprecated, use [yyzy] instead. */
+  @Deprecated("Use yyzy instead")
   static const int YYZY = yyzy;
-  /** Deprecated, use [yyzz] instead. */
+  @Deprecated("Use yyzz instead")
   static const int YYZZ = yyzz;
-  /** Deprecated, use [yyzw] instead. */
+  @Deprecated("Use yyzw instead")
   static const int YYZW = yyzw;
-  /** Deprecated, use [yywx] instead. */
+  @Deprecated("Use yywx instead")
   static const int YYWX = yywx;
-  /** Deprecated, use [yywy] instead. */
+  @Deprecated("Use yywy instead")
   static const int YYWY = yywy;
-  /** Deprecated, use [yywz] instead. */
+  @Deprecated("Use yywz instead")
   static const int YYWZ = yywz;
-  /** Deprecated, use [yyww] instead. */
+  @Deprecated("Use yyww instead")
   static const int YYWW = yyww;
-  /** Deprecated, use [yzxx] instead. */
+  @Deprecated("Use yzxx instead")
   static const int YZXX = yzxx;
-  /** Deprecated, use [yzxy] instead. */
+  @Deprecated("Use yzxy instead")
   static const int YZXY = yzxy;
-  /** Deprecated, use [yzxz] instead. */
+  @Deprecated("Use yzxz instead")
   static const int YZXZ = yzxz;
-  /** Deprecated, use [yzxw] instead. */
+  @Deprecated("Use yzxw instead")
   static const int YZXW = yzxw;
-  /** Deprecated, use [yzyx] instead. */
+  @Deprecated("Use yzyx instead")
   static const int YZYX = yzyx;
-  /** Deprecated, use [yzyy] instead. */
+  @Deprecated("Use yzyy instead")
   static const int YZYY = yzyy;
-  /** Deprecated, use [yzyz] instead. */
+  @Deprecated("Use yzyz instead")
   static const int YZYZ = yzyz;
-  /** Deprecated, use [yzyw] instead. */
+  @Deprecated("Use yzyw instead")
   static const int YZYW = yzyw;
-  /** Deprecated, use [yzzx] instead. */
+  @Deprecated("Use yzzx instead")
   static const int YZZX = yzzx;
-  /** Deprecated, use [yzzy] instead. */
+  @Deprecated("Use yzzy instead")
   static const int YZZY = yzzy;
-  /** Deprecated, use [yzzz] instead. */
+  @Deprecated("Use yzzz instead")
   static const int YZZZ = yzzz;
-  /** Deprecated, use [yzzw] instead. */
+  @Deprecated("Use yzzw instead")
   static const int YZZW = yzzw;
-  /** Deprecated, use [yzwx] instead. */
+  @Deprecated("Use yzwx instead")
   static const int YZWX = yzwx;
-  /** Deprecated, use [yzwy] instead. */
+  @Deprecated("Use yzwy instead")
   static const int YZWY = yzwy;
-  /** Deprecated, use [yzwz] instead. */
+  @Deprecated("Use yzwz instead")
   static const int YZWZ = yzwz;
-  /** Deprecated, use [yzww] instead. */
+  @Deprecated("Use yzww instead")
   static const int YZWW = yzww;
-  /** Deprecated, use [ywxx] instead. */
+  @Deprecated("Use ywxx instead")
   static const int YWXX = ywxx;
-  /** Deprecated, use [ywxy] instead. */
+  @Deprecated("Use ywxy instead")
   static const int YWXY = ywxy;
-  /** Deprecated, use [ywxz] instead. */
+  @Deprecated("Use ywxz instead")
   static const int YWXZ = ywxz;
-  /** Deprecated, use [ywxw] instead. */
+  @Deprecated("Use ywxw instead")
   static const int YWXW = ywxw;
-  /** Deprecated, use [ywyx] instead. */
+  @Deprecated("Use ywyx instead")
   static const int YWYX = ywyx;
-  /** Deprecated, use [ywyy] instead. */
+  @Deprecated("Use ywyy instead")
   static const int YWYY = ywyy;
-  /** Deprecated, use [ywyz] instead. */
+  @Deprecated("Use ywyz instead")
   static const int YWYZ = ywyz;
-  /** Deprecated, use [ywyw] instead. */
+  @Deprecated("Use ywyw instead")
   static const int YWYW = ywyw;
-  /** Deprecated, use [ywzx] instead. */
+  @Deprecated("Use ywzx instead")
   static const int YWZX = ywzx;
-  /** Deprecated, use [ywzy] instead. */
+  @Deprecated("Use ywzy instead")
   static const int YWZY = ywzy;
-  /** Deprecated, use [ywzz] instead. */
+  @Deprecated("Use ywzz instead")
   static const int YWZZ = ywzz;
-  /** Deprecated, use [ywzw] instead. */
+  @Deprecated("Use ywzw instead")
   static const int YWZW = ywzw;
-  /** Deprecated, use [ywwx] instead. */
+  @Deprecated("Use ywwx instead")
   static const int YWWX = ywwx;
-  /** Deprecated, use [ywwy] instead. */
+  @Deprecated("Use ywwy instead")
   static const int YWWY = ywwy;
-  /** Deprecated, use [ywwz] instead. */
+  @Deprecated("Use ywwz instead")
   static const int YWWZ = ywwz;
-  /** Deprecated, use [ywww] instead. */
+  @Deprecated("Use ywww instead")
   static const int YWWW = ywww;
-  /** Deprecated, use [zxxx] instead. */
+  @Deprecated("Use zxxx instead")
   static const int ZXXX = zxxx;
-  /** Deprecated, use [zxxy] instead. */
+  @Deprecated("Use zxxy instead")
   static const int ZXXY = zxxy;
-  /** Deprecated, use [zxxz] instead. */
+  @Deprecated("Use zxxz instead")
   static const int ZXXZ = zxxz;
-  /** Deprecated, use [zxxw] instead. */
+  @Deprecated("Use zxxw instead")
   static const int ZXXW = zxxw;
-  /** Deprecated, use [zxyx] instead. */
+  @Deprecated("Use zxyx instead")
   static const int ZXYX = zxyx;
-  /** Deprecated, use [zxyy] instead. */
+  @Deprecated("Use zxyy instead")
   static const int ZXYY = zxyy;
-  /** Deprecated, use [zxyz] instead. */
+  @Deprecated("Use zxyz instead")
   static const int ZXYZ = zxyz;
-  /** Deprecated, use [zxyw] instead. */
+  @Deprecated("Use zxyw instead")
   static const int ZXYW = zxyw;
-  /** Deprecated, use [zxzx] instead. */
+  @Deprecated("Use zxzx instead")
   static const int ZXZX = zxzx;
-  /** Deprecated, use [zxzy] instead. */
+  @Deprecated("Use zxzy instead")
   static const int ZXZY = zxzy;
-  /** Deprecated, use [zxzz] instead. */
+  @Deprecated("Use zxzz instead")
   static const int ZXZZ = zxzz;
-  /** Deprecated, use [zxzw] instead. */
+  @Deprecated("Use zxzw instead")
   static const int ZXZW = zxzw;
-  /** Deprecated, use [zxwx] instead. */
+  @Deprecated("Use zxwx instead")
   static const int ZXWX = zxwx;
-  /** Deprecated, use [zxwy] instead. */
+  @Deprecated("Use zxwy instead")
   static const int ZXWY = zxwy;
-  /** Deprecated, use [zxwz] instead. */
+  @Deprecated("Use zxwz instead")
   static const int ZXWZ = zxwz;
-  /** Deprecated, use [zxww] instead. */
+  @Deprecated("Use zxww instead")
   static const int ZXWW = zxww;
-  /** Deprecated, use [zyxx] instead. */
+  @Deprecated("Use zyxx instead")
   static const int ZYXX = zyxx;
-  /** Deprecated, use [zyxy] instead. */
+  @Deprecated("Use zyxy instead")
   static const int ZYXY = zyxy;
-  /** Deprecated, use [zyxz] instead. */
+  @Deprecated("Use zyxz instead")
   static const int ZYXZ = zyxz;
-  /** Deprecated, use [zyxw] instead. */
+  @Deprecated("Use zyxw instead")
   static const int ZYXW = zyxw;
-  /** Deprecated, use [zyyx] instead. */
+  @Deprecated("Use zyyx instead")
   static const int ZYYX = zyyx;
-  /** Deprecated, use [zyyy] instead. */
+  @Deprecated("Use zyyy instead")
   static const int ZYYY = zyyy;
-  /** Deprecated, use [zyyz] instead. */
+  @Deprecated("Use zyyz instead")
   static const int ZYYZ = zyyz;
-  /** Deprecated, use [zyyw] instead. */
+  @Deprecated("Use zyyw instead")
   static const int ZYYW = zyyw;
-  /** Deprecated, use [zyzx] instead. */
+  @Deprecated("Use zyzx instead")
   static const int ZYZX = zyzx;
-  /** Deprecated, use [zyzy] instead. */
+  @Deprecated("Use zyzy instead")
   static const int ZYZY = zyzy;
-  /** Deprecated, use [zyzz] instead. */
+  @Deprecated("Use zyzz instead")
   static const int ZYZZ = zyzz;
-  /** Deprecated, use [zyzw] instead. */
+  @Deprecated("Use zyzw instead")
   static const int ZYZW = zyzw;
-  /** Deprecated, use [zywx] instead. */
+  @Deprecated("Use zywx instead")
   static const int ZYWX = zywx;
-  /** Deprecated, use [zywy] instead. */
+  @Deprecated("Use zywy instead")
   static const int ZYWY = zywy;
-  /** Deprecated, use [zywz] instead. */
+  @Deprecated("Use zywz instead")
   static const int ZYWZ = zywz;
-  /** Deprecated, use [zyww] instead. */
+  @Deprecated("Use zyww instead")
   static const int ZYWW = zyww;
-  /** Deprecated, use [zzxx] instead. */
+  @Deprecated("Use zzxx instead")
   static const int ZZXX = zzxx;
-  /** Deprecated, use [zzxy] instead. */
+  @Deprecated("Use zzxy instead")
   static const int ZZXY = zzxy;
-  /** Deprecated, use [zzxz] instead. */
+  @Deprecated("Use zzxz instead")
   static const int ZZXZ = zzxz;
-  /** Deprecated, use [zzxw] instead. */
+  @Deprecated("Use zzxw instead")
   static const int ZZXW = zzxw;
-  /** Deprecated, use [zzyx] instead. */
+  @Deprecated("Use zzyx instead")
   static const int ZZYX = zzyx;
-  /** Deprecated, use [zzyy] instead. */
+  @Deprecated("Use zzyy instead")
   static const int ZZYY = zzyy;
-  /** Deprecated, use [zzyz] instead. */
+  @Deprecated("Use zzyz instead")
   static const int ZZYZ = zzyz;
-  /** Deprecated, use [zzyw] instead. */
+  @Deprecated("Use zzyw instead")
   static const int ZZYW = zzyw;
-  /** Deprecated, use [zzzx] instead. */
+  @Deprecated("Use zzzx instead")
   static const int ZZZX = zzzx;
-  /** Deprecated, use [zzzy] instead. */
+  @Deprecated("Use zzzy instead")
   static const int ZZZY = zzzy;
-  /** Deprecated, use [zzzz] instead. */
+  @Deprecated("Use zzzz instead")
   static const int ZZZZ = zzzz;
-  /** Deprecated, use [zzzw] instead. */
+  @Deprecated("Use zzzw instead")
   static const int ZZZW = zzzw;
-  /** Deprecated, use [zzwx] instead. */
+  @Deprecated("Use zzwx instead")
   static const int ZZWX = zzwx;
-  /** Deprecated, use [zzwy] instead. */
+  @Deprecated("Use zzwy instead")
   static const int ZZWY = zzwy;
-  /** Deprecated, use [zzwz] instead. */
+  @Deprecated("Use zzwz instead")
   static const int ZZWZ = zzwz;
-  /** Deprecated, use [zzww] instead. */
+  @Deprecated("Use zzww instead")
   static const int ZZWW = zzww;
-  /** Deprecated, use [zwxx] instead. */
+  @Deprecated("Use zwxx instead")
   static const int ZWXX = zwxx;
-  /** Deprecated, use [zwxy] instead. */
+  @Deprecated("Use zwxy instead")
   static const int ZWXY = zwxy;
-  /** Deprecated, use [zwxz] instead. */
+  @Deprecated("Use zwxz instead")
   static const int ZWXZ = zwxz;
-  /** Deprecated, use [zwxw] instead. */
+  @Deprecated("Use zwxw instead")
   static const int ZWXW = zwxw;
-  /** Deprecated, use [zwyx] instead. */
+  @Deprecated("Use zwyx instead")
   static const int ZWYX = zwyx;
-  /** Deprecated, use [zwyy] instead. */
+  @Deprecated("Use zwyy instead")
   static const int ZWYY = zwyy;
-  /** Deprecated, use [zwyz] instead. */
+  @Deprecated("Use zwyz instead")
   static const int ZWYZ = zwyz;
-  /** Deprecated, use [zwyw] instead. */
+  @Deprecated("Use zwyw instead")
   static const int ZWYW = zwyw;
-  /** Deprecated, use [zwzx] instead. */
+  @Deprecated("Use zwzx instead")
   static const int ZWZX = zwzx;
-  /** Deprecated, use [zwzy] instead. */
+  @Deprecated("Use zwzy instead")
   static const int ZWZY = zwzy;
-  /** Deprecated, use [zwzz] instead. */
+  @Deprecated("Use zwzz instead")
   static const int ZWZZ = zwzz;
-  /** Deprecated, use [zwzw] instead. */
+  @Deprecated("Use zwzw instead")
   static const int ZWZW = zwzw;
-  /** Deprecated, use [zwwx] instead. */
+  @Deprecated("Use zwwx instead")
   static const int ZWWX = zwwx;
-  /** Deprecated, use [zwwy] instead. */
+  @Deprecated("Use zwwy instead")
   static const int ZWWY = zwwy;
-  /** Deprecated, use [zwwz] instead. */
+  @Deprecated("Use zwwz instead")
   static const int ZWWZ = zwwz;
-  /** Deprecated, use [zwww] instead. */
+  @Deprecated("Use zwww instead")
   static const int ZWWW = zwww;
-  /** Deprecated, use [wxxx] instead. */
+  @Deprecated("Use wxxx instead")
   static const int WXXX = wxxx;
-  /** Deprecated, use [wxxy] instead. */
+  @Deprecated("Use wxxy instead")
   static const int WXXY = wxxy;
-  /** Deprecated, use [wxxz] instead. */
+  @Deprecated("Use wxxz instead")
   static const int WXXZ = wxxz;
-  /** Deprecated, use [wxxw] instead. */
+  @Deprecated("Use wxxw instead")
   static const int WXXW = wxxw;
-  /** Deprecated, use [wxyx] instead. */
+  @Deprecated("Use wxyx instead")
   static const int WXYX = wxyx;
-  /** Deprecated, use [wxyy] instead. */
+  @Deprecated("Use wxyy instead")
   static const int WXYY = wxyy;
-  /** Deprecated, use [wxyz] instead. */
+  @Deprecated("Use wxyz instead")
   static const int WXYZ = wxyz;
-  /** Deprecated, use [wxyw] instead. */
+  @Deprecated("Use wxyw instead")
   static const int WXYW = wxyw;
-  /** Deprecated, use [wxzx] instead. */
+  @Deprecated("Use wxzx instead")
   static const int WXZX = wxzx;
-  /** Deprecated, use [wxzy] instead. */
+  @Deprecated("Use wxzy instead")
   static const int WXZY = wxzy;
-  /** Deprecated, use [wxzz] instead. */
+  @Deprecated("Use wxzz instead")
   static const int WXZZ = wxzz;
-  /** Deprecated, use [wxzw] instead. */
+  @Deprecated("Use wxzw instead")
   static const int WXZW = wxzw;
-  /** Deprecated, use [wxwx] instead. */
+  @Deprecated("Use wxwx instead")
   static const int WXWX = wxwx;
-  /** Deprecated, use [wxwy] instead. */
+  @Deprecated("Use wxwy instead")
   static const int WXWY = wxwy;
-  /** Deprecated, use [wxwz] instead. */
+  @Deprecated("Use wxwz instead")
   static const int WXWZ = wxwz;
-  /** Deprecated, use [wxww] instead. */
+  @Deprecated("Use wxww instead")
   static const int WXWW = wxww;
-  /** Deprecated, use [wyxx] instead. */
+  @Deprecated("Use wyxx instead")
   static const int WYXX = wyxx;
-  /** Deprecated, use [wyxy] instead. */
+  @Deprecated("Use wyxy instead")
   static const int WYXY = wyxy;
-  /** Deprecated, use [wyxz] instead. */
+  @Deprecated("Use wyxz instead")
   static const int WYXZ = wyxz;
-  /** Deprecated, use [wyxw] instead. */
+  @Deprecated("Use wyxw instead")
   static const int WYXW = wyxw;
-  /** Deprecated, use [wyyx] instead. */
+  @Deprecated("Use wyyx instead")
   static const int WYYX = wyyx;
-  /** Deprecated, use [wyyy] instead. */
+  @Deprecated("Use wyyy instead")
   static const int WYYY = wyyy;
-  /** Deprecated, use [wyyz] instead. */
+  @Deprecated("Use wyyz instead")
   static const int WYYZ = wyyz;
-  /** Deprecated, use [wyyw] instead. */
+  @Deprecated("Use wyyw instead")
   static const int WYYW = wyyw;
-  /** Deprecated, use [wyzx] instead. */
+  @Deprecated("Use wyzx instead")
   static const int WYZX = wyzx;
-  /** Deprecated, use [wyzy] instead. */
+  @Deprecated("Use wyzy instead")
   static const int WYZY = wyzy;
-  /** Deprecated, use [wyzz] instead. */
+  @Deprecated("Use wyzz instead")
   static const int WYZZ = wyzz;
-  /** Deprecated, use [wyzw] instead. */
+  @Deprecated("Use wyzw instead")
   static const int WYZW = wyzw;
-  /** Deprecated, use [wywx] instead. */
+  @Deprecated("Use wywx instead")
   static const int WYWX = wywx;
-  /** Deprecated, use [wywy] instead. */
+  @Deprecated("Use wywy instead")
   static const int WYWY = wywy;
-  /** Deprecated, use [wywz] instead. */
+  @Deprecated("Use wywz instead")
   static const int WYWZ = wywz;
-  /** Deprecated, use [wyww] instead. */
+  @Deprecated("Use wyww instead")
   static const int WYWW = wyww;
-  /** Deprecated, use [wzxx] instead. */
+  @Deprecated("Use wzxx instead")
   static const int WZXX = wzxx;
-  /** Deprecated, use [wzxy] instead. */
+  @Deprecated("Use wzxy instead")
   static const int WZXY = wzxy;
-  /** Deprecated, use [wzxz] instead. */
+  @Deprecated("Use wzxz instead")
   static const int WZXZ = wzxz;
-  /** Deprecated, use [wzxw] instead. */
+  @Deprecated("Use wzxw instead")
   static const int WZXW = wzxw;
-  /** Deprecated, use [wzyx] instead. */
+  @Deprecated("Use wzyx instead")
   static const int WZYX = wzyx;
-  /** Deprecated, use [wzyy] instead. */
+  @Deprecated("Use wzyy instead")
   static const int WZYY = wzyy;
-  /** Deprecated, use [wzyz] instead. */
+  @Deprecated("Use wzyz instead")
   static const int WZYZ = wzyz;
-  /** Deprecated, use [wzyw] instead. */
+  @Deprecated("Use wzyw instead")
   static const int WZYW = wzyw;
-  /** Deprecated, use [wzzx] instead. */
+  @Deprecated("Use wzzx instead")
   static const int WZZX = wzzx;
-  /** Deprecated, use [wzzy] instead. */
+  @Deprecated("Use wzzy instead")
   static const int WZZY = wzzy;
-  /** Deprecated, use [wzzz] instead. */
+  @Deprecated("Use wzzz instead")
   static const int WZZZ = wzzz;
-  /** Deprecated, use [wzzw] instead. */
+  @Deprecated("Use wzzw instead")
   static const int WZZW = wzzw;
-  /** Deprecated, use [wzwx] instead. */
+  @Deprecated("Use wzwx instead")
   static const int WZWX = wzwx;
-  /** Deprecated, use [wzwy] instead. */
+  @Deprecated("Use wzwy instead")
   static const int WZWY = wzwy;
-  /** Deprecated, use [wzwz] instead. */
+  @Deprecated("Use wzwz instead")
   static const int WZWZ = wzwz;
-  /** Deprecated, use [wzww] instead. */
+  @Deprecated("Use wzww instead")
   static const int WZWW = wzww;
-  /** Deprecated, use [wwxx] instead. */
+  @Deprecated("Use wwxx instead")
   static const int WWXX = wwxx;
-  /** Deprecated, use [wwxy] instead. */
+  @Deprecated("Use wwxy instead")
   static const int WWXY = wwxy;
-  /** Deprecated, use [wwxz] instead. */
+  @Deprecated("Use wwxz instead")
   static const int WWXZ = wwxz;
-  /** Deprecated, use [wwxw] instead. */
+  @Deprecated("Use wwxw instead")
   static const int WWXW = wwxw;
-  /** Deprecated, use [wwyx] instead. */
+  @Deprecated("Use wwyx instead")
   static const int WWYX = wwyx;
-  /** Deprecated, use [wwyy] instead. */
+  @Deprecated("Use wwyy instead")
   static const int WWYY = wwyy;
-  /** Deprecated, use [wwyz] instead. */
+  @Deprecated("Use wwyz instead")
   static const int WWYZ = wwyz;
-  /** Deprecated, use [wwyw] instead. */
+  @Deprecated("Use wwyw instead")
   static const int WWYW = wwyw;
-  /** Deprecated, use [wwzx] instead. */
+  @Deprecated("Use wwzx instead")
   static const int WWZX = wwzx;
-  /** Deprecated, use [wwzy] instead. */
+  @Deprecated("Use wwzy instead")
   static const int WWZY = wwzy;
-  /** Deprecated, use [wwzz] instead. */
+  @Deprecated("Use wwzz instead")
   static const int WWZZ = wwzz;
-  /** Deprecated, use [wwzw] instead. */
+  @Deprecated("Use wwzw instead")
   static const int WWZW = wwzw;
-  /** Deprecated, use [wwwx] instead. */
+  @Deprecated("Use wwwx instead")
   static const int WWWX = wwwx;
-  /** Deprecated, use [wwwy] instead. */
+  @Deprecated("Use wwwy instead")
   static const int WWWY = wwwy;
-  /** Deprecated, use [wwwz] instead. */
+  @Deprecated("Use wwwz instead")
   static const int WWWZ = wwwz;
-  /** Deprecated, use [wwww] instead. */
+  @Deprecated("Use wwww instead")
   static const int WWWW = wwww;
 
   /// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
diff --git a/tests/co19/co19-co19.status b/tests/co19/co19-co19.status
index 494dd14..5061de2 100644
--- a/tests/co19/co19-co19.status
+++ b/tests/co19/co19-co19.status
@@ -5,9 +5,16 @@
 # have been filed on the co19 issue tracker at
 #    https://code.google.com/p/co19/issues/list (read-only).
 #    https://github.com/dart-lang/co19/issues .
-#
+
 # In order to qualify here these tests need to fail both on the VM and dart2js.
 ### GENERAL FAILURES ###
+[ $runtime != none ]
+Language/Statements/Assert/syntax_t04: Pass, Fail # assert now has an optional second parameter.
+LibTest/async/Zone/bindBinaryCallback_A01_t02: Fail # co19 issue 126
+LibTest/async/Zone/bindCallback_A01_t02: Fail # co19 issue 126
+LibTest/async/Zone/bindUnaryCallback_A01_t02: Fail # co19 issue 126
+LibTest/core/RegExp/firstMatch_A01_t01: Fail # co19 issue 742
+LibTest/typed_data/ByteData/buffer_A01_t01: Fail # co19 r736 bug - sent comment.
 LibTest/typed_data/Float32List/first_A01_t02: RuntimeError # co19 issue 130
 LibTest/typed_data/Float32List/last_A01_t02: RuntimeError # co19 issue 130
 LibTest/typed_data/Float64List/first_A01_t02: RuntimeError # co19 issue 130
@@ -31,30 +38,6 @@
 LibTest/typed_data/Uint8List/first_A01_t02: RuntimeError # co19 issue 130
 LibTest/typed_data/Uint8List/last_A01_t02: RuntimeError # co19 issue 130
 
-# Tests that fail everywhere, including the analyzer.
-[ $compiler != fasta ]
-Language/Classes/Getters/type_object_t01: Fail # co19 issue 115
-Language/Classes/Getters/type_object_t02: Fail # co19 issue 115
-Language/Classes/Setters/type_object_t01: Fail # co19 issue 115
-Language/Classes/Setters/type_object_t02: Fail # co19 issue 115
-Language/Classes/Static_Methods/type_object_t01: Fail # co19 issue 115
-Language/Classes/Static_Methods/type_object_t02: Fail # co19 issue 115
-Language/Statements/Assert/syntax_t04: Pass, Fail # assert now has an optional second parameter.
-LibTest/async/Zone/bindBinaryCallback_A01_t02: Fail # co19 issue 126
-LibTest/async/Zone/bindCallback_A01_t02: Fail # co19 issue 126
-LibTest/async/Zone/bindUnaryCallback_A01_t02: Fail # co19 issue 126
-LibTest/core/RegExp/firstMatch_A01_t01: Fail # co19 issue 742
-LibTest/typed_data/ByteData/buffer_A01_t01: Fail # co19 r736 bug - sent comment.
-
-[ $strong ]
-Language/Expressions/Additive_Expressions/syntax_t01/07: CompileTimeError
-LibTest/typed_data/Float32x4List/first_A01_t02: CompileTimeError # co19 issue 130 + type error
-LibTest/typed_data/Float32x4List/last_A01_t02: CompileTimeError # co19 issue 130 + type error
-
-[ !$strong ]
-LibTest/typed_data/Float32x4List/first_A01_t02: RuntimeError # co19 issue 130
-LibTest/typed_data/Float32x4List/last_A01_t02: RuntimeError # co19 issue 130
-
 # Tests that fail on every runtime, but not on the analyzer.
 [ $compiler != dart2analyzer && $compiler != fasta ]
 Language/Classes/same_name_type_variable_t04: Pass, MissingCompileTimeError, Fail # Issue 14513,25525
@@ -107,6 +90,15 @@
 LibTest/math/log_A01_t01: Pass, Fail, OK # Issue 26261
 LibTest/math/tan_A01_t01: Pass, Fail, OK # Issue 26261
 
-[ !$checked && !$strong ]
+[ $compiler != fasta && !$checked && !$strong ]
 Language/Expressions/Additive_Expressions/syntax_t01/07: MissingRuntimeError # Unchecked mode allows List + anything-with-a-zero-length
 
+[ $compiler != fasta && $strong ]
+Language/Expressions/Additive_Expressions/syntax_t01/07: CompileTimeError
+LibTest/typed_data/Float32x4List/first_A01_t02: CompileTimeError # co19 issue 130 + type error
+LibTest/typed_data/Float32x4List/last_A01_t02: CompileTimeError # co19 issue 130 + type error
+
+[ $runtime != none && !$strong ]
+LibTest/typed_data/Float32x4List/first_A01_t02: RuntimeError # co19 issue 130
+LibTest/typed_data/Float32x4List/last_A01_t02: RuntimeError # co19 issue 130
+
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index a526bd4..506508e 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -5,9 +5,7 @@
 [ $compiler == dart2js ]
 Language/Classes/Constructors/Generative_Constructors/execution_of_a_superinitializer_t01: RuntimeError # compiler cancelled: cannot resolve type T
 Language/Classes/Constructors/Generative_Constructors/execution_of_a_superinitializer_t01: RuntimeError, OK # co19 issue 258
-Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t02: Fail # Issue 13363
 Language/Classes/Constructors/Generative_Constructors/execution_t03: RuntimeError # https://github.com/dart-lang/sdk/issues/29596
-Language/Classes/Constructors/Generative_Constructors/initializing_formals_execution_t02: Fail # Issue 13363
 Language/Classes/Getters/static_getter_t02: CompileTimeError # Should be fixed with unified frontend. Issue 24534
 Language/Classes/Instance_Methods/same_name_setter_t01: Fail # Issue 21201
 Language/Classes/Setters/name_t01: CompileTimeError # Issue 5023
@@ -16,7 +14,6 @@
 Language/Classes/Setters/name_t07: CompileTimeError # Issue 5023
 Language/Classes/Setters/static_setter_t06: RuntimeError # Should be fixed with unified frontend. Issue 23749
 Language/Classes/Static_Methods/same_name_method_and_setter_t01: CompileTimeError # Should be fixed with unified frontend. Issue 23749
-Language/Classes/definition_t23: CompileTimeError # Please triage this failure
 Language/Classes/same_name_type_variable_t01: Fail # Missing CT error on class with same name a type parameter
 Language/Classes/same_name_type_variable_t02: Fail # Missing CT error on member with same name a type parameter
 Language/Classes/same_name_type_variable_t03: Fail # Missing CT error on member with same name a type parameter
@@ -66,8 +63,6 @@
 Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t06: MissingCompileTimeError # Issue 24332
 Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t07: MissingCompileTimeError # Issue 24332
 Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t08: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/no_such_method_t01: RuntimeError # Issue 24331
-Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/no_such_method_t01: RuntimeError # Issue 24331
 Language/Expressions/Shift/syntax_t01/14: MissingRuntimeError # Please triage this failure
 Language/Functions/External_Functions/not_connected_to_a_body_t01: CompileTimeError, OK # Issue 5021
 Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_method_and_getter_t01: CompileTimeError # Please triage this failure
@@ -120,14 +115,12 @@
 Language/Types/Interface_Types/subtype_t27: Skip # Times out or crashes. Issue 21174
 Language/Types/Interface_Types/subtype_t28: Pass, Fail, Crash # Stack overflow. Issue 25282
 Language/Types/Interface_Types/subtype_t30: Fail # Issue 14654
-Language/Types/Type_Void/syntax_t01: MissingCompileTimeError
-Language/Types/Type_Void/syntax_t04: MissingCompileTimeError
+Language/Types/Type_Void/syntax_t02: CompileTimeError # Please triage this failure
 Language/Types/Type_Void/syntax_t05: MissingCompileTimeError, Crash
 Language/Types/Type_Void/syntax_t08: MissingCompileTimeError
 Language/Variables/final_t01/01: CompileTimeError # co19 issue 77
 Language/Variables/final_t02/01: CompileTimeError # co19 issue 77
 Language/Variables/local_variable_t01: MissingCompileTimeError # Issue 21050
-LayoutTests/fast/css/font-face-cache-bug_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
 LayoutTests/fast/dom/HTMLLinkElement/link-onload-stylesheet-with-import_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
 LayoutTests/fast/dom/css-innerHTML_t01: SkipByDesign # Test is incorrect.
 LayoutTests/fast/dom/mutation-event-remove-inserted-node_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
@@ -397,6 +390,7 @@
 LayoutTests/fast/canvas/canvas-strokePath-gradient-shadow_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/draw-custom-focus-ring_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/getPutImageDataPairTest_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/gradient-addColorStop-with-invalid-color_t01: RuntimeError
 LayoutTests/fast/canvas/rgba-parsing_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/setWidthResetAfterForcedRender_t01: Skip # Times out. Please triage this failure
 LayoutTests/fast/canvas/webgl/bad-arguments-test_t01: RuntimeError # Please triage this failure
@@ -501,17 +495,10 @@
 LayoutTests/fast/css/ex-unit-with-no-x-height_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/first-child-display-change-inverse_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/focus-display-block-inline_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-face-cache-bug_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-face-insert-link_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-face-multiple-ranges-for-unicode-range_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-face-unicode-range-load_t01: Skip # Please triage this failure
-LayoutTests/fast/css/font-face-unicode-range-monospace_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: Skip # Times out, Runtime error. Please triage this failure
-LayoutTests/fast/css/font-family-trailing-bracket-gunk_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-shorthand-from-longhands_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/fontfaceset-download-error_t01: Skip # Timeout: issue 28722. Runtime error not triaged
 LayoutTests/fast/css/fontfaceset-events_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/css/fontfaceset-loadingdone_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError # co19 issue 14
 LayoutTests/fast/css/getComputedStyle/computed-style-font_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/getComputedStyle/font-family-fallback-reset_t01: RuntimeError # Please triage this failure
@@ -1053,7 +1040,6 @@
 LibTest/html/HttpRequestUpload/onLoadEnd_A01_t01: Skip # Times out. Please triage this failure
 LibTest/html/HttpRequestUpload/onLoadStart_A01_t01: Skip # Times out. Please triage this failure
 LibTest/html/HttpRequestUpload/onLoad_A01_t01: Skip # Times out. Please triage this failure
-LibTest/html/IFrameElement/IFrameElement.created_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/IFrameElement/attributeChanged_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/IFrameElement/attributes_setter_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/IFrameElement/blur_A01_t01: Skip # Times out. Please triage this failure
@@ -1108,14 +1094,6 @@
 WebPlatformTest/custom-elements/concepts/type_A03_t01: RuntimeError # Please triage this failure
 WebPlatformTest/custom-elements/concepts/type_A05_t01: RuntimeError # Please triage this failure
 WebPlatformTest/custom-elements/concepts/type_A06_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A02_t01: RuntimeError # Issue 25155
-WebPlatformTest/custom-elements/instantiating/createElementNS_A03_t01: RuntimeError # Issue 25155
-WebPlatformTest/custom-elements/instantiating/createElementNS_A04_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A02_t01: RuntimeError # Issue 25155
-WebPlatformTest/custom-elements/instantiating/createElement_A03_t01: RuntimeError # Issue 25155
-WebPlatformTest/custom-elements/instantiating/createElement_A04_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t01: RuntimeError # Issue 25155
-WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t02: RuntimeError # Issue 25155
 WebPlatformTest/dom/EventTarget/dispatchEvent_A02_t01: RuntimeError # Please triage this failure
 WebPlatformTest/dom/EventTarget/dispatchEvent_A03_t01: Skip # Times out. Please triage this failure
 WebPlatformTest/dom/events/type_A01_t01: RuntimeError # Please triage this failure
@@ -2560,12 +2538,9 @@
 LayoutTests/fast/css/first-child-display-change-inverse_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/focus-display-block-inline_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-face-insert-link_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-family-trailing-bracket-gunk_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-property-priority_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-shorthand-from-longhands_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-shorthand-mix-inherit_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/fontface-properties_t01: RuntimeError # Uses FontFace class, not defined for this browser.
-LayoutTests/fast/css/fontfaceset-download-error_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/getComputedStyle/computed-style-border-image_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/getComputedStyle/computed-style-font_t01: RuntimeError # Please triage this failure
@@ -4060,11 +4035,9 @@
 LayoutTests/fast/css/font-face-unicode-range-load_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-family-initial-shorthand_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-family-trailing-bracket-gunk_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-shorthand-from-longhands_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-shorthand-mix-inherit_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/fontface-properties_t01: RuntimeError # Uses FontFace class, not defined for this browser
-LayoutTests/fast/css/fontfaceset-download-error_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/fontfaceset-download-error_t01: RuntimeError
 LayoutTests/fast/css/fontfaceset-events_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/fontfaceset-loadingdone_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/getComputedStyle/computed-style-border-image_t01: RuntimeError # Please triage this failure
@@ -7061,6 +7034,7 @@
 LibTest/core/int/toRadixString_A01_t01: RuntimeError, OK # Bad test: uses Expect.fail, Expect.throws, assumes case of result, and uses unsupported radixes.
 
 [ $compiler == dart2js && $minified ]
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/no_such_method_t01: RuntimeError # Issue 32434
 LibTest/typed_data/Float32List/runtimeType_A01_t01: Fail # co19-roll r559: Please triage this failure
 LibTest/typed_data/Float32x4List/runtimeType_A01_t01: Fail # co19-roll r559: Please triage this failure
 LibTest/typed_data/Float64List/runtimeType_A01_t01: Fail # co19-roll r559: Please triage this failure
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index 5b34f75..302d5a6 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -3,6 +3,15 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == fasta ]
+Language/Classes/definition_t24: MissingCompileTimeError
+Language/Types/Type_Void/syntax_t05: MissingCompileTimeError
+Language/Types/Type_Void/syntax_t08: MissingCompileTimeError
+Language/Types/Type_Void/syntax_t09: MissingCompileTimeError
+LayoutTests/*: Skip # TODO(ahe): Make dart:html available.
+LibTest/html/*: Skip # TODO(ahe): Make dart:html available.
+WebPlatformTest/*: Skip # TODO(ahe): Make dart:html available.
+
+[ $compiler == fasta && $strong ]
 Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t01: MissingCompileTimeError
 Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t02: MissingCompileTimeError
 Language/Classes/Constructors/Constant_Constructors/invalid_constant_initializer_t02: MissingCompileTimeError
@@ -16,6 +25,31 @@
 Language/Classes/same_name_instance_and_static_members_t02: MissingCompileTimeError
 Language/Classes/same_name_instance_and_static_members_t03: MissingCompileTimeError
 Language/Classes/same_name_instance_and_static_members_t04: MissingCompileTimeError
+Language/Expressions/Constants/exception_t01: MissingCompileTimeError
+Language/Expressions/Constants/exception_t03: MissingCompileTimeError
+Language/Expressions/Constants/no_other_constant_expressions_t11: MissingCompileTimeError
+Language/Expressions/Constants/ternary_operator_t02: MissingCompileTimeError
+Language/Expressions/Instance_Creation/Const/exception_t01: MissingCompileTimeError
+Language/Metadata/compilation_t03: MissingCompileTimeError
+Language/Mixins/Mixin_Application/error_t01: MissingCompileTimeError
+Language/Mixins/Mixin_Application/error_t02: MissingCompileTimeError
+
+[ $compiler == fasta && !$strong ]
+Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t01: MissingCompileTimeError
+Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t02: MissingCompileTimeError
+Language/Classes/Constructors/Constant_Constructors/invalid_constant_initializer_t02: MissingCompileTimeError
+Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t02: MissingCompileTimeError
+Language/Classes/Constructors/Generative_Constructors/initializing_formals_execution_t02: MissingCompileTimeError
+Language/Classes/Getters/same_name_method_t03: MissingCompileTimeError
+Language/Classes/Getters/same_name_method_t04: MissingCompileTimeError
+Language/Classes/Getters/same_name_method_t05: MissingCompileTimeError
+Language/Classes/Getters/same_name_method_t07: MissingCompileTimeError
+Language/Classes/Superinterfaces/more_than_once_t01: MissingCompileTimeError
+Language/Classes/Superinterfaces/superclass_as_superinterface_t01: MissingCompileTimeError
+Language/Classes/same_name_instance_and_static_members_t01: MissingCompileTimeError
+Language/Classes/same_name_instance_and_static_members_t02: MissingCompileTimeError
+Language/Classes/same_name_instance_and_static_members_t03: MissingCompileTimeError
+Language/Classes/same_name_instance_and_static_members_t04: MissingCompileTimeError
 Language/Expressions/Constants/bitwise_operators_t05: MissingCompileTimeError
 Language/Expressions/Constants/depending_on_itself_t01: MissingCompileTimeError
 Language/Expressions/Constants/depending_on_itself_t02: MissingCompileTimeError
@@ -32,12 +66,1549 @@
 Language/Metadata/compilation_t03: MissingCompileTimeError
 Language/Mixins/Mixin_Application/error_t01: MissingCompileTimeError
 Language/Mixins/Mixin_Application/error_t02: MissingCompileTimeError
-LayoutTests/*: CompileTimeError # TODO(ahe): Make dart:html available.
-LibTest/html/*: CompileTimeError # TODO(ahe): Make dart:html available.
-WebPlatformTest/*: CompileTimeError # TODO(ahe): Make dart:html available.
-WebPlatformTest/Utils/test/testFail_t01: Pass # TODO(ahe): Make dart:html available.
 
-[ $fasta ]
+[ $fasta && $strong ]
+Language/Classes/Abstract_Instance_Members/override_less_positional_parameters_t01: CompileTimeError
+Language/Classes/Abstract_Instance_Members/override_less_positional_parameters_t02: CompileTimeError
+Language/Classes/Abstract_Instance_Members/override_more_required_parameters_t01: CompileTimeError
+Language/Classes/Abstract_Instance_Members/override_more_required_parameters_t02: CompileTimeError
+Language/Classes/Abstract_Instance_Members/override_more_required_parameters_t03: CompileTimeError
+Language/Classes/Abstract_Instance_Members/override_more_required_parameters_t04: CompileTimeError
+Language/Classes/Abstract_Instance_Members/override_no_named_parameters_t01: CompileTimeError
+Language/Classes/Abstract_Instance_Members/override_no_named_parameters_t05: CompileTimeError
+Language/Classes/Abstract_Instance_Members/override_no_named_parameters_t06: CompileTimeError
+Language/Classes/Abstract_Instance_Members/override_not_a_subtype_t01: CompileTimeError
+Language/Classes/Abstract_Instance_Members/override_not_a_subtype_t02: CompileTimeError
+Language/Classes/Abstract_Instance_Members/override_not_a_subtype_t03: CompileTimeError
+Language/Classes/Abstract_Instance_Members/override_not_a_subtype_t04: CompileTimeError
+Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t03: MissingCompileTimeError
+Language/Classes/Constructors/Constant_Constructors/potentially_constant_expression_t01: MissingCompileTimeError
+Language/Classes/Constructors/Factories/accessible_class_t01/01: CompileTimeError
+Language/Classes/Constructors/Factories/accessible_class_t02/01: CompileTimeError
+Language/Classes/Constructors/Factories/accessible_class_t03/01: CompileTimeError
+Language/Classes/Constructors/Factories/accessible_class_t04/01: CompileTimeError
+Language/Classes/Constructors/Factories/accessible_class_t04/02: CompileTimeError
+Language/Classes/Constructors/Factories/const_modifier_t01: MissingCompileTimeError
+Language/Classes/Constructors/Factories/const_modifier_t02: MissingCompileTimeError
+Language/Classes/Constructors/Factories/default_value_t01: MissingCompileTimeError
+Language/Classes/Constructors/Factories/default_value_t02: MissingCompileTimeError
+Language/Classes/Constructors/Factories/function_type_t02: CompileTimeError
+Language/Classes/Constructors/Factories/name_t03: MissingCompileTimeError
+Language/Classes/Constructors/Factories/name_t05: MissingCompileTimeError
+Language/Classes/Constructors/Factories/redirecting_constructor_call_t01: CompileTimeError
+Language/Classes/Constructors/Factories/redirecting_constructor_call_t02: CompileTimeError
+Language/Classes/Constructors/Factories/return_type_t02: CompileTimeError
+Language/Classes/Constructors/Factories/return_type_t03: CompileTimeError
+Language/Classes/Constructors/Factories/return_type_t06: CompileTimeError
+Language/Classes/Constructors/Factories/return_type_t07: CompileTimeError
+Language/Classes/Constructors/Factories/return_wrong_type_t01: CompileTimeError
+Language/Classes/Constructors/Factories/return_wrong_type_t02: CompileTimeError
+Language/Classes/Constructors/Factories/return_wrong_type_t03: CompileTimeError
+Language/Classes/Constructors/Factories/return_wrong_type_t04: CompileTimeError
+Language/Classes/Constructors/Factories/syntax_t01: CompileTimeError
+Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t03: CompileTimeError
+Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t04: CompileTimeError
+Language/Classes/Constructors/Generative_Constructors/execution_t04: MissingCompileTimeError
+Language/Classes/Constructors/Generative_Constructors/execution_t05: MissingCompileTimeError
+Language/Classes/Constructors/Generative_Constructors/execution_t06: MissingCompileTimeError
+Language/Classes/Constructors/Generative_Constructors/execution_t07: MissingCompileTimeError
+Language/Classes/Constructors/Generative_Constructors/execution_t12: MissingCompileTimeError
+Language/Classes/Constructors/Generative_Constructors/explicit_type_t01: CompileTimeError
+Language/Classes/Constructors/Generative_Constructors/explicit_type_t02: CompileTimeError
+Language/Classes/Constructors/Generative_Constructors/initializers_t15: CompileTimeError
+Language/Classes/Constructors/Generative_Constructors/initializing_this_t03: CompileTimeError
+Language/Classes/Constructors/Generative_Constructors/redirection_t03: MissingCompileTimeError
+Language/Classes/Constructors/Generative_Constructors/redirection_t07: MissingCompileTimeError
+Language/Classes/Constructors/Generative_Constructors/redirection_t08: MissingCompileTimeError
+Language/Classes/Constructors/implicit_constructor_t03: CompileTimeError
+Language/Classes/Getters/override_t01: CompileTimeError
+Language/Classes/Getters/override_t04: CompileTimeError
+Language/Classes/Getters/static_getter_t02: CompileTimeError
+Language/Classes/Getters/static_t01: CompileTimeError
+Language/Classes/Getters/type_object_t01: CompileTimeError
+Language/Classes/Getters/type_object_t02: CompileTimeError
+Language/Classes/Instance_Methods/Operators/syntax_t01: CompileTimeError
+Language/Classes/Instance_Methods/override_fewer_parameters_t01: CompileTimeError
+Language/Classes/Instance_Methods/override_fewer_parameters_t02: CompileTimeError
+Language/Classes/Instance_Methods/override_more_parameters_t01: CompileTimeError
+Language/Classes/Instance_Methods/override_more_parameters_t02: CompileTimeError
+Language/Classes/Instance_Methods/override_named_parameters_t01: CompileTimeError
+Language/Classes/Instance_Methods/override_named_parameters_t02: CompileTimeError
+Language/Classes/Instance_Methods/override_named_parameters_t05: CompileTimeError
+Language/Classes/Instance_Methods/override_subtype_t01: CompileTimeError
+Language/Classes/Instance_Methods/override_subtype_t02: CompileTimeError
+Language/Classes/Instance_Methods/override_subtype_t03: CompileTimeError
+Language/Classes/Instance_Methods/override_subtype_t04: CompileTimeError
+Language/Classes/Instance_Methods/override_subtype_t05: CompileTimeError
+Language/Classes/Instance_Methods/override_subtype_t06: CompileTimeError
+Language/Classes/Instance_Variables/constant_t01: MissingCompileTimeError
+Language/Classes/Instance_Variables/definition_t03: CompileTimeError
+Language/Classes/Setters/override_t01: CompileTimeError
+Language/Classes/Setters/override_t03: CompileTimeError
+Language/Classes/Setters/same_name_getter_different_type_t02: CompileTimeError
+Language/Classes/Setters/type_object_t01: CompileTimeError
+Language/Classes/Setters/type_object_t02: CompileTimeError
+Language/Classes/Static_Methods/declaration_t03: CompileTimeError
+Language/Classes/Static_Methods/type_object_t01: CompileTimeError
+Language/Classes/Static_Methods/type_object_t02: CompileTimeError
+Language/Classes/Static_Variables/inheritance_t01: CompileTimeError
+Language/Classes/Superclasses/Inheritance_and_Overriding/inheritance_t03: CompileTimeError
+Language/Classes/Superclasses/Inheritance_and_Overriding/inheritance_t05: CompileTimeError
+Language/Classes/Superclasses/Inheritance_and_Overriding/inheritance_t06: CompileTimeError
+Language/Classes/Superclasses/wrong_superclass_t08: MissingCompileTimeError
+Language/Classes/Superinterfaces/implicit_interface_t01: CompileTimeError
+Language/Classes/Superinterfaces/implicit_interface_t02: CompileTimeError
+Language/Classes/Superinterfaces/no_member_t02: CompileTimeError
+Language/Classes/Superinterfaces/wrong_type_t05: MissingCompileTimeError
+Language/Classes/definition_t24: MissingCompileTimeError
+Language/Classes/same_name_type_variable_t04: MissingCompileTimeError
+Language/Classes/same_name_type_variable_t07: MissingCompileTimeError
+Language/Enums/declaration_equivalent_t03: CompileTimeError
+Language/Enums/declaration_equivalent_t05: CompileTimeError
+Language/Enums/declaration_equivalent_t08: CompileTimeError
+Language/Errors_and_Warnings/static_warning_t01: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t01/01: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t01/03: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t01/05: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t01/06: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t01/07: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t01/08: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t01/10: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t01/11: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t01/14: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t07/01: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t08/01: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t11/01: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t12/01: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t13/01: CompileTimeError
+Language/Expressions/Additive_Expressions/syntax_t14/01: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/01: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/02: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/03: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/04: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/05: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/06: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/07: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/08: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/09: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/10: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/11: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/14: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/15: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/17: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/22: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/24: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/25: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/26: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/27: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/30: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/31: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/32: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/33: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/34: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/35: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/36: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/37: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/38: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/39: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/42: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t01/43: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t06/01: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t08/01: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t09/01: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t26/01: CompileTimeError
+Language/Expressions/Assignable_Expressions/syntax_t26/02: CompileTimeError
+Language/Expressions/Assignment/Compound_Assignment/null_aware_static_warning_compound_t01/01: CompileTimeError
+Language/Expressions/Assignment/Compound_Assignment/null_aware_static_warning_expression_t01/01: CompileTimeError
+Language/Expressions/Assignment/Compound_Assignment/null_aware_static_warning_indexed_t01/01: CompileTimeError
+Language/Expressions/Assignment/Compound_Assignment/null_aware_static_warning_static_t01/01: CompileTimeError
+Language/Expressions/Assignment/Compound_Assignment/null_aware_static_warning_super_t01/01: CompileTimeError
+Language/Expressions/Assignment/Compound_Assignment/null_aware_static_warning_variable_t01/01: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_dynamic_error_t01: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_dynamic_error_t02: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_failed_t01: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_failed_t02: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_failed_t03: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_failed_t04: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_failed_t05: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_failed_t06: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_static_type_t01: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_static_type_t02: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_static_type_t03: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_static_warning_t01: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_static_warning_t02: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_static_warning_t03: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_t04: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_t07: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_t08: CompileTimeError
+Language/Expressions/Assignment/expression_assignment_value_t02: CompileTimeError
+Language/Expressions/Assignment/indexed_expression_static_type_t02/01: CompileTimeError
+Language/Expressions/Assignment/indexed_expression_super_static_type_t02/01: CompileTimeError
+Language/Expressions/Assignment/indexed_expression_super_t03: CompileTimeError
+Language/Expressions/Assignment/indexed_expression_super_t04: CompileTimeError
+Language/Expressions/Assignment/indexed_expression_t03: CompileTimeError
+Language/Expressions/Assignment/indexed_expression_t04: CompileTimeError
+Language/Expressions/Assignment/no_such_method_t01: CompileTimeError
+Language/Expressions/Assignment/no_such_method_t02: CompileTimeError
+Language/Expressions/Assignment/no_such_method_t03: CompileTimeError
+Language/Expressions/Assignment/no_such_method_t04: CompileTimeError
+Language/Expressions/Assignment/no_such_method_t05: CompileTimeError
+Language/Expressions/Assignment/no_such_method_t06: CompileTimeError
+Language/Expressions/Assignment/no_such_method_t07: CompileTimeError
+Language/Expressions/Assignment/no_such_method_t08: CompileTimeError
+Language/Expressions/Assignment/no_such_method_t09: CompileTimeError
+Language/Expressions/Assignment/null_aware_assignment_static_type_t01: CompileTimeError
+Language/Expressions/Assignment/null_aware_assignment_static_warning_t01/01: CompileTimeError
+Language/Expressions/Assignment/static_assignment_t03: CompileTimeError
+Language/Expressions/Assignment/static_type_t01: CompileTimeError
+Language/Expressions/Assignment/static_type_t02: CompileTimeError
+Language/Expressions/Assignment/static_type_t03: CompileTimeError
+Language/Expressions/Assignment/static_type_t06: CompileTimeError
+Language/Expressions/Assignment/static_warning_t01/01: CompileTimeError
+Language/Expressions/Assignment/static_warning_t02/01: CompileTimeError
+Language/Expressions/Assignment/static_warning_t03/01: CompileTimeError
+Language/Expressions/Assignment/static_warning_t04/01: CompileTimeError
+Language/Expressions/Assignment/super_assignment_dynamic_error_t01: CompileTimeError
+Language/Expressions/Assignment/super_assignment_failed_t01: CompileTimeError
+Language/Expressions/Assignment/super_assignment_failed_t02: CompileTimeError
+Language/Expressions/Assignment/super_assignment_failed_t03: CompileTimeError
+Language/Expressions/Assignment/super_assignment_failed_t04: CompileTimeError
+Language/Expressions/Assignment/super_assignment_failed_t05: CompileTimeError
+Language/Expressions/Assignment/super_assignment_static_type_t01: CompileTimeError
+Language/Expressions/Assignment/super_assignment_static_warning_t01: CompileTimeError
+Language/Expressions/Assignment/super_assignment_static_warning_t02: CompileTimeError
+Language/Expressions/Assignment/super_assignment_static_warning_t03: CompileTimeError
+Language/Expressions/Assignment/super_assignment_static_warning_t04/01: CompileTimeError
+Language/Expressions/Assignment/super_assignment_t06: CompileTimeError
+Language/Expressions/Assignment/super_assignment_value_t02: CompileTimeError
+Language/Expressions/Assignment/this_assignment_t02: CompileTimeError
+Language/Expressions/Assignment/top_level_assignment_t05: CompileTimeError
+Language/Expressions/Assignment/variable_assignment_dynamic_error_t01: CompileTimeError
+Language/Expressions/Assignment/variable_assignment_static_type_t01: CompileTimeError
+Language/Expressions/Assignment/variable_assignment_static_type_t02: CompileTimeError
+Language/Expressions/Assignment/variable_assignment_static_type_t03: CompileTimeError
+Language/Expressions/Assignment/variable_assignment_static_type_t04/01: CompileTimeError
+Language/Expressions/Assignment/variable_assignment_t03: CompileTimeError
+Language/Expressions/Assignment/variable_assignment_t04: CompileTimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t05: CompileTimeError
+Language/Expressions/Await_Expressions/static_type_t02: CompileTimeError
+Language/Expressions/Await_Expressions/static_type_t04: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/01: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/02: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/03: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/04: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/05: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/06: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/07: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/11: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/12: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/13: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/14: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/15: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/16: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/17: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/18: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/19: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/20: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t01/24: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t12/01: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t13/01: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t14: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t15/01: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t16/01: CompileTimeError
+Language/Expressions/Bitwise_Expressions/syntax_t17/01: CompileTimeError
+Language/Expressions/Booleans/Boolean_Conversion/conversion_t01: CompileTimeError
+Language/Expressions/Booleans/Boolean_Conversion/definition_t01: CompileTimeError
+Language/Expressions/Booleans/Boolean_Conversion/definition_t02: CompileTimeError
+Language/Expressions/Booleans/Boolean_Conversion/definition_t03: CompileTimeError
+Language/Expressions/Booleans/static_type_t02: CompileTimeError
+Language/Expressions/Conditional/evaluation_t01: CompileTimeError
+Language/Expressions/Conditional/evaluation_t03: CompileTimeError
+Language/Expressions/Conditional/evaluation_t04: CompileTimeError
+Language/Expressions/Conditional/static_type_t02: CompileTimeError
+Language/Expressions/Conditional/static_type_t03: CompileTimeError
+Language/Expressions/Conditional/syntax_t01/01: CompileTimeError
+Language/Expressions/Conditional/syntax_t01/03: CompileTimeError
+Language/Expressions/Conditional/syntax_t01/05: CompileTimeError
+Language/Expressions/Conditional/syntax_t01/06: CompileTimeError
+Language/Expressions/Conditional/syntax_t01/07: CompileTimeError
+Language/Expressions/Conditional/syntax_t01/08: CompileTimeError
+Language/Expressions/Conditional/syntax_t01/09: CompileTimeError
+Language/Expressions/Conditional/syntax_t01/10: CompileTimeError
+Language/Expressions/Conditional/syntax_t01/11: CompileTimeError
+Language/Expressions/Conditional/syntax_t01/12: CompileTimeError
+Language/Expressions/Conditional/syntax_t01/14: CompileTimeError
+Language/Expressions/Conditional/syntax_t10/01: CompileTimeError
+Language/Expressions/Conditional/syntax_t12/01: CompileTimeError
+Language/Expressions/Conditional/syntax_t14/01: CompileTimeError
+Language/Expressions/Conditional/type_not_bool_t01: CompileTimeError
+Language/Expressions/Conditional/type_t06: CompileTimeError
+Language/Expressions/Conditional/type_t07: CompileTimeError
+Language/Expressions/Conditional/type_t08: CompileTimeError
+Language/Expressions/Conditional/type_t09: CompileTimeError
+Language/Expressions/Constants/depending_on_itself_t03: MissingCompileTimeError
+Language/Expressions/Constants/equals_expression_t03: MissingCompileTimeError
+Language/Expressions/Constants/exception_t04: MissingCompileTimeError
+Language/Expressions/Constants/literal_number_t01: CompileTimeError
+Language/Expressions/Constants/literal_string_t02: MissingCompileTimeError
+Language/Expressions/Constants/math_operators_t01: CompileTimeError
+Language/Expressions/Constants/math_operators_t06: CompileTimeError
+Language/Expressions/Equality/static_type_t02: CompileTimeError
+Language/Expressions/Equality/syntax_t01/01: CompileTimeError
+Language/Expressions/Equality/syntax_t01/02: CompileTimeError
+Language/Expressions/Equality/syntax_t01/04: CompileTimeError
+Language/Expressions/Equality/syntax_t01/05: CompileTimeError
+Language/Expressions/Equality/syntax_t01/06: CompileTimeError
+Language/Expressions/Equality/syntax_t01/07: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_dynamic_async_t02: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_dynamic_async_t03: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_dynamic_asyncs_t02: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_dynamic_asyncs_t03: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_dynamic_syncs_t02: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_dynamic_syncs_t03: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_dynamic_t02: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_dynamic_t03: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_dynamic_t04: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_dynamic_t05: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_1_async_t02: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_1_async_t03: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_1_t02: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_1_t03: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_1_t04: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_2_async_t02: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_2_async_t03: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_2_t02: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_2_t03: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_2_t04: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_3_async_t02: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_3_async_t03: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_3_asyncs_t02: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_3_asyncs_t03: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_3_syncs_t02: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_3_syncs_t03: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_3_t02: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_3_t03: CompileTimeError
+Language/Expressions/Function_Expressions/static_type_form_3_t04: CompileTimeError
+Language/Expressions/Function_Expressions/syntax_t05: CompileTimeError
+Language/Expressions/Function_Invocation/Actual_Argument_List_Evaluation/syntax_t01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/actual_type_not_a_subtype_t01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/actual_type_t01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/binding_t01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/binding_t04: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/binding_t05: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/names_matching_t01/01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/names_matching_t02/01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/names_matching_t03/01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/names_matching_t04/01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/number_of_arguments_t01/01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/number_of_arguments_t02/01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/number_of_arguments_t03/01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/number_of_arguments_t04/01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/number_of_arguments_t05/01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/number_of_arguments_t06/01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/number_of_arguments_t07/01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/number_of_arguments_t08/01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/optional_parameter_type_t01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/optional_parameter_type_t02: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/optional_parameter_type_t03: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/optional_parameter_type_t04: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/wrong_static_type_t01: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/wrong_static_type_t02: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/wrong_static_type_t03: CompileTimeError
+Language/Expressions/Function_Invocation/Binding_Actuals_to_Formals/wrong_static_type_t04: CompileTimeError
+Language/Expressions/Function_Invocation/Function_Expression_Invocation/invocation_t02: CompileTimeError
+Language/Expressions/Function_Invocation/Function_Expression_Invocation/not_a_function_expression_t01: CompileTimeError
+Language/Expressions/Function_Invocation/Function_Expression_Invocation/property_extraction_t02: CompileTimeError
+Language/Expressions/Function_Invocation/Function_Expression_Invocation/static_type_dynamic_t02: CompileTimeError
+Language/Expressions/Function_Invocation/Function_Expression_Invocation/static_type_t01: CompileTimeError
+Language/Expressions/Function_Invocation/Function_Expression_Invocation/static_type_t02: CompileTimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/function_expr_invocation_t05: CompileTimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t01: CompileTimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t02: CompileTimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/static_context_invocation_t01: CompileTimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/static_context_invocation_t02: CompileTimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/static_context_invocation_t03: CompileTimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/static_method_invocation_t02: CompileTimeError
+Language/Expressions/Function_Invocation/async_cleanup_t01: CompileTimeError
+Language/Expressions/Function_Invocation/async_cleanup_t02: CompileTimeError
+Language/Expressions/Function_Invocation/async_cleanup_t03: CompileTimeError
+Language/Expressions/Function_Invocation/async_cleanup_t04: CompileTimeError
+Language/Expressions/Function_Invocation/async_cleanup_t05: CompileTimeError
+Language/Expressions/Function_Invocation/async_cleanup_t06: CompileTimeError
+Language/Expressions/Function_Invocation/async_cleanup_t07: CompileTimeError
+Language/Expressions/Function_Invocation/async_cleanup_t08: CompileTimeError
+Language/Expressions/Identifier_Reference/built_in_identifier_t02: CompileTimeError
+Language/Expressions/Identifier_Reference/evaluation_function_t02: CompileTimeError
+Language/Expressions/Identifier_Reference/evaluation_library_or_getter_t02: CompileTimeError
+Language/Expressions/Identifier_Reference/evaluation_library_or_getter_t05: CompileTimeError
+Language/Expressions/Identifier_Reference/evaluation_property_extraction_t01: CompileTimeError
+Language/Expressions/Identifier_Reference/evaluation_property_extraction_t03: CompileTimeError
+Language/Expressions/Identifier_Reference/evaluation_property_extraction_t04: CompileTimeError
+Language/Expressions/Identifier_Reference/evaluation_static_t02: CompileTimeError
+Language/Expressions/Identifier_Reference/evaluation_undeclared_identifier_t01: CompileTimeError
+Language/Expressions/Identifier_Reference/undeclared_identifier_t01: CompileTimeError
+Language/Expressions/Identifier_Reference/undeclared_identifier_t02: CompileTimeError
+Language/Expressions/Identifier_Reference/undeclared_identifier_t03: CompileTimeError
+Language/Expressions/Identifier_Reference/undeclared_identifier_t04: CompileTimeError
+Language/Expressions/Identifier_Reference/undeclared_identifier_t05: CompileTimeError
+Language/Expressions/Identifier_Reference/undeclared_identifier_t06: CompileTimeError
+Language/Expressions/Identifier_Reference/undeclared_identifier_t07: CompileTimeError
+Language/Expressions/Identifier_Reference/undeclared_identifier_t08: CompileTimeError
+Language/Expressions/If_null_Expressions/static_type_t01: CompileTimeError
+Language/Expressions/If_null_Expressions/static_type_t02: CompileTimeError
+Language/Expressions/Instance_Creation/New/abstract_class_t01/01: CompileTimeError
+Language/Expressions/Instance_Creation/New/abstract_class_t02/01: CompileTimeError
+Language/Expressions/Instance_Creation/New/argument_static_type_t01: CompileTimeError
+Language/Expressions/Instance_Creation/New/argument_static_type_t02: CompileTimeError
+Language/Expressions/Instance_Creation/New/body_execution_t02: CompileTimeError
+Language/Expressions/Instance_Creation/New/constructor_same_name_as_class_t01: CompileTimeError
+Language/Expressions/Instance_Creation/New/constructor_same_name_as_class_t02: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t01: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t02: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t03: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t04: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t05: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t06: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t07: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t08: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t09: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t12: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t13: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t14: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t15: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t16: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t17: CompileTimeError
+Language/Expressions/Instance_Creation/New/evaluation_t18: CompileTimeError
+Language/Expressions/Instance_Creation/New/execution_t02: CompileTimeError
+Language/Expressions/Instance_Creation/New/execution_t07: CompileTimeError
+Language/Expressions/Instance_Creation/New/execution_t11: CompileTimeError
+Language/Expressions/Instance_Creation/New/execution_t13: CompileTimeError
+Language/Expressions/Instance_Creation/New/named_constructor_t01: CompileTimeError
+Language/Expressions/Instance_Creation/New/named_constructor_t02: CompileTimeError
+Language/Expressions/Instance_Creation/New/redirecting_factory_constructor_t02: CompileTimeError
+Language/Expressions/Instance_Creation/New/type_argument_t01: CompileTimeError
+Language/Expressions/Instance_Creation/New/type_t01: CompileTimeError
+Language/Expressions/Instance_Creation/New/type_t02: CompileTimeError
+Language/Expressions/Instance_Creation/New/type_t03: CompileTimeError
+Language/Expressions/Instance_Creation/New/type_t05: CompileTimeError
+Language/Expressions/Instance_Creation/New/type_t06: CompileTimeError
+Language/Expressions/Instance_Creation/New/type_t07: CompileTimeError
+Language/Expressions/Instance_Creation/malformed_or_malbounded_t01: CompileTimeError
+Language/Expressions/Instance_Creation/malformed_or_malbounded_t03: CompileTimeError
+Language/Expressions/Instance_Creation/malformed_or_malbounded_t07: CompileTimeError
+Language/Expressions/Lists/runtime_list_literal_t03: CompileTimeError
+Language/Expressions/Lists/static_type_dynamic_t01: CompileTimeError
+Language/Expressions/Lists/static_type_t01: CompileTimeError
+Language/Expressions/Lists/static_type_t02: CompileTimeError
+Language/Expressions/Lists/static_type_t03: CompileTimeError
+Language/Expressions/Lists/static_type_t04: CompileTimeError
+Language/Expressions/Lists/static_type_t05: CompileTimeError
+Language/Expressions/Lists/value_of_a_constant_list_t02: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/evaluation_form_and_t01: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/static_type_t02: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/syntax_t01: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/syntax_t10/01: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/syntax_t11/01: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/syntax_t12/01: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/syntax_t13/01: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/syntax_t14/01: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/syntax_t15/01: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t09: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t10: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t11: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t13: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t15: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t18: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t19: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t20: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t21: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t27: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t28: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t29: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t30: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t31: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/type_t32: CompileTimeError
+Language/Expressions/Lookup/Getter_and_Setter_Lookup/definition_t03: CompileTimeError
+Language/Expressions/Lookup/Getter_and_Setter_Lookup/definition_t09: CompileTimeError
+Language/Expressions/Lookup/Getter_and_Setter_Lookup/definition_t10: CompileTimeError
+Language/Expressions/Lookup/Method_Lookup/superclass_t07: CompileTimeError
+Language/Expressions/Lookup/Method_Lookup/superclass_t08: CompileTimeError
+Language/Expressions/Maps/key_value_equals_operator_t01: MissingCompileTimeError
+Language/Expressions/Maps/key_value_equals_operator_t02: CompileTimeError
+Language/Expressions/Maps/static_type_dynamic_t01: CompileTimeError
+Language/Expressions/Maps/static_type_t02: CompileTimeError
+Language/Expressions/Maps/static_type_t03: CompileTimeError
+Language/Expressions/Maps/static_type_t04: CompileTimeError
+Language/Expressions/Maps/static_type_t05: CompileTimeError
+Language/Expressions/Method_Invocation/Cascaded_Invocations/cascaded_expression_t02: CompileTimeError
+Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t19: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/accessible_instance_member_t01: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/accessible_instance_member_t02: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/accessible_instance_member_t03: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/accessible_instance_member_t04: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/conditional_t06: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/conditional_warning_t01/01: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/evaluation_t04: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/evaluation_t08: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/function_type_t02: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t05: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t06: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t07: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t08: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t09: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t10: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t11: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t12: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t13: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t14: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t15: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t16: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t19: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t20: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/static_type_t04: CompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t01: CompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t02: CompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t03: CompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t04: CompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t05: CompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/evaluation_t05: CompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t01: CompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t02: CompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t03: CompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t04: CompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/invocation_t02: MissingCompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/method_lookup_failed_t02: CompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/static_type_dynamic_t02: CompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/wrong_type_t01: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t01/02: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t01/03: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t01/04: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t01/05: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t01/06: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t01/07: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t01/08: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t01/12: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t01/13: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t01/16: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t10/01: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t11/01: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t14/01: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t15/01: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t16/01: CompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t17/01: CompileTimeError
+Language/Expressions/Null/instantiate_t01: CompileTimeError
+Language/Expressions/Numbers/static_type_of_double_t02: CompileTimeError
+Language/Expressions/Numbers/static_type_of_int_t01: CompileTimeError
+Language/Expressions/Numbers/static_type_of_int_t02: CompileTimeError
+Language/Expressions/Numbers/syntax_t06: CompileTimeError
+Language/Expressions/Numbers/syntax_t09: CompileTimeError
+Language/Expressions/Numbers/syntax_t10: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/01: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/02: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/03: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/04: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/05: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/06: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/07: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/08: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/09: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/10: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/11: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/12: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/13: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/14: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/15: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/16: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/17: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/18: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/19: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/20: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/21: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/22: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/23: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/24: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/25: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/26: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/27: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/34: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/35: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/36: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/37: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/38: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/39: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t01/40: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t02/01: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t03/01: CompileTimeError
+Language/Expressions/Postfix_Expressions/syntax_t05/01: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/getter_value_t06: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/instance_of_type_getter_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/instance_of_type_getter_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/instance_of_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/instance_of_type_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/no_such_method_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/no_such_method_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/proxy_annotation_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/proxy_annotation_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/proxy_annotation_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/proxy_annotation_t04: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/proxy_annotation_t05: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/proxy_annotation_t06: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/proxy_annotation_t07: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/proxy_annotation_t08: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/static_type_t05: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/static_type_t08: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/static_type_warning_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/static_type_warning_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/static_type_warning_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/static_type_warning_t04/01: CompileTimeError
+Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/no_instance_t01/01: CompileTimeError
+Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/no_such_method_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/no_such_method_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/static_type_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/static_type_warning_t01: CompileTimeError
+Language/Expressions/Property_Extraction/conditional_t06: Crash
+Language/Expressions/Property_Extraction/static_type_warning_t01/01: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/01: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/02: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/03: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/04: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/05: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/06: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/07: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/12: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/13: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/14: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/15: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/16: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/17: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/20: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/25: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/26: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t01/27: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t18/01: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t19/01: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t20/01: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t21/01: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t22/01: CompileTimeError
+Language/Expressions/Relational_Expressions/syntax_t23/01: CompileTimeError
+Language/Expressions/Shift/syntax_t01/01: CompileTimeError
+Language/Expressions/Shift/syntax_t01/02: CompileTimeError
+Language/Expressions/Shift/syntax_t01/03: CompileTimeError
+Language/Expressions/Shift/syntax_t01/04: CompileTimeError
+Language/Expressions/Shift/syntax_t01/05: CompileTimeError
+Language/Expressions/Shift/syntax_t01/06: CompileTimeError
+Language/Expressions/Shift/syntax_t01/10: CompileTimeError
+Language/Expressions/Shift/syntax_t01/11: CompileTimeError
+Language/Expressions/Shift/syntax_t01/12: CompileTimeError
+Language/Expressions/Shift/syntax_t01/13: CompileTimeError
+Language/Expressions/Shift/syntax_t01/14: CompileTimeError
+Language/Expressions/Shift/syntax_t01/15: CompileTimeError
+Language/Expressions/Shift/syntax_t01/18: CompileTimeError
+Language/Expressions/Shift/syntax_t01/19: CompileTimeError
+Language/Expressions/Shift/syntax_t01/20: CompileTimeError
+Language/Expressions/Shift/syntax_t09/01: CompileTimeError
+Language/Expressions/Shift/syntax_t10/01: CompileTimeError
+Language/Expressions/Shift/syntax_t11/01: CompileTimeError
+Language/Expressions/Shift/syntax_t12/01: CompileTimeError
+Language/Expressions/Shift/syntax_t13/01: CompileTimeError
+Language/Expressions/Shift/syntax_t14/01: CompileTimeError
+Language/Expressions/Strings/String_Interpolation/double_quote_t02: CompileTimeError
+Language/Expressions/Strings/String_Interpolation/double_quote_t04: CompileTimeError
+Language/Expressions/Strings/String_Interpolation/single_quote_t02: CompileTimeError
+Language/Expressions/Strings/String_Interpolation/single_quote_t03: CompileTimeError
+Language/Expressions/Strings/String_Interpolation/syntax_t07: CompileTimeError
+Language/Expressions/Strings/String_Interpolation/syntax_t13: CompileTimeError
+Language/Expressions/Strings/static_type_t02: CompileTimeError
+Language/Expressions/Strings/static_type_t03: CompileTimeError
+Language/Expressions/Strings/static_type_t04: CompileTimeError
+Language/Expressions/Strings/static_type_t05: CompileTimeError
+Language/Expressions/Strings/static_type_t06: CompileTimeError
+Language/Expressions/Strings/static_type_t07: CompileTimeError
+Language/Expressions/Strings/static_type_t08: CompileTimeError
+Language/Expressions/Strings/static_type_t09: CompileTimeError
+Language/Expressions/This/placement_t04: MissingCompileTimeError
+Language/Expressions/This/static_type_t01: CompileTimeError
+Language/Expressions/Throw/syntax_t02: MissingCompileTimeError
+Language/Expressions/Throw/throw_various_types_t01: CompileTimeError
+Language/Expressions/Type_Cast/evaluation_t04: CompileTimeError
+Language/Expressions/Type_Cast/evaluation_t05: CompileTimeError
+Language/Expressions/Type_Cast/evaluation_t06: CompileTimeError
+Language/Expressions/Type_Cast/evaluation_t07: CompileTimeError
+Language/Expressions/Type_Cast/evaluation_t08: CompileTimeError
+Language/Expressions/Type_Cast/evaluation_t09: CompileTimeError
+Language/Expressions/Type_Cast/evaluation_t10: CompileTimeError
+Language/Expressions/Type_Cast/static_type_t02: CompileTimeError
+Language/Expressions/Type_Test/definition_t01: CompileTimeError
+Language/Expressions/Type_Test/definition_t02: CompileTimeError
+Language/Expressions/Type_Test/definition_t03: CompileTimeError
+Language/Expressions/Type_Test/definition_t04: CompileTimeError
+Language/Expressions/Type_Test/definition_t05: CompileTimeError
+Language/Expressions/Type_Test/definition_t06: CompileTimeError
+Language/Expressions/Type_Test/definition_t07: CompileTimeError
+Language/Expressions/Type_Test/definition_t08: CompileTimeError
+Language/Expressions/Type_Test/evaluation_t03: CompileTimeError
+Language/Expressions/Type_Test/evaluation_t04: CompileTimeError
+Language/Expressions/Type_Test/evaluation_t05: CompileTimeError
+Language/Expressions/Type_Test/evaluation_t06: CompileTimeError
+Language/Expressions/Type_Test/evaluation_t07: CompileTimeError
+Language/Expressions/Type_Test/evaluation_t08: CompileTimeError
+Language/Expressions/Type_Test/evaluation_t09: CompileTimeError
+Language/Expressions/Type_Test/evaluation_t10: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t02/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t04/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t05/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/02: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/03: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/04: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/05: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/06: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/07: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/08: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/09: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/10: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/11: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/12: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/16: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/17: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/18: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/21: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/24: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/25: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/27: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/28: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/29: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/30: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/31: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t10/33: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t11/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t12/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t13/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t17/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t18/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t19/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t20/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t21/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t22/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/01: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/02: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/03: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/04: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/05: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/06: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/07: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/08: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/10: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/11: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/12: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/13: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/14: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/15: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/16: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/17: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/18: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/19: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/20: CompileTimeError
+Language/Expressions/Unary_Expressions/syntax_t27/21: CompileTimeError
+Language/Expressions/Unary_Expressions/variable_negative_t03: CompileTimeError
+Language/Functions/Formal_Parameters/Optional_Formals/default_value_t01: MissingCompileTimeError
+Language/Functions/Formal_Parameters/Optional_Formals/default_value_t02: MissingCompileTimeError
+Language/Functions/Formal_Parameters/Optional_Formals/syntax_t06: CompileTimeError
+Language/Functions/Formal_Parameters/Optional_Formals/syntax_t10: CompileTimeError
+Language/Functions/Formal_Parameters/Required_Formals/syntax_t05: CompileTimeError
+Language/Functions/Formal_Parameters/scope_t01: CompileTimeError
+Language/Functions/async_return_type_t01: CompileTimeError
+Language/Functions/generator_return_type_t01: CompileTimeError
+Language/Functions/generator_return_type_t02: CompileTimeError
+Language/Functions/syntax_t01: CompileTimeError
+Language/Functions/syntax_t36: CompileTimeError
+Language/Functions/syntax_t37: CompileTimeError
+Language/Functions/syntax_t41: CompileTimeError
+Language/Functions/syntax_t42: CompileTimeError
+Language/Functions/syntax_t45: CompileTimeError
+Language/Functions/syntax_t46: CompileTimeError
+Language/Generics/malformed_t01: CompileTimeError
+Language/Generics/malformed_t02: CompileTimeError
+Language/Generics/scope_t06: CompileTimeError
+Language/Generics/scope_t07: CompileTimeError
+Language/Generics/syntax_t02: Crash
+Language/Generics/syntax_t03: Crash
+Language/Generics/upper_bound_t01: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/inheritance_t01: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/inheritance_t02: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/inheritance_t03: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/inheritance_t04: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/inheritance_t05: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/inheritance_t07: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/not_overriden_members_t02: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_getters_type_t03: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_getters_type_t04: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_getters_type_t05: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_getters_type_t06: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_getters_type_t07: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_getters_type_t08: CompileTimeError
+Language/Libraries_and_Scripts/Exports/reexport_t01: MissingCompileTimeError
+Language/Libraries_and_Scripts/Exports/show_hide_t01: CompileTimeError
+Language/Libraries_and_Scripts/Exports/show_hide_t02: CompileTimeError
+Language/Libraries_and_Scripts/Exports/syntax_t02: CompileTimeError
+Language/Libraries_and_Scripts/Exports/syntax_t03: CompileTimeError
+Language/Libraries_and_Scripts/Imports/dart_core_t02: CompileTimeError
+Language/Libraries_and_Scripts/Imports/dart_core_t03: CompileTimeError
+Language/Libraries_and_Scripts/Imports/dart_core_t04: CompileTimeError
+Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t01/01: CompileTimeError
+Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t02: CompileTimeError
+Language/Libraries_and_Scripts/Imports/invalid_uri_t01: MissingCompileTimeError
+Language/Libraries_and_Scripts/Imports/namespace_changes_t01: CompileTimeError
+Language/Libraries_and_Scripts/Imports/namespace_changes_t02: CompileTimeError
+Language/Libraries_and_Scripts/Imports/namespace_changes_t03: CompileTimeError
+Language/Libraries_and_Scripts/Imports/namespace_changes_t04: CompileTimeError
+Language/Libraries_and_Scripts/Imports/namespace_changes_t05: CompileTimeError
+Language/Libraries_and_Scripts/Imports/namespace_changes_t12: CompileTimeError
+Language/Libraries_and_Scripts/Imports/namespace_changes_t13: CompileTimeError
+Language/Libraries_and_Scripts/Imports/namespace_changes_t15: CompileTimeError
+Language/Libraries_and_Scripts/Imports/namespace_changes_t16: CompileTimeError
+Language/Libraries_and_Scripts/Imports/namespace_changes_t17: CompileTimeError
+Language/Libraries_and_Scripts/Imports/namespace_changes_t19: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t01: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t02/01: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t05: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t06: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t08: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t09/01: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t10: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t11: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t12/01: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t15/01: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t16: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t18: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t19: CompileTimeError
+Language/Libraries_and_Scripts/Imports/same_name_t25: CompileTimeError
+Language/Libraries_and_Scripts/Imports/syntax_t37: CompileTimeError
+Language/Libraries_and_Scripts/Imports/syntax_t38: CompileTimeError
+Language/Libraries_and_Scripts/Parts/static_warning_t01: CompileTimeError
+Language/Libraries_and_Scripts/Scripts/syntax_t11: CompileTimeError
+Language/Libraries_and_Scripts/private_access_t01: CompileTimeError
+Language/Libraries_and_Scripts/private_access_t03: CompileTimeError
+Language/Libraries_and_Scripts/private_access_t04: CompileTimeError
+Language/Mixins/Mixin_Application/abstract_t07: CompileTimeError
+Language/Mixins/Mixin_Application/abstract_t08: CompileTimeError
+Language/Mixins/Mixin_Application/deferred_t01: MissingCompileTimeError
+Language/Mixins/Mixin_Application/syntax_t20: CompileTimeError
+Language/Mixins/declaring_constructor_t05: MissingCompileTimeError
+Language/Mixins/declaring_constructor_t06: MissingCompileTimeError
+Language/Overview/Privacy/private_and_public_t02: CompileTimeError
+Language/Overview/Privacy/private_and_public_t04: CompileTimeError
+Language/Overview/Privacy/private_and_public_t05: CompileTimeError
+Language/Overview/Privacy/private_and_public_t06: CompileTimeError
+Language/Overview/Privacy/private_and_public_t08: CompileTimeError
+Language/Overview/Privacy/private_and_public_t09: CompileTimeError
+Language/Overview/Privacy/private_and_public_t10: CompileTimeError
+Language/Overview/Privacy/private_and_public_t11: CompileTimeError
+Language/Overview/Privacy/private_and_public_t19: CompileTimeError
+Language/Overview/Privacy/private_and_public_t20: CompileTimeError
+Language/Overview/Scoping/hiding_declaration_t05: CompileTimeError
+Language/Overview/Scoping/hiding_declaration_t06: CompileTimeError
+Language/Overview/Scoping/hiding_declaration_t28: CompileTimeError
+Language/Reference/Lexical_Rules/Comments/multi_line_t09: CompileTimeError
+Language/Statements/Assert/execution_t01: CompileTimeError
+Language/Statements/Assert/execution_t02: CompileTimeError
+Language/Statements/Assert/execution_t03: CompileTimeError
+Language/Statements/Assert/execution_t04: CompileTimeError
+Language/Statements/Assert/execution_t05: CompileTimeError
+Language/Statements/Assert/execution_t06: CompileTimeError
+Language/Statements/Assert/execution_t08: CompileTimeError
+Language/Statements/Assert/execution_t09: CompileTimeError
+Language/Statements/Assert/execution_t11: CompileTimeError
+Language/Statements/Assert/production_mode_t01: CompileTimeError
+Language/Statements/Assert/type_t02: CompileTimeError
+Language/Statements/Assert/type_t03: CompileTimeError
+Language/Statements/Assert/type_t04: CompileTimeError
+Language/Statements/Assert/type_t05: CompileTimeError
+Language/Statements/Assert/type_t06: CompileTimeError
+Language/Statements/Assert/type_t07: CompileTimeError
+Language/Statements/Assert/type_t08: CompileTimeError
+Language/Statements/Continue/async_loops_t01: CompileTimeError
+Language/Statements/Continue/async_loops_t02: CompileTimeError
+Language/Statements/Continue/async_loops_t03: CompileTimeError
+Language/Statements/Continue/async_loops_t04: CompileTimeError
+Language/Statements/Continue/async_loops_t05: CompileTimeError
+Language/Statements/Continue/async_loops_t06: CompileTimeError
+Language/Statements/Continue/async_loops_t07: CompileTimeError
+Language/Statements/Continue/async_loops_t08: CompileTimeError
+Language/Statements/Continue/async_loops_t09: CompileTimeError
+Language/Statements/Continue/async_loops_t10: CompileTimeError
+Language/Statements/Continue/control_transfer_t08: CompileTimeError
+Language/Statements/Continue/control_transfer_t09: CompileTimeError
+Language/Statements/Continue/label_t07: MissingCompileTimeError
+Language/Statements/Do/condition_type_t01: CompileTimeError
+Language/Statements/Do/condition_type_t03: CompileTimeError
+Language/Statements/Do/execution_t03: CompileTimeError
+Language/Statements/Expression_Statements/syntax_t01: CompileTimeError
+Language/Statements/Expression_Statements/syntax_t06: CompileTimeError
+Language/Statements/For/Asynchronous_For_in/execution_t01: CompileTimeError
+Language/Statements/For/Asynchronous_For_in/execution_t02: CompileTimeError
+Language/Statements/For/Asynchronous_For_in/execution_t03: CompileTimeError
+Language/Statements/For/For_Loop/execution_t07: CompileTimeError
+Language/Statements/For/For_Loop/execution_t08: CompileTimeError
+Language/Statements/For/syntax_t07: CompileTimeError
+Language/Statements/For/syntax_t12: MissingCompileTimeError
+Language/Statements/For/syntax_t19: MissingCompileTimeError
+Language/Statements/If/condition_evaluation_t01: CompileTimeError
+Language/Statements/If/condition_evaluation_t02: CompileTimeError
+Language/Statements/If/type_t06: CompileTimeError
+Language/Statements/If/type_t07: CompileTimeError
+Language/Statements/If/type_t08: CompileTimeError
+Language/Statements/If/type_t09: CompileTimeError
+Language/Statements/If/wrong_type_t01: CompileTimeError
+Language/Statements/If/wrong_type_t02: CompileTimeError
+Language/Statements/Local_Function_Declaration/reference_before_declaration_t02: CompileTimeError
+Language/Statements/Local_Variable_Declaration/syntax_t01: CompileTimeError
+Language/Statements/Local_Variable_Declaration/syntax_t02: CompileTimeError
+Language/Statements/Local_Variable_Declaration/syntax_t05: CompileTimeError
+Language/Statements/Local_Variable_Declaration/syntax_t06: CompileTimeError
+Language/Statements/Local_Variable_Declaration/syntax_t15: CompileTimeError
+Language/Statements/Local_Variable_Declaration/syntax_t18: CompileTimeError
+Language/Statements/Local_Variable_Declaration/syntax_t19: CompileTimeError
+Language/Statements/Return/runtime_type_t01: CompileTimeError
+Language/Statements/Return/runtime_type_t04: CompileTimeError
+Language/Statements/Return/type_t01: CompileTimeError
+Language/Statements/Return/type_t02: CompileTimeError
+Language/Statements/Return/type_t03: CompileTimeError
+Language/Statements/Return/type_t04: CompileTimeError
+Language/Statements/Switch/equal_operator_t01: MissingCompileTimeError
+Language/Statements/Switch/equal_operator_t02: MissingCompileTimeError
+Language/Statements/Switch/execution_case_no_default_t02: CompileTimeError
+Language/Statements/Switch/execution_case_t02: CompileTimeError
+Language/Statements/Switch/execution_t01: CompileTimeError
+Language/Statements/Switch/expressions_t01: MissingCompileTimeError
+Language/Statements/Switch/expressions_t02: MissingCompileTimeError
+Language/Statements/Switch/expressions_t04: MissingCompileTimeError
+Language/Statements/Switch/last_statement_t01: CompileTimeError
+Language/Statements/Switch/scope_t02: CompileTimeError
+Language/Statements/Switch/type_t01: CompileTimeError
+Language/Statements/Try/catch_scope_t01: CompileTimeError
+Language/Statements/Try/malformed_type_t01: CompileTimeError
+Language/Statements/Try/malformed_type_t02: CompileTimeError
+Language/Statements/Try/malformed_type_t03: CompileTimeError
+Language/Statements/Try/malformed_type_t04: CompileTimeError
+Language/Statements/While/condition_type_t01: CompileTimeError
+Language/Statements/While/condition_type_t02: CompileTimeError
+Language/Statements/While/condition_type_t03: CompileTimeError
+Language/Statements/While/execution_t02: CompileTimeError
+Language/Statements/Yield_and_Yield_Each/Yield/static_type_t01: CompileTimeError
+Language/Statements/Yield_and_Yield_Each/Yield/static_type_t02: CompileTimeError
+Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t01: CompileTimeError
+Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_sync_t01: CompileTimeError
+Language/Statements/Yield_and_Yield_Each/Yield_Each/static_type_t01: CompileTimeError
+Language/Statements/Yield_and_Yield_Each/Yield_Each/static_type_t02: CompileTimeError
+Language/Types/Dynamic_Type_System/deferred_type_error_t01: CompileTimeError
+Language/Types/Dynamic_Type_System/malbounded_type_error_t01: CompileTimeError
+Language/Types/Dynamic_Type_System/malformed_type_error_t01: CompileTimeError
+Language/Types/Function_Types/assignment_t01: CompileTimeError
+Language/Types/Interface_Types/subtype_t12: CompileTimeError
+Language/Types/Interface_Types/subtype_t19: CompileTimeError
+Language/Types/Interface_Types/subtype_t20: CompileTimeError
+Language/Types/Interface_Types/subtype_t22: CompileTimeError
+Language/Types/Interface_Types/subtype_t24: CompileTimeError
+Language/Types/Interface_Types/subtype_t26: CompileTimeError
+Language/Types/Interface_Types/subtype_t30: CompileTimeError
+Language/Types/Interface_Types/subtype_t31: CompileTimeError
+Language/Types/Interface_Types/subtype_t32: CompileTimeError
+Language/Types/Interface_Types/subtype_t33: CompileTimeError
+Language/Types/Interface_Types/subtype_t34: CompileTimeError
+Language/Types/Interface_Types/subtype_t35: CompileTimeError
+Language/Types/Interface_Types/subtype_t36: CompileTimeError
+Language/Types/Interface_Types/subtype_t37: CompileTimeError
+Language/Types/Interface_Types/subtype_t38: CompileTimeError
+Language/Types/Interface_Types/subtype_t45: CompileTimeError
+Language/Types/Interface_Types/subtype_t47: CompileTimeError
+Language/Types/Parameterized_Types/Actual_Type_of_Declaration/actual_type_t02: CompileTimeError
+Language/Types/Parameterized_Types/Actual_Type_of_Declaration/actual_type_t03: CompileTimeError
+Language/Types/Parameterized_Types/arity_mismatch_t01: CompileTimeError
+Language/Types/Parameterized_Types/arity_mismatch_t02: CompileTimeError
+Language/Types/Parameterized_Types/arity_mismatch_t03: CompileTimeError
+Language/Types/Parameterized_Types/arity_mismatch_t04: CompileTimeError
+Language/Types/Parameterized_Types/arity_mismatch_t06: CompileTimeError
+Language/Types/Parameterized_Types/malbounded_t06: CompileTimeError
+Language/Types/Parameterized_Types/malbounded_t07: CompileTimeError
+Language/Types/Static_Types/deferred_type_t01: CompileTimeError
+Language/Types/Static_Types/malformed_type_t01: CompileTimeError
+Language/Types/Static_Types/malformed_type_t02: CompileTimeError
+Language/Types/Static_Types/malformed_type_t03: CompileTimeError
+Language/Types/Static_Types/malformed_type_t04: CompileTimeError
+Language/Types/Static_Types/malformed_type_t05: CompileTimeError
+Language/Types/Static_Types/malformed_type_t06: CompileTimeError
+Language/Types/Type_Declarations/Typedef/self_reference_t08: Crash
+Language/Types/Type_Declarations/Typedef/self_reference_t09: Crash
+Language/Types/Type_Declarations/Typedef/syntax_t01: CompileTimeError
+Language/Types/Type_Void/syntax_t05: MissingCompileTimeError
+Language/Types/Type_Void/syntax_t08: MissingCompileTimeError
+Language/Types/Type_Void/syntax_t09: MissingCompileTimeError
+Language/Variables/constant_variable_t01: CompileTimeError
+Language/Variables/constant_variable_t02: CompileTimeError
+Language/Variables/constant_variable_t03: CompileTimeError
+Language/Variables/constant_variable_t04: CompileTimeError
+Language/Variables/constant_variable_t10: CompileTimeError
+Language/Variables/final_or_static_initialization_t02: MissingCompileTimeError
+Language/Variables/final_or_static_initialization_t03: MissingCompileTimeError
+Language/Variables/final_t01/01: CompileTimeError
+Language/Variables/final_t02/01: CompileTimeError
+Language/Variables/implicit_getter_t02: CompileTimeError
+Language/Variables/implicit_getter_t03: CompileTimeError
+Language/Variables/implicit_getter_t04: CompileTimeError
+Language/Variables/implicit_getter_t05: CompileTimeError
+Language/Variables/implicit_getter_t08: CompileTimeError
+Language/Variables/implicit_getter_t09: CompileTimeError
+Language/Variables/implicit_getter_t10: CompileTimeError
+Language/Variables/implicit_getter_t11: CompileTimeError
+Language/Variables/implicit_setter_t02: CompileTimeError
+Language/Variables/implicit_setter_void_t02: CompileTimeError
+Language/Variables/implicit_setter_void_t03: CompileTimeError
+Language/Variables/implicit_setter_void_t05: CompileTimeError
+Language/Variables/implicit_setter_void_t06: CompileTimeError
+Language/Variables/local_variable_t03: CompileTimeError
+LibTest/async/Completer/completeError_A01_t01: CompileTimeError
+LibTest/async/Completer/complete_A01_t04: CompileTimeError
+LibTest/async/Future/catchError_A03_t05: CompileTimeError
+LibTest/async/Future/doWhile_A03_t01: CompileTimeError
+LibTest/async/Future/doWhile_A04_t01: CompileTimeError
+LibTest/async/Future/doWhile_A04_t02: CompileTimeError
+LibTest/async/Future/doWhile_A04_t03: CompileTimeError
+LibTest/async/Future/doWhile_A05_t01: CompileTimeError
+LibTest/async/Future/forEach_A01_t01: CompileTimeError
+LibTest/async/Future/forEach_A02_t01: CompileTimeError
+LibTest/async/Future/forEach_A03_t01: CompileTimeError
+LibTest/async/Future/forEach_A04_t01: CompileTimeError
+LibTest/async/Future/forEach_A04_t02: CompileTimeError
+LibTest/async/Future/then_A03_t01: CompileTimeError
+LibTest/async/Future/then_A04_t01: CompileTimeError
+LibTest/async/Stream/Stream.fromFuture_A02_t01: CompileTimeError
+LibTest/async/Stream/Stream.fromFuture_A02_t02: CompileTimeError
+LibTest/async/Stream/Stream.fromFutures_A01_t01: CompileTimeError
+LibTest/async/Stream/Stream.fromFutures_A01_t02: CompileTimeError
+LibTest/async/Stream/Stream.fromFutures_A02_t01: CompileTimeError
+LibTest/async/Stream/Stream.fromFutures_A02_t02: CompileTimeError
+LibTest/async/Stream/Stream.fromIterable_A01_t02: CompileTimeError
+LibTest/async/Stream/Stream.periodic_A01_t01: CompileTimeError
+LibTest/async/Stream/Stream_A01_t01: CompileTimeError
+LibTest/async/Stream/distinct_A01_t01: CompileTimeError
+LibTest/async/Stream/firstWhere_A01_t01: CompileTimeError
+LibTest/async/Stream/firstWhere_A02_t01: CompileTimeError
+LibTest/async/Stream/fold_A01_t01: CompileTimeError
+LibTest/async/Stream/forEach_A01_t01: CompileTimeError
+LibTest/async/Stream/forEach_A02_t01: CompileTimeError
+LibTest/async/Stream/forEach_A02_t02: CompileTimeError
+LibTest/async/Stream/isBroadcast_A01_t01: CompileTimeError
+LibTest/async/Stream/isBroadcast_A01_t02: CompileTimeError
+LibTest/async/Stream/lastWhere_A01_t01: CompileTimeError
+LibTest/async/Stream/lastWhere_A02_t01: CompileTimeError
+LibTest/async/Stream/pipe_A01_t01: CompileTimeError
+LibTest/async/Stream/reduce_A01_t01: CompileTimeError
+LibTest/async/Stream/singleWhere_A01_t01: CompileTimeError
+LibTest/async/Stream/timeout_A01_t01: CompileTimeError
+LibTest/async/Stream/toSet_A01_t01: CompileTimeError
+LibTest/async/Stream/transform_A01_t01: CompileTimeError
+LibTest/async/Stream/where_A01_t01: CompileTimeError
+LibTest/async/Stream/where_A01_t02: CompileTimeError
+LibTest/async/StreamController/EventSink_class_A01_t01: CompileTimeError
+LibTest/async/StreamController/StreamConsumer_class_A01_t01: CompileTimeError
+LibTest/async/StreamController/sink_A01_t01: CompileTimeError
+LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t03: CompileTimeError
+LibTest/async/StreamTransformer/StreamTransformer_A02_t02: CompileTimeError
+LibTest/async/Zone/ROOT_A01_t01: CompileTimeError
+LibTest/async/Zone/bindBinaryCallback_A01_t02: CompileTimeError
+LibTest/async/Zone/bindCallback_A01_t02: CompileTimeError
+LibTest/async/Zone/bindUnaryCallback_A01_t02: CompileTimeError
+LibTest/async/Zone/registerBinaryCallback_A01_t01: CompileTimeError
+LibTest/async/Zone/registerCallback_A01_t01: CompileTimeError
+LibTest/async/Zone/registerUnaryCallback_A01_t01: CompileTimeError
+LibTest/collection/DoubleLinkedQueue/DoubleLinkedQueue_class_A01_t01: CompileTimeError
+LibTest/collection/DoubleLinkedQueue/firstWhere_A02_t01: CompileTimeError
+LibTest/collection/DoubleLinkedQueue/firstWhere_A03_t01: CompileTimeError
+LibTest/collection/DoubleLinkedQueue/forEachEntry_A01_t03: CompileTimeError
+LibTest/collection/DoubleLinkedQueue/forEach_A01_t03: CompileTimeError
+LibTest/collection/DoubleLinkedQueue/lastWhere_A02_t01: CompileTimeError
+LibTest/collection/DoubleLinkedQueue/lastWhere_A03_t01: CompileTimeError
+LibTest/collection/DoubleLinkedQueue/skipWhile_A02_t01: CompileTimeError
+LibTest/collection/DoubleLinkedQueue/takeWhile_A02_t01: CompileTimeError
+LibTest/collection/HashMap/HashMap_class_A01_t01: CompileTimeError
+LibTest/collection/HashSet/HashSet_class_A01_t01: CompileTimeError
+LibTest/collection/IterableBase/IterableBase_class_A01_t02: CompileTimeError
+LibTest/collection/IterableMixin/IterableMixin_class_A02_t01: CompileTimeError
+LibTest/collection/LinkedHashMap/LinkedHashMap_A03_t01: CompileTimeError
+LibTest/collection/LinkedHashMap/LinkedHashMap_A04_t01: CompileTimeError
+LibTest/collection/LinkedHashMap/LinkedHashMap_A04_t02: CompileTimeError
+LibTest/collection/LinkedHashMap/LinkedHashMap_class_A01_t01: CompileTimeError
+LibTest/collection/LinkedHashSet/LinkedHashSet_A03_t01: CompileTimeError
+LibTest/collection/LinkedHashSet/LinkedHashSet_A05_t01: CompileTimeError
+LibTest/collection/LinkedHashSet/LinkedHashSet_A05_t02: CompileTimeError
+LibTest/collection/LinkedHashSet/LinkedHashSet_class_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/LinkedList_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/addAll_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/addAll_A02_t01: CompileTimeError
+LibTest/collection/LinkedList/addFirst_A01_t02: CompileTimeError
+LibTest/collection/LinkedList/add_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/add_A01_t02: CompileTimeError
+LibTest/collection/LinkedList/any_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/clear_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/contains_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/every_A02_t01: CompileTimeError
+LibTest/collection/LinkedList/first_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/first_A01_t02: CompileTimeError
+LibTest/collection/LinkedList/forEach_A01_t02: CompileTimeError
+LibTest/collection/LinkedList/forEach_A02_t01: CompileTimeError
+LibTest/collection/LinkedList/iterator_moveNext_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/join_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/lastWhere_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/lastWhere_A02_t01: CompileTimeError
+LibTest/collection/LinkedList/lastWhere_A03_t01: CompileTimeError
+LibTest/collection/LinkedList/last_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/length_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/singleWhere_A01_t01: CompileTimeError
+LibTest/collection/LinkedList/singleWhere_A02_t01: CompileTimeError
+LibTest/collection/LinkedList/singleWhere_A02_t02: CompileTimeError
+LibTest/collection/LinkedListEntry/insertAfter_A01_t01: CompileTimeError
+LibTest/collection/LinkedListEntry/insertAfter_A01_t02: CompileTimeError
+LibTest/collection/LinkedListEntry/insertAfter_A02_t02: CompileTimeError
+LibTest/collection/LinkedListEntry/insertAfter_A02_t03: CompileTimeError
+LibTest/collection/LinkedListEntry/insertBefore_A01_t01: CompileTimeError
+LibTest/collection/LinkedListEntry/insertBefore_A01_t02: CompileTimeError
+LibTest/collection/LinkedListEntry/insertBefore_A02_t02: CompileTimeError
+LibTest/collection/LinkedListEntry/insertBefore_A02_t03: CompileTimeError
+LibTest/collection/LinkedListEntry/list_A01_t01: CompileTimeError
+LibTest/collection/LinkedListEntry/list_A01_t03: CompileTimeError
+LibTest/collection/LinkedListEntry/next_A01_t02: CompileTimeError
+LibTest/collection/LinkedListEntry/next_A01_t03: CompileTimeError
+LibTest/collection/LinkedListEntry/previous_A01_t02: CompileTimeError
+LibTest/collection/LinkedListEntry/previous_A01_t03: CompileTimeError
+LibTest/collection/LinkedListEntry/unlink_A01_t01: CompileTimeError
+LibTest/collection/LinkedListEntry/unlink_A01_t02: CompileTimeError
+LibTest/collection/LinkedListEntry/unlink_A01_t03: CompileTimeError
+LibTest/collection/LinkedListEntry/unlink_A02_t02: CompileTimeError
+LibTest/collection/ListBase/ListBase_class_A01_t01: CompileTimeError
+LibTest/collection/ListMixin/ListMixin_class_A01_t01: CompileTimeError
+LibTest/collection/ListQueue/ListQueue_class_A01_t01: CompileTimeError
+LibTest/collection/MapBase/MapBase_class_A01_t01: CompileTimeError
+LibTest/collection/MapMixin/MapMixin_class_A01_t01: CompileTimeError
+LibTest/collection/MapView/MapView_class_A01_t01: CompileTimeError
+LibTest/collection/Maps/forEach_A01_t01: CompileTimeError
+LibTest/collection/Maps/forEach_A01_t02: CompileTimeError
+LibTest/collection/Maps/forEach_A01_t04: CompileTimeError
+LibTest/collection/Maps/forEach_A01_t05: CompileTimeError
+LibTest/collection/Maps/forEach_A01_t06: CompileTimeError
+LibTest/collection/Maps/forEach_A01_t08: CompileTimeError
+LibTest/collection/Maps/forEach_A02_t01: CompileTimeError
+LibTest/collection/Maps/putIfAbsent_A01_t04: CompileTimeError
+LibTest/collection/Maps/putIfAbsent_A01_t07: CompileTimeError
+LibTest/collection/Maps/putIfAbsent_A01_t08: CompileTimeError
+LibTest/collection/Queue/Queue_class_A01_t01: CompileTimeError
+LibTest/collection/SetBase/SetBase_class_A01_t01: CompileTimeError
+LibTest/collection/SetBase/setToString_A01_t01: CompileTimeError
+LibTest/collection/SetBase/setToString_A02_t01: CompileTimeError
+LibTest/collection/SetMixin/SetMixin_class_A01_t01: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterable_A03_t01: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterable_A05_t01: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterable_A06_t01: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterable_A06_t02: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterables_A04_t01: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterables_A05_t01: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterables_A05_t02: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap.from_A02_t01: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap.from_A03_t01: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap.from_A03_t02: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap_A02_t02: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap_A02_t03: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap_A03_t01: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap_A03_t02: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap_A04_t01: CompileTimeError
+LibTest/collection/SplayTreeMap/SplayTreeMap_A04_t02: CompileTimeError
+LibTest/collection/SplayTreeMap/inherited_tests_A01_t01: CompileTimeError
+LibTest/collection/SplayTreeSet/SplayTreeSet.from_A02_t04: CompileTimeError
+LibTest/collection/SplayTreeSet/SplayTreeSet.from_A02_t05: CompileTimeError
+LibTest/collection/SplayTreeSet/SplayTreeSet.from_A02_t07: CompileTimeError
+LibTest/collection/SplayTreeSet/SplayTreeSet.from_A02_t08: CompileTimeError
+LibTest/collection/SplayTreeSet/SplayTreeSet_A03_t03: CompileTimeError
+LibTest/collection/SplayTreeSet/SplayTreeSet_A04_t01: CompileTimeError
+LibTest/collection/SplayTreeSet/SplayTreeSet_A05_t01: CompileTimeError
+LibTest/collection/SplayTreeSet/SplayTreeSet_A06_t01: CompileTimeError
+LibTest/collection/SplayTreeSet/SplayTreeSet_class_A01_t01: CompileTimeError
+LibTest/convert/JsonCodec/encode_A02_t03: CompileTimeError
+LibTest/convert/JsonCodec/encode_A03_t01: CompileTimeError
+LibTest/convert/JsonEncoder/JsonEncoder_A01_t01: CompileTimeError
+LibTest/core/AssertionError/AssertionError_A01_t01: CompileTimeError
+LibTest/core/AssertionError/message_A01_t01: CompileTimeError
+LibTest/core/AssertionError/toString_A01_t01: CompileTimeError
+LibTest/core/FallThroughError/toString_A01_t02: CompileTimeError
+LibTest/core/Invocation/isAccessor_A01_t01: CompileTimeError
+LibTest/core/Invocation/isAccessor_A01_t02: CompileTimeError
+LibTest/core/Invocation/isGetter_A01_t01: CompileTimeError
+LibTest/core/Invocation/isGetter_A01_t02: CompileTimeError
+LibTest/core/Invocation/isMethod_A01_t01: CompileTimeError
+LibTest/core/Invocation/isMethod_A01_t02: CompileTimeError
+LibTest/core/Invocation/isSetter_A01_t01: CompileTimeError
+LibTest/core/Invocation/isSetter_A01_t02: CompileTimeError
+LibTest/core/Invocation/memberName_A01_t01: CompileTimeError
+LibTest/core/Invocation/namedArguments_A01_t01: CompileTimeError
+LibTest/core/Invocation/positionalArguments_A01_t01: CompileTimeError
+LibTest/core/List/List_class_A01_t01: CompileTimeError
+LibTest/core/List/List_class_A01_t02: CompileTimeError
+LibTest/core/Map/allTests_A01_t01: CompileTimeError
+LibTest/core/RegExp/allMatches_A01_t01: CompileTimeError
+LibTest/core/RegExp/firstMatch_A01_t01: CompileTimeError
+LibTest/core/RuneIterator/currentAsString_A01_t02: CompileTimeError
+LibTest/core/RuneIterator/currentSize_A01_t02: CompileTimeError
+LibTest/core/RuneIterator/current_A01_t02: CompileTimeError
+LibTest/core/RuneIterator/string_A01_t02: CompileTimeError
+LibTest/core/Runes/first_A01_t02: CompileTimeError
+LibTest/core/Runes/isEmpty_A01_t02: CompileTimeError
+LibTest/core/Runes/isNotEmpty_A01_t02: CompileTimeError
+LibTest/core/Runes/iterator_A01_t02: CompileTimeError
+LibTest/core/Runes/last_A01_t02: CompileTimeError
+LibTest/core/Runes/length_A01_t02: CompileTimeError
+LibTest/core/Runes/single_A01_t02: CompileTimeError
+LibTest/core/Runes/skipWhile_A03_t01: CompileTimeError
+LibTest/core/Runes/string_A01_t02: CompileTimeError
+LibTest/core/Runes/takeWhile_A03_t01: CompileTimeError
+LibTest/core/Set/addAll_A01_t03: CompileTimeError
+LibTest/core/Set/add_A01_t03: CompileTimeError
+LibTest/core/Set/forEach_A01_t03: CompileTimeError
+LibTest/core/Set/remove_A01_t03: CompileTimeError
+LibTest/core/String/String.fromCharCodes_A02_t01: CompileTimeError
+LibTest/core/Symbol/Symbol_A01_t04: CompileTimeError
+LibTest/core/TypeError/toString_A01_t01: CompileTimeError
+LibTest/core/double/isInfinite_A01_t03: CompileTimeError
+LibTest/core/double/operator_GE_A01_t03: CompileTimeError
+LibTest/core/double/operator_GE_A02_t01: CompileTimeError
+LibTest/core/double/operator_GT_A01_t03: CompileTimeError
+LibTest/core/double/operator_GT_A02_t01: CompileTimeError
+LibTest/core/double/operator_LE_A01_t03: CompileTimeError
+LibTest/core/double/operator_LE_A02_t01: CompileTimeError
+LibTest/core/double/operator_LT_A01_t03: CompileTimeError
+LibTest/core/double/operator_LT_A02_t01: CompileTimeError
+LibTest/core/double/operator_addition_A01_t07: CompileTimeError
+LibTest/core/double/operator_addition_A02_t01: CompileTimeError
+LibTest/core/double/operator_division_A01_t07: CompileTimeError
+LibTest/core/double/operator_division_A01_t08: CompileTimeError
+LibTest/core/double/operator_division_A01_t11: CompileTimeError
+LibTest/core/double/operator_division_A02_t01: CompileTimeError
+LibTest/core/double/operator_multiplication_A01_t06: CompileTimeError
+LibTest/core/double/operator_multiplication_A01_t08: CompileTimeError
+LibTest/core/double/operator_multiplication_A02_t01: CompileTimeError
+LibTest/core/double/operator_remainder_A01_t02: CompileTimeError
+LibTest/core/double/operator_remainder_A01_t03: CompileTimeError
+LibTest/core/double/operator_remainder_A01_t04: CompileTimeError
+LibTest/core/double/operator_remainder_A01_t05: CompileTimeError
+LibTest/core/double/operator_remainder_A01_t06: CompileTimeError
+LibTest/core/double/operator_remainder_A02_t01: CompileTimeError
+LibTest/core/double/operator_subtraction_A01_t07: CompileTimeError
+LibTest/core/double/operator_subtraction_A01_t08: CompileTimeError
+LibTest/core/double/operator_subtraction_A02_t01: CompileTimeError
+LibTest/core/double/operator_truncating_division_A01_t08: CompileTimeError
+LibTest/core/double/operator_truncating_division_A02_t01: CompileTimeError
+LibTest/core/double/remainder_A01_t02: CompileTimeError
+LibTest/core/double/remainder_A01_t03: CompileTimeError
+LibTest/core/double/remainder_A01_t04: CompileTimeError
+LibTest/core/double/remainder_A01_t05: CompileTimeError
+LibTest/core/double/remainder_A01_t06: CompileTimeError
+LibTest/core/double/remainder_A02_t01: CompileTimeError
+LibTest/core/double/toStringAsFixed_A02_t01: CompileTimeError
+LibTest/core/int/abs_A01_t01: CompileTimeError
+LibTest/core/int/ceilToDouble_A01_t01: CompileTimeError
+LibTest/core/int/ceil_A01_t01: CompileTimeError
+LibTest/core/int/compareTo_A01_t01: CompileTimeError
+LibTest/core/int/floorToDouble_A01_t01: CompileTimeError
+LibTest/core/int/floor_A01_t01: CompileTimeError
+LibTest/core/int/isEven_A01_t01: CompileTimeError
+LibTest/core/int/isInfinite_A01_t01: CompileTimeError
+LibTest/core/int/isNaN_A01_t01: CompileTimeError
+LibTest/core/int/isNegative_A01_t01: CompileTimeError
+LibTest/core/int/isOdd_A01_t01: CompileTimeError
+LibTest/core/int/operator_AND_A01_t01: CompileTimeError
+LibTest/core/int/operator_GE_A01_t01: CompileTimeError
+LibTest/core/int/operator_GT_A01_t01: CompileTimeError
+LibTest/core/int/operator_LE_A01_t01: CompileTimeError
+LibTest/core/int/operator_LT_A01_t01: CompileTimeError
+LibTest/core/int/operator_NOT_A01_t01: CompileTimeError
+LibTest/core/int/operator_OR_A01_t01: CompileTimeError
+LibTest/core/int/operator_XOR_A01_t01: CompileTimeError
+LibTest/core/int/operator_addition_A01_t01: CompileTimeError
+LibTest/core/int/operator_division_A01_t01: CompileTimeError
+LibTest/core/int/operator_left_shift_A01_t01: CompileTimeError
+LibTest/core/int/operator_multiplication_A01_t01: CompileTimeError
+LibTest/core/int/operator_remainder_A01_t01: CompileTimeError
+LibTest/core/int/operator_remainder_A01_t02: CompileTimeError
+LibTest/core/int/operator_right_shift_A01_t01: CompileTimeError
+LibTest/core/int/operator_subtraction_A01_t01: CompileTimeError
+LibTest/core/int/operator_truncating_division_A01_t01: CompileTimeError
+LibTest/core/int/operator_truncating_division_A01_t02: CompileTimeError
+LibTest/core/int/operator_unary_minus_A01_t01: CompileTimeError
+LibTest/core/int/parse_A01_t01: CompileTimeError
+LibTest/core/int/remainder_A01_t01: CompileTimeError
+LibTest/core/int/remainder_A01_t02: CompileTimeError
+LibTest/core/int/roundToDouble_A01_t01: CompileTimeError
+LibTest/core/int/round_A01_t01: CompileTimeError
+LibTest/core/int/toDouble_A01_t01: CompileTimeError
+LibTest/core/int/toInt_A01_t01: CompileTimeError
+LibTest/core/int/truncateToDouble_A01_t01: CompileTimeError
+LibTest/core/int/truncate_A01_t01: CompileTimeError
+LibTest/isolate/Isolate/spawnUri_A01_t05: CompileTimeError
+LibTest/isolate/Isolate/spawnUri_A02_t01: CompileTimeError
+LibTest/isolate/Isolate/spawnUri_A02_t06: CompileTimeError
+LibTest/isolate/Isolate/spawnUri_A02_t07: CompileTimeError
+LibTest/isolate/Isolate/spawn_A01_t03: CompileTimeError
+LibTest/isolate/Isolate/spawn_A02_t04: CompileTimeError
+LibTest/isolate/Isolate/spawn_A02_t05: CompileTimeError
+LibTest/isolate/Isolate/spawn_A02_t06: CompileTimeError
+LibTest/isolate/Isolate/spawn_A02_t07: CompileTimeError
+LibTest/isolate/Isolate/spawn_A04_t01: CompileTimeError
+LibTest/isolate/Isolate/spawn_A04_t02: CompileTimeError
+LibTest/isolate/Isolate/spawn_A04_t03: CompileTimeError
+LibTest/isolate/Isolate/spawn_A04_t04: CompileTimeError
+LibTest/isolate/Isolate/spawn_A04_t05: CompileTimeError
+LibTest/isolate/Isolate/spawn_A05_t03: CompileTimeError
+LibTest/isolate/Isolate/spawn_A06_t01: CompileTimeError
+LibTest/isolate/Isolate/spawn_A06_t02: CompileTimeError
+LibTest/isolate/Isolate/spawn_A06_t03: CompileTimeError
+LibTest/isolate/Isolate/spawn_A06_t04: CompileTimeError
+LibTest/isolate/Isolate/spawn_A06_t05: CompileTimeError
+LibTest/isolate/Isolate/spawn_A06_t06: CompileTimeError
+LibTest/isolate/Isolate/spawn_A06_t07: CompileTimeError
+LibTest/isolate/ReceivePort/any_A01_t02: CompileTimeError
+LibTest/isolate/ReceivePort/distinct_A01_t01: CompileTimeError
+LibTest/isolate/ReceivePort/firstWhere_A01_t01: CompileTimeError
+LibTest/isolate/ReceivePort/firstWhere_A02_t01: CompileTimeError
+LibTest/isolate/ReceivePort/fold_A01_t01: CompileTimeError
+LibTest/isolate/ReceivePort/forEach_A01_t01: CompileTimeError
+LibTest/isolate/ReceivePort/lastWhere_A01_t01: CompileTimeError
+LibTest/isolate/ReceivePort/lastWhere_A02_t01: CompileTimeError
+LibTest/isolate/ReceivePort/reduce_A01_t01: CompileTimeError
+LibTest/isolate/ReceivePort/sendPort_A01_t01: CompileTimeError
+LibTest/isolate/ReceivePort/singleWhere_A01_t01: CompileTimeError
+LibTest/isolate/ReceivePort/toSet_A01_t01: CompileTimeError
+LibTest/isolate/ReceivePort/transform_A01_t01: CompileTimeError
+LibTest/isolate/ReceivePort/where_A01_t01: CompileTimeError
+LibTest/isolate/ReceivePort/where_A01_t02: CompileTimeError
+LibTest/math/Point/operator_addition_A02_t01: CompileTimeError
+LibTest/math/Point/operator_mult_A02_t01: CompileTimeError
+LibTest/math/Point/operator_mult_A03_t01: CompileTimeError
+LibTest/math/Point/operator_subtraction_A02_t01: CompileTimeError
+LibTest/math/max_A01_t01: CompileTimeError
+LibTest/math/max_A02_t01: CompileTimeError
+LibTest/math/min_A01_t01: CompileTimeError
+LibTest/math/min_A02_t01: CompileTimeError
+LibTest/math/pow_A10_t01: CompileTimeError
+LibTest/typed_data/ByteBuffer/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/ByteBuffer/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/ByteBuffer/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/ByteData/ByteData.view_A01_t02: CompileTimeError
+LibTest/typed_data/ByteData/ByteData.view_A03_t01: CompileTimeError
+LibTest/typed_data/ByteData/ByteData.view_A04_t01: CompileTimeError
+LibTest/typed_data/ByteData/ByteData_A01_t01: CompileTimeError
+LibTest/typed_data/ByteData/buffer_A01_t01: CompileTimeError
+LibTest/typed_data/ByteData/buffer_A01_t02: CompileTimeError
+LibTest/typed_data/ByteData/elementSizeInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/ByteData/getUint64_A01_t01: CompileTimeError
+LibTest/typed_data/ByteData/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/ByteData/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/ByteData/offsetInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/ByteData/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/ByteData/setUint64_A01_t01: CompileTimeError
+LibTest/typed_data/Float32List/asMap_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/buffer_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/elementSizeInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/first_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/isEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/isNotEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/iterator_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/last_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/offsetInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/reduce_A01_t01: CompileTimeError
+LibTest/typed_data/Float32List/reduce_A02_t01: CompileTimeError
+LibTest/typed_data/Float32List/replaceRange_A01_t01: CompileTimeError
+LibTest/typed_data/Float32List/reversed_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/single_A01_t02: CompileTimeError
+LibTest/typed_data/Float32List/skipWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Float32List/takeWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Float32x4/w_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4/x_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4/y_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4/z_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/asMap_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/buffer_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/elementSizeInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/firstWhere_A02_t01: CompileTimeError
+LibTest/typed_data/Float32x4List/first_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/isEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/isNotEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/iterator_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/offsetInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/reduce_A02_t01: CompileTimeError
+LibTest/typed_data/Float32x4List/reversed_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/single_A01_t02: CompileTimeError
+LibTest/typed_data/Float32x4List/skipWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Float32x4List/takeWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Float64List/add_A01_t01: CompileTimeError
+LibTest/typed_data/Float64List/asMap_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/buffer_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/elementSizeInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/firstWhere_A02_t01: CompileTimeError
+LibTest/typed_data/Float64List/first_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/forEach_A01_t01: CompileTimeError
+LibTest/typed_data/Float64List/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/isEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/isNotEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/iterator_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/last_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/offsetInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/reduce_A01_t01: CompileTimeError
+LibTest/typed_data/Float64List/reduce_A02_t01: CompileTimeError
+LibTest/typed_data/Float64List/replaceRange_A01_t01: CompileTimeError
+LibTest/typed_data/Float64List/reversed_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/single_A01_t02: CompileTimeError
+LibTest/typed_data/Float64List/skipWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Float64List/takeWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Int16List/buffer_A01_t02: CompileTimeError
+LibTest/typed_data/Int16List/elementSizeInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Int16List/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/Int16List/isEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Int16List/isNotEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Int16List/iterator_A01_t02: CompileTimeError
+LibTest/typed_data/Int16List/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Int16List/offsetInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Int16List/reversed_A01_t02: CompileTimeError
+LibTest/typed_data/Int16List/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/Int16List/single_A01_t02: CompileTimeError
+LibTest/typed_data/Int16List/skipWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Int16List/takeWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Int32List/buffer_A01_t02: CompileTimeError
+LibTest/typed_data/Int32List/elementSizeInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Int32List/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/Int32List/isEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Int32List/isNotEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Int32List/iterator_A01_t02: CompileTimeError
+LibTest/typed_data/Int32List/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Int32List/offsetInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Int32List/reversed_A01_t02: CompileTimeError
+LibTest/typed_data/Int32List/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/Int32List/single_A01_t02: CompileTimeError
+LibTest/typed_data/Int32List/skipWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Int32List/takeWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Int32x4/flagW_A01_t03: CompileTimeError
+LibTest/typed_data/Int32x4/flagX_A01_t03: CompileTimeError
+LibTest/typed_data/Int32x4/flagY_A01_t03: CompileTimeError
+LibTest/typed_data/Int32x4/flagZ_A01_t03: CompileTimeError
+LibTest/typed_data/Int32x4/w_A01_t02: CompileTimeError
+LibTest/typed_data/Int32x4/x_A01_t02: CompileTimeError
+LibTest/typed_data/Int32x4/y_A01_t02: CompileTimeError
+LibTest/typed_data/Int32x4/z_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/buffer_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/elementSizeInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/isEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/isNotEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/iterator_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/offsetInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/reversed_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/single_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/skipWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Int64List/takeWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Int8List/buffer_A01_t02: CompileTimeError
+LibTest/typed_data/Int8List/elementSizeInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Int8List/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/Int8List/isEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Int8List/isNotEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Int8List/iterator_A01_t02: CompileTimeError
+LibTest/typed_data/Int8List/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Int8List/offsetInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Int8List/reversed_A01_t02: CompileTimeError
+LibTest/typed_data/Int8List/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/Int8List/single_A01_t02: CompileTimeError
+LibTest/typed_data/Int8List/skipWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Int8List/takeWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Uint16List/buffer_A01_t02: CompileTimeError
+LibTest/typed_data/Uint16List/elementSizeInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint16List/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/Uint16List/isEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Uint16List/isNotEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Uint16List/iterator_A01_t02: CompileTimeError
+LibTest/typed_data/Uint16List/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint16List/offsetInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint16List/reversed_A01_t02: CompileTimeError
+LibTest/typed_data/Uint16List/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/Uint16List/single_A01_t02: CompileTimeError
+LibTest/typed_data/Uint16List/skipWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Uint16List/takeWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Uint32List/buffer_A01_t02: CompileTimeError
+LibTest/typed_data/Uint32List/elementSizeInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint32List/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/Uint32List/isEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Uint32List/isNotEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Uint32List/iterator_A01_t02: CompileTimeError
+LibTest/typed_data/Uint32List/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint32List/offsetInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint32List/reversed_A01_t02: CompileTimeError
+LibTest/typed_data/Uint32List/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/Uint32List/single_A01_t02: CompileTimeError
+LibTest/typed_data/Uint32List/skipWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Uint32List/takeWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t01: CompileTimeError
+LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/Uint64List.view_A01_t01: CompileTimeError
+LibTest/typed_data/Uint64List/Uint64List.view_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/buffer_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/elementSizeInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/isEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/isNotEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/iterator_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/offsetInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/reversed_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/single_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/skipWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Uint64List/takeWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Uint8ClampedList/buffer_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8ClampedList/elementSizeInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8ClampedList/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8ClampedList/isEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8ClampedList/isNotEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8ClampedList/iterator_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8ClampedList/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8ClampedList/offsetInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8ClampedList/reversed_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8ClampedList/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8ClampedList/single_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8ClampedList/skipWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Uint8ClampedList/takeWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Uint8List/buffer_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8List/elementSizeInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8List/hashCode_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8List/isEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8List/isNotEmpty_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8List/iterator_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8List/lengthInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8List/offsetInBytes_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8List/reversed_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8List/runtimeType_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8List/single_A01_t02: CompileTimeError
+LibTest/typed_data/Uint8List/skipWhile_A03_t01: CompileTimeError
+LibTest/typed_data/Uint8List/takeWhile_A03_t01: CompileTimeError
+Utils/tests/Expect/equals_A01_t03: CompileTimeError
+Utils/tests/Expect/notEquals_A01_t03: CompileTimeError
+Utils/tests/Expect/throws_A01_t04: CompileTimeError
+
+[ $fasta && !$strong ]
 Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t03: MissingCompileTimeError
 Language/Classes/Constructors/Constant_Constructors/potentially_constant_expression_t01: MissingCompileTimeError
 Language/Classes/Constructors/Factories/const_modifier_t01: MissingCompileTimeError
@@ -118,11 +1689,8 @@
 Language/Statements/Continue/label_t07: MissingCompileTimeError
 Language/Statements/For/syntax_t12: MissingCompileTimeError
 Language/Statements/For/syntax_t13: MissingCompileTimeError
-Language/Statements/For/syntax_t13: Crash
 Language/Statements/For/syntax_t19: MissingCompileTimeError
-Language/Statements/For/syntax_t20: Crash
 Language/Statements/For/syntax_t20: MissingCompileTimeError
-Language/Statements/Labels/scope_t05: MissingCompileTimeError
 Language/Statements/Switch/equal_operator_t01: MissingCompileTimeError
 Language/Statements/Switch/equal_operator_t02: MissingCompileTimeError
 Language/Statements/Switch/expressions_t01: MissingCompileTimeError
@@ -133,12 +1701,6 @@
 Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t03: MissingCompileTimeError
 Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t05: MissingCompileTimeError
 Language/Types/Interface_Types/subtype_t30: CompileTimeError
-Language/Types/Type_Void/syntax_t01: MissingCompileTimeError
-Language/Types/Type_Void/syntax_t02: MissingCompileTimeError
-Language/Types/Type_Void/syntax_t04: MissingCompileTimeError
-Language/Types/Type_Void/syntax_t05: MissingCompileTimeError
-Language/Types/Type_Void/syntax_t08: MissingCompileTimeError
-Language/Types/Type_Void/syntax_t09: MissingCompileTimeError
 Language/Variables/final_or_static_initialization_t02: MissingCompileTimeError
 Language/Variables/final_or_static_initialization_t03: MissingCompileTimeError
 LibTest/core/double/isInfinite_A01_t03: CompileTimeError
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 2fbfd8a..5b01ef4 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -167,6 +167,7 @@
 LibTest/typed_data/Int32List/buffer_A01_t02: Pass, Timeout # Flutter Issue 9109
 
 [ $runtime == vm ]
+Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t02: MissingCompileTimeError # Issue 114
 LibTest/isolate/Isolate/spawnUri_A01_t06: Pass, Fail # Issue 28269, These tests are timing dependent and should be non-flaky once the fix for https://github.com/dart-lang/co19/issues/86 is merged into master. (They are skipped on $runtime == pre_compiled below.)
 LibTest/isolate/Isolate/spawnUri_A01_t07: Pass, Fail # Issue 28269, These tests are timing dependent and should be non-flaky once the fix for https://github.com/dart-lang/co19/issues/86 is merged into master. (They are skipped on $runtime == pre_compiled below.)
 LibTest/isolate/Isolate/spawn_A04_t01: Pass, Fail # Issue 28269, These tests are timing dependent and should be non-flaky once the fix for https://github.com/dart-lang/co19/issues/86 is merged into master. (They are skipped on $runtime == pre_compiled below.)
@@ -199,37 +200,6 @@
 [ $builder_tag == asan && $mode == debug && ($runtime == dart_precompiled || $runtime == vm) ]
 Language/Types/Interface_Types/subtype_t27: Skip # Issue 21174.
 
-[ $compiler != dart2js && !$strong ]
-LibTest/typed_data/Float32x4List/first_A01_t02: RuntimeError # co19 issue 130 + type error
-LibTest/typed_data/Float32x4List/last_A01_t02: RuntimeError # co19 issue 130 + type error
-
-[ $compiler != dartk && $compiler != dartkp && ($runtime == dart_precompiled || $runtime == flutter || $runtime == vm) ]
-Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t01: MissingCompileTimeError # Issue 25496
-Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t02: MissingCompileTimeError # Issue 25496
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t01: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t02: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t03: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t04: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t05: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t06: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t07: MissingCompileTimeError # Issue 24332
-Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t08: MissingCompileTimeError # Issue 24332
-Language/Libraries_and_Scripts/Exports/invalid_uri_t02: Fail
-Language/Libraries_and_Scripts/Exports/reexport_t01: Fail # Dart issue 12916
-Language/Libraries_and_Scripts/Imports/invalid_uri_t02: Fail
-Language/Libraries_and_Scripts/Parts/syntax_t06: Fail
-Language/Mixins/Mixin_Application/syntax_t16: CompileTimeError # Issue 25765
-Language/Mixins/declaring_constructor_t05: MissingCompileTimeError # Issue 24767
-Language/Mixins/declaring_constructor_t06: MissingCompileTimeError # Issue 24767
-Language/Statements/Labels/syntax_t03: Fail # Dart issue 2238
-Language/Statements/Switch/syntax_t02: Fail # Dart issue 12908
-Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t01: MissingCompileTimeError # Issue 25495
-Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t03: MissingCompileTimeError # Issue 25495
-Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t05: MissingCompileTimeError # Issue 25495
-
-[ $compiler != dartk && $compiler != dartkp && ($runtime == dart_precompiled || $runtime == vm) ]
-Language/Classes/Constructors/Generative_Constructors/initializing_formals_execution_t02: CompileTimeError # Issue 114
-
 [ $compiler == none && $runtime == vm && $system == fuchsia ]
 *: Skip # Tests not included in the image.
 
@@ -248,15 +218,16 @@
 [ $mode == release && $runtime == vm && $system == linux && ($arch == ia32 || $arch == x64) ]
 LibTest/isolate/Isolate/spawn_A04_t05: Pass, Slow
 
-[ $runtime == dart_precompiled && !$fasta ]
-Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t02: CompileTimeError # Issue 114
-
 # Obfuscated mode expectations
 [ $runtime == dart_precompiled && $minified ]
 Language/Enums/declaration_equivalent_t01: Skip # Enum.toString is obfuscated.
 Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/no_such_method_t01: Skip # Uses new Symbol() instead of const Symbol()
 LibTest/core/Symbol/Symbol_A01_t01: Skip # Uses new Symbol()
 
+[ $runtime != none && !$strong ]
+LibTest/typed_data/Float32x4List/first_A01_t02: RuntimeError # co19 issue 130 + type error
+LibTest/typed_data/Float32x4List/last_A01_t02: RuntimeError # co19 issue 130 + type error
+
 [ $runtime == vm && $checked ]
 LibTest/typed_data/Float32List/reduce_A01_t01: Fail # These tests fail in checked mode because they are incorrect.
 LibTest/typed_data/Float64List/add_A01_t01: Fail # These tests fail in checked mode because they are incorrect.
@@ -285,29 +256,49 @@
 Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t02: Skip # Eager loading
 
 [ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
+Language/Classes/definition_t24: MissingCompileTimeError # Issue co19 #129, sdk issue #31624
 Language/Expressions/Assignment/super_assignment_failed_t05: RuntimeError # Issue 25671
 Language/Expressions/Constants/literal_number_t01: CompileTimeError # Large integer literal
 Language/Expressions/Constants/math_operators_t01: CompileTimeError # Large integer literal
 Language/Expressions/Constants/math_operators_t06: CompileTimeError # Large integer literal
 Language/Expressions/Function_Invocation/async_generator_invokation_t08: Fail # Issue 25967
 Language/Expressions/Function_Invocation/async_generator_invokation_t10: Fail # Issue 25967
+Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t01: MissingCompileTimeError # Issue 25496
+Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t02: MissingCompileTimeError # Issue 25496
 Language/Expressions/Numbers/static_type_of_int_t01: CompileTimeError # Large integer literal
 Language/Expressions/Numbers/syntax_t06: CompileTimeError # Large integer literal
 Language/Expressions/Numbers/syntax_t09: CompileTimeError # Large integer literal
 Language/Expressions/Numbers/syntax_t10: CompileTimeError # Large integer literal
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t01: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t02: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t03: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t04: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t05: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t06: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t07: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t08: MissingCompileTimeError # Issue 24332
+Language/Libraries_and_Scripts/Exports/invalid_uri_t02: Fail
+Language/Libraries_and_Scripts/Exports/reexport_t01: Fail # Dart issue 12916
 Language/Libraries_and_Scripts/Exports/reexport_t02: MissingCompileTimeError, Fail # Dart issue 12916
+Language/Libraries_and_Scripts/Imports/invalid_uri_t02: Fail
+Language/Libraries_and_Scripts/Parts/syntax_t06: Fail
 Language/Libraries_and_Scripts/Scripts/top_level_main_t01: Skip # Issue 29895
+Language/Mixins/Mixin_Application/syntax_t16: CompileTimeError # Issue 25765
+Language/Mixins/declaring_constructor_t05: MissingCompileTimeError # Issue 24767
+Language/Mixins/declaring_constructor_t06: MissingCompileTimeError # Issue 24767
 Language/Statements/Assert/execution_t02: Skip # co19 issue 734
 Language/Statements/Assert/execution_t03: Skip # co19 issue 734
 Language/Statements/Assert/type_t02: Skip # co19 issue 734
 Language/Statements/Assert/type_t05: Skip # co19 issue 734
+Language/Statements/Labels/syntax_t03: Fail # Dart issue 2238
+Language/Statements/Switch/syntax_t02: Fail # Dart issue 12908
 Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t08: RuntimeError # Issue 25748
 Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t09: RuntimeError # Issue 25748
 Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t10: RuntimeError # Issue 25748
 Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_sync_t05: RuntimeError # Issue 25662,25634
-Language/Types/Type_Void/syntax_t01: MissingCompileTimeError # Issue co19/30264
-Language/Types/Type_Void/syntax_t02: MissingCompileTimeError # Issue co19/30264
-Language/Types/Type_Void/syntax_t04: MissingCompileTimeError # Issue co19/30264
+Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t01: MissingCompileTimeError # Issue 25495
+Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t03: MissingCompileTimeError # Issue 25495
+Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t05: MissingCompileTimeError # Issue 25495
 Language/Types/Type_Void/syntax_t09: MissingCompileTimeError # Issue co19/30264
 LayoutTests/fast/*: SkipByDesign # DOM not supported on VM.
 LibTest/collection/ListBase/ListBase_class_A01_t01: RuntimeError # Large integers
diff --git a/tests/co19_2/co19_2-analyzer.status b/tests/co19_2/co19_2-analyzer.status
index 5eea4d2..c1a2a01 100644
--- a/tests/co19_2/co19_2-analyzer.status
+++ b/tests/co19_2/co19_2-analyzer.status
@@ -3,284 +3,58 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dart2analyzer && $strong ]
-Language/Classes/Abstract_Instance_Members/override_default_value_t01: MissingCompileTimeError
-Language/Classes/Abstract_Instance_Members/override_default_value_t02: MissingCompileTimeError
-Language/Classes/Abstract_Instance_Members/override_default_value_t03: MissingCompileTimeError
-Language/Classes/Abstract_Instance_Members/override_default_value_t04: MissingCompileTimeError
-Language/Classes/Abstract_Instance_Members/override_default_value_t05: MissingCompileTimeError
-Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t01: MissingCompileTimeError
-Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t02: MissingCompileTimeError
-Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t04: MissingCompileTimeError
-Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t05: MissingCompileTimeError
-Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t06: MissingCompileTimeError
-Language/Classes/Getters/type_object_t01: CompileTimeError
-Language/Classes/Getters/type_object_t02: CompileTimeError
-Language/Classes/Instance_Methods/override_different_default_values_t01: MissingCompileTimeError
-Language/Classes/Instance_Methods/override_different_default_values_t02: MissingCompileTimeError
-Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t01: MissingCompileTimeError
-Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t02: MissingCompileTimeError
-Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t04: MissingCompileTimeError
-Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t05: MissingCompileTimeError
-Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t06: MissingCompileTimeError
-Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t07: MissingCompileTimeError
-Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t09: MissingCompileTimeError
+Language/Classes/Abstract_Instance_Members/override_default_value_t01: MissingCompileTimeError # Issue 27476
+Language/Classes/Abstract_Instance_Members/override_default_value_t02: MissingCompileTimeError # Issue 27476
+Language/Classes/Abstract_Instance_Members/override_default_value_t03: MissingCompileTimeError # Issue 27476
+Language/Classes/Abstract_Instance_Members/override_default_value_t04: MissingCompileTimeError # Issue 27476
+Language/Classes/Abstract_Instance_Members/override_default_value_t05: MissingCompileTimeError # Issue 27476
+Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t01: MissingCompileTimeError # Issue 27476
+Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t02: MissingCompileTimeError # Issue 27476
+Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t04: MissingCompileTimeError # Issue 27476
+Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t05: MissingCompileTimeError # Issue 27476
+Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t06: MissingCompileTimeError # Issue 27476
+Language/Classes/Getters/type_object_t01: CompileTimeError # Issue 23721
+Language/Classes/Getters/type_object_t02: CompileTimeError # Issue 23721
+Language/Classes/Instance_Methods/override_different_default_values_t01: MissingCompileTimeError # Issue 27476
+Language/Classes/Instance_Methods/override_different_default_values_t02: MissingCompileTimeError # Issue 27476
+Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t01: MissingCompileTimeError # Issue 27476
+Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t02: MissingCompileTimeError # Issue 27476
+Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t04: MissingCompileTimeError # Issue 27476
+Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t05: MissingCompileTimeError # Issue 27476
+Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t06: MissingCompileTimeError # Issue 27476
+Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t07: MissingCompileTimeError # Issue 27476
+Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t09: MissingCompileTimeError # Issue 27476
 Language/Classes/method_definition_t06: MissingCompileTimeError
-Language/Expressions/Assignment/expression_assignment_failed_t02: CompileTimeError
-Language/Expressions/Assignment/indexed_expression_super_t03: CompileTimeError
-Language/Expressions/Assignment/indexed_expression_super_t04: CompileTimeError
-Language/Expressions/Assignment/static_type_t02: CompileTimeError
-Language/Expressions/Assignment/static_type_t03: CompileTimeError
-Language/Expressions/Assignment/super_assignment_failed_t01: CompileTimeError
-Language/Expressions/Assignment/super_assignment_failed_t02: CompileTimeError
-Language/Expressions/Assignment/super_assignment_failed_t03: CompileTimeError
-Language/Expressions/Assignment/super_assignment_failed_t04: CompileTimeError
-Language/Expressions/Assignment/super_assignment_static_warning_t02: CompileTimeError
-Language/Expressions/Assignment/super_assignment_static_warning_t03: CompileTimeError
-Language/Expressions/Assignment/super_assignment_t06: CompileTimeError
-Language/Expressions/Assignment/super_assignment_value_t02: CompileTimeError
-Language/Expressions/Assignment/this_assignment_t02: CompileTimeError
-Language/Expressions/Constants/identifier_denotes_a_constant_t03: MissingCompileTimeError
-Language/Expressions/Identifier_Reference/built_in_identifier_t02: CompileTimeError
+Language/Expressions/Constants/identifier_denotes_a_constant_t03: MissingCompileTimeError # Issue 27477
 Language/Expressions/Identifier_Reference/evaluation_library_or_getter_t01: StaticWarning
-Language/Expressions/Identifier_Reference/evaluation_property_extraction_t04: CompileTimeError
-Language/Expressions/Identifier_Reference/evaluation_type_parameter_t02: MissingCompileTimeError
-Language/Expressions/Lookup/Getter_and_Setter_Lookup/definition_t09: CompileTimeError
-Language/Expressions/Lookup/Getter_and_Setter_Lookup/definition_t10: CompileTimeError
-Language/Expressions/Method_Invocation/Ordinary_Invocation/accessible_instance_member_t03: CompileTimeError
-Language/Expressions/Method_Invocation/Ordinary_Invocation/accessible_instance_member_t04: CompileTimeError
-Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t03: CompileTimeError
-Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t04: CompileTimeError
-Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t05: CompileTimeError
-Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t01: CompileTimeError
-Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t02: CompileTimeError
-Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/no_such_method_t01: CompileTimeError
-Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/no_such_method_t02: CompileTimeError
-Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/static_type_t03: CompileTimeError
-Language/Functions/generator_return_type_t02: MissingCompileTimeError
-Language/Functions/generator_return_type_t06: MissingCompileTimeError
-Language/Generics/syntax_t02: Crash
-Language/Generics/syntax_t03: Crash
-Language/Libraries_and_Scripts/Imports/namespace_changes_t01: StaticWarning
-Language/Libraries_and_Scripts/Imports/namespace_changes_t02: StaticWarning
-Language/Libraries_and_Scripts/Imports/namespace_changes_t16: StaticWarning
-Language/Libraries_and_Scripts/Imports/namespace_changes_t17: StaticWarning
-Language/Libraries_and_Scripts/Parts/compilation_t03: StaticWarning
-Language/Libraries_and_Scripts/Parts/compilation_t05: StaticWarning
-Language/Mixins/Mixin_Application/static_warning_t02: CompileTimeError
-Language/Mixins/Mixin_Application/superinterfaces_t07: CompileTimeError
-Language/Mixins/Mixin_Application/syntax_t11: CompileTimeError
-Language/Mixins/Mixin_Application/syntax_t12: CompileTimeError
-Language/Mixins/Mixin_Application/syntax_t13: CompileTimeError
-Language/Mixins/Mixin_Application/syntax_t14: CompileTimeError
-Language/Mixins/Mixin_Application/syntax_t21: CompileTimeError
-Language/Mixins/Mixin_Application/syntax_t22: CompileTimeError
-Language/Mixins/Mixin_Application/syntax_t23: CompileTimeError
-Language/Mixins/Mixin_Application/syntax_t24: CompileTimeError
-Language/Mixins/Mixin_Application/syntax_t25: CompileTimeError
-Language/Mixins/Mixin_Application/warning_t01: CompileTimeError
-Language/Mixins/Mixin_Application/warning_t02: CompileTimeError
-Language/Mixins/Mixin_Application/warning_t03: CompileTimeError
-Language/Mixins/declaring_constructor_t05: MissingCompileTimeError
-Language/Mixins/declaring_constructor_t06: MissingCompileTimeError
-Language/Statements/Assert/execution_t10: MissingCompileTimeError
-Language/Statements/Assert/type_t02: MissingCompileTimeError
-Language/Statements/Assert/type_t04: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/evaluation_type_parameter_t02: MissingCompileTimeError # Issue 27491
+Language/Functions/generator_return_type_t02: MissingCompileTimeError # Issue 32192
+Language/Functions/generator_return_type_t06: MissingCompileTimeError # Issue 32192
+Language/Generics/syntax_t02: Crash # Issue 29388
+Language/Generics/syntax_t03: Crash # Issue 29388
+Language/Mixins/Mixin_Application/static_warning_t02: CompileTimeError # Issue 26409
+Language/Mixins/Mixin_Application/superinterfaces_t07: CompileTimeError # Issue 26409
+Language/Mixins/Mixin_Application/syntax_t11: CompileTimeError # Issue 26409
+Language/Mixins/Mixin_Application/syntax_t12: CompileTimeError # Issue 26409
+Language/Mixins/Mixin_Application/syntax_t13: CompileTimeError # Issue 26409
+Language/Mixins/Mixin_Application/syntax_t14: CompileTimeError # Issue 26409
+Language/Mixins/Mixin_Application/syntax_t21: CompileTimeError # Issue 26409
+Language/Mixins/Mixin_Application/syntax_t22: CompileTimeError # Issue 26409
+Language/Mixins/Mixin_Application/syntax_t23: CompileTimeError # Issue 26409
+Language/Mixins/Mixin_Application/syntax_t24: CompileTimeError # Issue 26409
+Language/Mixins/Mixin_Application/syntax_t25: CompileTimeError # Issue 26409
+Language/Mixins/Mixin_Application/warning_t01: CompileTimeError # Issue 23878
+Language/Mixins/Mixin_Application/warning_t02: CompileTimeError # Issue 23878
+Language/Mixins/Mixin_Application/warning_t03: CompileTimeError # Issue 23878
+Language/Mixins/declaring_constructor_t05: MissingCompileTimeError # Issue 24767
+Language/Mixins/declaring_constructor_t06: MissingCompileTimeError # Issue 24767
+Language/Statements/Assert/execution_t10: MissingCompileTimeError # Issue 27426
+Language/Statements/Assert/type_t02: MissingCompileTimeError # Issue 27426
+Language/Statements/Assert/type_t04: MissingCompileTimeError # Issue 26002
 Language/Statements/Do/condition_type_t02: MissingCompileTimeError
 Language/Types/Interface_Types/subtype_t12: StaticWarning
-Language/Types/Type_Declarations/Typedef/syntax_t01: StaticWarning
-Language/Types/Type_Void/syntax_t09: MissingCompileTimeError
+Language/Types/Type_Void/syntax_t09: MissingCompileTimeError # Issue 30177
 Language/Types/Type_Void/using_t02: MissingCompileTimeError
-Language/Variables/final_or_static_initialization_t01: MissingCompileTimeError
-Language/Variables/final_or_static_initialization_t02: MissingCompileTimeError
-Language/Variables/final_or_static_initialization_t03: MissingCompileTimeError
-LayoutTests/fast/canvas/canvas-blending-clipping_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-color-over-color_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-color-over-gradient_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-color-over-image_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-color-over-pattern_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-fill-style_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-global-alpha_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-gradient-over-color_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-gradient-over-gradient_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-gradient-over-image_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-gradient-over-pattern_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-image-over-color_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-image-over-gradient_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-image-over-image_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-image-over-pattern_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-pattern-over-color_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-pattern-over-gradient_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-pattern-over-image_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-pattern-over-pattern_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-shadow_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-text_t01: StaticWarning
-LayoutTests/fast/canvas/canvas-blending-transforms_t01: StaticWarning
-LibTest/async/Stream/Stream.fromFutures_A01_t01: StaticWarning
-LibTest/async/Stream/Stream.fromFutures_A01_t02: StaticWarning
-LibTest/async/Stream/Stream.fromFutures_A02_t01: StaticWarning
-LibTest/async/Stream/Stream.fromFutures_A02_t02: StaticWarning
-LibTest/async/Stream/Stream.fromFutures_A04_t01: StaticWarning
-LibTest/async/Stream/Stream.fromIterable_A03_t01: StaticWarning
-LibTest/async/Stream/Stream.periodic_A01_t01: StaticWarning
-LibTest/async/Stream/Stream.periodic_A04_t01: StaticWarning
-LibTest/async/StreamController/StreamController.broadcast_A09_t01: StaticWarning
-LibTest/async/StreamController/StreamController.broadcast_A10_t01: StaticWarning
-LibTest/async/StreamController/stream_A02_t01: StaticWarning
-LibTest/async/StreamController/stream_A03_t01: StaticWarning
-LibTest/async/Zone/runBinaryGuarded_A01_t02: CompileTimeError
-LibTest/async/Zone/runUnary_A01_t01: CompileTimeError
-LibTest/collection/DoubleLinkedQueue/firstWhere_A02_t01: StaticWarning
-LibTest/collection/DoubleLinkedQueue/firstWhere_A03_t01: StaticWarning
-LibTest/collection/DoubleLinkedQueue/lastWhere_A02_t01: StaticWarning
-LibTest/collection/DoubleLinkedQueue/lastWhere_A03_t01: StaticWarning
-LibTest/collection/DoubleLinkedQueue/skipWhile_A02_t01: StaticWarning
-LibTest/collection/DoubleLinkedQueue/takeWhile_A02_t01: StaticWarning
-LibTest/collection/DoubleLinkedQueue/where_A02_t01: StaticWarning
-LibTest/collection/HashMap/HashMap_class_A01_t01: StaticWarning
-LibTest/collection/HashSet/HashSet_A01_t02: StaticWarning
-LibTest/collection/HashSet/HashSet_class_A01_t01: StaticWarning
-LibTest/collection/IterableBase/IterableBase_class_A01_t02: StaticWarning
-LibTest/collection/IterableMixin/IterableMixin_class_A02_t01: StaticWarning
-LibTest/collection/IterableMixin/contains_A02_t01: StaticWarning
-LibTest/collection/IterableMixin/every_A01_t01: StaticWarning
-LibTest/collection/IterableMixin/every_A01_t02: StaticWarning
-LibTest/collection/IterableMixin/every_A02_t01: StaticWarning
-LibTest/collection/IterableMixin/expand_A02_t01: StaticWarning
-LibTest/collection/IterableMixin/firstWhere_A02_t01: StaticWarning
-LibTest/collection/IterableMixin/firstWhere_A02_t02: StaticWarning
-LibTest/collection/IterableMixin/map_A03_t01: StaticWarning
-LibTest/collection/IterableMixin/skipWhile_A02_t01: StaticWarning
-LibTest/collection/IterableMixin/takeWhile_A02_t01: StaticWarning
-LibTest/collection/IterableMixin/where_A02_t01: StaticWarning
-LibTest/collection/LinkedHashMap/LinkedHashMap_A03_t01: StaticWarning
-LibTest/collection/LinkedHashMap/LinkedHashMap_A04_t01: StaticWarning
-LibTest/collection/LinkedHashMap/LinkedHashMap_A04_t02: StaticWarning
-LibTest/collection/LinkedHashMap/LinkedHashMap_class_A01_t01: StaticWarning
-LibTest/collection/LinkedHashSet/LinkedHashSet_A03_t01: StaticWarning
-LibTest/collection/LinkedHashSet/LinkedHashSet_A05_t01: StaticWarning
-LibTest/collection/LinkedHashSet/LinkedHashSet_A05_t02: StaticWarning
-LibTest/collection/LinkedHashSet/LinkedHashSet_class_A01_t01: StaticWarning
-LibTest/collection/LinkedList/remove_A01_t01: StaticWarning
-LibTest/collection/ListBase/ListBase_class_A01_t01: StaticWarning
-LibTest/collection/ListMixin/ListMixin_class_A01_t01: StaticWarning
-LibTest/collection/ListQueue/ListQueue_class_A01_t01: StaticWarning
-LibTest/collection/MapBase/MapBase_class_A01_t01: StaticWarning
-LibTest/collection/MapMixin/MapMixin_class_A01_t01: StaticWarning
-LibTest/collection/MapView/MapView_class_A01_t01: StaticWarning
-LibTest/collection/Maps/forEach_A01_t01: StaticWarning
-LibTest/collection/Maps/forEach_A01_t03: StaticWarning
-LibTest/collection/Maps/forEach_A01_t04: StaticWarning
-LibTest/collection/Maps/forEach_A01_t05: StaticWarning
-LibTest/collection/Maps/forEach_A01_t06: StaticWarning
-LibTest/collection/Maps/forEach_A02_t01: StaticWarning
-LibTest/collection/Queue/Queue_class_A01_t01: StaticWarning
-LibTest/collection/SetBase/SetBase_class_A01_t01: StaticWarning
-LibTest/collection/SetMixin/SetMixin_class_A01_t01: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterable_A03_t01: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterable_A05_t01: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterable_A06_t01: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterable_A06_t02: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterables_A04_t01: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterables_A05_t01: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap.fromIterables_A05_t02: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap.from_A02_t01: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap.from_A03_t01: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap.from_A03_t02: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap_class_A02_t01: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap_class_A02_t02: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap_class_A03_t01: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap_class_A03_t02: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap_class_A04_t02: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap_class_A05_t01: StaticWarning
-LibTest/collection/SplayTreeMap/SplayTreeMap_class_A05_t02: StaticWarning
-LibTest/collection/SplayTreeMap/inherited_tests_A01_t01: StaticWarning
-LibTest/collection/SplayTreeSet/SplayTreeSet.from_A02_t07: StaticWarning
-LibTest/collection/SplayTreeSet/SplayTreeSet.from_A02_t08: StaticWarning
-LibTest/collection/SplayTreeSet/SplayTreeSet_A04_t01: StaticWarning
-LibTest/collection/SplayTreeSet/SplayTreeSet_A05_t01: StaticWarning
-LibTest/collection/SplayTreeSet/SplayTreeSet_A06_t01: StaticWarning
-LibTest/collection/SplayTreeSet/SplayTreeSet_class_A01_t01: StaticWarning
-LibTest/collection/UnmodifiableListView/UnmodifiableListView_class_A01_t01: StaticWarning
-LibTest/core/List/Iterable_A01_t01: StaticWarning
-LibTest/core/List/List_class_A01_t01: StaticWarning
-LibTest/core/List/List_class_A01_t02: StaticWarning
-LibTest/core/Map/allTests_A01_t01: StaticWarning
-LibTest/core/RegExp/allMatches_A01_t01: StaticWarning
-LibTest/core/Set/every_A01_t01: StaticWarning
-LibTest/core/Set/every_A01_t02: StaticWarning
-LibTest/core/Set/every_A01_t03: StaticWarning
-LibTest/core/Set/forEach_A01_t01: StaticWarning
-LibTest/core/Set/forEach_A01_t02: StaticWarning
-LibTest/core/Set/forEach_A01_t03: StaticWarning
-LibTest/core/Set/forEach_A01_t04: StaticWarning
-LibTest/core/Set/forEach_A01_t05: StaticWarning
-LibTest/core/double/operator_GE_A01_t03: StaticWarning
-LibTest/core/double/operator_GE_A02_t01: StaticWarning
-LibTest/core/double/operator_GT_A01_t03: StaticWarning
-LibTest/core/double/operator_GT_A02_t01: StaticWarning
-LibTest/core/double/operator_LE_A01_t03: StaticWarning
-LibTest/core/double/operator_LE_A02_t01: StaticWarning
-LibTest/core/double/operator_LT_A01_t03: StaticWarning
-LibTest/core/double/operator_LT_A02_t01: StaticWarning
-LibTest/core/double/operator_addition_A01_t07: StaticWarning
-LibTest/core/double/operator_addition_A02_t01: StaticWarning
-LibTest/core/double/operator_division_A01_t07: StaticWarning
-LibTest/core/double/operator_division_A01_t08: StaticWarning
-LibTest/core/double/operator_division_A01_t11: StaticWarning
-LibTest/core/double/operator_division_A02_t01: StaticWarning
-LibTest/core/double/operator_multiplication_A01_t06: StaticWarning
-LibTest/core/double/operator_multiplication_A01_t08: StaticWarning
-LibTest/core/double/operator_multiplication_A02_t01: StaticWarning
-LibTest/core/double/operator_remainder_A01_t02: StaticWarning
-LibTest/core/double/operator_remainder_A01_t03: StaticWarning
-LibTest/core/double/operator_remainder_A01_t04: StaticWarning
-LibTest/core/double/operator_remainder_A01_t05: StaticWarning
-LibTest/core/double/operator_remainder_A01_t06: StaticWarning
-LibTest/core/double/operator_remainder_A02_t01: StaticWarning
-LibTest/core/double/operator_subtraction_A01_t07: StaticWarning
-LibTest/core/double/operator_subtraction_A01_t08: StaticWarning
-LibTest/core/double/operator_subtraction_A02_t01: StaticWarning
-LibTest/core/double/operator_truncating_division_A01_t08: StaticWarning
-LibTest/core/double/operator_truncating_division_A02_t01: StaticWarning
-LibTest/core/double/remainder_A01_t02: StaticWarning
-LibTest/core/double/remainder_A01_t03: StaticWarning
-LibTest/core/double/remainder_A01_t04: StaticWarning
-LibTest/core/double/remainder_A01_t05: StaticWarning
-LibTest/core/double/remainder_A01_t06: StaticWarning
-LibTest/core/double/remainder_A02_t01: StaticWarning
-LibTest/core/double/toStringAsFixed_A02_t01: StaticWarning
-LibTest/io/Directory/Directory.fromUri_A01_t01: CompileTimeError
-LibTest/io/File/parent_A01_t02: CompileTimeError
-LibTest/io/HttpClientRequest/addError_A02_t01: StaticWarning
-LibTest/io/HttpClientRequest/addStream_A01_t01: StaticWarning
-LibTest/io/HttpClientRequest/addStream_A02_t01: StaticWarning
-LibTest/io/HttpClientRequest/addStream_A02_t02: StaticWarning
-LibTest/io/HttpClientRequest/add_A03_t01: StaticWarning
-LibTest/io/HttpClientRequest/add_A03_t02: StaticWarning
-LibTest/io/HttpClientRequest/flush_A02_t01: StaticWarning
-LibTest/io/HttpClientRequest/flush_A02_t02: StaticWarning
-LibTest/io/Link/Link_A03_t02: CompileTimeError
-LibTest/io/WebSocket/connect_A01_t01: CompileTimeError
-LibTest/io/WebSocket/connect_A01_t02: CompileTimeError
-LibTest/isolate/Isolate/spawn_A01_t03: StaticWarning
-LibTest/isolate/RawReceivePort/sendPort_A01_t01: CompileTimeError
-LibTest/isolate/ReceivePort/any_A01_t01: StaticWarning
-LibTest/isolate/ReceivePort/any_A01_t02: StaticWarning
-LibTest/isolate/ReceivePort/every_A01_t01: StaticWarning
-LibTest/isolate/ReceivePort/firstWhere_A01_t01: StaticWarning
-LibTest/isolate/ReceivePort/firstWhere_A02_t01: StaticWarning
-LibTest/isolate/ReceivePort/firstWhere_A03_t02: StaticWarning
-LibTest/isolate/ReceivePort/fold_A01_t01: StaticWarning
-LibTest/isolate/ReceivePort/forEach_A01_t01: StaticWarning
-LibTest/isolate/ReceivePort/lastWhere_A01_t01: StaticWarning
-LibTest/isolate/ReceivePort/lastWhere_A02_t01: StaticWarning
-LibTest/isolate/ReceivePort/lastWhere_A04_t01: StaticWarning
-LibTest/isolate/ReceivePort/reduce_A01_t01: StaticWarning
-LibTest/isolate/ReceivePort/singleWhere_A01_t01: StaticWarning
-LibTest/isolate/ReceivePort/singleWhere_A02_t01: StaticWarning
-LibTest/isolate/ReceivePort/toSet_A01_t01: StaticWarning
-LibTest/isolate/ReceivePort/transform_A01_t01: StaticWarning
-LibTest/isolate/ReceivePort/where_A01_t01: StaticWarning
-LibTest/isolate/ReceivePort/where_A01_t02: StaticWarning
-WebPlatformTest/html/semantics/tabular-data/the-table-element/table-rows_t01: StaticWarning
-
+Language/Variables/final_or_static_initialization_t01: MissingCompileTimeError # Issue 27510
+Language/Variables/final_or_static_initialization_t02: MissingCompileTimeError # Issue 27510
+Language/Variables/final_or_static_initialization_t03: MissingCompileTimeError # Issue 27510
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index 0f13e20..39af62a 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -91,7 +91,6 @@
 codegen/value_range_test: Pass, Slow
 codegen/value_range_kernel_test: Pass, Slow
 end_to_end/exit_code_test: Pass, Slow
-generic_methods/world_test: RuntimeError
 jsinterop/declaration_test: Slow, Pass
 jsinterop/interop_anonymous_unreachable_test: Pass, Slow
 jsinterop/world_test: Pass, Slow
diff --git a/tests/compiler/dart2js/equivalence/show_helper.dart b/tests/compiler/dart2js/equivalence/show_helper.dart
index 46eadd0..6a60e11 100644
--- a/tests/compiler/dart2js/equivalence/show_helper.dart
+++ b/tests/compiler/dart2js/equivalence/show_helper.dart
@@ -19,6 +19,7 @@
   argParser.addFlag('colors', negatable: true);
   argParser.addFlag('all', negatable: false, defaultsTo: false);
   argParser.addFlag('use-kernel', negatable: false, defaultsTo: false);
+  argParser.addFlag('strong', negatable: false, defaultsTo: false);
   return argParser;
 }
 
@@ -31,7 +32,8 @@
     useColors = argResults['colors'];
   }
   bool verbose = argResults['verbose'];
-  bool useKernel = argResults['use-kernel'];
+  bool strongMode = argResults['strong'];
+  bool useKernel = argResults['use-kernel'] || strongMode;
 
   String file = argResults.rest.first;
   Uri entryPoint = Uri.base.resolve(nativeToUriPath(file));
@@ -48,6 +50,9 @@
   if (useKernel) {
     options.add(Flags.useKernel);
   }
+  if (strongMode) {
+    options.add(Flags.strongMode);
+  }
   CompiledData data = await computeData(
       entryPoint, const {}, useKernel ? computeKernelData : computeAstData,
       computeClassData:
diff --git a/tests/compiler/dart2js/generic_methods/world_test.dart b/tests/compiler/dart2js/generic_methods/world_test.dart
index 77af52d..37b2244 100644
--- a/tests/compiler/dart2js/generic_methods/world_test.dart
+++ b/tests/compiler/dart2js/generic_methods/world_test.dart
@@ -19,16 +19,19 @@
   method1<T>() {}
 
   @noInline
-  method2<T>() {}
+  method2<T>() => T;
 
   @noInline
-  method3<T>() {}
+  method3<T>() => T;
 
   @noInline
-  method4<T>() {}
+  method4<T>() => T;
 
   @noInline
-  method5<T>() {}
+  method5<T>() => T;
+
+  @noInline
+  method6<T>() {}
 }
 
 class Class2 {}
@@ -48,6 +51,9 @@
 
   @noInline
   method5<T>() {}
+
+  @noInline
+  method6<T>() {}
 }
 
 main(args) {
@@ -68,6 +74,12 @@
 
   var c6 = args != null ? new Class1() : new Class3();
   c6.method5();  // Type arguments are inferred here.
+
+  dynamic c7 = args != null ? new Class1() : new Class2();
+  c7.method6<int>(); // Type arguments are not needed.
+
+  var c8 = args != null ? new Class1() : new Class3();
+  c8.method6(); // Type arguments are inferred here but not needed.
 }
 ''';
 
@@ -108,5 +120,6 @@
     checkInvocationsFor('method3', [oneTypeArgument]);
     checkInvocationsFor('method4', [oneTypeArgument]);
     checkInvocationsFor('method5', [noTypeArguments, oneTypeArgument]);
+    checkInvocationsFor('method6', [noTypeArguments]);
   });
 }
diff --git a/tests/compiler/dart2js/helpers/program_lookup.dart b/tests/compiler/dart2js/helpers/program_lookup.dart
index 7a92931..b73b5fc 100644
--- a/tests/compiler/dart2js/helpers/program_lookup.dart
+++ b/tests/compiler/dart2js/helpers/program_lookup.dart
@@ -51,11 +51,11 @@
   }
 
   Library getLibrary(LibraryEntity element) {
-    return getLibraryData(element).library;
+    return getLibraryData(element)?.library;
   }
 
   ClassData getClassData(ClassEntity element) {
-    return getLibraryData(element.library).getClassData(element);
+    return getLibraryData(element.library)?.getClassData(element);
   }
 
   Class getClass(ClassEntity element) {
diff --git a/tests/compiler/dart2js/inference/inference_equivalence.dart b/tests/compiler/dart2js/inference/inference_equivalence.dart
index b308a29..cdd9a9e 100644
--- a/tests/compiler/dart2js/inference/inference_equivalence.dart
+++ b/tests/compiler/dart2js/inference/inference_equivalence.dart
@@ -10,7 +10,6 @@
 import 'package:args/args.dart';
 import 'package:compiler/src/filenames.dart';
 import 'package:compiler/src/inferrer/inferrer_engine.dart';
-import 'package:compiler/src/resolution/class_hierarchy.dart';
 import '../equivalence/id_equivalence_helper.dart';
 import 'inference_test_helper.dart';
 import '../equivalence/id_equivalence.dart';
@@ -30,7 +29,6 @@
   }
   bool verbose = argResults['verbose'];
 
-  useOptimizedMixins = true;
   InferrerEngineImpl.useSorterForTesting = true;
 
   bool success = true;
diff --git a/tests/compiler/dart2js/inlining/data/setter.dart b/tests/compiler/dart2js/inlining/data/setter.dart
new file mode 100644
index 0000000..50f6ec9
--- /dev/null
+++ b/tests/compiler/dart2js/inlining/data/setter.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// ignore: IMPORT_INTERNAL_LIBRARY
+import 'dart:_js_helper';
+
+/*element: main:[]*/
+main() {
+  inlineSetter();
+}
+
+class Class1 {
+  var field;
+/*element: Class1.:[]*/
+  @NoInline()
+  Class1();
+  /*element: Class1.setter=:[inlineSetter]*/
+  set setter(value) {
+    field = value;
+  }
+}
+
+/*element: inlineSetter:[]*/
+@NoInline()
+inlineSetter() {
+  Class1 c = new Class1();
+  c.setter = 42;
+}
diff --git a/tests/compiler/dart2js/kernel/closed_world2_test.dart b/tests/compiler/dart2js/kernel/closed_world2_test.dart
index 8a1990b..b6828d0 100644
--- a/tests/compiler/dart2js/kernel/closed_world2_test.dart
+++ b/tests/compiler/dart2js/kernel/closed_world2_test.dart
@@ -18,7 +18,6 @@
 import 'package:compiler/src/js_backend/backend_usage.dart';
 import 'package:compiler/src/kernel/element_map.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
-import 'package:compiler/src/resolution/class_hierarchy.dart';
 import 'package:compiler/src/serialization/equivalence.dart';
 import 'package:compiler/src/universe/world_builder.dart';
 import 'package:compiler/src/util/util.dart';
@@ -191,7 +190,6 @@
   }
 
   enableDebugMode();
-  useOptimizedMixins = true;
   ElementResolutionWorldBuilder.useInstantiationMap = true;
 
   print('---- analyze-only ------------------------------------------------');
diff --git a/tests/compiler/dart2js/kernel/closed_world_from_dill_test.dart b/tests/compiler/dart2js/kernel/closed_world_from_dill_test.dart
index 758d342..4f65d62 100644
--- a/tests/compiler/dart2js/kernel/closed_world_from_dill_test.dart
+++ b/tests/compiler/dart2js/kernel/closed_world_from_dill_test.dart
@@ -17,7 +17,6 @@
 import 'package:compiler/src/enqueue.dart';
 import 'package:compiler/src/kernel/element_map.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
-import 'package:compiler/src/resolution/class_hierarchy.dart';
 import 'package:compiler/src/universe/world_builder.dart';
 import 'package:compiler/src/world.dart';
 import 'package:expect/expect.dart';
@@ -102,7 +101,6 @@
   }
 
   enableDebugMode();
-  useOptimizedMixins = true;
 
   Directory dir = await Directory.systemTemp.createTemp('dart2js-with-dill');
   print('--- create temp directory $dir -------------------------------');
diff --git a/tests/compiler/dart2js/kernel/compile_from_dill_test_helper.dart b/tests/compiler/dart2js/kernel/compile_from_dill_test_helper.dart
index 9332d51..e6e987e 100644
--- a/tests/compiler/dart2js/kernel/compile_from_dill_test_helper.dart
+++ b/tests/compiler/dart2js/kernel/compile_from_dill_test_helper.dart
@@ -18,7 +18,6 @@
 import 'package:compiler/src/kernel/kernel_backend_strategy.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:compiler/src/serialization/equivalence.dart';
-import 'package:compiler/src/resolution/class_hierarchy.dart';
 import 'package:compiler/src/universe/world_builder.dart';
 import 'package:compiler/src/world.dart';
 import 'package:expect/expect.dart';
@@ -383,7 +382,6 @@
     bool expectIdenticalOutput: true}) async {
   enableDebugMode();
   Elements.useCFEOrder = true;
-  useOptimizedMixins = true;
 
   print('---- compile from ast ----------------------------------------------');
   DiagnosticCollector collector = new DiagnosticCollector();
diff --git a/tests/compiler/dart2js/kernel/mixin_test.dart b/tests/compiler/dart2js/kernel/mixin_test.dart
index 0f921e7..888c275 100644
--- a/tests/compiler/dart2js/kernel/mixin_test.dart
+++ b/tests/compiler/dart2js/kernel/mixin_test.dart
@@ -13,7 +13,6 @@
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
-import 'package:compiler/src/resolution/class_hierarchy.dart';
 import 'package:compiler/src/universe/class_set.dart';
 import 'package:compiler/src/world.dart';
 import 'package:expect/expect.dart';
@@ -111,8 +110,6 @@
 
 main(List<String> args) {
   asyncTest(() async {
-    useOptimizedMixins = true;
-
     Uri entryPoint = await createTemp(Uri.parse('memory:main.dart'), SOURCE,
         printSteps: true);
 
diff --git a/tests/compiler/dart2js/class_set_test.dart b/tests/compiler/dart2js/model/class_set_test.dart
similarity index 99%
rename from tests/compiler/dart2js/class_set_test.dart
rename to tests/compiler/dart2js/model/class_set_test.dart
index cf71cf5..f2d7b83 100644
--- a/tests/compiler/dart2js/class_set_test.dart
+++ b/tests/compiler/dart2js/model/class_set_test.dart
@@ -8,13 +8,13 @@
 
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
-import 'type_test_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/elements/entities.dart' show ClassEntity;
 import 'package:compiler/src/universe/class_set.dart';
 import 'package:compiler/src/util/enumset.dart';
 import 'package:compiler/src/util/util.dart';
 import 'package:compiler/src/world.dart';
+import '../type_test_helper.dart';
 
 void main() {
   asyncTest(() async {
diff --git a/tests/compiler/dart2js/const_exp_test.dart b/tests/compiler/dart2js/model/const_exp_test.dart
similarity index 98%
rename from tests/compiler/dart2js/const_exp_test.dart
rename to tests/compiler/dart2js/model/const_exp_test.dart
index 21d977e..a8b93f0 100644
--- a/tests/compiler/dart2js/const_exp_test.dart
+++ b/tests/compiler/dart2js/model/const_exp_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
-import 'type_test_helper.dart';
+import '../type_test_helper.dart';
 
 test(String constantInitializer, [String expectedOutput]) {
   if (expectedOutput == null) {
diff --git a/tests/compiler/dart2js/constant_expression_evaluate_test.dart b/tests/compiler/dart2js/model/constant_expression_evaluate_test.dart
similarity index 99%
rename from tests/compiler/dart2js/constant_expression_evaluate_test.dart
rename to tests/compiler/dart2js/model/constant_expression_evaluate_test.dart
index c281b3f..4c79125 100644
--- a/tests/compiler/dart2js/constant_expression_evaluate_test.dart
+++ b/tests/compiler/dart2js/model/constant_expression_evaluate_test.dart
@@ -23,7 +23,7 @@
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:compiler/src/kernel/element_map.dart';
 import 'package:compiler/src/kernel/element_map_impl.dart';
-import 'memory_compiler.dart';
+import '../memory_compiler.dart';
 
 class TestData {
   final String name;
diff --git a/tests/compiler/dart2js/constant_expression_test.dart b/tests/compiler/dart2js/model/constant_expression_test.dart
similarity index 99%
rename from tests/compiler/dart2js/constant_expression_test.dart
rename to tests/compiler/dart2js/model/constant_expression_test.dart
index 210992a..c115dae 100644
--- a/tests/compiler/dart2js/constant_expression_test.dart
+++ b/tests/compiler/dart2js/model/constant_expression_test.dart
@@ -11,7 +11,7 @@
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/compile_time_constants.dart';
 import 'package:compiler/src/elements/elements.dart';
-import 'memory_compiler.dart';
+import '../memory_compiler.dart';
 import 'constant_expression_evaluate_test.dart' show MemoryEnvironment;
 
 class TestData {
diff --git a/tests/compiler/dart2js/constant_value_test.dart b/tests/compiler/dart2js/model/constant_value_test.dart
similarity index 97%
rename from tests/compiler/dart2js/constant_value_test.dart
rename to tests/compiler/dart2js/model/constant_value_test.dart
index 5c5bec6..2e44dba 100644
--- a/tests/compiler/dart2js/constant_value_test.dart
+++ b/tests/compiler/dart2js/model/constant_value_test.dart
@@ -9,7 +9,7 @@
 import 'package:compiler/src/helpers/helpers.dart';
 import 'package:compiler/src/elements/elements.dart';
 import 'package:compiler/src/constants/values.dart';
-import 'type_test_helper.dart';
+import '../type_test_helper.dart';
 
 void main() {
   enableDebugMode();
diff --git a/tests/compiler/dart2js/subtype_test.dart b/tests/compiler/dart2js/model/subtype_test.dart
similarity index 99%
rename from tests/compiler/dart2js/subtype_test.dart
rename to tests/compiler/dart2js/model/subtype_test.dart
index 8053400..711c84c 100644
--- a/tests/compiler/dart2js/subtype_test.dart
+++ b/tests/compiler/dart2js/model/subtype_test.dart
@@ -11,7 +11,7 @@
 import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/elements/resolution_types.dart';
 import 'package:expect/expect.dart';
-import 'type_test_helper.dart';
+import '../type_test_helper.dart';
 
 void main() {
   asyncTest(() async {
diff --git a/tests/compiler/dart2js/subtypeset_test.dart b/tests/compiler/dart2js/model/subtypeset_test.dart
similarity index 98%
rename from tests/compiler/dart2js/subtypeset_test.dart
rename to tests/compiler/dart2js/model/subtypeset_test.dart
index d5038c6..10cef63 100644
--- a/tests/compiler/dart2js/subtypeset_test.dart
+++ b/tests/compiler/dart2js/model/subtypeset_test.dart
@@ -8,11 +8,11 @@
 
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
-import 'type_test_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/universe/class_set.dart';
 import 'package:compiler/src/world.dart';
+import '../type_test_helper.dart';
 
 void main() {
   asyncTest(() async {
diff --git a/tests/compiler/dart2js/type_substitution_test.dart b/tests/compiler/dart2js/model/type_substitution_test.dart
similarity index 98%
rename from tests/compiler/dart2js/type_substitution_test.dart
rename to tests/compiler/dart2js/model/type_substitution_test.dart
index 588f310..72ed70c 100644
--- a/tests/compiler/dart2js/type_substitution_test.dart
+++ b/tests/compiler/dart2js/model/type_substitution_test.dart
@@ -9,8 +9,8 @@
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/elements/resolution_types.dart';
-import 'compiler_helper.dart';
-import 'type_test_helper.dart';
+import '../compiler_helper.dart';
+import '../type_test_helper.dart';
 
 ResolutionDartType getType(compiler, String name) {
   dynamic clazz = findElement(compiler, "Class");
@@ -189,8 +189,8 @@
           StringType
         ];
 
-        // TODO(johnniwinther): Create types directly from strings to improve test
-        // readability.
+        // TODO(johnniwinther): Create types directly from strings to improve
+        // test readability.
 
         testSubstitution(compiler, arguments, parameters, "void1", "void2");
         testSubstitution(
diff --git a/tests/compiler/dart2js/world_test.dart b/tests/compiler/dart2js/model/world_test.dart
similarity index 99%
rename from tests/compiler/dart2js/world_test.dart
rename to tests/compiler/dart2js/model/world_test.dart
index 9719d41..70332ce 100644
--- a/tests/compiler/dart2js/world_test.dart
+++ b/tests/compiler/dart2js/model/world_test.dart
@@ -6,12 +6,12 @@
 
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
-import 'type_test_helper.dart';
 import 'package:compiler/src/common/names.dart';
 import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/universe/class_set.dart';
 import 'package:compiler/src/world.dart' show ClassQuery, ClosedWorld;
+import '../type_test_helper.dart';
 
 void main() {
   runTests(CompileMode compileMode) async {
diff --git a/tests/compiler/dart2js/old_frontend/analyze_unused_dart2js_test.dart b/tests/compiler/dart2js/old_frontend/analyze_unused_dart2js_test.dart
index 2de14d2..558bb2f 100644
--- a/tests/compiler/dart2js/old_frontend/analyze_unused_dart2js_test.dart
+++ b/tests/compiler/dart2js/old_frontend/analyze_unused_dart2js_test.dart
@@ -47,10 +47,6 @@
   //   "The method 'setterInvocationsByName' is never called."
   // ],
 
-  "pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart": const [
-    "The getter 'iterator' is not defined for the class 'Object'.",
-  ],
-
   "pkg/front_end/lib/src/fasta/type_inference/type_schema.dart": const [
     "The class 'UnknownType' overrides 'operator==', but not 'get hashCode'."
   ],
diff --git a/tests/compiler/dart2js/rti/data/dynamic_is2_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_is2_strong.dart
new file mode 100644
index 0000000..f3b260d
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_is2_strong.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  /*element: A.instanceMethod:deps=[B.instanceMethod],direct,explicit=[instanceMethod.T],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
+  instanceMethod<T>(t) => t is T;
+}
+
+class B {
+  /*element: B.instanceMethod:implicit=[instanceMethod.T],indirect,needsArgs,selectors=[Selector(call, instanceMethod, arity=2, types=1)]*/
+  instanceMethod<T>(A a, t) => a.instanceMethod<T>(t);
+}
+
+main() {
+  var b = new B();
+  b.instanceMethod<int>(new A(), 0);
+}
diff --git a/tests/compiler/dart2js/rti/data/dynamic_is_closure2_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_is_closure2_strong.dart
new file mode 100644
index 0000000..0d2153a
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_is_closure2_strong.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  /*element: A.instanceMethod:deps=[local],direct,explicit=[instanceMethod.T],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
+  instanceMethod<T>(t) => t is T;
+}
+
+main() {
+  /*implicit=[local.T],indirect,needsArgs,selectors=[Selector(call, call, arity=1, types=1)]*/
+  local<T>(t) {
+    var a = new A();
+    a.instanceMethod<T>(t);
+  }
+
+  local<int>(0);
+}
diff --git a/tests/compiler/dart2js/rti/data/dynamic_is_closure_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_is_closure_strong.dart
new file mode 100644
index 0000000..4100762
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_is_closure_strong.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  /*element: A.instanceMethod:direct,explicit=[instanceMethod.T],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
+  instanceMethod<T>(t) => t is T;
+}
+
+main() {
+  local() {
+    var a = new A();
+    a.instanceMethod<int>(0);
+  }
+
+  local();
+}
diff --git a/tests/compiler/dart2js/rti/data/dynamic_is_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_is_strong.dart
new file mode 100644
index 0000000..d644fe8
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_is_strong.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  /*element: A.instanceMethod:direct,explicit=[instanceMethod.T],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
+  instanceMethod<T>(t) => t is T;
+}
+
+main() {
+  var a = new A();
+  a.instanceMethod<int>(0);
+}
diff --git a/tests/compiler/dart2js/rti/data/dynamic_not2_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_not2_strong.dart
new file mode 100644
index 0000000..d04a960
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_not2_strong.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  /*element: A.instanceMethod:deps=[B.instanceMethod]*/
+  instanceMethod<T>(t) => t;
+}
+
+class B {
+  instanceMethod<T>(A a, t) => a.instanceMethod<T>(t);
+}
+
+main() {
+  var b = new B();
+  b.instanceMethod<int>(new A(), 0);
+}
diff --git a/tests/compiler/dart2js/rti/data/dynamic_not_closure2_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_not_closure2_strong.dart
new file mode 100644
index 0000000..f98d095
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_not_closure2_strong.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  /*element: A.instanceMethod:deps=[local]*/
+  instanceMethod<T>(t) => t;
+}
+
+main() {
+  local<T>(t) {
+    var a = new A();
+    a.instanceMethod<T>(t);
+  }
+
+  local<int>(0);
+}
diff --git a/tests/compiler/dart2js/rti/data/dynamic_not_closure_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_not_closure_strong.dart
new file mode 100644
index 0000000..601a0d6
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_not_closure_strong.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  instanceMethod<T>(t) => t;
+}
+
+main() {
+  local() {
+    var a = new A();
+    a.instanceMethod<int>(0);
+  }
+
+  local();
+}
diff --git a/tests/compiler/dart2js/rti/data/dynamic_not_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_not_strong.dart
new file mode 100644
index 0000000..5e81376
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_not_strong.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  instanceMethod<T>(t) => t;
+}
+
+main() {
+  var a = new A();
+  a.instanceMethod<int>(0);
+}
diff --git a/tests/compiler/dart2js/rti/data/dynamic_tear_off2_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_tear_off2_strong.dart
new file mode 100644
index 0000000..28102d4
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_tear_off2_strong.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: staticMethod:deps=[B.instanceMethod],direct,explicit=[staticMethod.T],needsArgs,selectors=[Selector(call, call, arity=1, types=1)]*/
+staticMethod<T>(t) => t is T;
+
+class B {
+  /*element: B.instanceMethod:implicit=[instanceMethod.T],indirect,needsArgs,selectors=[Selector(call, instanceMethod, arity=2, types=1)]*/
+  instanceMethod<T>(a, t) => a<T>(t);
+}
+
+main() {
+  var b = new B();
+  b.instanceMethod<int>(staticMethod, 0);
+}
diff --git a/tests/compiler/dart2js/rti/data/dynamic_tear_off3_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_tear_off3_strong.dart
new file mode 100644
index 0000000..8a9c2d6
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_tear_off3_strong.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  /*element: A.instanceMethod:deps=[staticMethod],direct,explicit=[instanceMethod.T],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
+  instanceMethod<T>(t) => t is T;
+}
+
+/*element: staticMethod:implicit=[staticMethod.T],indirect,needsArgs,selectors=[Selector(call, call, arity=2, types=1)]*/
+staticMethod<T>(A a, t) => a.instanceMethod<T>(t);
+
+main() {
+  var b = staticMethod;
+  b<int>(new A(), 0);
+}
diff --git a/tests/compiler/dart2js/rti/data/dynamic_tear_off4_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_tear_off4_strong.dart
new file mode 100644
index 0000000..b37ff25
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_tear_off4_strong.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: staticMethod1:deps=[staticMethod2],direct,explicit=[staticMethod1.T],needsArgs,selectors=[Selector(call, call, arity=1, types=1)]*/
+staticMethod1<T>(t) => t is T;
+
+/*element: staticMethod2:implicit=[staticMethod2.T],indirect,needsArgs,selectors=[Selector(call, call, arity=2, types=1)]*/
+staticMethod2<T>(a, t) => a<T>(t);
+
+main() {
+  var b = staticMethod2;
+  b<int>(staticMethod1, 0);
+}
diff --git a/tests/compiler/dart2js/rti/data/dynamic_tear_off_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_tear_off_strong.dart
new file mode 100644
index 0000000..55a024b
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_tear_off_strong.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: staticMethod:direct,explicit=[staticMethod.T],needsArgs,selectors=[Selector(call, call, arity=1, types=1)]*/
+staticMethod<T>(t) => t is T;
+
+main() {
+  var a = staticMethod;
+  a<int>(0);
+}
diff --git a/tests/compiler/dart2js/rti/data/dynamic_type_literal2_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_type_literal2_strong.dart
new file mode 100644
index 0000000..b9826a5
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_type_literal2_strong.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  /*element: A.instanceMethod:deps=[B.instanceMethod],exp,needsArgs,selectors=[Selector(call, instanceMethod, arity=0, types=1)]*/
+  instanceMethod<T>() => T;
+}
+
+class B {
+  /*element: B.instanceMethod:needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
+  instanceMethod<T>(A a) => a.instanceMethod<T>();
+}
+
+main() {
+  var b = new B();
+  b.instanceMethod<int>(new A());
+}
diff --git a/tests/compiler/dart2js/rti/data/dynamic_type_literal_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_type_literal_strong.dart
new file mode 100644
index 0000000..35506c8
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dynamic_type_literal_strong.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  /*element: A.instanceMethod:exp,needsArgs,selectors=[Selector(call, instanceMethod, arity=0, types=1)]*/
+  instanceMethod<T>() => T;
+}
+
+main() {
+  var a = new A();
+  a.instanceMethod<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart b/tests/compiler/dart2js/rti/data/generic_closure_instantiate_strong.dart
similarity index 78%
rename from tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart
rename to tests/compiler/dart2js/rti/data/generic_closure_instantiate_strong.dart
index 635ac78..cf9db9c 100644
--- a/tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart
+++ b/tests/compiler/dart2js/rti/data/generic_closure_instantiate_strong.dart
@@ -9,7 +9,8 @@
 class B<T> {}
 
 main() {
-  /*kernel.needsArgs*/ closure<T>() => new B<T>();
+  /*needsArgs,selectors=[Selector(call, call, arity=0, types=1)]*/
+  closure<T>() => new B<T>();
 
   closure<A>() is B<A>;
 }
diff --git a/tests/compiler/dart2js/rti/data/generic_method4_strong.dart b/tests/compiler/dart2js/rti/data/generic_method4_strong.dart
index 9700133..048ce79 100644
--- a/tests/compiler/dart2js/rti/data/generic_method4_strong.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method4_strong.dart
@@ -5,7 +5,7 @@
 import 'package:meta/dart2js.dart';
 import "package:expect/expect.dart";
 
-/*class: A:deps=[method2],direct,explicit=[A.T],needsArgs*/
+/*class: A:deps=[C.method2],direct,explicit=[A.T],needsArgs*/
 class A<T> {
   @noInline
   foo(x) {
@@ -16,7 +16,7 @@
 /*class: BB:implicit=[BB]*/
 class BB {}
 
-/*class: B:deps=[method1],implicit=[B.T],indirect,needsArgs*/
+/*class: B:deps=[C.method1],implicit=[B.T],indirect,needsArgs*/
 class B<T> implements BB {
   @noInline
   foo(c) {
@@ -25,13 +25,13 @@
 }
 
 class C {
-  /*element: C.method1:implicit=[method1.T],indirect,needsArgs*/
+  /*element: C.method1:implicit=[method1.T],indirect,needsArgs,selectors=[Selector(call, method1, arity=0, types=1)]*/
   @noInline
   method1<T>() {
     return new B<T>().foo(this);
   }
 
-  /*element: C.method2:deps=[B],implicit=[method2.T],indirect,needsArgs*/
+  /*element: C.method2:deps=[B],implicit=[method2.T],indirect,needsArgs,selectors=[Selector(call, method2, arity=0, types=1)]*/
   @noInline
   method2<T>() => new A<T>();
 }
diff --git a/tests/compiler/dart2js/rti/data/generic_method_is_strong.dart b/tests/compiler/dart2js/rti/data/generic_method_is_strong.dart
index db9a3f7..2ed28c3 100644
--- a/tests/compiler/dart2js/rti/data/generic_method_is_strong.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method_is_strong.dart
@@ -17,6 +17,7 @@
 
 class C2 {}
 
+/*class: C3:implicit=[C3]*/
 class C3 {}
 
 /*class: D1:implicit=[D1]*/
@@ -37,7 +38,7 @@
 /*class: F3:implicit=[F3]*/
 class F3 {}
 
-/*element: topLevelMethod1:direct,explicit=[topLevelMethod1.T],needsArgs*/
+/*element: topLevelMethod1:direct,explicit=[topLevelMethod1.T],needsArgs,selectors=[Selector(call, call, arity=2, named=[a1], types=1)]*/
 // Calls to this imply a check of the passed type arguments.
 bool topLevelMethod1<T>(T t, {a1}) => t is T;
 
@@ -45,7 +46,7 @@
 T topLevelMethod2<T>(T t, {a2}) => t;
 
 class Class {
-  /*element: Class.instanceMethod1:direct,explicit=[instanceMethod1.S],needsArgs*/
+  /*element: Class.instanceMethod1:direct,explicit=[instanceMethod1.S],needsArgs,selectors=[Selector(call, call, arity=2, named=[b1], types=1),Selector(call, instanceMethod1, arity=2, named=[b1], types=1)]*/
   // Calls to this imply a check of the passed type arguments.
   bool instanceMethod1<S>(S s, {b1}) => s is S;
 
@@ -55,7 +56,7 @@
 
 main() {
   // Calls to this imply a check of the passed type arguments.
-  /*direct,explicit=[localFunction1.U],needsArgs*/
+  /*direct,explicit=[localFunction1.U],needsArgs,selectors=[Selector(call, call, arity=2, named=[c1], types=1)]*/
   bool localFunction1<U>(U u, {c1}) => u is U;
 
   // Calls to this does _not_ imply a check of the passed type arguments.
diff --git a/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05_strong.dart b/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05_strong.dart
new file mode 100644
index 0000000..7e28606
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05_strong.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test derived from language_2/generic_methods_dynamic_test/05
+
+/*class: global#JSArray:deps=[EmptyIterable,List,ListIterable,SubListIterable],explicit=[JSArray,List<JSArray.E>],implicit=[JSArray.E],indirect,needsArgs*/
+/*class: global#List:deps=[C.bar,EmptyIterable,Iterable,JSArray,ListIterable,makeListFixedLength],explicit=[List,List.E,List<B>,List<JSArray.E>,List<makeListFixedLength.T>],implicit=[List.E],indirect,needsArgs*/
+
+import "package:expect/expect.dart";
+
+class A {}
+
+/*class: B:explicit=[List<B>],implicit=[B]*/
+class B {}
+
+class C {
+  /*element: C.bar:implicit=[bar.T],indirect,needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
+  List<T> bar<T>(Iterable<T> t) => <T>[t.first];
+}
+
+main() {
+  C c = new C();
+  dynamic x = c.bar<B>(<B>[new B()]);
+  Expect.isTrue(x is List<B>);
+}
diff --git a/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05a_strong.dart b/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05a_strong.dart
new file mode 100644
index 0000000..8940f95
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05a_strong.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Reduced version of generic_methods_dynamic_05a_strong.
+
+import "package:expect/expect.dart";
+
+/*class: A:deps=[C.bar],explicit=[A<B>],needsArgs*/
+class A<T> {
+  final T field;
+
+  A(this.field);
+}
+
+/*class: B:explicit=[A<B>]*/
+class B {}
+
+class C {
+  /*element: C.bar:needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
+  A<T> bar<T>(A<T> t) => new A<T>(t.field);
+}
+
+main() {
+  C c = new C();
+
+  dynamic x = c.bar<B>(new A<B>(new B()));
+  Expect.isTrue(x is A<B>);
+}
diff --git a/tests/compiler/dart2js/rti/data/list_literal_strong.dart b/tests/compiler/dart2js/rti/data/list_literal_strong.dart
new file mode 100644
index 0000000..a927f9e
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/list_literal_strong.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*class: global#List:deps=[Class.m,EmptyIterable,Iterable,JSArray,ListIterable,SetMixin,makeListFixedLength],explicit=[List,List.E,List<JSArray.E>,List<makeListFixedLength.T>],implicit=[List.E],indirect,needsArgs*/
+/*class: global#JSArray:deps=[EmptyIterable,List,ListIterable,SetMixin,SubListIterable],explicit=[JSArray,List<JSArray.E>],implicit=[JSArray.E],indirect,needsArgs*/
+
+main() {
+  var c = new Class();
+  var list = c.m<int>();
+  var set = list.toSet();
+  set is Set<String>;
+}
+
+class Class {
+  /*element: Class.m:implicit=[m.T],indirect,needsArgs,selectors=[Selector(call, m, arity=0, types=1)]*/
+  m<T>() {
+    return <T>[];
+  }
+}
diff --git a/tests/compiler/dart2js/rti/data/private_dynamic2_strong.dart b/tests/compiler/dart2js/rti/data/private_dynamic2_strong.dart
new file mode 100644
index 0000000..0a82cf2
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/private_dynamic2_strong.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class C {
+  /*element: C._private:deps=[D._private2],direct,explicit=[_private.T],needsArgs,selectors=[Selector(call, _private, arity=1, types=1)]*/
+  _private<T>(t) => t is T;
+}
+
+class D {
+  /*element: D._private2:implicit=[_private2.T],indirect,needsArgs,selectors=[Selector(call, _private2, arity=2, types=1)]*/
+  _private2<T>(c, t) => c._private<T>(t);
+}
+
+main() {
+  dynamic d = new D();
+  d._private2<int>(new C(), 0);
+}
diff --git a/tests/compiler/dart2js/rti/data/private_dynamic_strong.dart b/tests/compiler/dart2js/rti/data/private_dynamic_strong.dart
new file mode 100644
index 0000000..275d6c2
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/private_dynamic_strong.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class C {
+  /*element: C._private:direct,explicit=[_private.T],needsArgs,selectors=[Selector(call, _private, arity=1, types=1)]*/
+  _private<T>(t) => t is T;
+}
+
+main() {
+  dynamic c = new C();
+  c._private<int>(0);
+}
diff --git a/tests/compiler/dart2js/rti/data/type_literal_strong.dart b/tests/compiler/dart2js/rti/data/type_literal_strong.dart
index f90943a..098d700 100644
--- a/tests/compiler/dart2js/rti/data/type_literal_strong.dart
+++ b/tests/compiler/dart2js/rti/data/type_literal_strong.dart
@@ -15,23 +15,25 @@
     return inner();
   }
 
-  /*element: A.genericMethod:exp,needsArgs*/
+  /*element: A.genericMethod:exp,needsArgs,selectors=[Selector(call, genericMethod, arity=0, types=1)]*/
   genericMethod<S>() => S;
 
-  /*element: A.genericMethodNested:exp,needsArgs*/
+  /*element: A.genericMethodNested:exp,needsArgs,selectors=[Selector(call, genericMethodNested, arity=0, types=1)]*/
   genericMethodNested<S>() {
     var inner = () => S;
     return inner();
   }
 
   localFunction() {
-    /*exp,needsArgs*/ local<S>() => S;
+    /*exp,needsArgs,selectors=[Selector(call, call, arity=0, types=1)]*/
+    local<S>() => S;
 
     return local<bool>();
   }
 
   localFunctionNested() {
-    /*exp,needsArgs*/ local<S>() {
+    /*exp,needsArgs,selectors=[Selector(call, call, arity=0, types=1)]*/
+    local<S>() {
       var inner = () => S;
       return inner();
     }
diff --git a/tests/compiler/dart2js/rti/emission/dynamic_instance_strong.dart b/tests/compiler/dart2js/rti/emission/dynamic_instance_strong.dart
new file mode 100644
index 0000000..d6b0a9a
--- /dev/null
+++ b/tests/compiler/dart2js/rti/emission/dynamic_instance_strong.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+import 'package:meta/dart2js.dart';
+
+/*class: B:checkedInstance,checks=[],typeArgument*/
+class B {}
+
+/*class: C:checks=[],instance*/
+class C {
+  @noInline
+  method1<T>(o) => method2<T>(o);
+
+  @noInline
+  method2<T>(o) => o is T;
+}
+
+/*class: D:checks=[$isB],instance*/
+class D implements B {}
+
+@noInline
+test(o) => new C().method1<B>(o);
+
+main() {
+  Expect.isTrue(test(new D()));
+  Expect.isFalse(test(null));
+}
diff --git a/tests/compiler/dart2js/rti/emission/dynamic_type_argument_strong.dart b/tests/compiler/dart2js/rti/emission/dynamic_type_argument_strong.dart
new file mode 100644
index 0000000..aa1aa80
--- /dev/null
+++ b/tests/compiler/dart2js/rti/emission/dynamic_type_argument_strong.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+import 'package:meta/dart2js.dart';
+
+/*class: A:checkedInstance,checks=[],instance*/
+class A<T> {}
+
+/*class: B:checkedTypeArgument,checks=[],typeArgument*/
+class B {}
+
+/*class: C:checks=[],instance*/
+class C {
+  @noInline
+  method1<T>() => method2<T>();
+
+  @noInline
+  method2<T>() => new A<T>();
+}
+
+/*class: D:checks=[],typeArgument*/
+class D extends B {}
+
+/*class: E:checks=[],typeArgument*/
+class E {}
+
+@noInline
+test(o) => o is A<B>;
+
+main() {
+  Expect.isTrue(test(new C().method1<B>()));
+  Expect.isTrue(test(new C().method1<D>()));
+  Expect.isFalse(test(new C().method1<E>()));
+}
diff --git a/tests/compiler/dart2js/rti/instance_call_test.dart b/tests/compiler/dart2js/rti/instance_call_test.dart
index d27c13e..b96d841 100644
--- a/tests/compiler/dart2js/rti/instance_call_test.dart
+++ b/tests/compiler/dart2js/rti/instance_call_test.dart
@@ -108,11 +108,10 @@
     ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
     ProgramLookup programLookup = new ProgramLookup(compiler);
 
-    CallStructure callStructure = new CallStructure(1, const <String>[], 1);
-
-    js.Name getName(String name) {
-      return compiler.backend.namer.invocationName(
-          new Selector.call(new PublicName(name), callStructure));
+    js.Name getName(String name, int typeArguments) {
+      return compiler.backend.namer.invocationName(new Selector.call(
+          new PublicName(name),
+          new CallStructure(1, const <String>[], typeArguments)));
     }
 
     void checkParameters(String name,
@@ -151,34 +150,33 @@
 
       js.Fun fun = method.code;
 
-      js.Name selector = getName(targetName);
+      js.Name selector = getName(targetName, expectedTypeArguments);
       bool callFound = false;
       forEachCall(fun, (js.Call node) {
         js.Expression target = node.target;
         if (target is js.PropertyAccess && target.selector == selector) {
           callFound = true;
           Expect.equals(
-              expectedTypeArguments,
+              1 + expectedTypeArguments,
               node.arguments.length,
               "Unexpected argument count in $function call to $targetName: "
               "${js.nodeToString(fun)}");
         }
       });
-      Expect.isTrue(callFound, "No call to $targetName in $function found.");
+      Expect.isTrue(callFound,
+          "No call to $targetName as '${selector.key}' in $function found.");
     }
 
     // The declarations should have type parameters only when needed by the
     // selector.
-    checkArguments('call1', 'method1', expectedTypeArguments: 2);
-    checkArguments('call1a', 'method1', expectedTypeArguments: 2);
-    checkArguments('call1b', 'method1', expectedTypeArguments: 2);
-    checkArguments('call2', 'method2', expectedTypeArguments: 2);
-    checkArguments('call2a', 'method2', expectedTypeArguments: 2);
-    checkArguments('call2b', 'method2', expectedTypeArguments: 2);
-    // TODO(johnniwinther): Avoid passing type arguments to selectors that
-    // never need type arguments.
-    checkArguments('call3', 'method3', expectedTypeArguments: 2 /*1*/);
-    checkArguments('call3a', 'method3', expectedTypeArguments: 2 /*1*/);
-    checkArguments('call3b', 'method3', expectedTypeArguments: 2 /*1*/);
+    checkArguments('call1', 'method1', expectedTypeArguments: 1);
+    checkArguments('call1a', 'method1', expectedTypeArguments: 1);
+    checkArguments('call1b', 'method1', expectedTypeArguments: 1);
+    checkArguments('call2', 'method2', expectedTypeArguments: 1);
+    checkArguments('call2a', 'method2', expectedTypeArguments: 1);
+    checkArguments('call2b', 'method2', expectedTypeArguments: 1);
+    checkArguments('call3', 'method3', expectedTypeArguments: 0);
+    checkArguments('call3a', 'method3', expectedTypeArguments: 0);
+    checkArguments('call3b', 'method3', expectedTypeArguments: 0);
   });
 }
diff --git a/tests/compiler/dart2js/rti/rti_need_test.dart b/tests/compiler/dart2js/rti/rti_need_test.dart
index 1acbf8f..8b902b0 100644
--- a/tests/compiler/dart2js/rti/rti_need_test.dart
+++ b/tests/compiler/dart2js/rti/rti_need_test.dart
@@ -20,6 +20,7 @@
 import 'package:compiler/src/kernel/kernel_backend_strategy.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:compiler/src/ssa/builder.dart' as ast;
+import 'package:compiler/src/universe/selector.dart';
 import 'package:compiler/src/universe/world_builder.dart';
 import 'package:kernel/ast.dart' as ir;
 import '../equivalence/check_helpers.dart';
@@ -27,6 +28,7 @@
 import '../equivalence/id_equivalence_helper.dart';
 
 main(List<String> args) {
+  cacheRtiDataForTesting = true;
   asyncTest(() async {
     Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
     await checkTests(
@@ -78,6 +80,7 @@
   static const String directTypeArgumentTest = 'direct';
   static const String indirectTypeArgumentTest = 'indirect';
   static const String typeLiteral = 'exp';
+  static const String selectors = 'selectors';
 }
 
 abstract class ComputeValueMixin<T> {
@@ -87,7 +90,8 @@
       compiler.resolutionWorldBuilder;
   RuntimeTypesNeedBuilderImpl get rtiNeedBuilder =>
       compiler.frontendStrategy.runtimeTypesNeedBuilderForTesting;
-  RuntimeTypesNeed get rtiNeed => compiler.backendClosedWorldForTesting.rtiNeed;
+  RuntimeTypesNeedImpl get rtiNeed =>
+      compiler.backendClosedWorldForTesting.rtiNeed;
   ClassEntity getFrontendClass(ClassEntity cls);
   MemberEntity getFrontendMember(MemberEntity member);
   Local getFrontendClosure(MemberEntity member);
@@ -108,10 +112,16 @@
   }
 
   void findDependencies(Features features, Entity entity) {
-    Iterable<Entity> dependencies =
-        rtiNeedBuilder.typeVariableTests.getTypeArgumentDependencies(entity);
+    Iterable<Entity> dependencies = rtiNeedBuilder.typeVariableTestsForTesting
+        .getTypeArgumentDependencies(entity);
     if (dependencies.isNotEmpty) {
-      List<String> names = dependencies.map((d) => d.name).toList()..sort();
+      List<String> names = dependencies.map((Entity d) {
+        if (d is MemberEntity && d.enclosingClass != null) {
+          return '${d.enclosingClass.name}.${d.name}';
+        }
+        return d.name;
+      }).toList()
+        ..sort();
       features[Tags.dependencies] = '[${names.join(',')}]';
     }
   }
@@ -128,17 +138,17 @@
         .contains(frontendClass)) {
       features.add(Tags.typeLiteral);
     }
-    if (rtiNeedBuilder.typeVariableTests.directClassTests
+    if (rtiNeedBuilder.typeVariableTestsForTesting.directClassTests
         .contains(frontendClass)) {
       features.add(Tags.directTypeArgumentTest);
-    } else if (rtiNeedBuilder.typeVariableTests.classTests
+    } else if (rtiNeedBuilder.typeVariableTestsForTesting.classTests
         .contains(frontendClass)) {
       features.add(Tags.indirectTypeArgumentTest);
     }
     findChecks(features, Tags.explicitTypeCheck, frontendClass,
-        rtiNeedBuilder.typeVariableTests.explicitIsChecks);
+        rtiNeedBuilder.typeVariableTestsForTesting.explicitIsChecks);
     findChecks(features, Tags.implicitTypeCheck, frontendClass,
-        rtiNeedBuilder.typeVariableTests.implicitIsChecks);
+        rtiNeedBuilder.typeVariableTestsForTesting.implicitIsChecks);
     return features.getText();
   }
 
@@ -158,17 +168,23 @@
 
       void addFrontendData(Entity entity) {
         findDependencies(features, entity);
-        if (rtiNeedBuilder.typeVariableTests.directMethodTests
+        if (rtiNeedBuilder.typeVariableTestsForTesting.directMethodTests
             .contains(entity)) {
           features.add(Tags.directTypeArgumentTest);
-        } else if (rtiNeedBuilder.typeVariableTests.methodTests
+        } else if (rtiNeedBuilder.typeVariableTestsForTesting.methodTests
             .contains(entity)) {
           features.add(Tags.indirectTypeArgumentTest);
         }
         findChecks(features, Tags.explicitTypeCheck, entity,
-            rtiNeedBuilder.typeVariableTests.explicitIsChecks);
+            rtiNeedBuilder.typeVariableTestsForTesting.explicitIsChecks);
         findChecks(features, Tags.implicitTypeCheck, entity,
-            rtiNeedBuilder.typeVariableTests.implicitIsChecks);
+            rtiNeedBuilder.typeVariableTestsForTesting.implicitIsChecks);
+        rtiNeedBuilder.selectorsNeedingTypeArgumentsForTesting
+            ?.forEach((Selector selector, Set<Entity> targets) {
+          if (targets.contains(entity)) {
+            features.addElement(Tags.selectors, selector);
+          }
+        });
       }
 
       if (frontendClosure != null) {
diff --git a/tests/compiler/dart2js/rti/show.dart b/tests/compiler/dart2js/rti/show.dart
index 49ab795..7eeae70 100644
--- a/tests/compiler/dart2js/rti/show.dart
+++ b/tests/compiler/dart2js/rti/show.dart
@@ -5,13 +5,36 @@
 /// Helper program that shows the rti data on a dart program.
 
 import 'package:args/args.dart';
+import 'package:compiler/src/js_backend/runtime_types.dart';
+import '../equivalence/id_equivalence_helper.dart';
 import '../equivalence/show_helper.dart';
+import 'rti_emission_test.dart';
 import 'rti_need_test.dart';
 
 main(List<String> args) async {
+  cacheRtiDataForTesting = true;
   ArgParser argParser = createArgParser();
+  argParser.addFlag('need', defaultsTo: true);
+  argParser.addFlag('emission');
   ArgResults results = argParser.parse(args);
-  await show(results, computeAstRtiMemberNeed, computeKernelRtiMemberNeed,
-      computeAstClassData: computeAstRtiClassNeed,
-      computeKernelClassData: computeKernelRtiClassNeed);
+
+  ComputeMemberDataFunction computeAstData;
+  ComputeMemberDataFunction computeKernelData;
+  ComputeClassDataFunction computeAstClassData;
+  ComputeClassDataFunction computeKernelClassData;
+  if (results['emission']) {
+    computeAstData = computeAstRtiMemberEmission;
+    computeKernelData = computeKernelRtiMemberEmission;
+    computeAstClassData = computeAstRtiClassEmission;
+    computeKernelClassData = computeKernelRtiClassEmission;
+  } else {
+    computeAstData = computeAstRtiMemberNeed;
+    computeKernelData = computeKernelRtiMemberNeed;
+    computeAstClassData = computeAstRtiClassNeed;
+    computeKernelClassData = computeKernelRtiClassNeed;
+  }
+
+  await show(results, computeAstData, computeKernelData,
+      computeAstClassData: computeAstClassData,
+      computeKernelClassData: computeKernelClassData);
 }
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index b254385..06bdac6 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -2,9 +2,6 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-[ $builder_tag == asan ]
-recursive_import_test: Skip # Issue 27441
-
 [ $compiler == dart2js ]
 class_test: Fail
 constant_javascript_semantics4_test: Fail, OK
@@ -16,6 +13,9 @@
 statements_test: Fail
 typed_locals_test: Pass, Fail
 
+[ $compiler != dart2js ]
+dummy_compiler_test: SkipByDesign # Issue 30773. Test should be migrated as a unit test of dart2js, is only intended to test self-hosting.
+
 [ $runtime == jsshell ]
 deferred/load_in_correct_order_test: SkipByDesign # jsshell preamble does not support this test.
 timer_test: Fail # Issue 7728.
@@ -23,10 +23,6 @@
 [ $runtime == none ]
 timer_negative_test: Fail, OK # A negative runtime test.
 
-[ $compiler == dart2analyzer && $strong ]
-dummy_compiler_test: Skip # Issue 28649
-recursive_import_test: Skip # Issue 28649
-
 [ $compiler == dart2js && $mode == debug ]
 operator_test: Skip
 string_interpolation_test: Skip
@@ -46,6 +42,11 @@
 [ $compiler == dart2js && $runtime == chromeOnAndroid ]
 no_such_method_mirrors_test: Pass, Slow # TODO(kasperl): Please triage.
 
+[ $compiler == dart2js && $runtime == d8 && $fasta ]
+deferred_fail_and_retry_test: RuntimeError # Uses XHR in dart:html
+deferred_fail_and_retry_worker_test: Fail # Uses XHR in dart:html
+unconditional_dartio_import_test: RuntimeError # Uses dart:io
+
 [ $compiler == dart2js && $runtime == ff && $system == windows ]
 consistent_index_error_string_test: Pass, Slow # Issue 25940
 
@@ -55,19 +56,11 @@
 [ $compiler == dart2js && $runtime == safari ]
 deferred_fail_and_retry_worker_test: Timeout # Issue 22106
 
-[ $compiler == dart2js && $browser ]
-dummy_compiler_test: Skip
-recursive_import_test: Skip
-
 [ $compiler == dart2js && $checked ]
 variable_type_test/01: Fail, OK
 variable_type_test/03: Fail, OK
 
 [ $compiler == dart2js && $checked && $fasta ]
-21666_test: RuntimeError
-closure_type_reflection2_test: RuntimeError
-closure_type_reflection_test: RuntimeError
-constant_javascript_semantics_test/01: MissingCompileTimeError
 deferred/default_arg_is_tearoff_test: RuntimeError
 deferred/deferred_class_test: RuntimeError
 deferred/deferred_constant2_test: RuntimeError
@@ -86,44 +79,14 @@
 deferred/shared_constant_test: RuntimeError
 deferred/uninstantiated_type_variable_test: RuntimeError
 deferred_custom_loader_test: RuntimeError
-deferred_fail_and_retry_test: RuntimeError
-deferred_fail_and_retry_worker_test: Fail
 deferred_inheritance_test: RuntimeError
 deferred_split_test: RuntimeError
 dummy_compiler_test: Crash
-invalid_annotation2_test/none: RuntimeError
 local_signature_test: Crash
 minus_zero_test/01: MissingCompileTimeError
-mirror_invalid_field_access2_test: RuntimeError
-mirror_invalid_field_access3_test: RuntimeError
-mirror_invalid_field_access4_test: RuntimeError
-mirror_invalid_field_access_test: RuntimeError
-mirror_invalid_invoke2_test: RuntimeError
-mirror_invalid_invoke3_test: RuntimeError
-mirror_invalid_invoke_test: RuntimeError
-mirror_printer_test/01: RuntimeError
-mirror_printer_test/none: RuntimeError
-mirror_test: RuntimeError
-mirror_type_inference_field2_test: RuntimeError
-mirror_type_inference_field_test: RuntimeError
-mirror_type_inference_function_test: RuntimeError
-mirrors_declarations_filtering_test: RuntimeError
-mirrors_used_metatargets_test: RuntimeError
-mirrors_used_native_test: RuntimeError
 mirrors_used_warning2_test: Crash
 mirrors_used_warning_test/minif: Crash
 mirrors_used_warning_test/none: Crash
-private_symbol_literal_test/01: MissingCompileTimeError
-private_symbol_literal_test/02: MissingCompileTimeError
-private_symbol_literal_test/03: MissingCompileTimeError
-private_symbol_literal_test/04: MissingCompileTimeError
-private_symbol_literal_test/05: MissingCompileTimeError
-private_symbol_literal_test/06: MissingCompileTimeError
-recursive_import_test: Crash
-reflect_native_types_test: RuntimeError
-regress/4562_test/none: CompileTimeError
-type_constant_switch_test/01: MissingCompileTimeError
-unconditional_dartio_import_test: RuntimeError
 
 [ $compiler == dart2js && $csp ]
 deferred_custom_loader_test: SkipByDesign # Issue 25683
@@ -170,24 +133,11 @@
 
 [ $compiler == dart2js && $fast_startup && $fasta ]
 23056_test: Pass
-closure_capture2_test: RuntimeError
-constant_javascript_semantics_test/01: MissingCompileTimeError
 deferred/deferred_mirrors1_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred/deferred_mirrors2_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred/reflect_multiple_annotations_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred/reflect_multiple_default_arg_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
-deferred_fail_and_retry_test: RuntimeError
-deferred_fail_and_retry_worker_test: Fail
 mirror_enqueuer_regression_test: Pass
-private_symbol_literal_test/01: MissingCompileTimeError
-private_symbol_literal_test/02: MissingCompileTimeError
-private_symbol_literal_test/03: MissingCompileTimeError
-private_symbol_literal_test/04: MissingCompileTimeError
-private_symbol_literal_test/05: MissingCompileTimeError
-private_symbol_literal_test/06: MissingCompileTimeError
-regress/4562_test/none: CompileTimeError
-type_constant_switch_test/01: MissingCompileTimeError
-unconditional_dartio_import_test: RuntimeError
 
 [ $compiler == dart2js && $fasta ]
 21666_test: RuntimeError
@@ -200,8 +150,6 @@
 deferred/deferred_mirrors2_test: RuntimeError
 deferred/reflect_multiple_annotations_test: RuntimeError
 deferred/reflect_multiple_default_arg_test: RuntimeError
-deferred_fail_and_retry_test: RuntimeError
-deferred_fail_and_retry_worker_test: Fail
 inference_nsm_mirrors_test: SkipByDesign
 invalid_annotation2_test/none: RuntimeError
 mirror_invalid_field_access2_test: RuntimeError
@@ -234,18 +182,11 @@
 reflect_native_types_test: RuntimeError
 regress/4562_test/none: CompileTimeError
 type_constant_switch_test/01: MissingCompileTimeError
-unconditional_dartio_import_test: RuntimeError # Issue 30902
-
-[ $compiler == dart2js && $fasta && $host_checked ]
-closure_capture2_test: RuntimeError
-deferred/reflect_multiple_annotations_test: RuntimeError
-deferred/reflect_multiple_default_arg_test: RuntimeError
 
 [ $compiler == dart2js && $fasta && $minified ]
 closure_capture2_test: Pass # Passes for the wrong reason
 deferred/reflect_multiple_annotations_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
 deferred/reflect_multiple_default_arg_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-dummy_compiler_test: CompileTimeError
 
 [ $compiler == dart2js && !$fasta ]
 expose_this1_test: RuntimeError # Issue 31254
@@ -253,13 +194,8 @@
 string_interpolation_dynamic_test: Fail # CRLF handling clarified, see Issue 23562
 string_interpolation_test: Fail # CRLF handling clarified, see Issue 23562
 
-[ $compiler == dart2js && $host_checked ]
-dummy_compiler_test: Skip # Issue 30773
-recursive_import_test: Skip # Issue 30773
-
 [ $compiler == dart2js && !$host_checked ]
 dummy_compiler_test: Slow, Pass
-recursive_import_test: Slow, Pass
 
 [ $compiler == dart2js && $minified ]
 code_motion_exception_test: Skip # Requires unminified operator names.
@@ -284,16 +220,11 @@
 [ $compiler == dart2js && ($runtime == drt || $runtime == ff || $runtime == jsshell || $runtime == safari) ]
 code_motion_exception_test: Skip # Required V8 specific format of JavaScript errors.
 
+[ $compiler == dart2js && ($browser || $host_checked) ]
+dummy_compiler_test: SkipByDesign # Issue 30773. Test should be migrated as a unit test of dart2js, is only intended to test self-hosting.
+
 [ $compiler == none && $runtime == vm ]
 invalid_annotation_test/01: MissingCompileTimeError, OK # vm is lazy
 new_from_env_test: SkipByDesign # dart2js only test
 unconditional_dartio_import_test: SkipByDesign # dart2js only test
 
-[ $mode == debug && ($compiler == dartk || $compiler == dartkp) ]
-dummy_compiler_test: Slow, Pass
-recursive_import_test: Slow, Pass
-
-[ $hot_reload || $hot_reload_rollback ]
-dummy_compiler_test: Skip # Running dart2js under frequent reloads is slow.
-recursive_import_test: Skip # Running dart2js under frequent reloads is slow.
-
diff --git a/tests/compiler/dart2js_extra/dummy_compiler_test.dart b/tests/compiler/dart2js_extra/dummy_compiler_test.dart
index 34d1c6e..09c60e4 100644
--- a/tests/compiler/dart2js_extra/dummy_compiler_test.dart
+++ b/tests/compiler/dart2js_extra/dummy_compiler_test.dart
@@ -2,7 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// Smoke test of the dart2js compiler API.
+// 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';
diff --git a/tests/compiler/dart2js_extra/recursive_import_test.dart b/tests/compiler/dart2js_extra/recursive_import_test.dart
deleted file mode 100644
index d42fccb..0000000
--- a/tests/compiler/dart2js_extra/recursive_import_test.dart
+++ /dev/null
@@ -1,74 +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.
-
-// Test of "recursive" imports using the dart2js compiler API.
-
-import 'dart:async';
-
-import 'package:expect/expect.dart';
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/compiler.dart';
-
-import 'dummy_compiler_test.dart';
-
-const String RECURSIVE_MAIN = """
-library fisk;
-import 'recurse/fisk.dart';
-main() {}
-""";
-
-main() {
-  int count = 0;
-  Future<String> provider(Uri uri) {
-    String source;
-    if (uri.path.length > 100) {
-      // Simulate an OS error.
-      throw 'Path length exceeded';
-    } else if (uri.scheme == "main") {
-      count++;
-      source = RECURSIVE_MAIN;
-    } else if (uri.scheme == "lib") {
-      source = libProvider(uri);
-    } else {
-      return new Future.error("unexpected URI $uri");
-    }
-    return new Future.value(source);
-  }
-
-  int warningCount = 0;
-  int errorCount = 0;
-  void handler(Uri uri, int begin, int end, String message, Diagnostic kind) {
-    if (uri != null) {
-      print('$uri:$begin:$end: $kind: $message');
-      Expect.equals('main', uri.scheme);
-      if (kind == Diagnostic.WARNING) {
-        warningCount++;
-      } else if (kind == Diagnostic.ERROR) {
-        errorCount++;
-      } else {
-        throw kind;
-      }
-    } else {
-      print('$kind: $message');
-    }
-  }
-
-  asyncStart();
-  Future<CompilationResult> result = compile(
-      new Uri(scheme: 'main'),
-      new Uri(scheme: 'lib', path: '/'),
-      new Uri(scheme: 'package', path: '/'),
-      provider,
-      handler);
-  result.then((CompilationResult result) {
-    Expect.isFalse(result.isSuccess);
-    Expect.isTrue(10 < count);
-    // Two warnings for each time RECURSIVE_MAIN is read, except the
-    // first time.
-    Expect.equals(2 * (count - 1), warningCount);
-    Expect.equals(1, errorCount);
-  }, onError: (e, s) {
-    throw 'Compilation failed: $e\n$s';
-  }).then(asyncSuccess);
-}
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 92a3bee..011448e 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -65,6 +65,9 @@
 string_case_test/01: Fail, OK # German double S.
 unicode_test: Fail
 
+[ $runtime != none ]
+nsm_invocation_generic_test: RuntimeError # Not implemented yet. Issue 27323.
+
 [ $runtime == safari ]
 double_round3_test: Fail, OK # Runtime rounds 0.49999999999999994 to 1.
 double_round_to_double2_test: Fail, OK # Runtime rounds 0.49999999999999994 to 1.
@@ -123,7 +126,7 @@
 bigint_js_test: SkipByDesign # JavaScript-specific test
 
 # All static_tests have expected compile-time errors.
-[ $compiler != dart2analyzer && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $strong ]
+[ $compiler != dart2analyzer && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $compiler != fasta && $strong ]
 core_runtime_types_static_test: MissingCompileTimeError
 splay_tree_test/01: MissingCompileTimeError
 splay_tree_test/02: MissingCompileTimeError
@@ -200,12 +203,10 @@
 int_parse_radix_test/none: Pass # Issue 31762
 
 [ $compiler == dart2js && $fasta && $host_checked && $strong ]
-apply2_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-apply3_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+apply3_test: RuntimeError
 apply_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 bigint_test: RuntimeError
 cast_test: RuntimeError
-core_runtime_types_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 date_time11_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 dynamic_nosuchmethod_test: RuntimeError
 error_stack_trace1_test: RuntimeError # Issue 12399
@@ -218,20 +219,16 @@
 integer_to_string_test/01: RuntimeError
 iterable_empty_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart': Failed assertion: line 391 pos 16: 'receiver.nonCheck() == user.inputs[1].nonCheck()': is not true.
 iterable_fold_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
-iterable_followed_by_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+iterable_followed_by_test: RuntimeError
 iterable_reduce_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
 iterable_return_type_test/01: RuntimeError # Issue 20085
 iterable_return_type_test/02: RuntimeError # Dart2js does not support Uint64*.
 iterable_to_list_test/01: RuntimeError # Issue 26501
 iterable_where_type_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-linked_hash_map_from_iterables_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 list_concurrent_modify_test: RuntimeError # dart2js does not fully implement these
-list_test/01: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-list_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+list_test/01: RuntimeError
+list_test/none: RuntimeError
 list_unmodifiable_test: RuntimeError
-main_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-map_from_iterables_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-map_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 nan_infinity_test/01: RuntimeError
 queue_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart': Failed assertion: line 391 pos 16: 'receiver.nonCheck() == user.inputs[1].nonCheck()': is not true.
 reg_exp_all_matches_test: RuntimeError
@@ -248,7 +245,6 @@
 regexp/regexp_test: RuntimeError
 regexp/regress-regexp-codeflush_test: RuntimeError
 regexp/standalones_test: RuntimeError
-set_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 splay_tree_from_iterable_test: RuntimeError
 stacktrace_fromstring_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 string_from_list_test: RuntimeError
@@ -260,7 +256,6 @@
 symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
 uri_base_test: RuntimeError
 uri_parameters_all_test: RuntimeError
-uri_query_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 uri_test: RuntimeError
 
 [ $compiler == dart2js && $fasta && $minified && $strong ]
@@ -277,7 +272,6 @@
 integer_to_radix_string_test/02: RuntimeError
 integer_to_radix_string_test/none: RuntimeError
 integer_to_string_test/01: RuntimeError
-iterable_empty_test: RuntimeError
 iterable_fold_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
 iterable_followed_by_test: RuntimeError
 iterable_reduce_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
@@ -289,6 +283,7 @@
 list_test/none: RuntimeError
 list_unmodifiable_test: RuntimeError
 nan_infinity_test/01: RuntimeError
+nsm_invocation_test: RuntimeError # Symbols don't match due to minifiaction.
 queue_test: RuntimeError
 reg_exp_all_matches_test: RuntimeError
 reg_exp_start_end_test: RuntimeError
@@ -320,8 +315,8 @@
 uri_test: RuntimeError
 
 [ $compiler == dart2js && $fasta && $strong ]
-map_unmodifiable_cast_test: Crash
 null_nosuchmethod_test: RuntimeError # Fails if type checks are skipped.
+shuffle_test: RuntimeError
 
 [ $compiler == dart2js && $fasta && !$strong ]
 *: SkipByDesign
@@ -329,15 +324,15 @@
 [ $compiler == dart2js && !$fasta ]
 *: SkipByDesign
 
-[ $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp ]
+[ $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $compiler != fasta ]
 iterable_element_at_test/static: MissingCompileTimeError
 
+[ $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $compiler != fasta && ($compiler != dart2analyzer || !$strong) ]
+iterable_mapping_test/01: MissingCompileTimeError
+
 [ $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $runtime != none ]
 map_keys2_test: RuntimeError # needs Dart 2 is checks
 
-[ $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && ($compiler != dart2analyzer || !$strong) ]
-iterable_mapping_test/01: MissingCompileTimeError
-
 [ $compiler != dart2js && $fasta ]
 bool_from_environment2_test/03: MissingCompileTimeError
 string_from_environment3_test/03: MissingCompileTimeError
@@ -375,6 +370,9 @@
 symbol_test/none: RuntimeError # Issues 11669 and 31936 - throwing const constructors.
 unicode_test: RuntimeError # Issue 18061: German double S.
 
+[ $compiler != dartk && $runtime == vm && $checked ]
+apply_test/01: RuntimeError
+
 [ $compiler == dartkp && $runtime == dart_precompiled && $strong ]
 iterable_fold_test/02: RuntimeError
 iterable_reduce_test/01: CompileTimeError # Issue 31533
@@ -458,9 +456,9 @@
 typed_data_with_limited_ints_test: Skip # dart2js and dartdevc don't know about --limit-ints-to-64-bits
 
 [ $runtime != none && ($compiler == dartdevc || $compiler == dartdevk) ]
-apply_test/01: RuntimeError # Issue 32157
 apply2_test: RuntimeError # Issue 29921
 apply3_test: RuntimeError # Issue 29921
+apply_test/01: RuntimeError # Issue 32157
 bigint_test: Pass, Slow
 compare_to2_test: RuntimeError # Issue 30170
 date_time10_test: RuntimeError # Issue 29921
@@ -571,6 +569,8 @@
 from_environment_const_type_undefined_test/14: MissingCompileTimeError
 from_environment_const_type_undefined_test/16: MissingCompileTimeError
 int_parse_radix_bad_handler_test: MissingCompileTimeError
+iterable_element_at_test/static: MissingCompileTimeError
+iterable_mapping_test/01: MissingCompileTimeError
 string_from_environment3_test/01: MissingCompileTimeError
 string_from_environment3_test/02: MissingCompileTimeError
 string_from_environment3_test/04: MissingCompileTimeError
@@ -666,6 +666,3 @@
 bigint_test: Pass, Crash # Issue 31660
 integer_parsed_mul_div_vm_test: Pass, Slow # Slow
 
-[ $compiler != dartk && $runtime == vm && $checked ]
-apply_test/01: RuntimeError
-
diff --git a/tests/corelib_2/invocation_test.dart b/tests/corelib_2/invocation_test.dart
new file mode 100644
index 0000000..286f12f
--- /dev/null
+++ b/tests/corelib_2/invocation_test.dart
@@ -0,0 +1,420 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+// Tests the constructors of the Invocation class.
+
+main() {
+  {
+    var name = "getter";
+    var invocation = new Invocation.getter(#name);
+    Expect.isTrue(invocation.isGetter, "$name:isGetter");
+    Expect.isFalse(invocation.isSetter, "$name:isSetter");
+    Expect.isTrue(invocation.isAccessor, "$name:isAccessor");
+    Expect.isFalse(invocation.isMethod, "$name:isMethod");
+    Expect.equals(#name, invocation.memberName, "$name:name");
+    Expect.listEquals([], invocation.typeArguments, "$name:types");
+    Expect.listEquals([], invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals({}, invocation.namedArguments, "$name: named");
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+  }
+  {
+    var name = "setter";
+    var argument = new Object();
+    var invocation = new Invocation.setter(const Symbol("name="), argument);
+    Expect.isFalse(invocation.isGetter, "$name:isGetter");
+    Expect.isTrue(invocation.isSetter, "$name:isSetter");
+    Expect.isTrue(invocation.isAccessor, "$name:isAccessor");
+    Expect.isFalse(invocation.isMethod, "$name:isMethod");
+    Expect.equals(const Symbol("name="), invocation.memberName, "$name:name");
+    Expect.listEquals([], invocation.typeArguments, "$name:types");
+    Expect.listEquals([argument], invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals({}, invocation.namedArguments, "$name: named");
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+  }
+  {
+    var name = ".name()";
+    var invocation = new Invocation.method(#name, []);
+    Expect.isFalse(invocation.isGetter, "$name:isGetter");
+    Expect.isFalse(invocation.isSetter, "$name:isSetter");
+    Expect.isFalse(invocation.isAccessor, "$name:isAccessor");
+    Expect.isTrue(invocation.isMethod, "$name:isMethod");
+    Expect.equals(#name, invocation.memberName, "$name:name");
+    Expect.listEquals([], invocation.typeArguments, "$name:types");
+    Expect.listEquals([], invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals({}, invocation.namedArguments, "$name: named");
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+
+    expectInvocation("$name:", invocation, new Invocation.method(#name, null));
+    expectInvocation(
+        "$name:", invocation, new Invocation.method(#name, [], null));
+    expectInvocation(
+        "$name:", invocation, new Invocation.method(#name, [], {}));
+
+    expectInvocation(
+        "$name:", invocation, new Invocation.genericMethod(#name, [], []));
+    expectInvocation(
+        "$name:", invocation, new Invocation.genericMethod(#name, [], null));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, [], [], null));
+    expectInvocation(
+        "$name:", invocation, new Invocation.genericMethod(#name, [], [], {}));
+    expectInvocation(
+        "$name:", invocation, new Invocation.genericMethod(#name, null, []));
+    expectInvocation(
+        "$name:", invocation, new Invocation.genericMethod(#name, null, null));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, null, [], null));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, null, [], {}));
+  }
+  {
+    var name = ".name(a)";
+    var argument = new Object();
+    var invocation = new Invocation.method(#name, [argument]);
+    Expect.isFalse(invocation.isGetter, "$name:isGetter");
+    Expect.isFalse(invocation.isSetter, "$name:isSetter");
+    Expect.isFalse(invocation.isAccessor, "$name:isAccessor");
+    Expect.isTrue(invocation.isMethod, "$name:isMethod");
+    Expect.equals(#name, invocation.memberName, "$name:name");
+    Expect.listEquals([], invocation.typeArguments, "$name:types");
+    Expect.listEquals([argument], invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals({}, invocation.namedArguments, "$name: named");
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+
+    expectInvocation(
+        "$name:", invocation, new Invocation.method(#name, [argument], null));
+    expectInvocation(
+        "$name:", invocation, new Invocation.method(#name, [argument], {}));
+
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, [], [argument], null));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, [], [argument], {}));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, null, [argument], null));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, null, [argument], {}));
+  }
+  {
+    var name = ".name(a,b)";
+    var argument = new Object();
+    var argument2 = new Object();
+    var invocation = new Invocation.method(#name, [argument, argument2]);
+    Expect.isFalse(invocation.isGetter, "$name:isGetter");
+    Expect.isFalse(invocation.isSetter, "$name:isSetter");
+    Expect.isFalse(invocation.isAccessor, "$name:isAccessor");
+    Expect.isTrue(invocation.isMethod, "$name:isMethod");
+    Expect.equals(#name, invocation.memberName, "$name:name");
+    Expect.listEquals([], invocation.typeArguments, "$name:types");
+    Expect.listEquals(
+        [argument, argument2], invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals({}, invocation.namedArguments, "$name: named");
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+
+    expectInvocation("$name:", invocation,
+        new Invocation.method(#name, [argument, argument2], null));
+    expectInvocation("$name:", invocation,
+        new Invocation.method(#name, [argument, argument2], {}));
+
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, [], [argument, argument2], null));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, [], [argument, argument2], {}));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, null, [argument, argument2], null));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, null, [argument, argument2], {}));
+  }
+  {
+    var name = ".name(a,b:)";
+    var argument = new Object();
+    var argument2 = new Object();
+    var invocation =
+        new Invocation.method(#name, [argument], {#arg: argument2});
+    Expect.isFalse(invocation.isGetter, "$name:isGetter");
+    Expect.isFalse(invocation.isSetter, "$name:isSetter");
+    Expect.isFalse(invocation.isAccessor, "$name:isAccessor");
+    Expect.isTrue(invocation.isMethod, "$name:isMethod");
+    Expect.equals(#name, invocation.memberName, "$name:name");
+    Expect.listEquals([], invocation.typeArguments, "$name:types");
+    Expect.listEquals([argument], invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals(
+        {#arg: argument2}, invocation.namedArguments, "$name: named");
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+
+    expectInvocation(
+        "$name:",
+        invocation,
+        new Invocation.genericMethod(
+            #name, null, [argument], {#arg: argument2}));
+  }
+  {
+    var name = ".name(a:,b:)";
+    var argument = new Object();
+    var argument2 = new Object();
+    var invocation =
+        new Invocation.method(#name, [], {#arg: argument, #arg2: argument2});
+    Expect.isFalse(invocation.isGetter, "$name:isGetter");
+    Expect.isFalse(invocation.isSetter, "$name:isSetter");
+    Expect.isFalse(invocation.isAccessor, "$name:isAccessor");
+    Expect.isTrue(invocation.isMethod, "$name:isMethod");
+    Expect.equals(#name, invocation.memberName, "$name:name");
+    Expect.listEquals([], invocation.typeArguments, "$name:types");
+    Expect.listEquals([], invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals({#arg: argument, #arg2: argument2},
+        invocation.namedArguments, "$name: named");
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+
+    expectInvocation("$name:", invocation,
+        new Invocation.method(#name, null, {#arg: argument, #arg2: argument2}));
+    expectInvocation(
+        "$name:",
+        invocation,
+        new Invocation.genericMethod(
+            #name, null, [], {#arg: argument, #arg2: argument2}));
+    expectInvocation(
+        "$name:",
+        invocation,
+        new Invocation.genericMethod(
+            #name, null, null, {#arg: argument, #arg2: argument2}));
+  }
+  {
+    var name = ".name<i>()";
+    var invocation = new Invocation.genericMethod(#name, [int], []);
+    Expect.isFalse(invocation.isGetter, "$name:isGetter");
+    Expect.isFalse(invocation.isSetter, "$name:isSetter");
+    Expect.isFalse(invocation.isAccessor, "$name:isAccessor");
+    Expect.isTrue(invocation.isMethod, "$name:isMethod");
+    Expect.equals(#name, invocation.memberName, "$name:name");
+    Expect.listEquals([int], invocation.typeArguments, "$name:types");
+    Expect.listEquals([], invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals({}, invocation.namedArguments, "$name: named");
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+
+    expectInvocation(
+        "$name:", invocation, new Invocation.genericMethod(#name, [int], null));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, [int], [], null));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, [int], null, null));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, [int], [], {}));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, [int], null, {}));
+  }
+  {
+    var name = ".name<i>(a)";
+    var argument = new Object();
+    var invocation = new Invocation.genericMethod(#name, [int], [argument]);
+    Expect.isFalse(invocation.isGetter, "$name:isGetter");
+    Expect.isFalse(invocation.isSetter, "$name:isSetter");
+    Expect.isFalse(invocation.isAccessor, "$name:isAccessor");
+    Expect.isTrue(invocation.isMethod, "$name:isMethod");
+    Expect.equals(#name, invocation.memberName, "$name:name");
+    Expect.listEquals([int], invocation.typeArguments, "$name:types");
+    Expect.listEquals([argument], invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals({}, invocation.namedArguments, "$name: named");
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, [int], [argument], null));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, [int], [argument], {}));
+  }
+  {
+    var name = ".name<i>(a,b)";
+    var argument = new Object();
+    var argument2 = new Object();
+    var invocation =
+        new Invocation.genericMethod(#name, [int], [argument, argument2]);
+    Expect.isFalse(invocation.isGetter, "$name:isGetter");
+    Expect.isFalse(invocation.isSetter, "$name:isSetter");
+    Expect.isFalse(invocation.isAccessor, "$name:isAccessor");
+    Expect.isTrue(invocation.isMethod, "$name:isMethod");
+    Expect.equals(#name, invocation.memberName, "$name:name");
+    Expect.listEquals([int], invocation.typeArguments, "$name:types");
+    Expect.listEquals(
+        [argument, argument2], invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals({}, invocation.namedArguments, "$name: named");
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+
+    expectInvocation(
+        "$name:",
+        invocation,
+        new Invocation.genericMethod(
+            #name, [int], [argument, argument2], null));
+    expectInvocation("$name:", invocation,
+        new Invocation.genericMethod(#name, [int], [argument, argument2], {}));
+  }
+  {
+    var name = ".name<i>(a,b:)";
+    var argument = new Object();
+    var argument2 = new Object();
+    var invocation = new Invocation.genericMethod(
+        #name, [int], [argument], {#arg: argument2});
+    Expect.isFalse(invocation.isGetter, "$name:isGetter");
+    Expect.isFalse(invocation.isSetter, "$name:isSetter");
+    Expect.isFalse(invocation.isAccessor, "$name:isAccessor");
+    Expect.isTrue(invocation.isMethod, "$name:isMethod");
+    Expect.equals(#name, invocation.memberName, "$name:name");
+    Expect.listEquals([int], invocation.typeArguments, "$name:types");
+    Expect.listEquals([argument], invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals(
+        {#arg: argument2}, invocation.namedArguments, "$name: named");
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+  }
+  {
+    var name = ".name<i>(a:,b:)";
+    var argument = new Object();
+    var argument2 = new Object();
+    var invocation = new Invocation.genericMethod(
+        #name, [int], [], {#arg: argument, #arg2: argument2});
+    Expect.isFalse(invocation.isGetter, "$name:isGetter");
+    Expect.isFalse(invocation.isSetter, "$name:isSetter");
+    Expect.isFalse(invocation.isAccessor, "$name:isAccessor");
+    Expect.isTrue(invocation.isMethod, "$name:isMethod");
+    Expect.equals(#name, invocation.memberName, "$name:name");
+    Expect.listEquals([int], invocation.typeArguments, "$name:types");
+    Expect.listEquals([], invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals({#arg: argument, #arg2: argument2},
+        invocation.namedArguments, "$name: named");
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+
+    expectInvocation(
+        "$name:",
+        invocation,
+        new Invocation.genericMethod(
+            #name, [int], null, {#arg: argument, #arg2: argument2}));
+  }
+  {
+    // Many arguments.
+    var name = ".name<..>(..,..:)";
+    var argument = new Object();
+    var argument2 = new Object();
+    Type intList = new TypeHelper<List<int>>().type;
+    var invocation = new Invocation.genericMethod(
+        #name,
+        [int, double, intList],
+        [argument, argument2, null, argument],
+        {#arg: argument, #arg2: argument2, #arg3: null, #arg4: argument});
+    Expect.isFalse(invocation.isGetter, "$name:isGetter");
+    Expect.isFalse(invocation.isSetter, "$name:isSetter");
+    Expect.isFalse(invocation.isAccessor, "$name:isAccessor");
+    Expect.isTrue(invocation.isMethod, "$name:isMethod");
+    Expect.equals(#name, invocation.memberName, "$name:name");
+    Expect.listEquals(
+        [int, double, intList], invocation.typeArguments, "$name:types");
+    Expect.listEquals([argument, argument2, null, argument],
+        invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals(
+        {#arg: argument, #arg2: argument2, #arg3: null, #arg4: argument},
+        invocation.namedArguments);
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+  }
+  {
+    // Accepts iterables, not just lists.
+    var name = "iterables";
+    var argument = new Object();
+    var argument2 = new Object();
+    Type intList = new TypeHelper<List<int>>().type;
+    var invocation = new Invocation.genericMethod(
+        #name,
+        [int, double, intList].where(kTrue),
+        [argument, argument2, null, argument].where(kTrue),
+        {#arg: argument, #arg2: argument2, #arg3: null, #arg4: argument});
+    Expect.isFalse(invocation.isGetter, "$name:isGetter");
+    Expect.isFalse(invocation.isSetter, "$name:isSetter");
+    Expect.isFalse(invocation.isAccessor, "$name:isAccessor");
+    Expect.isTrue(invocation.isMethod, "$name:isMethod");
+    Expect.equals(#name, invocation.memberName, "$name:name");
+    Expect.listEquals(
+        [int, double, intList], invocation.typeArguments, "$name:types");
+    Expect.listEquals([argument, argument2, null, argument],
+        invocation.positionalArguments, "$name:pos");
+    Expect.mapEquals(
+        {#arg: argument, #arg2: argument2, #arg3: null, #arg4: argument},
+        invocation.namedArguments);
+    checkUnmodifiableList("$name types", invocation.typeArguments);
+    checkUnmodifiableList("$name positional", invocation.positionalArguments);
+    checkUnmodifiableMap("$name named", invocation.namedArguments);
+  }
+  // No null type arguments.
+  Expect.throws(() {
+    new Invocation.genericMethod(#name, [null], []);
+  });
+  Expect.throws(() {
+    new Invocation.genericMethod(#name, [int, null], []);
+  });
+}
+
+void checkUnmodifiableList(String name, List<Object> list) {
+  if (list.isNotEmpty) {
+    Expect.throws(() {
+      list[0] = null;
+    }, null, "$name: list not unmodifiable");
+  }
+  Expect.throws(() {
+    list.add(null);
+  }, null, "$name: list not unmodifiable");
+}
+
+void checkUnmodifiableMap(String name, Map<Symbol, Object> map) {
+  Expect.throws(() {
+    map[#key] = null;
+  }, null, "$name: map not unmodifiable");
+}
+
+class TypeHelper<T> {
+  Type get type => T;
+}
+
+expectInvocation(String name, Invocation expect, Invocation actual) {
+  Expect.equals(expect.isGetter, actual.isGetter, "$name:isGetter");
+  Expect.equals(expect.isSetter, actual.isSetter, "$name:isSetter");
+  Expect.equals(expect.isAccessor, actual.isAccessor, "$name:isAccessor");
+  Expect.equals(actual.isGetter || actual.isSetter, actual.isAccessor);
+  Expect.equals(expect.isMethod, actual.isMethod, "$name:isMethod");
+  Expect.isTrue(actual.isMethod || actual.isGetter || actual.isSetter);
+  Expect.isFalse(actual.isMethod && actual.isGetter);
+  Expect.isFalse(actual.isMethod && actual.isSetter);
+  Expect.isFalse(actual.isSetter && actual.isGetter);
+  Expect.equals(expect.memberName, actual.memberName, "$name:memberName");
+  Expect.listEquals(expect.typeArguments, actual.typeArguments, "$name:types");
+  Expect.listEquals(
+      expect.positionalArguments, actual.positionalArguments, "$name:pos");
+  Expect.mapEquals(expect.namedArguments, actual.namedArguments, "$name:named");
+  checkUnmodifiableList(name, actual.typeArguments);
+  checkUnmodifiableList(name, actual.positionalArguments);
+  checkUnmodifiableMap(name, actual.namedArguments);
+}
+
+bool kTrue(_) => true;
diff --git a/tests/corelib_2/nsm_invocation_generic_test.dart b/tests/corelib_2/nsm_invocation_generic_test.dart
new file mode 100644
index 0000000..5813857
--- /dev/null
+++ b/tests/corelib_2/nsm_invocation_generic_test.dart
@@ -0,0 +1,78 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+// Test the invocations passed to noSuchMethod for generic invocations.
+
+main() {
+  var argument = new Object();
+  var argument2 = new Object();
+  // Method invocation.
+  expectInvocation(
+      new Invocation.genericMethod(#name, [int], []), nsm.name<int>());
+  expectInvocation(new Invocation.genericMethod(#name, [int], [argument]),
+      nsm.name<int>(argument));
+  expectInvocation(
+      new Invocation.genericMethod(#name, [int], [], {#arg: argument}),
+      nsm.name<int>(arg: argument));
+  expectInvocation(
+      new Invocation.genericMethod(#name, [int], [argument], {#arg: argument2}),
+      nsm.name<int>(argument, arg: argument));
+  // Call invocation.
+  expectInvocation(new Invocation.genericMethod(#call, [int], []), nsm<int>());
+  expectInvocation(new Invocation.genericMethod(#call, [int], [argument]),
+      nsm<int>(argument));
+  expectInvocation(
+      new Invocation.genericMethod(#call, [int], [], {#arg: argument}),
+      nsm<int>(arg: argument));
+  expectInvocation(
+      new Invocation.genericMethod(#call, [int], [argument], {#arg: argument2}),
+      nsm<int>(argument, arg: argument));
+}
+
+dynamic nsm = new Recorder();
+
+class Recorder {
+  noSuchMethod(Invocation invocation) {
+    return invocation;
+  }
+}
+
+void checkUnmodifiableList(List<Object> list) {
+  if (list.isNotEmpty) {
+    Expect.throws(() {
+      list[0] = null;
+    });
+  }
+  Expect.throws(() {
+    list.add(null);
+  });
+}
+
+void checkUnmodifiableMap(Map<Symbol, Object> map) {
+  Expect.throws(() {
+    map[#key] = null;
+  });
+}
+
+expectInvocation(Invocation expect, Invocation actual) {
+  Expect.equals(expect.isGetter, actual.isGetter, "isGetter");
+  Expect.equals(expect.isSetter, actual.isSetter, "isSetter");
+  Expect.equals(expect.isAccessor, actual.isAccessor, "isAccessor");
+  Expect.equals(actual.isGetter || actual.isSetter, actual.isAccessor);
+  Expect.equals(expect.isMethod, actual.isMethod, "isMethod");
+  Expect.isTrue(actual.isMethod || actual.isGetter || actual.isSetter);
+  Expect.isFalse(actual.isMethod && actual.isGetter);
+  Expect.isFalse(actual.isMethod && actual.isSetter);
+  Expect.isFalse(actual.isSetter && actual.isGetter);
+  Expect.equals(expect.memberName, actual.memberName, "memberName");
+  Expect.listEquals(expect.typeArguments, actual.typeArguments, "types");
+  Expect.listEquals(
+      expect.positionalArguments, actual.positionalArguments, "positional");
+  Expect.mapEquals(expect.namedArguments, actual.namedArguments, "named");
+  checkUnmodifiableList(actual.typeArguments);
+  checkUnmodifiableList(actual.positionalArguments);
+  checkUnmodifiableMap(actual.namedArguments);
+}
diff --git a/tests/corelib_2/nsm_invocation_test.dart b/tests/corelib_2/nsm_invocation_test.dart
new file mode 100644
index 0000000..8dc183c
--- /dev/null
+++ b/tests/corelib_2/nsm_invocation_test.dart
@@ -0,0 +1,87 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+// Tests the constructors of the Invocation class.
+
+main() {
+  var argument = new Object();
+  var argument2 = new Object();
+  // Getter Invocation.
+  expectInvocation(new Invocation.getter(#name), nsm.name);
+  // Setter Invocation.
+  expectInvocation(new Invocation.setter(const Symbol("name="), argument),
+      (nsm..name = argument).last);
+  // Method invocation.
+  expectInvocation(new Invocation.method(#name, []), nsm.name());
+  expectInvocation(
+      new Invocation.method(#name, [argument]), nsm.name(argument));
+  expectInvocation(new Invocation.method(#name, [], {#arg: argument}),
+      nsm.name(arg: argument));
+  expectInvocation(new Invocation.method(#name, [argument], {#arg: argument2}),
+      nsm.name(argument, arg: argument2));
+  // Operator invocation.
+  expectInvocation(new Invocation.method(#+, [argument]), nsm + argument);
+  expectInvocation(new Invocation.method(#-, [argument]), nsm - argument);
+  expectInvocation(new Invocation.method(#~, []), ~nsm);
+  expectInvocation(new Invocation.method(Symbol.unaryMinus, []), -nsm);
+  expectInvocation(new Invocation.method(#[], [argument]), nsm[argument]);
+  nsm[argument] = argument2;
+  expectInvocation(
+      new Invocation.method(#[]=, [argument, argument2]), nsm.last);
+  // Call invocation.
+  expectInvocation(new Invocation.method(#call, []), nsm());
+  expectInvocation(new Invocation.method(#call, [argument]), nsm(argument));
+  expectInvocation(
+      new Invocation.method(#call, [], {#arg: argument}), nsm(arg: argument));
+  expectInvocation(new Invocation.method(#call, [argument], {#arg: argument2}),
+      nsm(argument, arg: argument2));
+}
+
+dynamic nsm = new Recorder();
+
+class Recorder {
+  Invocation last;
+  noSuchMethod(Invocation invocation) {
+    return last = invocation;
+  }
+}
+
+void checkUnmodifiableList(List<Object> list) {
+  if (list.isNotEmpty) {
+    Expect.throws(() {
+      list[0] = null;
+    });
+  }
+  Expect.throws(() {
+    list.add(null);
+  });
+}
+
+void checkUnmodifiableMap(Map<Symbol, Object> map) {
+  Expect.throws(() {
+    map[#key] = null;
+  });
+}
+
+expectInvocation(Invocation expect, Invocation actual) {
+  Expect.equals(expect.isGetter, actual.isGetter, "isGetter");
+  Expect.equals(expect.isSetter, actual.isSetter, "isSetter");
+  Expect.equals(expect.isAccessor, actual.isAccessor, "isAccessor");
+  Expect.equals(actual.isGetter || actual.isSetter, actual.isAccessor);
+  Expect.equals(expect.isMethod, actual.isMethod, "isMethod");
+  Expect.isTrue(actual.isMethod || actual.isGetter || actual.isSetter);
+  Expect.isFalse(actual.isMethod && actual.isGetter);
+  Expect.isFalse(actual.isMethod && actual.isSetter);
+  Expect.isFalse(actual.isSetter && actual.isGetter);
+  Expect.equals(expect.memberName, actual.memberName, "memberName");
+  Expect.listEquals(expect.typeArguments, actual.typeArguments, "types");
+  Expect.listEquals(
+      expect.positionalArguments, actual.positionalArguments, "positional");
+  Expect.mapEquals(expect.namedArguments, actual.namedArguments, "named");
+  checkUnmodifiableList(actual.typeArguments);
+  checkUnmodifiableList(actual.positionalArguments);
+  checkUnmodifiableMap(actual.namedArguments);
+}
diff --git a/tests/corelib_2/symbol_operator_test.dart b/tests/corelib_2/symbol_operator_test.dart
index 62a394b..ac79499 100644
--- a/tests/corelib_2/symbol_operator_test.dart
+++ b/tests/corelib_2/symbol_operator_test.dart
@@ -26,7 +26,7 @@
   testSymbol(#==, new Symbol("=="), "=="); // Can't hit noSuchMethod.
   testSymbol(#[], $[$], "[]");
   testSymbol(#[]=, ($[$] = $).lastMember, "[]=");
-  testSymbol(const Symbol("unary-"), -$, "unary-");
+  testSymbol(Symbol.unaryMinus, -$, "unary-");
 
   testSymbolThrows(">>>"); // //# 03: ok
   testSymbolThrows("!"); //   //# 03: continued
diff --git a/tests/corelib_2/symbol_test.dart b/tests/corelib_2/symbol_test.dart
index 7a4d0e5..ec47d45 100644
--- a/tests/corelib_2/symbol_test.dart
+++ b/tests/corelib_2/symbol_test.dart
@@ -73,7 +73,7 @@
     throw "non-const Symbol's hashCode not equal to its const equivalent";
   }
 
-  if (new Symbol('') != const Symbol('')) {
+  if (new Symbol('') != Symbol.empty) {
     throw 'empty Symbol not equals to itself';
   }
 }
diff --git a/tests/html/html.status b/tests/html/html.status
index ccc75f4..889eb50 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -48,7 +48,7 @@
 xhr_test/xhr: Pass, RuntimeError # Roll 50 failure
 
 [ $compiler == fasta ]
-*: CompileTimeError # TODO(ahe): Support dart:html in Fasta.
+*: Skip # TODO(ahe): Support dart:html in Fasta.
 
 [ $runtime == drt ]
 webgl_extensions_test: Skip # webgl does not work properly on DRT, which is 'headless'.
@@ -249,8 +249,6 @@
 custom/entered_left_view_test/standard_events: RuntimeError
 custom/entered_left_view_test/standard_events_old_callback_names: RuntimeError
 custom/entered_left_view_test/viewless_document: RuntimeError
-custom/mirrors_2_test: RuntimeError
-custom/mirrors_test: RuntimeError
 custom_element_method_clash_test/test: RuntimeError
 custom_element_name_clash_test/test: RuntimeError
 custom_elements_23127_test/baseline: RuntimeError
@@ -261,7 +259,6 @@
 custom_elements_test/lifecycle: RuntimeError
 custom_elements_test/mixins: RuntimeError
 custom_elements_test/register: RuntimeError
-deferred_multi_app_htmltest: CompileTimeError
 element_animate_test/omit_timing: Timeout
 element_test/click: RuntimeError
 element_test/eventDelegation: RuntimeError
@@ -271,13 +268,9 @@
 history_test/history: Timeout
 indexeddb_1_test/functional: RuntimeError
 indexeddb_2_test: RuntimeError
-indexeddb_3_test: RuntimeError
 indexeddb_4_test: RuntimeError
-indexeddb_5_test: RuntimeError
 js_test/JsObject.fromBrowserObject(): RuntimeError
 js_test/JsObject.jsify(): RuntimeError
-js_typed_interop_default_arg_test/explicit_argument: RuntimeError
-js_typed_interop_test/static_method_tearoff_1: RuntimeError
 js_util_test/js_util.jsify(): RuntimeError
 mirrors_js_typed_interop_test: RuntimeError
 mutationobserver_test/childList: Timeout
@@ -325,24 +318,19 @@
 mirrors_js_typed_interop_test: Fail # mirrors not supported
 
 [ $compiler == dart2js && $fast_startup && $fasta ]
-js_typed_interop_default_arg_test/explicit_argument: RuntimeError
 js_typed_interop_default_arg_test/none: RuntimeError
 js_typed_interop_test/object literal: RuntimeError
 js_typed_interop_test/static_method_call: RuntimeError
-js_typed_interop_test/static_method_tearoff_1: RuntimeError
 js_util_test/hasProperty: RuntimeError
 
-[ $compiler == dart2js && $fasta && $host_checked ]
+[ $compiler == dart2js && $fasta ]
 custom/mirrors_2_test: RuntimeError
 custom/mirrors_test: RuntimeError
+deferred_multi_app_htmltest: CompileTimeError
 fileapi_test/entry: RuntimeError
-js_typed_interop_default_arg_test/explicit_argument: RuntimeError
-js_typed_interop_test/static_method_tearoff_1: RuntimeError
-
-[ $compiler == dart2js && $fasta && $minified ]
-custom/mirrors_2_test: RuntimeError
-custom/mirrors_test: RuntimeError
-fileapi_test/entry: RuntimeError
+indexeddb_1_test/functional: RuntimeError
+indexeddb_3_test: RuntimeError
+indexeddb_5_test: RuntimeError
 js_typed_interop_default_arg_test/explicit_argument: RuntimeError
 js_typed_interop_test/static_method_tearoff_1: RuntimeError
 
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 2d33902..885d599 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -109,6 +109,30 @@
 static_function_test: Fail # mirrors not supported
 unresolved_ports_test: Fail # mirrors not supported
 
+[ $compiler == dart2js && $fasta ]
+browser/compute_this_script_browser_test: RuntimeError # mirrors not supported
+browser/typed_data_message_test: RuntimeError # mirrors not supported
+compile_time_error_test/01: Crash
+count_test: RuntimeError # mirrors not supported
+cross_isolate_message_test: RuntimeError # mirrors not supported
+illegal_msg_function_test: RuntimeError # mirrors not supported
+illegal_msg_mirror_test: RuntimeError # mirrors not supported
+isolate_complex_messages_test: RuntimeError # mirrors not supported
+mandel_isolate_test: RuntimeError # mirrors not supported
+message2_test: RuntimeError # mirrors not supported
+message_test: RuntimeError # mirrors not supported
+mint_maker_test: RuntimeError # mirrors not supported
+nested_spawn2_test: RuntimeError # mirrors not supported
+nested_spawn_test: RuntimeError # mirrors not supported
+raw_port_test: RuntimeError # mirrors not supported
+remote_unittest_helper: RuntimeError # mirrors not supported
+request_reply_test: RuntimeError # mirrors not supported
+spawn_function_custom_class_test: RuntimeError # mirrors not supported
+spawn_function_test: RuntimeError # mirrors not supported
+stacktrace_message_test: RuntimeError # mirrors not supported
+static_function_test: RuntimeError # mirrors not supported
+unresolved_ports_test: RuntimeError # mirrors not supported
+
 [ $compiler == dart2js && $jscl ]
 browser/*: SkipByDesign # Browser specific tests
 spawn_uri_test: SkipByDesign # Loading another file is not supported in JS shell
diff --git a/tests/kernel/kernel.status b/tests/kernel/kernel.status
index 6d9eea4..eaf10cd 100644
--- a/tests/kernel/kernel.status
+++ b/tests/kernel/kernel.status
@@ -18,10 +18,12 @@
 [ $compiler == dart2analyzer && $strong ]
 *: Skip # Issue 28649
 
-[ $compiler != dartk && $compiler != dartkp ]
-unsorted/invocation_errors_test/00: MissingCompileTimeError # This test has been tuned for dart 2.
+[ $compiler != dartk && $compiler != dartkp && $runtime != none ]
 unsorted/types_test: RuntimeError
 
+[ $compiler != dartk && $compiler != dartkp && !$strong ]
+unsorted/invocation_errors_test/00: MissingCompileTimeError # This test has been tuned for dart 2.
+
 [ $runtime == dart_precompiled && $minified ]
 unsorted/symbol_literal_test: Skip # Expects unobfuscated Symbol.toString.
 
diff --git a/tests/language_2/call_method_implicit_tear_off_assignable_test.dart b/tests/language_2/call_method_implicit_tear_off_assignable_test.dart
new file mode 100644
index 0000000..23763d4
--- /dev/null
+++ b/tests/language_2/call_method_implicit_tear_off_assignable_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+abstract class I {
+  void call();
+}
+
+class C implements I {
+  void call([int x]) {}
+}
+
+main() {
+  I i = new C();
+  // The implicit tear-off of i.call should be ok because its type (void
+  // Function()) is a supertype of the expected type, hence it is assignable.
+  void Function([int]) f = i;
+  Expect.equals(f, i.call);
+}
diff --git a/tests/language_2/implicit_creation/implicit_const_not_default_values_test.dart b/tests/language_2/implicit_creation/implicit_const_not_default_values_test.dart
new file mode 100644
index 0000000..3968dea
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_const_not_default_values_test.dart
@@ -0,0 +1,123 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests that const/new-insertion does the right thing for default values.
+// A default-value expression does not introduce a const context.
+
+main() {
+  foo();
+  bar();
+  baz();
+  qux();
+  C.foo();
+  C.bar();
+  new C().baz();
+  new C().qux();
+  new C.pos();
+  new C.nam();
+  const C.pos();
+  const C.nam();
+}
+
+// Default arguments must be const to be accepted
+foo([x //
+  = const [C()] //     //# o1: ok
+  = const {42: C()} // //# o2: ok
+  = const C(C()) //    //# o3: ok
+  = [42] //            //# e1: compile-time error
+  = {42: 42} //        //# e2: compile-time error
+  = C([]) //           //# e3: compile-time error
+  ]) {
+}
+
+bar({x //
+  = const [C()] //     //# o4: ok
+  = const {42: C()} // //# o5: ok
+  = const C(C()) //    //# o6: ok
+  = [42] //            //# e4: compile-time error
+  = {42: 42} //        //# e5: compile-time error
+  = C([]) //           //# e6: compile-time error
+  }) {
+}
+
+var baz = ([x
+  = const [C()] //     //# o7: ok
+  = const {42: C()} // //# o8: ok
+  = const C(C()) //    //# o9: ok
+  = [42] //            //# e7: compile-time error
+  = {42: 42} //        //# e8: compile-time error
+  = C([]) //           //# e9: compile-time error
+]) => 42;
+
+var qux = ({x
+  = const [C()] //     //# o10: ok
+  = const {42: C()} // //# o11: ok
+  = const C(C()) //    //# o12: ok
+  = [42] //            //# e10: compile-time error
+  = {42: 42} //        //# e11: compile-time error
+  = C([]) //           //# e12: compile-time error
+}) => 42;
+
+class C {
+  final x;
+  const C([this.x]);
+
+  const C.pos([this.x //
+    = const [C()] //     //# o13: ok
+    = const {42: C()} // //# o14: ok
+    = const C(C()) //    //# o15: ok
+    = [42] //            //# e13: compile-time error
+    = {42: 42} //        //# e14: compile-time error
+    = C([]) //           //# e15: compile-time error
+  ]);
+
+  const C.nam({this.x //
+    = const [C()] //     //# o16: ok
+    = const {42: C()} // //# o17: ok
+    = const C(C()) //    //# o18: ok
+    = [42] //            //# e16: compile-time error
+    = {42: 42} //        //# e17: compile-time error
+    = C([]) //           //# e18: compile-time error
+  });
+
+  static foo([x //
+    = const [C()] //     //# o19: ok
+    = const {42: C()} // //# o20: ok
+    = const C(C()) //    //# o21: ok
+    = [42] //            //# e19: compile-time error
+    = {42: 42} //        //# e20: compile-time error
+    = C([]) //           //# e21: compile-time error
+    ]) {
+  }
+
+  static bar({x //
+    = const [C()] //     //# o22: ok
+    = const {42: C()} // //# o23: ok
+    = const C(C()) //    //# o24: ok
+    = [42] //            //# e22: compile-time error
+    = {42: 42} //        //# e23: compile-time error
+    = C([]) //           //# e24: compile-time error
+    }) {
+  }
+
+  baz([x //
+    = const [C()] //     //# o25: ok
+    = const {42: C()} // //# o26: ok
+    = const C(C()) //    //# o27: ok
+    = [42] //            //# e25: compile-time error
+    = {42: 42} //        //# e26: compile-time error
+    = C([]) //           //# e27: compile-time error
+    ]) {
+  }
+
+  qux({x //
+    = const [C()] //     //# o28: ok
+    = const {42: C()} // //# o29: ok
+    = const C(C()) //    //# o30: ok
+    = [42] //            //# e28: compile-time error
+    = {42: 42} //        //# e29: compile-time error
+    = C([]) //           //# e30: compile-time error
+    }) {
+  }
+}
diff --git a/tests/language_2/implicit_creation/implicit_new_or_const_composite_test.dart b/tests/language_2/implicit_creation/implicit_new_or_const_composite_test.dart
index cd42c0f..54092f7 100644
--- a/tests/language_2/implicit_creation/implicit_new_or_const_composite_test.dart
+++ b/tests/language_2/implicit_creation/implicit_new_or_const_composite_test.dart
@@ -35,7 +35,7 @@
 
     Expect.identical(cd1, cd2);
     Expect.identical(cd1, cd3);
-    Expect.allDistinct([cd1, cd3, cd4, cd5]);
+    Expect.allDistinct([cd1, cd4, cd5]);
   }
 
   {
@@ -95,7 +95,7 @@
     Expect.identical(n1, n3);
     Expect.identical(n1, n4);
     Expect.identical(n1, n8);
-    Expect.allDistinct([n1, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14]);
+    Expect.allDistinct([n1, n5, n6, n7, n9, n10, n11, n12, n13, n14]);
 
     Expect.identical(clist, n6.left);
     Expect.identical(clist, n10.left);
@@ -183,7 +183,7 @@
     Expect.identical(l20, l23);
     Expect.identical(l20, l24);
     // List literals are never const unless in const context.
-    Expect.allDistinct([l25, l26, l27, l28, l29, l30, l31]);
+    Expect.allDistinct([l20, l25, l26, l27, l28, l29, l30, l31]);
     Expect.identical(cc42, l25[0]);
     Expect.identical(cc42, l26[0]);
     Expect.identical(cc42, l27[0]);
@@ -234,7 +234,7 @@
     Expect.identical(m20, m23);
     Expect.identical(m20, m24);
     // Map literals are never const unless in const context.
-    Expect.allDistinct([m25, m26, m27, m28, m29, m30, m31]);
+    Expect.allDistinct([m20, m25, m26, m27, m28, m29, m30, m31]);
     Expect.identical(cc42, m25.keys.first);
     Expect.identical(cc42, m26.keys.first);
     Expect.identical(cc42, m27.keys.first);
diff --git a/tests/language_2/language_2.status b/tests/language_2/language_2.status
index e4840e6..8cb9983 100644
--- a/tests/language_2/language_2.status
+++ b/tests/language_2/language_2.status
@@ -5,29 +5,6 @@
 [ $compiler == app_jit ]
 deferred_inheritance_constraints_test/redirecting_constructor: Crash
 
-[ $compiler == dart2analyzer ]
-implicit_creation/implicit_const_context_constructor_generic_named_test: CompileTimeError
-implicit_creation/implicit_const_context_constructor_generic_test: CompileTimeError
-implicit_creation/implicit_const_context_constructor_named_test: CompileTimeError
-implicit_creation/implicit_const_context_constructor_test: CompileTimeError
-implicit_creation/implicit_const_context_list_test: CompileTimeError
-implicit_creation/implicit_const_context_map_test: CompileTimeError
-implicit_creation/implicit_const_context_prefix_constructor_generic_named_test: CompileTimeError
-implicit_creation/implicit_const_context_prefix_constructor_generic_test: CompileTimeError
-implicit_creation/implicit_const_context_prefix_constructor_named_test: CompileTimeError
-implicit_creation/implicit_const_context_prefix_constructor_test: CompileTimeError
-implicit_creation/implicit_new_constructor_generic_named_test: CompileTimeError
-implicit_creation/implicit_new_constructor_generic_test: CompileTimeError
-implicit_creation/implicit_new_constructor_named_test: CompileTimeError
-implicit_creation/implicit_new_constructor_test: CompileTimeError
-implicit_creation/implicit_new_or_const_composite_test: CompileTimeError
-implicit_creation/implicit_new_or_const_generic_test: CompileTimeError
-implicit_creation/implicit_new_or_const_test: CompileTimeError
-implicit_creation/implicit_new_prefix_constructor_generic_named_test: CompileTimeError
-implicit_creation/implicit_new_prefix_constructor_generic_test: CompileTimeError
-implicit_creation/implicit_new_prefix_constructor_named_test: CompileTimeError
-implicit_creation/implicit_new_prefix_constructor_test: CompileTimeError
-
 [ $compiler != dart2analyzer ]
 switch_case_warn_test: Skip # Analyzer only, see language_analyzer2.status
 
@@ -126,10 +103,12 @@
 [ $compiler == none && $runtime == drt && !$checked ]
 assertion_initializer_const_error_test/01: Fail
 
-[ $compiler != spec_parser && !$checked && !$strong ]
+[ $compiler != spec_parser && $runtime != none && !$checked && !$strong ]
 closure_type_test: RuntimeError
 map_literal1_test/01: MissingCompileTimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/02: RuntimeError # Requires type check.
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError # Issue #31426
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError # Issue #31426
 
 [ $compiler != spec_parser && !$strong ]
 class_literal_static_test: MissingCompileTimeError # Requires strong mode
@@ -183,8 +162,6 @@
 map_literal4_test/05: MissingCompileTimeError
 map_literal4_test/06: MissingCompileTimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/03: MissingCompileTimeError # Issue #31426
-nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError # Issue #31426
-nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError # Issue #31426
 number_identifier_test/05: MissingCompileTimeError
 number_identifier_test/08: MissingCompileTimeError
 number_identifier_test/09: MissingCompileTimeError
@@ -270,6 +247,7 @@
 implicit_creation/implicit_const_context_prefix_constructor_generic_test: Fail # No support for implicit creation.
 implicit_creation/implicit_const_context_prefix_constructor_named_test: Fail # No support for implicit creation.
 implicit_creation/implicit_const_context_prefix_constructor_test: Fail # No support for implicit creation.
+implicit_creation/implicit_const_not_default_values_test/o.*: CompileTimeError # No support for implicit creation.
 implicit_creation/implicit_new_constructor_generic_named_test: Fail # No support for implicit creation.
 implicit_creation/implicit_new_constructor_named_test: Fail # No support for implicit creation.
 implicit_creation/implicit_new_or_const_composite_test: Fail # No support for implicit creation.
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index 5a9ec1e..621ca8b 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -11,14 +11,10 @@
 black_listed_test/none: Fail # Issue 14228
 built_in_identifier_prefix_test: CompileTimeError
 built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Issue 28813
-call_type_literal_test: CompileTimeError
 cascade_test/none: Fail # Issue 11577
-class_literal_static_test/none: CompileTimeError
-class_literal_test/none: CompileTimeError
 config_import_corelib_test: StaticWarning, OK
 conflicting_type_variable_and_setter_test: CompileTimeError # Issue 25525
 const_for_in_variable_test/01: MissingCompileTimeError # Issue 25161
-constructor_call_as_function_test: CompileTimeError
 constructor_call_wrong_argument_count_negative_test: Fail # Issue 11585
 deep_nesting1_negative_test: CompileTimeError # Issue 25558
 deep_nesting2_negative_test: CompileTimeError # Issue 25558
@@ -42,6 +38,10 @@
 generic_no_such_method_dispatcher_simple_test: Skip # This test is just for kernel.
 getter_declaration_negative_test: CompileTimeError
 getter_setter_in_lib_test: Fail # Issue 23286
+implicit_creation/implicit_const_context_constructor_generic_named_test: CompileTimeError
+implicit_creation/implicit_const_context_constructor_generic_test: CompileTimeError
+implicit_creation/implicit_const_context_prefix_constructor_generic_named_test: CompileTimeError
+implicit_creation/implicit_const_context_prefix_constructor_generic_test: CompileTimeError
 import_core_prefix_test: StaticWarning
 index_assign_operator_infer_return_type_test: StaticWarning
 initializing_formal_final_test: MissingCompileTimeError
@@ -145,7 +145,6 @@
 try_catch_on_syntax_test/10: MissingCompileTimeError
 try_catch_on_syntax_test/11: MissingCompileTimeError
 type_inference_inconsistent_inheritance_test: MissingCompileTimeError
-type_literal_prefix_call_test: CompileTimeError
 type_variable_scope_test/none: Fail # Issue 11578
 type_variable_static_context_negative_test: Fail # Issue 12161
 vm/debug_break_enabled_vm_test: Skip
@@ -883,6 +882,7 @@
 library_ambiguous_test/04: MissingCompileTimeError
 list_literal1_test/01: MissingCompileTimeError
 malformed2_test/00: MissingCompileTimeError
+map_literal1_test/01: MissingCompileTimeError
 method_override2_test/00: MissingCompileTimeError
 method_override2_test/01: MissingCompileTimeError
 method_override2_test/02: MissingCompileTimeError
@@ -1111,6 +1111,31 @@
 type_variable_static_context_test: MissingCompileTimeError
 unresolved_in_factory_test: MissingCompileTimeError
 
+[ $compiler == dart2analyzer && !$preview_dart_2 ]
+call_type_literal_test: CompileTimeError
+class_literal_static_test/none: CompileTimeError
+class_literal_test/none: CompileTimeError
+constructor_call_as_function_test: CompileTimeError
+implicit_creation/implicit_const_context_constructor_named_test: CompileTimeError
+implicit_creation/implicit_const_context_constructor_test: CompileTimeError
+implicit_creation/implicit_const_context_list_test: CompileTimeError
+implicit_creation/implicit_const_context_map_test: CompileTimeError
+implicit_creation/implicit_const_context_prefix_constructor_named_test: CompileTimeError
+implicit_creation/implicit_const_context_prefix_constructor_test: CompileTimeError
+implicit_creation/implicit_const_not_default_values_test/o.*: CompileTimeError # No support for implicit creation.
+implicit_creation/implicit_new_constructor_generic_named_test: CompileTimeError
+implicit_creation/implicit_new_constructor_generic_test: CompileTimeError
+implicit_creation/implicit_new_constructor_named_test: CompileTimeError
+implicit_creation/implicit_new_constructor_test: CompileTimeError
+implicit_creation/implicit_new_or_const_composite_test: CompileTimeError
+implicit_creation/implicit_new_or_const_generic_test: CompileTimeError
+implicit_creation/implicit_new_or_const_test: CompileTimeError
+implicit_creation/implicit_new_prefix_constructor_generic_named_test: CompileTimeError
+implicit_creation/implicit_new_prefix_constructor_generic_test: CompileTimeError
+implicit_creation/implicit_new_prefix_constructor_named_test: CompileTimeError
+implicit_creation/implicit_new_prefix_constructor_test: CompileTimeError
+type_literal_prefix_call_test: CompileTimeError
+
 [ $compiler == dart2analyzer && $strong ]
 accessor_conflict_export2_test: CompileTimeError # Issue 25626
 accessor_conflict_export_test: CompileTimeError # Issue 25626
@@ -1119,6 +1144,7 @@
 accessor_conflict_import_prefixed_test: CompileTimeError # Issue 25626
 accessor_conflict_import_test: CompileTimeError # Issue 25626
 additional_interface_adds_optional_args_test: CompileTimeError # Issue #30568
+call_method_implicit_tear_off_assignable_test: CompileTimeError # Issue 32426
 call_method_override_test/01: MissingCompileTimeError
 call_method_override_test/02: MissingCompileTimeError
 cascaded_forwarding_stubs_test: CompileTimeError
@@ -1277,6 +1303,7 @@
 built_in_identifier_type_annotation_test/72: MissingCompileTimeError # Issue 28813
 built_in_identifier_type_annotation_test/78: MissingCompileTimeError # Issue 28813
 built_in_identifier_type_annotation_test/81: MissingCompileTimeError # Issue 28813
+call_method_implicit_tear_off_assignable_test: StaticWarning
 call_method_implicit_tear_off_implements_function_test/03: StaticWarning
 call_method_implicit_tear_off_test/03: StaticWarning
 call_method_must_not_be_field_test/01: MissingCompileTimeError # Issue 32264
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index afef09fa..422e838 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -1140,7 +1140,6 @@
 argument_assignability_function_typed_test/03: RuntimeError
 argument_assignability_function_typed_test/04: RuntimeError
 argument_assignability_function_typed_test/05: RuntimeError
-assert_message_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 assertion_initializer_const_error2_test/none: CompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
@@ -1173,15 +1172,12 @@
 async_await_syntax_test/c05a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_await_syntax_test/c06a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_await_syntax_test/c09a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/c10a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_await_syntax_test/d01a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_await_syntax_test/d02a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_await_syntax_test/d03a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_await_syntax_test/d05a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_await_syntax_test/d06a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/d08b: MissingCompileTimeError
 async_await_syntax_test/d09a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/d10a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_await_test/02: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 async_await_test/03: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 async_await_test/none: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
@@ -1262,7 +1258,6 @@
 bool_test: RuntimeError
 branch_canonicalization_test: RuntimeError
 branches_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 441 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
-call_function_apply_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 call_non_method_field_test/01: MissingCompileTimeError
 call_non_method_field_test/02: MissingCompileTimeError
 canonical_const2_test: RuntimeError, OK # non JS number semantics
@@ -1276,14 +1271,10 @@
 class_literal_static_test/01: MissingCompileTimeError
 class_literal_static_test/03: MissingCompileTimeError
 class_literal_static_test/07: MissingCompileTimeError
-classes_static_method_clash_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-closure_cycles_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 closure_invoked_through_interface_target_field_test: MissingCompileTimeError
 closure_invoked_through_interface_target_getter_test: MissingCompileTimeError
 closure_self_reference_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/nodes.dart': Failed assertion: line 641 pos 12: 'isClosed()': is not true.
 closure_type_test: RuntimeError
-compile_time_constant_a_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-compile_time_constant_b_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 compile_time_constant_d_test: CompileTimeError
 compile_time_constant_e_test: CompileTimeError
 compile_time_constant_k_test/01: MissingCompileTimeError
@@ -1341,7 +1332,6 @@
 ct_const_test: CompileTimeError
 custom_await_stack_trace_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 cyclic_constructor_test/01: Crash # Issue 30856
-cyclic_default_values_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 cyclic_type_variable_test/01: MissingCompileTimeError
 cyclic_type_variable_test/02: MissingCompileTimeError
 cyclic_type_variable_test/03: MissingCompileTimeError
@@ -1413,7 +1403,6 @@
 field_increment_bailout_test: RuntimeError
 field_initialization_order_test/01: MissingCompileTimeError
 field_initialization_order_test/none: RuntimeError
-field_override2_test: MissingCompileTimeError
 field_override3_test/00: MissingCompileTimeError
 field_override3_test/01: MissingCompileTimeError
 field_override3_test/02: MissingCompileTimeError
@@ -1437,7 +1426,7 @@
 full_stacktrace1_test: RuntimeError # Issue 12698
 full_stacktrace2_test: RuntimeError # Issue 12698
 full_stacktrace3_test: RuntimeError # Issue 12698
-function_subtype2_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+function_subtype2_test: RuntimeError
 function_subtype3_test: RuntimeError
 function_subtype_bound_closure2_test: RuntimeError
 function_subtype_bound_closure3_test: RuntimeError
@@ -1453,12 +1442,9 @@
 function_subtype_closure0_test: RuntimeError
 function_subtype_closure1_test: RuntimeError
 function_subtype_factory1_test: RuntimeError
-function_subtype_inline0_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 function_subtype_inline1_test: RuntimeError
 function_subtype_inline2_test: RuntimeError
 function_subtype_local2_test: RuntimeError
-function_subtype_local3_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-function_subtype_local4_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 function_subtype_local5_test: RuntimeError
 function_subtype_not1_test: RuntimeError
 function_subtype_optional1_test: RuntimeError
@@ -1467,7 +1453,7 @@
 function_subtype_setter0_test: RuntimeError
 function_subtype_simple2_test: RuntimeError
 function_subtype_typearg5_test: RuntimeError
-function_type2_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+function_type2_test: RuntimeError
 function_type_alias2_test: RuntimeError
 function_type_alias4_test: RuntimeError
 function_type_alias_test: RuntimeError
@@ -1476,7 +1462,7 @@
 generic_async_star_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 generic_async_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 generic_closure_test/01: RuntimeError
-generic_closure_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+generic_closure_test/none: RuntimeError
 generic_field_mixin6_test/none: RuntimeError
 generic_function_bounds_test: RuntimeError
 generic_function_dcall_test: RuntimeError
@@ -1485,7 +1471,6 @@
 generic_function_type_as_type_argument_test/03: RuntimeError
 generic_function_type_within_type_argument_test: RuntimeError
 generic_function_typedef_test/01: RuntimeError
-generic_functions_test: Crash # Stack Overflow
 generic_instanceof2_test: RuntimeError
 generic_instanceof_test: RuntimeError
 generic_is_check_test: RuntimeError
@@ -1502,14 +1487,13 @@
 generic_methods_recursive_bound_test/03: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/metadata_collector.dart': Failed assertion: line 100 pos 12: 'isBound': is not true.
 generic_methods_simple_as_expression_test/02: MissingRuntimeError
 generic_methods_tearoff_specialization_test: RuntimeError
-generic_methods_test: Crash # Stack Overflow
 generic_methods_type_expression_test: RuntimeError
 generic_methods_unused_parameter_test: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
 generic_no_such_method_dispatcher_simple_test: CompileTimeError
 generic_no_such_method_dispatcher_test: CompileTimeError
 generic_tearoff_test: CompileTimeError
 generic_test: RuntimeError
-generic_typedef_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+generic_typedef_test: RuntimeError
 getter_override2_test/02: MissingCompileTimeError
 getter_override_test/00: MissingCompileTimeError
 getter_override_test/01: MissingCompileTimeError
@@ -1568,19 +1552,10 @@
 local_function2_test/none: RuntimeError
 local_function3_test/none: RuntimeError
 local_function_test/none: RuntimeError
-main_test/01: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-main_test/02: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-main_test/03: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-main_test/04: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-main_test/05: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-main_test/20: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-main_test/21: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-main_test/22: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-main_test/41: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-main_test/42: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-main_test/43: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-main_test/44: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-main_test/45: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+main_test/03: RuntimeError
+main_test/20: RuntimeError
+main_test/22: RuntimeError
+main_test/44: RuntimeError
 malbounded_instantiation_test/01: MissingCompileTimeError
 malbounded_instantiation_test/02: MissingCompileTimeError
 malbounded_instantiation_test/03: MissingCompileTimeError
@@ -1598,7 +1573,6 @@
 malbounded_type_test_test/01: MissingCompileTimeError
 malbounded_type_test_test/02: MissingCompileTimeError
 many_generic_instanceof_test: RuntimeError
-many_named_arguments_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 many_overridden_no_such_method_test: RuntimeError
 map_literal11_test/none: MissingRuntimeError
 map_literal3_test/01: MissingCompileTimeError
@@ -1938,8 +1912,6 @@
 type_variable_bounds_test/06: MissingCompileTimeError
 type_variable_bounds_test/08: MissingCompileTimeError
 type_variable_bounds_test/11: MissingCompileTimeError
-type_variable_closure_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-type_variable_function_type_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 type_variable_promotion_test: RuntimeError
 typedef_is_test: RuntimeError
 typevariable_substitution2_test/02: RuntimeError
@@ -1980,8 +1952,8 @@
 void_type_usage_test/conditional2_dynamic_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_for: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_literal_list_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
-void_type_usage_test/conditional2_literal_map_value_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_literal_map_value_init2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_literal_map_value_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_parens: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_return: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
@@ -1997,8 +1969,8 @@
 void_type_usage_test/conditional3_dynamic_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_for: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_literal_list_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
-void_type_usage_test/conditional3_literal_map_value_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_literal_map_value_init2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_literal_map_value_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_parens: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_return: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
@@ -2061,15 +2033,12 @@
 async_await_syntax_test/c05a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_await_syntax_test/c06a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_await_syntax_test/c09a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/c10a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_await_syntax_test/d01a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_await_syntax_test/d02a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_await_syntax_test/d03a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_await_syntax_test/d05a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_await_syntax_test/d06a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/d08b: MissingCompileTimeError
 async_await_syntax_test/d09a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/d10a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_await_test/02: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 async_await_test/03: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 async_await_test/none: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
@@ -2294,7 +2263,6 @@
 field_increment_bailout_test: RuntimeError
 field_initialization_order_test/01: MissingCompileTimeError
 field_initialization_order_test/none: RuntimeError
-field_override2_test: MissingCompileTimeError
 field_override3_test/00: MissingCompileTimeError
 field_override3_test/01: MissingCompileTimeError
 field_override3_test/02: MissingCompileTimeError
@@ -2361,7 +2329,6 @@
 generic_function_type_as_type_argument_test/03: RuntimeError
 generic_function_type_within_type_argument_test: RuntimeError
 generic_function_typedef_test/01: RuntimeError
-generic_functions_test: Crash # Stack Overflow
 generic_instanceof2_test: RuntimeError
 generic_instanceof_test: RuntimeError
 generic_is_check_test: RuntimeError
@@ -2378,7 +2345,6 @@
 generic_methods_recursive_bound_test/03: Crash # NoSuchMethodError: The method 'markSeen' was called on null.
 generic_methods_simple_as_expression_test/02: MissingRuntimeError
 generic_methods_tearoff_specialization_test: RuntimeError
-generic_methods_test: Crash # Stack Overflow
 generic_methods_type_expression_test: RuntimeError
 generic_methods_unused_parameter_test: RuntimeError
 generic_no_such_method_dispatcher_simple_test: CompileTimeError
@@ -2819,6 +2785,10 @@
 wrong_number_type_arguments_test/none: Pass
 yieldstar_pause_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 
+[ $compiler == dart2js && $fasta && $strong ]
+mixin_type_parameter5_test: RuntimeError
+mixin_type_parameter6_test: RuntimeError
+
 [ $compiler == dart2js && $fasta && !$strong ]
 *: SkipByDesign
 
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index fd6aff1..71846f3 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -21,8 +21,8 @@
 await_future_test: Pass, Timeout # Issue 29920
 bit_operations_test: RuntimeError # No bigints on web.
 black_listed_test/none: Fail # Issue 14228
-bug32353_test: CompileTimeError
-bug32372_test: CompileTimeError
+bug32353_test: RuntimeError
+bug32372_test: RuntimeError
 built_in_identifier_prefix_test: CompileTimeError
 built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Issue 28816
 call_method_as_cast_test/01: RuntimeError
@@ -34,6 +34,7 @@
 call_method_function_typed_value_test/04: RuntimeError
 call_method_function_typed_value_test/06: RuntimeError
 call_method_function_typed_value_test/08: RuntimeError
+call_method_implicit_tear_off_assignable_test: CompileTimeError # Issue 32426
 call_method_implicit_tear_off_implements_function_test/01: RuntimeError
 call_method_implicit_tear_off_implements_function_test/02: RuntimeError
 call_method_implicit_tear_off_implements_function_test/03: RuntimeError
@@ -56,6 +57,7 @@
 cascaded_forwarding_stubs_generic_test: RuntimeError
 cascaded_forwarding_stubs_test: CompileTimeError
 conflicting_generic_interfaces_hierarchy_loop_infinite_test: Skip # Crashes or times out
+conflicting_generic_interfaces_simple_test: MissingCompileTimeError
 conflicting_type_variable_and_setter_test: CompileTimeError
 const_evaluation_test/01: RuntimeError # Issue 29920
 const_for_in_variable_test/01: MissingCompileTimeError
@@ -141,19 +143,20 @@
 mixin_supertype_subclass_test/02: MissingCompileTimeError
 mixin_supertype_subclass_test/05: MissingCompileTimeError
 mixin_type_parameter_inference_previous_mixin_test/01: CompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/02: CompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/05: CompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/none: CompileTimeError
+mixin_type_parameter_inference_previous_mixin_test/02: RuntimeError
+mixin_type_parameter_inference_previous_mixin_test/03: MissingCompileTimeError
+mixin_type_parameter_inference_previous_mixin_test/04: MissingCompileTimeError
+mixin_type_parameter_inference_previous_mixin_test/05: RuntimeError
 mixin_type_parameter_inference_test/01: CompileTimeError
-mixin_type_parameter_inference_test/02: CompileTimeError
-mixin_type_parameter_inference_test/03: CompileTimeError
-mixin_type_parameter_inference_test/08: CompileTimeError
-mixin_type_parameter_inference_test/09: CompileTimeError
-mixin_type_parameter_inference_test/10: CompileTimeError
-mixin_type_parameter_inference_test/12: CompileTimeError
-mixin_type_parameter_inference_test/13: CompileTimeError
-mixin_type_parameter_inference_test/16: CompileTimeError
-mixin_type_parameter_inference_test/none: CompileTimeError
+mixin_type_parameter_inference_test/02: RuntimeError
+mixin_type_parameter_inference_test/03: RuntimeError
+mixin_type_parameter_inference_test/04: MissingCompileTimeError
+mixin_type_parameter_inference_test/05: MissingCompileTimeError
+mixin_type_parameter_inference_test/06: MissingCompileTimeError
+mixin_type_parameter_inference_test/07: MissingCompileTimeError
+mixin_type_parameter_inference_test/08: RuntimeError
+mixin_type_parameter_inference_test/09: RuntimeError
+mixin_type_parameter_inference_test/11: MissingCompileTimeError
 mock_writable_final_private_field_test: CompileTimeError # Issue 30848
 multiline_newline_test/01: CompileTimeError
 multiline_newline_test/01r: CompileTimeError
@@ -179,9 +182,6 @@
 parameter_initializer_test: CompileTimeError
 part_refers_to_core_library_test/01: Crash
 prefix10_negative_test: Fail # Issue 29920
-regress_22976_test/01: CompileTimeError
-regress_22976_test/02: CompileTimeError
-regress_22976_test/none: CompileTimeError
 regress_23408_test: CompileTimeError
 regress_24283_test: RuntimeError # Intended to fail, requires 64-bit numbers.
 regress_29025_test: CompileTimeError # Issue 29081
@@ -324,9 +324,6 @@
 abstract_syntax_test/00: MissingCompileTimeError
 additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
 additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
-async_await_syntax_test/c10a: MissingCompileTimeError
-async_await_syntax_test/d08b: MissingCompileTimeError
-async_await_syntax_test/d10a: MissingCompileTimeError
 async_or_generator_return_type_stacktrace_test/01: MissingCompileTimeError
 async_or_generator_return_type_stacktrace_test/02: MissingCompileTimeError
 async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
@@ -338,7 +335,7 @@
 bad_override_test/03: MissingCompileTimeError
 bad_override_test/04: MissingCompileTimeError
 bad_override_test/05: MissingCompileTimeError
-bug32353_test: Crash # Issue 32353
+bug32353_test: RuntimeError # Issue 32428
 built_in_identifier_type_annotation_test/05: RuntimeError # Issue 32194
 built_in_identifier_type_annotation_test/none: RuntimeError # Issue 32194
 call_method_as_cast_test/01: RuntimeError
@@ -433,7 +430,6 @@
 fauxverride_test/03: MissingCompileTimeError
 fauxverride_test/05: MissingCompileTimeError
 field_initialization_order_test/01: MissingCompileTimeError
-field_override2_test: MissingCompileTimeError
 field_override3_test/00: MissingCompileTimeError
 field_override3_test/01: MissingCompileTimeError
 field_override3_test/02: MissingCompileTimeError
@@ -460,6 +456,7 @@
 identical_const_test/02: MissingCompileTimeError
 identical_const_test/03: MissingCompileTimeError
 identical_const_test/04: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e.*: MissingCompileTimeError
 implicit_creation/implicit_new_or_const_composite_test: RuntimeError
 implicit_creation/implicit_new_or_const_test: RuntimeError
 implicit_this_test/01: MissingCompileTimeError
@@ -571,6 +568,7 @@
 mixin_of_mixin_test/04: MissingCompileTimeError
 mixin_of_mixin_test/05: MissingCompileTimeError
 mixin_of_mixin_test/06: MissingCompileTimeError
+mixin_regress_13688_test: RuntimeError # Issue 32427
 mixin_super_2_test/01: MissingCompileTimeError
 mixin_super_2_test/03: MissingCompileTimeError
 mixin_super_bound_test/01: MissingCompileTimeError
@@ -633,11 +631,13 @@
 override_inheritance_no_such_method_test/10: MissingCompileTimeError
 override_inheritance_no_such_method_test/12: MissingCompileTimeError
 override_method_with_field_test/01: MissingCompileTimeError
+recursive_mixin_test: RuntimeError # Issue 32428
 redirecting_factory_default_values_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/02: MissingCompileTimeError
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
 redirecting_factory_reflection_test: RuntimeError # UnimplementedError: node <InvalidExpression> `invalid-expression`
+regress_22666_test: RuntimeError # Issue 32427
 regress_23089_test: Crash # Crashes in KernelClassBuilder.buildTypeArguments
 regress_23408_test: CompileTimeError # Issue 31533
 regress_24283_test: RuntimeError # Expect.equals(expected: <-1>, actual: <4294967295>) fails.
@@ -645,6 +645,7 @@
 regress_29405_test: CompileTimeError # Issue 31402 Error: A value of type '#lib2::Foo' can't be assigned to a variable of type '(#lib2::Foo) → void'.
 regress_29784_test/01: MissingCompileTimeError
 regress_29784_test/02: MissingCompileTimeError
+regress_29949_test: RuntimeError # Issue 32429
 regress_30339_test: CompileTimeError
 regress_30339_test: RuntimeError # Uncaught Expect.isTrue(false) fails.
 runtime_type_function_test: RuntimeError # Expect.fail('Type print string does not match expectation
@@ -791,7 +792,6 @@
 integer_division_by_zero_test: RuntimeError # Issue 29920; Expect.throws: Unexpected 'Unsupported operation: Infinity'
 internal_library_test/02: Crash
 invocation_mirror2_test: RuntimeError # UnimplementedError: JsInstanceMirror.delegate unimplemented
-invocation_mirror_empty_arguments_test: RuntimeError # Expect.throws(UnsupportedError) fails: Did not throw
 invocation_mirror_invoke_on2_test: RuntimeError # UnimplementedError: JsInstanceMirror.delegate unimplemented
 invocation_mirror_invoke_on_test: RuntimeError # UnimplementedError: JsInstanceMirror.delegate unimplemented
 invocation_mirror_test: RuntimeError # Type 'NativeJavaScriptObject' is not a subtype of type 'int' in strong mode
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 94a1e0f..58b6a9d 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -11,7 +11,6 @@
 # to add them.
 
 [ $compiler == dartkp ]
-bug32353_test: DartkCrash # Issue 32353
 class_cycle_test/02: MissingCompileTimeError
 class_cycle_test/03: MissingCompileTimeError
 duplicate_implements_test/01: MissingCompileTimeError
@@ -21,6 +20,48 @@
 mock_writable_final_field_test: RuntimeError # Issue 31424
 no_such_method_subtype_test: RuntimeError # Issue 31424
 
+[ $compiler == fasta ]
+assertion_initializer_const_error2_test/cc01: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc02: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc03: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc04: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc05: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc06: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc07: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc08: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc09: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc10: MissingCompileTimeError
+generic_test/01: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e1: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e10: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e11: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e12: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e13: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e14: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e15: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e16: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e17: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e18: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e19: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e2: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e20: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e21: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e22: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e23: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e24: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e25: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e26: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e27: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e28: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e29: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e3: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e30: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e4: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e5: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e6: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e7: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e8: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e9: MissingCompileTimeError
 
 [ $fasta ]
 abstract_factory_constructor_test/00: MissingCompileTimeError # Issue 32013.
@@ -30,9 +71,6 @@
 abstract_syntax_test/00: MissingCompileTimeError # Issue 32013.
 additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError # Issue 32014.
 additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError # Issue 32014.
-async_await_syntax_test/c10a: MissingCompileTimeError
-async_await_syntax_test/d08b: MissingCompileTimeError
-async_await_syntax_test/d10a: MissingCompileTimeError
 async_or_generator_return_type_stacktrace_test/01: MissingCompileTimeError
 async_or_generator_return_type_stacktrace_test/02: MissingCompileTimeError
 async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
@@ -76,7 +114,6 @@
 factory2_test/03: MissingCompileTimeError
 factory4_test/00: MissingCompileTimeError
 field3_test/01: MissingCompileTimeError
-field_override2_test: MissingCompileTimeError
 field_override_test/00: MissingCompileTimeError
 field_override_test/01: MissingCompileTimeError
 generic_methods_bounds_test/01: MissingCompileTimeError
@@ -574,7 +611,6 @@
 async_star_cancel_while_paused_test: RuntimeError
 async_star_pause_test: Fail, OK
 async_star_test/02: RuntimeError # Issue 31402 (Invocation arguments)
-bug32353_test: DartkCrash # Issue 32353
 built_in_identifier_prefix_test: CompileTimeError
 call_method_must_not_be_field_test/03: RuntimeError # Issue 32265
 call_method_must_not_be_getter_test/03: RuntimeError # Issue 32265
@@ -1150,10 +1186,167 @@
 type_variable_promotion_test: RuntimeError # Compares runtime type to the string "List<B>"
 
 [ $compiler == fasta && $strong ]
-deferred_super_dependency_test/01: MissingCompileTimeError
+bad_override_test/03: MissingCompileTimeError
+bad_override_test/04: MissingCompileTimeError
+bad_override_test/05: MissingCompileTimeError
+check_member_static_test/02: MissingCompileTimeError
+class_cycle_test/02: MissingCompileTimeError
+class_cycle_test/03: MissingCompileTimeError
+compile_time_constant_static4_test/02: MissingCompileTimeError
+compile_time_constant_static4_test/03: MissingCompileTimeError
+compile_time_constant_static5_test/11: CompileTimeError
+compile_time_constant_static5_test/16: CompileTimeError
+compile_time_constant_static5_test/21: CompileTimeError
+compile_time_constant_static5_test/23: CompileTimeError
+conditional_import_string_test: CompileTimeError
+conditional_import_test: CompileTimeError
+conditional_property_access_test/05: Crash
+conditional_property_access_test/06: Crash
+config_import_corelib_test: CompileTimeError
+config_import_test: Crash
+const_constructor3_test/04: MissingCompileTimeError
+constants_test/05: MissingCompileTimeError
+cyclic_typedef_test/10: Crash
+cyclic_typedef_test/11: Crash
+deferred_constraints_constants_test/default_argument2: MissingCompileTimeError
+deferred_load_library_wrong_args_test/01: CompileTimeError
+deferred_shared_and_unshared_classes_test: CompileTimeError
+duplicate_implements_test/01: MissingCompileTimeError
+duplicate_implements_test/02: MissingCompileTimeError
+dynamic_prefix_core_test/none: CompileTimeError
+emit_const_fields_test: CompileTimeError
+export_ambiguous_main_test: MissingCompileTimeError
+external_test/21: CompileTimeError
+external_test/24: CompileTimeError
+fauxverride_test/03: MissingCompileTimeError
+fauxverride_test/05: MissingCompileTimeError
+field_initialization_order_test/01: MissingCompileTimeError
+field_override3_test/00: MissingCompileTimeError
+field_override3_test/01: MissingCompileTimeError
+field_override3_test/02: MissingCompileTimeError
+field_override3_test/03: MissingCompileTimeError
+field_override4_test/02: MissingCompileTimeError
+function_type_parameter2_negative_test: Fail
+function_type_parameter_negative_test: Fail
+generic_function_type_as_type_argument_test/01: MissingCompileTimeError
+generic_function_type_as_type_argument_test/02: MissingCompileTimeError
+generic_methods_generic_function_result_test/01: MissingCompileTimeError
+generic_no_such_method_dispatcher_simple_test: CompileTimeError
+generic_no_such_method_dispatcher_test: CompileTimeError
+generic_tearoff_test: CompileTimeError
+getter_override2_test/02: MissingCompileTimeError
+getter_override_test/00: MissingCompileTimeError
+getter_override_test/01: MissingCompileTimeError
+getter_override_test/02: MissingCompileTimeError
+instantiate_tearoff_of_call_test: CompileTimeError
+issue31596_super_test/01: CompileTimeError
+issue31596_super_test/03: CompileTimeError
+method_override7_test/00: MissingCompileTimeError
+method_override7_test/01: MissingCompileTimeError
+method_override7_test/02: MissingCompileTimeError
+method_override8_test/00: MissingCompileTimeError
+method_override8_test/01: MissingCompileTimeError
+method_override_test: CompileTimeError
+mixin_illegal_super_use_test/01: MissingCompileTimeError
+mixin_illegal_super_use_test/04: MissingCompileTimeError
+mixin_illegal_super_use_test/07: MissingCompileTimeError
+mixin_illegal_super_use_test/10: MissingCompileTimeError
+mixin_illegal_super_use_test/11: MissingCompileTimeError
+mixin_illegal_superclass_test/01: MissingCompileTimeError
+mixin_illegal_superclass_test/02: MissingCompileTimeError
+mixin_illegal_superclass_test/03: MissingCompileTimeError
+mixin_illegal_superclass_test/04: MissingCompileTimeError
+mixin_illegal_superclass_test/05: MissingCompileTimeError
+mixin_illegal_superclass_test/06: MissingCompileTimeError
+mixin_illegal_superclass_test/07: MissingCompileTimeError
+mixin_illegal_superclass_test/08: MissingCompileTimeError
+mixin_illegal_superclass_test/09: MissingCompileTimeError
+mixin_illegal_superclass_test/10: MissingCompileTimeError
+mixin_illegal_superclass_test/11: MissingCompileTimeError
+mixin_illegal_superclass_test/12: MissingCompileTimeError
+mixin_illegal_superclass_test/13: MissingCompileTimeError
+mixin_illegal_superclass_test/14: MissingCompileTimeError
+mixin_illegal_superclass_test/15: MissingCompileTimeError
+mixin_illegal_superclass_test/16: MissingCompileTimeError
+mixin_illegal_superclass_test/17: MissingCompileTimeError
+mixin_illegal_superclass_test/18: MissingCompileTimeError
+mixin_illegal_superclass_test/19: MissingCompileTimeError
+mixin_illegal_superclass_test/20: MissingCompileTimeError
+mixin_illegal_superclass_test/21: MissingCompileTimeError
+mixin_illegal_superclass_test/22: MissingCompileTimeError
+mixin_illegal_superclass_test/23: MissingCompileTimeError
+mixin_illegal_superclass_test/24: MissingCompileTimeError
+mixin_illegal_superclass_test/25: MissingCompileTimeError
+mixin_illegal_superclass_test/26: MissingCompileTimeError
+mixin_illegal_superclass_test/27: MissingCompileTimeError
+mixin_illegal_superclass_test/28: MissingCompileTimeError
+mixin_illegal_superclass_test/29: MissingCompileTimeError
+mixin_illegal_superclass_test/30: MissingCompileTimeError
+multiline_newline_test/04: MissingCompileTimeError
+multiline_newline_test/04r: MissingCompileTimeError
+multiline_newline_test/05: MissingCompileTimeError
+multiline_newline_test/05r: MissingCompileTimeError
+multiline_newline_test/06: MissingCompileTimeError
+multiline_newline_test/06r: MissingCompileTimeError
+null_no_such_method_test: CompileTimeError
+override_field_method1_negative_test: Fail
+override_field_method2_negative_test: Fail
+override_field_method4_negative_test: Fail
+override_field_method5_negative_test: Fail
+override_field_test/01: MissingCompileTimeError
+override_inheritance_field_test/04: CompileTimeError
+override_inheritance_field_test/06: CompileTimeError
+override_inheritance_field_test/26: CompileTimeError
+override_inheritance_field_test/29: CompileTimeError
+override_inheritance_generic_test/02: CompileTimeError
+override_inheritance_method_test/28: CompileTimeError
+override_inheritance_method_test/29: CompileTimeError
+override_inheritance_mixed_test/01: MissingCompileTimeError
+override_inheritance_mixed_test/02: MissingCompileTimeError
+override_inheritance_mixed_test/03: MissingCompileTimeError
+override_inheritance_mixed_test/04: MissingCompileTimeError
+override_inheritance_mixed_test/08: MissingCompileTimeError
+override_method_with_field_test/01: MissingCompileTimeError
+parser_quirks_test: CompileTimeError
+regress_23089_test: Crash
+regress_23408_test: CompileTimeError
+regress_29025_test: CompileTimeError
+regress_29405_test: CompileTimeError
+regress_30339_test: CompileTimeError
+setter_no_getter_test/01: CompileTimeError
+setter_override_test/00: MissingCompileTimeError
+setter_override_test/03: MissingCompileTimeError
+string_interpolate_test: CompileTimeError
+string_split_test: CompileTimeError
+string_supertype_checked_test: CompileTimeError
+super_bound_closure_test/none: CompileTimeError
+super_call4_test: CompileTimeError
+super_getter_setter_test: CompileTimeError
+super_no_such_method1_test: CompileTimeError
+super_no_such_method2_test: CompileTimeError
+super_no_such_method3_test: CompileTimeError
+super_no_such_method4_test: CompileTimeError
+super_no_such_method5_test: CompileTimeError
+super_operator_index5_test: CompileTimeError
+super_operator_index6_test: CompileTimeError
+super_operator_index7_test: CompileTimeError
+super_operator_index8_test: CompileTimeError
+switch4_negative_test: Crash
+try_catch_test/01: MissingCompileTimeError
+type_promotion_functions_test/02: CompileTimeError
+type_promotion_functions_test/03: CompileTimeError
+type_promotion_functions_test/04: CompileTimeError
+type_promotion_functions_test/09: CompileTimeError
+type_promotion_functions_test/11: CompileTimeError
+type_promotion_functions_test/12: CompileTimeError
+type_promotion_functions_test/13: CompileTimeError
+type_promotion_functions_test/14: CompileTimeError
+type_promotion_functions_test/none: CompileTimeError
+type_promotion_more_specific_test/04: CompileTimeError
 
 [ $compiler == fasta && !$strong ]
 invalid_override_in_mixin_test/01: MissingCompileTimeError
+map_literal1_test/01: MissingCompileTimeError
 
 [ $runtime == vm && $fasta ]
 implicit_creation/implicit_new_or_const_composite_test: RuntimeError
@@ -1183,6 +1376,8 @@
 [ $fasta && !$strong ]
 abstract_beats_arguments_test: MissingCompileTimeError
 abstract_exact_selector_test/01: MissingCompileTimeError
+abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError
+additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
 argument_assignability_function_typed_test/01: MissingCompileTimeError
 argument_assignability_function_typed_test/02: MissingCompileTimeError
 assertion_initializer_const_function_test/01: MissingCompileTimeError
@@ -1199,12 +1394,21 @@
 assign_top_method_test: MissingCompileTimeError
 async_await_syntax_test/a10a: MissingCompileTimeError
 async_await_syntax_test/b10a: MissingCompileTimeError
+async_await_syntax_test/c10a: MissingCompileTimeError
+async_await_syntax_test/d08b: MissingCompileTimeError
+async_await_syntax_test/d10a: MissingCompileTimeError
 async_congruence_local_test/01: MissingCompileTimeError
 async_congruence_local_test/02: MissingCompileTimeError
 async_congruence_method_test/01: MissingCompileTimeError
 async_congruence_unnamed_test/01: MissingCompileTimeError
 async_congruence_unnamed_test/02: MissingCompileTimeError
 async_return_types_test/wrongTypeParameter: MissingCompileTimeError
+bad_named_parameters2_test/01: MissingCompileTimeError
+bad_named_parameters_test/01: MissingCompileTimeError
+bad_named_parameters_test/02: MissingCompileTimeError
+bad_named_parameters_test/03: MissingCompileTimeError
+bad_named_parameters_test/04: MissingCompileTimeError
+bad_named_parameters_test/05: MissingCompileTimeError
 bad_override_test/03: MissingCompileTimeError
 bad_override_test/04: MissingCompileTimeError
 bad_override_test/05: MissingCompileTimeError
@@ -1213,6 +1417,12 @@
 call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
 call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
 call_constructor_on_unresolvable_class_test/03: MissingCompileTimeError
+call_method_must_not_be_field_test/01: MissingCompileTimeError
+call_method_must_not_be_field_test/02: MissingCompileTimeError
+call_method_must_not_be_getter_test/01: MissingCompileTimeError
+call_method_must_not_be_getter_test/02: MissingCompileTimeError
+call_method_override_test/01: MissingCompileTimeError
+call_method_override_test/02: MissingCompileTimeError
 call_nonexistent_constructor_test/01: MissingCompileTimeError
 call_nonexistent_constructor_test/02: MissingCompileTimeError
 call_nonexistent_static_test/01: MissingCompileTimeError
@@ -1309,6 +1519,9 @@
 const_constructor2_test/16: MissingCompileTimeError
 const_constructor2_test/17: MissingCompileTimeError
 const_constructor2_test/18: MissingCompileTimeError
+const_constructor2_test/20: MissingCompileTimeError
+const_constructor2_test/22: MissingCompileTimeError
+const_constructor2_test/24: MissingCompileTimeError
 const_constructor3_test/02: MissingCompileTimeError
 const_constructor3_test/04: MissingCompileTimeError
 const_error_multiply_initialized_test/01: MissingCompileTimeError
@@ -1327,6 +1540,8 @@
 const_types_test/05: MissingCompileTimeError
 const_types_test/06: MissingCompileTimeError
 const_types_test/13: MissingCompileTimeError
+const_types_test/35: MissingCompileTimeError
+const_types_test/40: MissingCompileTimeError
 constants_test/05: MissingCompileTimeError
 constructor13_test/01: MissingCompileTimeError
 constructor13_test/02: MissingCompileTimeError
@@ -1389,6 +1604,8 @@
 fauxverride_test/03: MissingCompileTimeError
 fauxverride_test/05: MissingCompileTimeError
 field_initialization_order_test/01: MissingCompileTimeError
+field_method4_test: MissingCompileTimeError
+field_override2_test: MissingCompileTimeError
 field_override3_test/00: MissingCompileTimeError
 field_override3_test/01: MissingCompileTimeError
 field_override3_test/02: MissingCompileTimeError
@@ -1489,6 +1706,7 @@
 instance_call_wrong_argument_count_negative_test: Fail
 instance_method2_negative_test: Fail
 instance_method_negative_test: Fail
+instantiate_type_variable_test/01: MissingCompileTimeError
 interface_static_non_final_fields_negative_test: Fail
 interface_test/00: MissingCompileTimeError
 invalid_cast_test/01: MissingCompileTimeError
@@ -1545,6 +1763,8 @@
 local_function2_test/01: MissingCompileTimeError
 local_function2_test/02: MissingCompileTimeError
 local_function3_test/01: MissingCompileTimeError
+local_function_test/01: MissingCompileTimeError
+local_function_test/02: MissingCompileTimeError
 local_function_test/03: MissingCompileTimeError
 local_function_test/04: MissingCompileTimeError
 logical_expression3_test: MissingCompileTimeError
@@ -1653,6 +1873,17 @@
 mixin_illegal_superclass_test/29: MissingCompileTimeError
 mixin_illegal_superclass_test/30: MissingCompileTimeError
 mixin_illegal_syntax_test/13: MissingCompileTimeError
+mixin_type_parameter_inference_error_test/01: MissingCompileTimeError
+mixin_type_parameter_inference_error_test/02: MissingCompileTimeError
+mixin_type_parameter_inference_previous_mixin_test/03: MissingCompileTimeError
+mixin_type_parameter_inference_previous_mixin_test/04: MissingCompileTimeError
+mixin_type_parameter_inference_test/04: MissingCompileTimeError
+mixin_type_parameter_inference_test/05: MissingCompileTimeError
+mixin_type_parameter_inference_test/06: MissingCompileTimeError
+mixin_type_parameter_inference_test/07: MissingCompileTimeError
+mixin_type_parameter_inference_test/11: MissingCompileTimeError
+mixin_type_parameter_inference_test/14: MissingCompileTimeError
+mixin_type_parameter_inference_test/15: MissingCompileTimeError
 mixin_with_two_implicit_constructors_test: MissingCompileTimeError
 multiline_newline_test/04: MissingCompileTimeError
 multiline_newline_test/04r: MissingCompileTimeError
@@ -1666,10 +1897,15 @@
 named_parameters4_test: MissingCompileTimeError
 named_parameters_aggregated_test/05: MissingCompileTimeError
 named_parameters_test/01: MissingCompileTimeError
+named_parameters_test/02: MissingCompileTimeError
 named_parameters_test/03: MissingCompileTimeError
+named_parameters_test/04: MissingCompileTimeError
 named_parameters_test/05: MissingCompileTimeError
+named_parameters_test/06: MissingCompileTimeError
 named_parameters_test/07: MissingCompileTimeError
+named_parameters_test/08: MissingCompileTimeError
 named_parameters_test/09: MissingCompileTimeError
+named_parameters_test/10: MissingCompileTimeError
 named_parameters_type_test/01: MissingCompileTimeError
 named_parameters_type_test/02: MissingCompileTimeError
 named_parameters_type_test/03: MissingCompileTimeError
@@ -1690,9 +1926,13 @@
 object_has_no_call_method_test/05: MissingCompileTimeError
 object_has_no_call_method_test/08: MissingCompileTimeError
 optional_named_parameters_test/01: MissingCompileTimeError
+optional_named_parameters_test/02: MissingCompileTimeError
 optional_named_parameters_test/03: MissingCompileTimeError
+optional_named_parameters_test/04: MissingCompileTimeError
 optional_named_parameters_test/05: MissingCompileTimeError
+optional_named_parameters_test/06: MissingCompileTimeError
 optional_named_parameters_test/07: MissingCompileTimeError
+optional_named_parameters_test/08: MissingCompileTimeError
 optional_named_parameters_test/09: MissingCompileTimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
@@ -1742,6 +1982,8 @@
 override_method_with_field_test/01: MissingCompileTimeError
 override_method_with_field_test/02: MissingCompileTimeError
 part2_test/01: MissingCompileTimeError
+partial_tearoff_instantiation_test/01: MissingCompileTimeError
+partial_tearoff_instantiation_test/03: MissingCompileTimeError
 positional_parameters_type_test/01: MissingCompileTimeError
 positional_parameters_type_test/02: MissingCompileTimeError
 prefix10_negative_test: Fail
@@ -1786,6 +2028,7 @@
 regress_28217_test/none: MissingCompileTimeError
 return_type_test: MissingCompileTimeError
 rewrite_implicit_this_test/01: MissingCompileTimeError
+setter_no_getter_call_test/01: MissingCompileTimeError
 setter_override_test/00: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
 static_call_wrong_argument_count_negative_test: Fail
@@ -1945,4 +2188,5 @@
 [ $compiler == dartk || $compiler == dartkp ]
 generic_function_bounds_test: RuntimeError # Issue 32076
 generic_test/01: MissingCompileTimeError
+implicit_creation/implicit_const_not_default_values_test/e.*: MissingCompileTimeError
 
diff --git a/tests/language_2/language_2_precompiled.status b/tests/language_2/language_2_precompiled.status
index 0144b00..731b81f 100644
--- a/tests/language_2/language_2_precompiled.status
+++ b/tests/language_2/language_2_precompiled.status
@@ -98,6 +98,7 @@
 call_method_as_cast_test/03: RuntimeError
 call_method_as_cast_test/04: RuntimeError
 call_method_as_cast_test/05: RuntimeError
+call_method_implicit_tear_off_assignable_test: RuntimeError
 call_method_implicit_tear_off_implements_function_test/01: RuntimeError
 call_method_implicit_tear_off_implements_function_test/02: RuntimeError
 call_method_implicit_tear_off_implements_function_test/03: RuntimeError
diff --git a/tests/language_2/language_2_vm.status b/tests/language_2/language_2_vm.status
index e24a1d3..cf89bec 100644
--- a/tests/language_2/language_2_vm.status
+++ b/tests/language_2/language_2_vm.status
@@ -188,6 +188,7 @@
 call_method_as_cast_test/03: RuntimeError
 call_method_as_cast_test/04: RuntimeError
 call_method_as_cast_test/05: RuntimeError
+call_method_implicit_tear_off_assignable_test: RuntimeError
 call_method_implicit_tear_off_implements_function_test/01: RuntimeError
 call_method_implicit_tear_off_implements_function_test/02: RuntimeError
 call_method_implicit_tear_off_implements_function_test/03: RuntimeError
@@ -1328,6 +1329,8 @@
 generic_methods_generic_function_parameter_test: Pass # Issue 25869
 generic_methods_new_test: Pass # Issue 25869
 generic_methods_test: Pass # Issue 25869
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError
 nsm5_test: MissingCompileTimeError
 override_inheritance_no_such_method_test/05: MissingCompileTimeError
 
@@ -1345,4 +1348,5 @@
 invalid_type_argument_count_test/02: MissingCompileTimeError # Error only in strong mode
 invalid_type_argument_count_test/03: MissingCompileTimeError # Error only in strong mode
 invalid_type_argument_count_test/04: MissingCompileTimeError # Error only in strong mode
-partial_tearoff_instantiation_test/none: CompiletimeError
+partial_tearoff_instantiation_test/none: CompileTimeError
+
diff --git a/tests/language_2/redirecting_factory_reflection_test.dart b/tests/language_2/redirecting_factory_reflection_test.dart
index af39373..b1ae524 100644
--- a/tests/language_2/redirecting_factory_reflection_test.dart
+++ b/tests/language_2/redirecting_factory_reflection_test.dart
@@ -17,6 +17,6 @@
 
 main() {
   ClassMirror m = reflectClass(A);
-  var i = m.newInstance(const Symbol(''), []).reflectee;
+  var i = m.newInstance(Symbol.empty, []).reflectee;
   Expect.equals(i.t.toString(), 'A');
 }
diff --git a/tests/language_2/regress_28255_test.dart b/tests/language_2/regress_28255_test.dart
index 0441e8b..b127045 100644
--- a/tests/language_2/regress_28255_test.dart
+++ b/tests/language_2/regress_28255_test.dart
@@ -19,5 +19,5 @@
 }
 
 main() {
-  reflectClass(Class).newInstance(const Symbol(''), []).reflectee.foo();
+  reflectClass(Class).newInstance(Symbol.empty, []).reflectee.foo();
 }
diff --git a/tests/language_2/regress_32425_test.dart b/tests/language_2/regress_32425_test.dart
new file mode 100644
index 0000000..fe19937
--- /dev/null
+++ b/tests/language_2/regress_32425_test.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class A<T> {}
+
+final map = {};
+
+class B<T> {
+  void foo() {
+    Expect.equals(map[new A<T>().runtimeType], 42);
+  }
+}
+
+class C<T, U> {
+  void build() {
+    new B<T>().foo();
+    new B<U>().foo();
+    Expect.equals(new B<T>().runtimeType, new B<U>().runtimeType);
+  }
+}
+
+void main() {
+  map[new A<String>().runtimeType] = 42;
+  new C<String, String>().build();
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 68dbb6d..e1326f2 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -14,9 +14,6 @@
 [ $compiler == dart2analyzer ]
 *: Skip
 
-[ $compiler != dart2analyzer ]
-async/stream_controller_async_test: StaticWarning
-
 [ $compiler == dart2js ]
 async/schedule_microtask6_test: RuntimeError # global error handling is not supported. Issue 5958
 convert/base64_test/01: Fail, OK # Uses bit-wise operations to detect invalid values. Some large invalid values accepted by dart2js.
@@ -162,9 +159,6 @@
 
 [ $fasta ]
 convert/base64_test/01: CompileTimeError
-convert/utf82_test: CompileTimeError
-js/datetime_roundtrip_test: CompileTimeError
-js/null_test: CompileTimeError
 math/double_pow_test: CompileTimeError
 mirrors/metadata_allowed_values_test/13: MissingCompileTimeError
 mirrors/metadata_allowed_values_test/14: MissingCompileTimeError
@@ -182,10 +176,6 @@
 [ $strong ]
 *: SkipByDesign # tests/lib_2 has the strong mode versions of these tests.
 
-[ !$strong ]
-async/stream_first_where_test: RuntimeError
-async/stream_last_where_test: RuntimeError
-
 [ $arch == ia32 && $mode == debug && $system == windows ]
 convert/streamed_conversion_json_utf8_decode_test: Skip # Verification OOM.
 
@@ -273,6 +263,9 @@
 mirrors/syntax_error_test/01: Pass # expects failure, but it fails for the wrong reason
 mirrors/variable_is_const_test/01: Pass # expects failure, but it fails for the wrong reason
 
+[ $compiler == dart2js && $fasta ]
+mirrors/*: SkipByDesign # mirrors not supported
+
 [ $compiler == dart2js && $host_checked ]
 mirrors/metadata_allowed_values_test/28: Crash # Issue 25911
 mirrors/metadata_allowed_values_test/29: Crash # Issue 25911
@@ -290,6 +283,11 @@
 math/math2_test: RuntimeError
 math/math_test: RuntimeError
 
+[ $compiler != dart2js && $fasta ]
+convert/utf82_test: CompileTimeError # Note: dart2js passes for the wrong reason, it hasn't switched to run in 64-bits
+js/datetime_roundtrip_test: CompileTimeError
+js/null_test: CompileTimeError
+
 [ $compiler != dartk && $compiler != dartkp && ($runtime == dart_precompiled || $runtime == flutter || $runtime == vm) ]
 mirrors/initializing_formals_test/01: Fail # initializing formals are implicitly final as of Dart 1.21
 
@@ -308,6 +306,10 @@
 async/catch_errors11_test: Pass, Timeout # Issue 22696
 async/timer_isActive_test: Fail, Pass, Timeout # Issue 22696
 
+[ $runtime != none && !$strong ]
+async/stream_first_where_test: RuntimeError
+async/stream_last_where_test: RuntimeError
+
 [ $runtime == vm && $system == fuchsia ]
 async/first_regression_test: RuntimeError # These use package:unittest
 async/future_timeout_test: RuntimeError # These use package:unittest
@@ -377,11 +379,6 @@
 mirrors/native_class_test: Fail, OK # This test is meant to run in a browser.
 typed_data/int32x4_bigint_test: CompileTimeError # Large integer literal
 
-[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm || $compiler == dart2js && $fasta ]
-convert/base64_test/01: CompileTimeError # Large integer literal
-convert/utf82_test: CompileTimeError # Large integer literal
-math/double_pow_test: CompileTimeError # Large integer literal
-
 [ $hot_reload || $hot_reload_rollback ]
 async/stream_transformer_test: Pass, Fail # Closure identity
 mirrors/fake_function_with_call_test: SkipByDesign # Method equality
diff --git a/tests/lib_2/lib_2.status b/tests/lib_2/lib_2.status
index 6560052..fbcb2db 100644
--- a/tests/lib_2/lib_2.status
+++ b/tests/lib_2/lib_2.status
@@ -75,7 +75,6 @@
 html/xhr_test/json: Fail # IE10 returns string, not JSON object
 
 [ $runtime == safari ]
-async/periodic_timer3_test: Pass, RuntimeError # Flaky. Issue 32094
 convert/json_test: Fail # https://bugs.webkit.org/show_bug.cgi?id=134920
 html/audiobuffersourcenode_test/functional: RuntimeError
 html/canvasrenderingcontext2d_test/drawImage_video_element: Fail # Safari does not support drawImage w/ video element
@@ -106,6 +105,11 @@
 typed_data/float32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
 typed_data/int32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
 
+[ $browser ]
+async/periodic_timer2_test: Pass, RuntimeError # Flaky. Issue 32094
+async/periodic_timer3_test: Pass, RuntimeError # Flaky. Issue 32094
+async/periodic_timer4_test: Pass, RuntimeError # Flaky. Issue 32094
+
 [ $csp ]
 isolate/browser/package_resolve_browser_hook_test: SkipByDesign # Test written in a way that violates CSP.
 isolate/deferred_in_isolate2_test: Skip # Issue 16898. Deferred loading does not work from an isolate in CSP-mode
@@ -189,7 +193,6 @@
 html/webgl_1_test: Pass, Fail # Issue 8219
 
 [ $runtime == chrome || $runtime == ff ]
-async/periodic_timer4_test: Pass, RuntimeError # Flaky. Issue 32094
 async/slow_consumer2_test: SkipSlow # Times out. Issue 22050
 async/stream_timeout_test: SkipSlow # Times out. Issue 22050
 
diff --git a/tests/lib_2/lib_2_analyzer.status b/tests/lib_2/lib_2_analyzer.status
index 6a8da17..8c96e84 100644
--- a/tests/lib_2/lib_2_analyzer.status
+++ b/tests/lib_2/lib_2_analyzer.status
@@ -9,7 +9,6 @@
 mirrors/deferred_mirrors_metadata_test: Fail # Issue 17522
 mirrors/deferred_type_test: StaticWarning, OK # Deliberately refers to a deferred type in a declaration.
 mirrors/generic_f_bounded_mixin_application_test: StaticWarning # Test Issue
-mirrors/metadata_nested_constructor_call_test/none: CompileTimeError
 mirrors/mirrors_nsm_mismatch_test: StaticWarning, OK
 mirrors/mirrors_nsm_test: StaticWarning, OK
 mirrors/mirrors_nsm_test/dart2js: StaticWarning, OK
@@ -17,6 +16,9 @@
 mirrors/redirecting_factory_test/none: StaticWarning # test issue X, The return type 'Class<T2, T1>' of the redirected constructor is not assignable to 'Class<T1, T2>
 mirrors/repeated_private_anon_mixin_app_test: StaticWarning, OK # Intentional library name conflict.
 
+[ $compiler == dart2analyzer && !$preview_dart_2 ]
+mirrors/metadata_nested_constructor_call_test/none: CompileTimeError
+
 [ $compiler == dart2analyzer && $strong ]
 html/transferables_test: CompileTimeError # Issue 30975
 mirrors/deferred_mirrors_metadata_test: StaticWarning # Issue 28969
diff --git a/tests/lib_2/lib_2_dart2js.status b/tests/lib_2/lib_2_dart2js.status
index c83f291..6b692c6 100644
--- a/tests/lib_2/lib_2_dart2js.status
+++ b/tests/lib_2/lib_2_dart2js.status
@@ -3,7 +3,6 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dart2js ]
-async/future_or_bad_type_test: MissingCompileTimeError
 async/future_or_strong_test: RuntimeError
 convert/base64_test/01: Fail, OK # Uses bit-wise operations to detect invalid values. Some large invalid values accepted by dart2js.
 convert/chunked_conversion_utf88_test: Slow, Pass
@@ -337,7 +336,33 @@
 mirrors/regress_16321_test/01: Pass # expects failure, but if fails for the wrong reason
 
 [ $compiler == dart2js && $fasta ]
-async/zone_run_unary_test: Crash
+html/custom/mirrors_2_test: RuntimeError
+html/custom/mirrors_test: RuntimeError
+html/indexeddb_1_test/functional: RuntimeError
+html/indexeddb_3_test: RuntimeError
+html/indexeddb_5_test: RuntimeError
+html/js_typed_interop_default_arg_test/explicit_argument: RuntimeError
+html/js_typed_interop_test: RuntimeError
+isolate/browser/compute_this_script_browser_test: RuntimeError # mirrors not supported
+isolate/browser/typed_data_message_test: RuntimeError # mirrors not supported
+isolate/compile_time_error_test/01: Crash
+isolate/count_test: RuntimeError # mirrors not supported
+isolate/cross_isolate_message_test: RuntimeError # mirrors not supported
+isolate/illegal_msg_mirror_test: RuntimeError # mirrors not supported
+isolate/mandel_isolate_test: RuntimeError # mirrors not supported
+isolate/message2_test: RuntimeError # mirrors not supported
+isolate/message_test: RuntimeError # mirrors not supported
+isolate/mint_maker_test: RuntimeError # mirrors not supported
+isolate/nested_spawn2_test: RuntimeError # mirrors not supported
+isolate/nested_spawn_test: RuntimeError # mirrors not supported
+isolate/raw_port_test: RuntimeError # mirrors not supported
+isolate/remote_unittest_helper: RuntimeError # mirrors not supported
+isolate/request_reply_test: RuntimeError # mirrors not supported
+isolate/spawn_function_custom_class_test: RuntimeError # mirrors not supported
+isolate/spawn_function_test: RuntimeError # mirrors not supported
+isolate/stacktrace_message_test: RuntimeError # mirrors not supported
+isolate/static_function_test: RuntimeError # mirrors not supported
+isolate/unresolved_ports_test: RuntimeError # mirrors not supported
 
 [ $compiler == dart2js && $fasta && $host_checked ]
 html/async_spawnuri_test: Crash # 'file:*/pkg/compiler/lib/src/common_elements.dart': Failed assertion: line 405 pos 12: 'element.name == '=='': is not true.
@@ -750,6 +775,9 @@
 html/window_mangling_test: RuntimeError
 html/window_nosuchmethod_test: RuntimeError
 
+[ $compiler == dart2js && !$fasta ]
+async/future_or_bad_type_test: MissingCompileTimeError
+
 [ $compiler == dart2js && $jscl ]
 isolate/spawn_uri_test: SkipByDesign # Loading another file is not supported in JS shell
 
diff --git a/tests/lib_2/lib_2_kernel.status b/tests/lib_2/lib_2_kernel.status
index 883580c..7cace3c 100644
--- a/tests/lib_2/lib_2_kernel.status
+++ b/tests/lib_2/lib_2_kernel.status
@@ -10,6 +10,11 @@
 # missing a section you need, please reach out to sigmund@ to see the best way
 # to add them.
 
+[ $compiler == fasta ]
+html/*: Skip # TODO(ahe): Make dart:html available.
+isolate/browser/*: Skip # TODO(ahe): Make dart:html available.
+js/*: Skip # TODO(ahe): Make dart:js available.
+
 [ $fasta ]
 isolate/compile_time_error_test/01: MissingCompileTimeError
 mirrors/generic_bounded_by_type_parameter_test/02: MissingCompileTimeError
@@ -39,6 +44,12 @@
 mirrors/invocation_fuzz_test/smi: Crash, RuntimeError, Fail, Pass # Crashes on opt counter builder (#31838)
 mirrors/invocation_fuzz_test/string: Pass, Crash, RuntimeError # Flaky on vm-kernel-optcounter-threshold-linux-release-x64, bug #31838
 
+[ $compiler != dart2js && $fasta && !$strong ]
+isolate/browser/compute_this_script_browser_test: CompileTimeError
+isolate/browser/package_resolve_browser_hook2_test: CompileTimeError
+isolate/browser/package_resolve_browser_hook_test: CompileTimeError
+isolate/browser/package_resolve_browser_test: CompileTimeError
+
 [ $compiler == dartk && $mode == debug && $runtime == vm && $strong ]
 isolate/isolate_complex_messages_test: Crash
 mirrors/library_exports_shown_test: Crash # 31916
@@ -317,14 +328,26 @@
 [ $compiler == dartkp && !$strong ]
 *: SkipByDesign
 
+[ $compiler == fasta && $strong ]
+isolate/isolate_stress_test: CompileTimeError
+mirrors/deferred_type_test: CompileTimeError
+mirrors/library_imports_bad_metadata_test/01: Crash
+mirrors/metadata_allowed_values_test/02: MissingCompileTimeError
+mirrors/metadata_allowed_values_test/27: MissingCompileTimeError
+mirrors/metadata_constructor_arguments_test/04: MissingCompileTimeError
+mirrors/mirrors_nsm_mismatch_test: CompileTimeError
+mirrors/mirrors_nsm_test/dart2js: CompileTimeError
+mirrors/mirrors_nsm_test/none: CompileTimeError
+mirrors/native_class_test: CompileTimeError
+mirrors/redirecting_factory_different_type_test/01: MissingCompileTimeError
+mirrors/redirecting_factory_different_type_test/02: MissingCompileTimeError
+mirrors/relation_subclass_test: CompileTimeError
+
 [ $fasta && $strong ]
 mirrors/top_level_accessors_test/01: MissingCompileTimeError
 
 [ $fasta && !$strong ]
-isolate/browser/compute_this_script_browser_test: CompileTimeError
-isolate/browser/package_resolve_browser_hook2_test: CompileTimeError
-isolate/browser/package_resolve_browser_hook_test: CompileTimeError
-isolate/browser/package_resolve_browser_test: CompileTimeError
+isolate/isolate_import_test/01: MissingCompileTimeError
 isolate/isolate_stress_test: CompileTimeError
 mirrors/library_imports_bad_metadata_test/01: Crash
 mirrors/metadata_allowed_values_test/02: MissingCompileTimeError
@@ -335,8 +358,13 @@
 mirrors/reflect_class_test/01: MissingCompileTimeError
 mirrors/reflect_class_test/02: MissingCompileTimeError
 mirrors/regress_16321_test/01: MissingCompileTimeError
+mirrors/top_level_accessors_test/01: MissingCompileTimeError
+typed_data/float32x4_static_test: MissingCompileTimeError
+typed_data/int32x4_static_test/01: MissingCompileTimeError
+typed_data/int32x4_static_test/02: MissingCompileTimeError
 
-[ $compiler == dartk || $compiler == dartkp || $compiler == fasta ]
-html/*: CompileTimeError # TODO(ahe): Make dart:html available.
-js/*: CompileTimeError # TODO(ahe): Make dart:js available.
+[ $compiler == dartk || $compiler == dartkp ]
+html/*: SkipByDesign
+isolate/browser/*: SkipByDesign
+js/*: SkipByDesign
 
diff --git a/tests/lib_2/mirrors/constructor_optional_args_test.dart b/tests/lib_2/mirrors/constructor_optional_args_test.dart
index 22a9acb..94f84f7 100644
--- a/tests/lib_2/mirrors/constructor_optional_args_test.dart
+++ b/tests/lib_2/mirrors/constructor_optional_args_test.dart
@@ -39,9 +39,9 @@
 
   ClassMirror cm = reflectClass(A);
 
-  var v1 = cm.newInstance(const Symbol(''), []).reflectee;
-  var v2 = cm.newInstance(const Symbol(''), [1]).reflectee;
-  var v3 = cm.newInstance(const Symbol(''), [2, 3]).reflectee;
+  var v1 = cm.newInstance(Symbol.empty, []).reflectee;
+  var v2 = cm.newInstance(Symbol.empty, [1]).reflectee;
+  var v3 = cm.newInstance(Symbol.empty, [2, 3]).reflectee;
 
   Expect.equals('B(x=x, y=y, z=null)', '$v1', 'unnamed 1');
   Expect.equals('B(x=1, y=y, z=null)', '$v2', 'unnamed 2');
diff --git a/tests/lib_2/mirrors/deferred_mirrors_metatarget_lib.dart b/tests/lib_2/mirrors/deferred_mirrors_metatarget_lib.dart
index 1c2ec2f..a5f49e2 100644
--- a/tests/lib_2/mirrors/deferred_mirrors_metatarget_lib.dart
+++ b/tests/lib_2/mirrors/deferred_mirrors_metatarget_lib.dart
@@ -18,5 +18,5 @@
 
 String foo() {
   ClassMirror a = currentMirrorSystem().findLibrary(#lib).declarations[#A];
-  return a.newInstance(const Symbol(""), []).invoke(#toString, []).reflectee;
+  return a.newInstance(Symbol.empty, []).invoke(#toString, []).reflectee;
 }
diff --git a/tests/lib_2/mirrors/invoke_named_test.dart b/tests/lib_2/mirrors/invoke_named_test.dart
index 242d064..1cc4806 100644
--- a/tests/lib_2/mirrors/invoke_named_test.dart
+++ b/tests/lib_2/mirrors/invoke_named_test.dart
@@ -122,21 +122,19 @@
   ClassMirror cm = reflectClass(E);
   InstanceMirror result;
 
-  result = cm.newInstance(const Symbol(''), ['X']);
+  result = cm.newInstance(Symbol.empty, ['X']);
   Expect.equals('X-B-null', result.reflectee.field);
-  result = cm.newInstance(const Symbol(''), ['X'], {const Symbol('b'): 'Y'});
+  result = cm.newInstance(Symbol.empty, ['X'], {const Symbol('b'): 'Y'});
   Expect.equals('X-Y-null', result.reflectee.field);
-  result = cm.newInstance(const Symbol(''), ['X'],
-      {const Symbol('c'): 'Z', const Symbol('b'): 'Y'});
+  result = cm.newInstance(
+      Symbol.empty, ['X'], {const Symbol('c'): 'Z', const Symbol('b'): 'Y'});
   Expect.equals('X-Y-Z', result.reflectee.field);
-  Expect.throwsNoSuchMethodError(() => cm.newInstance(const Symbol(''), []),
+  Expect.throwsNoSuchMethodError(() => cm.newInstance(Symbol.empty, []),
       'Insufficient positional arguments');
-  Expect.throwsNoSuchMethodError(
-      () => cm.newInstance(const Symbol(''), ['X', 'Y']),
+  Expect.throwsNoSuchMethodError(() => cm.newInstance(Symbol.empty, ['X', 'Y']),
       'Extra positional arguments');
   Expect.throwsNoSuchMethodError(
-      () =>
-          cm.newInstance(const Symbol(''), ['X'], {const Symbol('undef'): 'Y'}),
+      () => cm.newInstance(Symbol.empty, ['X'], {const Symbol('undef'): 'Y'}),
       'Unmatched named argument');
 
   result = cm.newInstance(const Symbol('b'), []);
diff --git a/tests/lib_2/mirrors/invoke_test.dart b/tests/lib_2/mirrors/invoke_test.dart
index b0b6117..a8be6e5 100644
--- a/tests/lib_2/mirrors/invoke_test.dart
+++ b/tests/lib_2/mirrors/invoke_test.dart
@@ -97,7 +97,7 @@
       () => cm.setField(const Symbol('doesntExist'), 'sbar'), 'Not defined');
 
   // ClassMirror invokeConstructor
-  result = cm.newInstance(const Symbol(''), []);
+  result = cm.newInstance(Symbol.empty, []);
   Expect.isTrue(result.reflectee is C);
   Expect.equals('default', result.reflectee.field);
   result = cm.newInstance(const Symbol('named'), ['my value']);
@@ -123,8 +123,8 @@
   Expect.equals('lget a priori', result.reflectee);
   result = lm.getField(const Symbol('libraryField'));
   Expect.equals('a priori', result.reflectee);
-  Expect.throwsNoSuchMethodError(() => lm.getField(const Symbol('doesntExist')),
-      'Not defined');
+  Expect.throwsNoSuchMethodError(
+      () => lm.getField(const Symbol('doesntExist')), 'Not defined');
 
   // LibraryMirror invokeSetter
   result = lm.setField(const Symbol('librarySetter'), 'lfoo');
diff --git a/tests/lib_2/mirrors/list_constructor_test.dart b/tests/lib_2/mirrors/list_constructor_test.dart
index ea78dbb..16f3c45 100644
--- a/tests/lib_2/mirrors/list_constructor_test.dart
+++ b/tests/lib_2/mirrors/list_constructor_test.dart
@@ -8,9 +8,9 @@
 
 main() {
   var cls = reflectClass(List);
-  Expect.throwsArgumentError(() => cls.newInstance(const Symbol(''), [null]));
+  Expect.throwsArgumentError(() => cls.newInstance(Symbol.empty, [null]));
 
-  var list = cls.newInstance(const Symbol(''), [42]).reflectee;
+  var list = cls.newInstance(Symbol.empty, [42]).reflectee;
   // Check that the list is fixed.
   Expect.equals(42, list.length);
   Expect.throwsUnsupportedError(() => list.add(2));
@@ -22,7 +22,7 @@
 
 testGrowableList() {
   var cls = reflectClass(List);
-  var list = cls.newInstance(const Symbol(''), []).reflectee;
+  var list = cls.newInstance(Symbol.empty, []).reflectee;
   // Check that the list is growable.
   Expect.equals(0, list.length);
   list.add(42);
diff --git a/tests/lib_2/mirrors/mirrors_resolve_fields_test.dart b/tests/lib_2/mirrors/mirrors_resolve_fields_test.dart
index e24d356..3725aa2 100644
--- a/tests/lib_2/mirrors/mirrors_resolve_fields_test.dart
+++ b/tests/lib_2/mirrors/mirrors_resolve_fields_test.dart
@@ -21,6 +21,6 @@
 main() {
   var mirrors = currentMirrorSystem();
   var classMirror = reflectClass(A);
-  var instanceMirror = classMirror.newInstance(const Symbol(''), []);
+  var instanceMirror = classMirror.newInstance(Symbol.empty, []);
   Expect.equals(A._STATE_INITIAL, instanceMirror.reflectee._state);
 }
diff --git a/tests/lib_2/mirrors/mirrors_test.dart b/tests/lib_2/mirrors/mirrors_test.dart
index 44f1467..378074f 100644
--- a/tests/lib_2/mirrors/mirrors_test.dart
+++ b/tests/lib_2/mirrors/mirrors_test.dart
@@ -119,7 +119,7 @@
 testInvokeConstructor(mirrors) {
   var classMirror = reflectClass(Class);
 
-  var instanceMirror = classMirror.newInstance(const Symbol(''), []);
+  var instanceMirror = classMirror.newInstance(Symbol.empty, []);
   expect(instanceMirror.reflectee is Class, equals(true));
   expect(instanceMirror.reflectee.field, equals("default value"));
 
@@ -149,7 +149,7 @@
   expect(classMirror is ClassMirror, equals(true));
   var symbolClassMirror = reflectClass(Symbol);
   var symbolMirror =
-      symbolClassMirror.newInstance(const Symbol(''), ['withInitialValue']);
+      symbolClassMirror.newInstance(Symbol.empty, ['withInitialValue']);
   var objectMirror = classMirror.newInstance(symbolMirror.reflectee, [1234]);
   expect(objectMirror.reflectee is Class, equals(true));
   expect(objectMirror.reflectee.field, equals(1234));
diff --git a/tests/lib_2/mirrors/new_instance_with_type_arguments_test.dart b/tests/lib_2/mirrors/new_instance_with_type_arguments_test.dart
index aa7df8a..5d227de 100644
--- a/tests/lib_2/mirrors/new_instance_with_type_arguments_test.dart
+++ b/tests/lib_2/mirrors/new_instance_with_type_arguments_test.dart
@@ -38,11 +38,10 @@
   Expect.equals(String, c_string.s);
   Expect.equals(dynamic, c_dynamic.s);
 
-  var reflective_a_int =
-      cmB.superclass.newInstance(const Symbol(''), []).reflectee;
-  var reflective_a_dynamic = cmA.newInstance(const Symbol(''), []).reflectee;
-  var reflective_b = cmB.newInstance(const Symbol(''), []).reflectee;
-  var reflective_c_dynamic = cmC.newInstance(const Symbol(''), []).reflectee;
+  var reflective_a_int = cmB.superclass.newInstance(Symbol.empty, []).reflectee;
+  var reflective_a_dynamic = cmA.newInstance(Symbol.empty, []).reflectee;
+  var reflective_b = cmB.newInstance(Symbol.empty, []).reflectee;
+  var reflective_c_dynamic = cmC.newInstance(Symbol.empty, []).reflectee;
 
   Expect.equals(int, reflective_a_int.t);
   Expect.equals(dynamic, reflective_a_dynamic.t);
diff --git a/tests/lib_2/mirrors/redirecting_factory_different_type_test.dart b/tests/lib_2/mirrors/redirecting_factory_different_type_test.dart
index 527765b..3c5b8ba 100644
--- a/tests/lib_2/mirrors/redirecting_factory_different_type_test.dart
+++ b/tests/lib_2/mirrors/redirecting_factory_different_type_test.dart
@@ -14,7 +14,7 @@
     String //# 01: compile-time error
     var    //# 02: compile-time error
     int    //# none: ok
-      x) = B; 
+      x) = B;
   A._();
 }
 
@@ -28,7 +28,7 @@
 main() {
   var cm = reflectClass(A);
   // The type-annotation in A's constructor must be ignored.
-  var b = cm.newInstance(const Symbol(''), [499]).reflectee;
+  var b = cm.newInstance(Symbol.empty, [499]).reflectee;
   Expect.equals(499, b.x);
-  Expect.throws(() => cm.newInstance(const Symbol(''), ["str"]), (e) => e is TypeError); 
+  Expect.throwsTypeError(() => cm.newInstance(Symbol.empty, ["str"]));
 }
diff --git a/tests/lib_2/mirrors/redirecting_factory_test.dart b/tests/lib_2/mirrors/redirecting_factory_test.dart
index 8a93d6b..78e7fe5 100644
--- a/tests/lib_2/mirrors/redirecting_factory_test.dart
+++ b/tests/lib_2/mirrors/redirecting_factory_test.dart
@@ -41,8 +41,8 @@
   factory Class.redirectingFactoryStringIntTypeParameters(a, b) =
       Class<String, int>.factoryNoOptional;
 
-  factory Class.redirectingFactoryStringTypeParameters(a, b) = Class
-        <String> // //# 02: static type warning
+  factory Class.redirectingFactoryStringTypeParameters(a, b) = Class //
+      <String> //# 02: static type warning
       .factoryNoOptional;
 
   factory Class.redirectingFactoryTypeParameters(a, b) =
@@ -55,7 +55,7 @@
 main() {
   var classMirror = reflectClass(Class);
 
-  var instanceMirror = classMirror.newInstance(const Symbol(''), [2]);
+  var instanceMirror = classMirror.newInstance(Symbol.empty, [2]);
   Expect.equals(2, instanceMirror.reflectee.field);
 
   instanceMirror =
diff --git a/tests/lib_2/mirrors/reflected_type_generics_test.dart b/tests/lib_2/mirrors/reflected_type_generics_test.dart
index e26a6a0..7557e8f 100644
--- a/tests/lib_2/mirrors/reflected_type_generics_test.dart
+++ b/tests/lib_2/mirrors/reflected_type_generics_test.dart
@@ -95,6 +95,6 @@
 
   // Instantiation of a generic class preserves type information:
   ClassMirror m = reflectType(A, [P]) as ClassMirror;
-  var instance = m.newInstance(const Symbol(""), []).reflectee;
+  var instance = m.newInstance(Symbol.empty, []).reflectee;
   Expect.equals(new A<P>().runtimeType, instance.runtimeType);
 }
diff --git a/tests/lib_2/mirrors/reflectively_instantiate_uninstantiated_class_test.dart b/tests/lib_2/mirrors/reflectively_instantiate_uninstantiated_class_test.dart
index b19bfc2..6282bda 100644
--- a/tests/lib_2/mirrors/reflectively_instantiate_uninstantiated_class_test.dart
+++ b/tests/lib_2/mirrors/reflectively_instantiate_uninstantiated_class_test.dart
@@ -14,7 +14,7 @@
 main() {
   // Do NOT instantiate Foo.
   var m = reflectClass(Foo);
-  var instance = m.newInstance(const Symbol(''), []);
+  var instance = m.newInstance(Symbol.empty, []);
   print(instance);
   bool threw = false;
   try {
diff --git a/tests/lib_2/mirrors/syntax_error_test.dart b/tests/lib_2/mirrors/syntax_error_test.dart
index 96d912e..686e06e 100644
--- a/tests/lib_2/mirrors/syntax_error_test.dart
+++ b/tests/lib_2/mirrors/syntax_error_test.dart
@@ -25,5 +25,5 @@
 
 main() {
   reflectClass(A).metadata;
-  reflectClass(B).newInstance(const Symbol(''), []);
+  reflectClass(B).newInstance(Symbol.empty, []);
 }
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 3f6fc2e..15e2c69 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -29,6 +29,19 @@
 [ $compiler == dartk && $strong ]
 *: SkipByDesign
 
+[ $compiler == fasta && $strong ]
+io/directory_invalid_arguments_test: CompileTimeError
+io/io_override_test: CompileTimeError
+io/process_invalid_arguments_test: CompileTimeError
+io/raw_secure_server_socket_argument_test: CompileTimeError
+io/raw_secure_server_socket_test: CompileTimeError
+io/secure_socket_bad_data_test: CompileTimeError
+io/security_context_argument_test: CompileTimeError
+io/stdout_bad_argument_test: CompileTimeError
+no_assert_test: CompileTimeError
+priority_queue_stress_test: CompileTimeError
+verbose_gc_to_bmu_test: CompileTimeError
+
 [ $compiler != fasta && $compiler != none && $runtime != dart_precompiled && $runtime != vm ]
 no_assert_test: Fail, OK # This is testing a vm flag.
 
diff --git a/tests/standalone_2/standalone_2.status b/tests/standalone_2/standalone_2.status
index 0f8a69a..5e56ee3 100644
--- a/tests/standalone_2/standalone_2.status
+++ b/tests/standalone_2/standalone_2.status
@@ -62,9 +62,6 @@
 io/wait_for_event_zone_test: SkipByDesign # Uses mirrors.
 io/wait_for_test: SkipByDesign # Uses mirrors.
 
-[ $runtime == none ]
-io/process_exit_negative_test: Fail, OK # Must be run to exit with non-zero exit code.
-
 [ !$strong ]
 float_array_static_test: MissingCompileTimeError
 
@@ -72,7 +69,7 @@
 io/*: Skip # Issue 30618
 
 # All static_tests have expected compile-time errors.
-[ $compiler != dart2analyzer && $compiler != dartdevc && $compiler != dartk && $compiler != dartkp && $strong ]
+[ $compiler != dart2analyzer && $compiler != dartdevc && $compiler != dartk && $compiler != dartkp && $runtime != none && $strong ]
 float_array_static_test: MissingCompileTimeError
 
 [ $compiler == none && $runtime == vm && $system == fuchsia ]
@@ -88,6 +85,9 @@
 [ $mode == release && $runtime == vm && $system == macos ]
 io/named_pipe_script_test: Pass, RuntimeError # Issue 28737
 
+[ $runtime == none && !$strong ]
+io/process_exit_negative_test: Fail, OK # Must be run to exit with non-zero exit code.
+
 [ $system == linux && ($runtime == flutter || $runtime == vm) ]
 io/http_basic_test: Pass, Slow, Timeout # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
 io/http_launch_test: Pass, Slow, Timeout # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index f830f84..50ce4be 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -16,7 +16,6 @@
 package/package_isolate_test: Crash
 package/package_test: CompileTimeError
 package/scenarios/invalid/same_package_twice_test: CompileTimeError
-regress_29350_test/none: MissingCompileTimeError
 
 [ $arch != simarm && $arch != simarm64 && $arch != simdbc64 && $fasta ]
 package/scenarios/invalid/invalid_utf8_test: CompileTimeError # Issue 32085
@@ -53,7 +52,7 @@
 io/wait_for_event_isolate_test: Skip # Issues 32137 and 32138.
 
 [ $compiler == dartk && $system == windows && $strong ]
-io/compile_all_test: Pass,Fail # Possibly related to issue 32373
+io/compile_all_test: Pass, Fail # Possibly related to issue 32373
 io/file_stream_test: RuntimeError # Issue 31904
 io/platform_test: RuntimeError # Issue 31904
 io/process_non_ascii_test: RuntimeError # Issue 31904
@@ -91,6 +90,9 @@
 io/socket_port_test: Pass, Crash
 
 # ===== dartkp + dart_precompiled status lines =====
+[ $compiler == dartkp && $runtime == dart_precompiled && $system != windows && $strong ]
+io/namespace_test: RuntimeError
+
 [ $compiler == dartkp && $runtime == dart_precompiled && $strong ]
 dwarf_stack_trace_test: RuntimeError
 io/compile_all_test: RuntimeError # Issue 32338
@@ -107,7 +109,6 @@
 io/http_server_close_response_after_error_test: Skip # Flaky.
 io/http_shutdown_test: Skip # Flaky.
 io/https_client_certificate_test: Crash
-io/namespace_test: RuntimeError
 io/platform_test: Crash
 io/raw_datagram_socket_test: Skip # Flaky.
 io/raw_secure_server_closing_test: Skip # Flaky
@@ -129,3 +130,17 @@
 [ $compiler == dartkp && !$strong ]
 *: SkipByDesign
 
+[ $compiler == fasta && $strong ]
+io/dependency_graph_test: CompileTimeError
+io/http_cookie_date_test: CompileTimeError
+io/http_headers_test: CompileTimeError
+io/http_parser_test: CompileTimeError
+io/secure_socket_argument_test: CompileTimeError
+io/skipping_dart2js_compilations_test: CompileTimeError
+io/test_harness_analyzer_test: CompileTimeError
+io/test_runner_test: CompileTimeError
+io/web_socket_protocol_processor_test: CompileTimeError
+
+[ $fasta && !$strong ]
+regress_29350_test/none: MissingCompileTimeError
+
diff --git a/tools/VERSION b/tools/VERSION
index 4e562be..c64c59a 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 0
 PATCH 0
-PRERELEASE 33
+PRERELEASE 34
 PRERELEASE_PATCH 0
diff --git a/tools/bots/dart2js_d8_hostchecked_tests.isolate b/tools/bots/dart2js_d8_hostchecked_tests.isolate
index 5b5db4d..23c2346 100644
--- a/tools/bots/dart2js_d8_hostchecked_tests.isolate
+++ b/tools/bots/dart2js_d8_hostchecked_tests.isolate
@@ -2,9 +2,17 @@
   'variables': {
     'files': [
               'out/ReleaseIA32/dart',
+              'out/ReleaseIA32/dart2js_platform.dill',
+              'out/ReleaseIA32/dart2js_platform_strong.dill',
               'out/ReleaseX64/dart',
+              'out/ReleaseX64/dart2js_platform.dill',
+              'out/ReleaseX64/dart2js_platform_strong.dill',
               'xcodebuild/ReleaseIA32/dart',
+              'xcodebuild/ReleaseIA32/dart2js_platform.dill',
+              'xcodebuild/ReleaseIA32/dart2js_platform_strong.dill',
               'xcodebuild/ReleaseX64/dart',
+              'xcodebuild/ReleaseX64/dart2js_platform.dill',
+              'xcodebuild/ReleaseX64/dart2js_platform_strong.dill',
               'samples/',
               'samples-dev/',
               'tools/',
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index a8e1db2..09eac986 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -1463,6 +1463,15 @@
           ]
         },
         {
+          "name": "analyze tests preview-dart2",
+          "arguments": [
+            "--compiler=dart2analyzer",
+            "--host-checked",
+            "--strong",
+            "--preview-dart-2"
+          ]
+        },
+        {
           "name": "analyzer unit tests",
           "arguments": [
             "--checked",
@@ -1556,6 +1565,15 @@
             "--strong",
             "pkg"
           ]
+        },
+        {
+          "name": "analyze tests preview-dart2",
+          "arguments": [
+            "--compiler=dart2analyzer",
+            "--strong",
+            "--use-sdk",
+            "--preview-dart-2"
+          ]
         }
       ]
     },
diff --git a/tools/dartk_wrappers/dartk b/tools/dartk_wrappers/dartk
deleted file mode 100755
index 2df29ff..0000000
--- a/tools/dartk_wrappers/dartk
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
-PROG_NAME="$BASH_SOURCE"
-WRAPPERS_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
-DART_ROOT="$(cd "${WRAPPERS_DIR}/../.." ; pwd -P)"
-DARTK="$DART_ROOT/pkg/kernel/tool/dartk.dart"
-
-if [[ `uname` == 'Darwin' ]];
-then
-  DART="$DART_ROOT/tools/sdks/mac/dart-sdk/bin/dart"
-else
-  DART="$DART_ROOT/tools/sdks/linux/dart-sdk/bin/dart"
-fi
-
-exec "$DART" "$DARTK" "$@"
diff --git a/tools/dartk_wrappers/dartk.bat b/tools/dartk_wrappers/dartk.bat
deleted file mode 100644
index de31ec1..0000000
--- a/tools/dartk_wrappers/dartk.bat
+++ /dev/null
@@ -1,20 +0,0 @@
-@echo off
-REM Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-REM for details. All rights reserved. Use of this source code is governed by a
-REM BSD-style license that can be found in the LICENSE file. 
-
-set SCRIPTPATH=%~dp0
-
-REM Does the path have a trailing slash? If so, remove it.
-if %SCRIPTPATH:~-1%== set SCRIPTPATH=%SCRIPTPATH:~0,-1%
-
-set DART_ROOT=%SCRIPTPATH%..\..\
-
-rem Remove trailing backslash if there is one
-if %DART_ROOT:~-1%==\ set DART_ROOT=%DART_ROOT:~0,-1%
-
-set DARTK=%DART_ROOT%\pkg\kernel\tool\dartk.dart
-
-set DART=%DART_ROOT%\tools\sdks\win\dart-sdk\bin\dart
-
-"%DART%" --packages=.packages "%DARTK%" %*
diff --git a/tools/infra/config/cq.cfg b/tools/infra/config/cq.cfg
index 4fd651a..f68e8ca 100644
--- a/tools/infra/config/cq.cfg
+++ b/tools/infra/config/cq.cfg
@@ -33,10 +33,7 @@
       builders { name: "dart-sdk-windows-try"}
       builders { name: "vm-kernel-mac-release-x64-try"}
       builders { name: "benchmark-linux-try"}
-      builders {
-        name: "front-end-linux-release-x64-try"
-        experiment_percentage: 100
-      }
+      builders { name: "front-end-linux-release-x64-try"}
     }
     try_job_retry_config {
       try_job_retry_quota: 0
diff --git a/tools/testing/dart/environment.dart b/tools/testing/dart/environment.dart
index 47abfea..1e4114e 100644
--- a/tools/testing/dart/environment.dart
+++ b/tools/testing/dart/environment.dart
@@ -32,6 +32,7 @@
   "jscl": new _Variable.bool((c) => c.runtime.isJSCommandLine),
   "minified": new _Variable.bool((c) => c.isMinified),
   "mode": new _Variable((c) => c.mode.name, Mode.names),
+  "preview_dart_2": new _Variable.bool((c) => c.previewDart2),
   "runtime": new _Variable(_runtimeName, Runtime.names),
   "spec_parser": new _Variable.bool((c) => c.compiler == Compiler.specParser),
   "strong": new _Variable.bool((c) => c.isStrong),