diff --git a/BUILD.gn b/BUILD.gn
index 3f93c69..b2dc62f 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -49,6 +49,10 @@
 }
 
 group("runtime_kernel") {
+  import("runtime/runtime_args.gni")
+
+  target_supports_aot = dart_target_arch == "arm" || dart_target_arch == "arm64" || dart_target_arch == "x64"
+
   if (targetting_fuchsia) {
     # Fuchsia has run_vm_tests marked testonly.
     testonly = true
@@ -61,6 +65,10 @@
     "utils/kernel-service:copy_kernel_service_snapshot",
     "utils/kernel-service:kernel-service",
   ]
+
+  if (target_supports_aot) {
+    deps += ["runtime/bin:precompiler_entry_points_json"]
+  }
 }
 
 group("runtime_precompiled") {
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d07d323..ba4829f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -90,7 +90,8 @@
         `whereType`.
       * `Iterable.singleWhere` added `orElse` parameter.
       * `List` added `+` operator, `first` and `last` setters, and `indexWhere`
-        and `lastIndexWhere` methods.
+        and `lastIndexWhere` methods, and static `copyRange` and `writeIterable`
+        methods.
       * `Map` added `fromEntries` constructor.
       * `Map` added `addEntries`, `cast`, `entries`, `map`, `removeWhere`,
         `retype`, `update` and `updateAll` members.
diff --git a/docs/language/informal/mixin-inference.md b/docs/language/informal/mixin-inference.md
new file mode 100644
index 0000000..5972c27
--- /dev/null
+++ b/docs/language/informal/mixin-inference.md
@@ -0,0 +1,330 @@
+# Dart 2.X super mixin inference proposal
+
+leafp@google.com
+
+Status: Draft
+
+This is intended to define a prototype approach to supporting inference of type
+arguments in super-mixin applications.  This is not an official part of Dart
+2, but is an experimental feature hidden under flags.  When super-mixins are
+specified and landed, this feature or some variant of it may be included.
+
+## Syntactic conventions
+
+The meta-variables `X`, `Y`, and `Z` range over type variables.
+
+The meta-variables `T`, and `U` range over types.
+
+The meta-variables `M`, `I`, and `S` range over interface types (that is,
+classes instantiated with zero or more type arguments).
+
+The meta-variable `C` ranges over classes.
+
+The meta-variable `B` ranges over types used as bounds for type variables.
+
+Throughout this document, I assume that bound type variables have been suitably
+renamed to avoid accidental capture.
+
+## Mixin inference
+
+In Dart 2 syntax, a class definition may also have an interpretation as mixin
+under certain restrictions defined elsewhere.
+
+### Mixins and superclass constraints
+
+Given a class of the form:
+
+```
+class C<X0, ..., Xn> extends S with M0, ..., Mj implements I0, ..., Ik { ...}
+```
+
+we say that the superclass of `C<X0, ..., Xn>` is `S with M0, ..., Mj`.
+
+When interpreted as a mixin, we say that the super class constraints for `C<X0,
+..., Xn>` are `S`, `M0`, ..., `Mj`.
+
+Given a mixin application class of the form:
+
+```
+class C<X0, ..., Xn> =  S with M0, ..., Mj implements I0, ..., Ik;
+```
+
+for we say that the superclass of `C<X0, ..., Xn>` is `S with M0, ..., Mj-1`.
+
+When interpreted as a mixin, we say that the super class constraints for `C<X0,
+..., Xn>` are `S`, `M0`, ..., `Mj-1`.
+
+#### Discussion
+
+A class, interpreted as a mixin, is interpreted as a function from its
+superclass to its own type.  That is, the actual class onto which the mixin is
+applied must be a subtype of the superclass constraint.  When the superclass is
+itself a mixin, we interpret each component of the mixin as a separate
+constraint, each of which the actual class onto which the mixin is applied must
+be a subtype of.
+
+### Mixin type inference
+
+Given a class of the form:
+
+```
+class C<T0, ..., Tn> extends S with M0, ..., Mj implements I0, ..., Ik { ...}
+```
+
+or of the form
+
+```
+class C<T0, ..., Tn> =  S with M0, ..., Mj implements I0, ..., Ik;
+```
+
+we say that the superclass of `M0` is `S`, the superclass of `M1` is `S with
+M0`, etc.
+
+For a class with one or more mixins of either of the forms above we allow any
+or all of the `M0`, ..., `Mj` to have their type arguments inferred.  That is,
+if any of the `M0`, ..., `Mj` are references to generic classes with no type
+arguments provided, the missing type arguments will be attempted to be
+reconstructed in accordance with this specification.
+
+Type inference for a class is done from the innermost mixin application out.
+That is, the type arguments for `M0` (if any) are inferred before type arguments
+for `M1`, and so on. Each successive inference is done with respect to the
+inferred version of its superclass: so if type arguments `T0, ..., Tn` are
+inferred for `M0`, `M1` is inferred with respect to `M0<T0, ..., Tn`>, etc.
+
+Type inference for the class hierarchy is done from top down.  That is, in the
+example classes above, all mixin inference for the definitions of `S`, the `Mi`,
+and the `Ii` is done before mixin inference for `C` is done.
+
+Let be `M` be a mixin applied to a superclass `S` where `M` is a reference to a
+generic class with no type arguments provided, and `S` is some class (possibly
+generic); and where `M` is defined with type parameters `X0, ..., Xj`.  Let `S0,
+..., Sn` be the superclass constraints for `M` as defined above.  Note that the
+`Xi` may appear free in the `Si`.  Let `C0, ..., Cn` be the corresponding
+classes for the `Si`: that is, each `Si` is of the form `Ci<T0, ..., Tk>` for
+some `k >= 0`.  Note that by assumption, the `Xi` are disjoint from any type
+parameters in the enclosing scope, since we have assumed that type variables are
+suitably renamed to avoid capture.
+
+For each `Si`, find the unique `Ui` in the super-interface graph of `S` such
+that the class of `Ui` is `Ci`.  Note that if there is not such a `Ui`, then
+there is no instantiation of `M` that will allow its superclass constraint to be
+satisfied, and if there is such a `Ui` but it is not unique, then the superclass
+hierarchy is ill-formed.  In either case it is an error.
+
+Let *SLN* be the smallest set of pairs of type variables and types `(Z0, T0),
+..., (Zl, Tl)` with type variables drawn from `X0, ..., Xj` such that `{T0/Z0,
+..., Tl/Zl}Si == Ui`.  That is, replacing each free type variable in the `Si`
+with its corresponding type in *SLN* makes `Si` and `Ui` the same.  If no such
+set exists, then it is an error.  Note that for well-formed programs, the only
+free type variables in the `Ti` must by definition be drawn from the type
+parameters to the enclosing class of the mixin application. Hence it follows
+both that the `Ti` are well-formed types in the scope of the mixin application,
+and that the the `Xi` do not occur free in the `Ti` since we have assumed that
+classes are suitably renamed to avoid capture.
+
+Let `[X0 extends B0, ..., Xj extends Bj]` be a set of type variable bounds such
+that if `(Xi, Ti)` is in *SLN* then `Bi` is `Ti` and otherwise `Bi` is the
+declared bound for `Xi` in the definition of `M`.
+
+Let `[X0 -> T0', ..., Xj -> Tj']` be the default bounds for this set of type
+variable bounds as defined in the "instantiate to bounds" specification.
+
+The inferred type arguments for `M` are then `<T0', ..., Ti'>`.
+
+It is an error if the inferred type arguments are not a valid instantiation of
+`M` (that is, if they do not satisfy the bounds of `M`).
+
+#### Discussion
+
+For each superclass constraint, there must be a matching interface in the
+super-interface hierarchy of the actual superclass.  So for each superclass
+constraint of the form `I0<U0, ..., Uk>` there must be some `I0<U0', ..., Uk'>`
+in the super-interface hierarchy of the actual superclass `S` (if not, there is
+an error in the super class hierarchy, or in the mixin application).  Note that
+the `Ui` may have free occurrences of the type variables for which we are
+solving, but the `Ui'` may not.  A simple equality traversal comparing `Ui` and
+`Ui'` will find all of the type variables which must be equated in order to make
+the two interfaces equal.  Once a type variable is solved via such a traversal,
+subsequent occurrences must be constrained to an equal type, otherwise there is
+no solution.  Type variables which do not appear in any of the superclass
+constraints are not constrained by the mixin application.  Some or all of the
+type variables may be unconstrained in this manner.  We choose a solution for
+these type variables using the instantiate to bounds algorithm.  We construct a
+synthetic set of bounds using the chosen constraints for the constrained
+variables, and use instantiate to bounds to produce the remaining results.
+Since instantiate to bounds may produce a super-bounded type, we must check that
+the result satisfies the bounds (or else define a version of instantiate to
+bounds which issues an error rather than approximates).
+
+Note that we do not take into account information from later mixins when solving
+the constraints: nor from implemented interfaces.  The approach specified here
+may therefore fail to find valid instantiations.  We may consider relaxing this
+in the future.  Note however that fully using information from other positions
+will result in equality constraint queries in which type variables being solved
+for appear on both sides of the query, hence leading to a full unification
+problem.
+
+The approach specified here is a simplification of the subtype matching
+algorithm used in expression level type inference.  In the case that there is no
+solution to the declarative specification above, subtype matching may still find
+a solution which does not satisfy the property that no generic interface may
+occur twice in the class hierarchy with different type arguments.  A valid
+implementation of the approach specified here should be to run the subtype
+matching algorithm, and then to subsequently check that no generic interface has
+been introduced at incompatible type.
+
+## Tests and illustrative examples.
+
+Some examples illustrating key points.
+
+### Inference proceeds outward
+
+```
+class I<X> {}
+
+class M0<T> extends I<T> {}
+
+class M1<T> extends I<T> {}
+
+// M1 is inferred as M1<int>
+class A extends M0<int> with M1 {}
+```
+
+```
+class I<X> {}
+
+class M0<T> extends I<T> {}
+
+class M1<T> extends I<T> {}
+
+class M2<T> extends I<T> {}
+
+// M1 is inferred as M1<int>
+// M2 is inferred as M1<int>
+class A extends M0<int> with M1, M2 {}
+```
+
+```
+class I<X> {}
+
+class M0<T> extends Object implements I<T> {}
+
+class M1<T> extends I<T> {}
+
+// M0 is inferred as M0<dynamic>
+// Error since class hierarchy is inconsistent
+class A extends Object with M0, M1<int> {}
+```
+
+```
+class I<X> {}
+
+class M0<T> extends Object implements I<T> {}
+
+class M1<T> extends I<T> {}
+
+// M0 is inferred as M0<dynamic> (unconstrained)
+// M1 is inferred as M1<dynamic> (constrained by inferred argument to M0)
+// Error since class hierarchy is inconsistent
+class A extends Object with M0, M1 implements I<int> {}
+```
+
+### Multiple superclass constraints
+```
+class I<X> {}
+
+class J<X> {}
+
+class M0<X, Y> extends I<X> with J<Y> {}
+
+class M1 implements I<int> {}
+class M2 extends M1 implements J<double> {}
+
+// M0 is inferred as M0<int, double>
+class A extends M2 with M0 {}
+```
+
+### Instantiate to bounds
+```
+class I<X> {}
+
+class M0<X, Y extends String> extends I<X> {}
+
+class M1 implements I<int> {}
+
+// M0 is inferred as M0<int, String>
+class A extends M1 with M0 {}
+```
+
+```
+class I<X> {}
+
+class M0<X, Y extends X> extends I<X> {}
+
+class M1 implements I<int> {}
+
+// M0 is inferred as M0<int, int>
+class A extends M1 with M0 {}
+```
+
+```
+class I<X> {}
+
+class M0<X, Y extends Comparable<Y>> extends I<X> {}
+
+class M1 implements I<int> {}
+
+// M0 is inferred as M0<int, Comparable<dynamic>>
+// Error since super-bounded type not allowed
+class A extends M1 with M0 {}
+```
+
+### Non-trivial constraints
+
+```
+class I<X> {}
+
+class M0<T> extends I<List<T>> {}
+
+class M1<T> extends I<List<T>> {}
+
+class M2<T> extends M1<Map<T, T>> {}
+
+// M0 is inferred as M0<Map<int, int>>
+class A extends M2<int> with M0 {}
+```
+
+### Unification
+These examples are not inferred given the strategy in this proposal, and suggest
+some tricky cases to consider if we consider a broader approach.
+
+
+```
+class I<X, Y> {}
+
+class M0<T> implements I<T, int> {}
+
+class M1<T> implements I<String, T> {}
+
+// M0 inferred as M0<String>
+// M1 inferred as M1<int>
+class A extends Object with M0, M1 {}
+```
+
+
+```
+class I<X, Y> {}
+
+class M0<T> implements I<T, List<T>> {}
+
+class M1<T> implements I<List<T>, T> {}
+
+// No solution, even with unification, since solution
+// requires that I<List<U0>, U0> == I<U1, List<U1>>
+// for some U0, U1, and hence that:
+// U0 = List<U1>
+// U1 = List<U0>
+// which has no finite solution
+class A extends Object with M0, M1 {}
+```
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index cf6afc5..06a8bf7 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -109,7 +109,7 @@
 <body>
 <h1>Analysis Server API Specification</h1>
 <h1 style="color:#999999">Version
-  1.18.6
+  1.18.7
 </h1>
 <p>
   This document contains a specification of the API provided by the
@@ -3116,12 +3116,33 @@
         <p>
           The one-based index of the column containing the declaration name.
         </p>
+      </dd><dt class="field"><b>codeOffset: int</b></dt><dd>
+        
+        <p>
+          The offset of the first character of the declaration code in the file.
+        </p>
+      </dd><dt class="field"><b>codeLength: int</b></dt><dd>
+        
+        <p>
+          The length of the declaration code in the file.
+        </p>
       </dd><dt class="field"><b>className: String<span style="color:#999999"> (optional)</span></b></dt><dd>
         
         <p>
           The name of the class enclosing this declaration. If the declaration
           is not a class member, this field will be absent.
         </p>
+      </dd><dt class="field"><b>parameters: String<span style="color:#999999"> (optional)</span></b></dt><dd>
+        
+        <p>
+          The parameter list for the element. If the element is not a method or
+          function this field will not be defined. If the element doesn't have
+          parameters (e.g. getter), this field will not be defined. If the
+          element has zero parameters, this field will have a value of "()".
+
+          The value should not be treated as exact presentation of parameters,
+          it is just approximation of parameters to give the user general idea.
+        </p>
       </dd></dl></dd><dt class="typeDefinition"><a name="type_ElementKind">ElementKind: String</a></dt><dd>
     <p>
       An enumeration of the kinds of elements.
diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart b/pkg/analysis_server/lib/protocol/protocol_constants.dart
index e061b39b..d9cad4b 100644
--- a/pkg/analysis_server/lib/protocol/protocol_constants.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_constants.dart
@@ -236,6 +236,8 @@
 const String SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS_PATTERN = 'pattern';
 const String SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS =
     'search.getElementDeclarations';
+const String SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS_MAX_RESULTS = 'maxResults';
+const String SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS_PATTERN = 'pattern';
 const String SEARCH_REQUEST_GET_TYPE_HIERARCHY = 'search.getTypeHierarchy';
 const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_FILE = 'file';
 const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_OFFSET = 'offset';
diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart b/pkg/analysis_server/lib/protocol/protocol_generated.dart
index 3c54e20..3616da5 100644
--- a/pkg/analysis_server/lib/protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_generated.dart
@@ -8733,7 +8733,10 @@
  *   "offset": int
  *   "line": int
  *   "column": int
+ *   "codeOffset": int
+ *   "codeLength": int
  *   "className": optional String
+ *   "parameters": optional String
  * }
  *
  * Clients may not extend, implement or mix-in this class.
@@ -8751,8 +8754,14 @@
 
   int _column;
 
+  int _codeOffset;
+
+  int _codeLength;
+
   String _className;
 
+  String _parameters;
+
   /**
    * The name of the declaration.
    */
@@ -8832,6 +8841,32 @@
   }
 
   /**
+   * The offset of the first character of the declaration code in the file.
+   */
+  int get codeOffset => _codeOffset;
+
+  /**
+   * The offset of the first character of the declaration code in the file.
+   */
+  void set codeOffset(int value) {
+    assert(value != null);
+    this._codeOffset = value;
+  }
+
+  /**
+   * The length of the declaration code in the file.
+   */
+  int get codeLength => _codeLength;
+
+  /**
+   * The length of the declaration code in the file.
+   */
+  void set codeLength(int value) {
+    assert(value != null);
+    this._codeLength = value;
+  }
+
+  /**
    * The name of the class enclosing this declaration. If the declaration is
    * not a class member, this field will be absent.
    */
@@ -8845,16 +8880,41 @@
     this._className = value;
   }
 
+  /**
+   * The parameter list for the element. If the element is not a method or
+   * function this field will not be defined. If the element doesn't have
+   * parameters (e.g. getter), this field will not be defined. If the element
+   * has zero parameters, this field will have a value of "()". The value
+   * should not be treated as exact presentation of parameters, it is just
+   * approximation of parameters to give the user general idea.
+   */
+  String get parameters => _parameters;
+
+  /**
+   * The parameter list for the element. If the element is not a method or
+   * function this field will not be defined. If the element doesn't have
+   * parameters (e.g. getter), this field will not be defined. If the element
+   * has zero parameters, this field will have a value of "()". The value
+   * should not be treated as exact presentation of parameters, it is just
+   * approximation of parameters to give the user general idea.
+   */
+  void set parameters(String value) {
+    this._parameters = value;
+  }
+
   ElementDeclaration(String name, ElementKind kind, int fileIndex, int offset,
-      int line, int column,
-      {String className}) {
+      int line, int column, int codeOffset, int codeLength,
+      {String className, String parameters}) {
     this.name = name;
     this.kind = kind;
     this.fileIndex = fileIndex;
     this.offset = offset;
     this.line = line;
     this.column = column;
+    this.codeOffset = codeOffset;
+    this.codeLength = codeLength;
     this.className = className;
+    this.parameters = parameters;
   }
 
   factory ElementDeclaration.fromJson(
@@ -8901,13 +8961,33 @@
       } else {
         throw jsonDecoder.mismatch(jsonPath, "column");
       }
+      int codeOffset;
+      if (json.containsKey("codeOffset")) {
+        codeOffset =
+            jsonDecoder.decodeInt(jsonPath + ".codeOffset", json["codeOffset"]);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, "codeOffset");
+      }
+      int codeLength;
+      if (json.containsKey("codeLength")) {
+        codeLength =
+            jsonDecoder.decodeInt(jsonPath + ".codeLength", json["codeLength"]);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, "codeLength");
+      }
       String className;
       if (json.containsKey("className")) {
         className = jsonDecoder.decodeString(
             jsonPath + ".className", json["className"]);
       }
-      return new ElementDeclaration(name, kind, fileIndex, offset, line, column,
-          className: className);
+      String parameters;
+      if (json.containsKey("parameters")) {
+        parameters = jsonDecoder.decodeString(
+            jsonPath + ".parameters", json["parameters"]);
+      }
+      return new ElementDeclaration(
+          name, kind, fileIndex, offset, line, column, codeOffset, codeLength,
+          className: className, parameters: parameters);
     } else {
       throw jsonDecoder.mismatch(jsonPath, "ElementDeclaration", json);
     }
@@ -8922,9 +9002,14 @@
     result["offset"] = offset;
     result["line"] = line;
     result["column"] = column;
+    result["codeOffset"] = codeOffset;
+    result["codeLength"] = codeLength;
     if (className != null) {
       result["className"] = className;
     }
+    if (parameters != null) {
+      result["parameters"] = parameters;
+    }
     return result;
   }
 
@@ -8940,7 +9025,10 @@
           offset == other.offset &&
           line == other.line &&
           column == other.column &&
-          className == other.className;
+          codeOffset == other.codeOffset &&
+          codeLength == other.codeLength &&
+          className == other.className &&
+          parameters == other.parameters;
     }
     return false;
   }
@@ -8954,7 +9042,10 @@
     hash = JenkinsSmiHash.combine(hash, offset.hashCode);
     hash = JenkinsSmiHash.combine(hash, line.hashCode);
     hash = JenkinsSmiHash.combine(hash, column.hashCode);
+    hash = JenkinsSmiHash.combine(hash, codeOffset.hashCode);
+    hash = JenkinsSmiHash.combine(hash, codeLength.hashCode);
     hash = JenkinsSmiHash.combine(hash, className.hashCode);
+    hash = JenkinsSmiHash.combine(hash, parameters.hashCode);
     return JenkinsSmiHash.finish(hash);
   }
 }
@@ -15301,28 +15392,114 @@
 /**
  * search.getElementDeclarations params
  *
+ * {
+ *   "pattern": optional String
+ *   "maxResults": optional int
+ * }
+ *
  * Clients may not extend, implement or mix-in this class.
  */
 class SearchGetElementDeclarationsParams implements RequestParams {
+  String _pattern;
+
+  int _maxResults;
+
+  /**
+   * The regular expression used to match the names of declarations. If this
+   * field is missing, return all declarations.
+   */
+  String get pattern => _pattern;
+
+  /**
+   * The regular expression used to match the names of declarations. If this
+   * field is missing, return all declarations.
+   */
+  void set pattern(String value) {
+    this._pattern = value;
+  }
+
+  /**
+   * The maximum number of declarations to return. If this field is missing,
+   * return all matching declarations.
+   */
+  int get maxResults => _maxResults;
+
+  /**
+   * The maximum number of declarations to return. If this field is missing,
+   * return all matching declarations.
+   */
+  void set maxResults(int value) {
+    this._maxResults = value;
+  }
+
+  SearchGetElementDeclarationsParams({String pattern, int maxResults}) {
+    this.pattern = pattern;
+    this.maxResults = maxResults;
+  }
+
+  factory SearchGetElementDeclarationsParams.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      String pattern;
+      if (json.containsKey("pattern")) {
+        pattern =
+            jsonDecoder.decodeString(jsonPath + ".pattern", json["pattern"]);
+      }
+      int maxResults;
+      if (json.containsKey("maxResults")) {
+        maxResults =
+            jsonDecoder.decodeInt(jsonPath + ".maxResults", json["maxResults"]);
+      }
+      return new SearchGetElementDeclarationsParams(
+          pattern: pattern, maxResults: maxResults);
+    } else {
+      throw jsonDecoder.mismatch(
+          jsonPath, "search.getElementDeclarations params", json);
+    }
+  }
+
+  factory SearchGetElementDeclarationsParams.fromRequest(Request request) {
+    return new SearchGetElementDeclarationsParams.fromJson(
+        new RequestDecoder(request), "params", request.params);
+  }
+
   @override
-  Map<String, dynamic> toJson() => <String, dynamic>{};
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    if (pattern != null) {
+      result["pattern"] = pattern;
+    }
+    if (maxResults != null) {
+      result["maxResults"] = maxResults;
+    }
+    return result;
+  }
 
   @override
   Request toRequest(String id) {
-    return new Request(id, "search.getElementDeclarations", null);
+    return new Request(id, "search.getElementDeclarations", toJson());
   }
 
   @override
+  String toString() => JSON.encode(toJson());
+
+  @override
   bool operator ==(other) {
     if (other is SearchGetElementDeclarationsParams) {
-      return true;
+      return pattern == other.pattern && maxResults == other.maxResults;
     }
     return false;
   }
 
   @override
   int get hashCode {
-    return 653510116;
+    int hash = 0;
+    hash = JenkinsSmiHash.combine(hash, pattern.hashCode);
+    hash = JenkinsSmiHash.combine(hash, maxResults.hashCode);
+    return JenkinsSmiHash.finish(hash);
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 8174780..0ca111b 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -108,7 +108,7 @@
    * The version of the analysis server. The value should be replaced
    * automatically during the build.
    */
-  static final String VERSION = '1.18.6';
+  static final String VERSION = '1.18.7';
 
   /**
    * The options of this server instance.
diff --git a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
index 272498f..55c8231 100644
--- a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
+++ b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
@@ -683,6 +683,10 @@
       if (runPub) {
         String vmPath = Platform.executable;
         String pubPath = path.join(path.dirname(vmPath), 'pub');
+        if (Platform.isWindows) {
+          // Process.run requires the `.bat` suffix on Windows
+          pubPath = '$pubPath.bat';
+        }
         ProcessResult result = Process.runSync(pubPath, <String>['get'],
             stderrEncoding: UTF8,
             stdoutEncoding: UTF8,
diff --git a/pkg/analysis_server/lib/src/search/search_domain.dart b/pkg/analysis_server/lib/src/search/search_domain.dart
index 6ed9709..ecdce2a 100644
--- a/pkg/analysis_server/lib/src/search/search_domain.dart
+++ b/pkg/analysis_server/lib/src/search/search_domain.dart
@@ -127,42 +127,23 @@
   }
 
   /**
-   * Implement the `search.getTypeHierarchy` request.
-   */
-  Future getTypeHierarchy(protocol.Request request) async {
-    var params = new protocol.SearchGetTypeHierarchyParams.fromRequest(request);
-    String file = params.file;
-    // prepare element
-    Element element = await server.getElementAtOffset(file, params.offset);
-    if (element == null) {
-      _sendTypeHierarchyNull(request);
-      return;
-    }
-    // maybe supertype hierarchy only
-    if (params.superOnly == true) {
-      TypeHierarchyComputer computer =
-          new TypeHierarchyComputer(searchEngine, element);
-      List<protocol.TypeHierarchyItem> items = computer.computeSuper();
-      protocol.Response response =
-          new protocol.SearchGetTypeHierarchyResult(hierarchyItems: items)
-              .toResponse(request.id);
-      server.sendResponse(response);
-      return;
-    }
-    // prepare type hierarchy
-    TypeHierarchyComputer computer =
-        new TypeHierarchyComputer(searchEngine, element);
-    List<protocol.TypeHierarchyItem> items = await computer.compute();
-    protocol.Response response =
-        new protocol.SearchGetTypeHierarchyResult(hierarchyItems: items)
-            .toResponse(request.id);
-    server.sendResponse(response);
-  }
-
-  /**
    * Implement the `search.getDeclarations` request.
    */
   Future getDeclarations(protocol.Request request) async {
+    var params =
+        new protocol.SearchGetElementDeclarationsParams.fromRequest(request);
+
+    RegExp regExp;
+    if (params.pattern != null) {
+      try {
+        regExp = new RegExp(params.pattern);
+      } on FormatException catch (exception) {
+        server.sendResponse(new protocol.Response.invalidParameter(
+            request, 'pattern', exception.message));
+        return;
+      }
+    }
+
     var files = <String>[];
     var declarations = <search.Declaration>[];
 
@@ -197,9 +178,18 @@
       }
     }
 
+    int remainingMaxResults = params.maxResults;
     for (var driver in server.driverMap.values.toList()) {
-      var driverDeclarations = await driver.search.declarations(files);
+      var driverDeclarations =
+          await driver.search.declarations(regExp, remainingMaxResults, files);
       declarations.addAll(driverDeclarations);
+
+      if (remainingMaxResults != null) {
+        remainingMaxResults -= driverDeclarations.length;
+        if (remainingMaxResults <= 0) {
+          break;
+        }
+      }
     }
 
     List<protocol.ElementDeclaration> elementDeclarations =
@@ -210,7 +200,11 @@
           declaration.fileIndex,
           declaration.offset,
           declaration.line,
-          declaration.column);
+          declaration.column,
+          declaration.codeOffset,
+          declaration.codeLength,
+          className: declaration.className,
+          parameters: declaration.parameters);
     }).toList();
 
     server.sendResponse(new protocol.SearchGetElementDeclarationsResult(
@@ -218,6 +212,39 @@
         .toResponse(request.id));
   }
 
+  /**
+   * Implement the `search.getTypeHierarchy` request.
+   */
+  Future getTypeHierarchy(protocol.Request request) async {
+    var params = new protocol.SearchGetTypeHierarchyParams.fromRequest(request);
+    String file = params.file;
+    // prepare element
+    Element element = await server.getElementAtOffset(file, params.offset);
+    if (element == null) {
+      _sendTypeHierarchyNull(request);
+      return;
+    }
+    // maybe supertype hierarchy only
+    if (params.superOnly == true) {
+      TypeHierarchyComputer computer =
+          new TypeHierarchyComputer(searchEngine, element);
+      List<protocol.TypeHierarchyItem> items = computer.computeSuper();
+      protocol.Response response =
+          new protocol.SearchGetTypeHierarchyResult(hierarchyItems: items)
+              .toResponse(request.id);
+      server.sendResponse(response);
+      return;
+    }
+    // prepare type hierarchy
+    TypeHierarchyComputer computer =
+        new TypeHierarchyComputer(searchEngine, element);
+    List<protocol.TypeHierarchyItem> items = await computer.compute();
+    protocol.Response response =
+        new protocol.SearchGetTypeHierarchyResult(hierarchyItems: items)
+            .toResponse(request.id);
+    server.sendResponse(response);
+  }
+
   @override
   protocol.Response handleRequest(protocol.Request request) {
     try {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
index ddf51d0..7966324 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
@@ -61,6 +61,21 @@
         _addConstructorSuggestions(element, relevance);
       }
     }
+    if (optype.includeReturnValueSuggestions) {
+      if (element.isEnum) {
+        String enumName = element.displayName;
+        int relevance = optype.returnValueSuggestionsFilter(
+            element.type, DART_RELEVANCE_DEFAULT);
+        for (var field in element.fields) {
+          if (field.isEnumConstant) {
+            addSuggestion(field,
+                prefix: prefix,
+                relevance: relevance,
+                elementCompletion: '$enumName.${field.name}');
+          }
+        }
+      }
+    }
   }
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
index ab4dad7..d0bc0b2 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
@@ -89,14 +89,19 @@
     StringBuffer displayTextBuffer = new StringBuffer();
     DartChangeBuilder builder = await _buildReplacementText(
         request.result, targetId, element, displayTextBuffer);
-    String completion =
-        builder.sourceChange.edits[0].edits[0].replacement.trim();
-    if (completion == null || completion.length == 0) {
+    String replacement = builder.sourceChange.edits[0].edits[0].replacement;
+    String completion = replacement.trim();
+    String overrideAnnotation = '@override';
+    if (_hasOverride(request.target.containingNode) &&
+        completion.startsWith(overrideAnnotation)) {
+      completion = completion.substring(overrideAnnotation.length).trim();
+    }
+    if (completion.length == 0) {
       return null;
     }
 
     SourceRange selectionRange = builder.selectionRange;
-    int offsetDelta = range.node(targetId).offset;
+    int offsetDelta = targetId.offset + replacement.indexOf(completion);
     String displayText =
         displayTextBuffer.isNotEmpty ? displayTextBuffer.toString() : null;
     CompletionSuggestion suggestion = new CompletionSuggestion(
@@ -129,26 +134,6 @@
   }
 
   /**
-   * Compute a selection range for the given completion.
-   */
-  SourceRange _computeSelectionRange(String completion) {
-    // TODO(pq): consider moving this into ChangeBuilder.
-    // { return null; } or => null;
-    int offset = completion.indexOf('null;');
-    if (offset != -1) {
-      return new SourceRange(offset, 4);
-    }
-    // { }
-    offset = completion.indexOf('{');
-    if (offset != -1) {
-      return new SourceRange(offset + 2, 0);
-    }
-
-    // Default.
-    return new SourceRange(0, 0);
-  }
-
-  /**
    * If the target looks like a partial identifier inside a class declaration
    * then return that identifier, otherwise return `null`.
    */
@@ -165,6 +150,17 @@
           }
         }
       }
+    } else if (node is FieldDeclaration) {
+      Object entity = target.entity;
+      if (entity is VariableDeclarationList) {
+        NodeList<VariableDeclaration> variables = entity.variables;
+        if (variables.length == 1) {
+          SimpleIdentifier targetId = variables[0].name;
+          if (targetId.name.isEmpty) {
+            return targetId;
+          }
+        }
+      }
     }
     return null;
   }
@@ -179,4 +175,20 @@
         classElement.getMethod(memberName) != null ||
         classElement.getSetter(memberName) != null;
   }
+
+  /**
+   * Return `true` if the given [node] has an `override` annotation.
+   */
+  bool _hasOverride(AstNode node) {
+    if (node is AnnotatedNode) {
+      NodeList<Annotation> metadata = node.metadata;
+      for (Annotation annotation in metadata) {
+        if (annotation.name.name == 'override' &&
+            annotation.arguments == null) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
 }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
index 8239f37..593de24 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
@@ -68,6 +68,13 @@
   }
 
   @override
+  visitConstructorElement(ConstructorElement element) {
+    if (element.context.analysisOptions.previewDart2) {
+      _addSuggestion(element);
+    }
+  }
+
+  @override
   visitFieldElement(FieldElement element) {
     if (element.isStatic) {
       _addSuggestion(element);
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index 83347c9..9ebcf46 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -147,13 +147,15 @@
    * Add a suggestion based upon the given element.
    */
   void addSuggestion(Element element,
-      {String prefix, int relevance: DART_RELEVANCE_DEFAULT}) {
+      {String prefix,
+      int relevance: DART_RELEVANCE_DEFAULT,
+      String elementCompletion}) {
     if (element.isPrivate) {
       if (element.library != containingLibrary) {
         return;
       }
     }
-    String completion = element.displayName;
+    String completion = elementCompletion ?? element.displayName;
     if (prefix != null && prefix.length > 0) {
       if (completion == null || completion.length <= 0) {
         completion = prefix;
diff --git a/pkg/analysis_server/lib/src/services/correction/assist.dart b/pkg/analysis_server/lib/src/services/correction/assist.dart
index 665d092..8902596 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist.dart
@@ -67,6 +67,10 @@
       'dart.assist.convert.isNotEmpty', 30, "Convert to 'isNotEmpty'");
   static const CONVERT_PART_OF_TO_URI = const AssistKind(
       'dart.assist.convert.partOfToPartUri', 30, "Convert to use a URI");
+  static const CONVERT_TO_DOUBLE_QUOTED_STRING = const AssistKind(
+      'dart.assist.convert.toDoubleQuotedString',
+      30,
+      "Convert to double quoted string");
   static const CONVERT_TO_FIELD_PARAMETER = const AssistKind(
       'dart.assist.convert.toConstructorFieldParameter',
       30,
@@ -75,6 +79,10 @@
       'dart.assist.convert.toConstructorNormalParameter',
       30,
       "Convert to normal parameter");
+  static const CONVERT_TO_SINGLE_QUOTED_STRING = const AssistKind(
+      'dart.assist.convert.toSingleQuotedString',
+      30,
+      "Convert to single quoted string");
   static const ENCAPSULATE_FIELD =
       const AssistKind('dart.assist.encapsulateField', 30, "Encapsulate field");
   static const EXCHANGE_OPERANDS =
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 915c706..ce3e78b 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -129,6 +129,7 @@
     await _addProposal_convertDocumentationIntoLine();
     await _addProposal_convertToAsyncFunctionBody();
     await _addProposal_convertToBlockFunctionBody();
+    await _addProposal_convertToDoubleQuotedString();
     await _addProposal_convertToExpressionFunctionBody();
     await _addProposal_convertPartOfToUri();
     await _addProposal_convertToForIndexLoop();
@@ -138,6 +139,7 @@
     await _addProposal_convertToIsNotEmpty();
     await _addProposal_convertToFieldParameter();
     await _addProposal_convertToNormalParameter();
+    await _addProposal_convertToSingleQuotedString();
     await _addProposal_encapsulateField();
     await _addProposal_exchangeOperands();
     await _addProposal_flutterConvertToChildren();
@@ -635,10 +637,11 @@
     String libraryPath = unitLibraryElement.source.fullName;
     String partPath = unit.element.source.fullName;
     String relativePath = relative(libraryPath, from: dirname(partPath));
+    String uri = new Uri.file(relativePath).toString();
     SourceRange replacementRange = range.node(directive.libraryName);
     DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
     await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
-      builder.addSimpleReplacement(replacementRange, "'$relativePath'");
+      builder.addSimpleReplacement(replacementRange, "'$uri'");
     });
     _addAssistFromBuilder(changeBuilder, DartAssistKind.CONVERT_PART_OF_TO_URI);
   }
@@ -717,6 +720,10 @@
         changeBuilder, DartAssistKind.CONVERT_INTO_BLOCK_BODY);
   }
 
+  Future<Null> _addProposal_convertToDoubleQuotedString() async {
+    await _convertQuotes(false, DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING);
+  }
+
   Future<Null> _addProposal_convertToExpressionFunctionBody() async {
     // prepare current body
     FunctionBody body = getEnclosingFunctionBody();
@@ -1158,6 +1165,10 @@
     }
   }
 
+  Future<Null> _addProposal_convertToSingleQuotedString() async {
+    await _convertQuotes(true, DartAssistKind.CONVERT_TO_SINGLE_QUOTED_STRING);
+  }
+
   Future<Null> _addProposal_encapsulateField() async {
     // find FieldDeclaration
     FieldDeclaration fieldDeclaration =
@@ -1435,6 +1446,10 @@
 
           builder.addSimpleReplacement(nextRange, widgetText);
           builder.addSimpleReplacement(widgetRange, nextText);
+
+          int lengthDelta = nextRange.length - widgetRange.length;
+          int newWidgetOffset = nextRange.offset + lengthDelta;
+          changeBuilder.setSelection(new Position(file, newWidgetOffset));
         });
         _addAssistFromBuilder(changeBuilder, DartAssistKind.FLUTTER_MOVE_DOWN);
       }
@@ -1463,6 +1478,9 @@
 
           builder.addSimpleReplacement(previousRange, widgetText);
           builder.addSimpleReplacement(widgetRange, previousText);
+
+          int newWidgetOffset = previousRange.offset;
+          changeBuilder.setSelection(new Position(file, newWidgetOffset));
         });
         _addAssistFromBuilder(changeBuilder, DartAssistKind.FLUTTER_MOVE_UP);
       }
@@ -2896,6 +2914,60 @@
         changeBuilder, DartAssistKind.CONVERT_INTO_GENERIC_FUNCTION_SYNTAX);
   }
 
+  Future<Null> _convertQuotes(bool fromDouble, AssistKind kind) async {
+    if (node is SimpleStringLiteral) {
+      SimpleStringLiteral literal = node;
+      if (fromDouble ? !literal.isSingleQuoted : literal.isSingleQuoted) {
+        String newQuote = literal.isMultiline
+            ? (fromDouble ? "'''" : '"""')
+            : (fromDouble ? "'" : '"');
+        int quoteLength = literal.isMultiline ? 3 : 1;
+        String lexeme = literal.literal.lexeme;
+        if (lexeme.indexOf(newQuote) < 0) {
+          DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
+          await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
+            builder.addSimpleReplacement(
+                new SourceRange(
+                    literal.offset + (literal.isRaw ? 1 : 0), quoteLength),
+                newQuote);
+            builder.addSimpleReplacement(
+                new SourceRange(literal.end - quoteLength, quoteLength),
+                newQuote);
+          });
+          _addAssistFromBuilder(changeBuilder, kind);
+        }
+      }
+    } else if (node is InterpolationString) {
+      StringInterpolation parent = node.parent;
+      if (fromDouble ? !parent.isSingleQuoted : parent.isSingleQuoted) {
+        String newQuote = parent.isMultiline
+            ? (fromDouble ? "'''" : '"""')
+            : (fromDouble ? "'" : '"');
+        int quoteLength = parent.isMultiline ? 3 : 1;
+        NodeList<InterpolationElement> elements = parent.elements;
+        for (int i = 0; i < elements.length; i++) {
+          InterpolationElement element = elements[i];
+          if (element is InterpolationString) {
+            String lexeme = element.contents.lexeme;
+            if (lexeme.indexOf(newQuote) >= 0) {
+              return;
+            }
+          }
+        }
+        DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
+        await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
+          builder.addSimpleReplacement(
+              new SourceRange(
+                  parent.offset + (parent.isRaw ? 1 : 0), quoteLength),
+              newQuote);
+          builder.addSimpleReplacement(
+              new SourceRange(parent.end - quoteLength, quoteLength), newQuote);
+        });
+        _addAssistFromBuilder(changeBuilder, kind);
+      }
+    }
+  }
+
   /// Return the [ClassElement] with the given [className] that is exported
   /// from the library with the given [libraryUri], or `null` if the libary
   /// does not export a class with such name.
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 101583e..93e8299 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -24,6 +24,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/error.dart';
+import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/analysis/top_level_declaration.dart';
@@ -1513,13 +1514,17 @@
         String file = source.fullName;
         if (isAbsolute(file) && AnalysisEngine.isDartFileName(file)) {
           String libName = _computeLibraryName(file);
-          DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
-          await changeBuilder.addFileEdit(source.fullName,
-              (DartFileEditBuilder builder) {
-            builder.addSimpleInsertion(0, 'library $libName;$eol$eol');
-          });
-          _addFixFromBuilder(changeBuilder, DartFixKind.CREATE_FILE,
-              args: [source.shortName]);
+          try {
+            DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
+            await changeBuilder.addFileEdit(source.fullName,
+                (DartFileEditBuilder builder) {
+              builder.addSimpleInsertion(0, 'library $libName;$eol$eol');
+            });
+            _addFixFromBuilder(changeBuilder, DartFixKind.CREATE_FILE,
+                args: [source.shortName]);
+          } on AnalysisException {
+            // Ignore the exception and just don't create a fix.
+          }
         }
       }
     }
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index bd0864c..f050efa 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -89,6 +89,12 @@
     return source;
   }
 
+  void configurePreviewDart2() {
+    driver.configure(
+        analysisOptions: new AnalysisOptionsImpl.from(driver.analysisOptions)
+          ..previewDart2 = true);
+  }
+
   void processRequiredPlugins() {
     AnalysisEngine.instance.processRequiredPlugins();
   }
diff --git a/pkg/analysis_server/test/analysis/get_errors_test.dart b/pkg/analysis_server/test/analysis/get_errors_test.dart
index 67eddd3..8649fcc 100644
--- a/pkg/analysis_server/test/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/get_errors_test.dart
@@ -69,14 +69,14 @@
   @failingTest
   test_fileDoesNotExist() {
     // Broken under the new driver.
-    String file = '$projectPath/doesNotExist.dart';
+    String file = convertPath('$projectPath/doesNotExist.dart');
     return _checkInvalid(file);
   }
 
   @failingTest
   test_fileWithoutContext() {
     // Broken under the new driver.
-    String file = '/outside.dart';
+    String file = convertPath('/outside.dart');
     newFile(file, content: '''
 main() {
   print(42);
diff --git a/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart b/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart
index c3f7d6bb..b6a705b 100644
--- a/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart
@@ -119,9 +119,9 @@
     expect(analyzedFilesReceived, isTrue);
 
     analyzedFilesReceived = false;
-    modifyTestFile('import "/foo.dart";');
+    modifyTestFile('import "${convertPathForImport('/foo.dart')}";');
     await prepareAnalyzedFiles();
-    assertHasFile('/foo.dart');
+    assertHasFile(convertPath('/foo.dart'));
   }
 
   void unsubscribeAnalyzedFiles() {
diff --git a/pkg/analysis_server/test/completion_test.dart b/pkg/analysis_server/test/completion_test.dart
index af77043..96fca2a 100644
--- a/pkg/analysis_server/test/completion_test.dart
+++ b/pkg/analysis_server/test/completion_test.dart
@@ -781,21 +781,17 @@
         <String>["1+fooConst", "1-fooNotConst", "1-bar"],
         failingTests: '1');
 
-    buildTests(
-        'testCompletion_annotation_type',
-        '''
+    buildTests('testCompletion_annotation_type', '''
 class AAA {
   const AAA({int a, int b});
   const AAA.nnn(int c, int d);
 }
 @AAA!1
 main() {
-}''',
-        <String>[
-          "1+AAA" /*":" + ProposalKind.CONSTRUCTOR*/,
-          "1+AAA.nnn" /*":" + ProposalKind.CONSTRUCTOR*/
-        ],
-        failingTests: '1');
+}''', <String>[
+      "1+AAA" /*":" + ProposalKind.CONSTRUCTOR*/,
+      "1+AAA.nnn" /*":" + ProposalKind.CONSTRUCTOR*/
+    ]);
 
     buildTests('testCompletion_annotation_type_inClass_withoutMember', '''
 class AAA {
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index 08eeb1ba..94c8884 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -503,7 +503,7 @@
   foo(bar) => 0;''');
     addTestFile('''
   library libA;
-  part "/testA.dart";
+  part "${convertPathForImport('/testA.dart')}";
   import "dart:math";
   /// The [^]
   main(aaa, bbb) {}
@@ -529,7 +529,7 @@
   test_inherited() {
     newFile('/libA.dart', content: 'class A {m() {}}');
     addTestFile('''
-import '/libA.dart';
+import ${convertPathForImport('/libA.dart')};
 class B extends A {
   x() {^}
 }
diff --git a/pkg/analysis_server/test/domain_diagnostic_test.dart b/pkg/analysis_server/test/domain_diagnostic_test.dart
index c3ff619..7601a5e 100644
--- a/pkg/analysis_server/test/domain_diagnostic_test.dart
+++ b/pkg/analysis_server/test/domain_diagnostic_test.dart
@@ -29,7 +29,7 @@
     newFile('/project/pubspec.yaml', content: 'name: project');
     newFile('/project/bin/test.dart', content: 'main() {}');
 
-    server.setAnalysisRoots('0', ['/project/'], [], {});
+    server.setAnalysisRoots('0', [convertPath('/project/')], [], {});
 
     await server.onAnalysisComplete;
 
@@ -40,7 +40,7 @@
     expect(result.contexts, hasLength(1));
 
     ContextData context = result.contexts[0];
-    expect(context.name, '/project');
+    expect(context.name, convertPath('/project'));
     expect(context.explicitFileCount, 1); /* test.dart */
 
     expect(context.implicitFileCount, 4);
diff --git a/pkg/analysis_server/test/domain_execution_test.dart b/pkg/analysis_server/test/domain_execution_test.dart
index 8ccdb16..02b95c1 100644
--- a/pkg/analysis_server/test/domain_execution_test.dart
+++ b/pkg/analysis_server/test/domain_execution_test.dart
@@ -182,7 +182,7 @@
     // map the file
     ExecutionMapUriResult result = _mapUri(file: path);
     expect(result.file, isNull);
-    expect(result.uri, 'file:///a/b.dart');
+    expect(result.uri, new Uri.file(path).toString());
   }
 
   void test_mapUri_file_dartUriKind() {
@@ -196,11 +196,10 @@
   }
 
   void test_mapUri_uri() {
-    String path = '/a/b.dart';
-    newFile(path);
+    String path = newFile('/a/b.dart').path;
     // map the uri
-    ExecutionMapUriResult result = _mapUri(uri: 'file://$path');
-    expect(result.file, '/a/b.dart');
+    ExecutionMapUriResult result = _mapUri(uri: new Uri.file(path).toString());
+    expect(result.file, convertPath('/a/b.dart'));
     expect(result.uri, isNull);
   }
 
diff --git a/pkg/analysis_server/test/edit/fixes_test.dart b/pkg/analysis_server/test/edit/fixes_test.dart
index 92c67e2..1be66ae 100644
--- a/pkg/analysis_server/test/edit/fixes_test.dart
+++ b/pkg/analysis_server/test/edit/fixes_test.dart
@@ -110,10 +110,12 @@
   }
 
   test_suggestImportFromDifferentAnalysisRoot() async {
+    String asFileUri(String input) =>
+        new Uri.file(convertPath(input)).toString();
     newFolder('/aaa');
     newFile('/aaa/.packages', content: '''
-aaa:${resourceProvider.convertPath('/aaa/lib')}
-bbb:${resourceProvider.convertPath('/bbb/lib')}
+aaa:${asFileUri('/aaa/lib')}
+bbb:${asFileUri('/bbb/lib')}
 ''');
     // Ensure that the target is analyzed as an implicit source.
     newFile('/aaa/lib/foo.dart', content: 'import "package:bbb/target.dart";');
@@ -122,7 +124,8 @@
     newFile('/bbb/lib/target.dart', content: 'class Foo() {}');
 
     handleSuccessfulRequest(
-        new AnalysisSetAnalysisRootsParams(['/aaa', '/bbb'], []).toRequest('0'),
+        new AnalysisSetAnalysisRootsParams(
+            [convertPath('/aaa'), convertPath('/bbb')], []).toRequest('0'),
         handler: analysisHandler);
 
     // Configure the test file.
diff --git a/pkg/analysis_server/test/edit/organize_directives_test.dart b/pkg/analysis_server/test/edit/organize_directives_test.dart
index ed87cba..9ca4c06 100644
--- a/pkg/analysis_server/test/edit/organize_directives_test.dart
+++ b/pkg/analysis_server/test/edit/organize_directives_test.dart
@@ -35,7 +35,8 @@
   Future test_BAD_doesNotExist() async {
     // The analysis driver fails to return an error
     Request request =
-        new EditOrganizeDirectivesParams('/no/such/file.dart').toRequest('0');
+        new EditOrganizeDirectivesParams(convertPath('/no/such/file.dart'))
+            .toRequest('0');
     Response response = await waitResponse(request);
     expect(
         response, isResponseFailure('0', RequestErrorCode.FILE_NOT_ANALYZED));
diff --git a/pkg/analysis_server/test/integration/support/integration_test_methods.dart b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
index 35eca2f..ab48dde 100644
--- a/pkg/analysis_server/test/integration/support/integration_test_methods.dart
+++ b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
@@ -1199,6 +1199,18 @@
   /**
    * Return top-level and class member declarations.
    *
+   * Parameters
+   *
+   * pattern: String (optional)
+   *
+   *   The regular expression used to match the names of declarations. If this
+   *   field is missing, return all declarations.
+   *
+   * maxResults: int (optional)
+   *
+   *   The maximum number of declarations to return. If this field is missing,
+   *   return all matching declarations.
+   *
    * Returns
    *
    * declarations: List<ElementDeclaration>
@@ -1209,9 +1221,12 @@
    *
    *   The list of the paths of files with declarations.
    */
-  Future<SearchGetElementDeclarationsResult>
-      sendSearchGetElementDeclarations() async {
-    var result = await server.send("search.getElementDeclarations", null);
+  Future<SearchGetElementDeclarationsResult> sendSearchGetElementDeclarations(
+      {String pattern, int maxResults}) async {
+    var params = new SearchGetElementDeclarationsParams(
+            pattern: pattern, maxResults: maxResults)
+        .toJson();
+    var result = await server.send("search.getElementDeclarations", params);
     ResponseDecoder decoder = new ResponseDecoder(null);
     return new SearchGetElementDeclarationsResult.fromJson(
         decoder, 'result', result);
diff --git a/pkg/analysis_server/test/integration/support/protocol_matchers.dart b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
index 3801787..93cc065 100644
--- a/pkg/analysis_server/test/integration/support/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
@@ -332,7 +332,10 @@
  *   "offset": int
  *   "line": int
  *   "column": int
+ *   "codeOffset": int
+ *   "codeLength": int
  *   "className": optional String
+ *   "parameters": optional String
  * }
  */
 final Matcher isElementDeclaration =
@@ -342,9 +345,12 @@
           "fileIndex": isInt,
           "offset": isInt,
           "line": isInt,
-          "column": isInt
+          "column": isInt,
+          "codeOffset": isInt,
+          "codeLength": isInt
         }, optionalFields: {
-          "className": isString
+          "className": isString,
+          "parameters": isString
         }));
 
 /**
@@ -2665,8 +2671,15 @@
 
 /**
  * search.getElementDeclarations params
+ *
+ * {
+ *   "pattern": optional String
+ *   "maxResults": optional int
+ * }
  */
-final Matcher isSearchGetElementDeclarationsParams = isNull;
+final Matcher isSearchGetElementDeclarationsParams = new LazyMatcher(() =>
+    new MatchesJsonObject("search.getElementDeclarations params", null,
+        optionalFields: {"pattern": isString, "maxResults": isInt}));
 
 /**
  * search.getElementDeclarations result
diff --git a/pkg/analysis_server/test/search/declarations_test.dart b/pkg/analysis_server/test/search/declarations_test.dart
index 253b657..4feda64 100644
--- a/pkg/analysis_server/test/search/declarations_test.dart
+++ b/pkg/analysis_server/test/search/declarations_test.dart
@@ -22,11 +22,21 @@
 class DeclarationsTest extends AbstractSearchDomainTest {
   SearchGetElementDeclarationsResult declarationsResult;
 
-  void assertHas(String name, ElementKind kind) {
-    declarationsResult.declarations.singleWhere((d) =>
+  ElementDeclaration assertHas(String name, ElementKind kind,
+      {String className}) {
+    return declarationsResult.declarations.singleWhere((ElementDeclaration d) =>
         declarationsResult.files[d.fileIndex] == testFile &&
         d.name == name &&
-        d.kind == kind);
+        d.kind == kind &&
+        d.className == className);
+  }
+
+  void assertNo(String name) {
+    expect(
+        declarationsResult.declarations,
+        isNot(contains(predicate((ElementDeclaration d) =>
+            declarationsResult.files[d.fileIndex] == testFile &&
+            d.name == name))));
   }
 
   test_class() async {
@@ -43,11 +53,11 @@
     await _getDeclarations();
 
     assertHas('C', ElementKind.CLASS);
-    assertHas('f', ElementKind.FIELD);
-    assertHas('named', ElementKind.CONSTRUCTOR);
-    assertHas('g', ElementKind.GETTER);
-    assertHas('s', ElementKind.SETTER);
-    assertHas('m', ElementKind.METHOD);
+    assertHas('f', ElementKind.FIELD, className: 'C');
+    assertHas('named', ElementKind.CONSTRUCTOR, className: 'C');
+    assertHas('g', ElementKind.GETTER, className: 'C');
+    assertHas('s', ElementKind.SETTER, className: 'C');
+    assertHas('m', ElementKind.METHOD, className: 'C');
   }
 
   test_enum() async {
@@ -64,24 +74,44 @@
     assertHas('c', ElementKind.ENUM_CONSTANT);
   }
 
+  test_maxResults() async {
+    newFile(join(testFolder, 'a.dart'), content: r'''
+class A {}
+class B {}
+''').path;
+    newFile(join(testFolder, 'b.dart'), content: r'''
+class C {}
+class D {}
+''').path;
+
+    // Limit to exactly one file.
+    await _getDeclarations(pattern: r'[A-D]', maxResults: 2);
+    expect(declarationsResult.declarations, hasLength(2));
+
+    // Limit in the middle of the second file.
+    await _getDeclarations(pattern: r'[A-D]', maxResults: 3);
+    expect(declarationsResult.declarations, hasLength(3));
+
+    // No limit.
+    await _getDeclarations(pattern: r'[A-D]');
+    expect(declarationsResult.declarations, hasLength(4));
+  }
+
   test_multipleFiles() async {
     var a = newFile(join(testFolder, 'a.dart'), content: 'class A {}').path;
     var b = newFile(join(testFolder, 'b.dart'), content: 'class B {}').path;
 
-    Request request = new SearchGetElementDeclarationsParams().toRequest('0');
-    Response response = await waitResponse(request);
+    await _getDeclarations();
 
-    var result = new SearchGetElementDeclarationsResult.fromResponse(response);
-
-    expect(result.files, contains(a));
-    expect(result.files, contains(b));
+    expect(declarationsResult.files, contains(a));
+    expect(declarationsResult.files, contains(b));
 
     {
       ElementDeclaration declaration =
-          result.declarations.singleWhere((d) => d.name == 'A');
+          declarationsResult.declarations.singleWhere((d) => d.name == 'A');
       expect(declaration.name, 'A');
       expect(declaration.kind, ElementKind.CLASS);
-      expect(result.files[declaration.fileIndex], a);
+      expect(declarationsResult.files[declaration.fileIndex], a);
       expect(declaration.offset, 6);
       expect(declaration.line, 1);
       expect(declaration.column, 7);
@@ -89,13 +119,38 @@
 
     {
       ElementDeclaration declaration =
-          result.declarations.singleWhere((d) => d.name == 'B');
+          declarationsResult.declarations.singleWhere((d) => d.name == 'B');
       expect(declaration.name, 'B');
       expect(declaration.kind, ElementKind.CLASS);
-      expect(result.files[declaration.fileIndex], b);
+      expect(declarationsResult.files[declaration.fileIndex], b);
     }
   }
 
+  test_parameters() async {
+    addTestFile(r'''
+void f(bool a, String b) {}
+''');
+    await _getDeclarations();
+
+    ElementDeclaration declaration = assertHas('f', ElementKind.FUNCTION);
+    expect(declaration.parameters, '(bool a, String b)');
+  }
+
+  test_regExp() async {
+    addTestFile(r'''
+class A {}
+class B {}
+class C {}
+class D {}
+''');
+    await _getDeclarations(pattern: r'[A-C]');
+
+    assertHas('A', ElementKind.CLASS);
+    assertHas('B', ElementKind.CLASS);
+    assertHas('C', ElementKind.CLASS);
+    assertNo('D');
+  }
+
   test_top() async {
     addTestFile(r'''
 int get g => 0;
@@ -115,8 +170,10 @@
     assertHas('tf2', ElementKind.FUNCTION_TYPE_ALIAS);
   }
 
-  Future<Null> _getDeclarations() async {
-    Request request = new SearchGetElementDeclarationsParams().toRequest('0');
+  Future<Null> _getDeclarations({String pattern, int maxResults}) async {
+    Request request = new SearchGetElementDeclarationsParams(
+            pattern: pattern, maxResults: maxResults)
+        .toRequest('0');
     Response response = await waitResponse(request);
 
     declarationsResult =
diff --git a/pkg/analysis_server/test/search/type_hierarchy_test.dart b/pkg/analysis_server/test/search/type_hierarchy_test.dart
index c3132ab..d53bf67 100644
--- a/pkg/analysis_server/test/search/type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/search/type_hierarchy_test.dart
@@ -180,9 +180,8 @@
 ''');
     await waitForTasksFinished();
     // configure roots
-    Request request =
-        new AnalysisSetAnalysisRootsParams([projectPath, '/packages/pkgA'], [])
-            .toRequest('0');
+    Request request = new AnalysisSetAnalysisRootsParams(
+        [projectPath, convertPath('/packages/pkgA')], []).toRequest('0');
     handleSuccessfulRequest(request);
     // test A type hierarchy
     List<TypeHierarchyItem> items = await _getTypeHierarchy('A {}');
diff --git a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
index 05c1b3d..0335310 100644
--- a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
@@ -144,7 +144,8 @@
   test_Annotation_imported_constructor_named_param() async {
     addSource('/libA.dart', '''
 library libA; class A { const A({int one, String two: 'defaultValue'}); }''');
-    addTestSource('import "/libA.dart"; @A(^) main() { }');
+    addTestSource(
+        'import "${convertPathForImport("/libA.dart")}"; @A(^) main() { }');
     await computeSuggestions();
     assertSuggestArgumentsAndTypes(
         namedArgumentsWithTypes: {'one': 'int', 'two': 'String'});
@@ -444,7 +445,8 @@
   test_ArgumentList_imported_constructor_named_param() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement
     addSource('/libA.dart', 'library libA; class A{A({int one}); }');
-    addTestSource('import "/libA.dart"; main() { new A(^);}');
+    addTestSource(
+        'import "${convertPathForImport("/libA.dart")}"; main() { new A(^);}');
     await computeSuggestions();
     assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
@@ -452,7 +454,8 @@
   test_ArgumentList_imported_constructor_named_param2() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement
     addSource('/libA.dart', 'library libA; class A{A.foo({int one}); }');
-    addTestSource('import "/libA.dart"; main() { new A.foo(^);}');
+    addTestSource(
+        'import "${convertPathForImport("/libA.dart")}"; main() { new A.foo(^);}');
     await computeSuggestions();
     assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
@@ -461,7 +464,8 @@
     // ArgumentList  InstanceCreationExpression  VariableDeclaration
     addSource(
         '/libA.dart', 'library libA; class A { A({int i, String s, d}) {} }}');
-    addTestSource('import "/libA.dart"; main() { var a = new A(^);}');
+    addTestSource(
+        'import "${convertPathForImport("/libA.dart")}"; main() { var a = new A(^);}');
     await computeSuggestions();
     assertSuggestArgumentsAndTypes(
         namedArgumentsWithTypes: {'i': 'int', 's': 'String', 'd': 'dynamic'});
@@ -471,7 +475,8 @@
     // ArgumentList  InstanceCreationExpression  ExpressionStatement
     addSource(
         '/libA.dart', 'library libA; class A{factory A({int one}) => null;}');
-    addTestSource('import "/libA.dart"; main() { new A(^);}');
+    addTestSource(
+        'import "${convertPathForImport("/libA.dart")}"; main() { new A(^);}');
     await computeSuggestions();
     assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
@@ -480,7 +485,8 @@
     // ArgumentList  InstanceCreationExpression  ExpressionStatement
     addSource('/libA.dart',
         'library libA; abstract class A{factory A.foo({int one});}');
-    addTestSource('import "/libA.dart"; main() { new A.foo(^);}');
+    addTestSource(
+        'import "${convertPathForImport("/libA.dart")}"; main() { new A.foo(^);}');
     await computeSuggestions();
     assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
@@ -489,7 +495,8 @@
     // ArgumentList  InstanceCreationExpression  VariableDeclaration
     addSource('/libA.dart',
         'library libA; class A {factory A({int i, String s, d}) {} }}');
-    addTestSource('import "/libA.dart"; main() { var a = new A(^);}');
+    addTestSource(
+        'import "${convertPathForImport("/libA.dart")}"; main() { var a = new A(^);}');
     await computeSuggestions();
     assertSuggestArgumentsAndTypes(
         namedArgumentsWithTypes: {'i': 'int', 's': 'String', 'd': 'dynamic'});
@@ -503,7 +510,7 @@
       expect() { }
       void baz() { }''');
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       class B { }
       String bar() => true;
       void main() {expect(a^)}''');
@@ -519,7 +526,7 @@
       expect(String arg) { }
       void baz() { }''');
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       class B { }
       String bar() => true;
       void main() {expect(^)}''');
@@ -535,7 +542,7 @@
       expect(String arg1, int arg2) { }
       void baz() { }''');
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       class B { }
       String bar() => true;
       void main() {expect(^)}''');
@@ -551,7 +558,7 @@
       expect(String arg1, int arg2, {bool arg3}) { }
       void baz() { }''');
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       class B { }
       String bar() => true;
       void main() {expect(^)}''');
@@ -567,7 +574,7 @@
       expect(String arg1, int arg2, {bool arg3}) { }
       void baz() { }''');
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       class B { }
       String bar() => true;
       void main() {expect('hello', ^)}''');
@@ -583,7 +590,7 @@
       expect(String arg1, int arg2, {bool arg3}) { }
       void baz() { }''');
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       class B { }
       String bar() => true;
       void main() {expect('hello', ^x)}''');
@@ -599,7 +606,7 @@
       expect(String arg1, int arg2, {bool arg3}) { }
       void baz() { }''');
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       class B { }
       String bar() => true;
       void main() {expect('hello', x^)}''');
@@ -615,7 +622,7 @@
       expect(String arg1, int arg2, {bool arg3}) { }
       void baz() { }''');
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       class B { }
       String bar() => true;
       void main() {expect('hello', x ^)}''');
@@ -884,7 +891,7 @@
   test_ArgumentList_local_function_1() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       expect(arg) { }
       class B { }
       String bar() => true;
@@ -896,7 +903,7 @@
   test_ArgumentList_local_function_2() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       expect(arg1, int arg2) { }
       class B { }
       String bar() => true;
@@ -908,7 +915,7 @@
   test_ArgumentList_local_function_3() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       expect(arg1, int arg2) { }
       class B { }
       String bar() => true;
@@ -920,7 +927,7 @@
   test_ArgumentList_local_function_3a() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       expect(arg1, int arg2, {bool arg3}) { }
       class B { }
       String bar() => true;
@@ -932,7 +939,7 @@
   test_ArgumentList_local_function_3b() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       expect(arg1, int arg2, {bool arg3}) { }
       class B { }
       String bar() => true;
@@ -944,7 +951,7 @@
   test_ArgumentList_local_function_3c() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       expect(arg1, int arg2, {bool arg3}) { }
       class B { }
       String bar() => true;
@@ -956,7 +963,7 @@
   test_ArgumentList_local_function_3d() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       expect(arg1, int arg2, {bool arg3}) { }
       class B { }
       String bar() => true;
@@ -1011,7 +1018,7 @@
       bool hasLength(int expected) { }
       void baz() { }''');
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       class B {
         expect() { }
         void foo() {expect(^)}}
@@ -1027,7 +1034,7 @@
       bool hasLength(int expected) { }
       void baz() { }''');
     addTestSource('''
-      import '/libA.dart'
+      import '${convertPathForImport('/libA.dart')}'
       class B {
         expect(arg, int blat) { }
         void foo() {expect(^)}}
diff --git a/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart
index 0bc60b7..2aa2825 100644
--- a/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart
@@ -38,7 +38,7 @@
     // SimpleIdentifier  HideCombinator  ImportDirective
     addSource('/testAB.dart', '''
       library libAB;
-      part '/partAB.dart';
+      part "${convertPathForImport('/partAB.dart')}";
       class A { }
       class B { }''');
     addSource('/partAB.dart', '''
@@ -50,8 +50,8 @@
       class C { }
       class D { }''');
     addTestSource('''
-      import "/testAB.dart" hide ^;
-      import "/testCD.dart";
+      import "${convertPathForImport("/testAB.dart")}" hide ^;
+      import "${convertPathForImport("/testCD.dart")}";
       class X {}''');
 
     await computeSuggestions();
@@ -78,7 +78,7 @@
     // SimpleIdentifier  HideCombinator  ImportDirective
     addSource('/testAB.dart', '''
       library libAB;
-      part '/partAB.dart';
+      part "${convertPathForImport('/partAB.dart')}";
       class A { }
       class B { }
       class _AB''');
@@ -93,8 +93,8 @@
       class C { }
       class D { }''');
     addTestSource('''
-      import "/testAB.dart" show ^;
-      import "/testCD.dart";
+      import "${convertPathForImport("/testAB.dart")}" show ^;
+      import "${convertPathForImport("/testCD.dart")}";
       class X {}''');
 
     await computeSuggestions();
@@ -140,7 +140,7 @@
 class B {}
 ''');
     addTestSource('''
-import "/testB.dart" show ^;
+import "${convertPathForImport("/testB.dart")}" show ^;
 ''');
     await computeSuggestions();
     assertSuggestClass('A',
diff --git a/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart b/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart
index 7f455ec..0809c6e 100644
--- a/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart
@@ -61,9 +61,9 @@
     expect(replacementLength, equals(0));
     assertHasResult(CompletionSuggestionKind.INVOCATION, 'E');
     assertHasResult(CompletionSuggestionKind.INVOCATION, 'E.e1',
-        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
     assertHasResult(CompletionSuggestionKind.INVOCATION, 'E.e2',
-        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
   }
 
   test_PrefixedIdentifier_field() async {
@@ -85,7 +85,8 @@
   test_PrefixedIdentifier_field_inPart() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     newFile('/project/bin/myLib.dart',
-        content: 'library L; part "$testFile"; class A {static int s2;}');
+        content:
+            'library L; part "${convertPathForImport(testFile)}"; class A {static int s2;}');
     addTestFile('part of L; foo() {A.^}');
     await getSuggestionsWith({
       'L.A': ['s2']
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index 3f38e82..f0c3285 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -198,6 +198,7 @@
   CompletionSuggestion assertSuggestConstructor(String name,
       {int relevance: DART_RELEVANCE_DEFAULT,
       String importUri,
+      String elementName,
       int elemOffset,
       String defaultArgListString: _UNCHECKED,
       List<int> defaultArgumentListTextRanges}) {
@@ -211,7 +212,8 @@
     expect(element, isNotNull);
     expect(element.kind, equals(ElementKind.CONSTRUCTOR));
     int index = name.indexOf('.');
-    expect(element.name, index >= 0 ? name.substring(index + 1) : '');
+    elementName ??= index >= 0 ? name.substring(index + 1) : '';
+    expect(element.name, elementName);
     return cs;
   }
 
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
index ef82b02..d0717e8 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
@@ -41,7 +41,7 @@
     addSource('/libB.dart', '''
 library libB;
 import "/libA.dart" as foo;
-part '$testFile';
+part '${convertPathForImport(testFile)}';
 ''');
     addTestSource('part of libB; main() {^}');
 
diff --git a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
index 66268e1..9c62da3 100644
--- a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
@@ -1849,6 +1849,33 @@
     assertNotSuggested('two');
   }
 
+  test_enum_filter() async {
+    addSource('/a.dart', '''
+enum E { one, two }
+enum F { three, four }
+''');
+    addTestSource('''
+import 'a.dart';
+
+void foo({E e}) {}
+
+main() {
+  foo(e: ^);
+}
+''');
+    await computeSuggestions();
+
+    assertSuggestEnum('E');
+    assertSuggestEnumConst('E.one',
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
+    assertSuggestEnumConst('E.two',
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
+
+    assertSuggestEnum('F');
+    assertSuggestEnumConst('F.three');
+    assertSuggestEnumConst('F.four');
+  }
+
   test_ExpressionStatement_identifier() async {
     // SimpleIdentifier  ExpressionStatement  Block
     resolveSource('/testA.dart', '''
@@ -2381,6 +2408,36 @@
     assertNotSuggested('int');
   }
 
+  test_implicitCreation() async {
+    configurePreviewDart2();
+    addSource('/a.dart', '''
+class A {
+  A.a1();
+  A.a2();
+}
+class B {
+  B.b1();
+  B.b2();
+}
+''');
+    addTestSource('''
+import 'a.dart';
+
+main() {
+  ^;
+}
+''');
+    await computeSuggestions();
+
+    assertSuggestClass('A');
+    assertSuggestConstructor('A.a1');
+    assertSuggestConstructor('A.a2');
+
+    assertSuggestClass('B');
+    assertSuggestConstructor('B.b1');
+    assertSuggestConstructor('B.b2');
+  }
+
   test_ImportDirective_dart() async {
     // SimpleStringLiteral  ImportDirective
     addTestSource('''
@@ -2524,6 +2581,35 @@
     assertNotSuggested('A');
   }
 
+  test_InstanceCreationExpression_filter() async {
+    configurePreviewDart2();
+    addSource('/a.dart', '''
+class A {}
+class B extends A {}
+class C implements A {}
+class D {}
+''');
+    addTestSource('''
+import 'a.dart';
+
+main() {
+  A a = new ^
+}
+''');
+    await computeSuggestions();
+
+    assertSuggestConstructor('A',
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
+    assertSuggestConstructor('B',
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
+    assertSuggestConstructor('C',
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
+    assertNotSuggested('D');
+  }
+
   test_InstanceCreationExpression_imported() async {
     // SimpleIdentifier  TypeName  ConstructorName  InstanceCreationExpression
     addSource('/testA.dart', '''
diff --git a/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
index 2c49eca..9679580 100644
--- a/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
@@ -91,7 +91,7 @@
     addSource(libFile, '''
         library testA;
         import "dart:async" deferred as bar;
-        part "$testFile";''');
+        part "${convertPathForImport(testFile)}";''');
     addTestSource('part of testA; foo() {bar.^}');
     // Assume that libraries containing has been computed for part files
     await computeLibrariesContaining();
@@ -105,10 +105,11 @@
     addSource('/libA.dart', 'library libA; class A { }');
     addSource('/libB.dart', '''
         library libB;
-        export "/libA.dart";
+        export "${convertPathForImport("/libA.dart")}";
         class B { }
         @deprecated class B1 { }''');
-    addTestSource('import "/libB.dart" as foo; main() {foo.^} class C { }');
+    addTestSource(
+        'import "${convertPathForImport("/libB.dart")}" as foo; main() {foo.^} class C { }');
     await computeSuggestions();
     assertSuggestClass('B');
     assertSuggestClass('B1', relevance: DART_RELEVANCE_LOW, isDeprecated: true);
@@ -124,7 +125,7 @@
         class X { }
         class Y { }''');
     addTestSource('''
-        import "/testB.dart" as b;
+        import "${convertPathForImport("/testB.dart")}" as b;
         var T2;
         class A { }
         main() {b.^}''');
@@ -151,8 +152,8 @@
         class Y { }''');
     addSource(libFile, '''
         library testA;
-        import "/testB.dart" as b;
-        part "$testFile";
+        import "${convertPathForImport("/testB.dart")}" as b;
+        part "${convertPathForImport(testFile)}";
         var T2;
         class A { }''');
     addTestSource('''
@@ -181,7 +182,7 @@
         class X { }
         class Y { }''');
     addTestSource('''
-        import "/testB.dart" as b;
+        import "${convertPathForImport("/testB.dart")}" as b;
         var T2;
         class A { }
         foo(b.^ f) {}''');
@@ -206,7 +207,7 @@
         class X { }
         class Y { }''');
     addTestSource('''
-        import "/testB.dart" as b;
+        import "${convertPathForImport("/testB.dart")}" as b;
         var T2;
         class A { }
         foo(b.^) {}''');
@@ -231,7 +232,7 @@
         class X extends _W {}
         class M{}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport("/testB.dart")}";
         foo(X x) {x.^}''');
     await computeSuggestions();
     assertNoSuggestions();
@@ -243,7 +244,7 @@
         class A {static int bar = 10;}
         _B() {}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport("/testA.dart")}";
         class X {foo(){A^.bar}}''');
     await computeSuggestions();
     assertNoSuggestions();
diff --git a/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart
index 3343e5e..ff859fe 100644
--- a/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart
@@ -297,9 +297,9 @@
 class C {C.bar({boo: 'hoo', int z: 0}) { } }''');
     addSource('/testB.dart', '''
 library testB;
-import "/testA.dart" as t;
+import "${convertPathForImport("/testA.dart")}" as t;
 import "dart:math" as math;
-part "$testFile"
+part "${convertPathForImport(testFile)}"
 main() {new ^ String x = "hello";}''');
     addTestSource('''
 part of testB;
diff --git a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
index 17d3cef..8f42b69 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
@@ -2330,11 +2330,13 @@
 
     assertSuggestConstructor('A',
         elemOffset: -1,
-        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
     assertSuggestConstructor('B',
-        elemOffset: -1, relevance: DART_RELEVANCE_DEFAULT);
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     assertSuggestConstructor('C',
-        elemOffset: -1, relevance: DART_RELEVANCE_DEFAULT);
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     assertNotSuggested('D');
   }
 
@@ -2349,11 +2351,13 @@
 
     assertSuggestConstructor('A',
         elemOffset: -1,
-        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
     assertSuggestConstructor('B',
-        elemOffset: -1, relevance: DART_RELEVANCE_DEFAULT);
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     assertSuggestConstructor('C',
-        elemOffset: -1, relevance: DART_RELEVANCE_DEFAULT);
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     assertNotSuggested('D');
   }
 
@@ -2399,8 +2403,10 @@
 
     assertSuggestConstructor('A',
         elemOffset: -1,
-        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
-    assertSuggestConstructor('B', elemOffset: -1);
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
+    assertSuggestConstructor('B',
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     assertNotSuggested('C');
   }
 
@@ -2415,8 +2421,10 @@
 
     assertSuggestConstructor('A',
         elemOffset: -1,
-        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
-    assertSuggestConstructor('B', elemOffset: -1);
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
+    assertSuggestConstructor('B',
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     assertNotSuggested('C');
   }
 
@@ -2442,11 +2450,13 @@
 
     assertSuggestConstructor('A',
         elemOffset: -1,
-        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
     assertSuggestConstructor('B',
-        elemOffset: -1, relevance: DART_RELEVANCE_DEFAULT);
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     assertSuggestConstructor('C',
-        elemOffset: -1, relevance: DART_RELEVANCE_DEFAULT);
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     assertNotSuggested('D');
   }
 
@@ -2460,11 +2470,13 @@
 
     assertSuggestConstructor('A',
         elemOffset: -1,
-        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
     assertSuggestConstructor('B',
-        elemOffset: -1, relevance: DART_RELEVANCE_DEFAULT);
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     assertSuggestConstructor('C',
-        elemOffset: -1, relevance: DART_RELEVANCE_DEFAULT);
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     assertNotSuggested('D');
   }
 
diff --git a/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
index 9d776dc..abe72fc 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
@@ -31,8 +31,8 @@
         class X {X.c(); X._d(); z() {}}''');
     addSource('/testA.dart', '''
         library libA;
-        import "/testB.dart";
-        part "$testFile";
+        import "${convertPathForImport("/testB.dart")}";
+        part "${convertPathForImport(testFile)}";
         class A { }
         var m;''');
     addTestSource('''
@@ -69,8 +69,8 @@
         class B { }''');
     addTestSource('''
         library libA;
-        import "/testB.dart";
-        part "/testA.dart";
+        import "${convertPathForImport("/testB.dart")}";
+        part "${convertPathForImport("/testA.dart")}";
         class A { A({String boo: 'hoo'}) { } }
         main() {new ^}
         var m;''');
@@ -105,8 +105,8 @@
         ''');
     addTestSource('''
         library libA;
-        import "/testB.dart";
-        part "/testA.dart";
+        import "${convertPathForImport("/testB.dart")}";
+        part "${convertPathForImport("/testA.dart")}";
         class Local { }
         main() {
           A a;
@@ -121,11 +121,13 @@
     // A is suggested with a higher relevance
     assertSuggestConstructor('A',
         elemOffset: -1,
-        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
     assertSuggestConstructor('B',
-        elemOffset: -1, relevance: DART_RELEVANCE_DEFAULT);
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     assertSuggestConstructor('C',
-        elemOffset: -1, relevance: DART_RELEVANCE_DEFAULT);
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     // D is sorted out
     assertNotSuggested('D');
 
@@ -156,8 +158,8 @@
         ''');
     addTestSource('''
         library libA;
-        import "/testB.dart";
-        part "/testA.dart";
+        import "${convertPathForImport("/testB.dart")}";
+        part "${convertPathForImport("/testA.dart")}";
         class Local { }
         main() {
           A a = new ^
@@ -170,11 +172,13 @@
     // A is suggested with a higher relevance
     assertSuggestConstructor('A',
         elemOffset: -1,
-        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
     assertSuggestConstructor('B',
-        elemOffset: -1, relevance: DART_RELEVANCE_DEFAULT);
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     assertSuggestConstructor('C',
-        elemOffset: -1, relevance: DART_RELEVANCE_DEFAULT);
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_SUBTYPE);
     // D is sorted out
     assertNotSuggested('D');
 
@@ -200,8 +204,8 @@
         class X {X.c(); X._d(); z() {}}''');
     addSource('/testA.dart', '''
         library libA;
-        import "/testB.dart";
-        part "$testFile";
+        import "${convertPathForImport("/testB.dart")}";
+        part "${convertPathForImport(testFile)}";
         class A { var a1; a2(){}}
         var m;
         typedef t1(int blue);
@@ -249,8 +253,8 @@
         var n;''');
     addTestSource('''
         library libA;
-        import "/testB.dart";
-        part "/testA.dart";
+        import "${convertPathForImport("/testB.dart")}";
+        part "${convertPathForImport("/testA.dart")}";
         class A { A({String boo: 'hoo'}) { } }
         main() {^}
         var m;''');
diff --git a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
index 64f561f..8650537 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
@@ -135,7 +135,7 @@
 bool hasLength(int expected) { }
 void baz() { }''');
     addTestSource('''
-import '/libA.dart';
+import "${convertPathForImport('/libA.dart')}";
 class B { }
 String bar() => true;
 void main() {expect(^)}''');
@@ -163,7 +163,7 @@
 expect(arg) { }
 void baz() { }''');
     addTestSource('''
-import '/libA.dart'
+import "${convertPathForImport('/libA.dart')}"
 class B { }
 String bar() => true;
 void main() {expect(^)}''');
@@ -192,7 +192,7 @@
 void baz() { }''');
     addTestSource('''
 import 'dart:async';
-import '/libA.dart';
+import "${convertPathForImport('/libA.dart')}";
 class B { }
 String bar() => true;
 void main() {new A(^)}''');
@@ -224,7 +224,7 @@
 void baz() { }''');
     addTestSource('''
 import 'dart:async';
-import '/libA.dart';
+import "${convertPathForImport('/libA.dart')}";
 class B { }
 String bar() => true;
 void main() {new A(^)}''');
@@ -253,7 +253,7 @@
 bool hasLength(int expected) { }
 void baz() { }''');
     addTestSource('''
-import '/libA.dart'
+import "${convertPathForImport('/libA.dart')}"
 expect(arg) { }
 class B { }
 String bar() => true;
@@ -281,7 +281,7 @@
 bool hasLength(int expected) { }
 void baz() { }''');
     addTestSource('''
-import '/libA.dart'
+import "${convertPathForImport('/libA.dart')}"
 class B {
   expect(arg) { }
   void foo() {expect(^)}}
@@ -311,7 +311,7 @@
 void baz() { }''');
     addTestSource('''
 import 'dart:async';
-import '/libA.dart';
+import "${convertPathForImport('/libA.dart')}";
 class B { }
 String bar(f()) => true;
 void main() {boo(){} bar(^);}''');
@@ -345,7 +345,7 @@
 void baz() { }''');
     addTestSource('''
 import 'dart:async';
-import '/libA.dart';
+import "${convertPathForImport('/libA.dart')}";
 class B { }
 String bar({inc()}) => true;
 void main() {boo(){} bar(inc: ^);}''');
@@ -356,10 +356,12 @@
     assertNoSuggestions(kind: CompletionSuggestionKind.ARGUMENT_LIST);
     assertSuggestFunction('bar', 'String',
         kind: CompletionSuggestionKind.IDENTIFIER,
-        relevance: DART_RELEVANCE_LOCAL_FUNCTION + DART_RELEVANCE_INCREMENT);
+        relevance:
+            DART_RELEVANCE_LOCAL_FUNCTION + DART_RELEVANCE_BOOST_SUBTYPE);
     assertSuggestFunction('boo', 'dynamic',
         kind: CompletionSuggestionKind.IDENTIFIER,
-        relevance: DART_RELEVANCE_LOCAL_FUNCTION + DART_RELEVANCE_INCREMENT);
+        relevance:
+            DART_RELEVANCE_LOCAL_FUNCTION + DART_RELEVANCE_BOOST_SUBTYPE);
     assertNotSuggested('hasLength');
     assertNotSuggested('identical');
     assertSuggestClass('B', kind: CompletionSuggestionKind.IDENTIFIER);
@@ -379,7 +381,7 @@
 void baz() { }''');
     addTestSource('''
 import 'dart:async';
-import '/libA.dart';
+import "${convertPathForImport('/libA.dart')}";
 class B { String bar(f()) => true; }
 void main() {new B().bar(^);}''');
     await computeSuggestions();
@@ -407,7 +409,7 @@
 }
 ''');
     addTestSource('''
-import '/libA.dart';
+import "${convertPathForImport('/libA.dart')}";
 
 class PageState {
   void _incrementCounter() { }
@@ -433,7 +435,7 @@
 library A;
 bool hasLength(int expected) { }''');
     addTestSource('''
-import '/libA.dart'
+import "${convertPathForImport('/libA.dart')}"
 String bar() => true;
 void main() {expect(foo: ^)}''');
     await computeSuggestions();
@@ -469,14 +471,14 @@
     expect(replacementOffset, completionOffset);
     expect(replacementLength, 0);
     assertSuggestTopLevelVar('a', 'A',
-        relevance:
-            DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE + DART_RELEVANCE_INCREMENT);
+        relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE +
+            DART_RELEVANCE_BOOST_TYPE);
     assertSuggestTopLevelVar('b', 'B',
-        relevance:
-            DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE + DART_RELEVANCE_INCREMENT);
+        relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE +
+            DART_RELEVANCE_BOOST_SUBTYPE);
     assertSuggestTopLevelVar('c', 'C',
-        relevance:
-            DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE + DART_RELEVANCE_INCREMENT);
+        relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE +
+            DART_RELEVANCE_BOOST_SUBTYPE);
     assertSuggestTopLevelVar('d', 'D',
         relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE);
     assertSuggestTopLevelVar('e', 'E',
@@ -492,7 +494,7 @@
 }
 ''');
     addTestSource('''
-import '/libA.dart';
+import "${convertPathForImport('/libA.dart')}";
 
 class PageState {
   void _incrementCounter() { }
@@ -520,7 +522,7 @@
 }
 ''');
     addTestSource('''
-import '/libA.dart';
+import "${convertPathForImport('/libA.dart')}";
 
 class PageState {
   void _incrementCounter() { }
@@ -548,7 +550,7 @@
 }
 ''');
     addTestSource('''
-import '/libA.dart';
+import "${convertPathForImport('/libA.dart')}";
 
 class PageState {
   void _incrementCounter() { }
@@ -801,7 +803,8 @@
 
     expect(replacementOffset, completionOffset);
     expect(replacementLength, 0);
-    assertSuggestLocalVariable('a', 'int');
+    assertSuggestLocalVariable('a', 'int',
+        relevance: DART_RELEVANCE_LOCAL_VARIABLE + DART_RELEVANCE_BOOST_TYPE);
     assertNotSuggested('Object');
     assertNotSuggested('b');
     assertNotSuggested('==');
@@ -828,10 +831,10 @@
 int T3;
 var _T4;'''); // not imported
     addTestSource('''
-import "/testAB.dart";
-import "/testCD.dart" hide D;
-import "/testEEF.dart" show EE;
-import "/testG.dart" as g;
+import "${convertPathForImport("/testAB.dart")}";
+import "${convertPathForImport("/testCD.dart")}" hide D;
+import "${convertPathForImport("/testEEF.dart")}" show EE;
+import "${convertPathForImport("/testG.dart")}" as g;
 int T5;
 var _T6;
 String get T7 => 'hello';
@@ -926,10 +929,10 @@
 int T3;
 var _T4;'''); // not imported
     addTestSource('''
-import "/testAB.dart";
-import "/testCD.dart" hide D;
-import "/testEEF.dart" show EE;
-import "/testG.dart" as g;
+import "${convertPathForImport("/testAB.dart")}";
+import "${convertPathForImport("/testCD.dart")}" hide D;
+import "${convertPathForImport("/testEEF.dart")}" show EE;
+import "${convertPathForImport("/testG.dart")}" as g;
 int T5;
 var _T6;
 String get T7 => 'hello';
@@ -1039,10 +1042,10 @@
 int T3;
 var _T4;'''); // not imported
     addTestSource('''
-import "/testAB.dart";
-import "/testCD.dart" hide D;
-import "/testEEF.dart" show EE;
-import "/testG.dart" as g;
+import "${convertPathForImport("/testAB.dart")}";
+import "${convertPathForImport("/testCD.dart")}" hide D;
+import "${convertPathForImport("/testEEF.dart")}" show EE;
+import "${convertPathForImport("/testG.dart")}" as g;
 int T5;
 var _T6;
 String get T7 => 'hello';
@@ -1138,10 +1141,10 @@
 int T3;
 var _T4;'''); // not imported
     addTestSource('''
-import "/testAB.dart";
-import "/testCD.dart" hide D;
-import "/testEEF.dart" show EE;
-import "/testG.dart" as g;
+import "${convertPathForImport("/testAB.dart")}";
+import "${convertPathForImport("/testCD.dart")}" hide D;
+import "${convertPathForImport("/testEEF.dart")}" show EE;
+import "${convertPathForImport("/testG.dart")}" as g;
 int T5;
 var _T6;
 String get T7 => 'hello';
@@ -1237,10 +1240,10 @@
 int T3;
 var _T4;'''); // not imported
     addTestSource('''
-import "/testAB.dart";
-import "/testCD.dart" hide D;
-import "/testEEF.dart" show EE;
-import "/testG.dart" as g;
+import "${convertPathForImport("/testAB.dart")}";
+import "${convertPathForImport("/testCD.dart")}" hide D;
+import "${convertPathForImport("/testEEF.dart")}" show EE;
+import "${convertPathForImport("/testG.dart")}" as g;
 int T5;
 var _T6;
 Z D2() {int x;}
@@ -1304,7 +1307,7 @@
 class I { int i1; i2() { } }
 class M { var m1; int m2() { } }''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 class A extends E implements I with M {a() {^}}''');
     await computeSuggestions();
 
@@ -1370,10 +1373,10 @@
 int T3;
 var _T4;'''); // not imported
     addTestSource('''
-import "/testAB.dart";
-import "/testCD.dart" hide D;
-import "/testEEF.dart" show EE;
-import "/testG.dart" as g;
+import "${convertPathForImport("/testAB.dart")}";
+import "${convertPathForImport("/testCD.dart")}" hide D;
+import "${convertPathForImport("/testEEF.dart")}" show EE;
+import "${convertPathForImport("/testG.dart")}" as g;
 int T5;
 var _T6;
 String get T7 => 'hello';
@@ -1422,7 +1425,7 @@
     addSource('/testB.dart', '''
 class B { }''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 class A {var b; X _c;}
 class X{}
 // looks like a cascade to the parser
@@ -1447,7 +1450,7 @@
     addSource('/testB.dart', '''
 class B { }''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 class A {var b; X _c;}
 class X{}
 main() {A a; a..^z}''');
@@ -1470,7 +1473,7 @@
     addSource('/testB.dart', '''
 class B { }''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 class A {var b; X _c;}
 class X{}
 main() {A a; a..^ return}''');
@@ -1711,8 +1714,8 @@
 class C { }
 class D { }''');
     addTestSource('''
-import "/testAB.dart" hide ^;
-import "/testCD.dart";
+import "${convertPathForImport("/testAB.dart")}" hide ^;
+import "${convertPathForImport("/testCD.dart")}";
 class X {}''');
     await computeSuggestions();
 
@@ -1737,8 +1740,8 @@
 class C { }
 class D { }''');
     addTestSource('''
-import "/testAB.dart" show ^;
-import "/testCD.dart";
+import "${convertPathForImport("/testAB.dart")}" show ^;
+import "${convertPathForImport("/testCD.dart")}";
 class X {}''');
     await computeSuggestions();
 
@@ -1752,7 +1755,7 @@
 F1() { }
 class A {int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 class B {int x;}
@@ -1773,7 +1776,7 @@
 F1() { }
 class A {int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 class B {int x;}
@@ -1801,7 +1804,7 @@
 F1() { }
 class A {int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 class B {int x;}
@@ -1822,7 +1825,7 @@
 F1() { }
 class A {int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 class B {int x;}
@@ -1850,7 +1853,7 @@
 F1() { }
 class A {int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 class B {int x;}
@@ -1908,7 +1911,7 @@
 F1() { }
 class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 var m;
 main() {new X.^}''');
     await computeSuggestions();
@@ -1933,7 +1936,7 @@
 F1() { }
 class X {factory X.c(); factory X._d(); z() {}}''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 var m;
 main() {new X.^}''');
     await computeSuggestions();
@@ -2152,29 +2155,27 @@
   }
 
   test_enum_filter() async {
-    // SimpleIdentifier  NamedExpression  ArgumentList
-    // InstanceCreationExpression
     addTestSource('''
-        enum E { one, two }
-        enum F { three, four }
-        class A {}
-        class B {
-          B({E someE});
-        }
-        A a = new A();
-        B b = new B(someE: ^);
-  ''');
+enum E { one, two }
+enum F { three, four }
+
+void foo({E e}) {}
+
+main() {
+  foo(e: ^);
+}
+''');
     await computeSuggestions();
 
-    expect(replacementOffset, completionOffset);
-    expect(replacementLength, 0);
+    assertSuggestEnum('E');
     assertSuggestEnumConst('E.one',
-        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
     assertSuggestEnumConst('E.two',
-        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
-    assertNotSuggested('a');
-    assertNotSuggested('F.three');
-    assertNotSuggested('F.four');
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
+
+    assertSuggestEnum('F');
+    assertSuggestEnumConst('F.three');
+    assertSuggestEnumConst('F.four');
   }
 
   test_ExpressionStatement_identifier() async {
@@ -2184,7 +2185,7 @@
 class A {int x;}
 class _B { }''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 typedef int F2(int blat);
 class Clz = Object with Object;
 class C {foo(){^} void bar() {}}''');
@@ -2212,7 +2213,7 @@
         B T1;
         class B{}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport("/testA.dart")}";
         class C {a() {C ^}}''');
     await computeSuggestions();
 
@@ -2224,7 +2225,7 @@
     // FieldDeclaration
     addSource('/testA.dart', 'class A { }');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport("/testA.dart")}";
         class C {A ^}''');
     await computeSuggestions();
 
@@ -2236,7 +2237,7 @@
     // FieldDeclaration
     addSource('/testA.dart', 'class A { }');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport("/testA.dart")}";
         class C {var ^}''');
     await computeSuggestions();
 
@@ -2551,7 +2552,7 @@
 typedef D1();
 class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 typedef D2();
@@ -2581,7 +2582,7 @@
 typedef D1();
 class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 typedef D2();
@@ -2611,7 +2612,7 @@
 typedef D1();
 class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 typedef D2();
@@ -2774,7 +2775,7 @@
 F1() { }
 class A {int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 class B {int x;}
@@ -2802,7 +2803,7 @@
 F1() { }
 class A {int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 class B {int x;}
@@ -2834,7 +2835,7 @@
 F1() { }
 class A {A(this.x) { } int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 import "dart:async";
 int T2;
 F2() { }
@@ -2879,7 +2880,7 @@
 typedef D1();
 class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 typedef D2();
@@ -2910,7 +2911,7 @@
 typedef D1();
 class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 typedef D2();
@@ -2982,7 +2983,7 @@
 foo() { }
 class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 class Y {Y.c(); Y._d(); z() {}}
 main() {var x; if (x is ^) { }}''');
     await computeSuggestions();
@@ -3099,7 +3100,7 @@
 nowIsIt() { }
 class X {factory X.c(); factory X._d(); z() {}}''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 String newer() {}
 var m;
 main() {new^ X.c();}''');
@@ -3162,7 +3163,7 @@
 typedef D1();
 class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 typedef D2();
@@ -3192,7 +3193,7 @@
 typedef D1();
 class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 typedef D2();
@@ -3215,7 +3216,7 @@
 typedef D1();
 class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 typedef D2();
@@ -3344,7 +3345,7 @@
   static c3() {}
   static var c4;}''');
     addTestSource('''
-import "/testC.dart";
+import "${convertPathForImport("/testC.dart")}";
 class B extends C {
   b1() {}
   var b2;
@@ -3484,7 +3485,7 @@
 typedef D1();
 class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 typedef D2();
@@ -3513,7 +3514,7 @@
 typedef D1();
 class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 typedef D2();
@@ -3542,7 +3543,7 @@
 typedef D1();
 class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 typedef D2();
@@ -3571,7 +3572,7 @@
 typedef D1();
 class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 int T2;
 F2() { }
 typedef D2();
@@ -3680,7 +3681,7 @@
 class X {X.c(); X._d(); z() {}}''');
     addSource('/testA.dart', '''
 library libA;
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 part "$testFile";
 class A { }
 var m;''');
@@ -3717,7 +3718,7 @@
 class B { }''');
     addTestSource('''
 library libA;
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 part "/testA.dart";
 class A { A({String boo: 'hoo'}) { } }
 main() {new ^}
@@ -3756,7 +3757,7 @@
   m(X x) {} I _n(X x) {}}
 class X{}''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 class A extends B {
   static const String scA = 'foo';
   w() { }}
@@ -3800,7 +3801,7 @@
   m(X x) {} I _n(X x) {}}
 class X{}''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 main() {A a; a.^}''');
     await computeSuggestions();
 
@@ -3874,7 +3875,7 @@
 class X { }
 class Y { }''');
     addTestSource('''
-import "/testB.dart" as b;
+import "${convertPathForImport("/testB.dart")}" as b;
 var T2;
 class A { }
 main() {b.^}''');
@@ -3901,7 +3902,7 @@
 class X { }
 class Y { }''');
     addTestSource('''
-import "/testB.dart" as b;
+import "${convertPathForImport("/testB.dart")}" as b;
 var T2;
 class A { }
 foo(b.^ f) {}''');
@@ -3928,7 +3929,7 @@
 class X { }
 class Y { }''');
     addTestSource('''
-import "/testB.dart" as b;
+import "${convertPathForImport("/testB.dart")}" as b;
 var T2;
 class A { }
 foo(b.^) {}''');
@@ -3955,7 +3956,7 @@
 class X extends _W {}
 class M{}''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 foo(X x) {x.^}''');
     await computeSuggestions();
 
@@ -3972,7 +3973,7 @@
 class A {static int bar = 10;}
 _B() {}''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport("/testA.dart")}";
 class X {foo(){A^.bar}}''');
     await computeSuggestions();
 
@@ -4458,7 +4459,7 @@
 F1() => 0;
 typedef String T1(int blat);''');
     addTestSource('''
-import "/testA.dart";'
+import "${convertPathForImport("/testA.dart")}";'
 class C2 {int x;}
 F2() => 0;
 typedef int T2(int blat);
@@ -4484,7 +4485,7 @@
 F1() => 0;
 typedef String T1(int blat);''');
     addTestSource('''
-import "/testA.dart";'
+import "${convertPathForImport("/testA.dart")}";'
 class C2 {int x;}
 F2() => 0;
 typedef int T2(int blat);
@@ -4507,7 +4508,7 @@
 class _B { }
 class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 class Y {Y.c(); Y._d(); z() {}}
 main() {var ^}''');
     await computeSuggestions();
@@ -4534,7 +4535,7 @@
 class _B { }
 class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 class Y {Y.c(); Y._d(); z() {}}
 class C {bar(){var f; {var x;} var e = ^}}''');
     await computeSuggestions();
@@ -4560,7 +4561,7 @@
 class _B { }
 class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport("/testB.dart")}";
 foo2() { }
 void bar2() { }
 class Y {Y.c(); Y._d(); z() {}}
diff --git a/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
index f753d8a..499eb2b 100644
--- a/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
@@ -51,7 +51,7 @@
         F1() { }
         class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport("/testB.dart")}";
         var m;
         main() {new X.^}''');
 
@@ -75,7 +75,7 @@
         F1() { }
         class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport("/testB.dart")}";
         var m;
         main() {new X.^}''');
     // Assume that imported libraries are NOT resolved
@@ -100,7 +100,7 @@
         F1() { }
         class X {factory X.c(); factory X._d(); z() {}}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport("/testB.dart")}";
         var m;
         main() {new X.^}''');
 
diff --git a/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
index 1c37c8f..9b27990 100644
--- a/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
@@ -38,46 +38,65 @@
 }
 ''');
     await computeSuggestions();
-    _assertOverride('''@override
+    _assertOverride('''
+@override
   A suggested1(int x) {
     // TODO: implement suggested1
     return super.suggested1(x);
   }''',
         displayText: 'suggested1(int x) { … }',
-        selectionOffset: 74,
+        selectionOffset: 72,
         selectionLength: 27);
-    _assertOverride(
-        '''@override\n  A suggested1(int x) {\n    // TODO: implement suggested1\n    return super.suggested1(x);\n  }''',
+    _assertOverride('''
+@override
+  A suggested1(int x) {
+    // TODO: implement suggested1
+    return super.suggested1(x);
+  }''',
         displayText: 'suggested1(int x) { … }',
-        selectionOffset: 74,
+        selectionOffset: 72,
         selectionLength: 27);
-    _assertOverride(
-        '''@override\n  B suggested2(String y) {\n    // TODO: implement suggested2\n    return super.suggested2(y);\n  }''',
+    _assertOverride('''
+@override
+  B suggested2(String y) {
+    // TODO: implement suggested2
+    return super.suggested2(y);
+  }''',
         displayText: 'suggested2(String y) { … }',
+        selectionOffset: 75,
+        selectionLength: 27);
+    _assertOverride('''
+@override
+  C suggested3([String z]) {
+    // TODO: implement suggested3
+    return super.suggested3(z);
+  }''',
+        displayText: 'suggested3([String z]) { … }',
         selectionOffset: 77,
         selectionLength: 27);
-    _assertOverride(
-        '''@override\n  C suggested3([String z]) {\n    // TODO: implement suggested3\n    return super.suggested3(z);\n  }''',
-        displayText: 'suggested3([String z]) { … }',
-        selectionOffset: 79,
-        selectionLength: 27);
-    _assertOverride(
-        '''@override\n  void suggested4() {\n    // TODO: implement suggested4\n    super.suggested4();\n  }''',
+    _assertOverride('''
+@override
+  void suggested4() {
+    // TODO: implement suggested4
+    super.suggested4();
+  }''',
         displayText: 'suggested4() { … }',
-        selectionOffset: 72,
+        selectionOffset: 70,
         selectionLength: 19);
-    _assertOverride(
-        '''@override\n  // TODO: implement suggested5\n  int get suggested5 => super.suggested5;''',
+    _assertOverride('''
+@override
+  // TODO: implement suggested5
+  int get suggested5 => super.suggested5;''',
         displayText: 'suggested5 => …',
-        selectionOffset: 68,
+        selectionOffset: 66,
         selectionLength: 16);
   }
 
   test_fromPart() async {
     addSource('/myLib.dart', '''
 library myLib;
-part '$testFile'
-part '/otherPart.dart'
+part '${convertPathForImport(testFile)}'
+part '${convertPathForImport('/otherPart.dart')}'
 class A {
   A suggested1(int x) => null;
   B suggested2(String y) => null;
@@ -99,26 +118,62 @@
     // assume information for context.getLibrariesContaining has been cached
     await computeLibrariesContaining();
     await computeSuggestions();
-    _assertOverride('''@override
+    _assertOverride('''
+@override
   A suggested1(int x) {
     // TODO: implement suggested1
     return super.suggested1(x);
   }''', displayText: 'suggested1(int x) { … }');
-    _assertOverride(
-        '''@override\n  A suggested1(int x) {\n    // TODO: implement suggested1\n    return super.suggested1(x);\n  }''',
+    _assertOverride('''
+@override
+  A suggested1(int x) {
+    // TODO: implement suggested1
+    return super.suggested1(x);
+  }''',
         displayText: 'suggested1(int x) { … }',
-        selectionOffset: 74,
+        selectionOffset: 72,
         selectionLength: 27);
-    _assertOverride(
-        '''@override\n  B suggested2(String y) {\n    // TODO: implement suggested2\n    return super.suggested2(y);\n  }''',
+    _assertOverride('''
+@override
+  B suggested2(String y) {
+    // TODO: implement suggested2
+    return super.suggested2(y);
+  }''',
         displayText: 'suggested2(String y) { … }',
+        selectionOffset: 75,
+        selectionLength: 27);
+    _assertOverride('''
+@override
+  C suggested3([String z]) {
+    // TODO: implement suggested3
+    return super.suggested3(z);
+  }''',
+        displayText: 'suggested3([String z]) { … }',
         selectionOffset: 77,
         selectionLength: 27);
-    _assertOverride(
-        '''@override\n  C suggested3([String z]) {\n    // TODO: implement suggested3\n    return super.suggested3(z);\n  }''',
-        displayText: 'suggested3([String z]) { … }',
-        selectionOffset: 79,
-        selectionLength: 27);
+  }
+
+  test_withExistingOverride() async {
+    addTestSource('''
+class A {
+  method() {}
+  int age;
+}
+
+class B extends A {
+  @override
+  meth^
+}
+''');
+    await computeSuggestions();
+    _assertOverride('''
+method() {
+    // TODO: implement method
+    return super.method();
+  }''',
+        displayText: 'method() { … }',
+        selectionOffset: 45,
+        selectionLength: 22);
   }
 
   CompletionSuggestion _assertOverride(String completion,
diff --git a/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
index da59376..2987710 100644
--- a/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
@@ -97,6 +97,27 @@
     assertSuggestField('values', 'List<E>', isDeprecated: true);
   }
 
+  test_implicitCreation() async {
+    configurePreviewDart2();
+    addSource('/a.dart', '''
+class A {
+  A.foo();
+  A.bar();
+}
+''');
+    addTestSource('''
+import 'a.dart';
+
+main() {
+  A.^;
+}
+''');
+    await computeSuggestions();
+
+    assertSuggestConstructor('foo', elementName: 'foo');
+    assertSuggestConstructor('bar', elementName: 'bar');
+  }
+
   test_keyword() async {
     addTestSource('class C { static C get instance => null; } main() {C.in^}');
     await computeSuggestions();
diff --git a/pkg/analysis_server/test/services/correction/assist_test.dart b/pkg/analysis_server/test/services/correction/assist_test.dart
index 4a49744..005f97e 100644
--- a/pkg/analysis_server/test/services/correction/assist_test.dart
+++ b/pkg/analysis_server/test/services/correction/assist_test.dart
@@ -465,7 +465,7 @@
     change = assist.change;
     // verify
     {
-      var testFileEdit = change.getFileEdit('/app.dart');
+      var testFileEdit = change.getFileEdit(convertPath('/app.dart'));
       var resultCode = SourceEdit.applySequence(appCode, testFileEdit.edits);
       expect(resultCode, '''
 library my_app;
@@ -476,7 +476,7 @@
 ''');
     }
     {
-      var testFileEdit = change.getFileEdit('/test.dart');
+      var testFileEdit = change.getFileEdit(convertPath('/test.dart'));
       var resultCode = SourceEdit.applySequence(testCode, testFileEdit.edits);
       expect(resultCode, '''
 part of my_app;
@@ -1195,6 +1195,138 @@
 ''');
   }
 
+  test_convertToDoubleQuotedString_BAD_one_embeddedTarget() async {
+    await resolveTestUnit('''
+main() {
+  print('a"b"c');
+}
+''');
+    await assertNoAssistAt(
+        "'a", DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING);
+  }
+
+  test_convertToDoubleQuotedString_BAD_one_enclosingTarget() async {
+    await resolveTestUnit('''
+main() {
+  print("abc");
+}
+''');
+    await assertNoAssistAt(
+        '"ab', DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING);
+  }
+
+  test_convertToDoubleQuotedString_BAD_three_embeddedTarget() async {
+    await resolveTestUnit("""
+main() {
+  print('''a""\"c''');
+}
+""");
+    await assertNoAssistAt(
+        "'a", DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING);
+  }
+
+  test_convertToDoubleQuotedString_BAD_three_enclosingTarget() async {
+    await resolveTestUnit('''
+main() {
+  print("""abc""");
+}
+''');
+    await assertNoAssistAt(
+        '"ab', DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING);
+  }
+
+  test_convertToDoubleQuotedString_OK_one_interpolation() async {
+    await resolveTestUnit(r'''
+main() {
+  var b = 'b';
+  var c = 'c';
+  print('a $b-${c} d');
+}
+''');
+    await assertHasAssistAt(
+        r"'a $b", DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING, r'''
+main() {
+  var b = 'b';
+  var c = 'c';
+  print("a $b-${c} d");
+}
+''');
+  }
+
+  test_convertToDoubleQuotedString_OK_one_raw() async {
+    await resolveTestUnit('''
+main() {
+  print(r'abc');
+}
+''');
+    await assertHasAssistAt(
+        "'ab", DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING, '''
+main() {
+  print(r"abc");
+}
+''');
+  }
+
+  test_convertToDoubleQuotedString_OK_one_simple() async {
+    await resolveTestUnit('''
+main() {
+  print('abc');
+}
+''');
+    await assertHasAssistAt(
+        "'ab", DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING, '''
+main() {
+  print("abc");
+}
+''');
+  }
+
+  test_convertToDoubleQuotedString_OK_three_interpolation() async {
+    await resolveTestUnit(r"""
+main() {
+  var b = 'b';
+  var c = 'c';
+  print('''a $b-${c} d''');
+}
+""");
+    await assertHasAssistAt(
+        r"'a $b", DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING, r'''
+main() {
+  var b = 'b';
+  var c = 'c';
+  print("""a $b-${c} d""");
+}
+''');
+  }
+
+  test_convertToDoubleQuotedString_OK_three_raw() async {
+    await resolveTestUnit("""
+main() {
+  print(r'''abc''');
+}
+""");
+    await assertHasAssistAt(
+        "'ab", DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING, '''
+main() {
+  print(r"""abc""");
+}
+''');
+  }
+
+  test_convertToDoubleQuotedString_OK_three_simple() async {
+    await resolveTestUnit("""
+main() {
+  print('''abc''');
+}
+""");
+    await assertHasAssistAt(
+        "'ab", DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING, '''
+main() {
+  print("""abc""");
+}
+''');
+  }
+
   test_convertToExpressionBody_BAD_already() async {
     await resolveTestUnit('''
 fff() => 42;
@@ -2236,6 +2368,138 @@
 ''');
   }
 
+  test_convertToSingleQuotedString_BAD_one_embeddedTarget() async {
+    await resolveTestUnit('''
+main() {
+  print("a'b'c");
+}
+''');
+    await assertNoAssistAt(
+        '"a', DartAssistKind.CONVERT_TO_SINGLE_QUOTED_STRING);
+  }
+
+  test_convertToSingleQuotedString_BAD_one_enclosingTarget() async {
+    await resolveTestUnit('''
+main() {
+  print('abc');
+}
+''');
+    await assertNoAssistAt(
+        "'ab", DartAssistKind.CONVERT_TO_SINGLE_QUOTED_STRING);
+  }
+
+  test_convertToSingleQuotedString_BAD_three_embeddedTarget() async {
+    await resolveTestUnit('''
+main() {
+  print("""a''\'bc""");
+}
+''');
+    await assertNoAssistAt(
+        '"a', DartAssistKind.CONVERT_TO_SINGLE_QUOTED_STRING);
+  }
+
+  test_convertToSingleQuotedString_BAD_three_enclosingTarget() async {
+    await resolveTestUnit("""
+main() {
+  print('''abc''');
+}
+""");
+    await assertNoAssistAt(
+        "'ab", DartAssistKind.CONVERT_TO_SINGLE_QUOTED_STRING);
+  }
+
+  test_convertToSingleQuotedString_OK_one_interpolation() async {
+    await resolveTestUnit(r'''
+main() {
+  var b = 'b';
+  var c = 'c';
+  print("a $b-${c} d");
+}
+''');
+    await assertHasAssistAt(
+        r'"a $b', DartAssistKind.CONVERT_TO_SINGLE_QUOTED_STRING, r'''
+main() {
+  var b = 'b';
+  var c = 'c';
+  print('a $b-${c} d');
+}
+''');
+  }
+
+  test_convertToSingleQuotedString_OK_one_raw() async {
+    await resolveTestUnit('''
+main() {
+  print(r"abc");
+}
+''');
+    await assertHasAssistAt(
+        '"ab', DartAssistKind.CONVERT_TO_SINGLE_QUOTED_STRING, '''
+main() {
+  print(r'abc');
+}
+''');
+  }
+
+  test_convertToSingleQuotedString_OK_one_simple() async {
+    await resolveTestUnit('''
+main() {
+  print("abc");
+}
+''');
+    await assertHasAssistAt(
+        '"ab', DartAssistKind.CONVERT_TO_SINGLE_QUOTED_STRING, '''
+main() {
+  print('abc');
+}
+''');
+  }
+
+  test_convertToSingleQuotedString_OK_three_interpolation() async {
+    await resolveTestUnit(r'''
+main() {
+  var b = 'b';
+  var c = 'c';
+  print("""a $b-${c} d""");
+}
+''');
+    await assertHasAssistAt(
+        r'"a $b', DartAssistKind.CONVERT_TO_SINGLE_QUOTED_STRING, r"""
+main() {
+  var b = 'b';
+  var c = 'c';
+  print('''a $b-${c} d''');
+}
+""");
+  }
+
+  test_convertToSingleQuotedString_OK_three_raw() async {
+    await resolveTestUnit('''
+main() {
+  print(r"""abc""");
+}
+''');
+    await assertHasAssistAt(
+        '"ab', DartAssistKind.CONVERT_TO_SINGLE_QUOTED_STRING, """
+main() {
+  print(r'''abc''');
+}
+""");
+  }
+
+  test_convertToSingleQuotedString_OK_three_simple() async {
+    await resolveTestUnit('''
+main() {
+  print("""abc""");
+}
+''');
+    await assertHasAssistAt(
+        '"ab', DartAssistKind.CONVERT_TO_SINGLE_QUOTED_STRING, """
+main() {
+  print('''abc''');
+}
+""");
+  }
+
   test_encapsulateField_BAD_alreadyPrivate() async {
     await resolveTestUnit('''
 class A {
@@ -2779,8 +3043,8 @@
   new Column(
     children: <Widget>[
       new Text('aaa'),
-      /*caret*/new Text('bbb'),
-      new Text('ccc'),
+      /*caret*/new Text('bbbbbb'),
+      new Text('ccccccccc'),
     ],
   );
 }
@@ -2792,12 +3056,13 @@
   new Column(
     children: <Widget>[
       new Text('aaa'),
-      /*caret*/new Text('ccc'),
-      new Text('bbb'),
+      /*caret*/new Text('ccccccccc'),
+      new Text('bbbbbb'),
     ],
   );
 }
 ''');
+    _assertExitPosition(before: "new Text('bbbbbb')");
   }
 
   test_flutterMoveWidgetUp_BAD_first() async {
@@ -2840,8 +3105,8 @@
   new Column(
     children: <Widget>[
       new Text('aaa'),
-      /*caret*/new Text('bbb'),
-      new Text('ccc'),
+      /*caret*/new Text('bbbbbb'),
+      new Text('ccccccccc'),
     ],
   );
 }
@@ -2852,13 +3117,14 @@
 main() {
   new Column(
     children: <Widget>[
-      new Text('bbb'),
+      new Text('bbbbbb'),
       /*caret*/new Text('aaa'),
-      new Text('ccc'),
+      new Text('ccccccccc'),
     ],
   );
 }
 ''');
+    _assertExitPosition(before: "new Text('bbbbbb')");
   }
 
   test_flutterRemoveWidget_BAD_childrenMultipleIntoChild() async {
@@ -3258,7 +3524,7 @@
   }
 
   test_flutterWrapCenter_OK_implicitNew() async {
-    _configurePreviewDart2();
+    configurePreviewDart2();
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -3352,7 +3618,7 @@
   }
 
   test_flutterWrapColumn_OK_implicitNew() async {
-    _configurePreviewDart2();
+    configurePreviewDart2();
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -5134,7 +5400,7 @@
 }
 ''');
     _assertLinkedGroup(change.linkedEditGroups[0], ['condition);']);
-    _assertExitPosition('condition);');
+    _assertExitPosition(after: 'condition);');
   }
 
   test_surroundWith_for() async {
@@ -5161,7 +5427,7 @@
     _assertLinkedGroup(change.linkedEditGroups[1], ['init;']);
     _assertLinkedGroup(change.linkedEditGroups[2], ['condition;']);
     _assertLinkedGroup(change.linkedEditGroups[3], ['increment']);
-    _assertExitPosition('  }');
+    _assertExitPosition(after: '  }');
   }
 
   test_surroundWith_forIn() async {
@@ -5186,7 +5452,7 @@
 ''');
     _assertLinkedGroup(change.linkedEditGroups[0], ['item']);
     _assertLinkedGroup(change.linkedEditGroups[1], ['iterable']);
-    _assertExitPosition('  }');
+    _assertExitPosition(after: '  }');
   }
 
   test_surroundWith_if() async {
@@ -5210,7 +5476,7 @@
 }
 ''');
     _assertLinkedGroup(change.linkedEditGroups[0], ['condition']);
-    _assertExitPosition('  }');
+    _assertExitPosition(after: '  }');
   }
 
   test_surroundWith_tryCatch() async {
@@ -5238,7 +5504,7 @@
     _assertLinkedGroup(change.linkedEditGroups[0], ['Exception']);
     _assertLinkedGroup(change.linkedEditGroups[1], ['e) {']);
     _assertLinkedGroup(change.linkedEditGroups[2], ['// TODO']);
-    _assertExitPosition('// TODO');
+    _assertExitPosition(after: '// TODO');
   }
 
   test_surroundWith_tryFinally() async {
@@ -5264,7 +5530,7 @@
 }
 ''');
     _assertLinkedGroup(change.linkedEditGroups[0], ['// TODO']);
-    _assertExitPosition('// TODO');
+    _assertExitPosition(after: '// TODO');
   }
 
   test_surroundWith_while() async {
@@ -5288,14 +5554,20 @@
 }
 ''');
     _assertLinkedGroup(change.linkedEditGroups[0], ['condition']);
-    _assertExitPosition('  }');
+    _assertExitPosition(after: '  }');
   }
 
-  void _assertExitPosition(String after) {
+  void _assertExitPosition({String before, String after}) {
     Position exitPosition = change.selection;
     expect(exitPosition, isNotNull);
     expect(exitPosition.file, testFile);
-    expect(exitPosition.offset, resultCode.indexOf(after) + after.length);
+    if (before != null) {
+      expect(exitPosition.offset, resultCode.indexOf(before));
+    } else if (after != null) {
+      expect(exitPosition.offset, resultCode.indexOf(after) + after.length);
+    } else {
+      fail("One of 'before' or 'after' expected.");
+    }
   }
 
   /**
@@ -5330,12 +5602,6 @@
     return await processor.compute();
   }
 
-  void _configurePreviewDart2() {
-    driver.configure(
-        analysisOptions: new AnalysisOptionsImpl.from(driver.analysisOptions)
-          ..previewDart2 = true);
-  }
-
   List<Position> _findResultPositions(List<String> searchStrings) {
     List<Position> positions = <Position>[];
     for (String search in searchStrings) {
diff --git a/pkg/analysis_server/test/services/correction/status_test.dart b/pkg/analysis_server/test/services/correction/status_test.dart
index 041ee1e..776fa14 100644
--- a/pkg/analysis_server/test/services/correction/status_test.dart
+++ b/pkg/analysis_server/test/services/correction/status_test.dart
@@ -29,7 +29,7 @@
     Element element = findElement('MyClass');
     // check
     Location location = newLocation_fromElement(element);
-    expect(location.file, '/test.dart');
+    expect(location.file, convertPath('/test.dart'));
     expect(location.offset, 6);
     expect(location.length, 7);
     expect(location.startLine, 1);
@@ -52,7 +52,7 @@
         sourceRange);
     // check
     Location location = newLocation_fromMatch(match);
-    expect(location.file, '/test.dart');
+    expect(location.file, convertPath('/test.dart'));
     expect(location.offset, sourceRange.offset);
     expect(location.length, sourceRange.length);
   }
@@ -65,7 +65,7 @@
     AstNode node = findNodeAtString('main');
     // check
     Location location = newLocation_fromNode(node);
-    expect(location.file, '/test.dart');
+    expect(location.file, convertPath('/test.dart'));
     expect(location.offset, node.offset);
     expect(location.length, node.length);
   }
@@ -75,7 +75,7 @@
     SourceRange sourceRange = new SourceRange(10, 20);
     // check
     Location location = newLocation_fromUnit(testUnit, sourceRange);
-    expect(location.file, '/test.dart');
+    expect(location.file, convertPath('/test.dart'));
     expect(location.offset, sourceRange.offset);
     expect(location.length, sourceRange.length);
   }
diff --git a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
index 090e1ea..2685442 100644
--- a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
+++ b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
@@ -56,7 +56,7 @@
    */
   void assertFileChangeResult(String path, String expectedCode) {
     // prepare FileEdit
-    SourceFileEdit fileEdit = refactoringChange.getFileEdit(path);
+    SourceFileEdit fileEdit = refactoringChange.getFileEdit(convertPath(path));
     expect(fileEdit, isNotNull, reason: 'No file edit for $path');
     // validate resulting code
     File file = getFile(path);
diff --git a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
index 6cbfdff..f248500 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
@@ -722,7 +722,7 @@
 }
 ''');
     await indexTestUnit('''
-import '$pkgLib';
+import '${convertPathForImport(pkgLib)}';
 class A {
   test() {}
 }
@@ -737,7 +737,7 @@
     refactoring.newName = 'newName';
     // validate change
     await assertSuccessfulRefactoring('''
-import '/.pub-cache/lib.dart';
+import '${convertPathForImport('/.pub-cache/lib.dart')}';
 class A {
   newName() {}
 }
diff --git a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
index 56dc78a..6285bbd 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
@@ -219,7 +219,7 @@
 class A {}
 ''');
     await indexTestUnit('''
-import '/.pub-cache/lib.dart';
+import "${convertPathForImport('/.pub-cache/lib.dart')}";
 main() {
   A a;
 }
@@ -238,7 +238,7 @@
 class A {}
 ''');
     await indexTestUnit('''
-import '/Pub/Cache/lib.dart';
+import "${convertPathForImport('/Pub/Cache/lib.dart')}";
 main() {
   A a;
 }
diff --git a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
index 5d3e5b9a..72440be 100644
--- a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
+++ b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
@@ -483,13 +483,15 @@
     expect(packagesFile.exists, isTrue);
     String content = packagesFile.readAsStringSync();
     List<String> lines = content.split('\n');
+    String asFileUri(String input) =>
+        new Uri.file(convertPath(input)).toString();
     expect(
         lines,
         unorderedEquals([
-          'plugin:file:///workspaceRoot/third_party/dart/plugin/lib',
-          'b:file:///workspaceRoot/third_party/dart/b/lib',
-          'c:file:///workspaceRoot/third_party/dart/c/lib',
-          'd:file:///workspaceRoot/third_party/dart/d/lib',
+          'plugin:${asFileUri('/workspaceRoot/third_party/dart/plugin/lib')}',
+          'b:${asFileUri('/workspaceRoot/third_party/dart/b/lib')}',
+          'c:${asFileUri('/workspaceRoot/third_party/dart/c/lib')}',
+          'd:${asFileUri('/workspaceRoot/third_party/dart/d/lib')}',
           ''
         ]));
   }
@@ -756,6 +758,9 @@
         String packageName = line.substring(0, index + 1);
         String relativePath = line.substring(index + 1);
         String absolutePath = path.join(sdkDirPath, relativePath);
+        // Convert to file:/// URI since that's how absolute paths in
+        // .packages must be for windows
+        absolutePath = new Uri.file(absolutePath).toString();
         buffer.write(packageName);
         buffer.writeln(absolutePath);
       }
diff --git a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
index 1c3bc3b..f1f2401 100644
--- a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
+++ b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
@@ -733,8 +733,13 @@
    * {@code search.getElementDeclarations}
    *
    * Return top-level and class member declarations.
+   *
+   * @param pattern The regular expression used to match the names of declarations. If this field is
+   *         missing, return all declarations.
+   * @param maxResults The maximum number of declarations to return. If this field is missing, return
+   *         all matching declarations.
    */
-  public void search_getElementDeclarations(GetElementDeclarationsConsumer consumer);
+  public void search_getElementDeclarations(String pattern, int maxResults, GetElementDeclarationsConsumer consumer);
 
   /**
    * {@code search.getTypeHierarchy}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ElementDeclaration.java b/pkg/analysis_server/tool/spec/generated/java/types/ElementDeclaration.java
index da38ec3..04da8df 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ElementDeclaration.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ElementDeclaration.java
@@ -66,22 +66,44 @@
   private final int column;
 
   /**
+   * The offset of the first character of the declaration code in the file.
+   */
+  private final int codeOffset;
+
+  /**
+   * The length of the declaration code in the file.
+   */
+  private final int codeLength;
+
+  /**
    * The name of the class enclosing this declaration. If the declaration is not a class member, this
    * field will be absent.
    */
   private final String className;
 
   /**
+   * The parameter list for the element. If the element is not a method or function this field will
+   * not be defined. If the element doesn't have parameters (e.g. getter), this field will not be
+   * defined. If the element has zero parameters, this field will have a value of "()". The value
+   * should not be treated as exact presentation of parameters, it is just approximation of
+   * parameters to give the user general idea.
+   */
+  private final String parameters;
+
+  /**
    * Constructor for {@link ElementDeclaration}.
    */
-  public ElementDeclaration(String name, String kind, int fileIndex, int offset, int line, int column, String className) {
+  public ElementDeclaration(String name, String kind, int fileIndex, int offset, int line, int column, int codeOffset, int codeLength, String className, String parameters) {
     this.name = name;
     this.kind = kind;
     this.fileIndex = fileIndex;
     this.offset = offset;
     this.line = line;
     this.column = column;
+    this.codeOffset = codeOffset;
+    this.codeLength = codeLength;
     this.className = className;
+    this.parameters = parameters;
   }
 
   @Override
@@ -95,7 +117,10 @@
         other.offset == offset &&
         other.line == line &&
         other.column == column &&
-        ObjectUtilities.equals(other.className, className);
+        other.codeOffset == codeOffset &&
+        other.codeLength == codeLength &&
+        ObjectUtilities.equals(other.className, className) &&
+        ObjectUtilities.equals(other.parameters, parameters);
     }
     return false;
   }
@@ -107,8 +132,11 @@
     int offset = jsonObject.get("offset").getAsInt();
     int line = jsonObject.get("line").getAsInt();
     int column = jsonObject.get("column").getAsInt();
+    int codeOffset = jsonObject.get("codeOffset").getAsInt();
+    int codeLength = jsonObject.get("codeLength").getAsInt();
     String className = jsonObject.get("className") == null ? null : jsonObject.get("className").getAsString();
-    return new ElementDeclaration(name, kind, fileIndex, offset, line, column, className);
+    String parameters = jsonObject.get("parameters") == null ? null : jsonObject.get("parameters").getAsString();
+    return new ElementDeclaration(name, kind, fileIndex, offset, line, column, codeOffset, codeLength, className, parameters);
   }
 
   public static List<ElementDeclaration> fromJsonArray(JsonArray jsonArray) {
@@ -132,6 +160,20 @@
   }
 
   /**
+   * The length of the declaration code in the file.
+   */
+  public int getCodeLength() {
+    return codeLength;
+  }
+
+  /**
+   * The offset of the first character of the declaration code in the file.
+   */
+  public int getCodeOffset() {
+    return codeOffset;
+  }
+
+  /**
    * The one-based index of the column containing the declaration name.
    */
   public int getColumn() {
@@ -173,6 +215,17 @@
     return offset;
   }
 
+  /**
+   * The parameter list for the element. If the element is not a method or function this field will
+   * not be defined. If the element doesn't have parameters (e.g. getter), this field will not be
+   * defined. If the element has zero parameters, this field will have a value of "()". The value
+   * should not be treated as exact presentation of parameters, it is just approximation of
+   * parameters to give the user general idea.
+   */
+  public String getParameters() {
+    return parameters;
+  }
+
   @Override
   public int hashCode() {
     HashCodeBuilder builder = new HashCodeBuilder();
@@ -182,7 +235,10 @@
     builder.append(offset);
     builder.append(line);
     builder.append(column);
+    builder.append(codeOffset);
+    builder.append(codeLength);
     builder.append(className);
+    builder.append(parameters);
     return builder.toHashCode();
   }
 
@@ -194,9 +250,14 @@
     jsonObject.addProperty("offset", offset);
     jsonObject.addProperty("line", line);
     jsonObject.addProperty("column", column);
+    jsonObject.addProperty("codeOffset", codeOffset);
+    jsonObject.addProperty("codeLength", codeLength);
     if (className != null) {
       jsonObject.addProperty("className", className);
     }
+    if (parameters != null) {
+      jsonObject.addProperty("parameters", parameters);
+    }
     return jsonObject;
   }
 
@@ -216,8 +277,14 @@
     builder.append(line + ", ");
     builder.append("column=");
     builder.append(column + ", ");
+    builder.append("codeOffset=");
+    builder.append(codeOffset + ", ");
+    builder.append("codeLength=");
+    builder.append(codeLength + ", ");
     builder.append("className=");
-    builder.append(className);
+    builder.append(className + ", ");
+    builder.append("parameters=");
+    builder.append(parameters);
     builder.append("]");
     return builder.toString();
   }
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index e448ad2..cab50c6 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -7,7 +7,7 @@
 <body>
 <h1>Analysis Server API Specification</h1>
 <h1 style="color:#999999">Version
-  <version>1.18.6</version>
+  <version>1.18.7</version>
 </h1>
 <p>
   This document contains a specification of the API provided by the
@@ -1578,6 +1578,22 @@
     <p>
       Return top-level and class member declarations.
     </p>
+    <params>
+      <field name="pattern" optional="true">
+        <ref>String</ref>
+        <p>
+          The regular expression used to match the names of declarations.
+          If this field is missing, return all declarations.
+        </p>
+      </field>
+      <field name="maxResults" optional="true">
+        <ref>int</ref>
+        <p>
+          The maximum number of declarations to return.
+          If this field is missing, return all matching declarations.
+        </p>
+      </field>
+    </params>
     <result>
       <field name="declarations">
         <list>
@@ -2945,6 +2961,18 @@
           The one-based index of the column containing the declaration name.
         </p>
       </field>
+      <field name="codeOffset">
+        <ref>int</ref>
+        <p>
+          The offset of the first character of the declaration code in the file.
+        </p>
+      </field>
+      <field name="codeLength">
+        <ref>int</ref>
+        <p>
+          The length of the declaration code in the file.
+        </p>
+      </field>
       <field name="className" optional="true">
         <ref>String</ref>
         <p>
@@ -2952,6 +2980,18 @@
           is not a class member, this field will be absent.
         </p>
       </field>
+      <field name="parameters" optional="true">
+        <ref>String</ref>
+        <p>
+          The parameter list for the element. If the element is not a method or
+          function this field will not be defined. If the element doesn't have
+          parameters (e.g. getter), this field will not be defined. If the
+          element has zero parameters, this field will have a value of "()".
+
+          The value should not be treated as exact presentation of parameters,
+          it is just approximation of parameters to give the user general idea.
+        </p>
+      </field>
     </object>
   </type>
   <type name="ExecutableFile">
diff --git a/pkg/analyzer/lib/dart/analysis/context_locator.dart b/pkg/analyzer/lib/dart/analysis/context_locator.dart
index 9c7f979..ce4d07a 100644
--- a/pkg/analyzer/lib/dart/analysis/context_locator.dart
+++ b/pkg/analyzer/lib/dart/analysis/context_locator.dart
@@ -1,8 +1,9 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// 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:analyzer/dart/analysis/analysis_context.dart';
+import 'package:analyzer/dart/analysis/context_root.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/context_locator.dart';
 import 'package:meta/meta.dart';
@@ -11,6 +12,8 @@
  * Determines the list of analysis contexts that can be used to analyze the
  * files and folders that should be analyzed given a list of included files and
  * folders and a list of excluded files and folders.
+ *
+ * Clients may not extend, implement or mix-in this class.
  */
 abstract class ContextLocator {
   /**
@@ -26,16 +29,43 @@
    * files that are included by the list of [includedPaths] and not excluded by
    * the list of [excludedPaths].
    *
-   * If the [packagesFile] is specified, then it is assumed to be the path to
-   * the `.packages` file that should be used in place of the one that would be
+   * If an [optionsFile] is specified, then it is assumed to be the path to the
+   * `analysis_options.yaml` (or `.analysis_options`) file that should be used
+   * in place of the ones that would be found by looking in the directories
+   * containing the context roots.
+   *
+   * If a [packagesFile] is specified, then it is assumed to be the path to the
+   * `.packages` file that should be used in place of the one that would be
    * found by looking in the directories containing the context roots.
    *
    * If the [sdkPath] is specified, then it is used as the path to the root of
    * the SDK that should be used during analysis.
    */
+  @deprecated
   List<AnalysisContext> locateContexts(
       {@required List<String> includedPaths,
       List<String> excludedPaths: const <String>[],
+      String optionsFile: null,
       String packagesFile: null,
       String sdkPath: null});
+
+  /**
+   * Return a list of the context roots that should be used to analyze the files
+   * that are included by the list of [includedPaths] and not excluded by the
+   * list of [excludedPaths].
+   *
+   * If an [optionsFile] is specified, then it is assumed to be the path to the
+   * `analysis_options.yaml` (or `.analysis_options`) file that should be used
+   * in place of the ones that would be found by looking in the directories
+   * containing the context roots.
+   *
+   * If a [packagesFile] is specified, then it is assumed to be the path to the
+   * `.packages` file that should be used in place of the one that would be
+   * found by looking in the directories containing the context roots.
+   */
+  List<ContextRoot> locateRoots(
+      {@required List<String> includedPaths,
+      List<String> excludedPaths: null,
+      String optionsFile: null,
+      String packagesFile: null});
 }
diff --git a/pkg/analyzer/lib/dart/analysis/context_root.dart b/pkg/analyzer/lib/dart/analysis/context_root.dart
new file mode 100644
index 0000000..f710dbd
--- /dev/null
+++ b/pkg/analyzer/lib/dart/analysis/context_root.dart
@@ -0,0 +1,57 @@
+// 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:analyzer/file_system/file_system.dart';
+
+/**
+ * Information about the root directory associated with an analysis context.
+ *
+ * Clients may not extend, implement or mix-in this class.
+ */
+abstract class ContextRoot {
+  /**
+   * A list of the files and directories within the root directory that should
+   * not be analyzed.
+   */
+  List<Resource> get excluded;
+
+  /**
+   * A collection of the absolute, normalized paths of files and directories
+   * within the root directory that should not be analyzed.
+   */
+  Iterable<String> get excludedPaths;
+
+  /**
+   * A list of the files and directories within the root directory that should
+   * be analyzed. If all of the files in the root directory (other than those
+   * that are explicitly excluded) should be analyzed, then this list will
+   * contain the root directory.
+   */
+  List<Resource> get included;
+
+  /**
+   * A collection of the absolute, normalized paths of files within the root
+   * directory that should be analyzed. If all of the files in the root
+   * directory (other than those that are explicitly excluded) should be
+   * analyzed, then this collection will contain the path of the root directory.
+   */
+  Iterable<String> get includedPaths;
+
+  /**
+   * The analysis options file that should be used when analyzing the files
+   * within this context root, or `null` if there is no options file.
+   */
+  File get optionsFile;
+
+  /**
+   * The packages file that should be used when analyzing the files within this
+   * context root, or `null` if there is no options file.
+   */
+  File get packagesFile;
+
+  /**
+   * The root directory containing the files to be analyzed.
+   */
+  Folder get root;
+}
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 87a0ee4..95df0b9 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -473,6 +473,7 @@
   ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES,
   ParserErrorCode.TOP_LEVEL_OPERATOR,
   ParserErrorCode.TYPEDEF_IN_CLASS,
+  ParserErrorCode.TYPE_ARGUMENTS_ON_TYPE_VARIABLE,
   ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP,
   ParserErrorCode.UNEXPECTED_TOKEN,
   ParserErrorCode.VAR_AND_TYPE,
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
index 0a7ca25..e9fbaa9 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -7,11 +7,13 @@
 import 'package:analyzer/context/context_root.dart' as old;
 import 'package:analyzer/dart/analysis/analysis_context.dart';
 import 'package:analyzer/dart/analysis/context_locator.dart';
+import 'package:analyzer/dart/analysis/context_root.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart'
     show PhysicalResourceProvider;
 import 'package:analyzer/src/context/builder.dart'
     show ContextBuilder, ContextBuilderOptions;
+import 'package:analyzer/src/dart/analysis/context_root.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart'
     show AnalysisDriver, AnalysisDriverScheduler;
 import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
@@ -68,18 +70,22 @@
   String get _defaultSdkPath =>
       FolderBasedDartSdk.defaultSdkDirectory(resourceProvider).path;
 
+  @deprecated
   @override
   List<AnalysisContext> locateContexts(
       {@required List<String> includedPaths,
       List<String> excludedPaths: null,
+      String optionsFile: null,
       String packagesFile: null,
       String sdkPath: null}) {
-    if (includedPaths == null || includedPaths.isEmpty) {
-      throw new ArgumentError('There must be at least one included path');
+    List<ContextRoot> roots = locateRoots(
+        includedPaths: includedPaths,
+        excludedPaths: excludedPaths,
+        optionsFile: optionsFile,
+        packagesFile: packagesFile);
+    if (roots.isEmpty) {
+      return const <AnalysisContext>[];
     }
-    List<AnalysisContext> contextList = <AnalysisContext>[];
-    List<ContextRoot> roots =
-        locateRoots(includedPaths, excludedPaths: excludedPaths);
     PerformanceLog performanceLog = new PerformanceLog(new StringBuffer());
     AnalysisDriverScheduler scheduler =
         new AnalysisDriverScheduler(performanceLog);
@@ -97,33 +103,33 @@
     builder.byteStore = new MemoryByteStore();
     builder.fileContentOverlay = new FileContentOverlay();
     builder.performanceLog = performanceLog;
+    List<AnalysisContext> contextList = <AnalysisContext>[];
     for (ContextRoot root in roots) {
       old.ContextRoot contextRoot =
-          new old.ContextRoot(root.root.path, root.excludedPaths);
+          new old.ContextRoot(root.root.path, root.excludedPaths.toList());
       AnalysisDriver driver = builder.buildDriver(contextRoot);
       DriverBasedAnalysisContext context =
           new DriverBasedAnalysisContext(resourceProvider, driver);
-      context.includedPaths = root.includedPaths;
-      context.excludedPaths = root.excludedPaths;
+      context.includedPaths = root.includedPaths.toList();
+      context.excludedPaths = root.excludedPaths.toList();
       contextList.add(context);
     }
     return contextList;
   }
 
-  /**
-   * Return a list of the context roots that should be used to analyze the files
-   * that are included by the list of [includedPaths] and not excluded by the
-   * list of [excludedPaths].
-   */
-  @visibleForTesting
-  List<ContextRoot> locateRoots(List<String> includedPaths,
-      {List<String> excludedPaths}) {
+  @override
+  List<ContextRoot> locateRoots(
+      {@required List<String> includedPaths,
+      List<String> excludedPaths: null,
+      String optionsFile: null,
+      String packagesFile: null}) {
     //
     // Compute the list of folders and files that are to be included.
     //
     List<Folder> includedFolders = <Folder>[];
     List<File> includedFiles = <File>[];
-    _resourcesFromPaths(includedPaths, includedFolders, includedFiles);
+    _resourcesFromPaths(
+        includedPaths ?? const <String>[], includedFolders, includedFiles);
     //
     // Compute the list of folders and files that are to be excluded.
     //
@@ -151,19 +157,42 @@
     // analyzed. For each, walk the directory structure and figure out where to
     // create context roots.
     //
+    File defaultOptionsFile;
+    if (optionsFile != null) {
+      defaultOptionsFile = resourceProvider.getFile(optionsFile);
+      if (!defaultOptionsFile.exists) {
+        defaultOptionsFile = null;
+      }
+    }
+    File defaultPackagesFile;
+    if (packagesFile != null) {
+      defaultPackagesFile = resourceProvider.getFile(packagesFile);
+      if (!defaultPackagesFile.exists) {
+        defaultPackagesFile = null;
+      }
+    }
     List<ContextRoot> roots = <ContextRoot>[];
     for (Folder folder in includedFolders) {
-      _createContextRoots(roots, folder, excludedFolders, null);
+      ContextRootImpl root = new ContextRootImpl(folder);
+      root.packagesFile = defaultPackagesFile ?? _findPackagesFile(folder);
+      root.optionsFile = defaultOptionsFile ?? _findOptionsFile(folder);
+      root.included.add(folder);
+      roots.add(root);
+      _createContextRootsIn(roots, folder, excludedFolders, root,
+          defaultOptionsFile, defaultPackagesFile);
     }
+    Map<Folder, ContextRoot> rootMap = <Folder, ContextRoot>{};
     for (File file in includedFiles) {
       Folder parent = file.parent;
-      ContextRoot root = new ContextRoot(file);
-      root.packagesFile = _findPackagesFile(parent);
-      root.optionsFile = _findOptionsFile(parent);
+      ContextRoot root = rootMap.putIfAbsent(parent, () {
+        ContextRootImpl root = new ContextRootImpl(parent);
+        root.packagesFile = defaultPackagesFile ?? _findPackagesFile(parent);
+        root.optionsFile = defaultOptionsFile ?? _findOptionsFile(parent);
+        roots.add(root);
+        return root;
+      });
       root.included.add(file);
-      roots.add(root);
     }
-
     return roots;
   }
 
@@ -174,31 +203,74 @@
   bool _containedInAny(Iterable<Folder> folders, Resource resource) =>
       folders.any((Folder folder) => folder.contains(resource.path));
 
-  void _createContextRoots(List<ContextRoot> roots, Folder folder,
-      List<Folder> excludedFolders, ContextRoot containingRoot) {
+  /**
+   * If the given [folder] should be the root of a new analysis context, then
+   * create a new context root for it and add it to the list of context [roots].
+   * The [containingRoot] is the context root from an enclosing directory and is
+   * used to inherit configuration information that isn't overridden.
+   *
+   * If either the [optionsFile] or [packagesFile] is non-`null` then the given
+   * file will be used even if there is a local version of the file.
+   *
+   * For each directory within the given [folder] that is not in the list of
+   * [excludedFolders], recursively search for nested context roots.
+   */
+  void _createContextRoots(
+      List<ContextRoot> roots,
+      Folder folder,
+      List<Folder> excludedFolders,
+      ContextRoot containingRoot,
+      File optionsFile,
+      File packagesFile) {
     //
-    // Create a context root for the given [folder] is appropriate.
+    // If the options and packages files are allowed to be locally specified,
+    // then look to see whether they are.
     //
-    if (containingRoot == null) {
-      ContextRoot root = new ContextRoot(folder);
-      root.packagesFile = _findPackagesFile(folder);
-      root.optionsFile = _findOptionsFile(folder);
+    File localOptionsFile;
+    if (optionsFile == null) {
+      localOptionsFile = _getOptionsFile(folder);
+    }
+    File localPackagesFile;
+    if (packagesFile == null) {
+      localPackagesFile = _getPackagesFile(folder);
+    }
+    //
+    // Create a context root for the given [folder] if at least one of the
+    // options and packages file is locally specified.
+    //
+    if (localPackagesFile != null || localOptionsFile != null) {
+      if (optionsFile != null) {
+        localOptionsFile = optionsFile;
+      }
+      if (packagesFile != null) {
+        localPackagesFile = packagesFile;
+      }
+      ContextRootImpl root = new ContextRootImpl(folder);
+      root.packagesFile = localPackagesFile ?? containingRoot.packagesFile;
+      root.optionsFile = localOptionsFile ?? containingRoot.optionsFile;
       root.included.add(folder);
+      containingRoot.excluded.add(folder);
       roots.add(root);
       containingRoot = root;
-    } else {
-      File packagesFile = _getPackagesFile(folder);
-      File optionsFile = _getOptionsFile(folder);
-      if (packagesFile != null || optionsFile != null) {
-        ContextRoot root = new ContextRoot(folder);
-        root.packagesFile = packagesFile ?? containingRoot.packagesFile;
-        root.optionsFile = optionsFile ?? containingRoot.optionsFile;
-        root.included.add(folder);
-        containingRoot.excluded.add(folder);
-        roots.add(root);
-        containingRoot = root;
-      }
     }
+    _createContextRootsIn(roots, folder, excludedFolders, containingRoot,
+        optionsFile, packagesFile);
+  }
+
+  /**
+   * For each directory within the given [folder] that is not in the list of
+   * [excludedFolders], recursively search for nested context roots.
+   *
+   * If either the [optionsFile] or [packagesFile] is non-`null` then the given
+   * file will be used even if there is a local version of the file.
+   */
+  void _createContextRootsIn(
+      List<ContextRoot> roots,
+      Folder folder,
+      List<Folder> excludedFolders,
+      ContextRoot containingRoot,
+      File optionsFile,
+      File packagesFile) {
     //
     // Check each of the subdirectories to see whether a context root needs to
     // be added for it.
@@ -211,7 +283,8 @@
               folder.shortName == PACKAGES_DIR_NAME) {
             containingRoot.excluded.add(folder);
           } else {
-            _createContextRoots(roots, child, excludedFolders, containingRoot);
+            _createContextRoots(roots, child, excludedFolders, containingRoot,
+                optionsFile, packagesFile);
           }
         }
       }
@@ -311,28 +384,3 @@
     return sortedPaths;
   }
 }
-
-@visibleForTesting
-class ContextRoot {
-  final Resource root;
-  final List<Resource> included = <Resource>[];
-  final List<Resource> excluded = <Resource>[];
-  File packagesFile;
-  File optionsFile;
-
-  ContextRoot(this.root);
-
-  List<String> get excludedPaths =>
-      excluded.map((Resource folder) => folder.path).toList();
-
-  @override
-  int get hashCode => root.path.hashCode;
-
-  List<String> get includedPaths =>
-      included.map((Resource folder) => folder.path).toList();
-
-  @override
-  bool operator ==(Object other) {
-    return other is ContextRoot && root.path == other.root.path;
-  }
-}
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_root.dart b/pkg/analyzer/lib/src/dart/analysis/context_root.dart
new file mode 100644
index 0000000..607c9d2
--- /dev/null
+++ b/pkg/analyzer/lib/src/dart/analysis/context_root.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/analysis/context_root.dart';
+import 'package:analyzer/file_system/file_system.dart';
+
+/**
+ * An implementation of a context root.
+ */
+class ContextRootImpl implements ContextRoot {
+  @override
+  final Folder root;
+
+  @override
+  final List<Resource> included = <Resource>[];
+
+  @override
+  final List<Resource> excluded = <Resource>[];
+
+  @override
+  File optionsFile;
+
+  @override
+  File packagesFile;
+
+  /**
+   * Initialize a newly created context root.
+   */
+  ContextRootImpl(this.root);
+
+  @override
+  Iterable<String> get excludedPaths =>
+      excluded.map((Resource folder) => folder.path);
+
+  @override
+  int get hashCode => root.path.hashCode;
+
+  @override
+  Iterable<String> get includedPaths =>
+      included.map((Resource folder) => folder.path);
+
+  @override
+  bool operator ==(Object other) {
+    return other is ContextRoot && root.path == other.root.path;
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver_based_analysis_context.dart b/pkg/analyzer/lib/src/dart/analysis/driver_based_analysis_context.dart
index 03356db..558b2a1 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver_based_analysis_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver_based_analysis_context.dart
@@ -44,14 +44,16 @@
   @override
   Iterable<String> analyzedFiles() sync* {
     for (String path in includedPaths) {
-      Resource resource = resourceProvider.getResource(path);
-      if (resource is File) {
-        yield path;
-      } else if (resource is Folder) {
-        yield* _includedFilesInFolder(resource);
-      } else {
-        Type type = resource.runtimeType;
-        throw new StateError('Unknown resource at path "$path" ($type)');
+      if (!_isExcluded(path)) {
+        Resource resource = resourceProvider.getResource(path);
+        if (resource is File) {
+          yield path;
+        } else if (resource is Folder) {
+          yield* _includedFilesInFolder(resource);
+        } else {
+          Type type = resource.runtimeType;
+          throw new StateError('Unknown resource at path "$path" ($type)');
+        }
       }
     }
   }
@@ -67,14 +69,16 @@
    */
   Iterable<String> _includedFilesInFolder(Folder folder) sync* {
     for (Resource resource in folder.getChildren()) {
-      if (resource is File) {
-        yield resource.path;
-      } else if (resource is Folder) {
-        yield* _includedFilesInFolder(resource);
-      } else {
-        String path = resource.path;
-        Type type = resource.runtimeType;
-        throw new StateError('Unknown resource at path "$path" ($type)');
+      String path = resource.path;
+      if (!_isExcluded(path)) {
+        if (resource is File) {
+          yield path;
+        } else if (resource is Folder) {
+          yield* _includedFilesInFolder(resource);
+        } else {
+          Type type = resource.runtimeType;
+          throw new StateError('Unknown resource at path "$path" ($type)');
+        }
       }
     }
   }
@@ -85,6 +89,11 @@
    */
   bool _isExcluded(String path) {
     Context context = resourceProvider.pathContext;
+    String name = context.basename(path);
+    if (name.startsWith('.') ||
+        (name == 'packages' && resourceProvider.getResource(path) is Folder)) {
+      return true;
+    }
     for (String excludedPath in excludedPaths) {
       if (context.isAbsolute(excludedPath)) {
         if (context.isWithin(excludedPath, path)) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index f9a7103..90b0d6a 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -35,10 +35,22 @@
   final int offset;
   final int line;
   final int column;
+  final int codeOffset;
+  final int codeLength;
   final String className;
+  final String parameters;
 
-  Declaration(this.fileIndex, this.name, this.kind, this.offset, this.line,
-      this.column, this.className);
+  Declaration(
+      this.fileIndex,
+      this.name,
+      this.kind,
+      this.offset,
+      this.line,
+      this.column,
+      this.codeOffset,
+      this.codeLength,
+      this.className,
+      this.parameters);
 }
 
 /**
@@ -96,12 +108,20 @@
   /**
    * Return top-level and class member declarations.
    *
+   * If [regExp] is not `null`, only declaration with names matching it are
+   * returned. Otherwise, all declarations are returned.
+   *
+   * If [maxResults] is not `null`, it sets the maximum number of returned
+   * declarations.
+   *
    * The path of each file with at least one declaration is added to [files].
    * The list is for searched, there might be duplicates, but this is OK,
    * we just want reduce amount of data, not to make it absolute minimum.
    */
-  Future<List<Declaration>> declarations(List<String> files) async {
+  Future<List<Declaration>> declarations(
+      RegExp regExp, int maxResults, List<String> files) async {
     List<Declaration> declarations = <Declaration>[];
+    UnlinkedUnit unlinkedUnit;
 
     DeclarationKind getExecutableKind(
         UnlinkedExecutable executable, bool topLevel) {
@@ -121,72 +141,151 @@
       }
     }
 
-    for (String path in _driver.addedFiles) {
-      FileState file = _driver.fsState.getFileForPath(path);
-      int fileIndex;
+    void appendParameter(StringBuffer buffer, UnlinkedParam parameter) {
+      EntityRef type = parameter.type;
+      if (type?.entityKind == EntityRefKind.named) {
+        if (type.reference != null) {
+          UnlinkedReference typeRef = unlinkedUnit.references[type.reference];
+          buffer.write(typeRef.name);
+          buffer.write(' ');
+        }
+      }
+      buffer.write(parameter.name);
+    }
 
-      void addDeclaration(String name, DeclarationKind kind, int offset,
-          [String className]) {
-        if (fileIndex == null) {
-          fileIndex = files.length;
-          files.add(file.path);
+    String getParametersString(List<UnlinkedParam> parameters) {
+      var buffer = new StringBuffer();
+      buffer.write('(');
+
+      bool isFirstParameter = true;
+      for (var parameter in parameters) {
+        if (isFirstParameter) {
+          isFirstParameter = false;
+        } else {
+          buffer.write(', ');
         }
-        if (name.endsWith('=')) {
-          name = name.substring(0, name.length - 1);
-        }
-        var location = file.lineInfo.getLocation(offset);
-        declarations.add(new Declaration(fileIndex, name, kind, offset,
-            location.lineNumber, location.columnNumber, className));
+        appendParameter(buffer, parameter);
       }
 
-      for (var class_ in file.unlinked.classes) {
-        String className = class_.name;
-        addDeclaration(
-            className,
-            class_.isMixinApplication
-                ? DeclarationKind.CLASS_TYPE_ALIAS
-                : DeclarationKind.CLASS,
-            class_.nameOffset);
+      buffer.write(')');
+      return buffer.toString();
+    }
 
-        for (var field in class_.fields) {
-          addDeclaration(
-              field.name, DeclarationKind.FIELD, field.nameOffset, className);
+    String getExecutableParameters(UnlinkedExecutable executable) {
+      if (executable.kind == UnlinkedExecutableKind.getter) {
+        return null;
+      }
+      return getParametersString(executable.parameters);
+    }
+
+    try {
+      for (String path in _driver.addedFiles) {
+        FileState file = _driver.fsState.getFileForPath(path);
+        int fileIndex;
+
+        void addDeclaration(String name, DeclarationKind kind, int offset,
+            int codeOffset, int codeLength,
+            {String className, String parameters}) {
+          if (maxResults != null && declarations.length >= maxResults) {
+            throw const _MaxNumberOfDeclarationsError();
+          }
+
+          if (name.endsWith('=')) {
+            name = name.substring(0, name.length - 1);
+          }
+          if (regExp != null && !regExp.hasMatch(name)) {
+            return;
+          }
+
+          if (fileIndex == null) {
+            fileIndex = files.length;
+            files.add(file.path);
+          }
+          var location = file.lineInfo.getLocation(offset);
+          declarations.add(new Declaration(
+              fileIndex,
+              name,
+              kind,
+              offset,
+              location.lineNumber,
+              location.columnNumber,
+              codeOffset,
+              codeLength,
+              className,
+              parameters));
         }
 
-        for (var executable in class_.executables) {
-          if (executable.name.isNotEmpty) {
-            addDeclaration(
-                executable.name,
-                getExecutableKind(executable, false),
-                executable.nameOffset,
-                className);
+        unlinkedUnit = file.unlinked;
+        for (var class_ in unlinkedUnit.classes) {
+          String className = class_.name;
+          addDeclaration(
+              className,
+              class_.isMixinApplication
+                  ? DeclarationKind.CLASS_TYPE_ALIAS
+                  : DeclarationKind.CLASS,
+              class_.nameOffset,
+              class_.codeRange.offset,
+              class_.codeRange.length);
+
+          for (var field in class_.fields) {
+            addDeclaration(field.name, DeclarationKind.FIELD, field.nameOffset,
+                field.codeRange.offset, field.codeRange.length,
+                className: className);
+          }
+
+          for (var executable in class_.executables) {
+            if (executable.name.isNotEmpty) {
+              addDeclaration(
+                  executable.name,
+                  getExecutableKind(executable, false),
+                  executable.nameOffset,
+                  executable.codeRange.offset,
+                  executable.codeRange.length,
+                  className: className,
+                  parameters: getExecutableParameters(executable));
+            }
           }
         }
-      }
 
-      for (var enum_ in file.unlinked.enums) {
-        addDeclaration(enum_.name, DeclarationKind.ENUM, enum_.nameOffset);
-        for (var value in enum_.values) {
+        for (var enum_ in unlinkedUnit.enums) {
+          addDeclaration(enum_.name, DeclarationKind.ENUM, enum_.nameOffset,
+              enum_.codeRange.offset, enum_.codeRange.length);
+          for (var value in enum_.values) {
+            addDeclaration(value.name, DeclarationKind.ENUM_CONSTANT,
+                value.nameOffset, value.nameOffset, value.name.length);
+          }
+        }
+
+        for (var executable in unlinkedUnit.executables) {
           addDeclaration(
-              value.name, DeclarationKind.ENUM_CONSTANT, value.nameOffset);
+              executable.name,
+              getExecutableKind(executable, true),
+              executable.nameOffset,
+              executable.codeRange.offset,
+              executable.codeRange.length,
+              parameters: getExecutableParameters(executable));
+        }
+
+        for (var typedef_ in unlinkedUnit.typedefs) {
+          addDeclaration(
+              typedef_.name,
+              DeclarationKind.FUNCTION_TYPE_ALIAS,
+              typedef_.nameOffset,
+              typedef_.codeRange.offset,
+              typedef_.codeRange.length,
+              parameters: getParametersString(typedef_.parameters));
+        }
+
+        for (var variable in unlinkedUnit.variables) {
+          addDeclaration(
+              variable.name,
+              DeclarationKind.VARIABLE,
+              variable.nameOffset,
+              variable.codeRange.offset,
+              variable.codeRange.length);
         }
       }
-
-      for (var executable in file.unlinked.executables) {
-        addDeclaration(executable.name, getExecutableKind(executable, true),
-            executable.nameOffset);
-      }
-
-      for (var typedef_ in file.unlinked.typedefs) {
-        addDeclaration(typedef_.name, DeclarationKind.FUNCTION_TYPE_ALIAS,
-            typedef_.nameOffset);
-      }
-
-      for (var variable in file.unlinked.variables) {
-        addDeclaration(
-            variable.name, DeclarationKind.VARIABLE, variable.nameOffset);
-      }
-    }
+    } on _MaxNumberOfDeclarationsError {}
 
     return declarations;
   }
@@ -1073,3 +1172,10 @@
         enclosingElement, kind, node.offset, node.length, true, isQualified));
   }
 }
+
+/**
+ * The marker class that is thrown to stop adding declarations.
+ */
+class _MaxNumberOfDeclarationsError {
+  const _MaxNumberOfDeclarationsError();
+}
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
index 87fcd46..489af14 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
@@ -944,6 +944,12 @@
       "moving it to a class, or "
       "converting it to be a function.");
 
+  static const ParserErrorCode TYPE_ARGUMENTS_ON_TYPE_VARIABLE =
+      const ParserErrorCode(
+          'TYPE_ARGUMENTS_ON_TYPE_VARIABLE',
+          "Can't use type arguments with type variable '{0}'.",
+          "Try removing the type arguments.");
+
   static const ParserErrorCode TYPEDEF_IN_CLASS = const ParserErrorCode(
       'TYPEDEF_IN_CLASS',
       "Typedefs can't be declared inside classes.",
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index e09ed08..a5e5ca7 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -33,7 +33,11 @@
     show
         Message,
         codeExpectedFunctionBody,
+        messageConstConstructorWithBody,
+        messageConstMethod,
+        messageConstructorWithReturnType,
         messageDirectiveAfterDeclaration,
+        messageFieldInitializerOutsideConstructor,
         messageIllegalAssignmentToNonAssignable,
         messageMissingAssignableSelector,
         messageNativeClauseShouldBeAnnotation,
@@ -669,7 +673,7 @@
   }
 
   void handleInvalidTopLevelBlock(Token token) {
-    // TODO(danrubel): Consider improved recovery by adding a this block
+    // TODO(danrubel): Consider improved recovery by adding this block
     // as part of a synthetic top level function.
     pop(); // block
   }
@@ -1354,8 +1358,8 @@
       // TODO(danrubel): The fasta parser does not have enough context to
       // report this error. Consider moving it to the resolution phase
       // or at least to common location that can be shared by all listeners.
-      parser.reportRecoverableError(
-          expression.endToken, messageMissingAssignableSelector);
+      handleRecoverableError(messageMissingAssignableSelector,
+          expression.endToken, expression.endToken);
     }
     push(ast.prefixExpression(operator, expression));
   }
@@ -1369,8 +1373,8 @@
       // TODO(danrubel): The fasta parser does not have enough context to
       // report this error. Consider moving it to the resolution phase
       // or at least to common location that can be shared by all listeners.
-      parser.reportRecoverableError(
-          operator, messageIllegalAssignmentToNonAssignable);
+      handleRecoverableError(
+          messageIllegalAssignmentToNonAssignable, operator, operator);
     }
     push(ast.postfixExpression(expression, operator));
   }
@@ -2055,6 +2059,35 @@
   }
 
   @override
+  void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
+      Token varFinalOrConst, Token name) {
+    _Modifiers modifiers = new _Modifiers();
+    if (externalToken != null) {
+      assert(externalToken.isModifier);
+      modifiers.externalKeyword = externalToken;
+    }
+    if (staticToken != null) {
+      assert(staticToken.isModifier);
+      if (name?.lexeme == classDeclaration.name.name) {
+        // This error is also reported in OutlineBuilder.beginMethod
+        handleRecoverableError(
+            messageStaticConstructor, staticToken, staticToken);
+      } else {
+        modifiers.staticKeyword = staticToken;
+      }
+    }
+    if (covariantToken != null) {
+      assert(covariantToken.isModifier);
+      modifiers.covariantKeyword = covariantToken;
+    }
+    if (varFinalOrConst != null) {
+      assert(varFinalOrConst.isModifier);
+      modifiers.finalConstOrVarKeyword = varFinalOrConst;
+    }
+    push(modifiers);
+  }
+
+  @override
   void endMethod(
       Token getOrSet, Token beginToken, Token beginParam, Token endToken) {
     assert(getOrSet == null ||
@@ -2112,13 +2145,19 @@
     }
 
     void constructor(
-        SimpleIdentifier returnType, Token period, SimpleIdentifier name) {
-      if (modifiers?.staticKeyword != null) {
-        // TODO(danrubel): The fasta parser does not have enough context to
-        // report this error. Consider moving it to the resolution phase
-        // or at least to common location that can be shared by all listeners.
-        parser.reportRecoverableError(
-            modifiers.staticKeyword, messageStaticConstructor);
+        SimpleIdentifier prefixOrName, Token period, SimpleIdentifier name) {
+      if (modifiers?.constKeyword != null &&
+          body != null &&
+          (body.length > 1 || body.beginToken?.lexeme != ';')) {
+        // This error is also reported in BodyBuilder.finishFunction
+        Token bodyToken = body.beginToken ?? modifiers.constKeyword;
+        handleRecoverableError(
+            messageConstConstructorWithBody, bodyToken, bodyToken);
+      }
+      if (returnType != null) {
+        // This error is also reported in OutlineBuilder.endMethod
+        handleRecoverableError(messageConstructorWithReturnType,
+            returnType.beginToken, returnType.beginToken);
       }
       classDeclaration.members.add(ast.constructorDeclaration(
           comment,
@@ -2126,7 +2165,7 @@
           modifiers?.externalKeyword,
           modifiers?.finalConstOrVarKeyword,
           null, // TODO(paulberry): factoryKeyword
-          ast.simpleIdentifier(returnType.token),
+          ast.simpleIdentifier(prefixOrName.token),
           period,
           name,
           parameters,
@@ -2137,6 +2176,23 @@
     }
 
     void method(Token operatorKeyword, SimpleIdentifier name) {
+      if (modifiers?.constKeyword != null &&
+          body != null &&
+          (body.length > 1 || body.beginToken?.lexeme != ';')) {
+        // This error is also reported in OutlineBuilder.endMethod
+        handleRecoverableError(
+            messageConstMethod, modifiers.constKeyword, modifiers.constKeyword);
+      }
+      if (parameters?.parameters != null) {
+        parameters.parameters.forEach((FormalParameter param) {
+          if (param is FieldFormalParameter) {
+            // Added comment in OutlineBuilder.endMethod at the location
+            // where this error could be reported.
+            handleRecoverableError(messageFieldInitializerOutsideConstructor,
+                param.thisKeyword, param.thisKeyword);
+          }
+        });
+      }
       classDeclaration.members.add(ast.methodDeclaration(
           comment,
           metadata,
@@ -2812,28 +2868,30 @@
   Token staticKeyword;
   Token covariantKeyword;
 
-  _Modifiers(List<Token> modifierTokens) {
+  _Modifiers([List<Token> modifierTokens]) {
     // No need to check the order and uniqueness of the modifiers, or that
     // disallowed modifiers are not used; the parser should do that.
     // TODO(paulberry,ahe): implement the necessary logic in the parser.
-    for (var token in modifierTokens) {
-      var s = token.lexeme;
-      if (identical('abstract', s)) {
-        abstractKeyword = token;
-      } else if (identical('const', s)) {
-        finalConstOrVarKeyword = token;
-      } else if (identical('external', s)) {
-        externalKeyword = token;
-      } else if (identical('final', s)) {
-        finalConstOrVarKeyword = token;
-      } else if (identical('static', s)) {
-        staticKeyword = token;
-      } else if (identical('var', s)) {
-        finalConstOrVarKeyword = token;
-      } else if (identical('covariant', s)) {
-        covariantKeyword = token;
-      } else {
-        unhandled("$s", "modifier", token.charOffset, null);
+    if (modifierTokens != null) {
+      for (var token in modifierTokens) {
+        var s = token.lexeme;
+        if (identical('abstract', s)) {
+          abstractKeyword = token;
+        } else if (identical('const', s)) {
+          finalConstOrVarKeyword = token;
+        } else if (identical('external', s)) {
+          externalKeyword = token;
+        } else if (identical('final', s)) {
+          finalConstOrVarKeyword = token;
+        } else if (identical('static', s)) {
+          staticKeyword = token;
+        } else if (identical('var', s)) {
+          finalConstOrVarKeyword = token;
+        } else if (identical('covariant', s)) {
+          covariantKeyword = token;
+        } else {
+          unhandled("$s", "modifier", token.charOffset, null);
+        }
       }
     }
   }
@@ -2858,4 +2916,11 @@
     }
     return firstToken;
   }
+
+  /// Return the `const` keyword or `null`.
+  Token get constKeyword {
+    return identical('const', finalConstOrVarKeyword?.lexeme)
+        ? finalConstOrVarKeyword
+        : null;
+  }
 }
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index f3042e4..81e09c5 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -25,9 +25,12 @@
     String stringOrTokenLexeme() {
       var text = arguments['string'];
       if (text == null) {
-        Token token = arguments['token'];
-        if (token != null) {
-          text = token.lexeme;
+        text = arguments['name'];
+        if (text == null) {
+          Token token = arguments['token'];
+          if (token != null) {
+            text = token.lexeme;
+          }
         }
       }
       return text;
@@ -90,15 +93,27 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.CONST_CLASS, offset, length);
         return;
+      case "CONST_CONSTRUCTOR_WITH_BODY":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, offset, length);
+        return;
       case "CONST_FACTORY":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.CONST_FACTORY, offset, length);
         return;
+      case "CONST_METHOD":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.CONST_METHOD, offset, length);
+        return;
       case "CONST_NOT_INITIALIZED":
         String name = arguments['name'];
         errorReporter?.reportErrorForOffset(
             CompileTimeErrorCode.CONST_NOT_INITIALIZED, offset, length, [name]);
         return;
+      case "CONSTRUCTOR_WITH_RETURN_TYPE":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, offset, length);
+        return;
       case "CONTINUE_OUTSIDE_OF_LOOP":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP, offset, length);
@@ -234,6 +249,12 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION, offset, length);
         return;
+      case "FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR,
+            offset,
+            length);
+        return;
       case "FINAL_AND_COVARIANT":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.FINAL_AND_COVARIANT, offset, length);
@@ -491,6 +512,14 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.TOP_LEVEL_OPERATOR, offset, length);
         return;
+      case "TYPE_ARGUMENTS_ON_TYPE_VARIABLE":
+        String text = stringOrTokenLexeme();
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.TYPE_ARGUMENTS_ON_TYPE_VARIABLE,
+            offset,
+            length,
+            [text]);
+        return;
       case "TYPEDEF_IN_CLASS":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.TYPEDEF_IN_CLASS, offset, length);
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 2fad14c..fb56381 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -977,7 +977,9 @@
       }
       // Check that the type is resolvable, and is not "void"
       DartType returnTypeType = returnType.type;
-      if (returnTypeType == null || returnTypeType.isVoid) {
+      if (returnTypeType == null ||
+          returnTypeType.isVoid ||
+          (body.isAsynchronous && _isFutureVoid(returnTypeType))) {
         return;
       }
       // For async, give no hint if the return type does not matter, i.e.
@@ -1233,6 +1235,19 @@
   }
 
   /**
+   * Return `true` if the given [type] represents `Future<void>`.
+   */
+  bool _isFutureVoid(DartType type) {
+    if (type.isDartAsyncFuture) {
+      List<DartType> typeArgs = (type as InterfaceType).typeArguments;
+      if (typeArgs.length == 1 && typeArgs[0].isVoid) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
    * Given a parenthesized expression, this returns the parent (or recursively grand-parent) of the
    * expression that is a parenthesized expression, but whose parent is not a parenthesized
    * expression.
diff --git a/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart b/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
index 6f6b6e5..d89deab 100644
--- a/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
+++ b/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:io';
+import 'dart:io' hide File;
 
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
diff --git a/pkg/analyzer/test/generated/element_resolver_test.dart b/pkg/analyzer/test/generated/element_resolver_test.dart
index a766bdc4..61b34e6 100644
--- a/pkg/analyzer/test/generated/element_resolver_test.dart
+++ b/pkg/analyzer/test/generated/element_resolver_test.dart
@@ -1387,6 +1387,40 @@
   }
 
   /**
+   * Test that the call to a constructor with an implicit unnamed constructor is
+   * re-written as an InstanceCreationExpression AST node from a
+   * MethodInvocation.
+   *
+   * C(), where class C has no constructors
+   */
+  test_visitMethodInvocations_implicit_implicit() async {
+    String code = '''
+class A {}
+main() {
+  A();
+}
+    ''';
+    CompilationUnit unit = await resolveSource(code);
+    var statements = AstFinder.getStatementsInTopLevelFunction(unit, 'main');
+
+    ExpressionStatement statement = statements[0];
+    InstanceCreationExpression creation = statement.expression;
+    ConstructorElement constructor = creation.staticElement;
+
+    expect(constructor, _isConstructorElement);
+    expect(creation.staticType, isNotNull);
+
+    expect(creation.constructorName.staticElement, constructor);
+
+    expect(creation.constructorName.type.type, isNotNull);
+    expect(creation.constructorName.type.name.staticElement, _isClassElement);
+
+    expect(creation.constructorName.name, isNull);
+
+    expect(creation.argumentList.arguments, isEmpty);
+  }
+
+  /**
    * Test that the call to a constructor with an implicit named constructor is
    * re-written as an InstanceCreationExpression AST node from a
    * MethodInvocation.
diff --git a/pkg/analyzer/test/generated/non_hint_code_test.dart b/pkg/analyzer/test/generated/non_hint_code_test.dart
index 05be2c7..5d0f10b 100644
--- a/pkg/analyzer/test/generated/non_hint_code_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_test.dart
@@ -495,6 +495,16 @@
     verify([source]);
   }
 
+  test_missingReturn_futureVoidReturnType() async {
+    Source source = addSource('''
+import 'dart:async';
+Future<void> f() async {}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
   test_missingReturn_noReturnType() async {
     Source source = addSource("f() {}");
     await computeAnalysisResult(source);
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index ebdc78c..5dd1085 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -376,8 +376,10 @@
   }
 
   @override
-  void beginMethod() {
-    super.beginMethod();
+  void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
+      Token varFinalOrConst, Token name) {
+    super.beginMethod(
+        externalToken, staticToken, covariantToken, varFinalOrConst, name);
     begin('Method');
   }
 
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index 713cc7a..b28d44d 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -115,40 +115,6 @@
     with ErrorParserTestMixin {
   @override
   @failingTest
-  void test_constConstructorWithBody() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, found 0
-    //
-    // This error is produced by kernel, rather than in the parser.
-    super.test_constConstructorWithBody();
-  }
-
-  @override
-  @failingTest
-  void test_constFactory() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.CONST_FACTORY, found 0
-    super.test_constFactory();
-  }
-
-  @override
-  @failingTest
-  void test_constMethod() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.CONST_METHOD, found 0
-    super.test_constMethod();
-  }
-
-  @override
-  @failingTest
-  void test_constructorWithReturnType() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, found 0
-    super.test_constructorWithReturnType();
-  }
-
-  @override
-  @failingTest
   void test_duplicateLabelInSwitchStatement() {
     // TODO(brianwilkerson) Wrong errors:
     // Expected 1 errors of type ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT, found 0
@@ -341,14 +307,6 @@
 
   @override
   @failingTest
-  void test_fieldInitializerOutsideConstructor() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, found 0
-    super.test_fieldInitializerOutsideConstructor();
-  }
-
-  @override
-  @failingTest
   void test_getterInFunction_block_noReturnType() {
     // TODO(brianwilkerson) Does not recover.
     //   type 'ExpressionStatementImpl' is not a subtype of type 'FunctionDeclarationStatement' of 'statement' where
@@ -485,22 +443,6 @@
 
   @override
   @failingTest
-  void test_invalidConstructorName_with() {
-    // TODO(brianwilkerson) Does not recover.
-    //   type 'DeclaredSimpleIdentifier' is not a subtype of type 'TypeAnnotation' of 'returnType' where
-    //   DeclaredSimpleIdentifier is from package:analyzer/src/dart/ast/ast.dart
-    //   TypeAnnotation is from package:analyzer/dart/ast/ast.dart
-    //
-    //   package:analyzer/src/fasta/ast_builder.dart 1620:33                AstBuilder.endMethod
-    //   test/generated/parser_fasta_listener.dart 926:14                   ForwardingTestListener.endMethod
-    //   package:front_end/src/fasta/parser/parser.dart 2433:14             Parser.parseMethod
-    //   package:front_end/src/fasta/parser/parser.dart 2323:11             Parser.parseMember
-    //   test/generated/parser_fasta_test.dart 3179:39                      ParserProxy._run
-    super.test_invalidConstructorName_with();
-  }
-
-  @override
-  @failingTest
   void test_invalidHexEscape_invalidDigit() {
     // TODO(brianwilkerson) Does not recover.
     //   Internal problem: Compiler cannot run without a compiler context.
@@ -590,14 +532,6 @@
 
   @override
   @failingTest
-  void test_invalidOperatorForSuper() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, found 0
-    super.test_invalidOperatorForSuper();
-  }
-
-  @override
-  @failingTest
   void test_invalidStarAfterAsync() {
     // TODO(brianwilkerson) Does not recover.
     //   Expected: an object with length of <1>
@@ -1008,23 +942,6 @@
 
   @override
   @failingTest
-  void test_missingStatement() {
-    // TODO(brianwilkerson) Does not recover.
-    //   'package:front_end/src/fasta/source/stack_listener.dart': Failed assertion: line 311 pos 12: 'arrayLength > 0': is not true.
-    //   dart:core                                                          _AssertionError._throwNew
-    //   package:front_end/src/fasta/source/stack_listener.dart 311:12      Stack.pop
-    //   package:front_end/src/fasta/source/stack_listener.dart 95:25       StackListener.pop
-    //   package:analyzer/src/fasta/ast_builder.dart 262:34                 AstBuilder.endExpressionStatement
-    //   test/generated/parser_fasta_listener.dart 724:14                   ForwardingTestListener.endExpressionStatement
-    //   package:front_end/src/fasta/parser/parser.dart 2863:14             Parser.parseExpressionStatement
-    //   package:front_end/src/fasta/parser/parser.dart 2790:14             Parser.parseStatementX
-    //   package:front_end/src/fasta/parser/parser.dart 2722:20             Parser.parseStatement
-    //   test/generated/parser_fasta_test.dart 3640:39                      ParserProxy._run
-    super.test_missingStatement();
-  }
-
-  @override
-  @failingTest
   void test_missingStatement_afterVoid() {
     // TODO(brianwilkerson) Wrong errors:
     // Expected 1 errors of type ParserErrorCode.MISSING_STATEMENT, found 0
@@ -1861,7 +1778,7 @@
   Uri get fileUri => uri;
 
   @override
-  void addCompileTimeError(Message message, int charOffset, Uri uri,
+  void addCompileTimeError(Message message, int charOffset, int length, Uri uri,
       {bool silent: false, bool wasHandled: false, LocatedMessage context}) {
     fail('${message.message}');
   }
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index e300956..9a03215 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -2562,7 +2562,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors(
-        [expectedError(ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, 10, 2)]);
+        [expectedError(ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, 10, 1)]);
   }
 
   void test_constEnum() {
@@ -3233,11 +3233,8 @@
     createParser('external factory C() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    // TODO(brianwilkerson) Convert codes to errors when highlighting is fixed.
-    listener.assertErrorsWithCodes(
-        [ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY]);
-//    listener.assertErrors(
-//        [expectedError(ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY, 21, 2)]);
+    listener.assertErrors(
+        [expectedError(ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY, 21, 1)]);
   }
 
   void test_externalConstructorWithBody_named() {
@@ -3462,7 +3459,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 7, 6)
+      expectedError(ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 7, 4)
     ]);
   }
 
@@ -3534,6 +3531,21 @@
         errors: [expectedError(ParserErrorCode.FINAL_TYPEDEF, 0, 5)]);
   }
 
+  void test_functionTypedField_invalidType_abstract() {
+    if (usingFastaParser) {
+      parseCompilationUnit("Function(abstract) x = null;", errors: [
+        expectedError(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, 9, 8)
+      ]);
+    }
+  }
+
+  void test_functionTypedField_invalidType_class() {
+    if (usingFastaParser) {
+      parseCompilationUnit("Function(class) x = null;",
+          errors: [expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 9, 5)]);
+    }
+  }
+
   void test_functionTypedParameter_const() {
     parseCompilationUnit("void f(const x()) {}",
         errors: usingFastaParser
@@ -3784,8 +3796,11 @@
     createParser("C.with();");
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.INVALID_CONSTRUCTOR_NAME, 0, 1)]);
+    listener.assertErrors([
+      usingFastaParser
+          ? expectedError(ParserErrorCode.MISSING_IDENTIFIER, 2, 4)
+          : expectedError(ParserErrorCode.INVALID_CONSTRUCTOR_NAME, 0, 1)
+    ]);
   }
 
   void test_invalidHexEscape_invalidDigit() {
@@ -3867,8 +3882,11 @@
     createParser('++super');
     Expression expression = parser.parseUnaryExpression();
     expectNotNullIfNoErrors(expression);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, 0, 2)]);
+    listener.assertErrors([
+      usingFastaParser
+          ? expectedError(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 2, 5)
+          : expectedError(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, 0, 2)
+    ]);
   }
 
   void test_invalidStarAfterAsync() {
@@ -4513,8 +4531,12 @@
 
   void test_missingStatement() {
     parseStatement("is");
-    listener
-        .assertErrors([expectedError(ParserErrorCode.MISSING_STATEMENT, 2, 0)]);
+    listener.assertErrors(usingFastaParser
+        ? [
+            expectedError(ParserErrorCode.MISSING_IDENTIFIER, 0, 2),
+            expectedError(ParserErrorCode.EXPECTED_TOKEN, 2, 0)
+          ]
+        : [expectedError(ParserErrorCode.MISSING_STATEMENT, 2, 0)]);
   }
 
   void test_missingStatement_afterVoid() {
@@ -15647,8 +15669,22 @@
       for (Keyword keyword in Keyword.values) {
         if (keyword.isBuiltIn || keyword.isPseudo) {
           String lexeme = keyword.lexeme;
-          parseCompilationUnit('$lexeme<T>(x) => 0;');
-          parseCompilationUnit('class C {$lexeme<T>(x) => 0;}');
+          List<ExpectedError> expectedErrors = [];
+          if (lexeme == 'dynamic') {
+            expectedErrors = [
+              expectedError(
+                  ParserErrorCode.TYPE_ARGUMENTS_ON_TYPE_VARIABLE, 7, 1)
+            ];
+          }
+          parseCompilationUnit('$lexeme<T>(x) => 0;', errors: expectedErrors);
+          if (lexeme == 'dynamic') {
+            expectedErrors = [
+              expectedError(
+                  ParserErrorCode.TYPE_ARGUMENTS_ON_TYPE_VARIABLE, 16, 1)
+            ];
+          }
+          parseCompilationUnit('class C {$lexeme<T>(x) => 0;}',
+              errors: expectedErrors);
         }
       }
     }
diff --git a/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart b/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
index 029ad6b..b3f133b 100644
--- a/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/dart/analysis/context_root.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/context_locator.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
@@ -56,8 +57,8 @@
     File outerPackagesFile = newPackagesFile('/test/outer');
     Folder innerRootFolder = newFolder('/test/outer/examples/inner');
 
-    List<ContextRoot> roots = contextLocator
-        .locateRoots([outerRootFolder.path, innerRootFolder.path]);
+    List<ContextRoot> roots = contextLocator.locateRoots(
+        includedPaths: [outerRootFolder.path, innerRootFolder.path]);
     expect(roots, hasLength(1));
 
     ContextRoot outerRoot = findRoot(roots, outerRootFolder);
@@ -73,8 +74,8 @@
     File outerPackagesFile = newPackagesFile('/test/outer');
     File testFile = newFile('/test/outer/examples/inner/test.dart');
 
-    List<ContextRoot> roots =
-        contextLocator.locateRoots([outerRootFolder.path, testFile.path]);
+    List<ContextRoot> roots = contextLocator
+        .locateRoots(includedPaths: [outerRootFolder.path, testFile.path]);
     expect(roots, hasLength(1));
 
     ContextRoot outerRoot = findRoot(roots, outerRootFolder);
@@ -93,8 +94,8 @@
     File outer2OptionsFile = newOptionsFile('/test/outer2');
     File outer2PackagesFile = newPackagesFile('/test/outer2');
 
-    List<ContextRoot> roots = contextLocator
-        .locateRoots([outer1RootFolder.path, outer2RootFolder.path]);
+    List<ContextRoot> roots = contextLocator.locateRoots(
+        includedPaths: [outer1RootFolder.path, outer2RootFolder.path]);
     expect(roots, hasLength(2));
 
     ContextRoot outer1Root = findRoot(roots, outer1RootFolder);
@@ -119,8 +120,8 @@
     File outer2PackagesFile = newPackagesFile('/test/outer2');
     File testFile = newFile('/test/outer2/test.dart');
 
-    List<ContextRoot> roots =
-        contextLocator.locateRoots([outer1RootFolder.path, testFile.path]);
+    List<ContextRoot> roots = contextLocator
+        .locateRoots(includedPaths: [outer1RootFolder.path, testFile.path]);
     expect(roots, hasLength(2));
 
     ContextRoot outer1Root = findRoot(roots, outer1RootFolder);
@@ -129,7 +130,7 @@
     expect(outer1Root.optionsFile, outer1OptionsFile);
     expect(outer1Root.packagesFile, outer1PackagesFile);
 
-    ContextRoot outer2Root = findRoot(roots, testFile);
+    ContextRoot outer2Root = findRoot(roots, testFile.parent);
     expect(outer2Root.includedPaths, unorderedEquals([testFile.path]));
     expect(outer2Root.excludedPaths, isEmpty);
     expect(outer2Root.optionsFile, outer2OptionsFile);
@@ -161,21 +162,16 @@
     File testFile1 = newFile('/test/root/test1.dart');
     File testFile2 = newFile('/test/root/test2.dart');
 
-    List<ContextRoot> roots =
-        contextLocator.locateRoots([testFile1.path, testFile2.path]);
-    expect(roots, hasLength(2));
+    List<ContextRoot> roots = contextLocator
+        .locateRoots(includedPaths: [testFile1.path, testFile2.path]);
+    expect(roots, hasLength(1));
 
-    ContextRoot outer1Root = findRootFromIncluded(roots, testFile1.path);
-    expect(outer1Root.includedPaths, unorderedEquals([testFile1.path]));
-    expect(outer1Root.excludedPaths, isEmpty);
-    expect(outer1Root.optionsFile, optionsFile);
-    expect(outer1Root.packagesFile, packagesFile);
-
-    ContextRoot outer2Root = findRootFromIncluded(roots, testFile2.path);
-    expect(outer2Root.includedPaths, unorderedEquals([testFile2.path]));
-    expect(outer2Root.excludedPaths, isEmpty);
-    expect(outer2Root.optionsFile, optionsFile);
-    expect(outer2Root.packagesFile, packagesFile);
+    ContextRoot root = findRootFromIncluded(roots, testFile1.path);
+    expect(
+        root.includedPaths, unorderedEquals([testFile1.path, testFile2.path]));
+    expect(root.excludedPaths, isEmpty);
+    expect(root.optionsFile, optionsFile);
+    expect(root.packagesFile, packagesFile);
   }
 
   void test_locateRoots_nested_excluded_dot() {
@@ -186,7 +182,7 @@
     newOptionsFile('/test/outer/.examples/inner');
 
     List<ContextRoot> roots =
-        contextLocator.locateRoots([outerRootFolder.path]);
+        contextLocator.locateRoots(includedPaths: [outerRootFolder.path]);
     expect(roots, hasLength(1));
 
     ContextRoot outerRoot = findRoot(roots, outerRootFolder);
@@ -203,7 +199,8 @@
     Folder excludedFolder = newFolder('/test/outer/examples');
     newOptionsFile('/test/outer/examples/inner');
 
-    List<ContextRoot> roots = contextLocator.locateRoots([outerRootFolder.path],
+    List<ContextRoot> roots = contextLocator.locateRoots(
+        includedPaths: [outerRootFolder.path],
         excludedPaths: [excludedFolder.path]);
     expect(roots, hasLength(1));
 
@@ -222,7 +219,7 @@
     newOptionsFile('/test/outer/packages/inner');
 
     List<ContextRoot> roots =
-        contextLocator.locateRoots([outerRootFolder.path]);
+        contextLocator.locateRoots(includedPaths: [outerRootFolder.path]);
     expect(roots, hasLength(1));
 
     ContextRoot outerRoot = findRoot(roots, outerRootFolder);
@@ -242,7 +239,7 @@
     File inner2PackagesFile = newPackagesFile('/test/outer/examples/inner2');
 
     List<ContextRoot> roots =
-        contextLocator.locateRoots([outerRootFolder.path]);
+        contextLocator.locateRoots(includedPaths: [outerRootFolder.path]);
     expect(roots, hasLength(3));
 
     ContextRoot outerRoot = findRoot(roots, outerRootFolder);
@@ -273,7 +270,7 @@
     File innerOptionsFile = newOptionsFile('/test/outer/examples/inner');
 
     List<ContextRoot> roots =
-        contextLocator.locateRoots([outerRootFolder.path]);
+        contextLocator.locateRoots(includedPaths: [outerRootFolder.path]);
     expect(roots, hasLength(2));
 
     ContextRoot outerRoot = findRoot(roots, outerRootFolder);
@@ -289,6 +286,52 @@
     expect(innerRoot.packagesFile, outerPackagesFile);
   }
 
+  void test_locateRoots_nested_options_overriddenOptions() {
+    Folder outerRootFolder = newFolder('/test/outer');
+    newOptionsFile('/test/outer');
+    File outerPackagesFile = newPackagesFile('/test/outer');
+    newFolder('/test/outer/examples/inner');
+    newOptionsFile('/test/outer/examples/inner');
+    File overrideOptionsFile = newOptionsFile('/test/override');
+
+    List<ContextRoot> roots = contextLocator.locateRoots(
+        includedPaths: [outerRootFolder.path],
+        optionsFile: overrideOptionsFile.path);
+    expect(roots, hasLength(1));
+
+    ContextRoot outerRoot = findRoot(roots, outerRootFolder);
+    expect(outerRoot.includedPaths, unorderedEquals([outerRootFolder.path]));
+    expect(outerRoot.excludedPaths, isEmpty);
+    expect(outerRoot.optionsFile, overrideOptionsFile);
+    expect(outerRoot.packagesFile, outerPackagesFile);
+  }
+
+  void test_locateRoots_nested_options_overriddenPackages() {
+    Folder outerRootFolder = newFolder('/test/outer');
+    File outerOptionsFile = newOptionsFile('/test/outer');
+    newPackagesFile('/test/outer');
+    Folder innerRootFolder = newFolder('/test/outer/examples/inner');
+    File innerOptionsFile = newOptionsFile('/test/outer/examples/inner');
+    File overridePackagesFile = newPackagesFile('/test/override');
+
+    List<ContextRoot> roots = contextLocator.locateRoots(
+        includedPaths: [outerRootFolder.path],
+        packagesFile: overridePackagesFile.path);
+    expect(roots, hasLength(2));
+
+    ContextRoot outerRoot = findRoot(roots, outerRootFolder);
+    expect(outerRoot.includedPaths, unorderedEquals([outerRootFolder.path]));
+    expect(outerRoot.excludedPaths, unorderedEquals([innerRootFolder.path]));
+    expect(outerRoot.optionsFile, outerOptionsFile);
+    expect(outerRoot.packagesFile, overridePackagesFile);
+
+    ContextRoot innerRoot = findRoot(roots, innerRootFolder);
+    expect(innerRoot.includedPaths, unorderedEquals([innerRootFolder.path]));
+    expect(innerRoot.excludedPaths, isEmpty);
+    expect(innerRoot.optionsFile, innerOptionsFile);
+    expect(innerRoot.packagesFile, overridePackagesFile);
+  }
+
   void test_locateRoots_nested_optionsAndPackages() {
     Folder outerRootFolder = newFolder('/test/outer');
     File outerOptionsFile = newOptionsFile('/test/outer');
@@ -298,7 +341,7 @@
     File innerPackagesFile = newPackagesFile('/test/outer/examples/inner');
 
     List<ContextRoot> roots =
-        contextLocator.locateRoots([outerRootFolder.path]);
+        contextLocator.locateRoots(includedPaths: [outerRootFolder.path]);
     expect(roots, hasLength(2));
 
     ContextRoot outerRoot = findRoot(roots, outerRootFolder);
@@ -314,6 +357,29 @@
     expect(innerRoot.packagesFile, innerPackagesFile);
   }
 
+  void test_locateRoots_nested_optionsAndPackages_overriddenBoth() {
+    Folder outerRootFolder = newFolder('/test/outer');
+    newOptionsFile('/test/outer');
+    newPackagesFile('/test/outer');
+    newFolder('/test/outer/examples/inner');
+    newOptionsFile('/test/outer/examples/inner');
+    newPackagesFile('/test/outer/examples/inner');
+    File overrideOptionsFile = newOptionsFile('/test/override');
+    File overridePackagesFile = newPackagesFile('/test/override');
+
+    List<ContextRoot> roots = contextLocator.locateRoots(
+        includedPaths: [outerRootFolder.path],
+        optionsFile: overrideOptionsFile.path,
+        packagesFile: overridePackagesFile.path);
+    expect(roots, hasLength(1));
+
+    ContextRoot outerRoot = findRoot(roots, outerRootFolder);
+    expect(outerRoot.includedPaths, unorderedEquals([outerRootFolder.path]));
+    expect(outerRoot.excludedPaths, isEmpty);
+    expect(outerRoot.optionsFile, overrideOptionsFile);
+    expect(outerRoot.packagesFile, overridePackagesFile);
+  }
+
   void test_locateRoots_nested_packages() {
     Folder outerRootFolder = newFolder('/test/outer');
     File outerOptionsFile = newOptionsFile('/test/outer');
@@ -322,7 +388,7 @@
     File innerPackagesFile = newPackagesFile('/test/outer/examples/inner');
 
     List<ContextRoot> roots =
-        contextLocator.locateRoots([outerRootFolder.path]);
+        contextLocator.locateRoots(includedPaths: [outerRootFolder.path]);
     expect(roots, hasLength(2));
 
     ContextRoot outerRoot = findRoot(roots, outerRootFolder);
@@ -338,12 +404,59 @@
     expect(innerRoot.packagesFile, innerPackagesFile);
   }
 
+  void test_locateRoots_nested_packages_overriddenOptions() {
+    Folder outerRootFolder = newFolder('/test/outer');
+    newOptionsFile('/test/outer');
+    File outerPackagesFile = newPackagesFile('/test/outer');
+    Folder innerRootFolder = newFolder('/test/outer/examples/inner');
+    File innerPackagesFile = newPackagesFile('/test/outer/examples/inner');
+    File overrideOptionsFile = newOptionsFile('/test/override');
+
+    List<ContextRoot> roots = contextLocator.locateRoots(
+        includedPaths: [outerRootFolder.path],
+        optionsFile: overrideOptionsFile.path);
+    expect(roots, hasLength(2));
+
+    ContextRoot outerRoot = findRoot(roots, outerRootFolder);
+    expect(outerRoot.includedPaths, unorderedEquals([outerRootFolder.path]));
+    expect(outerRoot.excludedPaths, unorderedEquals([innerRootFolder.path]));
+    expect(outerRoot.optionsFile, overrideOptionsFile);
+    expect(outerRoot.packagesFile, outerPackagesFile);
+
+    ContextRoot innerRoot = findRoot(roots, innerRootFolder);
+    expect(innerRoot.includedPaths, unorderedEquals([innerRootFolder.path]));
+    expect(innerRoot.excludedPaths, isEmpty);
+    expect(innerRoot.optionsFile, overrideOptionsFile);
+    expect(innerRoot.packagesFile, innerPackagesFile);
+  }
+
+  void test_locateRoots_nested_packages_overriddenPackages() {
+    Folder outerRootFolder = newFolder('/test/outer');
+    File outerOptionsFile = newOptionsFile('/test/outer');
+    newPackagesFile('/test/outer');
+    newFolder('/test/outer/examples/inner');
+    newPackagesFile('/test/outer/examples/inner');
+    File overridePackagesFile = newPackagesFile('/test/override');
+
+    List<ContextRoot> roots = contextLocator.locateRoots(
+        includedPaths: [outerRootFolder.path],
+        packagesFile: overridePackagesFile.path);
+    expect(roots, hasLength(1));
+
+    ContextRoot outerRoot = findRoot(roots, outerRootFolder);
+    expect(outerRoot.includedPaths, unorderedEquals([outerRootFolder.path]));
+    expect(outerRoot.excludedPaths, isEmpty);
+    expect(outerRoot.optionsFile, outerOptionsFile);
+    expect(outerRoot.packagesFile, overridePackagesFile);
+  }
+
   void test_locateRoots_single_dir_directOptions_directPackages() {
     Folder rootFolder = newFolder('/test/root');
     File optionsFile = newOptionsFile('/test/root');
     File packagesFile = newPackagesFile('/test/root');
 
-    List<ContextRoot> roots = contextLocator.locateRoots([rootFolder.path]);
+    List<ContextRoot> roots =
+        contextLocator.locateRoots(includedPaths: [rootFolder.path]);
     expect(roots, hasLength(1));
 
     ContextRoot package1Root = findRoot(roots, rootFolder);
@@ -358,7 +471,8 @@
     File optionsFile = newOptionsFile('/test/root');
     File packagesFile = newPackagesFile('/test');
 
-    List<ContextRoot> roots = contextLocator.locateRoots([rootFolder.path]);
+    List<ContextRoot> roots =
+        contextLocator.locateRoots(includedPaths: [rootFolder.path]);
     expect(roots, hasLength(1));
 
     ContextRoot package1Root = findRoot(roots, rootFolder);
@@ -373,7 +487,8 @@
     File optionsFile = newOptionsFile('/test');
     File packagesFile = newPackagesFile('/test/root');
 
-    List<ContextRoot> roots = contextLocator.locateRoots([rootFolder.path]);
+    List<ContextRoot> roots =
+        contextLocator.locateRoots(includedPaths: [rootFolder.path]);
     expect(roots, hasLength(1));
 
     ContextRoot package1Root = findRoot(roots, rootFolder);
@@ -388,7 +503,8 @@
     File optionsFile = newOptionsFile('/test');
     File packagesFile = newPackagesFile('/test');
 
-    List<ContextRoot> roots = contextLocator.locateRoots([rootFolder.path]);
+    List<ContextRoot> roots =
+        contextLocator.locateRoots(includedPaths: [rootFolder.path]);
     expect(roots, hasLength(1));
 
     ContextRoot package1Root = findRoot(roots, rootFolder);
@@ -403,10 +519,11 @@
     File packagesFile = newPackagesFile('/test/root');
     File testFile = newFile('/test/root/test.dart');
 
-    List<ContextRoot> roots = contextLocator.locateRoots([testFile.path]);
+    List<ContextRoot> roots =
+        contextLocator.locateRoots(includedPaths: [testFile.path]);
     expect(roots, hasLength(1));
 
-    ContextRoot package1Root = findRoot(roots, testFile);
+    ContextRoot package1Root = findRoot(roots, testFile.parent);
     expect(package1Root.includedPaths, unorderedEquals([testFile.path]));
     expect(package1Root.excludedPaths, isEmpty);
     expect(package1Root.optionsFile, optionsFile);
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 5761eb3..d2a4e23 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -110,28 +110,105 @@
 }
 ''');
     var files = <String>[];
-    List<Declaration> declarations = await driver.search.declarations(files);
-    _assertHasDeclaration(declarations, 'C', DeclarationKind.CLASS, 6);
-    _assertHasDeclaration(declarations, 'f', DeclarationKind.FIELD, 16, 'C');
-    _assertHasDeclaration(
-        declarations, 'named', DeclarationKind.CONSTRUCTOR, 30, 'C');
-    _assertHasDeclaration(declarations, 'g', DeclarationKind.GETTER, 49, 'C');
-    _assertHasDeclaration(declarations, 's', DeclarationKind.SETTER, 68, 'C');
-    _assertHasDeclaration(declarations, 'm', DeclarationKind.METHOD, 83, 'C');
+    List<Declaration> declarations =
+        await driver.search.declarations(null, null, files);
+    _assertHasDeclaration(declarations, 'C', DeclarationKind.CLASS,
+        offset: 6, codeOffset: 0, codeLength: 91);
+    _assertHasDeclaration(declarations, 'f', DeclarationKind.FIELD,
+        offset: 16, codeOffset: 12, codeLength: 6, className: 'C');
+    _assertHasDeclaration(declarations, 'named', DeclarationKind.CONSTRUCTOR,
+        offset: 30, codeOffset: 28, codeLength: 10, className: 'C');
+    _assertHasDeclaration(declarations, 'g', DeclarationKind.GETTER,
+        offset: 49, codeOffset: 41, codeLength: 15, className: 'C');
+    _assertHasDeclaration(declarations, 's', DeclarationKind.SETTER,
+        offset: 68, codeOffset: 59, codeLength: 16, className: 'C');
+    _assertHasDeclaration(declarations, 'm', DeclarationKind.METHOD,
+        offset: 83, codeOffset: 78, codeLength: 11, className: 'C');
   }
 
   test_declarations_enum() async {
     await _resolveTestUnit('''
 enum E {
-  a, b, c
+  a, bb, ccc
 }
 ''');
     var files = <String>[];
-    List<Declaration> declarations = await driver.search.declarations(files);
-    _assertHasDeclaration(declarations, 'E', DeclarationKind.ENUM, 5);
-    _assertHasDeclaration(declarations, 'a', DeclarationKind.ENUM_CONSTANT, 11);
-    _assertHasDeclaration(declarations, 'b', DeclarationKind.ENUM_CONSTANT, 14);
-    _assertHasDeclaration(declarations, 'c', DeclarationKind.ENUM_CONSTANT, 17);
+    List<Declaration> declarations =
+        await driver.search.declarations(null, null, files);
+    _assertHasDeclaration(declarations, 'E', DeclarationKind.ENUM,
+        offset: 5, codeOffset: 0, codeLength: 23);
+    _assertHasDeclaration(declarations, 'a', DeclarationKind.ENUM_CONSTANT,
+        offset: 11, codeOffset: 11, codeLength: 1);
+    _assertHasDeclaration(declarations, 'bb', DeclarationKind.ENUM_CONSTANT,
+        offset: 14, codeOffset: 14, codeLength: 2);
+    _assertHasDeclaration(declarations, 'ccc', DeclarationKind.ENUM_CONSTANT,
+        offset: 18, codeOffset: 18, codeLength: 3);
+  }
+
+  test_declarations_maxResults() async {
+    await _resolveTestUnit('''
+class A {}
+class B {}
+class C {}
+''');
+    var files = <String>[];
+    List<Declaration> declarations =
+        await driver.search.declarations(null, 2, files);
+    expect(declarations, hasLength(2));
+  }
+
+  test_declarations_regExp() async {
+    await _resolveTestUnit('''
+class A {}
+class B {}
+class C {}
+class D {}
+''');
+    var files = <String>[];
+    List<Declaration> declarations =
+        await driver.search.declarations(new RegExp(r'[A-C]'), null, files);
+    _assertHasDeclaration(declarations, 'A', DeclarationKind.CLASS);
+    _assertHasDeclaration(declarations, 'B', DeclarationKind.CLASS);
+    _assertHasDeclaration(declarations, 'C', DeclarationKind.CLASS);
+    _assertNoDeclaration(declarations, 'D');
+  }
+
+  test_declarations_parameters() async {
+    await _resolveTestUnit('''
+class C {
+  int get g => 0;
+  void m(int a, double b) {}
+}
+void f(bool a, String b) {}
+typedef F(int a);
+''');
+    var files = <String>[];
+    List<Declaration> declarations =
+        await driver.search.declarations(null, null, files);
+
+    Declaration declaration;
+
+    declaration =
+        _assertHasDeclaration(declarations, 'C', DeclarationKind.CLASS);
+    expect(declaration.parameters, isNull);
+
+    declaration = _assertHasDeclaration(
+        declarations, 'g', DeclarationKind.GETTER,
+        className: 'C');
+    expect(declaration.parameters, isNull);
+
+    declaration = _assertHasDeclaration(
+        declarations, 'm', DeclarationKind.METHOD,
+        className: 'C');
+    expect(declaration.parameters, '(int a, double b)');
+
+    declaration =
+        _assertHasDeclaration(declarations, 'f', DeclarationKind.FUNCTION);
+    expect(declaration.parameters, '(bool a, String b)');
+
+    declaration = _assertHasDeclaration(
+        declarations, 'F', DeclarationKind.FUNCTION_TYPE_ALIAS);
+    expect(declaration.parameters, '(int a)');
   }
 
   test_declarations_top() async {
@@ -144,15 +221,28 @@
 typedef tf2<T> = int Function<S>(T tp, S sp);
 ''');
     var files = <String>[];
-    List<Declaration> declarations = await driver.search.declarations(files);
-    _assertHasDeclaration(declarations, 'g', DeclarationKind.GETTER, 8);
-    _assertHasDeclaration(declarations, 's', DeclarationKind.SETTER, 25);
-    _assertHasDeclaration(declarations, 'f', DeclarationKind.FUNCTION, 38);
-    _assertHasDeclaration(declarations, 'v', DeclarationKind.VARIABLE, 54);
+    List<Declaration> declarations =
+        await driver.search.declarations(null, null, files);
+    _assertHasDeclaration(declarations, 'g', DeclarationKind.GETTER,
+        offset: 8, codeOffset: 0, codeLength: 15);
+    _assertHasDeclaration(declarations, 's', DeclarationKind.SETTER,
+        offset: 25, codeOffset: 16, codeLength: 16);
     _assertHasDeclaration(
-        declarations, 'tf1', DeclarationKind.FUNCTION_TYPE_ALIAS, 70);
+      declarations,
+      'f',
+      DeclarationKind.FUNCTION,
+      offset: 38,
+      codeOffset: 33,
+      codeLength: 16,
+    );
+    _assertHasDeclaration(declarations, 'v', DeclarationKind.VARIABLE,
+        offset: 54, codeOffset: 50, codeLength: 6);
     _assertHasDeclaration(
-        declarations, 'tf2', DeclarationKind.FUNCTION_TYPE_ALIAS, 85);
+        declarations, 'tf1', DeclarationKind.FUNCTION_TYPE_ALIAS,
+        offset: 70, codeOffset: 57, codeLength: 19);
+    _assertHasDeclaration(
+        declarations, 'tf2', DeclarationKind.FUNCTION_TYPE_ALIAS,
+        offset: 85, codeOffset: 77, codeLength: 45);
     // No declaration for type variables.
     _assertNoDeclaration(declarations, 'T');
     _assertNoDeclaration(declarations, 'S');
@@ -1248,22 +1338,25 @@
         unorderedEquals([a, b, c, d, e]));
   }
 
-  void _assertHasDeclaration(List<Declaration> declarations, String name,
-      DeclarationKind kind, int offset,
-      [String className]) {
+  Declaration _assertHasDeclaration(
+      List<Declaration> declarations, String name, DeclarationKind kind,
+      {int offset, int codeOffset, int codeLength, String className}) {
     for (var declaration in declarations) {
       if (declaration.name == name &&
           declaration.kind == kind &&
-          declaration.offset == offset &&
+          (offset == null || declaration.offset == offset) &&
+          (codeOffset == null || declaration.codeOffset == codeOffset) &&
+          (codeLength == null || declaration.codeLength == codeLength) &&
           declaration.className == className) {
-        return;
+        return declaration;
       }
     }
     var actual = declarations
-        .map((d) => '(name=${d.name}, kind=${d.kind}, offset=${d.offset})')
+        .map((d) => '(name=${d.name}, kind=${d.kind}, offset=${d.offset}, '
+            'codeOffset=${d.codeOffset}, codeLength=${d.codeLength})')
         .join('\n');
-    fail(
-        'Exected to find (name=$name, kind=$kind, offset=$offset) in\n$actual');
+    fail('Exected to find (name=$name, kind=$kind, offset=$offset, '
+        'codeOffset=$codeOffset, codeLength=$codeLength) in\n$actual');
   }
 
   void _assertNoDeclaration(List<Declaration> declarations, String name) {
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
index c821b21..2669e5c 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
@@ -62,6 +62,10 @@
   AnalysisOptionsImpl createOptions() =>
       super.createOptions()..strongMode = true;
 
+  @failingTest // See dartbug.com/32290
+  test_const_constructor_inferred_args() =>
+      test_const_constructor_inferred_args();
+
   @override
   @failingTest
   test_instantiateToBounds_functionTypeAlias_simple() async {
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 4c392b1..84a0684 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -2474,6 +2474,41 @@
     }
   }
 
+  test_const_constructor_inferred_args() async {
+    if (!isStrongMode) return;
+    var library = await checkLibrary('''
+class C<T> {
+  final T t;
+  const C(this.t);
+  const C.named(this.t);
+}
+const Object x = const C(0);
+const Object y = const C.named(0);
+''');
+    checkElementText(library, '''
+class C<T> {
+  final T t;
+  const C(T this.t);
+  const C.named(T this.t);
+}
+const Object x = const
+        C/*location: test.dart;C*/(0);
+const Object y = const
+        C/*location: test.dart;C*/.
+        named/*location: test.dart;C;named*/(0);
+''');
+    TopLevelVariableElementImpl x =
+        library.definingCompilationUnit.topLevelVariables[0];
+    InstanceCreationExpression xExpr = x.constantInitializer;
+    var xType = xExpr.constructorName.staticElement.returnType;
+    expect(xType.toString(), 'C<int>');
+    TopLevelVariableElementImpl y =
+        library.definingCompilationUnit.topLevelVariables[0];
+    InstanceCreationExpression yExpr = y.constantInitializer;
+    var yType = yExpr.constructorName.staticElement.returnType;
+    expect(yType.toString(), 'C<int>');
+  }
+
   test_const_finalField_hasConstConstructor() async {
     var library = await checkLibrary(r'''
 class C {
diff --git a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
index 668c30f..9f18b85 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
@@ -147,6 +147,10 @@
     await super.test_class_type_parameters_bound();
   }
 
+  @failingTest // See dartbug.com/32290
+  test_const_constructor_inferred_args() =>
+      test_const_constructor_inferred_args();
+
   @failingTest
   @FastaProblem('https://github.com/dart-lang/sdk/issues/30258')
   test_constructor_redirected_factory_named_generic() async {
diff --git a/pkg/analyzer/test/src/task/options_test.dart b/pkg/analyzer/test/src/task/options_test.dart
index 0f45305..bca19f8 100644
--- a/pkg/analyzer/test/src/task/options_test.dart
+++ b/pkg/analyzer/test/src/task/options_test.dart
@@ -46,7 +46,7 @@
 
   AnalysisOptions get analysisOptions => context.analysisOptions;
 
-  configureContext(String optionsSource) =>
+  void configureContext(String optionsSource) =>
       applyToAnalysisOptions(analysisOptions, parseOptions(optionsSource));
 
   Map<String, YamlNode> parseOptions(String source) =>
diff --git a/pkg/analyzer_cli/lib/src/build_mode.dart b/pkg/analyzer_cli/lib/src/build_mode.dart
index f7ee91b..b4a13f5 100644
--- a/pkg/analyzer_cli/lib/src/build_mode.dart
+++ b/pkg/analyzer_cli/lib/src/build_mode.dart
@@ -360,6 +360,8 @@
       }
     });
 
+    String rootPath =
+        options.sourceFiles.isEmpty ? null : options.sourceFiles.first;
     DartSdk sdk;
     logger.run('Add SDK bundle', () {
       PackageBundle sdkBundle;
@@ -375,7 +377,7 @@
             options.strongMode);
         dartSdk.analysisOptions =
             Driver.createAnalysisOptionsForCommandLineOptions(
-                resourceProvider, options);
+                resourceProvider, options, rootPath);
         dartSdk.useSummary = !options.buildSummaryOnly;
         sdk = dartSdk;
         sdkBundle = dartSdk.getSummarySdkBundle(options.strongMode);
@@ -392,7 +394,7 @@
     ]);
 
     analysisOptions = Driver.createAnalysisOptionsForCommandLineOptions(
-        resourceProvider, options);
+        resourceProvider, options, rootPath);
 
     AnalysisDriverScheduler scheduler = new AnalysisDriverScheduler(logger);
     analysisDriver = new AnalysisDriver(
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index a2ecdf1..ef33b5b 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -252,23 +252,60 @@
       outSink.writeln("Analyzing ${fileNames.join(', ')}...");
     }
 
-    // Create a context, or re-use the previous one.
-    try {
-      _createContextAndAnalyze(options);
-    } on _DriverError catch (error) {
-      outSink.writeln(error.msg);
-      return ErrorSeverity.ERROR;
+    // These are used to do part file analysis across sources.
+    Set<Uri> libUris = new Set<Uri>();
+    Set<Source> danglingParts = new Set<Source>();
+
+    // Note: This references _context via closure, so it will change over time
+    // during the following analysis.
+    SeverityProcessor defaultSeverityProcessor = (AnalysisError error) {
+      return determineProcessedSeverity(
+          error, options, _context.analysisOptions);
+    };
+
+    // We currently print out to stderr to ensure that when in batch mode we
+    // print to stderr, this is because the prints from batch are made to
+    // stderr. The reason that options.shouldBatch isn't used is because when
+    // the argument flags are constructed in BatchRunner and passed in from
+    // batch mode which removes the batch flag to prevent the "cannot have the
+    // batch flag and source file" error message.
+    ErrorFormatter formatter;
+    if (options.machineFormat) {
+      formatter = new MachineErrorFormatter(errorSink, options, stats,
+          severityProcessor: defaultSeverityProcessor);
+    } else {
+      formatter = new HumanErrorFormatter(outSink, options, stats,
+          severityProcessor: defaultSeverityProcessor);
     }
 
-    // Add all the files to be analyzed en masse to the context. Skip any
-    // files that were added earlier (whether explicitly or implicitly) to
-    // avoid causing those files to be unnecessarily re-read.
-    Set<Source> knownSources = context.sources.toSet();
-    Set<Source> sourcesToAnalyze = new Set<Source>();
-    ChangeSet changeSet = new ChangeSet();
+    ErrorSeverity allResult = ErrorSeverity.NONE;
+
+    void reportPartError(Source partSource) {
+      errorSink
+          .writeln("${partSource.fullName} is a part and cannot be analyzed.");
+      errorSink.writeln("Please pass in a library that contains this part.");
+      io.exitCode = ErrorSeverity.ERROR.ordinal;
+      allResult = allResult.max(ErrorSeverity.ERROR);
+    }
+
     for (String sourcePath in options.sourceFiles) {
       sourcePath = sourcePath.trim();
 
+      // Create a context, or re-use the previous one.
+      try {
+        _createContextAndAnalyze(options, sourcePath);
+      } on _DriverError catch (error) {
+        outSink.writeln(error.msg);
+        return ErrorSeverity.ERROR;
+      }
+
+      // Add all the files to be analyzed en masse to the context. Skip any
+      // files that were added earlier (whether explicitly or implicitly) to
+      // avoid causing those files to be unnecessarily re-read.
+      Set<Source> knownSources = context.sources.toSet();
+      Set<Source> sourcesToAnalyze = new Set<Source>();
+      ChangeSet changeSet = new ChangeSet();
+
       // Collect files for analysis.
       // Note that these files will all be analyzed in the same context.
       // This should be updated when the ContextManager re-work is complete
@@ -292,109 +329,102 @@
       if (analysisDriver == null) {
         context.applyChanges(changeSet);
       }
-    }
 
-    // Analyze the libraries.
-    ErrorSeverity allResult = ErrorSeverity.NONE;
-    List<Uri> libUris = <Uri>[];
-    Set<Source> partSources = new Set<Source>();
+      // Analyze the libraries.
+      Set<Source> partSources = new Set<Source>();
 
-    SeverityProcessor defaultSeverityProcessor = (AnalysisError error) {
-      return determineProcessedSeverity(
-          error, options, _context.analysisOptions);
-    };
-
-    // We currently print out to stderr to ensure that when in batch mode we
-    // print to stderr, this is because the prints from batch are made to
-    // stderr. The reason that options.shouldBatch isn't used is because when
-    // the argument flags are constructed in BatchRunner and passed in from
-    // batch mode which removes the batch flag to prevent the "cannot have the
-    // batch flag and source file" error message.
-    ErrorFormatter formatter;
-    if (options.machineFormat) {
-      formatter = new MachineErrorFormatter(errorSink, options, stats,
-          severityProcessor: defaultSeverityProcessor);
-    } else {
-      formatter = new HumanErrorFormatter(outSink, options, stats,
-          severityProcessor: defaultSeverityProcessor);
-    }
-
-    for (Source source in sourcesToAnalyze) {
-      if (analysisDriver != null &&
-          (source.shortName == AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE ||
-              source.shortName == AnalysisEngine.ANALYSIS_OPTIONS_FILE)) {
-        file_system.File file = resourceProvider.getFile(source.fullName);
-        String content = file.readAsStringSync();
-        LineInfo lineInfo = new LineInfo.fromContent(content);
-        List<AnalysisError> errors =
-            GenerateOptionsErrorsTask.analyzeAnalysisOptions(
-                file.createSource(), content, analysisDriver.sourceFactory);
-        formatter.formatErrors([new AnalysisErrorInfoImpl(errors, lineInfo)]);
-        for (AnalysisError error in errors) {
-          allResult = allResult.max(determineProcessedSeverity(
-              error, options, _context.analysisOptions));
-        }
-      } else if (source.shortName == AnalysisEngine.PUBSPEC_YAML_FILE) {
-        try {
+      for (Source source in sourcesToAnalyze) {
+        if (analysisDriver != null &&
+            (source.shortName == AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE ||
+                source.shortName == AnalysisEngine.ANALYSIS_OPTIONS_FILE)) {
           file_system.File file = resourceProvider.getFile(source.fullName);
           String content = file.readAsStringSync();
-          YamlNode node = loadYamlNode(content);
-          if (node is YamlMap) {
-            PubspecValidator validator =
-                new PubspecValidator(resourceProvider, file.createSource());
-            LineInfo lineInfo = new LineInfo.fromContent(content);
-            List<AnalysisError> errors = validator.validate(node.nodes);
-            formatter
-                .formatErrors([new AnalysisErrorInfoImpl(errors, lineInfo)]);
-            for (AnalysisError error in errors) {
-              allResult = allResult.max(determineProcessedSeverity(
-                  error, options, _context.analysisOptions));
+          LineInfo lineInfo = new LineInfo.fromContent(content);
+          List<AnalysisError> errors =
+              GenerateOptionsErrorsTask.analyzeAnalysisOptions(
+                  file.createSource(), content, analysisDriver.sourceFactory);
+          formatter.formatErrors([new AnalysisErrorInfoImpl(errors, lineInfo)]);
+          for (AnalysisError error in errors) {
+            allResult = allResult.max(determineProcessedSeverity(
+                error, options, _context.analysisOptions));
+          }
+        } else if (source.shortName == AnalysisEngine.PUBSPEC_YAML_FILE) {
+          try {
+            file_system.File file = resourceProvider.getFile(source.fullName);
+            String content = file.readAsStringSync();
+            YamlNode node = loadYamlNode(content);
+            if (node is YamlMap) {
+              PubspecValidator validator =
+                  new PubspecValidator(resourceProvider, file.createSource());
+              LineInfo lineInfo = new LineInfo.fromContent(content);
+              List<AnalysisError> errors = validator.validate(node.nodes);
+              formatter
+                  .formatErrors([new AnalysisErrorInfoImpl(errors, lineInfo)]);
+              for (AnalysisError error in errors) {
+                allResult = allResult.max(determineProcessedSeverity(
+                    error, options, _context.analysisOptions));
+              }
+            }
+          } catch (exception) {
+            // If the file cannot be analyzed, ignore it.
+          }
+        } else {
+          SourceKind sourceKind = analysisDriver != null
+              ? await analysisDriver.getSourceKind(source.fullName)
+              : context.computeKindOf(source);
+          if (sourceKind == SourceKind.PART) {
+            partSources.add(source);
+            continue;
+          }
+          ErrorSeverity status = await _runAnalyzer(source, options, formatter);
+          allResult = allResult.max(status);
+          libUris.add(source.uri);
+          if (analysisDriver != null) {
+            // With [AnalysisDriver], we can easily mark previously dangling
+            // parts as no longer dangling once we process the lib.
+            var libFile =
+                analysisDriver.fsState.getFileForPath(source.fullName);
+            for (FileState part in libFile.partedFiles) {
+              danglingParts.remove(part.source);
             }
           }
-        } catch (exception) {
-          // If the file cannot be analyzed, ignore it.
         }
-      } else {
-        SourceKind sourceKind = analysisDriver != null
-            ? await analysisDriver.getSourceKind(source.fullName)
-            : context.computeKindOf(source);
-        if (sourceKind == SourceKind.PART) {
-          partSources.add(source);
-          continue;
-        }
-        ErrorSeverity status = await _runAnalyzer(source, options, formatter);
-        allResult = allResult.max(status);
-        libUris.add(source.uri);
       }
+
+      // Check that each part has a corresponding source in the input list.
+      for (Source partSource in partSources) {
+        if (analysisDriver != null) {
+          var partFile =
+              analysisDriver.fsState.getFileForPath(partSource.fullName);
+          if (!libUris.contains(partFile.library?.uri)) {
+            // With [AnalysisDriver], we can mark this as dangling, for now, and
+            // later on remove it from this list if its containing lib is found.
+            danglingParts.add(partSource);
+          }
+        } else {
+          final potentialLibs = context.getLibrariesContaining(partSource);
+          bool found = false;
+          for (var lib in potentialLibs) {
+            if (libUris.contains(lib.uri)) {
+              found = true;
+            }
+          }
+          if (!found) {
+            // Without an analysis driver, we can't easily mark it dangling "for
+            // now", but this path is deprecated anyway. Just give up now.
+            reportPartError(partSource);
+          }
+        }
+      }
+    }
+
+    // Any dangling parts still in this list were definitely dangling.
+    for (Source partSource in danglingParts) {
+      reportPartError(partSource);
     }
 
     formatter.flush();
 
-    // Check that each part has a corresponding source in the input list.
-    for (Source partSource in partSources) {
-      bool found = false;
-      if (analysisDriver != null) {
-        var partFile =
-            analysisDriver.fsState.getFileForPath(partSource.fullName);
-        if (libUris.contains(partFile.library?.uri)) {
-          found = true;
-        }
-      } else {
-        for (var lib in context.getLibrariesContaining(partSource)) {
-          if (libUris.contains(lib.uri)) {
-            found = true;
-          }
-        }
-      }
-      if (!found) {
-        errorSink.writeln(
-            "${partSource.fullName} is a part and cannot be analyzed.");
-        errorSink.writeln("Please pass in a library that contains this part.");
-        io.exitCode = ErrorSeverity.ERROR.ordinal;
-        allResult = allResult.max(ErrorSeverity.ERROR);
-      }
-    }
-
     if (!options.machineFormat) {
       stats.print(outSink);
     }
@@ -605,7 +635,7 @@
 
   /// Create an analysis context that is prepared to analyze sources according
   /// to the given [options], and store it in [_context].
-  void _createContextAndAnalyze(CommandLineOptions options) {
+  void _createContextAndAnalyze(CommandLineOptions options, String source) {
     // If not the same command-line options, clear cached information.
     if (!_equalCommandLineOptions(_previousOptions, options)) {
       _previousOptions = options;
@@ -615,7 +645,8 @@
     }
 
     AnalysisOptionsImpl analysisOptions =
-        createAnalysisOptionsForCommandLineOptions(resourceProvider, options);
+        createAnalysisOptionsForCommandLineOptions(
+            resourceProvider, options, source);
     analysisOptions.analyzeFunctionBodiesPredicate =
         _chooseDietParsingPolicy(options);
 
@@ -861,7 +892,9 @@
   }
 
   static AnalysisOptionsImpl createAnalysisOptionsForCommandLineOptions(
-      ResourceProvider resourceProvider, CommandLineOptions options) {
+      ResourceProvider resourceProvider,
+      CommandLineOptions options,
+      String source) {
     if (options.analysisOptionsFile != null) {
       file_system.File file =
           resourceProvider.getFile(options.analysisOptionsFile);
@@ -875,9 +908,10 @@
     if (options.sourceFiles.isEmpty) {
       contextRoot = path.current;
     } else {
-      contextRoot = options.sourceFiles[0];
-      if (!path.isAbsolute(contextRoot)) {
-        contextRoot = path.absolute(contextRoot);
+      if (path.isAbsolute(source)) {
+        contextRoot = source;
+      } else {
+        contextRoot = path.absolute(source);
       }
     }
 
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index 6158de5..f31943d 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -70,19 +70,34 @@
     String source, {
     String options: emptyOptionsFile,
     List<String> args: const <String>[],
+  }) {
+    return driveMany([source], options: options, args: args);
+  }
+
+  /// An ability to use [drive] with many sources instead of one.
+  Future<Null> driveMany(
+    List<String> sources, {
+    String options: emptyOptionsFile,
+    List<String> args: const <String>[],
   }) async {
     driver = new Driver(isTesting: true);
-    var cmd = <String>[
-      '--options',
-      path.join(testDirectory, options),
-      _adjustFileSpec(source)
-    ]..addAll(args);
+    var cmd = <String>[];
+
+    if (options != null)
+      cmd.addAll([
+        '--options',
+        path.join(testDirectory, options),
+      ]);
+
+    cmd..addAll(sources.map(_adjustFileSpec))..addAll(args);
+
     if (usePreviewDart2) {
       cmd.insert(0, '--preview-dart-2');
     }
     if (useCFE) {
       cmd.insert(0, '--use-cfe');
     }
+
     await driver.start(cmd);
   }
 
@@ -624,6 +639,15 @@
     expect(exitCode, 0);
   }
 
+  test_partFile_reversed() async {
+    Driver driver = new Driver(isTesting: true);
+    await driver.start([
+      path.join(testDirectory, 'data/library_and_parts/part1.dart'),
+      path.join(testDirectory, 'data/library_and_parts/lib.dart')
+    ]);
+    expect(exitCode, 0);
+  }
+
   test_partFile_dangling() async {
     await drive('data/library_and_parts/part2.dart');
     expect(exitCode, 3);
@@ -928,6 +952,21 @@
     expect(outSink.toString(), contains("1 error and 1 warning found."));
   }
 
+  test_analyzeFilesInDifferentContexts() async {
+    await driveMany([
+      'data/linter_project/test_file.dart',
+      'data/no_lints_project/test_file.dart',
+    ], options: null);
+
+    // Should have the lint in the project with lint rules enabled.
+    expect(
+        bulletToDash(outSink),
+        contains(path.join('linter_project', 'test_file.dart') +
+            ':7:7 - camel_case_types'));
+    // Should be just one lint in total.
+    expect(outSink.toString(), contains('1 lint found.'));
+  }
+
   Future<Null> _driveBasic() async {
     await drive('data/options_tests_project/test_file.dart',
         options: 'data/options_tests_project/$optionsFileName');
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
index 83f9c30..b9740ce 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -108,6 +107,12 @@
   CompletionSuggestionKind suggestKind = CompletionSuggestionKind.INVOCATION;
 
   /**
+   * The type that is required by the context in which the completion was
+   * activated, or `null` if there is no such type, or it cannot be determined.
+   */
+  DartType _requiredType = null;
+
+  /**
    * Determine the suggestions that should be made based upon the given
    * [CompletionTarget] and [offset].
    */
@@ -125,6 +130,20 @@
         target.containingNode.getAncestor((p) => p is MethodDeclaration);
     optype.inStaticMethodBody =
         mthDecl is MethodDeclaration && mthDecl.isStatic;
+
+    // If a value should be suggested, suggest also constructors.
+    if (optype.includeReturnValueSuggestions) {
+      // Careful: in angular plugin, `target.unit` may be null!
+      CompilationUnitElement unitElement = target.unit?.element;
+      if (unitElement != null &&
+          unitElement.context.analysisOptions.previewDart2) {
+        optype.includeConstructorSuggestions = true;
+      }
+    }
+
+    // Compute the type required by the context and set filters.
+    optype._computeRequiredTypeAndFilters(target);
+
     return optype;
   }
 
@@ -159,6 +178,58 @@
       !includeReturnValueSuggestions &&
       !includeVoidReturnSuggestions;
 
+  /**
+   * Try to determine the required context type, and configure filters.
+   */
+  void _computeRequiredTypeAndFilters(CompletionTarget target) {
+    var node = target.containingNode;
+    if (node is Expression) {
+      AstNode parent = node.parent;
+      if (parent is VariableDeclaration) {
+        _requiredType = parent.element?.type;
+      } else if (parent is AssignmentExpression) {
+        _requiredType = parent.leftHandSide.staticType;
+      } else if (node.staticParameterElement != null) {
+        _requiredType = node.staticParameterElement.type;
+      } else if (parent is NamedExpression &&
+          parent.staticParameterElement != null) {
+        _requiredType = parent.staticParameterElement.type;
+      }
+    }
+    if (_requiredType == null) {
+      return;
+    }
+    if (_requiredType.isDynamic || _requiredType.isObject) {
+      _requiredType = null;
+      return;
+    }
+
+    constructorSuggestionsFilter = (DartType dartType, int relevance) {
+      if (dartType != null) {
+        if (dartType == _requiredType) {
+          return relevance + DART_RELEVANCE_BOOST_TYPE;
+        } else if (dartType.isSubtypeOf(_requiredType)) {
+          return relevance + DART_RELEVANCE_BOOST_SUBTYPE;
+        }
+        if (target.containingNode is InstanceCreationExpression) {
+          return null;
+        }
+      }
+      return relevance;
+    };
+
+    returnValueSuggestionsFilter = (DartType dartType, int relevance) {
+      if (dartType != null) {
+        if (dartType == _requiredType) {
+          return relevance + DART_RELEVANCE_BOOST_TYPE;
+        } else if (dartType.isSubtypeOf(_requiredType)) {
+          return relevance + DART_RELEVANCE_BOOST_SUBTYPE;
+        }
+      }
+      return relevance;
+    };
+  }
+
   /// Return the statement before [entity]
   /// where [entity] can be a statement or the `}` closing the given block.
   static Statement getPreviousStatement(Block node, Object entity) {
@@ -630,31 +701,6 @@
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
     if (identical(entity, node.constructorName)) {
       optype.includeConstructorSuggestions = true;
-      optype.constructorSuggestionsFilter = (DartType dartType, int relevance) {
-        DartType localTypeAssertion = null;
-        AstNode parent = node.parent;
-        if (parent is VariableDeclaration) {
-          localTypeAssertion = parent.element?.type;
-        } else if (parent is AssignmentExpression) {
-          localTypeAssertion = parent.leftHandSide.staticType;
-        } else if (node.staticParameterElement != null) {
-          localTypeAssertion = node.staticParameterElement.type;
-        } else if (parent is NamedExpression &&
-            parent.staticParameterElement != null) {
-          localTypeAssertion = parent.staticParameterElement.type;
-        }
-        if (localTypeAssertion == null ||
-            dartType == null ||
-            localTypeAssertion.isDynamic) {
-          return relevance;
-        } else if (localTypeAssertion == dartType) {
-          return relevance + DART_RELEVANCE_INCREMENT;
-        } else if (dartType.isSubtypeOf(localTypeAssertion)) {
-          return relevance;
-        } else {
-          return null;
-        }
-      };
     }
   }
 
@@ -723,28 +769,6 @@
   void visitNamedExpression(NamedExpression node) {
     if (identical(entity, node.expression)) {
       optype.includeReturnValueSuggestions = true;
-      optype.returnValueSuggestionsFilter = (DartType dartType, int relevance) {
-        DartType type = resolutionMap.elementForNamedExpression(node)?.type;
-        bool isEnum = type != null &&
-            type.element is ClassElement &&
-            (type.element as ClassElement).isEnum;
-        if (isEnum) {
-          if (type == dartType) {
-            return relevance + DART_RELEVANCE_INCREMENT;
-          } else {
-            return null;
-          }
-        }
-        if (type != null &&
-            dartType != null &&
-            !type.isDynamic &&
-            dartType.isSubtypeOf(type)) {
-          // is correct type
-          return relevance + DART_RELEVANCE_INCREMENT;
-        } else {
-          return relevance;
-        }
-      };
       optype.includeTypeNameSuggestions = true;
 
       // Check for named parameters in constructor calls.
@@ -992,7 +1016,8 @@
 
   bool _isEntityPrevTokenSynthetic() {
     Object entity = this.entity;
-    if (entity is AstNode && entity.beginToken.previous?.isSynthetic ?? false) {
+    if (entity is AstNode &&
+        (entity.beginToken.previous?.isSynthetic ?? false)) {
       return true;
     }
     return false;
diff --git a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
index 8dafe81..c3ee9cd 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
@@ -186,7 +186,9 @@
 
   @override
   void visitNode(AstNode node) {
-    node.parent.accept(this);
+    // Support the case of searching partial ASTs by aborting on nodes with no
+    // parents. This is useful for the angular plugin.
+    node.parent?.accept(this);
   }
 
   @override
diff --git a/pkg/analyzer_plugin/lib/utilities/completion/relevance.dart b/pkg/analyzer_plugin/lib/utilities/completion/relevance.dart
index cb9b1ca..d2d37f0 100644
--- a/pkg/analyzer_plugin/lib/utilities/completion/relevance.dart
+++ b/pkg/analyzer_plugin/lib/utilities/completion/relevance.dart
@@ -7,10 +7,11 @@
 // suggestions in Dart code.
 //
 
+const int DART_RELEVANCE_BOOST_SUBTYPE = 100;
+const int DART_RELEVANCE_BOOST_TYPE = 200;
 const int DART_RELEVANCE_COMMON_USAGE = 1200;
 const int DART_RELEVANCE_DEFAULT = 1000;
 const int DART_RELEVANCE_HIGH = 2000;
-const int DART_RELEVANCE_INCREMENT = 100;
 const int DART_RELEVANCE_INHERITED_ACCESSOR = 1057;
 const int DART_RELEVANCE_INHERITED_FIELD = 1058;
 const int DART_RELEVANCE_INHERITED_METHOD = 1057;
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index c419478..b44128c 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -39,6 +39,10 @@
   /// using the kernel representation.
   /// See [CompilerOptions.useKernel] for details.
   static const String useKernel = '--use-kernel';
+
+  /// Temporary flag to revert to the old front-end once the new common
+  /// front-end is the default.
+  static const String useOldFrontend = '--use-old-frontend';
   static const String strongMode = '--strong';
   static const String platformBinaries = '--platform-binaries=.+';
 
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index f92e7cc..ddf776e 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -431,8 +431,8 @@
       }
     } else {
       if (loadedLibraries.containsLibrary(Uris.dart_mirrors)) {
-        reporter.reportErrorMessage(NO_LOCATION_SPANNABLE,
-            MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_WITH_KERNEL);
+        reporter.reportWarningMessage(NO_LOCATION_SPANNABLE,
+            MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_WITH_CFE);
       }
     }
     backend.onLibrariesLoaded(frontendStrategy.commonElements, loadedLibraries);
diff --git a/pkg/compiler/lib/src/constant_system_dart.dart b/pkg/compiler/lib/src/constant_system_dart.dart
index 36ec90b..b7201df 100644
--- a/pkg/compiler/lib/src/constant_system_dart.dart
+++ b/pkg/compiler/lib/src/constant_system_dart.dart
@@ -437,6 +437,7 @@
   final truncatingDivide = const TruncatingDivideOperation();
   final codeUnitAt = const CodeUnitAtOperation();
   final round = const UnfoldedUnaryOperation('round');
+  final abs = const UnfoldedUnaryOperation('abs');
 
   const DartConstantSystem();
 
diff --git a/pkg/compiler/lib/src/constants/constant_system.dart b/pkg/compiler/lib/src/constants/constant_system.dart
index cc0ceca..2a3d5ee 100644
--- a/pkg/compiler/lib/src/constants/constant_system.dart
+++ b/pkg/compiler/lib/src/constants/constant_system.dart
@@ -55,6 +55,7 @@
 
   BinaryOperation get codeUnitAt;
   UnaryOperation get round;
+  UnaryOperation get abs;
 
   const ConstantSystem();
 
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index b8f6ab0..27943d1 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -348,6 +348,7 @@
         '--output-type=dart|--output-type=dart-multi|--output-type=js',
         setOutputType),
     new OptionHandler(Flags.useKernel, setUseKernel),
+    new OptionHandler(Flags.useOldFrontend, ignoreOption),
     new OptionHandler(Flags.platformBinaries, setPlatformBinaries),
     new OptionHandler(Flags.noFrequencyBasedMinification, passThrough),
     new OptionHandler(Flags.verbose, setVerbose),
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index 0d03766..e04dcab 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -647,7 +647,8 @@
 
     work() {
       var queue = new WorkQueue(this.importSets);
-      _isMirrorsUsed = closedWorld.backendUsage.isMirrorsUsed;
+      _isMirrorsUsed =
+          closedWorld.backendUsage.isMirrorsUsed && !compiler.options.useKernel;
 
       // Add `main` and their recursive dependencies to the main output unit.
       // We do this upfront to avoid wasting time visiting these elements when
@@ -689,7 +690,7 @@
       }
 
       emptyQueue();
-      if (closedWorld.backendUsage.isMirrorsUsed) {
+      if (_isMirrorsUsed) {
         addDeferredMirrorElements(queue);
         emptyQueue();
       }
diff --git a/pkg/compiler/lib/src/diagnostics/messages.dart b/pkg/compiler/lib/src/diagnostics/messages.dart
index 35e0838..99f7f7f 100644
--- a/pkg/compiler/lib/src/diagnostics/messages.dart
+++ b/pkg/compiler/lib/src/diagnostics/messages.dart
@@ -289,7 +289,7 @@
   MIRRORS_EXPECTED_STRING_OR_TYPE,
   MIRRORS_EXPECTED_STRING_TYPE_OR_LIST,
   MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND,
-  MIRRORS_LIBRARY_NOT_SUPPORT_WITH_KERNEL,
+  MIRRORS_LIBRARY_NOT_SUPPORT_WITH_CFE,
   MISSING_ARGUMENT,
   MISSING_ENUM_CASES,
   MISSING_FACTORY_KEYWORD,
@@ -3803,10 +3803,12 @@
           """
 $MIRRORS_NOT_SUPPORTED_BY_BACKEND_PADDING#{importChain}"""),
 
-      MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_WITH_KERNEL:
-          const MessageTemplate(
-              MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_WITH_KERNEL, """
-dart:mirrors library is not supported when using the new kernel front end."""),
+      MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_WITH_CFE: const MessageTemplate(
+          MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_WITH_CFE, """
+dart2js no longer supports the dart:mirrors library.
+
+APIs from this library will throw a runtime error at this time, but they will
+become a compile-time error in the future."""),
 
       MessageKind.DIRECTLY_THROWING_NSM: const MessageTemplate(
           MessageKind.DIRECTLY_THROWING_NSM,
diff --git a/pkg/compiler/lib/src/elements/types.dart b/pkg/compiler/lib/src/elements/types.dart
index 4313798..13514a2 100644
--- a/pkg/compiler/lib/src/elements/types.dart
+++ b/pkg/compiler/lib/src/elements/types.dart
@@ -389,9 +389,19 @@
   final int index;
 
   /// The bound of this function type variable.
-  final DartType bound;
+  DartType _bound;
 
-  FunctionTypeVariable(this.index, this.bound);
+  FunctionTypeVariable(this.index);
+
+  DartType get bound {
+    assert(_bound != null, "Bound hasn't been set.");
+    return _bound;
+  }
+
+  void set bound(DartType value) {
+    assert(_bound == null, "Bound has already been set.");
+    _bound = value;
+  }
 
   @override
   bool get isFunctionTypeVariable => true;
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index 9a025ac..648eba8 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -544,6 +544,8 @@
     return _rtiChecksBuilder;
   }
 
+  RuntimeTypesChecksBuilder get rtiChecksBuilderForTesting => _rtiChecksBuilder;
+
   RuntimeTypesSubstitutions get rtiSubstitutions {
     assert(
         _rtiSubstitutions != null,
diff --git a/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart b/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
index fa32df8..cbeefd6 100644
--- a/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
@@ -258,6 +258,7 @@
       const TruncatingDivideOperation());
   final codeUnitAt = const CodeUnitAtRuntimeOperation();
   final round = const JavaScriptRoundOperation();
+  final abs = const UnfoldedUnaryOperation('abs');
 
   const JavaScriptConstantSystem();
 
diff --git a/pkg/compiler/lib/src/js_backend/mirrors_data.dart b/pkg/compiler/lib/src/js_backend/mirrors_data.dart
index a32d4cb..07ca9c50 100644
--- a/pkg/compiler/lib/src/js_backend/mirrors_data.dart
+++ b/pkg/compiler/lib/src/js_backend/mirrors_data.dart
@@ -555,7 +555,8 @@
   void computeMembersNeededForReflection(
       ResolutionWorldBuilder worldBuilder, ClosedWorld closedWorld) {
     if (_membersNeededForReflection != null) return;
-    if (!closedWorld.backendUsage.isMirrorsUsed) {
+    if (!closedWorld.backendUsage.isMirrorsUsed ||
+        _compiler.options.useKernel) {
       createImmutableSets();
       return;
     }
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index 3a880dc..9963c4c 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -24,6 +24,8 @@
 import 'backend_usage.dart';
 import 'namer.dart';
 
+bool cacheRtiDataForTesting = false;
+
 /// For each class, stores the possible class subtype tests that could succeed.
 abstract class TypeChecks {
   /// Get the set of checks required for class [element].
@@ -1399,6 +1401,8 @@
   @override
   TypeChecks get _requiredChecks => cachedRequiredChecks;
 
+  Map<ClassEntity, ClassUse> classUseMapForTesting;
+
   @override
   void registerTypeVariableBoundsSubtypeCheck(
       DartType typeArgument, DartType bound) {
@@ -1414,6 +1418,9 @@
     Set<DartType> implicitIsChecks = typeVariableTests.implicitIsChecks;
 
     Map<ClassEntity, ClassUse> classUseMap = <ClassEntity, ClassUse>{};
+    if (cacheRtiDataForTesting) {
+      classUseMapForTesting = classUseMap;
+    }
 
     Set<ClassEntity> checkedClasses = new Set<ClassEntity>();
     Set<FunctionType> checkedFunctionTypes = new Set<FunctionType>();
@@ -1437,15 +1444,6 @@
       }
     });
 
-    void processType(DartType t) {
-      if (t is FunctionType) {
-        checkedFunctionTypes.add(t);
-      } else if (t is InterfaceType) {
-        checkedClasses.add(t.element);
-      }
-      testedTypeVisitor.visitType(t, false);
-    }
-
     codegenWorldBuilder.instantiatedTypes.forEach((t) {
       liveTypeVisitor.visitType(t, false);
       ClassUse classUse =
@@ -1458,8 +1456,26 @@
       testedTypeVisitor.visitType(t, false);
     });
 
-    explicitIsChecks.forEach(processType);
-    implicitIsChecks.forEach(processType);
+    void processMethodTypeArguments(_, Set<DartType> typeArguments) {
+      for (DartType typeArgument in typeArguments) {
+        liveTypeVisitor.visit(typeArgument, true);
+      }
+    }
+
+    codegenWorldBuilder.forEachStaticTypeArgument(processMethodTypeArguments);
+    codegenWorldBuilder.forEachDynamicTypeArgument(processMethodTypeArguments);
+
+    void processCheckedType(DartType t) {
+      if (t is FunctionType) {
+        checkedFunctionTypes.add(t);
+      } else if (t is InterfaceType) {
+        checkedClasses.add(t.element);
+      }
+      testedTypeVisitor.visitType(t, false);
+    }
+
+    explicitIsChecks.forEach(processCheckedType);
+    implicitIsChecks.forEach(processCheckedType);
 
     cachedRequiredChecks = _computeChecks(classUseMap);
     rtiChecksBuilderClosed = true;
diff --git a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
index e329e9d..0ac5234 100644
--- a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
@@ -359,6 +359,19 @@
               return receiver[a0] = a1;
           ''', typeCheck);
       }
+    } else if (selector.isCall) {
+      if (selector.name == 'abs' && selector.argumentCount == 0) {
+        return js.statement(r'''
+          if (typeof receiver === "number") return Math.abs(receiver);
+        ''');
+      }
+    } else if (selector.isGetter) {
+      if (selector.name == 'sign') {
+        return js.statement(r'''
+          if (typeof receiver === "number")
+             return receiver > 0 ? 1 : receiver < 0 ? -1 : receiver;
+        ''');
+      }
     }
     return null;
   }
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
index 3a68f98..0b7ac2b 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
@@ -759,7 +759,7 @@
     List<StubMethod> isChecks = <StubMethod>[];
     if (_nativeData.isJsInteropClass(cls)) {
       typeTests.forEachProperty(_sorter, (js.Name name, js.Node code) {
-        _classes[_commonElements.jsInterceptorClass]
+        _classes[_commonElements.jsJavaScriptObjectClass]
             .isChecks
             .add(_buildStubMethod(name, code));
       });
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
index 0214083..0462d15 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
@@ -116,6 +116,7 @@
 // Mixes in the properties of [mixin] into [cls].
 function mixin(cls, mixin) {
   copyProperties(mixin.prototype, cls.prototype);
+  cls.prototype.constructor = cls;
 }
 
 // Creates a lazy field.
diff --git a/pkg/compiler/lib/src/js_model/closure.dart b/pkg/compiler/lib/src/js_model/closure.dart
index ab6b21e..d1dff65 100644
--- a/pkg/compiler/lib/src/js_model/closure.dart
+++ b/pkg/compiler/lib/src/js_model/closure.dart
@@ -221,7 +221,8 @@
             allBoxedVariables,
             classNeedsTypeArguments,
             methodNeedsTypeArguments,
-            localFunctionNeedsTypeArguments);
+            localFunctionNeedsTypeArguments,
+            needsSignature: localFunctionNeedsSignature(functionNode));
         // Add also for the call method.
         _scopeMap[closureClassInfo.callMethod] = closureClassInfo;
         _scopeMap[closureClassInfo.signatureMethod] = closureClassInfo;
@@ -245,13 +246,15 @@
       Map<Local, JRecordField> boxedVariables,
       bool Function(ClassEntity) classNeedsTypeArguments,
       bool Function(FunctionEntity) methodNeedsTypeArguments,
-      bool Function(ir.Node) localFunctionNeedsTypeArguments) {
+      bool Function(ir.Node) localFunctionNeedsTypeArguments,
+      {bool needsSignature}) {
     _updateScopeBasedOnRtiNeed(info, node.parent, classNeedsTypeArguments,
         methodNeedsTypeArguments, localFunctionNeedsTypeArguments, member);
     KernelToLocalsMap localsMap = _globalLocalsMap.getLocalsMap(member);
     KernelClosureClassInfo closureClassInfo =
         closedWorldBuilder.buildClosureClass(
-            member, node, member.library, boxedVariables, info, localsMap);
+            member, node, member.library, boxedVariables, info, localsMap,
+            needsSignature: needsSignature);
 
     // We want the original declaration where that function is used to point
     // to the correct closure class.
@@ -260,7 +263,7 @@
     _memberClosureRepresentationMap[closureClassInfo.signatureMethod] =
         closureClassInfo;
     _globalLocalsMap.setLocalsMap(closureClassInfo.callMethod, localsMap);
-    if (_strongMode) {
+    if (needsSignature) {
       _globalLocalsMap.setLocalsMap(
           closureClassInfo.signatureMethod, localsMap);
     }
@@ -847,10 +850,11 @@
   final TypeVariableKind kind;
   final ir.TreeNode typeDeclaration;
 
+  /// [context] can be either an ir.Member or a ir.FunctionDeclaration or
+  /// ir.FunctionExpression.
   factory TypeVariableTypeWithContext(
-      ir.TypeParameterType type, ir.Member memberContext) {
+      ir.TypeParameterType type, ir.TreeNode context) {
     TypeVariableKind kind;
-    ir.TreeNode context = memberContext;
     ir.TreeNode typeDeclaration = type.parameter.parent;
     if (typeDeclaration == null) {
       // We have a function type variable, like `T` in `void Function<T>(int)`.
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index 0d0e81b..0a09460 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -523,7 +523,8 @@
       JLibrary enclosingLibrary,
       Map<Local, JRecordField> boxedVariables,
       KernelScopeInfo info,
-      KernelToLocalsMap localsMap) {
+      KernelToLocalsMap localsMap,
+      {bool needsSignature}) {
     ClassEntity superclass = _commonElements.closureClass;
 
     KernelClosureClassInfo closureClassInfo = _elementMap.constructClosureClass(
@@ -533,7 +534,8 @@
         boxedVariables,
         info,
         localsMap,
-        new InterfaceType(superclass, const []));
+        new InterfaceType(superclass, const []),
+        needsSignature: needsSignature);
 
     // Tell the hierarchy that this is the super class. then we can use
     // .getSupertypes(class)
@@ -692,6 +694,9 @@
   final Entity Function(Entity) toBackendEntity;
   TypeConverter(this.toBackendEntity);
 
+  Map<FunctionTypeVariable, FunctionTypeVariable> _functionTypeVariables =
+      <FunctionTypeVariable, FunctionTypeVariable>{};
+
   DartType convert(DartType type) => type.accept(this, null);
 
   DartType visitVoidType(VoidType type, _) => type;
@@ -702,8 +707,7 @@
   }
 
   DartType visitFunctionTypeVariable(FunctionTypeVariable type, _) {
-    var bound = type.bound?.accept(this, null);
-    return new FunctionTypeVariable(type.index, bound);
+    return _functionTypeVariables[type];
   }
 
   DartType visitFunctionType(FunctionType type, _) {
@@ -711,9 +715,18 @@
     var parameterTypes = _visitList(type.parameterTypes);
     var optionalParameterTypes = _visitList(type.optionalParameterTypes);
     var namedParameterTypes = _visitList(type.namedParameterTypes);
-    var typeVariables = type.typeVariables
-        .map<FunctionTypeVariable>((t) => t.accept<DartType, Null>(this, null))
-        .toList();
+    List<FunctionTypeVariable> typeVariables = <FunctionTypeVariable>[];
+    for (FunctionTypeVariable typeVariable in type.typeVariables) {
+      typeVariables.add(_functionTypeVariables[typeVariable] =
+          new FunctionTypeVariable(typeVariable.index));
+    }
+    for (FunctionTypeVariable typeVariable in type.typeVariables) {
+      _functionTypeVariables[typeVariable].bound =
+          typeVariable.bound?.accept(this, null);
+    }
+    for (FunctionTypeVariable typeVariable in type.typeVariables) {
+      _functionTypeVariables.remove(typeVariable);
+    }
     var typedefType = type.typedefType?.accept(this, null);
     return new FunctionType(returnType, parameterTypes, optionalParameterTypes,
         type.namedParameters, namedParameterTypes, typeVariables, typedefType);
diff --git a/pkg/compiler/lib/src/js_model/locals.dart b/pkg/compiler/lib/src/js_model/locals.dart
index 48a03a8..af6f30a 100644
--- a/pkg/compiler/lib/src/js_model/locals.dart
+++ b/pkg/compiler/lib/src/js_model/locals.dart
@@ -36,6 +36,7 @@
   ///
   /// Use this for sharing maps between members that share IR nodes.
   void setLocalsMap(MemberEntity member, KernelToLocalsMap localsMap) {
+    assert(member != null, "No member provided.");
     assert(!_localsMaps.containsKey(member),
         "Locals map already created for $member.");
     _localsMaps[member] = localsMap;
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 980faf4..ddb3abb 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -447,8 +447,7 @@
       }
       typeVariables = new List<FunctionTypeVariable>.generate(
           node.typeParameters.length,
-          (int index) => new FunctionTypeVariable(
-              index, getDartType(node.typeParameters[index].bound)));
+          (int index) => new FunctionTypeVariable(index));
 
       DartType subst(DartType type) {
         return type.subst(typeVariables, typeParameters);
@@ -457,6 +456,10 @@
       parameterTypes = parameterTypes.map(subst).toList();
       optionalParameterTypes = optionalParameterTypes.map(subst).toList();
       namedParameterTypes = namedParameterTypes.map(subst).toList();
+      for (int index = 0; index < typeVariables.length; index++) {
+        typeVariables[index].bound =
+            subst(getDartType(node.typeParameters[index].bound));
+      }
     } else {
       typeVariables = const <FunctionTypeVariable>[];
     }
@@ -921,6 +924,10 @@
                 createTypeVariable(_getMethod(procedure), node.name, index),
                 new TypeVariableData(node));
           }
+        } else {
+          throw new UnsupportedError(
+              'Unsupported function type parameter parent '
+              'node ${func.parent}.');
         }
       }
       throw new UnsupportedError('Unsupported type parameter type node $node.');
@@ -1277,10 +1284,15 @@
       localFunction = _localFunctionMap[node] =
           new KLocalFunction(name, memberContext, executableContext, node);
       int index = 0;
+      List<KLocalTypeVariable> typeVariables = <KLocalTypeVariable>[];
       for (ir.TypeParameter typeParameter in function.typeParameters) {
-        KLocalTypeVariable typeVariable = _typeVariableMap[typeParameter] =
-            new KLocalTypeVariable(localFunction, typeParameter.name, index);
-        typeVariable.bound = getDartType(typeParameter.bound);
+        typeVariables.add(_typeVariableMap[typeParameter] =
+            new KLocalTypeVariable(localFunction, typeParameter.name, index));
+        index++;
+      }
+      index = 0;
+      for (ir.TypeParameter typeParameter in function.typeParameters) {
+        typeVariables[index].bound = getDartType(typeParameter.bound);
         index++;
       }
       localFunction.functionType = getFunctionType(function);
@@ -1648,11 +1660,7 @@
     List<FunctionTypeVariable> typeVariables;
     for (ir.TypeParameter typeParameter in node.typeParameters) {
       if (elementMap.options.strongMode) {
-        // TODO(johnniwinther): Support recursive type variable bounds, like
-        // `void Function<T extends Foo<T>>(T t)` when #31531 is fixed.
-        DartType bound = typeParameter.bound.accept(this);
-        FunctionTypeVariable typeVariable =
-            new FunctionTypeVariable(index, bound);
+        FunctionTypeVariable typeVariable = new FunctionTypeVariable(index);
         currentFunctionTypeParameters[typeParameter] = typeVariable;
         typeVariables ??= <FunctionTypeVariable>[];
         typeVariables.add(typeVariable);
@@ -1661,6 +1669,12 @@
       }
       index++;
     }
+    if (typeVariables != null) {
+      for (int index = 0; index < typeVariables.length; index++) {
+        typeVariables[index].bound =
+            node.typeParameters[index].bound.accept(this);
+      }
+    }
 
     DartType typedefType =
         node.typedef == null ? null : elementMap.getTypedefType(node.typedef);
@@ -2441,7 +2455,8 @@
       Map<Local, JRecordField> recordFieldsVisibleInScope,
       KernelScopeInfo info,
       KernelToLocalsMap localsMap,
-      InterfaceType supertype) {
+      InterfaceType supertype,
+      {bool needsSignature}) {
     InterfaceType memberThisType = member.enclosingClass != null
         ? _elementEnvironment.getThisType(member.enclosingClass)
         : null;
@@ -2510,7 +2525,7 @@
     _buildClosureClassFields(closureClassInfo, member, memberThisType, info,
         localsMap, recordFieldsVisibleInScope, memberMap);
 
-    if (options.strongMode) {
+    if (needsSignature) {
       _constructSignatureMethod(closureClassInfo, memberMap, node,
           memberThisType, location, typeVariableAccess);
     }
diff --git a/pkg/compiler/lib/src/kernel/element_map_mixins.dart b/pkg/compiler/lib/src/kernel/element_map_mixins.dart
index 9138c5f..c064fbb 100644
--- a/pkg/compiler/lib/src/kernel/element_map_mixins.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_mixins.dart
@@ -490,6 +490,8 @@
   final bool requireConstant;
   final KernelToElementMapBaseMixin elementMap;
   ir.TreeNode failNode;
+  final Map<ir.VariableDeclaration, ConstantExpression> _initializerLocals =
+      <ir.VariableDeclaration, ConstantExpression>{};
 
   Constantifier(this.elementMap, {this.requireConstant: true});
 
@@ -557,6 +559,10 @@
 
   @override
   ConstantExpression visitVariableGet(ir.VariableGet node) {
+    ConstantExpression constant = _initializerLocals[node.variable];
+    if (constant != null) {
+      return constant;
+    }
     if (node.variable.parent is ir.FunctionNode) {
       ir.FunctionNode function = node.variable.parent;
       int index = function.positionalParameters.indexOf(node.variable);
@@ -902,19 +908,20 @@
             {'constructorName': constructorName});
         return new ErroneousConstantConstructor();
       } else if (initializer is ir.LocalInitializer) {
-        // TODO(johnniwinther): Support this where it makes sense. Currently
-        // invalid initializers are currently encoded as local initializers with
-        // a throwing initializer.
-        // TODO(johnniwinther): Use [_ErroneousInitializerVisitor] in
-        // `ssa/builder_kernel.dart` to identify erroneous initializer.
-        // TODO(johnniwinther) Handle local initializers that are valid as
-        // constants, if any.
-        String constructorName = '${cls.name}.${node.name}';
-        elementMap.reporter.reportErrorMessage(
-            computeSourceSpanFromTreeNode(initializer),
-            MessageKind.INVALID_CONSTANT_CONSTRUCTOR,
-            {'constructorName': constructorName});
-        return new ErroneousConstantConstructor();
+        ir.VariableDeclaration variable = initializer.variable;
+        ConstantExpression constant = visit(variable.initializer);
+        if (constant != null) {
+          _initializerLocals[variable] = constant;
+        } else {
+          // TODO(johnniwinther): Use [_ErroneousInitializerVisitor] in
+          // `ssa/builder_kernel.dart` to identify erroneous initializer.
+          String constructorName = '${cls.name}.${node.name}';
+          elementMap.reporter.reportErrorMessage(
+              computeSourceSpanFromTreeNode(initializer),
+              MessageKind.INVALID_CONSTANT_CONSTRUCTOR,
+              {'constructorName': constructorName});
+          return new ErroneousConstantConstructor();
+        }
       } else {
         throw new UnsupportedError(
             'Unexpected initializer $initializer (${initializer.runtimeType})');
diff --git a/pkg/compiler/lib/src/kernel/front_end_adapter.dart b/pkg/compiler/lib/src/kernel/front_end_adapter.dart
index bb70bb5..2dd227a 100644
--- a/pkg/compiler/lib/src/kernel/front_end_adapter.dart
+++ b/pkg/compiler/lib/src/kernel/front_end_adapter.dart
@@ -99,6 +99,9 @@
     case fe.Severity.nit:
       reporter.reportHintMessage(span, kind, {'text': message.message});
       break;
+    case fe.Severity.context:
+      reporter.reportInfo(span, kind, {'text': message.message});
+      break;
     default:
       throw new UnimplementedError('unhandled severity ${message.severity}');
   }
diff --git a/pkg/compiler/lib/src/parser/node_listener.dart b/pkg/compiler/lib/src/parser/node_listener.dart
index 4293c57..342c4cd 100644
--- a/pkg/compiler/lib/src/parser/node_listener.dart
+++ b/pkg/compiler/lib/src/parser/node_listener.dart
@@ -748,6 +748,29 @@
   }
 
   @override
+  void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
+      Token varFinalOrConst, Token name) {
+    Link<Node> modifiers = const Link<Node>();
+    if (varFinalOrConst != null) {
+      modifiers = modifiers.prepend(new Identifier(varFinalOrConst));
+    }
+    if (covariantToken != null) {
+      modifiers = modifiers.prepend(new Identifier(covariantToken));
+    }
+    if (staticToken != null) {
+      modifiers = modifiers.prepend(new Identifier(staticToken));
+    }
+    if (externalToken != null) {
+      modifiers = modifiers.prepend(new Identifier(externalToken));
+    }
+    if (modifiers.isEmpty) {
+      pushNode(Modifiers.EMPTY);
+    } else {
+      pushNode(new Modifiers(new NodeList(null, modifiers, null, ' ')));
+    }
+  }
+
+  @override
   void endMethod(
       Token getOrSet, Token beginToken, Token beginParam, Token endToken) {
     Statement body = popNode();
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 25170a9..3492172 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -1487,6 +1487,13 @@
 
   visitNegate(HNegate node) => visitInvokeUnary(node, '-');
 
+  visitAbs(HAbs node) {
+    use(node.operand);
+    push(js
+        .js('Math.abs(#)', pop())
+        .withSourceInformation(node.sourceInformation));
+  }
+
   visitLess(HLess node) => visitRelational(node, '<');
   visitLessEqual(HLessEqual node) => visitRelational(node, '<=');
   visitGreater(HGreater node) => visitRelational(node, '>');
diff --git a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
index bb5bef1..d98db39 100644
--- a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
+++ b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
@@ -87,6 +87,7 @@
       if (selector.namedArguments.length == 0) {
         int argumentCount = selector.argumentCount;
         if (argumentCount == 0) {
+          if (name == 'abs') return const AbsSpecializer();
           if (name == 'round') return const RoundSpecializer();
           if (name == 'trim') return const TrimSpecializer();
         } else if (argumentCount == 1) {
@@ -232,6 +233,45 @@
   }
 }
 
+class AbsSpecializer extends InvokeDynamicSpecializer {
+  const AbsSpecializer();
+
+  UnaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.abs;
+  }
+
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction,
+      GlobalTypeInferenceResults results,
+      CompilerOptions options,
+      ClosedWorld closedWorld) {
+    HInstruction input = instruction.inputs[1];
+    if (input.isNumberOrNull(closedWorld)) {
+      return input.instructionType.nonNullable();
+    }
+    return super
+        .computeTypeFromInputTypes(instruction, results, options, closedWorld);
+  }
+
+  HInstruction tryConvertToBuiltin(
+      HInvokeDynamic instruction,
+      HGraph graph,
+      GlobalTypeInferenceResults results,
+      CompilerOptions options,
+      CommonElements commonElements,
+      ClosedWorld closedWorld) {
+    HInstruction input = instruction.inputs[1];
+    if (input.isNumber(closedWorld)) {
+      return new HAbs(
+          input,
+          instruction.selector,
+          computeTypeFromInputTypes(
+              instruction, results, options, closedWorld));
+    }
+    return null;
+  }
+}
+
 abstract class BinaryArithmeticSpecializer extends InvokeDynamicSpecializer {
   const BinaryArithmeticSpecializer();
 
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index 081642d..423a94d 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -26,6 +26,7 @@
 import 'validate.dart';
 
 abstract class HVisitor<R> {
+  R visitAbs(HAbs node);
   R visitAdd(HAdd node);
   R visitAwait(HAwait node);
   R visitBitAnd(HBitAnd node);
@@ -382,6 +383,7 @@
   visitFieldAccess(HFieldAccess node) => visitInstruction(node);
   visitRelational(HRelational node) => visitInvokeBinary(node);
 
+  visitAbs(HAbs node) => visitInvokeUnary(node);
   visitAdd(HAdd node) => visitBinaryArithmetic(node);
   visitBitAnd(HBitAnd node) => visitBinaryBitOp(node);
   visitBitNot(HBitNot node) => visitInvokeUnary(node);
@@ -931,6 +933,7 @@
   static const int FOREIGN_CODE_TYPECODE = 41;
   static const int REMAINDER_TYPECODE = 42;
   static const int GET_LENGTH_TYPECODE = 43;
+  static const int ABS_TYPECODE = 44;
 
   HInstruction(this.inputs, this.instructionType)
       : id = idCounter++,
@@ -2372,6 +2375,17 @@
   bool dataEquals(HInstruction other) => true;
 }
 
+class HAbs extends HInvokeUnary {
+  HAbs(HInstruction input, Selector selector, TypeMask type)
+      : super(input, selector, type);
+  accept(HVisitor visitor) => visitor.visitAbs(this);
+
+  UnaryOperation operation(ConstantSystem constantSystem) => constantSystem.abs;
+  int typeCode() => HInstruction.ABS_TYPECODE;
+  bool typeEquals(other) => other is HAbs;
+  bool dataEquals(HInstruction other) => true;
+}
+
 class HBitNot extends HInvokeUnary {
   HBitNot(HInstruction input, Selector selector, TypeMask type)
       : super(input, selector, type);
diff --git a/pkg/compiler/lib/src/ssa/ssa_tracer.dart b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
index 00e0fac..c05bf1f 100644
--- a/pkg/compiler/lib/src/ssa/ssa_tracer.dart
+++ b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
@@ -164,6 +164,11 @@
     return '$opcode: $left $right';
   }
 
+  String visitAbs(HAbs node) {
+    String operand = temporaryId(node.operand);
+    return "Abs: $operand";
+  }
+
   String visitAdd(HAdd node) => handleInvokeBinary(node, 'Add');
 
   String visitBitAnd(HBitAnd node) => handleInvokeBinary(node, 'BitAnd');
diff --git a/pkg/compiler/lib/src/ssa/types_propagation.dart b/pkg/compiler/lib/src/ssa/types_propagation.dart
index 643aad9..3fea8fd 100644
--- a/pkg/compiler/lib/src/ssa/types_propagation.dart
+++ b/pkg/compiler/lib/src/ssa/types_propagation.dart
@@ -161,6 +161,11 @@
     return instruction.operand.instructionType;
   }
 
+  TypeMask visitAbs(HAbs instruction) {
+    // TODO(sra): Can narrow to non-negative type for integers.
+    return instruction.operand.instructionType;
+  }
+
   TypeMask visitInstruction(HInstruction instruction) {
     assert(instruction.instructionType != null);
     return instruction.instructionType;
@@ -348,22 +353,28 @@
 
   TypeMask visitInvokeDynamic(HInvokeDynamic instruction) {
     if (instruction.isInterceptedCall) {
-      // We cannot do the following optimization now, because we have
-      // to wait for the type propagation to be stable. The receiver
-      // of [instruction] might move from number to dynamic.
-      pendingOptimizations.putIfAbsent(
-          instruction,
-          () => () {
-                Selector selector = instruction.selector;
-                if (selector.isOperator && selector.name != '==') {
-                  if (checkReceiver(instruction)) {
-                    addAllUsersBut(instruction, instruction.inputs[1]);
-                  }
-                  if (!selector.isUnaryOperator && checkArgument(instruction)) {
-                    addAllUsersBut(instruction, instruction.inputs[2]);
-                  }
-                }
-              });
+      // We cannot do the following optimization now, because we have to wait
+      // for the type propagation to be stable. The receiver of [instruction]
+      // might move from number to dynamic.
+      void checkInputs() {
+        Selector selector = instruction.selector;
+        if (selector.isOperator && selector.name != '==') {
+          if (checkReceiver(instruction)) {
+            addAllUsersBut(instruction, instruction.inputs[1]);
+          }
+          if (!selector.isUnaryOperator && checkArgument(instruction)) {
+            addAllUsersBut(instruction, instruction.inputs[2]);
+          }
+        } else if (selector.isCall) {
+          if (selector.name == 'abs' && selector.argumentCount == 0) {
+            if (checkReceiver(instruction)) {
+              addAllUsersBut(instruction, instruction.inputs[1]);
+            }
+          }
+        }
+      }
+
+      pendingOptimizations.putIfAbsent(instruction, () => checkInputs);
     }
 
     HInstruction receiver = instruction.getDartReceiver(closedWorld);
diff --git a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
index 80cf145..383507a 100644
--- a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
@@ -44,12 +44,12 @@
 import '../js_ast/js_ast.dart' show js;
 import '../js_ast/source_map_printer.dart' show NodeEnd, NodeSpan, HoverComment;
 import 'ast_builder.dart';
-import 'module_compiler.dart' show BuildUnit, CompilerOptions, JSModuleFile;
 import 'element_helpers.dart';
 import 'extension_types.dart' show ExtensionTypeSet;
 import 'js_interop.dart';
 import 'js_typeref_codegen.dart' show JSTypeRefCodegen;
 import 'js_typerep.dart' show JSTypeRep, JSType;
+import 'module_compiler.dart' show BuildUnit, CompilerOptions, JSModuleFile;
 import 'nullable_type_inference.dart' show NullableTypeInference;
 import 'property_model.dart';
 import 'reify_coercions.dart' show CoercionReifier;
@@ -457,7 +457,7 @@
   bool _isExternal(Element e) =>
       e is ExecutableElement && e.isExternal ||
       e is PropertyInducingElement &&
-          (e.getter?.isExternal ?? false || e.setter?.isExternal ?? false);
+          ((e.getter?.isExternal ?? false) || (e.setter?.isExternal ?? false));
 
   bool _isJSElement(Element e) =>
       e?.library != null &&
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_ddc.status b/pkg/dev_compiler/test/sourcemap/stacktrace_ddc.status
index 3c3311b..4e909a6 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_ddc.status
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_ddc.status
@@ -2,11 +2,11 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE.md file.
 
-/null_interceptor_field: Crash
-/throw_in_constructor_from_async: Crash
-/throw_in_instance_method: Crash
-/throw_in_static_method: Crash # Test works, but DDC's hover support means the expected column in the test is wrong
+null_interceptor_field: Crash
+throw_in_constructor_from_async: Crash
+throw_in_instance_method: Crash
+throw_in_static_method: Crash # Test works, but DDC's hover support means the expected column in the test is wrong
 
-/throw_in_async: Crash # dartbug.com/31451
-/throw_in_awaited_async: Crash # dartbug.com/31451
-/throw_in_top_level_method_from_async: Crash # dartbug.com/31451
\ No newline at end of file
+throw_in_async: Crash # dartbug.com/31451
+throw_in_awaited_async: Crash # dartbug.com/31451
+throw_in_top_level_method_from_async: Crash # dartbug.com/31451
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_ddk.status b/pkg/dev_compiler/test/sourcemap/stacktrace_ddk.status
index c817e53..0a07791 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_ddk.status
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_ddk.status
@@ -1,9 +1,9 @@
 # Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE.md file.
-/throw_in_async: Crash # dartbug.com/31451
-/throw_in_awaited_async: Crash # dartbug.com/31451
-/throw_in_constructor_from_async: Crash # dartbug.com/31451
-/throw_in_instance_method: Crash # Test works, but DDC's hover support means the expected column in the test is wrong
-/throw_in_top_level_method_from_async: Crash # dartbug.com/31451
 
+throw_in_async: Crash # dartbug.com/31451
+throw_in_awaited_async: Crash # dartbug.com/31451
+throw_in_constructor_from_async: Crash # dartbug.com/31451
+throw_in_instance_method: Crash # Test works, but DDC's hover support means the expected column in the test is wrong
+throw_in_top_level_method_from_async: Crash # dartbug.com/31451
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 e37423a..753cb83 100644
--- a/pkg/front_end/lib/src/api_prototype/kernel_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/kernel_generator.dart
@@ -6,16 +6,23 @@
 library front_end.kernel_generator;
 
 import 'dart:async' show Future;
-import 'dart:async';
 
 import 'package:kernel/kernel.dart' show Program;
 
-import 'compiler_options.dart';
-import '../base/processed_options.dart';
-import '../fasta/fasta_codes.dart';
-import '../fasta/compiler_context.dart';
-import '../fasta/severity.dart';
-import '../kernel_generator_impl.dart';
+import '../base/processed_options.dart' show ProcessedOptions;
+
+import '../fasta/compiler_context.dart' show CompilerContext;
+
+import '../fasta/fasta_codes.dart' show messageMissingMain;
+
+import '../fasta/parser.dart' show noLength;
+
+import '../fasta/severity.dart' show Severity;
+
+import '../kernel_generator_impl.dart'
+    show generateKernel, generateKernelInternal;
+
+import 'compiler_options.dart' show CompilerOptions;
 
 /// Generates a kernel representation of the program whose main library is in
 /// the given [source].
@@ -44,8 +51,9 @@
     if (program == null) return null;
 
     if (program.mainMethod == null) {
-      context.options
-          .report(messageMissingMain.withLocation(source, -1), Severity.error);
+      context.options.report(
+          messageMissingMain.withLocation(source, -1, noLength),
+          Severity.error);
       return null;
     }
     return program;
diff --git a/pkg/front_end/lib/src/api_unstable/compiler_state.dart b/pkg/front_end/lib/src/api_unstable/compiler_state.dart
index f950fe1..13d1327 100644
--- a/pkg/front_end/lib/src/api_unstable/compiler_state.dart
+++ b/pkg/front_end/lib/src/api_unstable/compiler_state.dart
@@ -2,10 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:front_end/src/base/processed_options.dart';
+import '../api_prototype/compiler_options.dart' show CompilerOptions;
 
-import '../api_prototype/compiler_options.dart';
-import '../base/processed_options.dart';
+import '../base/processed_options.dart' show ProcessedOptions;
 
 class InitializedCompilerState {
   final CompilerOptions options;
diff --git a/pkg/front_end/lib/src/api_unstable/dart2js.dart b/pkg/front_end/lib/src/api_unstable/dart2js.dart
index a7adc1f..57f3e25 100644
--- a/pkg/front_end/lib/src/api_unstable/dart2js.dart
+++ b/pkg/front_end/lib/src/api_unstable/dart2js.dart
@@ -4,21 +4,30 @@
 
 import 'dart:async' show Future;
 
-import 'package:front_end/src/base/processed_options.dart';
-import 'package:front_end/src/kernel_generator_impl.dart';
 import 'package:kernel/kernel.dart' show Program;
+
 import 'package:kernel/target/targets.dart' show Target;
 
-import '../api_prototype/compiler_options.dart';
-import '../api_prototype/file_system.dart';
-import '../base/processed_options.dart';
-import '../fasta/compiler_context.dart';
-import '../fasta/fasta_codes.dart';
-import '../fasta/severity.dart';
-import '../kernel_generator_impl.dart';
-import 'compiler_state.dart';
+import '../api_prototype/compiler_options.dart'
+    show CompilerOptions, ErrorHandler;
 
-export 'compiler_state.dart';
+import '../api_prototype/file_system.dart' show FileSystem;
+
+import '../base/processed_options.dart' show ProcessedOptions;
+
+import '../fasta/compiler_context.dart' show CompilerContext;
+
+import '../fasta/fasta_codes.dart' show messageMissingMain;
+
+import '../fasta/parser.dart' show noLength;
+
+import '../fasta/severity.dart' show Severity;
+
+import '../kernel_generator_impl.dart' show generateKernelInternal;
+
+import 'compiler_state.dart' show InitializedCompilerState;
+
+export 'compiler_state.dart' show InitializedCompilerState;
 
 InitializedCompilerState initializeCompiler(InitializedCompilerState oldState,
     Target target, Uri sdkUri, Uri packagesFileUri) {
@@ -58,8 +67,8 @@
     Program program = compilerResult?.program;
     if (program == null) return null;
     if (program.mainMethod == null) {
-      context.options
-          .report(messageMissingMain.withLocation(input, -1), Severity.error);
+      context.options.report(
+          messageMissingMain.withLocation(input, -1, noLength), Severity.error);
       return null;
     }
     return compilerResult;
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index 4346164..78da339 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -2,37 +2,75 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:async';
-
-import 'package:front_end/src/api_prototype/compilation_message.dart';
-import 'package:front_end/src/api_prototype/byte_store.dart';
-import 'package:front_end/src/api_prototype/compiler_options.dart';
-import 'package:front_end/src/api_prototype/file_system.dart';
-import 'package:front_end/src/base/performance_logger.dart';
-import 'package:front_end/src/fasta/fasta_codes.dart';
-import 'package:front_end/src/fasta/problems.dart' show unimplemented;
-import 'package:front_end/src/fasta/severity.dart';
-import 'package:front_end/src/fasta/ticker.dart';
-import 'package:front_end/src/fasta/uri_translator.dart';
-import 'package:front_end/src/fasta/uri_translator_impl.dart';
-import 'package:kernel/kernel.dart' show CanonicalName, Location, Program;
-import 'package:kernel/target/targets.dart';
-import 'package:kernel/target/vm.dart';
-import 'package:package_config/packages.dart' show Packages;
-import 'package:package_config/src/packages_impl.dart'
-    show NonFilePackagesDirectoryPackages, MapPackages;
-import 'package:package_config/packages_file.dart' as package_config;
-import 'package:source_span/source_span.dart' show SourceSpan, SourceLocation;
-import 'package:front_end/src/fasta/command_line_reporting.dart'
-    as command_line_reporting;
+import 'dart:async' show Future;
 
 import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;
 
-import '../fasta/messages.dart' show getLocation;
+import 'package:kernel/kernel.dart' show CanonicalName, Location, Program;
+
+import 'package:kernel/target/targets.dart' show Target, TargetFlags;
+
+import 'package:kernel/target/vm.dart' show VmTarget;
+
+import 'package:package_config/packages.dart' show Packages;
+
+import 'package:package_config/packages_file.dart' as package_config;
+
+import 'package:package_config/src/packages_impl.dart'
+    show NonFilePackagesDirectoryPackages, MapPackages;
+
+import 'package:source_span/source_span.dart' show SourceSpan, SourceLocation;
+
+import '../api_prototype/byte_store.dart' show ByteStore;
+
+import '../api_prototype/compilation_message.dart' show CompilationMessage;
+
+import '../api_prototype/compiler_options.dart' show CompilerOptions;
+
+import '../api_prototype/file_system.dart'
+    show FileSystem, FileSystemEntity, FileSystemException;
+
+import '../base/performance_logger.dart' show PerformanceLog;
+
+import '../fasta/command_line_reporting.dart' as command_line_reporting;
 
 import '../fasta/deprecated_problems.dart' show deprecated_InputError;
 
-import 'libraries_specification.dart';
+import '../fasta/fasta_codes.dart'
+    show
+        LocatedMessage,
+        Message,
+        messageCantInferPackagesFromManyInputs,
+        messageCantInferPackagesFromPackageUri,
+        messageInternalProblemProvidedBothCompileSdkAndSdkSummary,
+        messageMissingInput,
+        templateCannotReadPackagesFile,
+        templateCannotReadSdkSpecification,
+        templateInputFileNotFound,
+        templateInternalProblemUnsupported,
+        templateSdkRootNotFound,
+        templateSdkSpecificationNotFound,
+        templateSdkSummaryNotFound;
+
+import '../fasta/messages.dart' show getLocation;
+
+import '../fasta/parser.dart' show noLength;
+
+import '../fasta/problems.dart' show unimplemented;
+
+import '../fasta/severity.dart' show Severity;
+
+import '../fasta/ticker.dart' show Ticker;
+
+import '../fasta/uri_translator.dart' show UriTranslator;
+
+import '../fasta/uri_translator_impl.dart' show UriTranslatorImpl;
+
+import 'libraries_specification.dart'
+    show
+        LibrariesSpecification,
+        LibrariesSpecificationException,
+        TargetLibrariesSpecification;
 
 /// All options needed for the front end implementation.
 ///
@@ -198,7 +236,7 @@
   void reportWithoutLocation(Message message, Severity severity) {
     if (_raw.onProblem != null) {
       _raw.onProblem(
-          message.withLocation(null, -1),
+          message.withLocation(null, -1, noLength),
           severity,
           command_line_reporting.formatWithoutLocation(message, severity),
           -1,
@@ -214,8 +252,8 @@
       return;
     }
     if (_raw.onError != null) {
-      _raw.onError(
-          new _CompilationMessage(message.withLocation(null, -1), severity));
+      _raw.onError(new _CompilationMessage(
+          message.withLocation(null, -1, noLength), severity));
     }
 
     if (_reportMessages) {
@@ -422,7 +460,9 @@
     if (input.scheme == 'dart') return _packages = Packages.noPackages;
 
     if (input.scheme == 'packages') {
-      report(messageCantInferPackagesFromPackageUri.withLocation(input, -1),
+      report(
+          messageCantInferPackagesFromPackageUri.withLocation(
+              input, -1, noLength),
           Severity.error);
       return _packages = Packages.noPackages;
     }
@@ -440,7 +480,7 @@
       report(
           templateCannotReadPackagesFile
               .withArguments("$e")
-              .withLocation(file, -1),
+              .withLocation(file, -1, noLength),
           Severity.error);
       return Packages.noPackages;
     }
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 7043564..80d8055 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -217,12 +217,14 @@
             null);
   }
 
-  void addCompileTimeError(Message message, int charOffset,
+  void addCompileTimeError(Message message, int charOffset, int length,
       {LocatedMessage context}) {
-    library.addCompileTimeError(message, charOffset, fileUri, context: context);
+    library.addCompileTimeError(message, charOffset, length, fileUri,
+        context: context);
   }
 
-  void addProblem(Message message, int charOffset, {LocatedMessage context}) {
-    library.addProblem(message, charOffset, fileUri, context: context);
+  void addProblem(Message message, int charOffset, int length,
+      {LocatedMessage context}) {
+    library.addProblem(message, charOffset, length, fileUri, context: context);
   }
 }
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 eb2b923..65cd053 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,6 +4,10 @@
 
 library fasta.constructor_reference_builder;
 
+import '../messages.dart' show templateConstructorNotFound;
+
+import '../parser.dart' show noLength;
+
 import 'builder.dart'
     show
         Builder,
@@ -14,8 +18,6 @@
         Scope,
         TypeBuilder;
 
-import '../messages.dart' show templateConstructorNotFound;
-
 class ConstructorReferenceBuilder extends Builder {
   final Object name;
 
@@ -62,6 +64,7 @@
       accessingLibrary.addProblem(
           templateConstructorNotFound.withArguments(fullNameForErrors),
           charOffset,
+          noLength,
           fileUri);
     }
   }
diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
index a858fa1a..aa42f64 100644
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
@@ -78,18 +78,19 @@
   /// arguments passed to this method.
   ///
   /// If [fileUri] is null, it defaults to `this.fileUri`.
-  void addCompileTimeError(Message message, int charOffset, Uri fileUri,
+  void addCompileTimeError(
+      Message message, int charOffset, int length, Uri fileUri,
       {bool wasHandled: false, LocatedMessage context}) {
     fileUri ??= this.fileUri;
-    loader.addCompileTimeError(message, charOffset, fileUri,
+    loader.addCompileTimeError(message, charOffset, length, fileUri,
         wasHandled: wasHandled, context: context);
   }
 
   /// Add a problem with a severity determined by the severity of the message.
-  void addProblem(Message message, int charOffset, Uri fileUri,
+  void addProblem(Message message, int charOffset, int length, Uri fileUri,
       {LocatedMessage context}) {
     fileUri ??= this.fileUri;
-    loader.addProblem(message, charOffset, fileUri, context: context);
+    loader.addProblem(message, charOffset, length, fileUri, context: context);
   }
 
   /// Returns true if the export scope was modified.
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 3efcc4d..02802e0 100644
--- a/pkg/front_end/lib/src/fasta/command_line_reporting.dart
+++ b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
@@ -12,7 +12,7 @@
 
 import 'package:kernel/ast.dart' show Location;
 
-import 'colors.dart' show cyan, magenta, red;
+import 'colors.dart' show cyan, green, magenta, red;
 
 import 'compiler_context.dart' show CompilerContext;
 
@@ -23,6 +23,8 @@
 
 import 'messages.dart' show getLocation, getSourceLine, isVerbose;
 
+import 'parser.dart' show noLength;
+
 import 'problems.dart' show unexpected;
 
 import 'severity.dart' show Severity;
@@ -37,9 +39,15 @@
 ///
 /// 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,
+String formatInternal(
+    Message message, Severity severity, Uri uri, int offset, int length,
     {Location location}) {
   try {
+    if (length < 1) {
+      // TODO(ahe): Throw in this situation. It is normally an error caused by
+      // empty names.
+      length = 1;
+    }
     String text =
         "${severityName(severity, capitalized: true)}: ${message.message}";
     if (message.tip != null) {
@@ -60,6 +68,10 @@
           text = magenta(text);
           break;
 
+        case Severity.context:
+          text = green(text);
+          break;
+
         default:
           return unexpected("$severity", "formatInternal", -1, null);
       }
@@ -71,12 +83,21 @@
       String sourceLine = getSourceLine(location);
       if (sourceLine == null) {
         sourceLine = "";
-      } else {
-        // TODO(ahe): We only print a single point in the source line as we
-        // don't have end positions. Also, we should be able to use
-        // package:source_span to produce this.
-        sourceLine = "\n$sourceLine\n"
-            "${' ' * (location.column - 1)}^";
+      } else if (sourceLine.isNotEmpty) {
+        String indentation = " " * (location.column - 1);
+        String pointer = indentation + ("^" * length);
+        if (pointer.length > sourceLine.length) {
+          // Truncate the carets to handle messages that span multiple lines.
+          int pointerLength = sourceLine.length;
+          // Add one to cover the case of a parser error pointing to EOF when
+          // the last line doesn't end with a newline. For messages spanning
+          // multiple lines, this also provides a minor visual clue that can be
+          // useful for debugging Fasta.
+          pointerLength += 1;
+          pointer = pointer.substring(0, pointerLength);
+          pointer += "...";
+        }
+        sourceLine = "\n$sourceLine\n$pointer";
       }
       String position =
           location == null ? "" : ":${location.line}:${location.column}";
@@ -98,6 +119,7 @@
   switch (severity) {
     case Severity.error:
     case Severity.internalProblem:
+    case Severity.context:
       return false;
 
     case Severity.nit:
@@ -127,6 +149,9 @@
     case Severity.warning:
       return CompilerContext.current.options.throwOnWarningsForDebugging;
 
+    case Severity.context:
+      return false;
+
     default:
       return unexpected("$severity", "shouldThrowOn", -1, null);
   }
@@ -147,6 +172,9 @@
     case Severity.warning:
       return capitalized ? "Warning" : "warning";
 
+    case Severity.context:
+      return capitalized ? "Context" : "context";
+
     default:
       return unexpected("$severity", "severityName", -1, null);
   }
@@ -187,6 +215,7 @@
 
     case Severity.nit:
     case Severity.warning:
+    case Severity.context:
       return false;
   }
   return unexpected("$severity", "isCompileTimeError", -1, null);
@@ -224,8 +253,8 @@
 /// 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,
+  return formatInternal(message.messageObject, severity, message.uri,
+      message.charOffset, message.length,
       location: location);
 }
 
@@ -234,5 +263,5 @@
 /// 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);
+  return formatInternal(message, severity, null, -1, noLength);
 }
diff --git a/pkg/front_end/lib/src/fasta/deprecated_problems.dart b/pkg/front_end/lib/src/fasta/deprecated_problems.dart
index 9a85000..b69bb9d 100644
--- a/pkg/front_end/lib/src/fasta/deprecated_problems.dart
+++ b/pkg/front_end/lib/src/fasta/deprecated_problems.dart
@@ -15,6 +15,8 @@
 
 import 'messages.dart' show LocatedMessage, isVerbose, templateUnspecified;
 
+import 'parser.dart' show noLength;
+
 import 'severity.dart' show Severity;
 
 const String defaultServerAddress = "http://127.0.0.1:59410/";
@@ -64,7 +66,7 @@
   static LocatedMessage toMessage(deprecated_InputError error) {
     return templateUnspecified
         .withArguments(safeToString(error.error))
-        .withLocation(error.uri, error.charOffset);
+        .withLocation(error.uri, error.charOffset, noLength);
   }
 }
 
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes.dart b/pkg/front_end/lib/src/fasta/fasta_codes.dart
index 5e36e3d..4d2a4d3 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes.dart
@@ -44,8 +44,8 @@
 
   const Message(this.code, {this.message, this.tip, this.arguments});
 
-  LocatedMessage withLocation(Uri uri, int charOffset) {
-    return new LocatedMessage(uri, charOffset, this);
+  LocatedMessage withLocation(Uri uri, int charOffset, int length) {
+    return new LocatedMessage(uri, charOffset, length, this);
   }
 }
 
@@ -69,8 +69,9 @@
 
   Code get code => this;
 
-  LocatedMessage withLocation(Uri uri, int charOffset) {
-    return new LocatedMessage(uri, charOffset, this);
+  @override
+  LocatedMessage withLocation(Uri uri, int charOffset, int length) {
+    return new LocatedMessage(uri, charOffset, length, this);
   }
 }
 
@@ -89,9 +90,12 @@
 
   final int charOffset;
 
+  final int length;
+
   final Message messageObject;
 
-  const LocatedMessage(this.uri, this.charOffset, this.messageObject);
+  const LocatedMessage(
+      this.uri, this.charOffset, this.length, this.messageObject);
 
   Code get code => messageObject.code;
 
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index fadbf55..caab6a4 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -288,6 +288,7 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageCandidateFound = const MessageCode("CandidateFound",
+    severity: Severity.context,
     message: r"""Found this candidate, but the arguments don't match.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -302,9 +303,9 @@
 const Code<Message Function(String name)>
     codeCandidateFoundIsDefaultConstructor =
     const Code<Message Function(String name)>(
-  "CandidateFoundIsDefaultConstructor",
-  templateCandidateFoundIsDefaultConstructor,
-);
+        "CandidateFoundIsDefaultConstructor",
+        templateCandidateFoundIsDefaultConstructor,
+        severity: Severity.context);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsCandidateFoundIsDefaultConstructor(String name) {
@@ -635,7 +636,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConflictsWithTypeVariableCause = const MessageCode(
     "ConflictsWithTypeVariableCause",
-    severity: Severity.error,
+    severity: Severity.context,
     message: r"""This is the type variable.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -709,6 +710,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstConstructorNonFinalFieldCause = const MessageCode(
     "ConstConstructorNonFinalFieldCause",
+    severity: Severity.context,
     message: r"""Field isn't final, but constructor is 'const'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -717,7 +719,10 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstConstructorWithBody = const MessageCode(
     "ConstConstructorWithBody",
-    message: r"""A const constructor can't have a body.""");
+    analyzerCode: "CONST_CONSTRUCTOR_WITH_BODY",
+    dart2jsCode: "*fatal*",
+    message: r"""A const constructor can't have a body.""",
+    tip: r"""Try removing either the 'const' keyword or the body.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstFactory = messageConstFactory;
@@ -758,6 +763,17 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeConstMethod = messageConstMethod;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageConstMethod = const MessageCode("ConstMethod",
+    analyzerCode: "CONST_METHOD",
+    dart2jsCode: "*fatal*",
+    message:
+        r"""Getters, setters and methods can't be declared to be 'const'.""",
+    tip: r"""Try removing the 'const' keyword.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
         Message Function(String name)>
     templateConstructorHasNoSuchNamedParameter =
@@ -801,6 +817,18 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeConstructorWithReturnType =
+    messageConstructorWithReturnType;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageConstructorWithReturnType = const MessageCode(
+    "ConstructorWithReturnType",
+    analyzerCode: "CONSTRUCTOR_WITH_RETURN_TYPE",
+    dart2jsCode: "*fatal*",
+    message: r"""Constructors can't have a return type.""",
+    tip: r"""Try removing the return type.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeContinueOutsideOfLoop = messageContinueOutsideOfLoop;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -984,9 +1012,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeDeferredPrefixDuplicatedCause =
     const Code<Message Function(String name)>(
-  "DeferredPrefixDuplicatedCause",
-  templateDeferredPrefixDuplicatedCause,
-);
+        "DeferredPrefixDuplicatedCause", templateDeferredPrefixDuplicatedCause,
+        severity: Severity.context);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDeferredPrefixDuplicatedCause(String name) {
@@ -1292,9 +1319,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeDuplicatedParameterNameCause =
     const Code<Message Function(String name)>(
-  "DuplicatedParameterNameCause",
-  templateDuplicatedParameterNameCause,
-);
+        "DuplicatedParameterNameCause", templateDuplicatedParameterNameCause,
+        severity: Severity.context);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDuplicatedParameterNameCause(String name) {
@@ -1641,7 +1667,9 @@
 const Code<Message Function(Token token)> codeExpectedType =
     const Code<Message Function(Token token)>(
         "ExpectedType", templateExpectedType,
-        analyzerCode: "EXPECTED_TYPE_NAME", dart2jsCode: "*fatal*");
+        analyzerCode: "EXPECTED_TYPE_NAME",
+        dart2jsCode: "*fatal*",
+        severity: Severity.error);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedType(Token token) {
@@ -1996,6 +2024,19 @@
   -h        Display this message (add -v for information about all options).""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeFieldInitializerOutsideConstructor =
+    messageFieldInitializerOutsideConstructor;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageFieldInitializerOutsideConstructor = const MessageCode(
+    "FieldInitializerOutsideConstructor",
+    analyzerCode: "FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR",
+    dart2jsCode: "*fatal*",
+    message: r"""Field formal parameters can only be used in a constructor.""",
+    tip:
+        r"""Try replacing the field formal parameter with a normal parameter.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeFinalAndCovariant = messageFinalAndCovariant;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2081,7 +2122,7 @@
     const Code<Message Function(String name)>(
         "FinalInstanceVariableAlreadyInitializedCause",
         templateFinalInstanceVariableAlreadyInitializedCause,
-        severity: Severity.errorLegacyWarning);
+        severity: Severity.context);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsFinalInstanceVariableAlreadyInitializedCause(
@@ -2261,9 +2302,9 @@
 const Code<Message Function(String name)>
     codeIllegalMixinDueToConstructorsCause =
     const Code<Message Function(String name)>(
-  "IllegalMixinDueToConstructorsCause",
-  templateIllegalMixinDueToConstructorsCause,
-);
+        "IllegalMixinDueToConstructorsCause",
+        templateIllegalMixinDueToConstructorsCause,
+        severity: Severity.context);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsIllegalMixinDueToConstructorsCause(String name) {
@@ -3865,9 +3906,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeOverriddenMethodCause =
     const Code<Message Function(String name)>(
-  "OverriddenMethodCause",
-  templateOverriddenMethodCause,
-);
+        "OverriddenMethodCause", templateOverriddenMethodCause,
+        severity: Severity.context);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsOverriddenMethodCause(String name) {
@@ -4260,6 +4300,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messagePatchClassOrigin = const MessageCode(
     "PatchClassOrigin",
+    severity: Severity.context,
     message: r"""This is the origin class.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4286,6 +4327,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messagePatchDeclarationOrigin = const MessageCode(
     "PatchDeclarationOrigin",
+    severity: Severity.context,
     message: r"""This is the origin declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5182,18 +5224,22 @@
     const Template<Message Function(String name)>(
         messageTemplate:
             r"""Can't use type arguments with type variable '#name'.""",
+        tipTemplate: r"""Try removing the type arguments.""",
         withArguments: _withArgumentsTypeArgumentsOnTypeVariable);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeTypeArgumentsOnTypeVariable =
     const Code<Message Function(String name)>(
         "TypeArgumentsOnTypeVariable", templateTypeArgumentsOnTypeVariable,
+        analyzerCode: "TYPE_ARGUMENTS_ON_TYPE_VARIABLE",
+        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsTypeArgumentsOnTypeVariable(String name) {
   return new Message(codeTypeArgumentsOnTypeVariable,
       message: """Can't use type arguments with type variable '$name'.""",
+      tip: """Try removing the type arguments.""",
       arguments: {'name': name});
 }
 
@@ -5233,10 +5279,9 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeTypeVariableDuplicatedNameCause =
-    const Code<Message Function(String name)>(
-  "TypeVariableDuplicatedNameCause",
-  templateTypeVariableDuplicatedNameCause,
-);
+    const Code<Message Function(String name)>("TypeVariableDuplicatedNameCause",
+        templateTypeVariableDuplicatedNameCause,
+        severity: Severity.context);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsTypeVariableDuplicatedNameCause(String name) {
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 5633f5f..60992ba 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -22,6 +22,10 @@
         IdentifierContext,
         MemberKind,
         closeBraceTokenFor,
+        lengthForToken,
+        lengthOfSpan,
+        noLength,
+        offsetForToken,
         optional;
 
 import '../parser/class_member_parser.dart' show ClassMemberParser;
@@ -65,8 +69,6 @@
         getRedirectingFactoryBody,
         getRedirectionTarget;
 
-import 'utils.dart' show offsetForToken;
-
 import 'forest.dart' show Forest;
 
 import 'fangorn.dart' show Fangorn;
@@ -81,9 +83,13 @@
 
 import 'kernel_builder.dart';
 
-final Forest<Expression, Statement> _forest = new Fangorn();
+final Forest _forest = new Fangorn();
 
-class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
+// TODO(ahe): Remove this and ensure all nodes have a location.
+const noLocation = null;
+
+class BodyBuilder<Arguments> extends ScopeListener<JumpTarget>
+    implements BuilderHelper<Arguments> {
   @override
   final KernelLibraryBuilder library;
 
@@ -201,7 +207,7 @@
         super(scope);
 
   @override
-  Forest<Expression, Statement> get forest => _forest;
+  Forest<Expression, Statement, Token, Arguments> get forest => _forest;
 
   bool get hasParserError => recoverableErrors.isNotEmpty;
 
@@ -238,9 +244,9 @@
           "A library can't be used as an expression.");
     } else if (node is SuperInitializer) {
       return buildCompileTimeError(
-          fasta.messageSuperAsExpression, node.fileOffset);
+          fasta.messageSuperAsExpression, node.fileOffset, noLength);
     } else if (node is ProblemBuilder) {
-      return buildProblemExpression(node, -1);
+      return buildProblemExpression(node, -1, noLength);
     } else {
       return unhandled("${node.runtimeType}", "toValue", -1, uri);
     }
@@ -360,7 +366,7 @@
 
       // Reports the error on `print(x)`.
       library.addCompileTimeError(
-          error.messageObject, error.charOffset, error.uri);
+          error.messageObject, error.charOffset, error.length, error.uri);
     }
   }
 
@@ -572,7 +578,11 @@
       initializer = node.buildFieldInitializer(initializedFields);
     } else if (node is ConstructorInvocation) {
       initializer = buildSuperInitializer(
-          false, node.target, node.arguments, token.charOffset);
+          false,
+          node.target,
+          node.arguments
+              as dynamic, // TODO(ahe): Remove this cast when buildSuperInitializer is moved to [Forest].
+          token.charOffset);
     } else {
       Expression value = toValue(node);
       if (node is! Throw) {
@@ -613,8 +623,10 @@
         bool hasMore = formalBuilders.moveNext();
         assert(hasMore);
         VariableDeclaration realParameter = formalBuilders.current.target;
-        Expression initializer =
-            parameter.initializer ?? new ShadowNullLiteral();
+        Expression initializer = parameter.initializer ?? forest.literalNull(
+            // TODO(ahe): Should store: realParameter.fileOffset
+            // https://github.com/dart-lang/sdk/issues/32289
+            null);
         realParameter.initializer = initializer..parent = realParameter;
         _typeInferrer.inferParameterInitializer(
             this, initializer, realParameter.type);
@@ -699,7 +711,7 @@
       /// >unless the enclosing class is class Object.
       Constructor superTarget = lookupConstructor(emptyName, isSuper: true);
       Initializer initializer;
-      Arguments arguments = new Arguments.empty();
+      Arguments arguments = forest.argumentsEmpty(noLocation);
       if (superTarget == null ||
           checkArguments(
                   new FunctionTypeAccessor.fromNode(superTarget.function),
@@ -791,10 +803,9 @@
           named = new List<NamedExpression>.from(seenNames.values);
         }
       }
-      push(new ShadowArguments(positional, named: named)
-        ..fileOffset = beginToken.charOffset);
+      push(forest.arguments(positional, beginToken, named: named));
     } else {
-      push(new ShadowArguments(arguments)..fileOffset = beginToken.charOffset);
+      push(forest.arguments(arguments, beginToken));
     }
   }
 
@@ -812,8 +823,8 @@
     List<DartType> typeArguments = pop();
     Object receiver = pop();
     if (arguments != null && typeArguments != null) {
-      assert(arguments.types.isEmpty);
-      ShadowArguments.setExplicitArgumentTypes(arguments, typeArguments);
+      assert(forest.argumentsTypes(arguments).isEmpty);
+      forest.argumentsSetExplicitArgumentTypes(arguments, typeArguments);
     } else {
       assert(typeArguments == null);
     }
@@ -927,7 +938,7 @@
           "Not an operator: '$operator'.", token.charOffset);
     } else {
       Expression result = buildMethodInvocation(a, new Name(operator),
-          new ShadowArguments(<Expression>[b]), token.charOffset,
+          forest.arguments(<Expression>[b], noLocation), token.charOffset,
           // This *could* be a constant expression, we can't know without
           // evaluating [a] and [b].
           isConstantExpression: !isSuper,
@@ -968,9 +979,10 @@
       push(send.withReceiver(pop(), token.charOffset, isNullAware: true));
     } else {
       pop();
-      Message message =
-          fasta.templateExpectedIdentifier.withArguments(token.next);
-      push(buildCompileTimeError(message, token.next.charOffset));
+      token = token.next;
+      Message message = fasta.templateExpectedIdentifier.withArguments(token);
+      push(buildCompileTimeError(
+          message, offsetForToken(token), lengthForToken(token)));
     }
   }
 
@@ -981,9 +993,10 @@
       push(send.withReceiver(receiver, token.charOffset));
     } else {
       pop();
-      Message message =
-          fasta.templateExpectedIdentifier.withArguments(token.next);
-      push(buildCompileTimeError(message, token.next.charOffset));
+      token = token.next;
+      Message message = fasta.templateExpectedIdentifier.withArguments(token);
+      push(buildCompileTimeError(
+          message, offsetForToken(token), lengthForToken(token)));
     }
   }
 
@@ -1008,14 +1021,16 @@
       Uri uri = candidate.location.file;
       int offset = candidate.fileOffset;
       Message message;
+      int length = noLength;
       if (offset == -1 && candidate is Constructor) {
         offset = candidate.enclosingClass.fileOffset;
         message = fasta.templateCandidateFoundIsDefaultConstructor
             .withArguments(candidate.enclosingClass.name);
       } else {
+        length = name.length;
         message = fasta.messageCandidateFound;
       }
-      context = message.withLocation(uri, offset);
+      context = message.withLocation(uri, offset, length);
     }
 
     if (isGetter) {
@@ -1032,7 +1047,8 @@
       if (argMessage != null) {
         message = argMessage.messageObject;
         charOffset = argMessage.charOffset;
-        addProblemErrorIfConst(message, charOffset, 1, context: context);
+        addProblemErrorIfConst(message, charOffset, argMessage.length,
+            context: context);
       } else {
         message = warnUnresolvedMethod(kernelName, charOffset,
             isSuper: isSuper,
@@ -1044,10 +1060,11 @@
       // TODO(ahe): Use [error] below instead of building a compile-time error,
       // should be:
       //    return library.loader.throwCompileConstantError(error, charOffset);
-      return buildCompileTimeError(message, charOffset, context: context);
+      return buildCompileTimeError(message, charOffset, noLength,
+          context: context);
     } else {
       Expression error = library.loader.instantiateNoSuchMethodError(
-          receiver, name, arguments, charOffset,
+          receiver, name, forest.castArguments(arguments), charOffset,
           isMethod: !isGetter && !isSetter,
           isGetter: isGetter,
           isSetter: isSetter,
@@ -1086,12 +1103,22 @@
   @override
   Message warnUnresolvedMethod(Name name, int charOffset,
       {bool isSuper: false, bool reportWarning: true, LocatedMessage context}) {
+    String plainName = name.name;
+    int dotIndex = plainName.lastIndexOf(".");
+    if (dotIndex != -1) {
+      plainName = plainName.substring(dotIndex + 1);
+    }
+    // TODO(ahe): This is rather brittle. We would probably be better off with
+    // more precise location information in this case.
+    int length = plainName.length;
+    if (plainName.startsWith("[")) {
+      length = 1;
+    }
     Message message = isSuper
         ? fasta.templateSuperclassHasNoMethod.withArguments(name.name)
         : fasta.templateMethodNotFound.withArguments(name.name);
     if (reportWarning) {
-      addProblemErrorIfConst(message, charOffset, name.name.length,
-          context: context);
+      addProblemErrorIfConst(message, charOffset, length, context: context);
     }
     return message;
   }
@@ -1246,7 +1273,7 @@
       } else if (ignoreMainInGetMainClosure &&
           name == "main" &&
           member?.name == "_getMainClosure") {
-        return new ShadowNullLiteral()..fileOffset = charOffset;
+        return storeOffset(forest.literalNull(null), charOffset);
       } else {
         return new UnresolvedAccessor(this, n, token);
       }
@@ -1381,7 +1408,7 @@
     if (interpolationCount == 0) {
       Token token = pop();
       String value = unescapeString(token.lexeme);
-      push(new ShadowStringLiteral(value)..fileOffset = offsetForToken(token));
+      push(forest.literalString(value, token));
     } else {
       List parts = popList(1 + interpolationCount * 2);
       Token first = parts.first;
@@ -1392,8 +1419,7 @@
       if (first.lexeme.length > 1) {
         String value = unescapeFirstStringPart(first.lexeme, quote);
         if (value.isNotEmpty) {
-          expressions.add(new ShadowStringLiteral(value)
-            ..fileOffset = offsetForToken(first));
+          expressions.add(forest.literalString(value, first));
         }
       }
       for (int i = 1; i < parts.length - 1; i++) {
@@ -1401,8 +1427,7 @@
         if (part is Token) {
           if (part.lexeme.length != 0) {
             String value = unescape(part.lexeme, quote);
-            expressions.add(new ShadowStringLiteral(value)
-              ..fileOffset = offsetForToken(part));
+            expressions.add(forest.literalString(value, part));
           }
         } else {
           expressions.add(toValue(part));
@@ -1412,8 +1437,7 @@
       if (last.lexeme.length > 1) {
         String value = unescapeLastStringPart(last.lexeme, quote);
         if (value.isNotEmpty) {
-          expressions.add(new ShadowStringLiteral(value)
-            ..fileOffset = offsetForToken(last));
+          expressions.add(forest.literalString(value, last));
         }
       }
       push(new ShadowStringConcatenation(expressions)
@@ -1425,8 +1449,7 @@
   void handleNativeClause(Token nativeToken, bool hasName) {
     debugEvent("NativeClause");
     if (hasName) {
-      var ignoredNativeName = pop();
-      assert(ignoredNativeName is ShadowStringLiteral);
+      forest.asLiteralString(pop());
     }
   }
 
@@ -1464,7 +1487,7 @@
     if (value == null) {
       push(new LargeIntAccessor(this, token));
     } else {
-      push(forest.literalInt(value, offsetForToken(token)));
+      push(forest.literalInt(value, token));
     }
   }
 
@@ -1573,7 +1596,7 @@
     debugEvent("NoFieldInitializer");
     if (constantExpressionRequired) {
       // Creating a null value to prevent the Dart VM from crashing.
-      push(new ShadowNullLiteral()..fileOffset = offsetForToken(token));
+      push(forest.literalNull(token));
     } else {
       push(NullValue.FieldInitializer);
     }
@@ -1635,7 +1658,8 @@
     Expression value = popForValue();
     var accessor = pop();
     if (accessor is! FastaAccessor) {
-      push(buildCompileTimeError(fasta.messageNotAnLvalue, token.charOffset));
+      push(buildCompileTimeError(fasta.messageNotAnLvalue,
+          offsetForToken(token), lengthForToken(token)));
     } else {
       push(new DelayedAssignment(
           this, token, accessor, value, token.stringValue));
@@ -1750,16 +1774,19 @@
       typeArgument = typeArguments.first;
       if (typeArguments.length > 1) {
         typeArgument = null;
-        addProblem(fasta.messageListLiteralTooManyTypeArguments,
-            beginToken.charOffset);
-      } else {
+        addProblem(
+            fasta.messageListLiteralTooManyTypeArguments,
+            offsetForToken(beginToken),
+            lengthOfSpan(beginToken, closeBraceTokenFor(beginToken)));
+      } else if (library.loader.target.strongMode) {
         typeArgument = instantiateToBounds(typeArgument, coreTypes.objectClass);
       }
     }
-    push(new ShadowListLiteral(expressions,
-        typeArgument: typeArgument,
-        isConst: constKeyword != null || constantExpressionRequired)
-      ..fileOffset = offsetForToken(constKeyword ?? beginToken));
+    push(forest.literalList(
+        typeArgument,
+        expressions,
+        constKeyword != null || constantExpressionRequired,
+        constKeyword ?? beginToken));
   }
 
   @override
@@ -1767,27 +1794,27 @@
     debugEvent("LiteralBool");
     bool value = optional("true", token);
     assert(value || optional("false", token));
-    push(new ShadowBoolLiteral(value)..fileOffset = offsetForToken(token));
+    push(forest.literalBool(value, token));
   }
 
   @override
   void handleLiteralDouble(Token token) {
     debugEvent("LiteralDouble");
-    push(new ShadowDoubleLiteral(double.parse(token.lexeme))
-      ..fileOffset = offsetForToken(token));
+    push(forest.literalDouble(double.parse(token.lexeme), token));
   }
 
   @override
   void handleLiteralNull(Token token) {
     debugEvent("LiteralNull");
-    push(new ShadowNullLiteral()..fileOffset = offsetForToken(token));
+    push(forest.literalNull(token));
   }
 
   @override
   void handleLiteralMap(
       int count, Token beginToken, Token constKeyword, Token endToken) {
     debugEvent("LiteralMap");
-    List<MapEntry> entries = popList(count) ?? <MapEntry>[];
+    List entries = forest.mapEntryList(count);
+    popList(count, entries);
     List<DartType> typeArguments = pop();
     DartType keyType;
     DartType valueType;
@@ -1795,20 +1822,29 @@
       if (typeArguments.length != 2) {
         keyType = null;
         valueType = null;
-        addProblem(fasta.messageListLiteralTypeArgumentMismatch,
-            beginToken.charOffset);
+        addProblem(
+            fasta.messageListLiteralTypeArgumentMismatch,
+            offsetForToken(beginToken),
+            lengthOfSpan(beginToken, closeBraceTokenFor(beginToken)));
       } else {
-        keyType = instantiateToBounds(typeArguments[0], coreTypes.objectClass);
-        valueType =
-            instantiateToBounds(typeArguments[1], coreTypes.objectClass);
+        if (library.loader.target.strongMode) {
+          keyType =
+              instantiateToBounds(typeArguments[0], coreTypes.objectClass);
+          valueType =
+              instantiateToBounds(typeArguments[1], coreTypes.objectClass);
+        } else {
+          keyType = typeArguments[0];
+          valueType = typeArguments[1];
+        }
       }
     }
 
-    push(new ShadowMapLiteral(entries,
-        keyType: keyType,
-        valueType: valueType,
-        isConst: constKeyword != null || constantExpressionRequired)
-      ..fileOffset = constKeyword?.charOffset ?? offsetForToken(beginToken));
+    push(forest.literalMap(
+        keyType,
+        valueType,
+        entries,
+        constKeyword != null || constantExpressionRequired,
+        constKeyword ?? beginToken));
   }
 
   @override
@@ -1816,7 +1852,7 @@
     debugEvent("LiteralMapEntry");
     Expression value = popForValue();
     Expression key = popForValue();
-    push(new MapEntry(key, value));
+    push(forest.mapEntry(key, value, colon));
   }
 
   String symbolPartToString(name) {
@@ -1842,8 +1878,7 @@
         value += ".${symbolPartToString(parts[i])}";
       }
     }
-    push(
-        new ShadowSymbolLiteral(value)..fileOffset = offsetForToken(hashToken));
+    push(forest.literalSymbol(value, hashToken));
   }
 
   @override
@@ -1867,7 +1902,7 @@
       } else {
         String displayName = debugName(getNodeName(prefix), suffix.name);
         addProblem(fasta.templateNotAType.withArguments(displayName),
-            beginToken.charOffset);
+            offsetForToken(beginToken), lengthOfSpan(beginToken, suffix.token));
         push(const InvalidType());
         return;
       }
@@ -1878,7 +1913,7 @@
       push(name.build(library));
     } else if (name is PrefixBuilder) {
       addProblem(fasta.templateNotAType.withArguments(name.name),
-          beginToken.charOffset);
+          offsetForToken(beginToken), lengthForToken(beginToken));
       push(const InvalidType());
     } else {
       unhandled(
@@ -2239,7 +2274,7 @@
           int value =
               int.parse("-" + receiver.token.lexeme, onError: (_) => null);
           if (value != null) {
-            push(forest.literalInt(value, offsetForToken(token)));
+            push(forest.literalInt(value, token));
             return;
           }
         }
@@ -2254,7 +2289,7 @@
         receiverValue = toValue(receiver);
       }
       push(buildMethodInvocation(receiverValue, new Name(operator),
-          new Arguments.empty(), token.charOffset,
+          forest.argumentsEmpty(noLocation), token.charOffset,
           // This *could* be a constant expression, we can't know without
           // evaluating [receiver].
           isConstantExpression: !isSuper,
@@ -2395,17 +2430,21 @@
         charOffset,
         typeParameters);
     if (argMessage != null) {
-      return throwNoSuchMethodError(new NullLiteral()..fileOffset = charOffset,
-          target.name.name, arguments, charOffset,
-          candidate: target, argMessage: argMessage);
+      return throwNoSuchMethodError(
+          storeOffset(forest.literalNull(null), charOffset),
+          target.name.name,
+          arguments,
+          charOffset,
+          candidate: target,
+          argMessage: argMessage);
     }
     if (target is Constructor) {
       if (isConst && !target.isConst) {
         return deprecated_buildCompileTimeError(
             "Not a const constructor.", charOffset);
       }
-      return new ShadowConstructorInvocation(
-          target, targetTypeArguments, initialTarget, arguments,
+      return new ShadowConstructorInvocation(target, targetTypeArguments,
+          initialTarget, forest.castArguments(arguments),
           isConst: isConst)
         ..fileOffset = charOffset;
     } else {
@@ -2414,12 +2453,14 @@
         return deprecated_buildCompileTimeError(
             "Not a const factory.", charOffset);
       } else if (procedure.isFactory) {
-        return new ShadowFactoryConstructorInvocation(
-            target, targetTypeArguments, initialTarget, arguments,
+        return new ShadowFactoryConstructorInvocation(target,
+            targetTypeArguments, initialTarget, forest.castArguments(arguments),
             isConst: isConst)
           ..fileOffset = charOffset;
       } else {
-        return new ShadowStaticInvocation(target, arguments, isConst: isConst)
+        return new ShadowStaticInvocation(
+            target, forest.castArguments(arguments),
+            isConst: isConst)
           ..fileOffset = charOffset;
       }
     }
@@ -2429,7 +2470,8 @@
   LocatedMessage checkArguments(FunctionTypeAccessor function,
       Arguments arguments, CalleeDesignation calleeKind, int offset,
       [List<TypeParameter> typeParameters]) {
-    if (arguments.positional.length < function.requiredParameterCount) {
+    if (forest.argumentsPositional(arguments).length <
+        function.requiredParameterCount) {
       Template<Message Function(int count, int count2)> template;
       switch (calleeKind) {
         case CalleeDesignation.Function:
@@ -2443,11 +2485,12 @@
           break;
       }
       return template
-          .withArguments(
-              function.requiredParameterCount, arguments.positional.length)
-          .withLocation(uri, offset);
+          .withArguments(function.requiredParameterCount,
+              forest.argumentsPositional(arguments).length)
+          .withLocation(uri, offset, noLength);
     }
-    if (arguments.positional.length > function.positionalParameterCount) {
+    if (forest.argumentsPositional(arguments).length >
+        function.positionalParameterCount) {
       Template<Message Function(int count, int count2)> template;
       switch (calleeKind) {
         case CalleeDesignation.Function:
@@ -2461,13 +2504,14 @@
           break;
       }
       return template
-          .withArguments(
-              function.positionalParameterCount, arguments.positional.length)
-          .withLocation(uri, offset);
+          .withArguments(function.positionalParameterCount,
+              forest.argumentsPositional(arguments).length)
+          .withLocation(uri, offset, noLength);
     }
-    if (arguments.named.isNotEmpty) {
+    List named = forest.argumentsNamed(arguments);
+    if (named.isNotEmpty) {
       Set<String> names = function.namedParameterNames;
-      for (NamedExpression argument in arguments.named) {
+      for (NamedExpression argument in named) {
         if (!names.remove(argument.name)) {
           Template<Message Function(String name)> template;
           switch (calleeKind) {
@@ -2483,18 +2527,18 @@
           }
           return template
               .withArguments(argument.name)
-              .withLocation(uri, argument.fileOffset);
+              .withLocation(uri, argument.fileOffset, argument.name.length);
         }
       }
     }
 
-    if (typeParameters != null &&
-        typeParameters.length != arguments.types.length) {
+    List types = forest.argumentsTypes(arguments);
+    if (typeParameters != null && typeParameters.length != types.length) {
       // TODO(paulberry): Report error in this case as well,
       // after https://github.com/dart-lang/sdk/issues/32130 is fixed.
-      arguments.types.clear();
+      types.clear();
       for (int i = 0; i < typeParameters.length; i++) {
-        arguments.types.add(const DynamicType());
+        types.add(const DynamicType());
       }
     }
 
@@ -2538,7 +2582,7 @@
   void endNewExpression(Token token) {
     debugEvent("NewExpression");
     Token nameToken = token.next;
-    ShadowArguments arguments = pop();
+    Arguments arguments = pop();
     String name = pop();
     List<DartType> typeArguments = pop();
 
@@ -2576,11 +2620,8 @@
     } else if (type is ErrorAccessor) {
       push(type.buildError(arguments));
     } else {
-      push(throwNoSuchMethodError(
-          new NullLiteral()..fileOffset = token.charOffset,
-          debugName(getNodeName(type), name),
-          arguments,
-          nameToken.charOffset));
+      push(throwNoSuchMethodError(forest.literalNull(token),
+          debugName(getNodeName(type), name), arguments, nameToken.charOffset));
     }
     constantExpressionRequired = savedConstantExpressionRequired;
   }
@@ -2600,8 +2641,8 @@
     }
 
     if (typeArguments != null) {
-      assert(arguments.types.isEmpty);
-      ShadowArguments.setExplicitArgumentTypes(arguments, typeArguments);
+      assert(forest.argumentsTypes(arguments).isEmpty);
+      forest.argumentsSetExplicitArgumentTypes(arguments, typeArguments);
     }
 
     String errorName;
@@ -2673,8 +2714,11 @@
       errorName = debugName(getNodeName(type), name);
     }
     errorName ??= name;
-    return throwNoSuchMethodError(new NullLiteral()..fileOffset = charOffset,
-        errorName, arguments, nameToken.charOffset);
+    return throwNoSuchMethodError(
+        storeOffset(forest.literalNull(null), charOffset),
+        errorName,
+        arguments,
+        nameToken.charOffset);
   }
 
   @override
@@ -3429,9 +3473,8 @@
       // TODO(danrubel): Ignore this error until we deprecate `native` support.
       return;
     }
-    int start = offsetForToken(startToken);
-    int length = (start == -1) ? 1 : (offsetForToken(endToken) - start);
-    addCompileTimeError(message, start, length);
+    addCompileTimeError(message, offsetForToken(startToken),
+        lengthOfSpan(startToken, endToken));
   }
 
   @override
@@ -3457,17 +3500,17 @@
   Expression deprecated_buildCompileTimeError(String error,
       [int charOffset = -1]) {
     return buildCompileTimeError(
-        fasta.templateUnspecified.withArguments(error), charOffset);
+        fasta.templateUnspecified.withArguments(error), charOffset, noLength);
   }
 
   @override
-  Expression buildCompileTimeError(Message message, int charOffset,
+  Expression buildCompileTimeError(Message message, int charOffset, int length,
       {LocatedMessage context}) {
-    library.addCompileTimeError(message, charOffset, uri,
+    library.addCompileTimeError(message, charOffset, length, uri,
         wasHandled: true, context: context);
     return new ShadowSyntheticExpression(library.loader
-        .throwCompileConstantError(
-            library.loader.buildCompileTimeError(message, charOffset, uri)));
+        .throwCompileConstantError(library.loader
+            .buildCompileTimeError(message, charOffset, length, uri)));
   }
 
   Expression wrapInCompileTimeError(Expression expression, Message message) {
@@ -3476,12 +3519,12 @@
     return new Let(
         new VariableDeclaration.forValue(expression)
           ..fileOffset = expression.fileOffset,
-        buildCompileTimeError(message, expression.fileOffset))
+        buildCompileTimeError(message, expression.fileOffset, noLength))
       ..fileOffset = expression.fileOffset;
   }
 
   Expression buildFallThroughError(int charOffset) {
-    addProblem(fasta.messageSwitchCaseFallThrough, charOffset);
+    addProblem(fasta.messageSwitchCaseFallThrough, charOffset, noLength);
 
     // TODO(ahe): The following doesn't make sense for the Analyzer. It should
     // be moved to [Forest] or conditional on `forest is Fangorn`.
@@ -3491,10 +3534,11 @@
 
     return new Throw(buildStaticInvocation(
         library.loader.coreTypes.fallThroughErrorUrlAndLineConstructor,
-        new Arguments(<Expression>[
-          new StringLiteral("${location?.file ?? uri}"),
-          forest.literalInt(location?.line ?? 0, charOffset),
-        ]),
+        forest.arguments(<Expression>[
+          storeOffset(forest.literalString("${location?.file ?? uri}", null),
+              charOffset),
+          storeOffset(forest.literalInt(location?.line ?? 0, null), charOffset),
+        ], noLocation),
         charOffset: charOffset));
   }
 
@@ -3502,9 +3546,13 @@
       Message message, String className,
       [int charOffset = -1]) {
     addProblemErrorIfConst(message, charOffset, className.length);
+    // TODO(ahe): The following doesn't make sense to Analyzer AST.
     Builder constructor = library.loader.getAbstractClassInstantiationError();
-    return new Throw(buildStaticInvocation(constructor.target,
-        new ShadowArguments(<Expression>[new StringLiteral(className)])));
+    return new Throw(buildStaticInvocation(
+        constructor.target,
+        forest.arguments(<Expression>[
+          storeOffset(forest.literalString(className, null), charOffset)
+        ], noLocation)));
   }
 
   Statement deprecated_buildCompileTimeErrorStatement(error,
@@ -3516,7 +3564,7 @@
   Statement buildCompileTimeErrorStatement(Message message, int charOffset,
       {LocatedMessage context}) {
     return new ShadowExpressionStatement(
-        buildCompileTimeError(message, charOffset, context: context));
+        buildCompileTimeError(message, charOffset, noLength, context: context));
   }
 
   Statement wrapInCompileTimeErrorStatement(
@@ -3564,16 +3612,19 @@
         addProblem(
             fasta.templateFinalInstanceVariableAlreadyInitialized
                 .withArguments(name),
-            offset);
-        addProblem(
-            fasta.templateFinalInstanceVariableAlreadyInitializedCause
-                .withArguments(name),
-            builder.charOffset);
+            offset,
+            noLength,
+            context: fasta.templateFinalInstanceVariableAlreadyInitializedCause
+                .withArguments(name)
+                .withLocation(uri, builder.charOffset, noLength));
         Builder constructor =
             library.loader.getDuplicatedFieldInitializerError();
         return buildInvalidInitializer(
-            new Throw(buildStaticInvocation(constructor.target,
-                new Arguments(<Expression>[new StringLiteral(name)]),
+            new Throw(buildStaticInvocation(
+                constructor.target,
+                forest.arguments(<Expression>[
+                  storeOffset(forest.literalString(name, null), offset)
+                ], noLocation),
                 charOffset: offset)),
             offset);
       } else {
@@ -3600,7 +3651,8 @@
           charOffset);
     }
     needsImplicitSuperInitializer = false;
-    return new ShadowSuperInitializer(constructor, arguments)
+    return new ShadowSuperInitializer(
+        constructor, forest.castArguments(arguments))
       ..fileOffset = charOffset
       ..isSynthetic = isSynthetic;
   }
@@ -3610,13 +3662,15 @@
       Constructor constructor, Arguments arguments,
       [int charOffset = -1]) {
     needsImplicitSuperInitializer = false;
-    return new ShadowRedirectingInitializer(constructor, arguments)
+    return new ShadowRedirectingInitializer(
+        constructor, forest.castArguments(arguments))
       ..fileOffset = charOffset;
   }
 
   @override
-  Expression buildProblemExpression(ProblemBuilder builder, int charOffset) {
-    return buildCompileTimeError(builder.message, charOffset);
+  Expression buildProblemExpression(
+      ProblemBuilder builder, int charOffset, int length) {
+    return buildCompileTimeError(builder.message, charOffset, length);
   }
 
   @override
@@ -3632,12 +3686,15 @@
   }
 
   @override
-  dynamic deprecated_addCompileTimeError(int charOffset, String message,
+  void deprecated_addCompileTimeError(int charOffset, String message,
       {bool wasHandled: false}) {
     // TODO(ahe): If constantExpressionRequired is set, set it to false to
     // avoid a long list of errors.
     return library.addCompileTimeError(
-        fasta.templateUnspecified.withArguments(message), charOffset, uri,
+        fasta.templateUnspecified.withArguments(message),
+        charOffset,
+        noLength,
+        uri,
         wasHandled: wasHandled);
   }
 
@@ -3678,8 +3735,8 @@
       Arguments arguments, Expression expression) {
     if (arguments == null) return expression;
     List<Expression> expressions =
-        new List<Expression>.from(arguments.positional);
-    for (NamedExpression named in arguments.named) {
+        new List<Expression>.from(forest.argumentsPositional(arguments));
+    for (NamedExpression named in forest.argumentsNamed(arguments)) {
       expressions.add(named.value);
     }
     for (Expression argument in expressions.reversed) {
@@ -3721,14 +3778,16 @@
               offset,
               name.name.length);
         }
-        return new ShadowSuperMethodInvocation(name, arguments, target)
+        return new ShadowSuperMethodInvocation(
+            name, forest.castArguments(arguments), target)
           ..fileOffset = offset;
       }
 
       receiver = new ShadowSuperPropertyGet(name, target)..fileOffset = offset;
-      return new ShadowMethodInvocation(receiver, callName, arguments,
+      return new ShadowMethodInvocation(
+          receiver, callName, forest.castArguments(arguments),
           isImplicitCall: true)
-        ..fileOffset = arguments.fileOffset;
+        ..fileOffset = forest.readOffset(arguments);
     }
 
     if (isNullAware) {
@@ -3737,28 +3796,32 @@
           variable,
           new ConditionalExpression(
               buildIsNull(new VariableGet(variable), offset),
-              new NullLiteral(),
-              new MethodInvocation(
-                  new VariableGet(variable), name, arguments, interfaceTarget)
+              storeOffset(forest.literalNull(null), offset),
+              new MethodInvocation(new VariableGet(variable), name,
+                  forest.castArguments(arguments), interfaceTarget)
                 ..fileOffset = offset,
               null)
             ..fileOffset = offset)
         ..fileOffset = offset;
     } else {
-      return new ShadowMethodInvocation(receiver, name, arguments,
+      return new ShadowMethodInvocation(
+          receiver, name, forest.castArguments(arguments),
           isImplicitCall: isImplicitCall, interfaceTarget: interfaceTarget)
         ..fileOffset = offset;
     }
   }
 
   @override
-  void addCompileTimeError(Message message, int charOffset, int length) {
-    library.addCompileTimeError(message, charOffset, uri);
+  void addCompileTimeError(Message message, int charOffset, int length,
+      {LocatedMessage context}) {
+    library.addCompileTimeError(message, charOffset, length, uri,
+        context: context);
   }
 
   @override
-  void addProblem(Message message, int charOffset) {
-    library.addProblem(message, charOffset, uri);
+  void addProblem(Message message, int charOffset, int length,
+      {LocatedMessage context}) {
+    library.addProblem(message, charOffset, length, uri, context: context);
   }
 
   @override
@@ -3768,9 +3831,9 @@
     // take two messages: one to use when a constant expression is
     // required and one to use otherwise.
     if (constantExpressionRequired) {
-      addCompileTimeError(message, charOffset, length);
+      addCompileTimeError(message, charOffset, length, context: context);
     } else {
-      library.addProblem(message, charOffset, uri, context: context);
+      library.addProblem(message, charOffset, length, uri, context: context);
     }
   }
 
@@ -3792,6 +3855,13 @@
       ..fileOffset = charOffset;
     return new ShadowDeferredCheck(check, expression);
   }
+
+  @override
+  T storeOffset<T>(T object, int offset) {
+    TreeNode node = object as TreeNode;
+    node.fileOffset = offset;
+    return object;
+  }
 }
 
 class Identifier {
@@ -3831,7 +3901,7 @@
   String toString() => "label($name)";
 }
 
-abstract class ContextAccessor extends FastaAccessor {
+abstract class ContextAccessor<Arguments> extends FastaAccessor<Arguments> {
   final BuilderHelper helper;
 
   final FastaAccessor accessor;
@@ -3895,7 +3965,7 @@
   }
 }
 
-class DelayedAssignment extends ContextAccessor {
+class DelayedAssignment<Arguments> extends ContextAccessor<Arguments> {
   final Expression value;
 
   final String assignmentOperator;
@@ -3973,7 +4043,7 @@
   }
 }
 
-class DelayedPostfixIncrement extends ContextAccessor {
+class DelayedPostfixIncrement<Arguments> extends ContextAccessor<Arguments> {
   final Name binaryOperator;
 
   final Procedure interfaceTarget;
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index f102ac7..6771997 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -4,14 +4,136 @@
 
 library fasta.fangorn;
 
-import 'kernel_shadow_ast.dart';
+import 'dart:core' hide MapEntry;
+
+import 'package:kernel/ast.dart'
+    show
+        Arguments,
+        DartType,
+        Expression,
+        MapEntry,
+        NamedExpression,
+        Statement,
+        TreeNode;
+
+import '../parser.dart' show offsetForToken;
+
+import '../scanner.dart' show Token;
+
+import 'kernel_shadow_ast.dart'
+    show
+        ShadowArguments,
+        ShadowBoolLiteral,
+        ShadowDoubleLiteral,
+        ShadowIntLiteral,
+        ShadowListLiteral,
+        ShadowMapLiteral,
+        ShadowNullLiteral,
+        ShadowStringLiteral,
+        ShadowSymbolLiteral,
+        ShadowTypeLiteral;
 
 import 'forest.dart' show Forest;
 
 /// A shadow tree factory.
-class Fangorn extends Forest<ShadowExpression, ShadowStatement> {
+class Fangorn extends Forest<Expression, Statement, Token, Arguments> {
   @override
-  ShadowExpression literalInt(int value, int offset) {
-    return new ShadowIntLiteral(value)..fileOffset = offset;
+  ShadowArguments arguments(List<Expression> positional, Token token,
+      {List<DartType> types, List<NamedExpression> named}) {
+    return new ShadowArguments(positional, types: types, named: named)
+      ..fileOffset = offsetForToken(token);
   }
+
+  @override
+  ShadowArguments argumentsEmpty(Token token) {
+    return arguments(<Expression>[], token);
+  }
+
+  @override
+  List<NamedExpression> argumentsNamed(Arguments arguments) {
+    return arguments.named;
+  }
+
+  @override
+  List<Expression> argumentsPositional(Arguments arguments) {
+    return arguments.positional;
+  }
+
+  @override
+  List<DartType> argumentsTypes(Arguments arguments) {
+    return arguments.types;
+  }
+
+  @override
+  void argumentsSetExplicitArgumentTypes(
+      Arguments arguments, List<DartType> types) {
+    ShadowArguments.setExplicitArgumentTypes(arguments, types);
+  }
+
+  @override
+  ShadowStringLiteral asLiteralString(Expression value) => value;
+
+  @override
+  ShadowBoolLiteral literalBool(bool value, Token token) {
+    return new ShadowBoolLiteral(value)..fileOffset = offsetForToken(token);
+  }
+
+  @override
+  ShadowDoubleLiteral literalDouble(double value, Token token) {
+    return new ShadowDoubleLiteral(value)..fileOffset = offsetForToken(token);
+  }
+
+  @override
+  ShadowIntLiteral literalInt(int value, Token token) {
+    return new ShadowIntLiteral(value)..fileOffset = offsetForToken(token);
+  }
+
+  @override
+  ShadowListLiteral literalList(covariant typeArgument,
+      List<Expression> expressions, bool isConst, Token token) {
+    return new ShadowListLiteral(expressions,
+        typeArgument: typeArgument, isConst: isConst)
+      ..fileOffset = offsetForToken(token);
+  }
+
+  @override
+  ShadowMapLiteral literalMap(DartType keyType, DartType valueType,
+      List<MapEntry> entries, bool isConst, Token token) {
+    return new ShadowMapLiteral(entries,
+        keyType: keyType, valueType: valueType, isConst: isConst)
+      ..fileOffset = offsetForToken(token);
+  }
+
+  @override
+  ShadowNullLiteral literalNull(Token token) {
+    return new ShadowNullLiteral()..fileOffset = offsetForToken(token);
+  }
+
+  @override
+  ShadowStringLiteral literalString(String value, Token token) {
+    return new ShadowStringLiteral(value)..fileOffset = offsetForToken(token);
+  }
+
+  @override
+  ShadowSymbolLiteral literalSymbol(String value, Token token) {
+    return new ShadowSymbolLiteral(value)..fileOffset = offsetForToken(token);
+  }
+
+  @override
+  ShadowTypeLiteral literalType(DartType type, Token token) {
+    return new ShadowTypeLiteral(type)..fileOffset = offsetForToken(token);
+  }
+
+  @override
+  MapEntry mapEntry(Expression key, Expression value, Token token) {
+    return new MapEntry(key, value)..fileOffset = offsetForToken(token);
+  }
+
+  @override
+  List<MapEntry> mapEntryList(int length) {
+    return new List<MapEntry>.filled(length, null, growable: true);
+  }
+
+  @override
+  int readOffset(TreeNode node) => node.fileOffset;
 }
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 ee89d72..2a3d2d5 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -22,13 +22,16 @@
 
 import '../names.dart' show callName, lengthName;
 
+import '../parser.dart'
+    show lengthForToken, lengthOfSpan, noLength, offsetForToken;
+
 import '../problems.dart' show unhandled, unimplemented, unsupported;
 
 import '../scope.dart' show AccessErrorBuilder, ProblemBuilder, Scope;
 
 import '../type_inference/type_promotion.dart' show TypePromoter;
 
-import 'body_builder.dart' show Identifier;
+import 'body_builder.dart' show Identifier, noLocation;
 
 import 'forest.dart' show Forest;
 
@@ -55,6 +58,7 @@
 import 'kernel_builder.dart'
     show
         Builder,
+        BuiltinTypeBuilder,
         FunctionTypeAliasBuilder,
         KernelClassBuilder,
         KernelFunctionTypeAliasBuilder,
@@ -67,11 +71,9 @@
         TypeDeclarationBuilder,
         KernelTypeBuilder;
 
-import 'utils.dart' show offsetForToken;
-
 import 'type_algorithms.dart' show calculateBoundsForDeclaration;
 
-abstract class BuilderHelper {
+abstract class BuilderHelper<Arguments> {
   LibraryBuilder get library;
 
   Uri get uri;
@@ -82,7 +84,7 @@
 
   bool get constantExpressionRequired;
 
-  Forest<Expression, Statement> get forest;
+  Forest<Expression, Statement, Token, Arguments> get forest;
 
   Constructor lookupConstructor(Name name, {bool isSuper});
 
@@ -95,7 +97,7 @@
 
   finishSend(Object receiver, Arguments arguments, int offset);
 
-  Expression buildCompileTimeError(Message message, int charOffset);
+  Expression buildCompileTimeError(Message message, int charOffset, int length);
 
   Expression wrapInCompileTimeError(Expression expression, Message message);
 
@@ -117,7 +119,8 @@
   Expression buildStaticInvocation(Procedure target, Arguments arguments,
       {bool isConst, int charOffset, Member initialTarget});
 
-  Expression buildProblemExpression(ProblemBuilder builder, int offset);
+  Expression buildProblemExpression(
+      ProblemBuilder builder, int offset, int length);
 
   Expression throwNoSuchMethodError(
       Expression receiver, String name, Arguments arguments, int offset,
@@ -161,7 +164,7 @@
   DartType validatedTypeVariableUse(
       TypeParameterType type, int offset, bool nonInstanceAccessIsError);
 
-  void addProblem(Message message, int charOffset);
+  void addProblem(Message message, int charOffset, int length);
 
   void addProblemErrorIfConst(Message message, int charOffset, int length);
 
@@ -172,6 +175,8 @@
   Message warnUnresolvedMethod(Name name, int charOffset, {bool isSuper});
 
   void warnTypeArgumentsMismatch(String name, int expected, int charOffset);
+
+  T storeOffset<T>(T node, int offset);
 }
 
 // The name used to refer to a call target kind
@@ -203,9 +208,11 @@
       this.positionalParameterCount, this._namedParameters);
 }
 
-abstract class FastaAccessor implements Accessor {
+abstract class FastaAccessor<Arguments> implements Accessor<Arguments> {
   BuilderHelper get helper;
 
+  Forest<Expression, Statement, Token, Arguments> get forest => helper.forest;
+
   String get plainNameForRead;
 
   Uri get uri => helper.uri;
@@ -214,26 +221,29 @@
 
   bool get isInitializer => false;
 
+  T storeOffset<T>(T node, int offset) {
+    return helper.storeOffset(node, offset);
+  }
+
   Expression buildForEffect() => buildSimpleRead();
 
   Initializer buildFieldInitializer(Map<String, int> initializedFields) {
     int offset = offsetForToken(token);
     return helper.buildInvalidInitializer(
-        helper.buildCompileTimeError(messageInvalidInitializer, offset),
+        helper.buildCompileTimeError(
+            messageInvalidInitializer, offset, lengthForToken(token)),
         offset);
   }
 
   Expression makeInvalidRead() {
     return buildThrowNoSuchMethodError(
-        new NullLiteral()..fileOffset = offsetForToken(token),
-        new Arguments.empty(),
+        forest.literalNull(token), forest.argumentsEmpty(noLocation),
         isGetter: true);
   }
 
   Expression makeInvalidWrite(Expression value) {
-    return buildThrowNoSuchMethodError(
-        new NullLiteral()..fileOffset = offsetForToken(token),
-        new ShadowArguments(<Expression>[value]),
+    return buildThrowNoSuchMethodError(forest.literalNull(token),
+        forest.arguments(<Expression>[value], noLocation),
         isSetter: true);
   }
 
@@ -258,8 +268,8 @@
 
   DartType buildTypeWithBuiltArguments(List<DartType> arguments,
       {bool nonInstanceAccessIsError: false}) {
-    helper.addProblem(
-        templateNotAType.withArguments(token.lexeme), token.charOffset);
+    helper.addProblem(templateNotAType.withArguments(token.lexeme),
+        offsetForToken(token), lengthForToken(token));
     return const InvalidType();
   }
 
@@ -288,7 +298,7 @@
       new ShadowIllegalAssignment(rhs);
 }
 
-abstract class ErrorAccessor implements FastaAccessor {
+abstract class ErrorAccessor<Arguments> implements FastaAccessor<Arguments> {
   /// Pass [arguments] that must be evaluated before throwing an error.  At
   /// most one of [isGetter] and [isSetter] should be true and they're passed
   /// to [BuilderHelper.buildThrowNoSuchMethodError] if it is used.
@@ -307,7 +317,7 @@
   @override
   Initializer buildFieldInitializer(Map<String, int> initializedFields) {
     return helper.buildInvalidInitializer(
-        buildError(new Arguments.empty(), isSetter: true));
+        buildError(forest.argumentsEmpty(noLocation), isSetter: true));
   }
 
   @override
@@ -335,7 +345,8 @@
 
   @override
   Expression buildAssignment(Expression value, {bool voidContext: false}) {
-    return buildError(new ShadowArguments(<Expression>[value]), isSetter: true);
+    return buildError(forest.arguments(<Expression>[value], noLocation),
+        isSetter: true);
   }
 
   @override
@@ -344,7 +355,8 @@
       bool voidContext: false,
       Procedure interfaceTarget,
       bool isPreIncDec: false}) {
-    return buildError(new ShadowArguments(<Expression>[value]), isGetter: true);
+    return buildError(forest.arguments(<Expression>[value], token),
+        isGetter: true);
   }
 
   @override
@@ -355,7 +367,9 @@
     // TODO(ahe): For the Analyzer, we probably need to build a prefix
     // increment node that wraps an error.
     return buildError(
-        new ShadowArguments(<Expression>[helper.forest.literalInt(1, offset)]),
+        forest.arguments(
+            <Expression>[storeOffset(forest.literalInt(1, null), offset)],
+            noLocation),
         isGetter: true);
   }
 
@@ -367,7 +381,9 @@
     // TODO(ahe): For the Analyzer, we probably need to build a post increment
     // node that wraps an error.
     return buildError(
-        new ShadowArguments(<Expression>[helper.forest.literalInt(1, offset)]),
+        forest.arguments(
+            <Expression>[storeOffset(forest.literalInt(1, null), offset)],
+            noLocation),
         isGetter: true);
   }
 
@@ -375,24 +391,26 @@
   Expression buildNullAwareAssignment(
       Expression value, DartType type, int offset,
       {bool voidContext: false}) {
-    return buildError(new ShadowArguments(<Expression>[value]), isSetter: true);
+    return buildError(forest.arguments(<Expression>[value], noLocation),
+        isSetter: true);
   }
 
   @override
   Expression buildSimpleRead() =>
-      buildError(new Arguments.empty(), isGetter: true);
+      buildError(forest.argumentsEmpty(noLocation), isGetter: true);
 
   @override
   Expression makeInvalidRead() =>
-      buildError(new Arguments.empty(), isGetter: true);
+      buildError(forest.argumentsEmpty(noLocation), isGetter: true);
 
   @override
   Expression makeInvalidWrite(Expression value) {
-    return buildError(new ShadowArguments(<Expression>[value]), isSetter: true);
+    return buildError(forest.arguments(<Expression>[value], noLocation),
+        isSetter: true);
   }
 }
 
-class ThisAccessor extends FastaAccessor {
+class ThisAccessor<Arguments> extends FastaAccessor<Arguments> {
   final BuilderHelper helper;
 
   final Token token;
@@ -413,8 +431,8 @@
     if (!isSuper) {
       return new ShadowThisExpression();
     } else {
-      return helper.buildCompileTimeError(
-          messageSuperAsExpression, offsetForToken(token));
+      return helper.buildCompileTimeError(messageSuperAsExpression,
+          offsetForToken(token), lengthForToken(token));
     }
   }
 
@@ -468,7 +486,8 @@
     if (isInitializer) {
       return buildConstructorInitializer(offset, new Name(""), arguments);
     } else if (isSuper) {
-      return helper.buildCompileTimeError(messageSuperAsExpression, offset);
+      return helper.buildCompileTimeError(
+          messageSuperAsExpression, offset, noLength);
     } else {
       return helper.buildMethodInvocation(
           new ShadowThisExpression(), callName, arguments, offset,
@@ -490,7 +509,7 @@
     if (constructor == null || argMessage != null) {
       return helper.buildInvalidInitializer(
           buildThrowNoSuchMethodError(
-              new NullLiteral()..fileOffset = offset, arguments,
+              storeOffset(forest.literalNull(null), offset), arguments,
               isSuper: isSuper,
               name: name.name,
               offset: offset,
@@ -549,7 +568,7 @@
   }
 }
 
-abstract class IncompleteSend extends FastaAccessor {
+abstract class IncompleteSend<Arguments> extends FastaAccessor<Arguments> {
   final BuilderHelper helper;
 
   @override
@@ -564,7 +583,8 @@
   Arguments get arguments => null;
 }
 
-class IncompleteError extends IncompleteSend with ErrorAccessor {
+class IncompleteError<Arguments> extends IncompleteSend<Arguments>
+    with ErrorAccessor<Arguments> {
   final Message message;
 
   IncompleteError(BuilderHelper helper, Token token, this.message)
@@ -573,8 +593,12 @@
   @override
   Expression buildError(Arguments arguments,
       {bool isGetter: false, bool isSetter: false, int offset}) {
-    return helper.buildCompileTimeError(
-        message, offset ?? offsetForToken(this.token));
+    int length = noLength;
+    if (offset == null) {
+      offset = offsetForToken(token);
+      length = lengthForToken(token);
+    }
+    return helper.buildCompileTimeError(message, offset, length);
   }
 
   @override
@@ -582,7 +606,8 @@
     helper.addProblem(
         templateNotAPrefixInTypeAnnotation.withArguments(
             token.lexeme, suffix.name),
-        offsetForToken(token));
+        offsetForToken(token),
+        lengthOfSpan(token, suffix.token));
     return const InvalidType();
   }
 
@@ -590,7 +615,7 @@
   doInvocation(int offset, Arguments arguments) => this;
 }
 
-class SendAccessor extends IncompleteSend {
+class SendAccessor<Arguments> extends IncompleteSend<Arguments> {
   @override
   final Arguments arguments;
 
@@ -667,7 +692,7 @@
   }
 }
 
-class IncompletePropertyAccessor extends IncompleteSend {
+class IncompletePropertyAccessor<Arguments> extends IncompleteSend<Arguments> {
   IncompletePropertyAccessor(BuilderHelper helper, Token token, Name name)
       : super(helper, token, name);
 
@@ -738,7 +763,8 @@
   }
 }
 
-class IndexAccessor extends kernel.IndexAccessor with FastaAccessor {
+class IndexAccessor<Arguments> extends kernel.IndexAccessor<Arguments>
+    with FastaAccessor<Arguments> {
   final BuilderHelper helper;
 
   IndexAccessor.internal(this.helper, Token token, Expression receiver,
@@ -751,7 +777,7 @@
 
   Expression doInvocation(int offset, Arguments arguments) {
     return helper.buildMethodInvocation(
-        buildSimpleRead(), callName, arguments, arguments.fileOffset,
+        buildSimpleRead(), callName, arguments, forest.readOffset(arguments),
         isImplicitCall: true);
   }
 
@@ -777,7 +803,8 @@
       new ShadowIndexAssign(receiver, index, rhs);
 }
 
-class PropertyAccessor extends kernel.PropertyAccessor with FastaAccessor {
+class PropertyAccessor<Arguments> extends kernel.PropertyAccessor<Arguments>
+    with FastaAccessor<Arguments> {
   final BuilderHelper helper;
 
   PropertyAccessor.internal(this.helper, Token token, Expression receiver,
@@ -818,7 +845,8 @@
       new ShadowPropertyAssign(receiver, rhs);
 }
 
-class StaticAccessor extends kernel.StaticAccessor with FastaAccessor {
+class StaticAccessor<Arguments> extends kernel.StaticAccessor<Arguments>
+    with FastaAccessor<Arguments> {
   StaticAccessor(
       BuilderHelper helper, Token token, Member readTarget, Member writeTarget)
       : super(helper, readTarget, writeTarget, token) {
@@ -874,8 +902,8 @@
       new ShadowStaticAssignment(rhs);
 }
 
-class LoadLibraryAccessor extends kernel.LoadLibraryAccessor
-    with FastaAccessor {
+class LoadLibraryAccessor<Arguments> extends kernel
+    .LoadLibraryAccessor<Arguments> with FastaAccessor<Arguments> {
   LoadLibraryAccessor(
       BuilderHelper helper, Token token, LoadLibraryBuilder builder)
       : super(helper, token, builder);
@@ -883,7 +911,8 @@
   String get plainNameForRead => 'loadLibrary';
 
   Expression doInvocation(int offset, Arguments arguments) {
-    if (arguments.positional.length > 0 || arguments.named.length > 0) {
+    if (forest.argumentsPositional(arguments).length > 0 ||
+        forest.argumentsNamed(arguments).length > 0) {
       helper.addProblemErrorIfConst(
           messageLoadLibraryTakesNoArguments, offset, 'loadLibrary'.length);
     }
@@ -891,7 +920,8 @@
   }
 }
 
-class DeferredAccessor extends kernel.DeferredAccessor with FastaAccessor {
+class DeferredAccessor<Arguments> extends kernel.DeferredAccessor<Arguments>
+    with FastaAccessor<Arguments> {
   DeferredAccessor(BuilderHelper helper, Token token, PrefixBuilder builder,
       FastaAccessor expression)
       : super(helper, token, builder, expression);
@@ -923,7 +953,8 @@
             accessor.buildTypeWithBuiltArguments(arguments,
                 nonInstanceAccessIsError: nonInstanceAccessIsError),
             builder.name),
-        token.charOffset);
+        offsetForToken(token),
+        lengthForToken(token));
     return const InvalidType();
   }
 
@@ -933,8 +964,8 @@
   }
 }
 
-class SuperPropertyAccessor extends kernel.SuperPropertyAccessor
-    with FastaAccessor {
+class SuperPropertyAccessor<Arguments> extends kernel
+    .SuperPropertyAccessor<Arguments> with FastaAccessor<Arguments> {
   SuperPropertyAccessor(BuilderHelper helper, Token token, Name name,
       Member getter, Member setter)
       : super(helper, name, getter, setter, token);
@@ -967,7 +998,8 @@
       new ShadowPropertyAssign(null, rhs, isSuper: true);
 }
 
-class ThisIndexAccessor extends kernel.ThisIndexAccessor with FastaAccessor {
+class ThisIndexAccessor<Arguments> extends kernel.ThisIndexAccessor<Arguments>
+    with FastaAccessor<Arguments> {
   ThisIndexAccessor(BuilderHelper helper, Token token, Expression index,
       Procedure getter, Procedure setter)
       : super(helper, index, getter, setter, token);
@@ -989,7 +1021,8 @@
       new ShadowIndexAssign(null, index, rhs);
 }
 
-class SuperIndexAccessor extends kernel.SuperIndexAccessor with FastaAccessor {
+class SuperIndexAccessor<Arguments> extends kernel.SuperIndexAccessor<Arguments>
+    with FastaAccessor<Arguments> {
   SuperIndexAccessor(BuilderHelper helper, Token token, Expression index,
       Member getter, Member setter)
       : super(helper, index, getter, setter, token);
@@ -1011,8 +1044,8 @@
       new ShadowIndexAssign(null, index, rhs, isSuper: true);
 }
 
-class ThisPropertyAccessor extends kernel.ThisPropertyAccessor
-    with FastaAccessor {
+class ThisPropertyAccessor<Arguments> extends kernel
+    .ThisPropertyAccessor<Arguments> with FastaAccessor<Arguments> {
   final BuilderHelper helper;
 
   ThisPropertyAccessor(
@@ -1045,8 +1078,8 @@
       new ShadowPropertyAssign(null, rhs);
 }
 
-class NullAwarePropertyAccessor extends kernel.NullAwarePropertyAccessor
-    with FastaAccessor {
+class NullAwarePropertyAccessor<Arguments> extends kernel
+    .NullAwarePropertyAccessor<Arguments> with FastaAccessor<Arguments> {
   final BuilderHelper helper;
 
   NullAwarePropertyAccessor(this.helper, Token token, Expression receiver,
@@ -1072,7 +1105,8 @@
   return offset + (name?.length ?? 0);
 }
 
-class VariableAccessor extends kernel.VariableAccessor with FastaAccessor {
+class VariableAccessor<Arguments> extends kernel.VariableAccessor<Arguments>
+    with FastaAccessor<Arguments> {
   VariableAccessor(
       BuilderHelper helper, Token token, VariableDeclaration variable,
       [DartType promotedType])
@@ -1093,7 +1127,8 @@
       new ShadowVariableAssignment(rhs);
 }
 
-class ReadOnlyAccessor extends kernel.ReadOnlyAccessor with FastaAccessor {
+class ReadOnlyAccessor<Arguments> extends kernel.ReadOnlyAccessor<Arguments>
+    with FastaAccessor<Arguments> {
   final String plainNameForRead;
 
   ReadOnlyAccessor(BuilderHelper helper, Expression expression,
@@ -1107,20 +1142,24 @@
   }
 }
 
-class LargeIntAccessor extends kernel.DelayedErrorAccessor with FastaAccessor {
+class LargeIntAccessor<Arguments> extends kernel.DelayedErrorAccessor<Arguments>
+    with FastaAccessor<Arguments> {
   final String plainNameForRead = null;
 
   LargeIntAccessor(BuilderHelper helper, Token token) : super(helper, token);
 
   @override
-  Expression buildError() => helper.buildCompileTimeError(
-      templateIntegerLiteralIsOutOfRange.withArguments(token),
-      token.charOffset);
+  Expression buildError() {
+    return helper.buildCompileTimeError(
+        templateIntegerLiteralIsOutOfRange.withArguments(token),
+        offsetForToken(token),
+        lengthForToken(token));
+  }
 
   Expression doInvocation(int offset, Arguments arguments) => buildError();
 }
 
-class ParenthesizedExpression extends ReadOnlyAccessor {
+class ParenthesizedExpression<Arguments> extends ReadOnlyAccessor<Arguments> {
   ParenthesizedExpression(
       BuilderHelper helper, Expression expression, Token token)
       : super(helper, expression, null, token);
@@ -1131,7 +1170,7 @@
   }
 }
 
-class TypeDeclarationAccessor extends ReadOnlyAccessor {
+class TypeDeclarationAccessor<Arguments> extends ReadOnlyAccessor<Arguments> {
   /// The import prefix preceding the [declaration] reference, or `null` if
   /// the reference is not prefixed.
   final PrefixBuilder prefix;
@@ -1158,14 +1197,13 @@
         KernelInvalidTypeBuilder declaration = this.declaration;
         helper.addProblemErrorIfConst(
             declaration.message.messageObject, offset, token.length);
-        super.expression = new Throw(
-            new StringLiteral(declaration.message.message)
-              ..fileOffset = offsetForToken(token))
-          ..fileOffset = offset;
+        super.expression =
+            new Throw(forest.literalString(declaration.message.message, token))
+              ..fileOffset = offset;
       } else {
-        super.expression = new ShadowTypeLiteral(
-            buildTypeWithBuiltArguments(null, nonInstanceAccessIsError: true))
-          ..fileOffset = offsetForToken(token);
+        super.expression = forest.literalType(
+            buildTypeWithBuiltArguments(null, nonInstanceAccessIsError: true),
+            token);
       }
     }
     return super.expression;
@@ -1173,8 +1211,9 @@
 
   Expression makeInvalidWrite(Expression value) {
     return buildThrowNoSuchMethodError(
-        new NullLiteral()..fileOffset = offsetForToken(token),
-        new Arguments(<Expression>[value])..fileOffset = value.fileOffset,
+        forest.literalNull(token),
+        storeOffset(
+            forest.arguments(<Expression>[value], null), value.fileOffset),
         isSetter: true);
   }
 
@@ -1242,6 +1281,9 @@
         expected = declaration.target.typeParameters.length;
       } else if (declaration is KernelTypeVariableBuilder) {
         // Type arguments on a type variable - error reported elsewhere.
+      } else if (declaration is BuiltinTypeBuilder) {
+        // Type arguments on a built-in type, for example, dynamic or void.
+        expected = 0;
       } else {
         return unhandled(
             "${declaration.runtimeType}",
@@ -1335,7 +1377,8 @@
   }
 }
 
-class UnresolvedAccessor extends FastaAccessor with ErrorAccessor {
+class UnresolvedAccessor<Arguments> extends FastaAccessor<Arguments>
+    with ErrorAccessor<Arguments> {
   @override
   final Token token;
 
@@ -1356,7 +1399,8 @@
     helper.addProblem(
         templateUnresolvedPrefixInTypeAnnotation.withArguments(
             name.name, suffix.name),
-        offsetForToken(token));
+        offsetForToken(token),
+        lengthOfSpan(token, suffix.token));
     return const InvalidType();
   }
 
@@ -1364,9 +1408,13 @@
   Expression buildError(Arguments arguments,
       {bool isGetter: false, bool isSetter: false, int offset}) {
     offset ??= offsetForToken(this.token);
-    return helper.throwNoSuchMethodError(new NullLiteral()..fileOffset = offset,
-        plainNameForRead, arguments, offset,
-        isGetter: isGetter, isSetter: isSetter);
+    return helper.throwNoSuchMethodError(
+        storeOffset(forest.literalNull(null), offset),
+        plainNameForRead,
+        arguments,
+        offset,
+        isGetter: isGetter,
+        isSetter: isSetter);
   }
 }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index 283d8cc..3ff5778 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -4,7 +4,56 @@
 
 library fasta.forest;
 
+// TODO(ahe): Remove this import.
+import 'package:kernel/ast.dart' as kernel show Arguments;
+
 /// A tree factory.
-abstract class Forest<Expression, Statement> {
-  Expression literalInt(int value, int offset);
+abstract class Forest<Expression, Statement, Location, Arguments> {
+  Arguments arguments(List<Expression> positional, Location location,
+      {covariant List types, covariant List named});
+
+  Arguments argumentsEmpty(Location location);
+
+  List argumentsNamed(Arguments arguments);
+
+  List<Expression> argumentsPositional(Arguments arguments);
+
+  List argumentsTypes(Arguments arguments);
+
+  void argumentsSetExplicitArgumentTypes(
+      Arguments arguments, covariant List types);
+
+  Expression asLiteralString(Expression value);
+
+  Expression literalBool(bool value, Location location);
+
+  Expression literalDouble(double value, Location location);
+
+  Expression literalInt(int value, Location location);
+
+  Expression literalList(covariant typeArgument, List<Expression> expressions,
+      bool isConst, Location location);
+
+  Expression literalMap(covariant keyType, covariant valueType,
+      covariant List entries, bool isConst, Location location);
+
+  Expression literalNull(Location location);
+
+  Expression literalString(String value, Location location);
+
+  Expression literalSymbol(String value, Location location);
+
+  Expression literalType(covariant type, Location location);
+
+  Object mapEntry(Expression key, Expression value, Location location);
+
+  List mapEntryList(int length);
+
+  int readOffset(covariant node);
+
+  // TODO(ahe): Remove this method when all users are moved here.
+  kernel.Arguments castArguments(Arguments arguments) {
+    dynamic a = arguments;
+    return a;
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
index bc25472..7bbec74 100644
--- a/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
@@ -11,6 +11,8 @@
 
 import '../names.dart' show equalsName, indexGetName, indexSetName;
 
+import '../parser.dart' show offsetForToken;
+
 import '../problems.dart' show unhandled;
 
 import 'fasta_accessors.dart' show BuilderHelper;
@@ -33,8 +35,6 @@
         ShadowVariableDeclaration,
         ShadowVariableGet;
 
-import 'utils.dart' show offsetForToken;
-
 /// An [Accessor] represents a subexpression for which we can't yet build a
 /// kernel [Expression] because we don't yet know the context in which it is
 /// used.
@@ -47,7 +47,7 @@
 /// generate an invocation of `operator[]` or `operator[]=`, so we generate an
 /// [Accessor] object.  Later, after `= b` is parsed, [buildAssignment] will be
 /// called.
-abstract class Accessor {
+abstract class Accessor<Arguments> {
   final BuilderHelper helper;
   final Token token;
 
@@ -198,7 +198,7 @@
       new ShadowIllegalAssignment(rhs);
 }
 
-abstract class VariableAccessor extends Accessor {
+abstract class VariableAccessor<Arguments> extends Accessor<Arguments> {
   VariableDeclaration variable;
   DartType promotedType;
 
@@ -228,7 +228,7 @@
   }
 }
 
-class PropertyAccessor extends Accessor {
+class PropertyAccessor<Arguments> extends Accessor<Arguments> {
   VariableDeclaration _receiverVariable;
   Expression receiver;
   Name name;
@@ -289,7 +289,7 @@
 
 /// Special case of [PropertyAccessor] to avoid creating an indirect access to
 /// 'this'.
-class ThisPropertyAccessor extends Accessor {
+class ThisPropertyAccessor<Arguments> extends Accessor<Arguments> {
   Name name;
   Member getter, setter;
 
@@ -319,7 +319,7 @@
   }
 }
 
-class NullAwarePropertyAccessor extends Accessor {
+class NullAwarePropertyAccessor<Arguments> extends Accessor<Arguments> {
   VariableDeclaration receiver;
   Expression receiverExpression;
   Name name;
@@ -367,7 +367,7 @@
   }
 }
 
-class SuperPropertyAccessor extends Accessor {
+class SuperPropertyAccessor<Arguments> extends Accessor<Arguments> {
   Name name;
   Member getter, setter;
 
@@ -399,7 +399,7 @@
   }
 }
 
-class IndexAccessor extends Accessor {
+class IndexAccessor<Arguments> extends Accessor<Arguments> {
   Expression receiver;
   Expression index;
   VariableDeclaration receiverVariable;
@@ -504,7 +504,7 @@
 
 /// Special case of [IndexAccessor] to avoid creating an indirect access to
 /// 'this'.
-class ThisIndexAccessor extends Accessor {
+class ThisIndexAccessor<Arguments> extends Accessor<Arguments> {
   Expression index;
   VariableDeclaration indexVariable;
   Procedure getter, setter;
@@ -578,7 +578,7 @@
   }
 }
 
-class SuperIndexAccessor extends Accessor {
+class SuperIndexAccessor<Arguments> extends Accessor<Arguments> {
   Expression index;
   VariableDeclaration indexVariable;
   Member getter, setter;
@@ -668,7 +668,7 @@
   }
 }
 
-class StaticAccessor extends Accessor {
+class StaticAccessor<Arguments> extends Accessor<Arguments> {
   Member readTarget;
   Member writeTarget;
 
@@ -700,7 +700,7 @@
   }
 }
 
-abstract class LoadLibraryAccessor extends Accessor {
+abstract class LoadLibraryAccessor<Arguments> extends Accessor<Arguments> {
   final LoadLibraryBuilder builder;
 
   LoadLibraryAccessor(BuilderHelper helper, Token token, this.builder)
@@ -720,7 +720,7 @@
   }
 }
 
-abstract class DeferredAccessor extends Accessor {
+abstract class DeferredAccessor<Arguments> extends Accessor<Arguments> {
   final PrefixBuilder builder;
   final Accessor accessor;
 
@@ -747,7 +747,7 @@
   }
 }
 
-class ReadOnlyAccessor extends Accessor {
+class ReadOnlyAccessor<Arguments> extends Accessor<Arguments> {
   Expression expression;
   VariableDeclaration value;
 
@@ -773,7 +773,7 @@
       super._finish(makeLet(value, body), complexAssignment);
 }
 
-abstract class DelayedErrorAccessor extends Accessor {
+abstract class DelayedErrorAccessor<Arguments> extends Accessor<Arguments> {
   DelayedErrorAccessor(BuilderHelper helper, Token token)
       : super(helper, token);
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
index 472ab0b..c340ea7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
@@ -8,7 +8,6 @@
 
 export 'package:kernel/ast.dart'
     show
-        Arguments,
         AssertStatement,
         AsyncMarker,
         Block,
@@ -35,13 +34,11 @@
         Let,
         Library,
         Location,
-        MapEntry,
         Member,
         MethodInvocation,
         Name,
         NamedExpression,
         NamedType,
-        NullLiteral,
         Procedure,
         ProcedureKind,
         Rethrow,
@@ -49,7 +46,6 @@
         Statement,
         StaticGet,
         StringConcatenation,
-        StringLiteral,
         SuperInitializer,
         SwitchCase,
         ThisExpression,
@@ -64,13 +60,11 @@
 
 export 'kernel_shadow_ast.dart'
     show
-        ShadowArguments,
         ShadowAsExpression,
         ShadowAssertInitializer,
         ShadowAssertStatement,
         ShadowAwaitExpression,
         ShadowBlock,
-        ShadowBoolLiteral,
         ShadowBreakStatement,
         ShadowCascadeExpression,
         ShadowComplexAssignment,
@@ -79,7 +73,6 @@
         ShadowContinueSwitchStatement,
         ShadowDeferredCheck,
         ShadowDoStatement,
-        ShadowDoubleLiteral,
         ShadowExpressionStatement,
         ShadowFactoryConstructorInvocation,
         ShadowFieldInitializer,
@@ -95,15 +88,12 @@
         ShadowIsExpression,
         ShadowIsNotExpression,
         ShadowLabeledStatement,
-        ShadowListLiteral,
         ShadowLogicalExpression,
         ShadowLoopAssignmentStatement,
-        ShadowMapLiteral,
         ShadowMethodInvocation,
         ShadowNamedFunctionExpression,
         ShadowNot,
         ShadowNullAwareMethodInvocation,
-        ShadowNullLiteral,
         ShadowPropertyAssign,
         ShadowRedirectingInitializer,
         ShadowRethrow,
@@ -112,18 +102,15 @@
         ShadowStaticGet,
         ShadowStaticInvocation,
         ShadowStringConcatenation,
-        ShadowStringLiteral,
         ShadowSuperInitializer,
         ShadowSuperMethodInvocation,
         ShadowSuperPropertyGet,
         ShadowSwitchStatement,
-        ShadowSymbolLiteral,
         ShadowSyntheticExpression,
         ShadowThisExpression,
         ShadowThrow,
         ShadowTryCatch,
         ShadowTryFinally,
-        ShadowTypeLiteral,
         ShadowVariableAssignment,
         ShadowVariableDeclaration,
         ShadowVariableGet,
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 4bcc0c7..d542d10 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
@@ -50,6 +50,8 @@
         templateOverrideTypeVariablesMismatch,
         templateRedirectionTargetNotFound;
 
+import '../parser.dart' show noLength;
+
 import '../problems.dart' show unexpected, unhandled, unimplemented;
 
 import '../type_inference/type_schema.dart' show UnknownType;
@@ -208,9 +210,9 @@
               var message = templateRedirectionTargetNotFound
                   .withArguments(redirectionTarget.fullNameForErrors);
               if (builder.isConst) {
-                addCompileTimeError(message, builder.charOffset);
+                addCompileTimeError(message, builder.charOffset, noLength);
               } else {
-                addProblem(message, builder.charOffset);
+                addProblem(message, builder.charOffset, noLength);
               }
               // CoreTypes aren't computed yet, and this is the outline
               // phase. So we can't and shouldn't create a method body.
@@ -310,10 +312,11 @@
               "${interfaceMember.enclosingClass.name}::"
               "${interfaceMember.name.name}"),
           declaredMember.fileOffset,
+          noLength,
           context: templateOverriddenMethodCause
               .withArguments(interfaceMember.name.name)
-              .withLocation(
-                  _getMemberUri(interfaceMember), interfaceMember.fileOffset));
+              .withLocation(_getMemberUri(interfaceMember),
+                  interfaceMember.fileOffset, noLength));
     } else if (library.loader.target.backendTarget.strongMode &&
         declaredFunction?.typeParameters != null) {
       var substitution = <TypeParameter, DartType>{};
@@ -372,11 +375,11 @@
             interfaceType);
         fileOffset = declaredParameter.fileOffset;
       }
-      library.addCompileTimeError(message, fileOffset, fileUri,
+      library.addCompileTimeError(message, fileOffset, noLength, fileUri,
           context: templateOverriddenMethodCause
               .withArguments(interfaceMember.name.name)
-              .withLocation(
-                  _getMemberUri(interfaceMember), interfaceMember.fileOffset));
+              .withLocation(_getMemberUri(interfaceMember),
+                  interfaceMember.fileOffset, noLength));
       return true;
     }
     return false;
@@ -423,10 +426,11 @@
               "${interfaceMember.enclosingClass.name}::"
               "${interfaceMember.name.name}"),
           declaredMember.fileOffset,
+          noLength,
           context: templateOverriddenMethodCause
               .withArguments(interfaceMember.name.name)
-              .withLocation(
-                  interfaceMember.fileUri, interfaceMember.fileOffset));
+              .withLocation(interfaceMember.fileUri, interfaceMember.fileOffset,
+                  noLength));
     }
     if (interfaceFunction.requiredParameterCount <
         declaredFunction.requiredParameterCount) {
@@ -436,10 +440,11 @@
               "${interfaceMember.enclosingClass.name}::"
               "${interfaceMember.name.name}"),
           declaredMember.fileOffset,
+          noLength,
           context: templateOverriddenMethodCause
               .withArguments(interfaceMember.name.name)
-              .withLocation(
-                  interfaceMember.fileUri, interfaceMember.fileOffset));
+              .withLocation(interfaceMember.fileUri, interfaceMember.fileOffset,
+                  noLength));
     }
     for (int i = 0;
         i < declaredFunction.positionalParameters.length &&
@@ -468,15 +473,26 @@
               "${interfaceMember.enclosingClass.name}::"
               "${interfaceMember.name.name}"),
           declaredMember.fileOffset,
+          noLength,
           context: templateOverriddenMethodCause
               .withArguments(interfaceMember.name.name)
-              .withLocation(
-                  interfaceMember.fileUri, interfaceMember.fileOffset));
+              .withLocation(interfaceMember.fileUri, interfaceMember.fileOffset,
+                  noLength));
     }
+    int compareNamedParameters(VariableDeclaration p0, VariableDeclaration p1) {
+      return p0.name.compareTo(p1.name);
+    }
+
+    List<VariableDeclaration> sortedFromDeclared =
+        new List.from(declaredFunction.namedParameters)
+          ..sort(compareNamedParameters);
+    List<VariableDeclaration> sortedFromInterface =
+        new List.from(interfaceFunction.namedParameters)
+          ..sort(compareNamedParameters);
     Iterator<VariableDeclaration> declaredNamedParameters =
-        declaredFunction.namedParameters.iterator;
+        sortedFromDeclared.iterator;
     Iterator<VariableDeclaration> interfaceNamedParameters =
-        interfaceFunction.namedParameters.iterator;
+        sortedFromInterface.iterator;
     outer:
     while (declaredNamedParameters.moveNext() &&
         interfaceNamedParameters.moveNext()) {
@@ -490,10 +506,11 @@
                   "${interfaceMember.enclosingClass.name}::"
                   "${interfaceMember.name.name}"),
               declaredMember.fileOffset,
+              noLength,
               context: templateOverriddenMethodCause
                   .withArguments(interfaceMember.name.name)
-                  .withLocation(
-                      interfaceMember.fileUri, interfaceMember.fileOffset));
+                  .withLocation(interfaceMember.fileUri,
+                      interfaceMember.fileOffset, noLength));
           break outer;
         }
       }
@@ -589,8 +606,9 @@
       int patchLength = patch.typeVariables?.length ?? 0;
       if (originLength != patchLength) {
         patch.addCompileTimeError(
-            messagePatchClassTypeVariablesMismatch, patch.charOffset,
-            context: messagePatchClassOrigin.withLocation(fileUri, charOffset));
+            messagePatchClassTypeVariablesMismatch, patch.charOffset, noLength,
+            context: messagePatchClassOrigin.withLocation(
+                fileUri, charOffset, noLength));
       } else if (typeVariables != null) {
         int count = 0;
         for (KernelTypeVariableBuilder t in patch.typeVariables) {
@@ -598,10 +616,10 @@
         }
       }
     } else {
-      library.addCompileTimeError(
-          messagePatchDeclarationMismatch, patch.charOffset, patch.fileUri,
-          context:
-              messagePatchDeclarationOrigin.withLocation(fileUri, charOffset));
+      library.addCompileTimeError(messagePatchDeclarationMismatch,
+          patch.charOffset, noLength, patch.fileUri,
+          context: messagePatchDeclarationOrigin.withLocation(
+              fileUri, charOffset, noLength));
     }
   }
 
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 a97e69a..b915987 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
@@ -37,6 +37,8 @@
 
 import '../modifier.dart' show constMask, finalMask, staticMask;
 
+import '../parser.dart' show noLength;
+
 import '../source/source_class_builder.dart' show SourceClassBuilder;
 
 import 'kernel_builder.dart'
@@ -164,7 +166,7 @@
       String documentationComment = constantNamesAndOffsetsAndDocs[i + 2];
       if (members.containsKey(name)) {
         parent.addCompileTimeError(templateDuplicatedName.withArguments(name),
-            charOffset, parent.fileUri);
+            charOffset, noLength, parent.fileUri);
         constantNamesAndOffsetsAndDocs[i] = null;
         continue;
       }
@@ -172,6 +174,7 @@
         parent.addCompileTimeError(
             templateEnumConstantSameNameAsEnclosing.withArguments(name),
             charOffset,
+            noLength,
             parent.fileUri);
         constantNamesAndOffsetsAndDocs[i] = null;
         continue;
@@ -264,7 +267,7 @@
       // unnamed constructor requires no arguments. But that information isn't
       // always available at this point, and it's not really a situation that
       // can happen unless you start modifying the SDK sources.
-      addCompileTimeError(messageNoUnnamedConstructorInObject, -1);
+      addCompileTimeError(messageNoUnnamedConstructorInObject, -1, noLength);
     } else {
       constructor.initializers.add(
           new SuperInitializer(superConstructor.target, new Arguments.empty())
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 6cd24dd..044e692 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,6 +15,8 @@
 
 import 'package:kernel/type_algebra.dart' show substitute;
 
+import '../parser.dart' show noLength;
+
 import '../fasta_codes.dart' show templateCyclicTypedef;
 
 import 'kernel_builder.dart'
@@ -58,8 +60,8 @@
   DartType buildThisType(LibraryBuilder library) {
     if (thisType != null) {
       if (const InvalidType() == thisType) {
-        library.addCompileTimeError(
-            templateCyclicTypedef.withArguments(name), charOffset, fileUri);
+        library.addCompileTimeError(templateCyclicTypedef.withArguments(name),
+            charOffset, noLength, fileUri);
         return const DynamicType();
       }
       return thisType;
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 a3424b3..63a43ad 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
@@ -15,6 +15,8 @@
 
 import '../fasta_codes.dart' show messageSupertypeIsFunction;
 
+import '../parser.dart' show noLength;
+
 import '../problems.dart' show unsupported;
 
 import 'kernel_builder.dart'
@@ -76,7 +78,7 @@
   Supertype buildSupertype(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     library.addCompileTimeError(
-        messageSupertypeIsFunction, charOffset, fileUri);
+        messageSupertypeIsFunction, charOffset, noLength, fileUri);
     return null;
   }
 
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 68c8f62..dffdd01 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
@@ -8,6 +8,8 @@
 
 import '../fasta_codes.dart' show LocatedMessage, Message, templateTypeNotFound;
 
+import '../parser.dart' show noLength;
+
 import 'kernel_builder.dart'
     show InvalidTypeBuilder, KernelTypeBuilder, LibraryBuilder;
 
@@ -19,7 +21,7 @@
   KernelInvalidTypeBuilder(String name, int charOffset, Uri fileUri,
       [Message message])
       : message = (message ?? templateTypeNotFound.withArguments(name))
-            .withLocation(fileUri, charOffset),
+            .withLocation(fileUri, charOffset, noLength),
         super(name, charOffset, fileUri);
 
   DartType buildType(
@@ -30,7 +32,8 @@
   /// [Arguments] have already been built.
   DartType buildTypesWithBuiltArguments(
       LibraryBuilder library, List<DartType> arguments) {
-    library.addProblem(message.messageObject, message.charOffset, message.uri);
+    library.addProblem(
+        message.messageObject, message.charOffset, message.length, message.uri);
     return const InvalidType();
   }
 }
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 2a04c1e..78bc875 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
@@ -6,12 +6,12 @@
 
 import 'dart:convert' show JSON;
 
-import 'package:front_end/src/fasta/export.dart';
-import 'package:front_end/src/fasta/import.dart';
 import 'package:kernel/ast.dart';
 
 import '../../scanner/token.dart' show Token;
 
+import '../export.dart' show Export;
+
 import '../fasta_codes.dart'
     show
         Message,
@@ -24,7 +24,6 @@
         templateDuplicatedImport,
         templateDuplicatedImportInType,
         templateExportHidesExport,
-        templateIllegalMethodName,
         templateImportHidesImport,
         templateLoadLibraryHidesMember,
         templateLocalDefinitionHidesExport,
@@ -32,11 +31,15 @@
         templatePatchInjectionFailed,
         templateTypeVariableDuplicatedNameCause;
 
+import '../import.dart' show Import;
+
 import '../loader.dart' show Loader;
 
 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,7 +78,6 @@
         NamedTypeBuilder,
         PrefixBuilder,
         ProcedureBuilder,
-        QualifiedName,
         Scope,
         TypeBuilder,
         TypeVariableBuilder,
@@ -203,9 +205,10 @@
         if (tv != null) {
           cls.addCompileTimeError(
               templateConflictsWithTypeVariable.withArguments(name),
-              member.charOffset);
-          cls.addCompileTimeError(
-              messageConflictsWithTypeVariableCause, tv.charOffset);
+              member.charOffset,
+              name.length,
+              context: messageConflictsWithTypeVariableCause.withLocation(
+                  tv.fileUri, tv.charOffset, name.length));
         }
       }
       setParent(name, member);
@@ -227,20 +230,20 @@
     for (TypeVariableBuilder tv in typeVariables) {
       TypeVariableBuilder existing = typeVariablesByName[tv.name];
       if (existing != null) {
-        addCompileTimeError(
-            messageTypeVariableDuplicatedName, tv.charOffset, fileUri);
-        addCompileTimeError(
-            templateTypeVariableDuplicatedNameCause.withArguments(tv.name),
-            existing.charOffset,
-            fileUri);
+        addCompileTimeError(messageTypeVariableDuplicatedName, tv.charOffset,
+            tv.name.length, fileUri,
+            context: templateTypeVariableDuplicatedNameCause
+                .withArguments(tv.name)
+                .withLocation(
+                    fileUri, existing.charOffset, existing.name.length));
       } else {
         typeVariablesByName[tv.name] = tv;
         if (owner is ClassBuilder) {
           // Only classes and type variables can't have the same name. See
           // [#29555](https://github.com/dart-lang/sdk/issues/29555).
           if (tv.name == owner.name) {
-            addCompileTimeError(
-                messageTypeVariableSameNameAsEnclosing, tv.charOffset, fileUri);
+            addCompileTimeError(messageTypeVariableSameNameAsEnclosing,
+                tv.charOffset, tv.name.length, fileUri);
           }
         }
       }
@@ -554,29 +557,40 @@
         ?.setDocumentationComment(builder.target, documentationComment);
   }
 
-  String computeAndValidateConstructorName(Object name, int charOffset) {
-    String className = currentDeclaration.name;
-    String prefix;
-    String suffix;
-    if (name is QualifiedName) {
-      prefix = name.prefix;
-      suffix = name.suffix;
-    } else {
-      prefix = name;
-      suffix = null;
-    }
-    if (prefix == className) {
-      return suffix ?? "";
-    }
-    if (suffix == null) {
-      // A legal name for a regular method, but not for a constructor.
-      return null;
-    }
-    addCompileTimeError(
-        templateIllegalMethodName.withArguments("$name", "$className.$suffix"),
+  void addConstructor(
+      String documentationComment,
+      List<MetadataBuilder> metadata,
+      int modifiers,
+      KernelTypeBuilder returnType,
+      final Object name,
+      String constructorName,
+      List<TypeVariableBuilder> typeVariables,
+      List<FormalParameterBuilder> formals,
+      int charOffset,
+      int charOpenParenOffset,
+      int charEndOffset,
+      String nativeMethodName) {
+    MetadataCollector metadataCollector = loader.target.metadataCollector;
+    ProcedureBuilder procedure = new KernelConstructorBuilder(
+        metadata,
+        modifiers & ~abstractMask,
+        returnType,
+        constructorName,
+        typeVariables,
+        formals,
+        this,
         charOffset,
-        fileUri);
-    return suffix;
+        charOpenParenOffset,
+        charEndOffset,
+        nativeMethodName);
+    metadataCollector?.setDocumentationComment(
+        procedure.target, documentationComment);
+    metadataCollector?.setConstructorNameOffset(procedure.target, name);
+    checkTypeVariables(typeVariables, procedure);
+    addBuilder(constructorName, procedure, charOffset);
+    if (nativeMethodName != null) {
+      addNativeMethod(procedure);
+    }
   }
 
   void addProcedure(
@@ -584,7 +598,7 @@
       List<MetadataBuilder> metadata,
       int modifiers,
       KernelTypeBuilder returnType,
-      final Object name,
+      String name,
       List<TypeVariableBuilder> typeVariables,
       List<FormalParameterBuilder> formals,
       ProcedureKind kind,
@@ -593,55 +607,24 @@
       int charEndOffset,
       String nativeMethodName,
       {bool isTopLevel}) {
-    // Nested declaration began in `OutlineBuilder.beginMethod` or
-    // `OutlineBuilder.beginTopLevelMethod`.
-    endNestedDeclaration("#method").resolveTypes(typeVariables, this);
-    String procedureName;
-    ProcedureBuilder procedure;
     MetadataCollector metadataCollector = loader.target.metadataCollector;
-    String constructorName = isTopLevel ||
-            kind == ProcedureKind.Getter ||
-            kind == ProcedureKind.Setter
-        ? null
-        : computeAndValidateConstructorName(name, charOffset);
-    if (constructorName != null) {
-      procedureName = constructorName;
-      procedure = new KernelConstructorBuilder(
-          metadata,
-          modifiers & ~abstractMask,
-          returnType,
-          constructorName,
-          typeVariables,
-          formals,
-          this,
-          charOffset,
-          charOpenParenOffset,
-          charEndOffset,
-          nativeMethodName);
-      metadataCollector?.setDocumentationComment(
-          procedure.target, documentationComment);
-      metadataCollector?.setConstructorNameOffset(procedure.target, name);
-    } else {
-      assert(name is String);
-      procedureName = name;
-      procedure = new KernelProcedureBuilder(
-          metadata,
-          modifiers,
-          returnType,
-          name,
-          typeVariables,
-          formals,
-          kind,
-          this,
-          charOffset,
-          charOpenParenOffset,
-          charEndOffset,
-          nativeMethodName);
-      metadataCollector?.setDocumentationComment(
-          procedure.target, documentationComment);
-    }
+    ProcedureBuilder procedure = new KernelProcedureBuilder(
+        metadata,
+        modifiers,
+        returnType,
+        name,
+        typeVariables,
+        formals,
+        kind,
+        this,
+        charOffset,
+        charOpenParenOffset,
+        charEndOffset,
+        nativeMethodName);
+    metadataCollector?.setDocumentationComment(
+        procedure.target, documentationComment);
     checkTypeVariables(typeVariables, procedure);
-    addBuilder(procedureName, procedure, charOffset);
+    addBuilder(name, procedure, charOffset);
     if (nativeMethodName != null) {
       addNativeMethod(procedure);
     }
@@ -981,16 +964,16 @@
         var template = isExport
             ? templateLocalDefinitionHidesExport
             : templateLocalDefinitionHidesImport;
-        addProblem(
-            template.withArguments(name, hiddenUri), charOffset, fileUri);
+        addProblem(template.withArguments(name, hiddenUri), charOffset,
+            noLength, fileUri);
       } else if (isLoadLibrary) {
         addProblem(templateLoadLibraryHidesMember.withArguments(preferredUri),
-            charOffset, fileUri);
+            charOffset, noLength, fileUri);
       } else {
         var template =
             isExport ? templateExportHidesExport : templateImportHidesImport;
         addProblem(template.withArguments(name, preferredUri, hiddenUri),
-            charOffset, fileUri);
+            charOffset, noLength, fileUri);
       }
       return preferred;
     }
@@ -1009,7 +992,7 @@
     var template =
         isExport ? templateDuplicatedExport : templateDuplicatedImport;
     Message message = template.withArguments(name, uri, otherUri);
-    addProblem(message, charOffset, fileUri);
+    addProblem(message, charOffset, noLength, fileUri);
     var builderTemplate = isExport
         ? templateDuplicatedExportInType
         : templateDuplicatedImportInType;
@@ -1183,7 +1166,7 @@
   void exportMemberFromPatch(String name, Builder member) {
     if (uri.scheme != "dart" || !uri.path.startsWith("_")) {
       addCompileTimeError(templatePatchInjectionFailed.withArguments(name, uri),
-          member.charOffset, member.fileUri);
+          member.charOffset, noLength, member.fileUri);
     }
     // Platform-private libraries, such as "dart:_internal" have special
     // semantics: public members are injected into the origin library.
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 ced686f..299756e 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
@@ -9,6 +9,8 @@
 import '../messages.dart'
     show templateSupertypeIsIllegal, templateSupertypeIsTypeVariable;
 
+import '../parser.dart' show noLength;
+
 import 'kernel_builder.dart'
     show
         KernelClassBuilder,
@@ -37,7 +39,7 @@
         ? templateSupertypeIsTypeVariable
         : templateSupertypeIsIllegal;
     library.addCompileTimeError(
-        template.withArguments("$name"), charOffset, fileUri);
+        template.withArguments("$name"), charOffset, noLength, fileUri);
     return null;
   }
 
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 fabb3ee..2f12afa 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
@@ -45,13 +45,14 @@
 
 import '../messages.dart'
     show
-        messageConstConstructorWithBody,
         messageInternalProblemBodyOnAbstractMethod,
         messageNonInstanceTypeVariableUse,
         messagePatchDeclarationMismatch,
         messagePatchDeclarationOrigin,
         messagePatchNonExternal;
 
+import '../parser.dart' show noLength;
+
 import '../problems.dart' show internalProblem, unexpected;
 
 import '../deprecated_problems.dart' show deprecated_inputError;
@@ -107,10 +108,6 @@
         return internalProblem(messageInternalProblemBodyOnAbstractMethod,
             newBody.fileOffset, fileUri);
       }
-      if (isConstructor && isConst) {
-        return library.addCompileTimeError(
-            messageConstConstructorWithBody, newBody.fileOffset, fileUri);
-      }
     }
     actualBody = newBody;
     if (function != null) {
@@ -194,7 +191,7 @@
             }
           }
           library.addProblem(
-              messageNonInstanceTypeVariableUse, charOffset, fileUri);
+              messageNonInstanceTypeVariableUse, charOffset, noLength, fileUri);
           return substitute(type, substitution);
         }
 
@@ -237,19 +234,19 @@
   bool checkPatch(KernelFunctionBuilder patch) {
     if (!isExternal) {
       patch.library.addCompileTimeError(
-          messagePatchNonExternal, patch.charOffset, patch.fileUri,
-          context:
-              messagePatchDeclarationOrigin.withLocation(fileUri, charOffset));
+          messagePatchNonExternal, patch.charOffset, noLength, patch.fileUri,
+          context: messagePatchDeclarationOrigin.withLocation(
+              fileUri, charOffset, noLength));
       return false;
     }
     return true;
   }
 
   void reportPatchMismatch(Builder patch) {
-    library.addCompileTimeError(
-        messagePatchDeclarationMismatch, patch.charOffset, patch.fileUri,
-        context:
-            messagePatchDeclarationOrigin.withLocation(fileUri, charOffset));
+    library.addCompileTimeError(messagePatchDeclarationMismatch,
+        patch.charOffset, noLength, patch.fileUri,
+        context: messagePatchDeclarationOrigin.withLocation(
+            fileUri, charOffset, noLength));
   }
 }
 
@@ -618,6 +615,7 @@
   @override
   Procedure build(SourceLibraryBuilder library) {
     Procedure result = super.build(library);
+    result.isRedirectingFactoryConstructor = true;
     if (redirectionTarget.typeArguments != null) {
       typeArguments =
           new List<DartType>(redirectionTarget.typeArguments.length);
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 9ae28c9..af03b4f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -58,6 +58,8 @@
         messageConstConstructorNonFinalFieldCause,
         templateSuperclassHasNoDefaultConstructor;
 
+import '../parser.dart' show noLength;
+
 import '../problems.dart' show unhandled;
 
 import '../severity.dart' show Severity;
@@ -613,7 +615,8 @@
             builder.addCompileTimeError(
                 templateSuperclassHasNoDefaultConstructor
                     .withArguments(cls.superclass.name),
-                constructor.fileOffset);
+                constructor.fileOffset,
+                noLength);
             initializer = new InvalidInitializer();
           } else {
             initializer =
@@ -638,11 +641,15 @@
         }
         fieldInitializers[constructor] = myFieldInitializers;
         if (constructor.isConst && nonFinalFields.isNotEmpty) {
-          builder.addCompileTimeError(
-              messageConstConstructorNonFinalField, constructor.fileOffset);
+          builder.addCompileTimeError(messageConstConstructorNonFinalField,
+              constructor.fileOffset, noLength);
+          // TODO(askesc): Put as context argument when multiple contexts
+          // are supported.
           for (Field field in nonFinalFields) {
             builder.addCompileTimeError(
-                messageConstConstructorNonFinalFieldCause, field.fileOffset);
+                messageConstConstructorNonFinalFieldCause,
+                field.fileOffset,
+                noLength);
           }
           nonFinalFields.clear();
         }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
index db58c93..00ef2e1 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
@@ -49,6 +49,7 @@
       library.addProblem(
           templateTypeArgumentsOnTypeVariable.withArguments(name),
           charOffset,
+          name.length,
           fileUri);
     }
     return new TypeParameterType(parameter);
diff --git a/pkg/front_end/lib/src/fasta/kernel/utils.dart b/pkg/front_end/lib/src/fasta/kernel/utils.dart
index cb00003..4a9bd7f0 100644
--- a/pkg/front_end/lib/src/fasta/kernel/utils.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart
@@ -2,19 +2,18 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:async';
-import 'dart:io';
+import 'dart:async' show Future;
 
-import 'package:front_end/src/scanner/token.dart' show Token;
-import 'package:kernel/ast.dart';
-import 'package:kernel/binary/ast_to_binary.dart';
-import 'package:kernel/binary/limited_ast_to_binary.dart';
-import 'package:kernel/text/ast_to_text.dart';
+import 'dart:io' show BytesBuilder, File, IOSink;
 
-/// A null-aware alternative to `token.offset`.  If [token] is `null`, returns
-/// `TreeNode.noOffset`.
-int offsetForToken(Token token) =>
-    token == null ? TreeNode.noOffset : token.offset;
+import 'package:kernel/ast.dart' show Library, Program;
+
+import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter;
+
+import 'package:kernel/binary/limited_ast_to_binary.dart'
+    show LimitedBinaryPrinter;
+
+import 'package:kernel/text/ast_to_text.dart' show Printer;
 
 /// Print the given [program].  Do nothing if it is `null`.  If the
 /// [libraryFilter] is provided, then only libraries that satisfy it are
diff --git a/pkg/front_end/lib/src/fasta/kernel/verifier.dart b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
index 5473540..045c9f3 100644
--- a/pkg/front_end/lib/src/fasta/kernel/verifier.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
@@ -30,6 +30,8 @@
 import '../fasta_codes.dart'
     show LocatedMessage, templateInternalVerificationError;
 
+import '../parser.dart' show noLength;
+
 import '../severity.dart' show Severity;
 
 import '../type_inference/type_schema.dart' show TypeSchemaVisitor, UnknownType;
@@ -105,7 +107,7 @@
     Uri uri = file == null ? null : file;
     LocatedMessage message = templateInternalVerificationError
         .withArguments(details)
-        .withLocation(uri, offset);
+        .withLocation(uri, offset, noLength);
     CompilerContext.current.report(message, Severity.error);
     errors.add(message);
   }
diff --git a/pkg/front_end/lib/src/fasta/loader.dart b/pkg/front_end/lib/src/fasta/loader.dart
index 6bba731..ad04feb 100644
--- a/pkg/front_end/lib/src/fasta/loader.dart
+++ b/pkg/front_end/lib/src/fasta/loader.dart
@@ -22,6 +22,8 @@
         templateInternalProblemMissingSeverity,
         templateSourceBodySummary;
 
+import 'parser.dart' show noLength;
+
 import 'problems.dart' show internalProblem;
 
 import 'severity.dart' show Severity;
@@ -135,8 +137,8 @@
         !accessor.isPatch &&
         !target.backendTarget
             .allowPlatformPrivateLibraryAccess(accessor.uri, uri)) {
-      accessor.addCompileTimeError(
-          messagePlatformPrivateLibraryAccess, charOffset, accessor.fileUri);
+      accessor.addCompileTimeError(messagePlatformPrivateLibraryAccess,
+          charOffset, noLength, accessor.fileUri);
     }
     return builder;
   }
@@ -198,19 +200,20 @@
   ///
   /// If [wasHandled] is true, this error is added to [handledErrors],
   /// otherwise it is added to [unhandledErrors].
-  void addCompileTimeError(Message message, int charOffset, Uri fileUri,
+  void addCompileTimeError(
+      Message message, int charOffset, int length, Uri fileUri,
       {bool wasHandled: false, LocatedMessage context}) {
-    addMessage(message, charOffset, fileUri, Severity.error,
+    addMessage(message, charOffset, length, fileUri, Severity.error,
         wasHandled: wasHandled, context: context);
   }
 
   /// Register [message] as a problem with a severity determined by the
   /// intrinsic severity of the message.
-  void addProblem(Message message, int charOffset, Uri fileUri,
+  void addProblem(Message message, int charOffset, int length, Uri fileUri,
       {LocatedMessage context}) {
     Severity severity = message.code.severity;
     if (severity == null) {
-      addMessage(message, charOffset, fileUri, Severity.error,
+      addMessage(message, charOffset, length, fileUri, Severity.error,
           context: context);
       internalProblem(
           templateInternalProblemMissingSeverity
@@ -222,7 +225,8 @@
       severity =
           target.backendTarget.strongMode ? Severity.error : Severity.warning;
     }
-    addMessage(message, charOffset, fileUri, severity, context: context);
+    addMessage(message, charOffset, length, fileUri, severity,
+        context: context);
   }
 
   /// All messages reported by the compiler (errors, warnings, etc.) are routed
@@ -231,8 +235,8 @@
   /// Returns true if the message is new, that is, not previously
   /// reported. This is important as some parser errors may be reported up to
   /// three times by `OutlineBuilder`, `DietListener`, and `BodyBuilder`.
-  bool addMessage(
-      Message message, int charOffset, Uri fileUri, Severity severity,
+  bool addMessage(Message message, int charOffset, int length, Uri fileUri,
+      Severity severity,
       {bool wasHandled: false, LocatedMessage context}) {
     String trace = """
 message: ${message.message}
@@ -241,14 +245,16 @@
 severity: $severity
 """;
     if (!seenMessages.add(trace)) return false;
-    target.context.report(message.withLocation(fileUri, charOffset), severity);
+    target.context
+        .report(message.withLocation(fileUri, charOffset, length), severity);
     if (context != null) {
-      target.context.report(context, severity);
+      target.context.report(context, Severity.context);
     }
-    recordMessage(severity, message, charOffset, fileUri, context: context);
+    recordMessage(severity, message, charOffset, length, fileUri,
+        context: context);
     if (severity == Severity.error) {
       (wasHandled ? handledErrors : unhandledErrors)
-          .add(message.withLocation(fileUri, charOffset));
+          .add(message.withLocation(fileUri, charOffset, length));
     }
     return true;
   }
@@ -265,8 +271,8 @@
 
   Builder getNativeAnnotation() => target.getNativeAnnotation(this);
 
-  void recordMessage(
-      Severity severity, Message message, int charOffset, Uri fileUri,
+  void recordMessage(Severity severity, Message message, int charOffset,
+      int length, Uri fileUri,
       {LocatedMessage context}) {}
 }
 
diff --git a/pkg/front_end/lib/src/fasta/parser.dart b/pkg/front_end/lib/src/fasta/parser.dart
index b59b8a3..8419609 100644
--- a/pkg/front_end/lib/src/fasta/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser.dart
@@ -30,7 +30,14 @@
 
 export 'parser/top_level_parser.dart' show TopLevelParser;
 
-export 'parser/util.dart' show closeBraceTokenFor, optional;
+export 'parser/util.dart'
+    show
+        closeBraceTokenFor,
+        lengthForToken,
+        lengthOfSpan,
+        noLength,
+        offsetForToken,
+        optional;
 
 List<ParserError> parse(Token tokens) {
   Listener listener = new Listener();
diff --git a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
index 04095bd..d60e675 100644
--- a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
@@ -281,8 +281,10 @@
   }
 
   @override
-  void beginMethod() {
-    listener?.beginMethod();
+  void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
+      Token varFinalOrConst, Token name) {
+    listener?.beginMethod(
+        externalToken, staticToken, covariantToken, varFinalOrConst, name);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/parser/listener.dart b/pkg/front_end/lib/src/fasta/parser/listener.dart
index eefe576..358f63b 100644
--- a/pkg/front_end/lib/src/fasta/parser/listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/listener.dart
@@ -628,11 +628,13 @@
     logEvent("Member");
   }
 
-  void beginMethod() {}
+  /// Handle the beginning of a method declaration.  Substructures:
+  /// - metadata
+  void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
+      Token varFinalOrConst, Token name) {}
 
   /// Handle the end of a method declaration.  Substructures:
   /// - metadata
-  /// - modifiers
   /// - return type
   /// - method name (identifier, possibly qualified)
   /// - type variables
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index 57623b8..cb8a1f9 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -1412,17 +1412,7 @@
       next = token.next;
       if (next.type != TokenType.IDENTIFIER) {
         String value = next.stringValue;
-        if (identical(value, 'get') || identical(value, 'set')) {
-          // Found a type reference, but missing an identifier after the period.
-          rewriteAndRecover(
-              token,
-              fasta.templateExpectedIdentifier.withArguments(next),
-              new SyntheticStringToken(
-                  TokenType.IDENTIFIER, '', next.charOffset, 0));
-          // Return the newly inserted synthetic token
-          // as the end of the type reference.
-          return token.next;
-        } else if (identical(value, '<')) {
+        if (identical(value, '<')) {
           // Found a type reference, but missing an identifier after the period.
           rewriteAndRecover(
               token,
@@ -2722,8 +2712,16 @@
               beforeToken = beforeNameToken;
               token = nameToken;
             }
-          } else if (nameToken.isIdentifier) {
-            nameContext = IdentifierContext.formalParameterDeclaration;
+          } else if (nameToken.isKeywordOrIdentifier) {
+            if (untyped) {
+              // Type is required in a function type but name is not.
+              untyped = false;
+              nameContext = null;
+              beforeNameToken = nameToken;
+              nameToken = nameToken.next;
+            } else {
+              nameContext = IdentifierContext.formalParameterDeclaration;
+            }
           } else {
             // No name required in a function type.
             nameContext = null;
@@ -2911,6 +2909,10 @@
       Function endStuff, Function handleNoStuff) {
     Token next = token.next;
     if (optional('<', next)) {
+      if (optional('dynamic', token)) {
+        reportRecoverableError(next,
+            fasta.templateTypeArgumentsOnTypeVariable.withArguments('dynamic'));
+      }
       BeginToken begin = next;
       rewriteLtEndGroupOpt(begin);
       beginStuff(begin);
@@ -3814,49 +3816,39 @@
       Token beforeName) {
     bool isOperator = getOrSet == null && optional('operator', beforeName.next);
 
-    int modifierCount = 0;
-    if (externalToken != null) {
-      listener.handleModifier(externalToken);
-      ++modifierCount;
-    }
     if (staticToken != null) {
-      if (!isOperator) {
-        listener.handleModifier(staticToken);
-        ++modifierCount;
-      } else {
+      if (isOperator) {
         reportRecoverableError(staticToken, fasta.messageStaticOperator);
         staticToken = null;
       }
     } else if (covariantToken != null) {
-      if (getOrSet != null && !optional('get', getOrSet)) {
-        listener.handleModifier(covariantToken);
-        ++modifierCount;
-      } else {
+      if (getOrSet == null || optional('get', getOrSet)) {
         reportRecoverableError(covariantToken, fasta.messageCovariantMember);
         covariantToken = null;
       }
     }
     if (varFinalOrConst != null) {
       if (optional('const', varFinalOrConst)) {
-        if (getOrSet == null) {
-          listener.handleModifier(varFinalOrConst);
-          ++modifierCount;
-        } else {
+        if (getOrSet != null) {
           reportRecoverableErrorWithToken(
               varFinalOrConst, fasta.templateExtraneousModifier);
           varFinalOrConst = null;
         }
       } else if (optional('var', varFinalOrConst)) {
         reportRecoverableError(varFinalOrConst, fasta.messageVarReturnType);
+        varFinalOrConst = null;
       } else {
         assert(optional('final', varFinalOrConst));
         reportRecoverableErrorWithToken(
             varFinalOrConst, fasta.templateExtraneousModifier);
+        varFinalOrConst = null;
       }
     }
-    // TODO(danrubel): Move beginMethod event before handleModifier events
-    listener.beginMethod();
-    listener.handleModifiers(modifierCount);
+
+    // TODO(danrubel): Consider parsing the name before calling beginMethod
+    // rather than passing the name token into beginMethod.
+    listener.beginMethod(externalToken, staticToken, covariantToken,
+        varFinalOrConst, beforeName.next);
 
     if (beforeType == null) {
       listener.handleNoType(beforeName);
@@ -3973,9 +3965,9 @@
       token = parseFunctionBody(token, false, true);
     } else {
       if (varFinalOrConst != null && !optional('native', next)) {
-        // TODO(danrubel): report error to fix
-        // test_constFactory in parser_fasta_test.dart
-        //reportRecoverableError(constToken, fasta.messageConstFactory);
+        if (optional('const', varFinalOrConst)) {
+          reportRecoverableError(varFinalOrConst, fasta.messageConstFactory);
+        }
       }
       token = parseFunctionBody(token, false, false);
     }
diff --git a/pkg/front_end/lib/src/fasta/parser/util.dart b/pkg/front_end/lib/src/fasta/parser/util.dart
index 9f5cd6c..3a503aa 100644
--- a/pkg/front_end/lib/src/fasta/parser/util.dart
+++ b/pkg/front_end/lib/src/fasta/parser/util.dart
@@ -4,10 +4,14 @@
 
 library fasta.parser.util;
 
+import 'package:kernel/ast.dart' show TreeNode;
+
 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);
@@ -15,7 +19,9 @@
 
 /// Returns the close brace, bracket, or parenthesis of [left]. For '<', it may
 /// return null.
-Token closeBraceTokenFor(BeginToken left) => left.endToken;
+Token closeBraceTokenFor(Token token) {
+  return token is BeginToken ? token.endGroup : null;
+}
 
 /// Returns the token before the close brace, bracket, or parenthesis
 /// associated with [left]. For '<', it may return `null`.
@@ -32,3 +38,24 @@
   }
   return token;
 }
+
+/// A null-aware alternative to `token.offset`.  If [token] is `null`, returns
+/// `TreeNode.noOffset`.
+int offsetForToken(Token token) {
+  return token == null ? TreeNode.noOffset : token.offset;
+}
+
+/// A null-aware alternative to `token.length`.  If [token] is `null`, returns
+/// [noLength].
+int lengthForToken(Token token) {
+  return token == null ? 1 : token.length;
+}
+
+/// Returns the length of the span from [begin] to [end] (inclusive). If both
+/// tokens are null, return [noLength]. If one of the tokens are null, return
+/// the length of the other token.
+int lengthOfSpan(Token begin, Token end) {
+  if (begin == null) return lengthForToken(end);
+  if (end == null) return lengthForToken(begin);
+  return end.offset + end.length - begin.offset;
+}
diff --git a/pkg/front_end/lib/src/fasta/problems.dart b/pkg/front_end/lib/src/fasta/problems.dart
index c485b18..d9b0777 100644
--- a/pkg/front_end/lib/src/fasta/problems.dart
+++ b/pkg/front_end/lib/src/fasta/problems.dart
@@ -14,6 +14,8 @@
         templateInternalProblemUnimplemented,
         templateInternalProblemUnsupported;
 
+import 'parser.dart' show noLength;
+
 import 'severity.dart' show Severity;
 
 /// Used to report an internal error.
@@ -26,8 +28,9 @@
 ///
 /// Before printing the message, the string `"Internal error: "` is prepended.
 dynamic internalProblem(Message message, int charOffset, Uri uri) {
-  throw CompilerContext.current
-      .format(message.withLocation(uri, charOffset), Severity.internalProblem);
+  throw CompilerContext.current.format(
+      message.withLocation(uri, charOffset, noLength),
+      Severity.internalProblem);
 }
 
 dynamic unimplemented(String what, int charOffset, Uri uri) {
diff --git a/pkg/front_end/lib/src/fasta/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index dec6321..33e5379 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -209,7 +209,7 @@
       if (usedNames?.containsKey(name) ?? false) {
         return templatePreviousUseOfName
             .withArguments(name)
-            .withLocation(fileUri, usedNames[name]);
+            .withLocation(fileUri, usedNames[name], name.length);
       }
       recordUse(name, charOffset, fileUri);
       local[name] = builder;
diff --git a/pkg/front_end/lib/src/fasta/severity.dart b/pkg/front_end/lib/src/fasta/severity.dart
index b0c4add..02da071 100644
--- a/pkg/front_end/lib/src/fasta/severity.dart
+++ b/pkg/front_end/lib/src/fasta/severity.dart
@@ -5,9 +5,10 @@
 library fasta.severity;
 
 enum Severity {
+  context,
   error,
+  errorLegacyWarning,
   internalProblem,
   nit,
   warning,
-  errorLegacyWarning,
 }
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index 4d9da6f..92cba45 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -788,11 +788,11 @@
 
   @override
   void addCompileTimeError(Message message, int charOffset, int length) {
-    library.addCompileTimeError(message, charOffset, uri);
+    library.addCompileTimeError(message, charOffset, length, uri);
   }
 
   void addProblem(Message message, int charOffset, int length) {
-    library.addProblem(message, charOffset, uri);
+    library.addProblem(message, charOffset, length, uri);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index b6b3372..ff5906f 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -14,10 +14,15 @@
 
 import '../fasta_codes.dart'
     show
+        LocatedMessage,
         Message,
+        messageConstConstructorWithBody,
+        messageConstMethod,
+        messageConstructorWithReturnType,
         messageExpectedBlockToSkip,
         messageInterpolationInUri,
         messageOperatorWithOptionalFormals,
+        messageStaticConstructor,
         messageTypedefNotFunction,
         templateDuplicatedParameterName,
         templateDuplicatedParameterNameCause,
@@ -26,7 +31,18 @@
         templateOperatorParameterMismatch1,
         templateOperatorParameterMismatch2;
 
-import '../modifier.dart' show abstractMask, externalMask, Modifier;
+import '../modifier.dart'
+    show
+        Const,
+        Covariant,
+        External,
+        Final,
+        Modifier,
+        Static,
+        Var,
+        abstractMask,
+        constMask,
+        externalMask;
 
 import '../operator.dart'
     show
@@ -450,6 +466,9 @@
     List<MetadataBuilder> metadata = pop();
     String documentationComment = getDocumentationComment(beginToken);
     checkEmpty(beginToken.charOffset);
+    library
+        .endNestedDeclaration("#method")
+        .resolveTypes(typeVariables, library);
     library.addProcedure(
         documentationComment,
         metadata,
@@ -507,7 +526,35 @@
   }
 
   @override
-  void beginMethod() {
+  void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
+      Token varFinalOrConst, Token name) {
+    List<Modifier> modifiers = <Modifier>[];
+    if (externalToken != null) {
+      modifiers.add(External);
+    }
+    if (staticToken != null) {
+      if (name?.lexeme == library.currentDeclaration.name) {
+        handleRecoverableError(
+            messageStaticConstructor, staticToken, staticToken);
+      } else {
+        modifiers.add(Static);
+      }
+    }
+    if (covariantToken != null) {
+      modifiers.add(Covariant);
+    }
+    if (varFinalOrConst != null) {
+      String lexeme = varFinalOrConst.lexeme;
+      if (identical('var', lexeme)) {
+        modifiers.add(Var);
+      } else if (identical('final', lexeme)) {
+        modifiers.add(Final);
+      } else {
+        modifiers.add(Const);
+      }
+    }
+    push(varFinalOrConst ?? NullValue.VarFinalOrConstToken);
+    push(modifiers);
     library.beginNestedDeclaration("#method", hasMembers: false);
   }
 
@@ -587,22 +634,71 @@
     if ((modifiers & externalMask) != 0) {
       modifiers &= ~abstractMask;
     }
+    Token varFinalOrConst = pop(NullValue.VarFinalOrConstToken);
     List<MetadataBuilder> metadata = pop();
     String documentationComment = getDocumentationComment(beginToken);
-    library.addProcedure(
-        documentationComment,
-        metadata,
-        modifiers,
-        returnType,
-        name,
-        typeVariables,
-        formals,
-        kind,
-        charOffset,
-        formalsOffset,
-        endToken.charOffset,
-        nativeMethodName,
-        isTopLevel: false);
+    library
+        .endNestedDeclaration("#method")
+        .resolveTypes(typeVariables, library);
+    String constructorName =
+        kind == ProcedureKind.Getter || kind == ProcedureKind.Setter
+            ? null
+            : library.computeAndValidateConstructorName(name, charOffset);
+    if (constructorName != null) {
+      if (varFinalOrConst != null) {
+        if (optional('const', varFinalOrConst) &&
+            (endToken != null && !optional(';', endToken))) {
+          handleRecoverableError(messageConstConstructorWithBody,
+              varFinalOrConst, varFinalOrConst);
+          varFinalOrConst = null;
+          modifiers &= ~constMask;
+        }
+      }
+      if (returnType != null) {
+        // TODO(danrubel): Report this error on the return type
+        handleRecoverableError(
+            messageConstructorWithReturnType, beginToken, beginToken);
+        returnType = null;
+      }
+      library.addConstructor(
+          documentationComment,
+          metadata,
+          modifiers,
+          returnType,
+          name,
+          constructorName,
+          typeVariables,
+          formals,
+          charOffset,
+          formalsOffset,
+          endToken.charOffset,
+          nativeMethodName);
+    } else {
+      if (varFinalOrConst != null) {
+        if (optional('const', varFinalOrConst)) {
+          handleRecoverableError(
+              messageConstMethod, varFinalOrConst, varFinalOrConst);
+          varFinalOrConst = null;
+          modifiers &= ~constMask;
+        }
+      }
+      // TODO(danrubel): report messageFieldInitializerOutsideConstructor
+      // for any parameter of the form `this.fieldName`.
+      library.addProcedure(
+          documentationComment,
+          metadata,
+          modifiers,
+          returnType,
+          name,
+          typeVariables,
+          formals,
+          kind,
+          charOffset,
+          formalsOffset,
+          endToken.charOffset,
+          nativeMethodName,
+          isTopLevel: false);
+    }
     nativeMethodName = null;
   }
 
@@ -748,12 +844,11 @@
           addCompileTimeError(
               templateDuplicatedParameterName.withArguments(formals[1].name),
               formals[1].charOffset,
-              formals[1].name.length);
-          addCompileTimeError(
-              templateDuplicatedParameterNameCause
-                  .withArguments(formals[1].name),
-              formals[0].charOffset,
-              formals[0].name.length);
+              formals[1].name.length,
+              context: templateDuplicatedParameterNameCause
+                  .withArguments(formals[1].name)
+                  .withLocation(
+                      uri, formals[0].charOffset, formals[0].name.length));
         }
       } else if (formals.length > 2) {
         Map<String, FormalParameterBuilder> seenNames =
@@ -1064,12 +1159,15 @@
   }
 
   @override
-  void addCompileTimeError(Message message, int charOffset, int length) {
-    library.addCompileTimeError(message, charOffset, uri);
+  void addCompileTimeError(Message message, int charOffset, int length,
+      {LocatedMessage context}) {
+    library.addCompileTimeError(message, charOffset, length, uri,
+        context: context);
   }
 
-  void addProblem(Message message, int charOffset, int length) {
-    library.addProblem(message, charOffset, uri);
+  void addProblem(Message message, int charOffset, int length,
+      {LocatedMessage context}) {
+    library.addProblem(message, charOffset, length, uri, context: context);
   }
 
   /// Return the documentation comment for the entity that starts at the
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 7886eff..a09cdd2 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
@@ -4,14 +4,11 @@
 
 library fasta.source_class_builder;
 
-import 'package:front_end/src/base/instrumentation.dart' show Instrumentation;
-
-import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart'
-    show ShadowClass;
-
 import 'package:kernel/ast.dart'
     show Class, Constructor, Member, Supertype, TreeNode, setParents;
 
+import '../../base/instrumentation.dart' show Instrumentation;
+
 import '../dill/dill_member_builder.dart' show DillMemberBuilder;
 
 import '../fasta_codes.dart'
@@ -40,6 +37,10 @@
         TypeVariableBuilder,
         compareProcedures;
 
+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;
@@ -151,35 +152,39 @@
     constructors.forEach((String name, Builder constructor) {
       Builder member = scopeBuilder[name];
       if (member == null) return;
-      // TODO(ahe): charOffset is missing.
+      // TODO(ahe): Revisit these messages. It seems like the last two should
+      // be `context` parameter to this message.
       addCompileTimeError(templateConflictsWithMember.withArguments(name),
-          constructor.charOffset);
+          constructor.charOffset, noLength);
       if (constructor.isFactory) {
         addCompileTimeError(
             templateConflictsWithFactory.withArguments("${this.name}.${name}"),
-            member.charOffset);
+            member.charOffset,
+            noLength);
       } else {
         addCompileTimeError(
             templateConflictsWithConstructor
                 .withArguments("${this.name}.${name}"),
-            member.charOffset);
+            member.charOffset,
+            noLength);
       }
     });
 
     scope.setters.forEach((String name, Builder setter) {
       Builder member = scopeBuilder[name];
       if (member == null || !member.isField || member.isFinal) return;
-      // TODO(ahe): charOffset is missing.
       if (member.isInstanceMember == setter.isInstanceMember) {
-        addProblem(
-            templateConflictsWithMember.withArguments(name), setter.charOffset);
-        addProblem(
-            templateConflictsWithSetter.withArguments(name), member.charOffset);
+        addProblem(templateConflictsWithMember.withArguments(name),
+            setter.charOffset, noLength);
+        // TODO(ahe): Context argument to previous message?
+        addProblem(templateConflictsWithSetter.withArguments(name),
+            member.charOffset, noLength);
       } else {
         addProblem(templateConflictsWithMemberWarning.withArguments(name),
-            setter.charOffset);
+            setter.charOffset, noLength);
+        // TODO(ahe): Context argument to previous message?
         addProblem(templateConflictsWithSetterWarning.withArguments(name),
-            member.charOffset);
+            member.charOffset, noLength);
       }
     });
 
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 cc8fd0a..01d6e4b 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
@@ -40,14 +40,15 @@
 import '../fasta_codes.dart'
     show
         messageExpectedUri,
-        messagePartOfSelf,
         messageMemberWithSameNameAsClass,
+        messagePartOfSelf,
         templateConflictsWithMember,
         templateConflictsWithSetter,
         templateCouldNotParseUri,
         templateDeferredPrefixDuplicated,
         templateDeferredPrefixDuplicatedCause,
         templateDuplicatedDefinition,
+        templateIllegalMethodName,
         templateMissingPartOf,
         templatePartOfLibraryNameMismatch,
         templatePartOfUriMismatch,
@@ -58,6 +59,8 @@
 
 import '../configuration.dart' show Configuration;
 
+import '../parser.dart' show noLength;
+
 import '../problems.dart' show unhandled;
 
 import 'source_loader.dart' show SourceLoader;
@@ -164,7 +167,7 @@
 
   Uri resolve(Uri baseUri, String uri, int uriOffset, {isPart: false}) {
     if (uri == null) {
-      addCompileTimeError(messageExpectedUri, uriOffset, this.uri);
+      addCompileTimeError(messageExpectedUri, uriOffset, noLength, this.uri);
       return new Uri(scheme: MALFORMED_URI_SCHEME);
     }
     Uri parsedUri;
@@ -177,6 +180,7 @@
       addCompileTimeError(
           templateCouldNotParseUri.withArguments(uri, e.message),
           uriOffset + 1 + (e.offset ?? -1),
+          1,
           this.uri);
       return new Uri(
           scheme: MALFORMED_URI_SCHEME, query: Uri.encodeQueryComponent(uri));
@@ -189,6 +193,32 @@
     }
   }
 
+  String computeAndValidateConstructorName(Object name, int charOffset) {
+    String className = currentDeclaration.name;
+    String prefix;
+    String suffix;
+    if (name is QualifiedName) {
+      prefix = name.prefix;
+      suffix = name.suffix;
+    } else {
+      prefix = name;
+      suffix = null;
+    }
+    if (prefix == className) {
+      return suffix ?? "";
+    }
+    if (suffix == null) {
+      // A legal name for a regular method, but not for a constructor.
+      return null;
+    }
+    addCompileTimeError(
+        templateIllegalMethodName.withArguments("$name", "$className.$suffix"),
+        charOffset,
+        noLength,
+        fileUri);
+    return suffix;
+  }
+
   void addExport(
       List<MetadataBuilder> metadata,
       String uri,
@@ -338,12 +368,26 @@
     }
   }
 
+  void addConstructor(
+      String documentationComment,
+      List<MetadataBuilder> metadata,
+      int modifiers,
+      T returnType,
+      final Object name,
+      String constructorName,
+      List<TypeVariableBuilder> typeVariables,
+      List<FormalParameterBuilder> formals,
+      int charOffset,
+      int charOpenParenOffset,
+      int charEndOffset,
+      String nativeMethodName);
+
   void addProcedure(
       String documentationComment,
       List<MetadataBuilder> metadata,
       int modifiers,
       T returnType,
-      Object name,
+      String name,
       List<TypeVariableBuilder> typeVariables,
       List<FormalParameterBuilder> formals,
       ProcedureKind kind,
@@ -416,7 +460,7 @@
         !builder.isSetter &&
         name == currentDeclaration.name) {
       addCompileTimeError(
-          messageMemberWithSameNameAsClass, charOffset, fileUri);
+          messageMemberWithSameNameAsClass, charOffset, noLength, fileUri);
     }
     Map<String, Builder> members = isConstructor
         ? currentDeclaration.constructors
@@ -440,11 +484,11 @@
         addCompileTimeError(
             templateDeferredPrefixDuplicated.withArguments(name),
             deferred.charOffset,
-            fileUri);
-        addCompileTimeError(
-            templateDeferredPrefixDuplicatedCause.withArguments(name),
-            other.charOffset,
-            fileUri);
+            noLength,
+            fileUri,
+            context: templateDeferredPrefixDuplicatedCause
+                .withArguments(name)
+                .withLocation(fileUri, other.charOffset, noLength));
       }
       return existing
         ..exportScope.merge(builder.exportScope,
@@ -453,7 +497,7 @@
         });
     } else if (isDuplicatedDefinition(existing, builder)) {
       addCompileTimeError(templateDuplicatedDefinition.withArguments(name),
-          charOffset, fileUri);
+          charOffset, noLength, fileUri);
     }
     return members[name] = builder;
   }
@@ -500,11 +544,11 @@
     scope.setters.forEach((String name, Builder setter) {
       Builder member = scopeBuilder[name];
       if (member == null || !member.isField || member.isFinal) return;
-      // TODO(ahe): charOffset is missing.
       addCompileTimeError(templateConflictsWithMember.withArguments(name),
-          setter.charOffset, fileUri);
+          setter.charOffset, noLength, fileUri);
+      // TODO(ahe): Context to previous message?
       addCompileTimeError(templateConflictsWithSetter.withArguments(name),
-          member.charOffset, fileUri);
+          member.charOffset, noLength, fileUri);
     });
 
     return null;
@@ -535,12 +579,12 @@
     Set<Uri> seenParts = new Set<Uri>();
     for (SourceLibraryBuilder<T, R> part in parts.toList()) {
       if (part == this) {
-        addCompileTimeError(messagePartOfSelf, -1, fileUri);
+        addCompileTimeError(messagePartOfSelf, -1, noLength, fileUri);
       } else if (seenParts.add(part.fileUri)) {
         includePart(part);
       } else {
-        addCompileTimeError(
-            templatePartTwice.withArguments(part.fileUri), -1, fileUri);
+        addCompileTimeError(templatePartTwice.withArguments(part.fileUri), -1,
+            noLength, fileUri);
       }
     }
   }
@@ -553,6 +597,7 @@
             templatePartOfUriMismatch.withArguments(
                 part.fileUri, uri, part.partOfUri),
             -1,
+            noLength,
             fileUri);
       }
     } else if (part.partOfName != null) {
@@ -563,6 +608,7 @@
               templatePartOfLibraryNameMismatch.withArguments(
                   part.fileUri, name, part.partOfName),
               -1,
+              noLength,
               fileUri);
         }
       } else {
@@ -571,6 +617,7 @@
             templatePartOfUseUri.withArguments(
                 part.fileUri, fileUri, part.partOfName),
             -1,
+            noLength,
             fileUri);
       }
     } else {
@@ -578,8 +625,8 @@
       // metadata annotations can be associated with it.
       assert(!part.isPart);
       if (uriIsValid(part.fileUri)) {
-        addCompileTimeError(
-            templateMissingPartOf.withArguments(part.fileUri), -1, fileUri);
+        addCompileTimeError(templateMissingPartOf.withArguments(part.fileUri),
+            -1, noLength, fileUri);
       }
     }
     part.forEach((String name, Builder builder) {
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 0eded02..534367c 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -69,6 +69,8 @@
 
 import '../parser/class_member_parser.dart' show ClassMemberParser;
 
+import '../parser.dart' show lengthForToken, noLength, offsetForToken;
+
 import '../problems.dart' show internalProblem;
 
 import '../scanner.dart' show ErrorToken, ScannerResult, Token, scan;
@@ -159,8 +161,8 @@
     while (token is ErrorToken) {
       if (!suppressLexicalErrors) {
         ErrorToken error = token;
-        library.addCompileTimeError(
-            error.assertionMessage, token.charOffset, uri);
+        library.addCompileTimeError(error.assertionMessage,
+            offsetForToken(token), lengthForToken(token), uri);
       }
       token = token.next;
     }
@@ -468,15 +470,15 @@
             .join("', '");
         messages[templateCyclicClassHierarchy
             .withArguments(cls.fullNameForErrors, involvedString)
-            .withLocation(cls.fileUri, cls.charOffset)] = cls;
+            .withLocation(cls.fileUri, cls.charOffset, noLength)] = cls;
       });
 
       // Report all classes involved in a cycle, sorted to ensure stability as
       // [cyclicCandidates] is sensitive to if the platform (or other modules)
       // are included in [classes].
       for (LocatedMessage message in messages.keys.toList()..sort()) {
-        messages[message]
-            .addCompileTimeError(message.messageObject, message.charOffset);
+        messages[message].addCompileTimeError(
+            message.messageObject, message.charOffset, message.length);
       }
     }
     ticker.logMs("Found cycles");
@@ -496,12 +498,14 @@
         if (supertype is EnumBuilder) {
           cls.addCompileTimeError(
               templateExtendingEnum.withArguments(supertype.name),
-              cls.charOffset);
+              cls.charOffset,
+              noLength);
         } else if (!cls.library.mayImplementRestrictedTypes &&
             blackListedClasses.contains(supertype)) {
           cls.addCompileTimeError(
               templateExtendingRestricted.withArguments(supertype.name),
-              cls.charOffset);
+              cls.charOffset,
+              noLength);
         }
       }
       TypeBuilder mixedInType = cls.mixedInType;
@@ -516,11 +520,12 @@
                 cls.addCompileTimeError(
                     templateIllegalMixinDueToConstructors
                         .withArguments(builder.fullNameForErrors),
-                    cls.charOffset);
-                builder.addCompileTimeError(
-                    templateIllegalMixinDueToConstructorsCause
-                        .withArguments(builder.fullNameForErrors),
-                    constructory.charOffset);
+                    cls.charOffset,
+                    noLength,
+                    context: templateIllegalMixinDueToConstructorsCause
+                        .withArguments(builder.fullNameForErrors)
+                        .withLocation(constructory.fileUri,
+                            constructory.charOffset, noLength));
               }
             }
           }
@@ -528,7 +533,8 @@
         if (!isClassBuilder) {
           cls.addCompileTimeError(
               templateIllegalMixin.withArguments(mixedInType.fullNameForErrors),
-              cls.charOffset);
+              cls.charOffset,
+              noLength);
         }
       }
     }
@@ -599,6 +605,7 @@
         templateAmbiguousSupertypes.withArguments(
             name, a.asInterfaceType, b.asInterfaceType),
         cls.fileOffset,
+        noLength,
         cls.fileUri);
   }
 
@@ -727,14 +734,15 @@
     return target.backendTarget.throwCompileConstantError(coreTypes, error);
   }
 
-  Expression buildCompileTimeError(Message message, int offset, Uri uri) {
+  Expression buildCompileTimeError(
+      Message message, int offset, int length, Uri uri) {
     String text = target.context
-        .format(message.withLocation(uri, offset), Severity.error);
+        .format(message.withLocation(uri, offset, length), Severity.error);
     return target.backendTarget.buildCompileTimeError(coreTypes, text, offset);
   }
 
-  void recordMessage(
-      Severity severity, Message message, int charOffset, Uri fileUri,
+  void recordMessage(Severity severity, Message message, int charOffset,
+      int length, Uri fileUri,
       {LocatedMessage context}) {
     if (instrumentation == null) return;
 
@@ -773,6 +781,10 @@
         // Use a property name expressing that, in case it slips through.
         severityString = "unresolved severity";
         break;
+
+      case Severity.context:
+        severityString = "context";
+        break;
     }
     instrumentation.record(
         fileUri,
diff --git a/pkg/front_end/lib/src/fasta/source/stack_listener.dart b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
index 8545689..d440748 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
@@ -63,6 +63,7 @@
   TypeList,
   TypeVariable,
   TypeVariables,
+  VarFinalOrConstToken,
   WithClause,
 }
 
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 623aa63..dae1dc7 100644
--- a/pkg/front_end/lib/src/fasta/testing/validating_instrumentation.dart
+++ b/pkg/front_end/lib/src/fasta/testing/validating_instrumentation.dart
@@ -1,17 +1,28 @@
 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
 
-import 'package:front_end/src/base/instrumentation.dart';
-import 'package:front_end/src/fasta/compiler_context.dart' show CompilerContext;
-import 'package:front_end/src/fasta/messages.dart';
-import 'package:front_end/src/fasta/scanner.dart';
-import 'package:front_end/src/fasta/scanner/io.dart';
-import 'package:front_end/src/fasta/severity.dart' show Severity;
-import 'package:front_end/src/scanner/token.dart' as analyzer;
+import 'dart:async' show Future;
+
+import 'dart:convert' show UTF8;
+
+import 'dart:io' show File;
+
+import '../../base/instrumentation.dart';
+
+import '../../scanner/token.dart' as analyzer;
+
+import '../compiler_context.dart' show CompilerContext;
+
+import '../messages.dart' show templateUnspecified;
+
+import '../parser.dart' show noLength;
+
+import '../scanner.dart' show ScannerResult, Token, scan;
+
+import '../scanner/io.dart' show readBytesFromFile;
+
+import '../severity.dart' show Severity;
 
 /// Implementation of [Instrumentation] which checks property/value pairs
 /// against expectations encoded in source files using "/*@...*/" comments.
@@ -219,7 +230,7 @@
     return CompilerContext.current.format(
         templateUnspecified
             .withArguments('$desc${stackTrace == null ? '' : '\n$stackTrace'}')
-            .withLocation(uri, offset),
+            .withLocation(uri, offset, noLength),
         Severity.internalProblem);
   }
 
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 febb348..be842cf 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,6 +18,8 @@
 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;
@@ -66,6 +68,7 @@
       _library.addCompileTimeError(
           templateCantInferTypeDueToCircularity.withArguments(_name),
           _offset,
+          noLength,
           _fileUri);
     } else {
       var inferredType = _matchTypes(overriddenTypes, _name, _offset);
@@ -1133,6 +1136,7 @@
         _library.addCompileTimeError(
             templateCantInferTypeDueToInconsistentOverrides.withArguments(name),
             charOffset,
+            noLength,
             _fileUri);
         return const DynamicType();
       }
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 18e43e9..5c2b314 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
@@ -25,8 +25,11 @@
 import 'package:kernel/core_types.dart';
 
 import '../deprecated_problems.dart' show Crash;
+
 import '../messages.dart' show getLocationFromNode;
 
+import '../parser.dart' show noLength;
+
 /// Concrete class derived from [InferenceNode] to represent type inference of a
 /// field based on its initializer.
 class FieldInitializerInferenceNode extends InferenceNode {
@@ -56,6 +59,7 @@
               templateCantInferTypeDueToCircularity
                   .withArguments(field.name.name),
               field.fileOffset,
+              noLength,
               field.fileUri);
           inferredType = const DynamicType();
         }
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 0c41b9b..ae22062 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
@@ -9,6 +9,7 @@
         AsyncMarker,
         BottomType,
         Class,
+        ConditionalExpression,
         ConstructorInvocation,
         DartType,
         DispatchCategory,
@@ -28,6 +29,7 @@
         Member,
         MethodInvocation,
         Name,
+        NullLiteral,
         Procedure,
         ProcedureKind,
         PropertyGet,
@@ -65,6 +67,8 @@
 import '../kernel/fasta_accessors.dart'
     show BuilderHelper, CalleeDesignation, FunctionTypeAccessor;
 
+import '../kernel/frontend_accessors.dart' show buildIsNull;
+
 import '../kernel/kernel_shadow_ast.dart'
     show
         getExplicitTypeArguments,
@@ -77,6 +81,8 @@
 
 import '../names.dart' show callName;
 
+import '../parser.dart' show noLength;
+
 import '../problems.dart' show unhandled;
 
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
@@ -229,16 +235,9 @@
           : returnOrYieldContext;
       if (expectedType != null) {
         expectedType = greatestClosure(inferrer.coreTypes, expectedType);
-        DartType expectedTypeToCheck = expectedType;
-        if (!inferrer.isAssignable(expectedType, type) && isAsync) {
-          DartType unfuturedExpectedType =
-              inferrer.typeSchemaEnvironment.unfutureType(expectedType);
-          if (inferrer.isAssignable(unfuturedExpectedType, type)) {
-            expectedTypeToCheck = unfuturedExpectedType;
-          }
-        }
         if (inferrer.ensureAssignable(
-                expectedTypeToCheck, type, expression, fileOffset) !=
+                expectedType, type, expression, fileOffset,
+                isReturnFromAsync: isAsync) !=
             null) {
           type = expectedType;
         }
@@ -450,8 +449,25 @@
   /// Checks whether [actualType] can be assigned to [expectedType], and inserts
   /// an implicit downcast if appropriate.
   Expression ensureAssignable(DartType expectedType, DartType actualType,
-      Expression expression, int fileOffset) {
+      Expression expression, int fileOffset,
+      {bool isReturnFromAsync = false}) {
     assert(expectedType == null || isKnown(expectedType));
+
+    DartType initialExpectedType = expectedType;
+    if (isReturnFromAsync && !isAssignable(expectedType, actualType)) {
+      // If the body of the function is async, the expected return type has the
+      // shape FutureOr<T>.  We check both branches for FutureOr here: both T
+      // and Future<T>.
+      DartType unfuturedExpectedType =
+          typeSchemaEnvironment.unfutureType(expectedType);
+      DartType futuredExpectedType = wrapFutureType(unfuturedExpectedType);
+      if (isAssignable(unfuturedExpectedType, actualType)) {
+        expectedType = unfuturedExpectedType;
+      } else if (isAssignable(futuredExpectedType, actualType)) {
+        expectedType = futuredExpectedType;
+      }
+    }
+
     // We don't need to insert assignability checks when doing top level type
     // inference since top level type inference only cares about the type that
     // is inferred (the kernel code is discarded).
@@ -468,12 +484,21 @@
       var callMember = classHierarchy.getInterfaceMember(classNode, callName);
       if (callMember is Procedure && callMember.kind == ProcedureKind.Method) {
         if (_shouldTearOffCall(expectedType, actualType)) {
+          // Replace expression with:
+          // `let t = expression in t == null ? null : t.call`
           var parent = expression.parent;
-          var tearOff = new PropertyGet(expression, callName, callMember)
+          var t = new VariableDeclaration.forValue(expression, type: actualType)
             ..fileOffset = fileOffset;
-          parent?.replaceChild(expression, tearOff);
-          expression = tearOff;
+          var nullCheck = buildIsNull(new VariableGet(t), fileOffset);
+          var tearOff =
+              new PropertyGet(new VariableGet(t), callName, callMember)
+                ..fileOffset = fileOffset;
           actualType = getCalleeType(callMember, actualType);
+          var conditional = new ConditionalExpression(nullCheck,
+              new NullLiteral()..fileOffset = fileOffset, tearOff, actualType);
+          var let = new Let(t, conditional);
+          parent?.replaceChild(expression, let);
+          expression = conditional;
         }
       }
     }
@@ -504,7 +529,7 @@
       } else {
         // Insert an implicit downcast.
         var parent = expression.parent;
-        var typeCheck = new AsExpression(expression, expectedType)
+        var typeCheck = new AsExpression(expression, initialExpectedType)
           ..isTypeError = true
           ..fileOffset = fileOffset;
         parent?.replaceChild(expression, typeCheck);
@@ -560,7 +585,8 @@
                 ..fileOffset = receiver.fileOffset,
               helper.buildCompileTimeError(
                   errorTemplate.withArguments(name.name, receiverType),
-                  fileOffset))
+                  fileOffset,
+                  noLength))
             ..fileOffset = fileOffset);
     }
     return interfaceMember;
@@ -1080,7 +1106,8 @@
           calleeKind,
           offset);
       if (argMessage != null) {
-        helper.addProblem(argMessage.messageObject, argMessage.charOffset);
+        helper.addProblem(
+            argMessage.messageObject, argMessage.charOffset, argMessage.length);
       } else {
         // Argument counts and names match. Compare types.
         int numPositionalArgs = arguments.positional.length;
@@ -1681,6 +1708,7 @@
             templateMixinInferenceNoMatchingClass.withArguments(mixinClass.name,
                 baseType.classNode.name, mixinSupertype.asInterfaceType),
             mixinClass.fileOffset,
+            noLength,
             mixinClass.fileUri);
         return;
       }
@@ -1728,6 +1756,7 @@
                   baseType.classNode.name,
                   mixinSupertype.asInterfaceType),
               mixinClass.fileOffset,
+              noLength,
               mixinClass.fileUri);
           return p;
         }
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index b1c9e87..0cb16f1c 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -267,6 +267,7 @@
 
 ExpectedType:
   template: "Expected a type, but got '#lexeme'."
+  severity: ERROR
   analyzerCode: EXPECTED_TYPE_NAME
   dart2jsCode: "*fatal*"
 
@@ -393,6 +394,22 @@
   script:
     - "class C { factory const C() = prefix.B.foo; }"
 
+ConstConstructorWithBody:
+  template: "A const constructor can't have a body."
+  tip: "Try removing either the 'const' keyword or the body."
+  analyzerCode: CONST_CONSTRUCTOR_WITH_BODY
+  dart2jsCode: "*fatal*"
+  script:
+    - "class C { const C() {} }"
+
+ConstMethod:
+  template: "Getters, setters and methods can't be declared to be 'const'."
+  tip: "Try removing the 'const' keyword."
+  analyzerCode: CONST_METHOD
+  dart2jsCode: "*fatal*"
+  script:
+    - "class C { const C() {} }"
+
 CovariantAfterFinal:
   template: "The modifier 'covariant' should be before the modifier 'final'."
   tip: "Try re-ordering the modifiers."
@@ -916,6 +933,22 @@
   template: "Couldn't find constructor '#name'."
   severity: ERROR_LEGACY_WARNING
 
+ConstructorWithReturnType:
+  template: "Constructors can't have a return type."
+  tip: "Try removing the return type."
+  analyzerCode: CONSTRUCTOR_WITH_RETURN_TYPE
+  dart2jsCode: "*fatal*"
+  script:
+    - "class C { T C() {} }"
+
+FieldInitializerOutsideConstructor:
+  template: "Field formal parameters can only be used in a constructor."
+  tip: "Try replacing the field formal parameter with a normal parameter."
+  analyzerCode: FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR
+  dart2jsCode: "*fatal*"
+  script:
+    - "class C { void m(this.x); }"
+
 RedirectionTargetNotFound:
   template: "Redirection constructor target not found: '#name'"
   severity: ERROR_LEGACY_WARNING
@@ -945,9 +978,11 @@
 
 CandidateFound:
   template: "Found this candidate, but the arguments don't match."
+  severity: CONTEXT
 
 CandidateFoundIsDefaultConstructor:
   template: "The class '#name' has a constructor that takes no arguments."
+  severity: CONTEXT
 
 TooFewArgumentsToFunction:
   template: "Too few positional arguments to function: #count required, #count2 given."
@@ -1282,6 +1317,7 @@
 
 IllegalMixinDueToConstructorsCause:
   template: "This constructor prevents using '#name' as a mixin."
+  severity: CONTEXT
 
 ConflictsWithConstructor:
   template: "Conflicts with constructor '#name'."
@@ -1312,8 +1348,8 @@
   severity: ERROR
 
 ConflictsWithTypeVariableCause:
-  template:  "This is the type variable."
-  severity: ERROR
+  template: "This is the type variable."
+  severity: CONTEXT
 
 IllegalMixin:
   template: "The type '#name' can't be mixed in."
@@ -1324,6 +1360,7 @@
 
 OverriddenMethodCause:
   template: "This is the overriden method ('#name')."
+  severity: CONTEXT
 
 OverrideMismatchNamedParameter:
   template: "The method '#name' doesn't have the named parameter '#name2' of overriden method '#name3'."
@@ -1357,9 +1394,6 @@
   template: "'#name' isn't a legal method name."
   tip: "Did you mean '#name2'?"
 
-ConstConstructorWithBody:
-  template: "A const constructor can't have a body."
-
 PartOfSelf:
   template: "A file can't be a part of itself."
 
@@ -1368,6 +1402,7 @@
 
 TypeVariableDuplicatedNameCause:
   template: "The other type variable named '#name'."
+  severity: CONTEXT
 
 TypeVariableSameNameAsEnclosing:
   template: "A type variable can't have the same name as its enclosing declaration."
@@ -1537,10 +1572,16 @@
 
 DeferredPrefixDuplicatedCause:
   template: "'#name' is used here."
+  severity: CONTEXT
 
 TypeArgumentsOnTypeVariable:
   template: "Can't use type arguments with type variable '#name'."
+  tip: "Try removing the type arguments."
   severity: ERROR_LEGACY_WARNING
+  analyzerCode: TYPE_ARGUMENTS_ON_TYPE_VARIABLE
+  dart2jsCode: "*fatal*"
+  script:
+    - "dynamic<T>(x) => 0"
 
 DuplicatedDefinition:
   template: "Duplicated definition of '#name'."
@@ -1553,6 +1594,7 @@
 
 DuplicatedParameterNameCause:
   template: "Other parameter named '#name'."
+  severity: CONTEXT
 
 MemberWithSameNameAsClass:
   template: "A class member can't have the same name as the enclosing class."
@@ -1669,7 +1711,7 @@
 
 FinalInstanceVariableAlreadyInitializedCause:
   template: "'#name' was initialized here."
-  severity: ERROR_LEGACY_WARNING
+  severity: CONTEXT
 
 TypeVariableInStaticContext:
   template: "Type variables can't be used in static members."
@@ -1703,6 +1745,7 @@
 
 ConstConstructorNonFinalFieldCause:
   template: "Field isn't final, but constructor is 'const'."
+  severity: CONTEXT
 
 AccessError:
   template: "Access error: '#name'."
@@ -1823,12 +1866,14 @@
 
 PatchClassOrigin:
   template: "This is the origin class."
+  severity: CONTEXT
 
 PatchDeclarationMismatch:
   template: "This patch doesn't match origin declaration."
 
 PatchDeclarationOrigin:
   template: "This is the origin declaration."
+  severity: CONTEXT
 
 PatchInjectionFailed:
   template: "Can't inject '#name' into '#uri'."
diff --git a/pkg/front_end/testcases/annotation_eof.dart.direct.expect b/pkg/front_end/testcases/annotation_eof.dart.direct.expect
index f78b3b6..62142d7 100644
--- a/pkg/front_end/testcases/annotation_eof.dart.direct.expect
+++ b/pkg/front_end/testcases/annotation_eof.dart.direct.expect
@@ -2,9 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
-
-^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''."]/* from null */;
 static method main() → dynamic {
   core::print("There is a dangling annotation at the end of this file");
 }
diff --git a/pkg/front_end/testcases/annotation_eof.dart.strong.expect b/pkg/front_end/testcases/annotation_eof.dart.strong.expect
index f78b3b6..62142d7 100644
--- a/pkg/front_end/testcases/annotation_eof.dart.strong.expect
+++ b/pkg/front_end/testcases/annotation_eof.dart.strong.expect
@@ -2,9 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
-
-^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''."]/* from null */;
 static method main() → dynamic {
   core::print("There is a dangling annotation at the end of this file");
 }
diff --git a/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect b/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect
index aaf6e75..142e594 100644
--- a/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect
+++ b/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect
@@ -4,7 +4,7 @@
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_as_check.dart:9:8: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
 Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
   x as lib.C;
-       ^"]/* from null */;
+       ^^^"]/* from null */;
 static method main() → dynamic {}
 static method test(dynamic x) → dynamic {
   x as invalid-type;
diff --git a/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect b/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect
index e7e9db7..ef6d460 100644
--- a/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect
+++ b/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect
@@ -5,7 +5,7 @@
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_is_check.dart:9:14: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
 Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
   print(x is lib.C);
-             ^"]/* from null */;
+             ^^^"]/* from null */;
 static method main() → dynamic {}
 static method test(dynamic x) → dynamic {
   core::print(x is invalid-type);
diff --git a/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect b/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect
index cc18211..4d6d46d 100644
--- a/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect
+++ b/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect
@@ -4,7 +4,7 @@
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_type_declaration.dart:9:3: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
 Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
   lib.C x = null;
-  ^"]/* from null */;
+  ^^^"]/* from null */;
 static method main() → dynamic
   return self::test();
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/expressions.dart.strong.expect b/pkg/front_end/testcases/expressions.dart.strong.expect
index 49f6c0e..1fd98df 100644
--- a/pkg/front_end/testcases/expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/expressions.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/expressions.dart:74:16: Error: Method not found: 'int.toString'.
     print(int?.toString());
-               ^"]/* from null */;
+               ^^^^^^^^"]/* from null */;
 static method foo({dynamic fisk = null}) → dynamic {
   core::print(fisk);
 }
diff --git a/pkg/front_end/testcases/future_or_test.dart b/pkg/front_end/testcases/future_or_test.dart
new file mode 100644
index 0000000..375589d
--- /dev/null
+++ b/pkg/front_end/testcases/future_or_test.dart
@@ -0,0 +1,27 @@
+// 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.
+
+// The test checks that an expression with static type Future<dynamic> is
+// accepted as a return expression of a method with an async body and the
+// declared return type Future<int>.
+
+import 'dart:async';
+
+class A {
+  dynamic foo() => null;
+}
+
+class B {
+  A a;
+
+  Future<dynamic> bar() async => a.foo();
+}
+
+class C {
+  B b = B();
+
+  Future<int> baz() async => b.bar();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/future_or_test.dart.direct.expect b/pkg/front_end/testcases/future_or_test.dart.direct.expect
new file mode 100644
index 0000000..ea64edd
--- /dev/null
+++ b/pkg/front_end/testcases/future_or_test.dart.direct.expect
@@ -0,0 +1,29 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic
+    return null;
+}
+class B extends core::Object {
+  field self::A a = null;
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method bar() → asy::Future<dynamic> async 
+    return this.{self::B::a}.foo();
+}
+class C extends core::Object {
+  field self::B b = new self::B::•();
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method baz() → asy::Future<core::int> async 
+    return this.{self::C::b}.bar();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/future_or_test.dart.outline.expect b/pkg/front_end/testcases/future_or_test.dart.outline.expect
new file mode 100644
index 0000000..e69e132
--- /dev/null
+++ b/pkg/front_end/testcases/future_or_test.dart.outline.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo() → dynamic
+    ;
+}
+class B extends core::Object {
+  field self::A a;
+  synthetic constructor •() → void
+    ;
+  method bar() → asy::Future<dynamic>
+    ;
+}
+class C extends core::Object {
+  field self::B b;
+  synthetic constructor •() → void
+    ;
+  method baz() → asy::Future<core::int>
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/future_or_test.dart.strong.expect b/pkg/front_end/testcases/future_or_test.dart.strong.expect
new file mode 100644
index 0000000..253d160
--- /dev/null
+++ b/pkg/front_end/testcases/future_or_test.dart.strong.expect
@@ -0,0 +1,29 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic
+    return null;
+}
+class B extends core::Object {
+  field self::A a = null;
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method bar() → asy::Future<dynamic> async 
+    return this.{self::B::a}.{self::A::foo}();
+}
+class C extends core::Object {
+  field self::B b = new self::B::•();
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method baz() → asy::Future<core::int> async 
+    return this.{self::C::b}.{self::B::bar}() as{TypeError} asy::FutureOr<core::int>;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
index 96f3264..dc19dc1 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
@@ -4,11 +4,11 @@
 
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression.dart:6:11: Error: A function expression can't have a return type.
   var x = void f<T>(T t) {};
-          ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
+          ^^^^", "pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
   var x = void f<T>(T t) {};
                ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:9: Error: A function expression can't have a return type.
   print(void g<T>(T t) {});
-        ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.
+        ^^^^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.
   print(void g<T>(T t) {});
              ^"]/* from null */;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
index 1bc8dba..f1c5274 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
@@ -4,11 +4,11 @@
 
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression.dart:6:11: Error: A function expression can't have a return type.
   var x = void f<T>(T t) {};
-          ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
+          ^^^^", "pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
   var x = void f<T>(T t) {};
                ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:9: Error: A function expression can't have a return type.
   print(void g<T>(T t) {});
-        ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.
+        ^^^^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.
   print(void g<T>(T t) {});
              ^"]/* from null */;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect
index 793fc06..0bff178 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect
@@ -4,7 +4,7 @@
 
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:9: Error: A function expression can't have a return type.
   print(void f() {});
-        ^", "pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
+        ^^^^", "pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
   print(void f() {});
              ^"]/* from null */;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect
index fd8b0bb..9c4d9bd 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:9: Error: A function expression can't have a return type.
   print(void f() {});
-        ^", "pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
+        ^^^^", "pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
   print(void f() {});
              ^"]/* from null */;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/implicit_new.dart.strong.expect b/pkg/front_end/testcases/implicit_new.dart.strong.expect
index 8c23c2b..d959e33 100644
--- a/pkg/front_end/testcases/implicit_new.dart.strong.expect
+++ b/pkg/front_end/testcases/implicit_new.dart.strong.expect
@@ -26,9 +26,9 @@
 }
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/implicit_new.dart:18:18: Error: Method not found: 'Bar'.
   var y = prefix.Bar();
-                 ^", "pkg/front_end/testcases/implicit_new.dart:19:10: Error: Method not found: 'Bar'.
+                 ^^^", "pkg/front_end/testcases/implicit_new.dart:19:10: Error: Method not found: 'Bar'.
   prefix.Bar();
-         ^"]/* from null */;
+         ^^^"]/* from null */;
 static method testNSM() → dynamic {
   dynamic y = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
   throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
index 75a5d90..f3c83b5 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
@@ -16,13 +16,13 @@
 }
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/unresolved_super.dart:12:38: Error: Superclass has no method named 'foo'.
     var /*@type=dynamic*/ v1 = super.foo(/*@typeArgs=dynamic*/ f());
-                                     ^", "pkg/front_end/testcases/inference/unresolved_super.dart:13:38: Error: Superclass has no getter named 'bar'.
+                                     ^^^", "pkg/front_end/testcases/inference/unresolved_super.dart:13:38: Error: Superclass has no getter named 'bar'.
     var /*@type=dynamic*/ v2 = super.bar;
-                                     ^", "pkg/front_end/testcases/inference/unresolved_super.dart:14:37: Error: Superclass has no method named '[]'.
+                                     ^^^", "pkg/front_end/testcases/inference/unresolved_super.dart:14:37: Error: Superclass has no method named '[]'.
     var /*@type=dynamic*/ v3 = super[0];
                                     ^", "pkg/front_end/testcases/inference/unresolved_super.dart:15:38: Error: Superclass has no setter named 'bar'.
     var /*@type=dynamic*/ v4 = super.bar = /*@typeArgs=dynamic*/ f();
-                                     ^", "pkg/front_end/testcases/inference/unresolved_super.dart:16:37: Error: Superclass has no method named '[]='.
+                                     ^^^", "pkg/front_end/testcases/inference/unresolved_super.dart:16:37: Error: Superclass has no method named '[]='.
     var /*@type=dynamic*/ v5 = super[0] = /*@typeArgs=dynamic*/ f();
                                     ^"]/* from null */;
 static method f<T extends core::Object>() → self::f::T
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.direct.expect
new file mode 100644
index 0000000..4a8c9a0
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.direct.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    col::LinkedListEntry<dynamic> bar;
+  }
+}
+static method main() → dynamic {
+  col::LinkedListEntry<dynamic> bar;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.outline.expect
new file mode 100644
index 0000000..54cb769
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.outline.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.direct.expect
new file mode 100644
index 0000000..473030f
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.direct.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    dynamic a = <self::A<dynamic>>[];
+  }
+}
+static method main() → dynamic {
+  dynamic a = <self::A<dynamic>>[];
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.outline.expect
new file mode 100644
index 0000000..e894545
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.outline.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.direct.expect
new file mode 100644
index 0000000..b96b592
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.direct.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<U extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method fun() → dynamic {
+    core::List<self::A<self::B::U>> foo = <self::A<self::B::U>>[];
+    core::List<self::A<core::num>> bar = <self::A<core::num>>[];
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.outline.expect
new file mode 100644
index 0000000..73d2f33
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.outline.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class B<U extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method fun() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.direct.expect
new file mode 100644
index 0000000..571bb1b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.direct.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    dynamic a = <self::A<dynamic>, self::A<dynamic>>{};
+  }
+}
+static method main() → dynamic {
+  dynamic a = <self::A<dynamic>, self::A<dynamic>>{};
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.outline.expect
new file mode 100644
index 0000000..e894545
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.outline.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.direct.expect
new file mode 100644
index 0000000..b7936f1
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.direct.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+class A<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method fun() → dynamic {
+    self::A<dynamic> a;
+    col::DoubleLinkedQueue<dynamic> c;
+  }
+}
+static method main() → dynamic {
+  self::A<dynamic> a;
+  col::DoubleLinkedQueue<dynamic> c;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.outline.expect
new file mode 100644
index 0000000..09674b8
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.outline.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method fun() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.direct.expect
new file mode 100644
index 0000000..174756c
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.direct.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends self::A<self::A::T>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    self::A<dynamic> a;
+  }
+}
+static method main() → dynamic {
+  self::A<dynamic> a;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.outline.expect
new file mode 100644
index 0000000..4d3d1cf
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.outline.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends self::A<self::A::T>> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.direct.expect
new file mode 100644
index 0000000..7d3b891
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.direct.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    dynamic a = <(dynamic) → dynamic>[];
+  }
+}
+static method main() → dynamic {
+  dynamic a = <(dynamic) → dynamic>[];
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.outline.expect
new file mode 100644
index 0000000..145b481
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.outline.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+class B extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.direct.expect
new file mode 100644
index 0000000..52cb506
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.direct.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+class B<U extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method fun() → dynamic {
+    core::List<(self::B::U) → dynamic> foo = <(self::B::U) → dynamic>[];
+    core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
+  }
+}
+static method main() → dynamic {
+  core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.outline.expect
new file mode 100644
index 0000000..540d4a9
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.outline.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+class B<U extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method fun() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.direct.expect
new file mode 100644
index 0000000..fd38c09
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.direct.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    dynamic a = <(dynamic) → dynamic, (dynamic) → dynamic>{};
+  }
+}
+static method main() → dynamic {
+  dynamic a = <(dynamic) → dynamic, (dynamic) → dynamic>{};
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.outline.expect
new file mode 100644
index 0000000..145b481
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.outline.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+class B extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.direct.expect
new file mode 100644
index 0000000..ff7a612
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.direct.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    (dynamic) → dynamic a;
+  }
+}
+static method main() → dynamic {
+  (dynamic) → dynamic a;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.outline.expect
new file mode 100644
index 0000000..3c49af3
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.outline.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+class C extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.direct.expect
new file mode 100644
index 0000000..1712b9b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.direct.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+typedef B<U extends (U) → dynamic> = (U) → dynamic;
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    (dynamic) → dynamic b;
+  }
+}
+static method main() → dynamic {
+  (dynamic) → dynamic b;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.outline.expect
new file mode 100644
index 0000000..78f47f1
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+typedef B<U extends (U) → dynamic> = (U) → dynamic;
+class C extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.direct.expect
new file mode 100644
index 0000000..2a54655
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.direct.expect
@@ -0,0 +1,6 @@
+library;
+import self as self;
+import "dart:collection" as col;
+
+static field col::LinkedListEntry<col::LinkedListEntry<dynamic>> y;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.outline.expect
new file mode 100644
index 0000000..e9f3933
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.outline.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:collection" as col;
+
+static field col::LinkedListEntry<col::LinkedListEntry<dynamic>> y;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.direct.expect
new file mode 100644
index 0000000..a268770
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.direct.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  self::A<dynamic> a = new self::A::•<dynamic>();
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.outline.expect
new file mode 100644
index 0000000..4bea4fc
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.outline.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.direct.expect
new file mode 100644
index 0000000..7d9fe60
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.direct.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  new self::A::•<dynamic>();
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.outline.expect
new file mode 100644
index 0000000..4bea4fc
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.outline.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.direct.expect
new file mode 100644
index 0000000..964c2f9
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.direct.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<T extends core::num, S extends core::List<self::B::T>> extends self::A<self::B::T> {
+  constructor •([self::B::T x = null]) → void
+    : super self::A::•() {}
+}
+static method main() → dynamic {
+  self::B<dynamic, dynamic> x;
+  dynamic y = new self::B::•<dynamic, dynamic>(3);
+  self::A<core::int> z = new self::B::•<dynamic, dynamic>();
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.outline.expect
new file mode 100644
index 0000000..feaa0f3
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class B<T extends core::num, S extends core::List<self::B::T>> extends self::A<self::B::T> {
+  constructor •([self::B::T x]) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.direct.expect
new file mode 100644
index 0000000..b7dd39e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.direct.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class B<T extends core::Comparable<self::B::T>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field dynamic y = new self::B::•<dynamic>();
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.outline.expect
new file mode 100644
index 0000000..50dad2d
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.outline.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class B<T extends core::Comparable<self::B::T>> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static field dynamic y;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.direct.expect
new file mode 100644
index 0000000..f455106
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.direct.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(self::A<dynamic> a) → dynamic
+    return null;
+  method bar() → self::A<dynamic>
+    return null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.outline.expect
new file mode 100644
index 0000000..792d380
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.outline.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo(self::A<dynamic> a) → dynamic
+    ;
+  method bar() → self::A<dynamic>
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.direct.expect
new file mode 100644
index 0000000..4d4eb3a
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.direct.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field dynamic a = <self::A<dynamic>>[];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.outline.expect
new file mode 100644
index 0000000..303959e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.outline.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static field dynamic a;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.direct.expect
new file mode 100644
index 0000000..7c0008d
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.direct.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<S extends core::Object> extends core::Object {
+  final field core::List<self::A<self::B::S>> foo = <self::A<self::B::S>>[];
+  final field core::List<self::A<core::num>> bar = <self::A<core::num>>[];
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.outline.expect
new file mode 100644
index 0000000..30f1130
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.outline.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class B<S extends core::Object> extends core::Object {
+  final field core::List<self::A<self::B::S>> foo;
+  final field core::List<self::A<core::num>> bar;
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.direct.expect
new file mode 100644
index 0000000..cde27c3
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.direct.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field dynamic a = <self::A<dynamic>, self::A<dynamic>>{};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.outline.expect
new file mode 100644
index 0000000..303959e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.outline.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static field dynamic a;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.direct.expect
new file mode 100644
index 0000000..bd60470
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.direct.expect
@@ -0,0 +1,22 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+class A<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → self::A<dynamic>
+    return null;
+  method baz() → col::DoubleLinkedQueue<dynamic>
+    return null;
+}
+static field self::A<dynamic> a;
+static field col::DoubleLinkedQueue<dynamic> c;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.outline.expect
new file mode 100644
index 0000000..b822c38
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.outline.expect
@@ -0,0 +1,21 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+class A<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo() → self::A<dynamic>
+    ;
+  method baz() → col::DoubleLinkedQueue<dynamic>
+    ;
+}
+static field self::A<dynamic> a;
+static field col::DoubleLinkedQueue<dynamic> c;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.direct.expect
new file mode 100644
index 0000000..bb24dfc
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.direct.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<T extends self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.outline.expect
new file mode 100644
index 0000000..1cbb0e9
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class B<T extends self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.direct.expect
new file mode 100644
index 0000000..2f1df6b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.direct.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends self::A<self::A::T>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field self::A<dynamic> a;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.outline.expect
new file mode 100644
index 0000000..e3addef
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.outline.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends self::A<self::A::T>> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static field self::A<dynamic> a;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.direct.expect
new file mode 100644
index 0000000..159c3d8
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.direct.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class X<T extends self::B> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Y extends self::X<dynamic> {
+  synthetic constructor •() → void
+    : super self::X::•()
+    ;
+}
+static method main() → void {
+  exp::Expect::isTrue(new self::Y::•() is self::X<dynamic>);
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.outline.expect
new file mode 100644
index 0000000..a9960ece
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.outline.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class X<T extends self::B> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class Y extends self::X<dynamic> {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.direct.expect
new file mode 100644
index 0000000..2e8df2e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.direct.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo((dynamic) → dynamic a) → dynamic
+    return null;
+  method bar() → (dynamic) → dynamic
+    return null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.outline.expect
new file mode 100644
index 0000000..bf24d2c
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.outline.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+class B extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo((dynamic) → dynamic a) → dynamic
+    ;
+  method bar() → (dynamic) → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.direct.expect
new file mode 100644
index 0000000..3e9d62e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.direct.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+static field dynamic a = <(dynamic) → dynamic>[];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.outline.expect
new file mode 100644
index 0000000..9545c7a
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.outline.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+static field dynamic a;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.direct.expect
new file mode 100644
index 0000000..b156915
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.direct.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+class B<S extends core::Object> extends core::Object {
+  final field core::List<(self::B::S) → dynamic> foo = <(self::B::S) → dynamic>[];
+  final field core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.outline.expect
new file mode 100644
index 0000000..fb0ee2e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.outline.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+class B<S extends core::Object> extends core::Object {
+  final field core::List<(self::B::S) → dynamic> foo;
+  final field core::List<(core::num) → dynamic> bar;
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.direct.expect
new file mode 100644
index 0000000..5258ebf
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.direct.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+static field dynamic a = <(dynamic) → dynamic, (dynamic) → dynamic>{};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.outline.expect
new file mode 100644
index 0000000..9545c7a
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.outline.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+static field dynamic a;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.direct.expect
new file mode 100644
index 0000000..f3c3c27
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.direct.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → (dynamic) → dynamic
+    return null;
+}
+static field (dynamic) → dynamic a;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.outline.expect
new file mode 100644
index 0000000..6a2e4db
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+class C extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo() → (dynamic) → dynamic
+    ;
+}
+static field (dynamic) → dynamic a;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.direct.expect
new file mode 100644
index 0000000..ddb4888
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.direct.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+class B<T extends (dynamic) → dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.outline.expect
new file mode 100644
index 0000000..8e00857
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.outline.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::num> = (T) → dynamic;
+class B<T extends (dynamic) → dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.direct.expect
new file mode 100644
index 0000000..819253e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.direct.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+typedef B<S extends (S) → dynamic> = (S) → dynamic;
+static field (dynamic) → dynamic b;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.outline.expect
new file mode 100644
index 0000000..61fcce0
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.outline.expect
@@ -0,0 +1,9 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object> = (T) → dynamic;
+typedef B<S extends (S) → dynamic> = (S) → dynamic;
+static field (dynamic) → dynamic b;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
index 655bd55..58551e4 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
@@ -25,7 +25,7 @@
 }
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
   foo() => super.foo() + f();
-                 ^"]/* from null */;
+                 ^^^"]/* from null */;
 static method f() → dynamic
   return 2;
 static method V() → dynamic
diff --git a/pkg/front_end/testcases/rasta/super.dart.strong.expect b/pkg/front_end/testcases/rasta/super.dart.strong.expect
index ad45ff5..5462697 100644
--- a/pkg/front_end/testcases/rasta/super.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.strong.expect
@@ -57,14 +57,14 @@
     ^").+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     +super;
-     ^");
+     ^^^^^");
     self::use((let final dynamic #t2 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:9: Error: The getter '' isn't defined for the class '#lib1::C'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named ''.
     use(+super);
         ^").+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     use(+super);
-         ^"));
+         ^^^^^"));
     super.{self::A::==}(87);
     self::use(super.{self::A::==}(87));
     !super.{self::A::==}(87);
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 d54f59b..fb1ba40 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
@@ -43,7 +43,7 @@
 }
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
   foo() => super.foo() + f();
-                 ^"]/* from null */;
+                 ^^^"]/* from null */;
 static method main() → dynamic {
   core::print(new self::C::•<dynamic>().{mix::Mixin::foo}());
   core::print(new self::C2::•<dynamic>().{mix::Mixin::foo}());
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
index 7c3b9a7..678b455 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29940.dart:7:3: Error: 'a.b' isn't a type.
   a.b c = null;
-  ^"]/* from null */;
+  ^^^"]/* from null */;
 static method main() → dynamic {
   core::String a = "";
   invalid-type c = null;
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
index 0e9a426..eea6787 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
@@ -5,6 +5,6 @@
   dynamic a = "";
   invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.
   a.\"\";
-    ^";
+    ^^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
index b09dbe3..5c24424 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
@@ -6,6 +6,6 @@
   core::String a = "";
   invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.
   a.\"\";
-    ^";
+    ^^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
index f428fd7..dd9f49e 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
@@ -3,7 +3,7 @@
 
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29945.dart:6:3: Error: 's.bool' can't be used as a type because 's' isn't defined.
   s.bool x = null;
-  ^"]/* from null */;
+  ^^^^^^"]/* from null */;
 static method main() → dynamic {
   invalid-type x = null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
index 57e6d91..d73d7b3 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
@@ -3,7 +3,7 @@
 
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29980.dart:6:3: Error: 'x.y' can't be used as a type because 'x' isn't defined.
   x.y z;
-  ^"]/* from null */;
+  ^^^"]/* from null */;
 static method main() → dynamic {
   invalid-type z;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
index fce02e6..f750a0b 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
@@ -4,9 +4,9 @@
 
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Getter not found: 'missing'.
   return missing;
-         ^", "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Getter not found: 'dummy'.
+         ^^^^^^^", "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Getter not found: 'dummy'.
 g() sync* => dummy;
-             ^"]/* from null */;
+             ^^^^^"]/* from null */;
 static method f() → dynamic sync* {
   invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.
   return missing;
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
index 3dab4b4..a54d2f6 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
@@ -9,7 +9,7 @@
 }
 ^", "pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Getter not found: '\u55357\u56603'.
   \u55357\u56603
-  ^"]/* from null */;
+  ^^"]/* from null */;
 static method bad() → dynamic {
   throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#🔛, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
index 36747ec..3911009 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
@@ -13,9 +13,9 @@
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31183.dart:6:3: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 Try adding the name of the type of the variable or the keyword 'var'.
   operator unary- => 0;
-  ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Expected ';' before this.
+  ^^^^^^^^", "pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Expected ';' before this.
   operator unary- => 0;
-           ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: Operator declarations must be preceeded by the keyword 'operator'.
+           ^^^^^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: Operator declarations must be preceeded by the keyword 'operator'.
 Try adding the keyword 'operator'.
   operator unary- => 0;
                 ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
index 36747ec..3911009 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
@@ -13,9 +13,9 @@
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31183.dart:6:3: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 Try adding the name of the type of the variable or the keyword 'var'.
   operator unary- => 0;
-  ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Expected ';' before this.
+  ^^^^^^^^", "pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Expected ';' before this.
   operator unary- => 0;
-           ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: Operator declarations must be preceeded by the keyword 'operator'.
+           ^^^^^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: Operator declarations must be preceeded by the keyword 'operator'.
 Try adding the keyword 'operator'.
   operator unary- => 0;
                 ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
index d5b19d5..db52098 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
@@ -4,6 +4,6 @@
 static method bad() → dynamic {
   return invalid-expression "pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.
   return null?.true;
-               ^";
+               ^^^^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
index d5b19d5..db52098 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
@@ -4,6 +4,6 @@
 static method bad() → dynamic {
   return invalid-expression "pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.
   return null?.true;
-               ^";
+               ^^^^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
index aa56e27..2eacbb9 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
@@ -8,7 +8,8 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31190.dart: Error: Can't use type arguments with type variable 'T'.", "pkg/front_end/testcases/regress/issue_31190.dart:6:5: Error: 'U' isn't a type.
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31190.dart: Error: Can't use type arguments with type variable 'T'.
+Try removing the type arguments.", "pkg/front_end/testcases/regress/issue_31190.dart:6:5: Error: 'U' isn't a type.
   T<U> v;
     ^", "pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: 'T' expects 0 type arguments.
   T<U> v;
diff --git a/pkg/front_end/testcases/regress/issue_32196.dart b/pkg/front_end/testcases/regress/issue_32196.dart
new file mode 100644
index 0000000..254d45c
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32196.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.
+
+class A {
+  final String name;
+  A.get(this.name);
+  A.set(this.name);
+}
+
+main() {
+  new A.get("get");
+  new A.set("set");
+}
diff --git a/pkg/front_end/testcases/regress/issue_32196.dart.direct.expect b/pkg/front_end/testcases/regress/issue_32196.dart.direct.expect
new file mode 100644
index 0000000..bf9d1e2
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32196.dart.direct.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String name;
+  constructor get(core::String name) → void
+    : self::A::name = name, super core::Object::•()
+    ;
+  constructor set(core::String name) → void
+    : self::A::name = name, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  new self::A::get("get");
+  new self::A::set("set");
+}
diff --git a/pkg/front_end/testcases/regress/issue_32196.dart.outline.expect b/pkg/front_end/testcases/regress/issue_32196.dart.outline.expect
new file mode 100644
index 0000000..383d16c
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32196.dart.outline.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String name;
+  constructor get(core::String name) → void
+    ;
+  constructor set(core::String name) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/regress/issue_32196.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32196.dart.strong.expect
new file mode 100644
index 0000000..bf9d1e2
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32196.dart.strong.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String name;
+  constructor get(core::String name) → void
+    : self::A::name = name, super core::Object::•()
+    ;
+  constructor set(core::String name) → void
+    : self::A::name = name, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  new self::A::get("get");
+  new self::A::set("set");
+}
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
index cae1a3e..d4cce8e 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
@@ -10,7 +10,7 @@
 }
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_32200.dart:8:3: Error: 'self.Foo' can't be used as a type because 'self' doesn't refer to an import prefix.
   self.Foo self;
-  ^"]/* from null */;
+  ^^^^^^^^"]/* from null */;
 static method main() → dynamic {
   self::Foo instance = new self::Foo::•();
   instance.{self::Foo::self} = instance;
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.strong.expect
index c90556c..a7d91b4 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.strong.expect
@@ -9,5 +9,5 @@
   method call() → void {}
 }
 static method main() → dynamic {
-  () → void x = new self::C::•().{self::C::call};
+  () → void x = let final self::C #t1 = new self::C::•() in #t1.==(null) ?{() → void} null : #t1.{self::C::call};
 }
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.strong.expect
index 6dceb86..6429b52 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.strong.expect
@@ -10,5 +10,5 @@
   method call() → void {}
 }
 static method main() → dynamic {
-  asy::FutureOr<() → void> x = new self::C::•().{self::C::call};
+  asy::FutureOr<() → void> x = let final self::C #t1 = new self::C::•() in #t1.==(null) ?{() → void} null : #t1.{self::C::call};
 }
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index ac2d0fe..8168094 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -52,8 +52,7 @@
         "/testcases/.*_part[0-9]*\\.dart$",
         "/testcases/.*_lib[0-9]*\\.dart$",
         "/testcases/dartino/",
-        "/testcases/shaker/",
-        "/testcases/instantiate_to_bound/"
+        "/testcases/shaker/"
       ]
     },
 
@@ -70,8 +69,7 @@
         "/testcases/.*_part[0-9]*\\.dart$",
         "/testcases/.*_lib[0-9]*\\.dart$",
         "/testcases/dartino/",
-        "/testcases/shaker/",
-        "/testcases/instantiate_to_bound/"
+        "/testcases/shaker/"
       ]
     },
 
diff --git a/pkg/front_end/tool/_fasta/generate_messages.dart b/pkg/front_end/tool/_fasta/generate_messages.dart
index 485eaf5..83d821c 100644
--- a/pkg/front_end/tool/_fasta/generate_messages.dart
+++ b/pkg/front_end/tool/_fasta/generate_messages.dart
@@ -16,6 +16,7 @@
   'ERROR': 'error',
   'ERROR_LEGACY_WARNING': 'errorLegacyWarning',
   'INTERNAL_PROBLEM': 'internalProblem',
+  'CONTEXT': 'context',
 };
 
 main(List<String> arguments) async {
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 85e2fbe..a8ae768e 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -349,7 +349,8 @@
   FileOffset fileEndOffset;
   Byte kind; // Index into the ProcedureKind enum above.
   Byte flags (isStatic, isAbstract, isExternal, isConst, isForwardingStub,
-              isGenericContravariant, isForwardingSemiStub);
+              isGenericContravariant, isForwardingSemiStub,
+              isRedirectingFactoryConstructor);
   Name name;
   // An absolute path URI to the .dart file from which the class was created.
   UriReference fileUri;
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index dcbffd3..95c0b5f 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -1172,7 +1172,7 @@
   void set isGenericContravariant(bool value) {
     flags2 = value
         ? (flags2 | Flag2GenericContravariant)
-        : (flags & ~Flag2GenericContravariant);
+        : (flags2 & ~Flag2GenericContravariant);
   }
 
   /// True if the field is neither final nor const.
@@ -1546,6 +1546,8 @@
   static const int FlagForwardingStub = 1 << 4;
   static const int FlagGenericContravariant = 1 << 5;
   static const int FlagForwardingSemiStub = 1 << 6;
+  // TODO(29841): Remove this flag after the issue is resolved.
+  static const int FlagRedirectingFactoryConstructor = 1 << 7;
 
   bool get isStatic => flags & FlagStatic != 0;
   bool get isAbstract => flags & FlagAbstract != 0;
@@ -1577,6 +1579,12 @@
   /// stub, it was present in the original source as an abstract method.
   bool get isForwardingSemiStub => flags & FlagForwardingSemiStub != 0;
 
+  // Indicates if this [Procedure] represents a redirecting factory constructor
+  // and doesn't have a runnable body.
+  bool get isRedirectingFactoryConstructor {
+    return flags & FlagRedirectingFactoryConstructor != 0;
+  }
+
   /// If set, this flag indicates that this function was not present in the
   /// source, and it exists solely for the purpose of type checking arguments
   /// and forwarding to [forwardingStubSuperTarget].
@@ -1615,6 +1623,12 @@
         : (flags & ~FlagForwardingSemiStub);
   }
 
+  void set isRedirectingFactoryConstructor(bool value) {
+    flags = value
+        ? (flags | FlagRedirectingFactoryConstructor)
+        : (flags & ~FlagRedirectingFactoryConstructor);
+  }
+
   bool get isInstanceMember => !isStatic;
   bool get isGetter => kind == ProcedureKind.Getter;
   bool get isSetter => kind == ProcedureKind.Setter;
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
index a38f134..59ec97b 100644
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
@@ -152,6 +152,9 @@
       // application.  They should not be copied.
       if (procedure.isForwardingStub) continue;
 
+      // Factory constructors are not cloned.
+      if (procedure.isFactory) continue;
+
       Procedure clone = cloner.clone(procedure);
       // Linear search for a forwarding stub with the same name.
       for (int i = 0; i < originalLength; ++i) {
@@ -160,6 +163,15 @@
             originalProcedure.kind == clone.kind) {
           FunctionNode src = originalProcedure.function;
           FunctionNode dst = clone.function;
+
+          if (src.positionalParameters.length !=
+                  dst.positionalParameters.length ||
+              src.namedParameters.length != dst.namedParameters.length) {
+            // A compile time error has already occured, but don't crash below,
+            // and don't add several procedures with the same name to the class.
+            continue outer;
+          }
+
           assert(src.typeParameters.length == dst.typeParameters.length);
           for (int j = 0; j < src.typeParameters.length; ++j) {
             dst.typeParameters[j].flags = src.typeParameters[i].flags;
@@ -168,6 +180,8 @@
             dst.positionalParameters[j].flags =
                 src.positionalParameters[j].flags;
           }
+          // TODO(kernel team): The named parameters are not sorted,
+          // this might not be correct.
           for (int j = 0; j < src.namedParameters.length; ++j) {
             dst.namedParameters[j].flags = src.namedParameters[j].flags;
           }
diff --git a/pkg/kernel/lib/transformations/treeshaker.dart b/pkg/kernel/lib/transformations/treeshaker.dart
index c64205c..6d482b0 100644
--- a/pkg/kernel/lib/transformations/treeshaker.dart
+++ b/pkg/kernel/lib/transformations/treeshaker.dart
@@ -1161,22 +1161,22 @@
     }
   }
 
-  visitCovariant(DartType type) => type?.accept(this);
+  void visitCovariant(DartType type) => type?.accept(this);
 
-  visitInvariant(DartType type) => shaker._invariantVisitor.visit(type);
+  void visitInvariant(DartType type) => shaker._invariantVisitor.visit(type);
 
-  visitInvalidType(InvalidType node) {}
+  void visitInvalidType(InvalidType node) {}
 
-  visitDynamicType(DynamicType node) {
+  void visitDynamicType(DynamicType node) {
     // TODO(asgerf): Find a suitable model for untyped externals, e.g. track
     // them to the first type boundary.
   }
 
-  visitVoidType(VoidType node) {}
+  void visitVoidType(VoidType node) {}
 
-  visitVectorType(VectorType node) {}
+  void visitVectorType(VectorType node) {}
 
-  visitInterfaceType(InterfaceType node) {
+  void visitInterfaceType(InterfaceType node) {
     if (isCovariant) {
       shaker._addInstantiatedExternalSubclass(node.classNode);
     }
@@ -1197,11 +1197,11 @@
     }
   }
 
-  visitTypedefType(TypedefType node) {
+  void visitTypedefType(TypedefType node) {
     shaker.addUsedTypedef(node.typedefNode);
   }
 
-  visitFunctionType(FunctionType node) {
+  void visitFunctionType(FunctionType node) {
     visit(node.returnType);
     for (int i = 0; i < node.positionalParameters.length; ++i) {
       visitContravariant(node.positionalParameters[i]);
@@ -1211,7 +1211,7 @@
     }
   }
 
-  visitTypeParameterType(TypeParameterType node) {}
+  void visitTypeParameterType(TypeParameterType node) {}
 
   /// Just treat a couple of whitelisted classes as having covariant type
   /// parameters.
diff --git a/pkg/testing/lib/src/chain.dart b/pkg/testing/lib/src/chain.dart
index 65bb9f0..15d74ac 100644
--- a/pkg/testing/lib/src/chain.dart
+++ b/pkg/testing/lib/src/chain.dart
@@ -56,7 +56,11 @@
 
   factory Chain.fromJsonMap(Uri base, Map json, String name, String kind) {
     Uri source = base.resolve(json["source"]);
-    Uri uri = base.resolve(json["path"]);
+    String path = json["path"];
+    if (!path.endsWith("/")) {
+      path += "/";
+    }
+    Uri uri = base.resolve(path);
     Uri statusFile = base.resolve(json["status"]);
     List<RegExp> pattern =
         new List<RegExp>.from(json["pattern"].map((String p) => new RegExp(p)));
diff --git a/pkg/testing/lib/src/log.dart b/pkg/testing/lib/src/log.dart
index 628d139..edd36638 100644
--- a/pkg/testing/lib/src/log.dart
+++ b/pkg/testing/lib/src/log.dart
@@ -4,6 +4,8 @@
 
 library testing.log;
 
+import 'dart:io' show stdout;
+
 import 'chain.dart' show Result, Step;
 
 import 'suite.dart' show Suite;
@@ -14,11 +16,17 @@
 
 /// ANSI escape code for moving cursor one line up.
 /// See [CSI codes](https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes).
-const String cursorUp = "\u001b[1A";
+const String cursorUpCodes = "\u001b[1A";
 
 /// ANSI escape code for erasing the entire line.
 /// See [CSI codes](https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes).
-const String eraseLine = "\u001b[2K";
+const String eraseLineCodes = "\u001b[2K";
+
+final bool enableAnsiEscapes = stdout.supportsAnsiEscapes;
+
+final String cursorUp = enableAnsiEscapes ? cursorUpCodes : "";
+
+final String eraseLine = enableAnsiEscapes ? eraseLineCodes : "";
 
 final Stopwatch wallclock = new Stopwatch()..start();
 
diff --git a/pkg/vm/bin/dump_kernel.dart b/pkg/vm/bin/dump_kernel.dart
index fb2ad81..1d0ea77 100644
--- a/pkg/vm/bin/dump_kernel.dart
+++ b/pkg/vm/bin/dump_kernel.dart
@@ -13,6 +13,8 @@
     show InferredTypeMetadataRepository;
 import 'package:vm/metadata/procedure_attributes.dart'
     show ProcedureAttributesMetadataRepository;
+import 'package:vm/metadata/unreachable.dart'
+    show UnreachableNodeMetadataRepository;
 
 final String _usage = '''
 Usage: dump_kernel input.dill output.txt
@@ -34,6 +36,7 @@
   program.addMetadataRepository(new DirectCallMetadataRepository());
   program.addMetadataRepository(new InferredTypeMetadataRepository());
   program.addMetadataRepository(new ProcedureAttributesMetadataRepository());
+  program.addMetadataRepository(new UnreachableNodeMetadataRepository());
 
   final List<int> bytes = new File(input).readAsBytesSync();
   new BinaryBuilderWithMetadata(bytes).readProgram(program);
diff --git a/pkg/vm/bin/gen_kernel.dart b/pkg/vm/bin/gen_kernel.dart
index be3b85d..c7e6fad 100644
--- a/pkg/vm/bin/gen_kernel.dart
+++ b/pkg/vm/bin/gen_kernel.dart
@@ -30,7 +30,10 @@
   ..addFlag('sync-async', help: 'Start `async` functions synchronously')
   ..addFlag('embed-sources',
       help: 'Embed source files in the generated kernel program',
-      defaultsTo: true);
+      defaultsTo: true)
+  ..addOption('entry-points',
+      help: 'Path to JSON file with the list of entry points',
+      allowMultiple: true);
 
 final String _usage = '''
 Usage: dart pkg/vm/bin/gen_kernel.dart --platform vm_platform_strong.dill [options] input.dart
@@ -67,21 +70,32 @@
   final bool aot = options['aot'];
   final bool syncAsync = options['sync-async'];
 
+  final List<String> entryPoints = options['entry-points'] ?? <String>[];
+  if (entryPoints.isEmpty) {
+    entryPoints.addAll([
+      'pkg/vm/lib/transformations/type_flow/entry_points.json',
+      'pkg/vm/lib/transformations/type_flow/entry_points_extra.json',
+    ]);
+  }
+
   ErrorDetector errorDetector = new ErrorDetector();
 
   final CompilerOptions compilerOptions = new CompilerOptions()
     ..strongMode = strongMode
     ..target = new VmTarget(
         new TargetFlags(strongMode: strongMode, syncAsync: syncAsync))
-    ..linkedDependencies = <Uri>[Uri.base.resolve(platformKernel)]
-    ..packagesFileUri = packages != null ? Uri.base.resolve(packages) : null
+    ..linkedDependencies = <Uri>[
+      Uri.base.resolveUri(new Uri.file(platformKernel))
+    ]
+    ..packagesFileUri =
+        packages != null ? Uri.base.resolveUri(new Uri.file(packages)) : null
     ..reportMessages = true
     ..onError = errorDetector
     ..embedSourceText = options['embed-sources'];
 
   Program program = await compileToKernel(
-      Uri.base.resolve(filename), compilerOptions,
-      aot: aot);
+      Uri.base.resolveUri(new Uri.file(filename)), compilerOptions,
+      aot: aot, entryPoints: entryPoints);
 
   if (errorDetector.hasCompilationErrors || (program == null)) {
     return _compileTimeErrorExitCode;
diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart
index b53b6bb..7423661 100644
--- a/pkg/vm/bin/kernel_service.dart
+++ b/pkg/vm/bin/kernel_service.dart
@@ -102,6 +102,9 @@
           case Severity.warning:
             if (!suppressWarnings) stderr.writeln(formatted);
             break;
+          case Severity.context:
+            stderr.writeln(formatted);
+            break;
         }
       };
   }
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index 298dae7..73e0ecd 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -33,7 +33,7 @@
 /// VM-specific replacement of [kernelForProgram].
 ///
 Future<Program> compileToKernel(Uri source, CompilerOptions options,
-    {bool aot: false}) async {
+    {bool aot: false, List<String> entryPoints}) async {
   // Replace error handler to detect if there are compilation errors.
   final errorDetector =
       new ErrorDetector(previousErrorHandler: options.onError);
@@ -46,18 +46,19 @@
 
   // Run global transformations only if program is correct.
   if (aot && (program != null) && !errorDetector.hasCompilationErrors) {
-    _runGlobalTransformations(program, options.strongMode);
+    _runGlobalTransformations(program, options.strongMode, entryPoints);
   }
 
   return program;
 }
 
-_runGlobalTransformations(Program program, bool strongMode) {
+_runGlobalTransformations(
+    Program program, bool strongMode, List<String> entryPoints) {
   if (strongMode) {
     final coreTypes = new CoreTypes(program);
 
     if (kUseGlobalTypeFlow) {
-      globalTypeFlow.transformProgram(coreTypes, program);
+      globalTypeFlow.transformProgram(coreTypes, program, entryPoints);
     } else {
       devirtualization.transformProgram(coreTypes, program);
     }
@@ -73,8 +74,7 @@
   ErrorDetector({this.previousErrorHandler});
 
   void call(CompilationMessage message) {
-    if ((message.severity != Severity.nit) &&
-        (message.severity != Severity.warning)) {
+    if (message.severity == Severity.error) {
       hasCompilationErrors = true;
     }
 
diff --git a/pkg/vm/lib/metadata/unreachable.dart b/pkg/vm/lib/metadata/unreachable.dart
new file mode 100644
index 0000000..aff77e2
--- /dev/null
+++ b/pkg/vm/lib/metadata/unreachable.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library vm.metadata.unreachable;
+
+import 'package:kernel/ast.dart';
+
+/// Metadata for annotating unreachable nodes. Note that the arguments
+/// of an unreachable node could still be reachable.
+/// Used to annotate calls and functions.
+class UnreachableNode {
+  const UnreachableNode();
+
+  @override
+  String toString() => '';
+}
+
+/// Repository for [UnreachableNode].
+class UnreachableNodeMetadataRepository
+    extends MetadataRepository<UnreachableNode> {
+  @override
+  final String tag = 'vm.unreachable.metadata';
+
+  @override
+  final Map<TreeNode, UnreachableNode> mapping = <TreeNode, UnreachableNode>{};
+
+  @override
+  void writeToBinary(UnreachableNode metadata, BinarySink sink) {}
+
+  @override
+  UnreachableNode readFromBinary(BinarySource source) {
+    return const UnreachableNode();
+  }
+}
diff --git a/pkg/vm/lib/transformations/type_flow/analysis.dart b/pkg/vm/lib/transformations/type_flow/analysis.dart
index 42b78f0..92f7ec2 100644
--- a/pkg/vm/lib/transformations/type_flow/analysis.dart
+++ b/pkg/vm/lib/transformations/type_flow/analysis.dart
@@ -27,7 +27,6 @@
 // === Correctness ===
 // * Verify incremental re-calculation by fresh analysis starting with known
 //   allocated classes.
-// * Auto-generate entry_points.json during build.
 //
 // === Precision ===
 // * Handle '==' with null.
@@ -163,7 +162,7 @@
         // Call via field.
         // TODO(alexmarkov): support function types and use inferred type
         // to get more precise return type.
-        return new Type.fromStatic(const DynamicType());
+        return new Type.nullableAny();
 
       case CallKind.FieldInitializer:
         assertx(args.values.isEmpty);
@@ -197,7 +196,7 @@
         // TODO(alexmarkov): capture receiver type
         assertx((member is Procedure) && !member.isGetter && !member.isSetter);
         typeFlowAnalysis.addRawCall(new DirectSelector(member));
-        return new Type.fromStatic(const DynamicType());
+        return new Type.nullableAny();
       } else {
         // Call via getter.
         // TODO(alexmarkov): capture receiver type
@@ -206,7 +205,7 @@
             member.isGetter);
         typeFlowAnalysis.addRawCall(
             new DirectSelector(member, callKind: CallKind.PropertyGet));
-        return new Type.fromStatic(const DynamicType());
+        return new Type.nullableAny();
       }
     }
   }
@@ -308,7 +307,7 @@
     // TODO(alexmarkov): handle closures more precisely
     if ((selector is DynamicSelector) && (selector.name.name == "call")) {
       tracePrint("Possible closure call, result is dynamic");
-      result = new Type.fromStatic(const DynamicType());
+      result = new Type.nullableAny();
     }
 
     return result;
@@ -505,17 +504,17 @@
 /// Efficient builder of receiver type.
 ///
 /// Supports the following operations:
-/// 1) Add 1..N concrete types OR add 1 arbitrary type.
+/// 1) Add 1..N concrete types ordered by classId OR add 1 arbitrary type.
 /// 2) Make type nullable.
 class _ReceiverTypeBuilder {
   Type _type;
-  Set<ConcreteType> _set;
+  List<ConcreteType> _list;
   bool _nullable = false;
 
   /// Appends a ConcreteType. May be called multiple times.
   /// Should not be used in conjunction with [addType].
   void addConcreteType(ConcreteType type) {
-    if (_set == null) {
+    if (_list == null) {
       if (_type == null) {
         _type = type;
         return;
@@ -524,19 +523,20 @@
       assertx(_type is ConcreteType);
       assertx(_type != type);
 
-      _set = new Set<ConcreteType>();
-      _set.add(_type);
+      _list = new List<ConcreteType>();
+      _list.add(_type);
 
       _type = null;
     }
 
-    _set.add(type);
+    assertx(_list.last.classId.compareTo(type.classId) < 0);
+    _list.add(type);
   }
 
   /// Appends an arbitrary Type. May be called only once.
   /// Should not be used in conjunction with [addConcreteType].
   void addType(Type type) {
-    assertx(_type == null && _set == null);
+    assertx(_type == null && _list == null);
     _type = type;
   }
 
@@ -549,13 +549,13 @@
   Type toType() {
     Type t = _type;
     if (t == null) {
-      if (_set == null) {
+      if (_list == null) {
         t = const EmptyType();
       } else {
-        t = new SetType(_set);
+        t = new SetType(_list);
       }
     } else {
-      assertx(_set == null);
+      assertx(_list == null);
     }
 
     if (_nullable) {
@@ -587,10 +587,11 @@
 
 class _FieldValue extends _DependencyTracker {
   final Field field;
+  final Type staticType;
   Type value;
   _DirectInvocation _initializerInvocation;
 
-  _FieldValue(this.field) {
+  _FieldValue(this.field) : staticType = new Type.fromStatic(field.type) {
     if (field.initializer == null && _isDefaultValueOfFieldObservable()) {
       value = new Type.nullable(const EmptyType());
     } else {
@@ -641,7 +642,9 @@
   }
 
   void setValue(Type newValue, TypeFlowAnalysis typeFlowAnalysis) {
-    final Type newType = value.union(newValue, typeFlowAnalysis.hierarchyCache);
+    final Type newType = value.union(
+        newValue.intersection(staticType, typeFlowAnalysis.hierarchyCache),
+        typeFlowAnalysis.hierarchyCache);
     if (newType != value) {
       tracePrint("Set field $field value $newType");
       invalidateDependentInvocations(typeFlowAnalysis.workList);
@@ -661,7 +664,8 @@
   _DynamicTargetSet(this.selector, this.isObjectMember);
 }
 
-class _ClassData extends _DependencyTracker {
+class _ClassData extends _DependencyTracker implements ClassId<_ClassData> {
+  final int _id;
   final Class class_;
   final Set<_ClassData> supertypes; // List of super-types including this.
   final Set<_ClassData> allocatedSubtypes = new Set<_ClassData>();
@@ -671,10 +675,23 @@
   /// Lazy initialized by _ClassHierarchyCache.hasNonTrivialNoSuchMethod().
   bool hasNonTrivialNoSuchMethod;
 
-  _ClassData(this.class_, this.supertypes) {
+  _ClassData(this._id, this.class_, this.supertypes) {
     supertypes.add(this);
   }
 
+  ConcreteType _concreteType;
+  ConcreteType get concreteType =>
+      _concreteType ??= new ConcreteType(this, class_.rawType);
+
+  @override
+  int get hashCode => _id;
+
+  @override
+  bool operator ==(other) => (other is _ClassData) && (this._id == other._id);
+
+  @override
+  int compareTo(_ClassData other) => this._id.compareTo(other._id);
+
   @override
   String toString() => "_C $class_";
 
@@ -697,6 +714,9 @@
   /// targets of invocations may appear.
   /// It also means that there is no need to add dependencies on classes.
   bool _sealed = false;
+
+  int _classIdCounter = 0;
+
   final Map<DynamicSelector, _DynamicTargetSet> _dynamicTargets =
       <DynamicSelector, _DynamicTargetSet>{};
 
@@ -716,15 +736,16 @@
     for (var sup in c.supers) {
       supertypes.addAll(getClassData(sup.classNode).supertypes);
     }
-    return new _ClassData(c, supertypes);
+    return new _ClassData(++_classIdCounter, c, supertypes);
   }
 
-  void addAllocatedClass(Class cl) {
+  ConcreteType addAllocatedClass(Class cl) {
     assertx(!cl.isAbstract);
     assertx(!_sealed);
 
+    final _ClassData classData = getClassData(cl);
+
     if (allocatedClasses.add(cl)) {
-      final _ClassData classData = getClassData(cl);
       classData.allocatedSubtypes.add(classData);
       classData.invalidateDependentInvocations(_typeFlowAnalysis.workList);
 
@@ -737,6 +758,8 @@
         _addDynamicTarget(cl, targetSet);
       }
     }
+
+    return classData.concreteType;
   }
 
   void seal() {
@@ -829,12 +852,14 @@
     if (numSubTypes == 0) {
       return new Type.empty();
     } else if (numSubTypes == 1) {
-      return new Type.concrete(allocatedSubtypes.single.class_.rawType);
+      return allocatedSubtypes.single.concreteType;
     } else {
-      Set<ConcreteType> types = new Set<ConcreteType>();
+      List<ConcreteType> types = new List<ConcreteType>();
       for (var sub in allocatedSubtypes) {
-        types.add(new Type.concrete(sub.class_.rawType));
+        types.add(sub.concreteType);
       }
+      // TODO(alexmarkov): cache result of specialization or keep allocatedSubtypes sorted
+      types.sort();
       return new SetType(types);
     }
   }
@@ -1089,17 +1114,8 @@
   }
 
   @override
-  void addAllocatedClass(Class c) {
+  ConcreteType addAllocatedClass(Class c) {
     debugPrint("ADD ALLOCATED CLASS: $c");
-    hierarchyCache.addAllocatedClass(c);
-  }
-
-  @override
-  void addAllocatedType(InterfaceType type) {
-    tracePrint("ADD ALLOCATED TYPE: $type");
-
-    // TODO(alexmarkov): take type arguments into account.
-
-    hierarchyCache.addAllocatedClass(type.classNode);
+    return hierarchyCache.addAllocatedClass(c);
   }
 }
diff --git a/pkg/vm/lib/transformations/type_flow/native_code.dart b/pkg/vm/lib/transformations/type_flow/native_code.dart
index bd07402..8dd75bc 100644
--- a/pkg/vm/lib/transformations/type_flow/native_code.dart
+++ b/pkg/vm/lib/transformations/type_flow/native_code.dart
@@ -20,15 +20,12 @@
 import 'types.dart';
 import 'utils.dart';
 
-class EntryPointsListener {
+abstract class EntryPointsListener {
   /// Add call by the given selector with arbitrary ('raw') arguments.
-  void addRawCall(Selector selector) {}
+  void addRawCall(Selector selector);
 
   /// Add instantiation of the given class.
-  void addAllocatedClass(Class c) {}
-
-  /// Add instantiation of the given type (may be generic).
-  void addAllocatedType(InterfaceType type) {}
+  ConcreteType addAllocatedClass(Class c);
 }
 
 /// Provides insights into the behavior of native code.
@@ -53,13 +50,13 @@
         if (action['action'] == 'return') {
           final c = _libraryIndex.getClass(action['library'], action['class']);
 
-          entryPointsListener.addAllocatedClass(c);
+          final concreteClass = entryPointsListener.addAllocatedClass(c);
 
           final nullable = action['nullable'];
           if (nullable == false) {
-            returnType = new Type.concrete(c.rawType);
+            returnType = concreteClass;
           } else if ((nullable == true) || (nullable == null)) {
-            returnType = new Type.nullable(new Type.concrete(c.rawType));
+            returnType = new Type.nullable(concreteClass);
           } else {
             throw 'Bad entry point: unexpected nullable: "$nullable" in $action';
           }
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index d5c121a..cb96d73 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -346,8 +346,8 @@
           final function = member.function;
           assertx(function != null);
 
-          for (var decl in function.positionalParameters) {
-            args.add(new Type.fromStatic(decl.type));
+          for (int i = 0; i < function.positionalParameters.length; i++) {
+            args.add(new Type.nullableAny());
           }
 
           // TODO(alexmarkov): take named parameters into account
@@ -358,7 +358,7 @@
         break;
 
       case CallKind.PropertySet:
-        args.add(new Type.fromStatic(member.setterType));
+        args.add(new Type.nullableAny());
         break;
 
       case CallKind.FieldInitializer:
@@ -443,9 +443,6 @@
   Type _staticType(Expression node) =>
       new Type.fromStatic(node.getStaticType(_environment));
 
-  Type _concreteType(DartType t) =>
-      (t == _environment.nullType) ? _nullType : new Type.concrete(t);
-
   Type _cachedBoolType;
   Type get _boolType =>
       _cachedBoolType ??= new Type.cone(_environment.boolType);
@@ -522,9 +519,8 @@
 
   @override
   TypeExpr visitConstructorInvocation(ConstructorInvocation node) {
-    final receiver = _concreteType(node.constructedType);
-
-    _entryPointsListener.addAllocatedType(node.constructedType);
+    final receiver =
+        _entryPointsListener.addAllocatedClass(node.constructedType.classNode);
 
     final args = _visitArguments(receiver, node.arguments);
     _makeCall(node, new DirectSelector(node.target), args);
@@ -1106,13 +1102,27 @@
   visitInvalidInitializer(InvalidInitializer node) {}
 }
 
+class EmptyEntryPointsListener implements EntryPointsListener {
+  final Map<Class, IntClassId> _classIds = <Class, IntClassId>{};
+  int _classIdCounter = 0;
+
+  @override
+  void addRawCall(Selector selector) {}
+
+  @override
+  ConcreteType addAllocatedClass(Class c) {
+    final classId = (_classIds[c] ??= new IntClassId(++_classIdCounter));
+    return new ConcreteType(classId, c.rawType);
+  }
+}
+
 class CreateAllSummariesVisitor extends RecursiveVisitor<Null> {
   final TypeEnvironment _environment;
   final SummaryCollector _summaryColector;
 
   CreateAllSummariesVisitor(this._environment)
       : _summaryColector = new SummaryCollector(_environment,
-            new EntryPointsListener(), new NativeCodeOracle(null));
+            new EmptyEntryPointsListener(), new NativeCodeOracle(null));
 
   @override
   defaultMember(Member m) {
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index 78e54e4..9bb6c65 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -21,6 +21,7 @@
 import '../devirtualization.dart' show Devirtualization;
 import '../../metadata/direct_call.dart';
 import '../../metadata/inferred_type.dart';
+import '../../metadata/unreachable.dart';
 
 const bool kDumpAllSummaries =
     const bool.fromEnvironment('global.type.flow.dump.all.summaries');
@@ -29,12 +30,12 @@
 
 /// Whole-program type flow analysis and transformation.
 /// Assumes strong mode and closed world.
-Program transformProgram(CoreTypes coreTypes, Program program,
-    // TODO(alexmarkov): Pass entry points descriptors from command line.
-    {List<String> entryPointsJSONFiles: const [
-      'pkg/vm/lib/transformations/type_flow/entry_points.json',
-      'pkg/vm/lib/transformations/type_flow/entry_points_extra.json',
-    ]}) {
+Program transformProgram(
+    CoreTypes coreTypes, Program program, List<String> entryPoints) {
+  if ((entryPoints == null) || entryPoints.isEmpty) {
+    throw 'Error: unable to perform global type flow analysis without entry points.';
+  }
+
   void ignoreAmbiguousSupertypes(Class cls, Supertype a, Supertype b) {}
   final hierarchy = new ClassHierarchy(program,
       onAmbiguousSupertypes: ignoreAmbiguousSupertypes);
@@ -51,7 +52,7 @@
   final analysisStopWatch = new Stopwatch()..start();
 
   final typeFlowAnalysis = new TypeFlowAnalysis(hierarchy, types, libraryIndex,
-      entryPointsJSONFiles: entryPointsJSONFiles);
+      entryPointsJSONFiles: entryPoints);
 
   Procedure main = program.mainMethod;
   final Selector mainSelector = new DirectSelector(main);
@@ -70,8 +71,7 @@
 
   new TFADevirtualization(program, typeFlowAnalysis).visitProgram(program);
 
-  new AnnotateWithInferredTypes(program, typeFlowAnalysis)
-      .visitProgram(program);
+  new AnnotateKernel(program, typeFlowAnalysis).visitProgram(program);
 
   transformsStopWatch.stop();
 
@@ -132,14 +132,17 @@
   }
 }
 
-/// Annotates kernel AST with types inferred by type flow analysis.
-class AnnotateWithInferredTypes extends RecursiveVisitor<Null> {
+/// Annotates kernel AST with metadata using results of type flow analysis.
+class AnnotateKernel extends RecursiveVisitor<Null> {
   final TypeFlowAnalysis _typeFlowAnalysis;
-  final InferredTypeMetadataRepository _metadata;
+  final InferredTypeMetadataRepository _inferredTypeMetadata;
+  final UnreachableNodeMetadataRepository _unreachableNodeMetadata;
 
-  AnnotateWithInferredTypes(Program program, this._typeFlowAnalysis)
-      : _metadata = new InferredTypeMetadataRepository() {
-    program.addMetadataRepository(_metadata);
+  AnnotateKernel(Program program, this._typeFlowAnalysis)
+      : _inferredTypeMetadata = new InferredTypeMetadataRepository(),
+        _unreachableNodeMetadata = new UnreachableNodeMetadataRepository() {
+    program.addMetadataRepository(_inferredTypeMetadata);
+    program.addMetadataRepository(_unreachableNodeMetadata);
   }
 
   InferredType _convertType(Type type) {
@@ -171,14 +174,24 @@
   void _setInferredType(TreeNode node, Type type) {
     final inferredType = _convertType(type);
     if (inferredType != null) {
-      _metadata.mapping[node] = inferredType;
+      _inferredTypeMetadata.mapping[node] = inferredType;
     }
   }
 
+  void _setUnreachable(TreeNode node) {
+    _unreachableNodeMetadata.mapping[node] = const UnreachableNode();
+  }
+
   void _annotateCallSite(TreeNode node) {
     final callSite = _typeFlowAnalysis.callSite(node);
-    if ((callSite != null) && callSite.isResultUsed && callSite.isReachable) {
-      _setInferredType(node, callSite.resultType);
+    if (callSite != null) {
+      if (callSite.isReachable) {
+        if (callSite.isResultUsed) {
+          _setInferredType(node, callSite.resultType);
+        }
+      } else {
+        _setUnreachable(node);
+      }
     }
   }
 
@@ -204,6 +217,8 @@
         // 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 c8249b0..7b0b6f8 100644
--- a/pkg/vm/lib/transformations/type_flow/types.dart
+++ b/pkg/vm/lib/transformations/type_flow/types.dart
@@ -32,7 +32,14 @@
     return const DynamicType();
   } else if (type is TypeParameterType) {
     // TODO(alexmarkov): instantiate type parameters if possible
-    return _normalizeDartType(type.bound);
+    final bound = type.bound;
+    // Protect against infinite recursion in case of cyclic type parameters
+    // like 'T extends T'. As of today, front-end doesn't report errors in such
+    // cases yet.
+    if (bound is TypeParameterType) {
+      return const DynamicType();
+    }
+    return _normalizeDartType(bound);
   }
   return type;
 }
@@ -68,24 +75,18 @@
     }
   }
 
-  /// Create a type representing instances of a specific class (no subtypes
-  /// or `null` object).
-  factory Type.concrete(DartType dartType) {
-    // Catch certain unexpected types before _normalizeDartType() erases them.
-    assertx(dartType is! FunctionType);
-    assertx(dartType is! TypeParameterType);
-    return new ConcreteType(_normalizeDartType(dartType));
-  }
-
   /// Create a nullable type - union of [t] and the `null` object.
   factory Type.nullable(Type t) => new NullableType(t);
 
+  /// Create a type representing arbitrary nullable object (`dynamic`).
+  factory Type.nullableAny() => new NullableType(const AnyType());
+
   /// Create a Type which corresponds to a set of instances constrained by
   /// Dart type annotation [dartType].
   factory Type.fromStatic(DartType dartType) {
     dartType = _normalizeDartType(dartType);
     if ((dartType == const DynamicType()) || (dartType == const VoidType())) {
-      return new Type.nullable(const AnyType());
+      return new Type.nullableAny();
     } else if (dartType == const BottomType()) {
       return new Type.nullable(new Type.empty());
     }
@@ -226,11 +227,23 @@
 /// SetType is a union of concrete types T1, T2, ..., Tn, where n >= 2.
 /// It represents the set of instances which types are in the {T1, T2, ..., Tn}.
 class SetType extends Type {
-  final Set<ConcreteType> types;
+  /// List of concrete types, sorted by classId.
+  final List<ConcreteType> types;
   int _hashCode;
 
+  /// 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;
   }
 
   @override
@@ -238,20 +251,24 @@
 
   int _computeHashCode() {
     int hash = 1237;
-    // Hash code should not depend on the order of types.
     for (var t in types) {
-      hash = (hash ^ t.hashCode) & kHashMask;
+      hash = (((hash * 31) & kHashMask) + t.classId.hashCode) & kHashMask;
     }
     return hash;
   }
 
   @override
-  bool operator ==(other) =>
-      (other is SetType) &&
-      // TODO(alexmarkov): make it more efficient
-      (types.length == other.types.length) &&
-      this.types.containsAll(other.types) &&
-      other.types.containsAll(this.types);
+  bool operator ==(other) {
+    if ((other is SetType) && (types.length == other.types.length)) {
+      for (int i = 0; i < types.length; i++) {
+        if (types[i].classId != other.types[i].classId) {
+          return false;
+        }
+      }
+      return true;
+    }
+    return false;
+  }
 
   @override
   String toString() => "_T ${types}";
@@ -259,17 +276,70 @@
   @override
   int get order => TypeOrder.Set.index;
 
+  static List<ConcreteType> _unionLists(
+      List<ConcreteType> types1, List<ConcreteType> types2) {
+    int i1 = 0;
+    int i2 = 0;
+    List<ConcreteType> types = <ConcreteType>[];
+    while ((i1 < types1.length) && (i2 < types2.length)) {
+      final t1 = types1[i1];
+      final t2 = types2[i2];
+      final relation = t1.classId.compareTo(t2.classId);
+      if (relation < 0) {
+        types.add(t1);
+        ++i1;
+      } else if (relation > 0) {
+        types.add(t2);
+        ++i2;
+      } else {
+        assertx(t1 == t2);
+        types.add(t1);
+        ++i1;
+        ++i2;
+      }
+    }
+    if (i1 < types1.length) {
+      types.addAll(types1.getRange(i1, types1.length));
+    } else if (i2 < types2.length) {
+      types.addAll(types2.getRange(i2, types2.length));
+    }
+    return types;
+  }
+
+  static List<ConcreteType> _intersectLists(
+      List<ConcreteType> types1, List<ConcreteType> types2) {
+    int i1 = 0;
+    int i2 = 0;
+    List<ConcreteType> types = <ConcreteType>[];
+    while ((i1 < types1.length) && (i2 < types2.length)) {
+      final t1 = types1[i1];
+      final t2 = types2[i2];
+      final relation = t1.classId.compareTo(t2.classId);
+      if (relation < 0) {
+        ++i1;
+      } else if (relation > 0) {
+        ++i2;
+      } else {
+        assertx(t1 == t2);
+        types.add(t1);
+        ++i1;
+        ++i2;
+      }
+    }
+    return types;
+  }
+
   @override
   Type union(Type other, TypeHierarchy typeHierarchy) {
     if (other.order < this.order) {
       return other.union(this, typeHierarchy);
     }
     if (other is SetType) {
-      return new SetType(this.types.union(other.types));
+      return new SetType(_unionLists(types, other.types));
     } else if (other is ConcreteType) {
       return types.contains(other)
           ? this
-          : new SetType(new Set.from(this.types)..add(other));
+          : new SetType(_unionLists(types, <ConcreteType>[other]));
     } else if (other is ConeType) {
       return typeHierarchy
           .specializeTypeCone(other.dartType)
@@ -285,14 +355,14 @@
       return other.intersection(this, typeHierarchy);
     }
     if (other is SetType) {
-      Set<ConcreteType> set = this.types.intersection(other.types);
-      final size = set.length;
+      List<ConcreteType> list = _intersectLists(types, other.types);
+      final size = list.length;
       if (size == 0) {
         return const EmptyType();
       } else if (size == 1) {
-        return set.single;
+        return list.single;
       } else {
-        return new SetType(set);
+        return new SetType(list);
       }
     } else if (other is ConcreteType) {
       return types.contains(other) ? other : const EmptyType();
@@ -387,29 +457,50 @@
   }
 }
 
+/// Abstract unique identifier of a Dart class.
+/// Identifiers are comparable and used to provide ordering on classes.
+abstract class ClassId<E extends ClassId<E>> implements Comparable<E> {
+  const ClassId();
+}
+
+/// Simple implementation of [ClassId] based on int.
+class IntClassId extends ClassId<IntClassId> {
+  final int id;
+
+  const IntClassId(this.id);
+
+  @override
+  int compareTo(IntClassId other) => id.compareTo(other.id);
+}
+
 /// Type representing a set of instances of a specific Dart class (no subtypes
 /// or `null` object).
-class ConcreteType extends Type {
+class ConcreteType extends Type implements Comparable<ConcreteType> {
+  final ClassId classId;
   final DartType dartType;
 
-  ConcreteType(this.dartType) {
-    assertx((dartType is FunctionType) ||
-        ((dartType is InterfaceType) &&
-            !(dartType as InterfaceType).classNode.isAbstract));
+  ConcreteType(this.classId, this.dartType) {
+    // TODO(alexmarkov): support generics & closures
+    assertx(dartType is InterfaceType);
+    assertx(!(dartType as InterfaceType).classNode.isAbstract);
+    assertx((dartType as InterfaceType)
+        .typeArguments
+        .every((t) => t == const DynamicType()));
   }
 
   @override
   Class getConcreteClass(TypeHierarchy typeHierarchy) =>
-      (dartType is InterfaceType)
-          ? (dartType as InterfaceType).classNode
-          : null;
+      (dartType as InterfaceType).classNode;
 
   @override
-  int get hashCode => (dartType.hashCode ^ 0x1234) & kHashMask;
+  int get hashCode => (classId.hashCode ^ 0x1234) & kHashMask;
 
   @override
   bool operator ==(other) =>
-      (other is ConcreteType) && (this.dartType == other.dartType);
+      (other is ConcreteType) && (this.classId == other.classId);
+
+  @override
+  int compareTo(ConcreteType other) => classId.compareTo(other.classId);
 
   @override
   String toString() => "_T (${dartType})";
@@ -426,9 +517,11 @@
       if (this == other) {
         return this;
       } else {
-        final Set<ConcreteType> types = new Set<ConcreteType>();
-        types.add(this);
-        types.add(other);
+        assertx(this.classId != other.classId);
+        final List<ConcreteType> types =
+            (this.classId.compareTo(other.classId) < 0)
+                ? <ConcreteType>[this, other]
+                : <ConcreteType>[other, this];
         return new SetType(types);
       }
     } else {
diff --git a/pkg/vm/test/transformations/type_flow/summary_collector_test.dart b/pkg/vm/test/transformations/type_flow/summary_collector_test.dart
index 78fd141..bdd8af1 100644
--- a/pkg/vm/test/transformations/type_flow/summary_collector_test.dart
+++ b/pkg/vm/test/transformations/type_flow/summary_collector_test.dart
@@ -21,8 +21,8 @@
   final StringBuffer _buf = new StringBuffer();
 
   PrintSummaries(TypeEnvironment environment)
-      : _summaryColector = new SummaryCollector(
-            environment, new EntryPointsListener(), new NativeCodeOracle(null));
+      : _summaryColector = new SummaryCollector(environment,
+            new EmptyEntryPointsListener(), new NativeCodeOracle(null));
 
   String print(TreeNode node) {
     visitLibrary(node);
diff --git a/pkg/vm/test/transformations/type_flow/transformer_test.dart b/pkg/vm/test/transformations/type_flow/transformer_test.dart
index 61de1ec..0aa23a6 100644
--- a/pkg/vm/test/transformations/type_flow/transformer_test.dart
+++ b/pkg/vm/test/transformations/type_flow/transformer_test.dart
@@ -25,10 +25,12 @@
 
   final coreTypes = new CoreTypes(program);
 
-  program = transformProgram(coreTypes, program, entryPointsJSONFiles: [
+  final entryPoints = [
     pkgVmDir + '/lib/transformations/type_flow/entry_points.json',
     pkgVmDir + '/lib/transformations/type_flow/entry_points_extra.json',
-  ]);
+  ];
+
+  program = transformProgram(coreTypes, program, entryPoints);
 
   final StringBuffer buffer = new StringBuffer();
   new Printer(buffer, showExternal: false, showMetadata: true)
diff --git a/pkg/vm/test/transformations/type_flow/types_test.dart b/pkg/vm/test/transformations/type_flow/types_test.dart
index 83685b7..f00f935 100644
--- a/pkg/vm/test/transformations/type_flow/types_test.dart
+++ b/pkg/vm/test/transformations/type_flow/types_test.dart
@@ -45,19 +45,17 @@
     expect(new Type.cone(t2Generic), equals(new ConeType(t2Raw)));
     expect(new Type.cone(f1), equals(const AnyType()));
 
-    expect(new Type.concrete(t1), equals(new ConcreteType(t1)));
-    expect(new Type.concrete(t2Raw), equals(new ConcreteType(t2Raw)));
-    expect(new Type.concrete(t2Generic), equals(new ConcreteType(t2Raw)));
-
     expect(new Type.nullable(new Type.empty()),
         equals(new NullableType(new EmptyType())));
     expect(new Type.nullable(new Type.cone(t1)),
         equals(new NullableType(new ConeType(t1))));
-    expect(new Type.nullable(new Type.concrete(t1)),
-        equals(new NullableType(new ConcreteType(t1))));
+
+    expect(new Type.nullableAny(), equals(new NullableType(new AnyType())));
 
     expect(new Type.fromStatic(const DynamicType()),
         equals(new NullableType(new AnyType())));
+    expect(new Type.fromStatic(const DynamicType()),
+        equals(new Type.nullableAny()));
     expect(new Type.fromStatic(const BottomType()),
         equals(new NullableType(new EmptyType())));
     expect(new Type.fromStatic(t1), equals(new NullableType(new ConeType(t1))));
@@ -77,22 +75,22 @@
 
     final empty = new EmptyType();
     final any = new AnyType();
-    final concreteT1 = new ConcreteType(t1);
-    final concreteT2 = new ConcreteType(t2);
-    final concreteT3 = new ConcreteType(t3);
-    final concreteT4 = new ConcreteType(t4);
+    final concreteT1 = new ConcreteType(const IntClassId(1), t1);
+    final concreteT2 = new ConcreteType(const IntClassId(2), t2);
+    final concreteT3 = new ConcreteType(const IntClassId(3), t3);
+    final concreteT4 = new ConcreteType(const IntClassId(4), t4);
     final coneT1 = new ConeType(t1);
     final coneT2 = new ConeType(t2);
     final coneT3 = new ConeType(t3);
     final coneT4 = new ConeType(t4);
-    final setT12 = new SetType([concreteT1, concreteT2].toSet());
-    final setT14 = new SetType([concreteT1, concreteT4].toSet());
-    final setT23 = new SetType([concreteT2, concreteT3].toSet());
-    final setT34 = new SetType([concreteT3, concreteT4].toSet());
-    final setT123 = new SetType([concreteT1, concreteT2, concreteT3].toSet());
-    final setT124 = new SetType([concreteT1, concreteT2, concreteT4].toSet());
+    final setT12 = new SetType([concreteT1, concreteT2]);
+    final setT14 = new SetType([concreteT1, concreteT4]);
+    final setT23 = new SetType([concreteT2, concreteT3]);
+    final setT34 = new SetType([concreteT3, concreteT4]);
+    final setT123 = new SetType([concreteT1, concreteT2, concreteT3]);
+    final setT124 = new SetType([concreteT1, concreteT2, concreteT4]);
     final setT1234 =
-        new SetType([concreteT1, concreteT2, concreteT3, concreteT4].toSet());
+        new SetType([concreteT1, concreteT2, concreteT3, concreteT4]);
     final nullableEmpty = new Type.nullable(empty);
     final nullableAny = new Type.nullable(any);
     final nullableConcreteT1 = new Type.nullable(concreteT1);
@@ -268,6 +266,10 @@
     final f1b = new FunctionType([t1b], const VoidType());
     final f2 = new FunctionType([t1a, t1a], const VoidType());
 
+    final cid1 = const IntClassId(1);
+    final cid2 = const IntClassId(2);
+    final cid3 = const IntClassId(3);
+
     void eq(dynamic a, dynamic b) {
       expect(a == b, isTrue, reason: "Test case: $a == $b");
       expect(a.hashCode == b.hashCode, isTrue,
@@ -290,29 +292,27 @@
 
     eq(new EmptyType(), new EmptyType());
     ne(new EmptyType(), new AnyType());
-    ne(new EmptyType(), new ConcreteType(t1a));
+    ne(new EmptyType(), new ConcreteType(cid1, t1a));
     ne(new EmptyType(), new ConeType(t1a));
     ne(new EmptyType(),
-        new SetType([new ConcreteType(t1a), new ConcreteType(t2)].toSet()));
+        new SetType([new ConcreteType(cid1, t1a), new ConcreteType(cid2, t2)]));
     ne(new EmptyType(), new NullableType(new EmptyType()));
 
     eq(new AnyType(), new AnyType());
-    ne(new AnyType(), new ConcreteType(t1a));
+    ne(new AnyType(), new ConcreteType(cid1, t1a));
     ne(new AnyType(), new ConeType(t1a));
     ne(new AnyType(),
-        new SetType([new ConcreteType(t1a), new ConcreteType(t2)].toSet()));
+        new SetType([new ConcreteType(cid1, t1a), new ConcreteType(cid2, t2)]));
     ne(new AnyType(), new NullableType(new EmptyType()));
 
-    eq(new ConcreteType(t1a), new ConcreteType(t1b));
-    eq(new ConcreteType(f1a), new ConcreteType(f1b));
-    ne(new ConcreteType(t1a), new ConcreteType(t2));
-    ne(new ConcreteType(f1a), new ConcreteType(f2));
-    ne(new ConcreteType(t1a), new ConcreteType(f1a));
-    ne(new ConcreteType(t1a), new ConeType(t1a));
-    ne(new ConcreteType(t1a), new ConeType(t2));
-    ne(new ConcreteType(t1a),
-        new SetType([new ConcreteType(t1a), new ConcreteType(t2)].toSet()));
-    ne(new ConcreteType(t1a), new NullableType(new ConcreteType(t1a)));
+    eq(new ConcreteType(cid1, t1a), new ConcreteType(cid1, t1b));
+    ne(new ConcreteType(cid1, t1a), new ConcreteType(cid2, t2));
+    ne(new ConcreteType(cid1, t1a), new ConeType(t1a));
+    ne(new ConcreteType(cid1, t1a), new ConeType(t2));
+    ne(new ConcreteType(cid1, t1a),
+        new SetType([new ConcreteType(cid1, t1a), new ConcreteType(cid2, t2)]));
+    ne(new ConcreteType(cid1, t1a),
+        new NullableType(new ConcreteType(cid1, t1a)));
 
     eq(new ConeType(t1a), new ConeType(t1b));
     eq(new ConeType(f1a), new ConeType(f1b));
@@ -320,34 +320,34 @@
     ne(new ConeType(f1a), new ConeType(f2));
     ne(new ConeType(t1a), new ConeType(f1a));
     ne(new ConeType(t1a),
-        new SetType([new ConcreteType(t1a), new ConcreteType(t2)].toSet()));
+        new SetType([new ConcreteType(cid1, t1a), new ConcreteType(cid2, t2)]));
     ne(new ConeType(t1a), new NullableType(new ConeType(t1a)));
 
-    eq(new SetType([new ConcreteType(t1a), new ConcreteType(t2)].toSet()),
-        new SetType([new ConcreteType(t2), new ConcreteType(t1b)].toSet()));
+    eq(new SetType([new ConcreteType(cid1, t1a), new ConcreteType(cid2, t2)]),
+        new SetType([new ConcreteType(cid1, t1b), new ConcreteType(cid2, t2)]));
     eq(
         new SetType([
-          new ConcreteType(t1a),
-          new ConcreteType(t2),
-          new ConcreteType(t3)
-        ].toSet()),
+          new ConcreteType(cid1, t1a),
+          new ConcreteType(cid2, t2),
+          new ConcreteType(cid3, t3)
+        ]),
         new SetType([
-          new ConcreteType(t2),
-          new ConcreteType(t1b),
-          new ConcreteType(t3)
-        ].toSet()));
+          new ConcreteType(cid1, t1b),
+          new ConcreteType(cid2, t2),
+          new ConcreteType(cid3, t3)
+        ]));
     ne(
-        new SetType([new ConcreteType(t1a), new ConcreteType(t2)].toSet()),
+        new SetType([new ConcreteType(cid1, t1a), new ConcreteType(cid2, t2)]),
         new SetType([
-          new ConcreteType(t1a),
-          new ConcreteType(t2),
-          new ConcreteType(t3)
-        ].toSet()));
-    ne(new SetType([new ConcreteType(t1a), new ConcreteType(t2)].toSet()),
-        new SetType([new ConcreteType(t1a), new ConcreteType(t3)].toSet()));
+          new ConcreteType(cid1, t1a),
+          new ConcreteType(cid2, t2),
+          new ConcreteType(cid3, t3)
+        ]));
+    ne(new SetType([new ConcreteType(cid1, t1a), new ConcreteType(cid2, t2)]),
+        new SetType([new ConcreteType(cid1, t1a), new ConcreteType(cid3, t3)]));
     ne(
-        new SetType([new ConcreteType(t1a), new ConcreteType(t2)].toSet()),
+        new SetType([new ConcreteType(cid1, t1a), new ConcreteType(cid2, t2)]),
         new NullableType(new SetType(
-            [new ConcreteType(t1a), new ConcreteType(t2)].toSet())));
+            [new ConcreteType(cid1, t1a), new ConcreteType(cid2, t2)])));
   });
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
index 82e6549..aa44be5 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
@@ -10,13 +10,13 @@
   constructor •([@vm.inferred-type.metadata=!] core::int size) → void
     : self::_Vector::_offset = 0, self::_Vector::_length = size, self::_Vector::_elements = [@vm.inferred-type.metadata=dart.typed_data::_Float64List] typ::Float64List::•(size), super core::Object::•()
     ;
-  constructor fromVOL(core::List<core::double> values, core::int offset, core::int length) → void
+[@vm.unreachable.metadata=]  constructor fromVOL(core::List<core::double> values, core::int offset, core::int length) → void
     : self::_Vector::_offset = offset, self::_Vector::_length = length, self::_Vector::_elements = values, super core::Object::•()
     throw "TFA Error: #lib::_Vector::fromVOL";
   operator [](core::int i) → core::double
     return [@vm.direct-call.metadata=dart.typed_data::_Float64List::[]] [@vm.inferred-type.metadata=dart.core::_Double] [@vm.direct-call.metadata=#lib::_Vector::_elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}.{core::List::[]}(i.{core::num::+}([@vm.direct-call.metadata=#lib::_Vector::_offset] [@vm.inferred-type.metadata=!] this.{self::_Vector::_offset}));
   operator []=([@vm.inferred-type.metadata=!] core::int i, core::double value) → void {
-    [@vm.direct-call.metadata=#lib::_Vector::_elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}.{core::List::[]=}(i.{core::num::+}([@vm.direct-call.metadata=#lib::_Vector::_offset] [@vm.inferred-type.metadata=!] this.{self::_Vector::_offset}), value);
+    [@vm.unreachable.metadata=] [@vm.direct-call.metadata=#lib::_Vector::_elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}.{core::List::[]=}([@vm.unreachable.metadata=] i.{core::num::+}([@vm.direct-call.metadata=#lib::_Vector::_offset] [@vm.inferred-type.metadata=!] this.{self::_Vector::_offset}), value);
   }
   operator *([@vm.inferred-type.metadata=#lib::_Vector] self::_Vector a) → core::double {
     core::double result = 0.0;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
index e4209cf..da1a6e6 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
@@ -13,7 +13,7 @@
     ;
 }
 abstract class A extends core::Object {
-  synthetic constructor •() → void
+[@vm.unreachable.metadata=]  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::A::";
   abstract method foo() → core::Object;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
index 6df2428..d0b8b49 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
@@ -8,7 +8,7 @@
     ;
 }
 class T2 extends core::Object {
-  synthetic constructor •() → void
+[@vm.unreachable.metadata=]  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::T2::";
 }
@@ -26,10 +26,10 @@
     return new self::T1::•();
 }
 class C extends core::Object implements self::B {
-  synthetic constructor •() → void
+[@vm.unreachable.metadata=]  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::C::";
-  method foo() → dynamic
+[@vm.unreachable.metadata=]  method foo() → dynamic
     throw "TFA Error: #lib::C::foo";
 }
 class Intermediate extends core::Object {
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 9133d59..a3755e4 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
@@ -26,7 +26,7 @@
     return new self::T1::•();
 }
 abstract class C extends core::Object implements self::B {
-  synthetic constructor •() → void
+[@vm.unreachable.metadata=]  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::C::";
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_while_processing.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_while_processing.dart.expect
index 5a3bce0..0a02ddf 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_while_processing.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_while_processing.dart.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class I extends core::Object {
-  synthetic constructor •() → void
+[@vm.unreachable.metadata=]  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::I::";
   abstract method foo() → void;
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 e5c53c7..9b51a47 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
@@ -13,7 +13,7 @@
     ;
 }
 class T3 extends core::Object {
-  synthetic constructor •() → void
+[@vm.unreachable.metadata=]  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::T3::";
 }
@@ -39,7 +39,7 @@
   synthetic constructor •() → void
     : super self::A::•()
     ;
-  method noSuchMethod([@vm.inferred-type.metadata=dart.core::_InvocationMirror?] core::Invocation invocation) → dynamic {
+  method noSuchMethod(core::Invocation invocation) → dynamic {
     return new self::T1::•();
   }
 }
@@ -47,7 +47,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method noSuchMethod([@vm.inferred-type.metadata=dart.core::_InvocationMirror?] core::Invocation invocation) → dynamic {
+  method noSuchMethod(core::Invocation invocation) → dynamic {
     return new self::T2::•();
   }
 }
@@ -60,9 +60,9 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method foo() → dynamic
+[@vm.unreachable.metadata=]  method foo() → dynamic
     throw "TFA Error: #lib::E::foo";
-  method noSuchMethod([@vm.inferred-type.metadata=dart.core::_InvocationMirror?] core::Invocation invocation) → dynamic {
+  method noSuchMethod(core::Invocation invocation) → dynamic {
     return new self::T4::•();
   }
 }
@@ -70,9 +70,9 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method twoArg(dynamic a1, dynamic a2) → dynamic
+[@vm.unreachable.metadata=]  method twoArg(dynamic a1, dynamic a2) → dynamic
     throw "TFA Error: #lib::F::twoArg";
-  method noSuchMethod([@vm.inferred-type.metadata=dart.core::_InvocationMirror?] core::Invocation invocation) → dynamic {
+  method noSuchMethod(core::Invocation invocation) → dynamic {
     return new self::T2::•();
   }
 }
@@ -80,7 +80,7 @@
   synthetic constructor •() → void
     : super core::Object::•()
     ;
-  method noSuchMethod([@vm.inferred-type.metadata=dart.core::_InvocationMirror?] core::Invocation invocation) → dynamic {
+  method noSuchMethod(core::Invocation invocation) → dynamic {
     return new self::T5::•();
   }
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart
new file mode 100644
index 0000000..b60d23b
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.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.
+
+// This test verifies that inferred types of parameters are valid *before*
+// applying strong mode argument type checks.
+
+abstract class T0 {
+  void foo();
+}
+
+class T1 extends T0 {
+  void foo() {}
+}
+
+class T2 extends T0 {
+  void foo() {}
+}
+
+// Called directly with incompatible argument.
+// In such case, CFE inserts implicit cast into the caller and function is
+// invoked with correct argument type, so parameter type is inferred.
+void func1(T0 t0) {
+  t0.foo();
+}
+
+// Tear-off is taken. Arguments could be arbitrary.
+void func2(T0 t0) {
+  t0.foo(); // Devirtualization should still happen.
+}
+
+class A {
+  // Tear-off is taken.
+  void method1(T0 t0) {
+    t0.foo();
+  }
+}
+
+abstract class B {
+  void method2(covariant arg);
+}
+
+class C implements B {
+  // Called through interface with incompatible/unknown argument.
+  void method2(T0 t0) {
+    t0.foo();
+  }
+}
+
+class D {
+  // Potential dynamic call.
+  void method3(T0 t0) {
+    t0.foo();
+  }
+}
+
+Function unknown;
+
+getDynamic() => unknown.call();
+use(x) => unknown.call(x);
+
+main(List<String> args) {
+  func1(getDynamic());
+
+  use(func2);
+
+  use(new A().method1);
+
+  B bb = getDynamic();
+  bb.method2(getDynamic());
+
+  getDynamic().method3(getDynamic());
+
+  new T2();
+  new A();
+  new C();
+  new D();
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
new file mode 100644
index 0000000..baf82e2
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
@@ -0,0 +1,76 @@
+library #lib;
+import self as self;
+import "dart:core" as core;
+
+abstract class T0 extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method foo() → void;
+}
+class T1 extends self::T0 {
+[@vm.unreachable.metadata=]  synthetic constructor •() → void
+    : super self::T0::•()
+    throw "TFA Error: #lib::T1::";
+[@vm.unreachable.metadata=]  method foo() → void
+    throw "TFA Error: #lib::T1::foo";
+}
+class T2 extends self::T0 {
+  synthetic constructor •() → void
+    : super self::T0::•()
+    ;
+  method foo() → void {}
+}
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method method1(self::T0 t0) → void {
+    [@vm.direct-call.metadata=#lib::T2::foo??] t0.{self::T0::foo}();
+  }
+}
+abstract class B extends core::Object {
+[@vm.unreachable.metadata=]  synthetic constructor •() → void
+    : super core::Object::•()
+    throw "TFA Error: #lib::B::";
+  abstract method method2(covariant dynamic arg) → void;
+}
+class C extends core::Object implements self::B {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method method2(covariant self::T0 t0) → void {
+    [@vm.direct-call.metadata=#lib::T2::foo??] t0.{self::T0::foo}();
+  }
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method method3(self::T0 t0) → void {
+    [@vm.direct-call.metadata=#lib::T2::foo??] t0.{self::T0::foo}();
+  }
+}
+[@vm.inferred-type.metadata=dart.core::Null?]static field core::Function unknown;
+static method func1([@vm.inferred-type.metadata=#lib::T2?] self::T0 t0) → void {
+  [@vm.direct-call.metadata=#lib::T2::foo??] t0.{self::T0::foo}();
+}
+static method func2(self::T0 t0) → void {
+  [@vm.direct-call.metadata=#lib::T2::foo??] t0.{self::T0::foo}();
+}
+static method getDynamic() → dynamic
+  return self::unknown.call();
+static method use(dynamic x) → dynamic
+  return self::unknown.call(x);
+static method main(core::List<core::String> args) → dynamic {
+  self::func1(self::getDynamic() as{TypeError} self::T0);
+  self::use(self::func2);
+  self::use(new self::A::•().{self::A::method1});
+  self::B bb = self::getDynamic() as{TypeError} self::B;
+  [@vm.direct-call.metadata=#lib::C::method2??] bb.{self::B::method2}(self::getDynamic());
+  self::getDynamic().method3(self::getDynamic());
+  new self::T2::•();
+  new self::A::•();
+  new self::C::•();
+  new self::D::•();
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
index 186a0a3..0f87c2a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
@@ -16,10 +16,10 @@
     return 1.{core::num::+}([@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError} core::num) as{TypeError} core::int;
 }
 class C extends core::Object implements self::A {
-  synthetic constructor •() → void
+[@vm.unreachable.metadata=]  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::C::";
-  method foo() → core::int
+[@vm.unreachable.metadata=]  method foo() → core::int
     throw "TFA Error: #lib::C::foo";
 }
 class TearOffDynamicMethod extends core::Object {
@@ -29,7 +29,7 @@
     this.{self::TearOffDynamicMethod::bazz}();
   }
 }
-static field self::A aa = throw "TFA Error: #lib::aa";
+[@vm.unreachable.metadata=]static field self::A aa = throw "TFA Error: #lib::aa";
 static method knownResult() → dynamic
   return new self::B::•();
 static method main(core::List<core::String> args) → dynamic {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
index 1f42b77..cc9876d 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
@@ -16,10 +16,10 @@
     return 1.{core::num::+}([@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError} core::num) as{TypeError} core::int;
 }
 class C extends core::Object implements self::A {
-  synthetic constructor •() → void
+[@vm.unreachable.metadata=]  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::C::";
-  method foo() → core::int
+[@vm.unreachable.metadata=]  method foo() → core::int
     throw "TFA Error: #lib::C::foo";
 }
 class TearOffInterfaceMethod extends core::Object {
@@ -28,7 +28,7 @@
     : self::TearOffInterfaceMethod::bazz = arg.{self::A::foo}, super core::Object::•()
     ;
 }
-static field self::A aa = throw "TFA Error: #lib::aa";
+[@vm.unreachable.metadata=]static field self::A aa = throw "TFA Error: #lib::aa";
 static method knownResult() → dynamic
   return new self::B::•();
 static method main(core::List<core::String> args) → dynamic {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
index a1b09f0..deb3fa6 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
@@ -16,10 +16,10 @@
     return 1.{core::num::+}([@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError} core::num) as{TypeError} core::int;
 }
 class C extends core::Object implements self::A {
-  synthetic constructor •() → void
+[@vm.unreachable.metadata=]  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::C::";
-  method foo() → core::int
+[@vm.unreachable.metadata=]  method foo() → core::int
     throw "TFA Error: #lib::C::foo";
 }
 class Base extends core::Object {
@@ -35,7 +35,7 @@
   synthetic constructor •() → void
     : super self::Base::•()
     ;
-  method foo() → core::int
+[@vm.unreachable.metadata=]  method foo() → core::int
     throw "TFA Error: #lib::TearOffSuperMethod::foo";
   method bar() → core::int
     return [@vm.direct-call.metadata=#lib::Base::doCall] this.{self::Base::doCall}(super.{self::Base::foo});
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.dart b/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.dart
new file mode 100644
index 0000000..3987e39
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.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 I {
+  void foo(x);
+}
+
+class A implements I {
+  void foo(x) {
+    print(x);
+  }
+}
+
+class B implements I {
+  void foo(x) {
+    print(x);
+  }
+}
+
+void bar(I i) {
+  if (i is A) {
+    i.foo(42);
+  }
+}
+
+I ii = new B();
+
+main(List<String> args) {
+  bar(ii);
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.dart.expect
new file mode 100644
index 0000000..2170390
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.dart.expect
@@ -0,0 +1,33 @@
+library #lib;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+[@vm.unreachable.metadata=]  synthetic constructor •() → void
+    : super core::Object::•()
+    throw "TFA Error: #lib::I::";
+  abstract method foo(dynamic x) → void;
+}
+class A extends core::Object implements self::I {
+[@vm.unreachable.metadata=]  synthetic constructor •() → void
+    : super core::Object::•()
+    throw "TFA Error: #lib::A::";
+[@vm.unreachable.metadata=]  method foo(dynamic x) → void
+    throw "TFA Error: #lib::A::foo";
+}
+class B extends core::Object implements self::I {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+[@vm.unreachable.metadata=]  method foo(dynamic x) → void
+    throw "TFA Error: #lib::B::foo";
+}
+[@vm.inferred-type.metadata=#lib::B]static field self::I ii = new self::B::•();
+static method bar([@vm.inferred-type.metadata=#lib::B] self::I i) → void {
+  if(i is self::A) {
+    [@vm.unreachable.metadata=] i{self::A}.{self::A::foo}(42);
+  }
+}
+static method main(core::List<core::String> args) → dynamic {
+  self::bar([@vm.inferred-type.metadata=#lib::B] self::ii);
+}
diff --git a/pkg/vm/tool/gen_kernel.bat b/pkg/vm/tool/gen_kernel.bat
new file mode 100644
index 0000000..83a99572
--- /dev/null
+++ b/pkg/vm/tool/gen_kernel.bat
@@ -0,0 +1,21 @@
+@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.
+
+REM Script for generating kernel files using Dart 2 pipeline: Fasta with
+REM strong mode enabled.
+
+set SCRIPTPATH=%~dp0
+
+REM Does the path have a trailing slash? If so, remove it.
+if %SCRIPTPATH:~-1%==\ set SCRIPTPATH=%SCRIPTPATH:~0,-1%
+
+set SDK_DIR=%SCRIPTPATH%/../../../
+
+REM Enable Dart 2.0 fixed-size integers for gen_kernel
+set DART_VM_OPTIONS=--limit-ints-to-64-bits %DART_VM_OPTIONS%
+
+set DART=%SDK_DIR%/tools/sdks/win/dart-sdk/bin/dart.exe
+
+"%DART%" %DART_VM_OPTIONS% "%SDK_DIR%/pkg/vm/bin/gen_kernel.dart" %*
diff --git a/pkg/vm/tool/precompiler2 b/pkg/vm/tool/precompiler2
index 69062fe..d0776cb 100755
--- a/pkg/vm/tool/precompiler2
+++ b/pkg/vm/tool/precompiler2
@@ -70,6 +70,9 @@
 export DART_CONFIGURATION=${DART_CONFIGURATION:-ReleaseX64}
 BIN_DIR="$OUT_DIR/$DART_CONFIGURATION"
 
+ENTRY_POINTS="--entry-points ${BIN_DIR}/gen/runtime/bin/precompiler_entry_points.json \
+              --entry-points ${SDK_DIR}/pkg/vm/lib/transformations/type_flow/entry_points_extra.json"
+
 # Step 1: Generate Kernel binary from the input Dart source.
 "$BIN_DIR"/dart                                                                \
      --limit-ints-to-64-bits                                                   \
@@ -78,6 +81,7 @@
      --aot                                                                     \
      $SYNC_ASYNC                                                               \
      $PACKAGES                                                                 \
+     $ENTRY_POINTS                                                             \
      -o "$SNAPSHOT_FILE.dill"                                                  \
      "$SOURCE_FILE"
 
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 27c5806..410bde7 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -1205,3 +1205,30 @@
     ldflags = [ "/LIBPATH:$abs_root_out_dir" ]
   }
 }
+
+compiled_action("precompiler_entry_points_json") {
+  # Printing precompiler entry points is folded into precompilation, so dart_bootstrap is invoked
+  # with correct arguments to generate app-aot snapshot.
+
+  # Dart script to precompile (any valid script would suffice).
+  input = "../vm/snapshot_test.dart"
+
+  # Output snapshot for precompilation.
+  snapshot = "$target_gen_dir/dummy.snapshot"
+
+  output = "$target_gen_dir/precompiler_entry_points.json"
+  tool = ":dart_bootstrap"
+  inputs = [
+    input,
+  ]
+  outputs = [
+    output,
+  ]
+  args = [
+    "--print-precompiler-entry-points=" + rebase_path(output),
+    "--snapshot=" + rebase_path(snapshot),
+    "--snapshot-kind=app-aot",
+    "--use-blobs",
+    rebase_path(input),
+  ]
+}
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index 462c1a2..63c0c87 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -1377,6 +1377,14 @@
 
   Dart_IsolateFlags isolate_flags;
   Dart_IsolateFlagsInitialize(&isolate_flags);
+
+  Dart_QualifiedFunctionName* entry_points = NULL;
+  if (IsSnapshottingForPrecompilation()) {
+    entry_points = ParseEntryPointsManifestIfPresent();
+    isolate_flags.obfuscate = obfuscate;
+    isolate_flags.entry_points = entry_points;
+  }
+
   // We need to capture the vmservice library in the core snapshot, so load it
   // in the main isolate as well.
   isolate_flags.load_vmservice_library = true;
@@ -1413,9 +1421,6 @@
       return kErrorExitCode;
     }
 
-    Dart_QualifiedFunctionName* entry_points =
-        ParseEntryPointsManifestIfPresent();
-
     CreateAndWritePrecompiledSnapshot(entry_points);
 
     CreateAndWriteDependenciesFile();
diff --git a/runtime/bin/snapshot_utils.cc b/runtime/bin/snapshot_utils.cc
index 73ca52e..00fc580 100644
--- a/runtime/bin/snapshot_utils.cc
+++ b/runtime/bin/snapshot_utils.cc
@@ -339,7 +339,7 @@
 }
 
 void Snapshot::GenerateAppJIT(const char* snapshot_filename) {
-#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_DBC)
+#if defined(TARGET_ARCH_IA32)
   // Snapshots with code are not supported on IA32 or DBC.
   uint8_t* isolate_buffer = NULL;
   intptr_t isolate_size = 0;
diff --git a/runtime/lib/bigint.dart b/runtime/lib/bigint.dart
index f08c19d..03a4b70 100644
--- a/runtime/lib/bigint.dart
+++ b/runtime/lib/bigint.dart
@@ -1925,6 +1925,7 @@
     // y == 1/x mod _DIGIT_BASE
     y = -y; // We really want the negative inverse.
     args[_RHO] = y & _Bigint._DIGIT_MASK;
+    assert(((x * y) & _Bigint._DIGIT_MASK) == _Bigint._DIGIT_MASK);
   }
 
   // Calculates -1/x % _DIGIT_BASE^2, x is a pair of 32-bit digits.
@@ -1938,6 +1939,7 @@
     y = (y * (2 - (((xl & 0xffff) * y) & 0xffff))) &
         0xffff; // y == 1/x mod 2^16
     y = (y * (2 - ((xl * y) & 0xffffffff))) & 0xffffffff; // y == 1/x mod 2^32
+    // Warning: The following expressions involve bigint arithmetic.
     var x = (args[_X_HI] << _Bigint._DIGIT_BITS) | xl;
     y = (y * (2 - ((x * y) & _Bigint._TWO_DIGITS_MASK))) &
         _Bigint._TWO_DIGITS_MASK;
@@ -1945,6 +1947,7 @@
     y = -y; // We really want the negative inverse.
     args[_RHO] = y & _Bigint._DIGIT_MASK;
     args[_RHO_HI] = (y >> _Bigint._DIGIT_BITS) & _Bigint._DIGIT_MASK;
+    assert(((x * y) & _Bigint._TWO_DIGITS_MASK) == _Bigint._TWO_DIGITS_MASK);
   }
 
   // Operation:
@@ -1972,6 +1975,7 @@
   int _convert(_Bigint x, Uint32List r_digits) {
     // Montgomery reduction only works if abs(x) < _m.
     assert(x._abs() < _m);
+    assert(_digits_per_step == 1 || _m._used.isEven);
     var r = x._abs()._dlShift(_m._used)._rem(_m);
     if (x._neg && !r._neg && r._used > 0) {
       r = _m._sub(r);
diff --git a/runtime/observatory/tests/service/get_source_report_test.dart b/runtime/observatory/tests/service/get_source_report_test.dart
index 75f1e06..d11c722 100644
--- a/runtime/observatory/tests/service/get_source_report_test.dart
+++ b/runtime/observatory/tests/service/get_source_report_test.dart
@@ -119,6 +119,16 @@
     expect(coverage['ranges'].length, greaterThan(1));
     expect(coverage['scripts'].length, greaterThan(1));
 
+    // Full isolate
+    params = {
+      'reports': ['Coverage'],
+      'forceCompile': true
+    };
+    coverage = await isolate.invokeRpcNoUpgrade('getSourceReport', params);
+    expect(coverage['type'], equals('SourceReport'));
+    expect(coverage['ranges'].length, greaterThan(1));
+    expect(coverage['scripts'].length, greaterThan(1));
+
     // Multiple reports (make sure enum list parameter parsing works).
     params = {
       'reports': ['_CallSites', 'Coverage', 'PossibleBreakpoints'],
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index c0a5c01..a3d1244 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -16,7 +16,6 @@
 evaluate_activation_test/instance: RuntimeError
 evaluate_activation_test/scope: RuntimeError
 evaluate_in_sync_star_activation_test: RuntimeError
-library_dependency_test: CompileTimeError # Deferred loading kernel issue 28335.
 pause_on_unhandled_async_exceptions2_test: RuntimeError # --pause-isolates-on-unhandled-exceptions doesn't currently work. Issue #29056
 pause_on_unhandled_async_exceptions_test: RuntimeError #  --pause-isolates-on-unhandled-exceptions doesn't currently work. Issue #29056
 step_through_arithmetic_test: RuntimeError # probably constant evaluator pre-evaluating e.g. 1+2
@@ -128,7 +127,6 @@
 coverage_optimized_function_test: RuntimeError # Please triage.
 get_object_rpc_test: RuntimeError # Please triage.
 get_source_report_test: RuntimeError # Please triage.
-library_dependency_test: RuntimeError # Please triage.
 positive_token_pos_test: Pass, RuntimeError
 reload_sources_test: Skip # Times out.
 rewind_test: Pass, RuntimeError
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index ad2aa9f..6d78dea 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -15,6 +15,7 @@
 cc/IsolateReload_PendingStaticCall_NSMToDefined: SkipSlow # Issue 28198
 cc/IsolateReload_PendingUnqualifiedCall_InstanceToStatic: SkipSlow # Issue 28198
 cc/IsolateReload_PendingUnqualifiedCall_StaticToInstance: SkipSlow # Issue 28198
+cc/IsolateReload_RunNewFieldInitializersWithGenerics: Fail # Issue 32299
 cc/Profiler_InliningIntervalBoundry: Skip # Differences in ia32, debug, release
 cc/SNPrint_BadArgs: Crash, Fail # These tests are expected to crash on all platforms.
 cc/Sleep: Skip # Flaky # Flaky on buildbot. Issue 5133 and 10409.
@@ -24,7 +25,6 @@
 cc/CodeImmutability: Fail, OK # Address Sanitizer turns a crash into a failure.
 cc/IsolateReload_DanglingGetter_Class: Fail # Issue 28349
 cc/IsolateReload_DanglingGetter_Instance: Fail # Issue 28349
-cc/IsolateReload_DanglingSetter_Instance: Fail # Issue 28349
 cc/IsolateReload_LiveStack: Fail # Issue 28349
 cc/IsolateReload_PendingSuperCall: Fail # Issue 28349
 cc/IsolateReload_SmiFastPathStubs: Fail # Issue 28349
@@ -62,10 +62,10 @@
 dart/wrap_around_in_range_analysis_test: SkipByDesign # The test requires int64.
 
 [ $compiler == dartk ]
-cc/DartAPI_New: Crash
+cc/DartAPI_New: Fail
 cc/DartAPI_TypeGetParameterizedTypes: Crash
-dart/redirection_type_shuffling_test/00: Crash
-dart/redirection_type_shuffling_test/none: Crash
+dart/redirection_type_shuffling_test/00: RuntimeError
+dart/redirection_type_shuffling_test/none: RuntimeError
 
 [ $compiler != dartk ]
 cc/IsolateReload_KernelIncrementalCompile: Skip
@@ -164,8 +164,6 @@
 [ $compiler == dartk && $runtime == vm ]
 cc/CanonicalizationInScriptSnapshots: Fail
 cc/Class_ComputeEndTokenPos: Crash
-cc/CorelibCompileAll: Crash
-cc/CorelibCompilerStats: Crash
 cc/DartAPI_CurrentStackTraceInfo: Fail
 cc/DartAPI_InjectNativeFields1: Skip
 cc/DartAPI_InvokeNoSuchMethod: Fail
@@ -199,21 +197,11 @@
 cc/Debugger_SetBreakpointInPartOfLibrary: Crash
 cc/FunctionSourceFingerprint: Fail
 cc/GenerateSource: Skip # Cannot generate source from a kernel binary. 
-cc/IsolateReload_DanglingSetter_Instance: Fail
 cc/IsolateReload_EnumDelete: Fail
 cc/IsolateReload_EnumReorderIdentical: Fail
 cc/IsolateReload_EnumToNotEnum: Skip
-cc/IsolateReload_LiveStack: Fail
 cc/IsolateReload_NotEnumToEnum: Skip
 cc/IsolateReload_NotTypedefToTypedef: Fail
-cc/IsolateReload_PendingSuperCall: Fail
-cc/IsolateReload_RunNewFieldInitialiazersSuperClass: Skip
-cc/IsolateReload_RunNewFieldInitializers: Skip
-cc/IsolateReload_RunNewFieldInitializersMutateStaticField: Skip
-cc/IsolateReload_RunNewFieldInitializersReferenceStaticField: Skip
-cc/IsolateReload_RunNewFieldInitializersThrows: Skip
-cc/IsolateReload_RunNewFieldInitializersWithConsts: Skip
-cc/IsolateReload_SmiFastPathStubs: Fail
 cc/IsolateReload_TypedefToNotTypedef: Fail
 cc/Parser_AllocateVariables_CaptureLoopVar: Fail
 cc/Parser_AllocateVariables_CapturedVar: Fail
@@ -244,7 +232,7 @@
 cc/SourceReport_CallSites_PolymorphicCall: Fail
 cc/SourceReport_CallSites_SimpleCall: Fail
 cc/SourceReport_Coverage_AllFunctions: Fail
-cc/SourceReport_Coverage_AllFunctions_ForceCompile: Crash
+cc/SourceReport_Coverage_AllFunctions_ForceCompile: Fail
 cc/SourceReport_Coverage_ForceCompile: Fail
 cc/SourceReport_Coverage_NestedFunctions: Fail
 cc/SourceReport_Coverage_NoCalls: Fail
@@ -261,20 +249,11 @@
 dart/spawn_shutdown_test: SkipSlow
 
 [ $compiler == dartk && $runtime == vm && $system == macos ]
-cc/IsolateReload_DanglingGetter_Class: Crash
-cc/IsolateReload_DanglingGetter_Instance: Crash
-cc/IsolateReload_DanglingSetter_Instance: Crash
 cc/IsolateReload_EnumDelete: Crash
 cc/IsolateReload_LibraryLookup: Fail, Crash
-cc/IsolateReload_TearOff_AddArguments: Crash
-cc/IsolateReload_TearOff_AddArguments2: Crash
-cc/IsolateReload_TearOff_Class_Identity: Crash
-cc/IsolateReload_TearOff_Instance_Equality: Crash
-cc/IsolateReload_TearOff_Library_Identity: Crash
-cc/IsolateReload_TearOff_List_Set: Crash
-cc/IsolateReload_TypeIdentity: Crash
-cc/IsolateReload_TypeIdentityGeneric: Crash
-cc/IsolateReload_TypeIdentityParameter: Crash
+cc/IsolateReload_TearOff_AddArguments: Fail
+cc/IsolateReload_TearOff_Instance_Equality: Fail
+cc/IsolateReload_TearOff_List_Set: Fail
 cc/Parser_AllocateVariables_CaptureLoopVar: Crash
 cc/Parser_AllocateVariables_Issue7681: Crash
 cc/Parser_AllocateVariables_MiddleChain: Crash
@@ -286,34 +265,16 @@
 cc/IsolateReload_LibraryShow: Crash
 
 [ $compiler == dartk && $system == linux ]
-cc/IsolateReload_DanglingGetter_Class: Fail
-cc/IsolateReload_DanglingGetter_Instance: Fail
 cc/IsolateReload_LibraryLookup: Crash
 cc/IsolateReload_TearOff_AddArguments: Fail
-cc/IsolateReload_TearOff_AddArguments2: Fail
-cc/IsolateReload_TearOff_Class_Identity: Fail
 cc/IsolateReload_TearOff_Instance_Equality: Fail
-cc/IsolateReload_TearOff_Library_Identity: Fail
 cc/IsolateReload_TearOff_List_Set: Fail
-cc/IsolateReload_TypeIdentity: Fail
-cc/IsolateReload_TypeIdentityGeneric: Fail
-cc/IsolateReload_TypeIdentityParameter: Fail
 
 [ $compiler == dartk && $system == windows ]
-cc/IsolateReload_DanglingGetter_Class: Crash
-cc/IsolateReload_DanglingGetter_Instance: Crash
 cc/IsolateReload_LibraryLookup: Crash
-cc/IsolateReload_TearOff_AddArguments: Crash
-cc/IsolateReload_TearOff_AddArguments2: Crash
-cc/IsolateReload_TearOff_Class_Identity: Crash
-cc/IsolateReload_TearOff_Instance_Equality: Crash
-cc/IsolateReload_TearOff_Library_Identity: Crash
-cc/IsolateReload_TearOff_List_Set: Crash
-cc/IsolateReload_TypeIdentity: Crash
-cc/IsolateReload_TypeIdentityGeneric: Crash
-cc/IsolateReload_TypeIdentityParameter: Crash
-cc/Profiler_BasicSourcePosition: Fail, Pass
-cc/Profiler_CodeTicks: Fail, Pass
+cc/IsolateReload_TearOff_AddArguments: Fail
+cc/IsolateReload_TearOff_Instance_Equality: Fail
+cc/IsolateReload_TearOff_List_Set: Fail
 cc/Profiler_ContextAllocation: Fail, Pass # Flaky on Windows --- sometimes give "profiler_test.cc: 1107: error: expected: !walker.Down()"
 cc/Profiler_FunctionTicks: Fail, Pass
 cc/Profiler_ToggleRecordAllocation: Fail, Pass
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index e57816e..fecad3a 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -1926,11 +1926,9 @@
             s->Write<intptr_t>(entry.raw_value_);
             break;
           }
-          case ObjectPool::kNativeEntry: {
-// Write nothing. Will initialize with the lazy link entry.
-#if defined(TARGET_ARCH_DBC)
-            UNREACHABLE();  // DBC does not support lazy native call linking.
-#endif
+          case ObjectPool::kNativeFunction:
+          case ObjectPool::kNativeFunctionWrapper: {
+            // Write nothing. Will initialize with the lazy link entry.
             break;
           }
           default:
@@ -1982,16 +1980,20 @@
           case ObjectPool::kImmediate:
             entry.raw_value_ = d->Read<intptr_t>();
             break;
-          case ObjectPool::kNativeEntry: {
-#if !defined(TARGET_ARCH_DBC)
+          case ObjectPool::kNativeFunction: {
             // Read nothing. Initialize with the lazy link entry.
             uword new_entry = NativeEntry::LinkNativeCallEntry();
             entry.raw_value_ = static_cast<intptr_t>(new_entry);
-#else
-            UNREACHABLE();  // DBC does not support lazy native call linking.
-#endif
             break;
           }
+#if defined(TARGET_ARCH_DBC)
+          case ObjectPool::kNativeFunctionWrapper: {
+            // Read nothing. Initialize with the lazy link entry.
+            uword new_entry = NativeEntry::BootstrapNativeCallWrapperEntry();
+            entry.raw_value_ = static_cast<intptr_t>(new_entry);
+            break;
+          }
+#endif
           default:
             UNREACHABLE();
         }
@@ -5528,12 +5530,8 @@
   isolate->heap()->Verify();
 #endif
 
-  {
-    NOT_IN_PRODUCT(TimelineDurationScope tds(
-        thread(), Timeline::GetIsolateStream(), "PostLoad"));
-    for (intptr_t i = 0; i < num_clusters_; i++) {
-      clusters_[i]->PostLoad(refs, kind_, zone_);
-    }
+  for (intptr_t i = 0; i < num_clusters_; i++) {
+    clusters_[i]->PostLoad(refs, kind_, zone_);
   }
 
   // Setup native resolver for bootstrap impl.
diff --git a/runtime/vm/code_patcher.h b/runtime/vm/code_patcher.h
index 379dbb3..8518a74 100644
--- a/runtime/vm/code_patcher.h
+++ b/runtime/vm/code_patcher.h
@@ -81,14 +81,27 @@
   static RawCode* GetSwitchableCallTargetAt(uword return_address,
                                             const Code& caller_code);
 
+#if defined(TARGET_ARCH_DBC)
+  static NativeFunctionWrapper GetNativeCallAt(uword return_address,
+                                               const Code& code,
+                                               NativeFunction* target);
+#else
   static RawCode* GetNativeCallAt(uword return_address,
                                   const Code& code,
                                   NativeFunction* target);
+#endif
 
+#if defined(TARGET_ARCH_DBC)
+  static void PatchNativeCallAt(uword return_address,
+                                const Code& code,
+                                NativeFunction target,
+                                NativeFunctionWrapper trampoline);
+#else
   static void PatchNativeCallAt(uword return_address,
                                 const Code& code,
                                 NativeFunction target,
                                 const Code& trampoline);
+#endif
 };
 
 }  // namespace dart
diff --git a/runtime/vm/code_patcher_dbc.cc b/runtime/vm/code_patcher_dbc.cc
index 2ab9ae4..30159b1 100644
--- a/runtime/vm/code_patcher_dbc.cc
+++ b/runtime/vm/code_patcher_dbc.cc
@@ -88,16 +88,16 @@
 void CodePatcher::PatchNativeCallAt(uword return_address,
                                     const Code& code,
                                     NativeFunction target,
-                                    const Code& trampoline) {
+                                    NativeFunctionWrapper trampoline) {
   ASSERT(code.ContainsInstructionAt(return_address));
   NativeCallPattern call(return_address, code);
   call.set_target(trampoline);
   call.set_native_function(target);
 }
 
-RawCode* CodePatcher::GetNativeCallAt(uword return_address,
-                                      const Code& code,
-                                      NativeFunction* target) {
+NativeFunctionWrapper CodePatcher::GetNativeCallAt(uword return_address,
+                                                   const Code& code,
+                                                   NativeFunction* target) {
   ASSERT(code.ContainsInstructionAt(return_address));
   NativeCallPattern call(return_address, code);
   *target = call.native_function();
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index b08c085..bf90c32 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -691,7 +691,27 @@
 
   writer.CloseObject();  // top-level
 
-  THR_Print("%s\n", writer.ToCString());
+  const char* contents = writer.ToCString();
+
+  Dart_FileOpenCallback file_open = Dart::file_open_callback();
+  Dart_FileWriteCallback file_write = Dart::file_write_callback();
+  Dart_FileCloseCallback file_close = Dart::file_close_callback();
+  if ((file_open == NULL) || (file_write == NULL) || (file_close == NULL)) {
+    FATAL(
+        "Unable to print precompiler entry points:"
+        " file callbacks are not provided by embedder");
+  }
+
+  void* out_stream =
+      file_open(FLAG_print_precompiler_entry_points, /* write = */ true);
+  if (out_stream == NULL) {
+    FATAL1(
+        "Unable to print precompiler entry points:"
+        " failed to open file \"%s\" for writing",
+        FLAG_print_precompiler_entry_points);
+  }
+  file_write(contents, strlen(contents), out_stream);
+  file_close(out_stream);
 }
 
 void PrecompilerEntryPointsPrinter::DescribeClass(JSONWriter* writer,
@@ -3367,6 +3387,10 @@
   PreventRenaming("library");
   PreventRenaming("io");
   PreventRenaming("html");
+
+  // Looked up by name via "DartUtils::GetDartType".
+  PreventRenaming("_RandomAccessFileOpsImpl");
+  PreventRenaming("_NamespaceImpl");
 }
 
 RawString* Obfuscator::ObfuscationState::RenameImpl(const String& name,
diff --git a/runtime/vm/compiler/assembler/assembler.cc b/runtime/vm/compiler/assembler/assembler.cc
index 04b9fb1..c19a0d2 100644
--- a/runtime/vm/compiler/assembler/assembler.cc
+++ b/runtime/vm/compiler/assembler/assembler.cc
@@ -281,13 +281,21 @@
                     kNotPatchable);
 }
 
-intptr_t ObjectPoolWrapper::FindNativeEntry(const ExternalLabel* label,
-                                            Patchability patchable) {
+intptr_t ObjectPoolWrapper::FindNativeFunction(const ExternalLabel* label,
+                                               Patchability patchable) {
   return FindObject(
-      ObjectPoolWrapperEntry(label->address(), ObjectPool::kNativeEntry),
+      ObjectPoolWrapperEntry(label->address(), ObjectPool::kNativeFunction),
       patchable);
 }
 
+intptr_t ObjectPoolWrapper::FindNativeFunctionWrapper(
+    const ExternalLabel* label,
+    Patchability patchable) {
+  return FindObject(ObjectPoolWrapperEntry(label->address(),
+                                           ObjectPool::kNativeFunctionWrapper),
+                    patchable);
+}
+
 RawObjectPool* ObjectPoolWrapper::MakeObjectPool() {
   intptr_t len = object_pool_.length();
   if (len == 0) {
diff --git a/runtime/vm/compiler/assembler/assembler.h b/runtime/vm/compiler/assembler/assembler.h
index daa31a5..bc16cba 100644
--- a/runtime/vm/compiler/assembler/assembler.h
+++ b/runtime/vm/compiler/assembler/assembler.h
@@ -372,7 +372,10 @@
                       Patchability patchable = kNotPatchable);
   intptr_t FindObject(const Object& obj, const Object& equivalence);
   intptr_t FindImmediate(uword imm);
-  intptr_t FindNativeEntry(const ExternalLabel* label, Patchability patchable);
+  intptr_t FindNativeFunction(const ExternalLabel* label,
+                              Patchability patchable);
+  intptr_t FindNativeFunctionWrapper(const ExternalLabel* label,
+                                     Patchability patchable);
 
   RawObjectPool* MakeObjectPool();
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm.cc b/runtime/vm/compiler/assembler/assembler_arm.cc
index 139069e..14b68c0 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm.cc
@@ -1509,7 +1509,7 @@
                                 Patchability patchable,
                                 Condition cond) {
   const int32_t offset = ObjectPool::element_offset(
-      object_pool_wrapper_.FindNativeEntry(label, patchable));
+      object_pool_wrapper_.FindNativeFunction(label, patchable));
   LoadWordFromPoolOffset(rd, offset - kHeapObjectTag, PP, cond);
 }
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index a85c3bc..6d5c531 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -436,7 +436,7 @@
 
 void Assembler::LoadNativeEntry(Register dst, const ExternalLabel* label) {
   const int32_t offset = ObjectPool::element_offset(
-      object_pool_wrapper_.FindNativeEntry(label, kNotPatchable));
+      object_pool_wrapper_.FindNativeFunction(label, kNotPatchable));
   LoadWordFromPoolOffset(dst, offset);
 }
 
diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc
index 123ce31..e9451d0 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64.cc
@@ -47,7 +47,7 @@
                                 const ExternalLabel* label,
                                 Patchability patchable) {
   const int32_t offset = ObjectPool::element_offset(
-      object_pool_wrapper_.FindNativeEntry(label, patchable));
+      object_pool_wrapper_.FindNativeFunction(label, patchable));
   LoadWordFromPoolOffset(dst, offset - kHeapObjectTag);
 }
 
diff --git a/runtime/vm/compiler/backend/il_dbc.cc b/runtime/vm/compiler/backend/il_dbc.cc
index bb75c7c..9565d80 100644
--- a/runtime/vm/compiler/backend/il_dbc.cc
+++ b/runtime/vm/compiler/backend/il_dbc.cc
@@ -954,21 +954,32 @@
 
   const intptr_t argc_tag = NativeArguments::ComputeArgcTag(function());
 
-  ASSERT(!link_lazily());
-  const ExternalLabel label(reinterpret_cast<uword>(native_c_function()));
+  NativeFunctionWrapper trampoline;
+  NativeFunction function;
+  if (link_lazily()) {
+    trampoline = &NativeEntry::BootstrapNativeCallWrapper;
+    function = reinterpret_cast<NativeFunction>(&NativeEntry::LinkNativeCall);
+  } else {
+    if (is_bootstrap_native()) {
+      trampoline = &NativeEntry::BootstrapNativeCallWrapper;
+    } else if (is_auto_scope()) {
+      trampoline = &NativeEntry::AutoScopeNativeCallWrapper;
+    } else {
+      trampoline = &NativeEntry::NoScopeNativeCallWrapper;
+    }
+    function = native_c_function();
+  }
+
+  const ExternalLabel trampoline_label(reinterpret_cast<uword>(trampoline));
+  const intptr_t trampoline_kidx =
+      __ object_pool_wrapper().FindNativeFunctionWrapper(&trampoline_label,
+                                                         kPatchable);
+  const ExternalLabel label(reinterpret_cast<uword>(function));
   const intptr_t target_kidx =
-      __ object_pool_wrapper().FindNativeEntry(&label, kNotPatchable);
+      __ object_pool_wrapper().FindNativeFunction(&label, kPatchable);
   const intptr_t argc_tag_kidx =
       __ object_pool_wrapper().FindImmediate(static_cast<uword>(argc_tag));
-  __ PushConstant(target_kidx);
-  __ PushConstant(argc_tag_kidx);
-  if (is_bootstrap_native()) {
-    __ NativeBootstrapCall();
-  } else if (is_auto_scope()) {
-    __ NativeAutoScopeCall();
-  } else {
-    __ NativeNoScopeCall();
-  }
+  __ NativeCall(trampoline_kidx, target_kidx, argc_tag_kidx);
   compiler->RecordSafepoint(locs());
   compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
                                  token_pos());
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 449e737..aa504d3 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "vm/compiler/frontend/kernel_binary_flowgraph.h"
+#include "vm/compiler/aot/precompiler.h"
 #include "vm/compiler/frontend/prologue_builder.h"
 #include "vm/compiler/jit/compiler.h"
 #include "vm/longjump.h"
@@ -18,7 +19,7 @@
 #define T (type_translator_)
 #define I Isolate::Current()
 
-static bool IsStaticInitializer(const Function& function, Zone* zone) {
+static bool IsFieldInitializer(const Function& function, Zone* zone) {
   return (function.kind() == RawFunction::kImplicitStaticFinalGetter) &&
          String::Handle(zone, function.name())
              .StartsWith(Symbols::InitPrefix());
@@ -1003,7 +1004,7 @@
     case RawFunction::kImplicitStaticFinalGetter:
     case RawFunction::kImplicitSetter: {
       ASSERT(builder_->PeekTag() == kField);
-      if (IsStaticInitializer(function, Z)) {
+      if (IsFieldInitializer(function, Z)) {
         VisitNode();
         break;
       }
@@ -1541,6 +1542,10 @@
       }
       return;
     }
+    case kLoadLibrary:
+    case kCheckLibraryIsLoaded:
+      builder_->ReadUInt();  // library index
+      break;
     default:
       H.ReportError("Unsupported tag at this point: %d.", tag);
       UNREACHABLE();
@@ -1711,7 +1716,7 @@
     case kReturnStatement: {
       if ((depth_.function_ == 0) && (depth_.finally_ > 0) &&
           (result_->finally_return_variable == NULL)) {
-        const String& name = H.DartSymbol(":try_finally_return_value");
+        const String& name = Symbols::TryFinallyReturnValue();
         LocalVariable* variable =
             MakeVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
                          name, AbstractType::dynamic_type());
@@ -1849,7 +1854,7 @@
   // `declaration->SetConstantValue()`.
   const String& name = (H.StringSize(helper.name_index_) == 0)
                            ? GenerateName(":var", name_index_++)
-                           : H.DartSymbol(helper.name_index_);
+                           : H.DartSymbolObfuscate(helper.name_index_);
 
   Tag tag = builder_->ReadTag();  // read (first part of) initializer.
   if (tag == kSomething) {
@@ -2077,7 +2082,7 @@
       builder_->inferred_type_metadata_helper_.GetInferredType(kernel_offset);
   VariableDeclarationHelper helper(builder_);
   helper.ReadUntilExcluding(VariableDeclarationHelper::kType);
-  String& name = H.DartSymbol(helper.name_index_);
+  String& name = H.DartSymbolObfuscate(helper.name_index_);
   AbstractType& type = BuildAndVisitVariableType();  // read type.
   helper.SetJustRead(VariableDeclarationHelper::kType);
   helper.ReadUntilExcluding(VariableDeclarationHelper::kInitializer);
@@ -2238,7 +2243,7 @@
         declaration_binary_offset - builder_->data_program_offset_,
         parsed_function_->function());
 
-    const String& name = H.DartSymbol(var_name);
+    const String& name = H.DartSymbolObfuscate(var_name);
     variable = current_function_scope_->parent()->LookupVariable(name, true);
     ASSERT(variable != NULL);
     result_->locals.Insert(declaration_binary_offset, variable);
@@ -2267,7 +2272,7 @@
                                                   intptr_t suffix) {
   char name[64];
   OS::SNPrint(name, 64, "%s%" Pd "", prefix, suffix);
-  return H.DartSymbol(name);
+  return H.DartSymbolObfuscate(name);
 }
 
 void StreamingScopeBuilder::HandleSpecialLoad(LocalVariable** variable,
@@ -2469,7 +2474,7 @@
 
   intptr_t pos = 0;
   parameter_types.SetAt(pos, AbstractType::dynamic_type());
-  parameter_names.SetAt(pos, H.DartSymbol("_receiver_"));
+  parameter_names.SetAt(pos, H.DartSymbolPlain("_receiver_"));
   ++pos;
   for (intptr_t i = 0; i < positional_count; ++i, ++pos) {
     BuildTypeInternal();  // read ith positional parameter.
@@ -2477,7 +2482,7 @@
       result_ = AbstractType::dynamic_type().raw();
     }
     parameter_types.SetAt(pos, result_);
-    parameter_names.SetAt(pos, H.DartSymbol("noname"));
+    parameter_names.SetAt(pos, H.DartSymbolPlain("noname"));
   }
 
   // The additional first parameter is the receiver type (set to dynamic).
@@ -2490,7 +2495,7 @@
         builder_->ReadListLength();  // read named_parameters list length.
     for (intptr_t i = 0; i < named_count; ++i, ++pos) {
       // read string reference (i.e. named_parameters[i].name).
-      String& name = H.DartSymbol(builder_->ReadStringReference());
+      String& name = H.DartSymbolObfuscate(builder_->ReadStringReference());
       BuildTypeInternal();  // read named_parameters[i].type.
       if (result_.IsMalformed()) {
         result_ = AbstractType::dynamic_type().raw();
@@ -2607,7 +2612,10 @@
     return;
   }
 
-  H.ReportError("Unexpected input. Please report this at dartbug.com.");
+  H.ReportError(
+      builder_->script(), TokenPosition::kNoSource,
+      "Unbound type parameter found in %s.  Please report this at dartbug.com.",
+      active_class_->ToCString());
 }
 
 const TypeArguments& StreamingDartTypeTranslator::BuildTypeArguments(
@@ -2770,6 +2778,9 @@
       case kLet:
         EvaluateLet();
         break;
+      case kInstantiation:
+        EvaluatePartialTearoffInstantiation();
+        break;
       case kBigIntLiteral:
         EvaluateBigIntLiteral();
         break;
@@ -3179,11 +3190,15 @@
   if (constructor.IsFactory()) {
     // Factories return the new object.
     result_ ^= result.raw();
-    result_ = H.Canonicalize(result_);
   } else {
     ASSERT(!receiver->IsNull());
-    result_ = H.Canonicalize(*receiver);
+    result_ ^= (*receiver).raw();
   }
+  if (I->obfuscate() &&
+      (result_.clazz() == I->object_store()->symbol_class())) {
+    Obfuscator::ObfuscateSymbolInstance(H.thread(), result_);
+  }
+  result_ = H.Canonicalize(result_);
 }
 
 void StreamingConstantEvaluator::EvaluateNot() {
@@ -3293,7 +3308,8 @@
 }
 
 void StreamingConstantEvaluator::EvaluateSymbolLiteral() {
-  const String& symbol_value = H.DartSymbol(
+  // The symbol value is read plain and obfuscated later.
+  const String& symbol_value = H.DartSymbolPlain(
       builder_->ReadStringReference());  // read index into string table.
 
   const Class& symbol_class =
@@ -3356,8 +3372,9 @@
   ASSERT(!map_class.IsNull());
   ASSERT(map_class.NumTypeArguments() == 2);
 
-  const Field& field = Field::Handle(
-      Z, map_class.LookupInstanceFieldAllowPrivate(H.DartSymbol("_kvPairs")));
+  const Field& field =
+      Field::Handle(Z, map_class.LookupInstanceFieldAllowPrivate(
+                           H.DartSymbolObfuscate("_kvPairs")));
   ASSERT(!field.IsNull());
 
   // NOTE: This needs to be kept in sync with `runtime/lib/immutable_map.dart`!
@@ -3387,6 +3404,41 @@
   EvaluateExpression(builder_->ReaderOffset(), false);  // read body
 }
 
+void StreamingConstantEvaluator::EvaluatePartialTearoffInstantiation() {
+  // This method call wasn't cached, so receiver et al. isn't cached either.
+  const Instance& receiver =
+      EvaluateExpression(builder_->ReaderOffset(), false);  // read receiver.
+  if (!receiver.IsClosure()) {
+    H.ReportError(script_, TokenPosition::kNoSource, "Expected closure.");
+  }
+  const Closure& old_closure = Closure::Cast(receiver);
+
+  // read type arguments.
+  intptr_t num_type_args = builder_->ReadListLength();
+  const TypeArguments* type_args = &T.BuildTypeArguments(num_type_args);
+  // Even if all dynamic types are passed in, we need to put a vector in here to
+  // distinguish this partially applied tearoff from a normal tearoff. This is
+  // necessary because the tearoff wrapper (BuildGraphOfImplicitClosureFunction)
+  // needs to throw NSM if type arguments are passed to a partially applied
+  // tearoff.
+  if (type_args->IsNull()) {
+    type_args =
+        &TypeArguments::ZoneHandle(Z, TypeArguments::New(num_type_args));
+    for (intptr_t i = 0; i < num_type_args; ++i) {
+      type_args->SetTypeAt(i, Type::ZoneHandle(Z, Type::DynamicType()));
+    }
+  }
+
+  // Create new closure with the type arguments inserted, and other things
+  // copied over.
+  Closure& new_closure = Closure::Handle(
+      Z, Closure::New(TypeArguments::Handle(
+                          Z, old_closure.instantiator_type_arguments()),
+                      *type_args, Function::Handle(Z, old_closure.function()),
+                      Context::Handle(Z, old_closure.context()), Heap::kOld));
+  result_ = H.Canonicalize(new_closure);
+}
+
 void StreamingConstantEvaluator::EvaluateBigIntLiteral() {
   const String& value =
       H.DartString(builder_->ReadStringReference());  // read string reference.
@@ -3399,7 +3451,7 @@
 }
 
 void StreamingConstantEvaluator::EvaluateStringLiteral() {
-  result_ = H.DartSymbol(builder_->ReadStringReference())
+  result_ = H.DartSymbolPlain(builder_->ReadStringReference())
                 .raw();  // read string reference.
 }
 
@@ -3469,8 +3521,8 @@
   const Array& names =
       Array::ZoneHandle(Z, Array::New(list_length, H.allocation_space()));
   for (intptr_t i = 0; i < list_length; ++i) {
-    String& name =
-        H.DartSymbol(builder_->ReadStringReference());  // read ith name index.
+    String& name = H.DartSymbolObfuscate(
+        builder_->ReadStringReference());  // read ith name index.
     names.SetAt(i, name);
     EvaluateExpression(builder_->ReaderOffset(),
                        false);  // read ith expression.
@@ -3547,6 +3599,10 @@
     // The factory method returns the allocated object.
     instance ^= result.raw();
   }
+  if (I->obfuscate() &&
+      (instance.clazz() == I->object_store()->symbol_class())) {
+    Obfuscator::ObfuscateSymbolInstance(H.thread(), instance);
+  }
   return H.Canonicalize(instance);
 }
 
@@ -3692,10 +3748,9 @@
   return flow_graph_builder_->optimizing_;
 }
 
-FlowGraph* StreamingFlowGraphBuilder::BuildGraphOfStaticFieldInitializer() {
+FlowGraph* StreamingFlowGraphBuilder::BuildGraphOfFieldInitializer() {
   FieldHelper field_helper(this);
   field_helper.ReadUntilExcluding(FieldHelper::kInitializer);
-  ASSERT(field_helper.IsStatic());
 
   Tag initializer_tag = ReadTag();  // read first part of initializer.
   if (initializer_tag != kSomething) {
@@ -4201,7 +4256,7 @@
       VariableDeclarationHelper helper(this);
       helper.ReadUntilExcluding(VariableDeclarationHelper::kEnd);
 
-      argument_names.SetAt(i, H.DartSymbol(helper.name_index_));
+      argument_names.SetAt(i, H.DartSymbolObfuscate(helper.name_index_));
     }
   }
 
@@ -4251,7 +4306,7 @@
     for (intptr_t i = 0; i < num_type_params; ++i) {
       ReadFlags();                                         // skip flags
       SkipListOfExpressions();                             // skip annotations
-      String& name = H.DartSymbol(ReadStringReference());  // read name
+      String& name = H.DartSymbolObfuscate(ReadStringReference());  // read name
       AbstractType& bound = T.BuildType();                 // read bound
 
       if (forwarding_target != NULL) {
@@ -4710,8 +4765,8 @@
     case RawFunction::kImplicitGetter:
     case RawFunction::kImplicitStaticFinalGetter:
     case RawFunction::kImplicitSetter: {
-      return IsStaticInitializer(function, Z)
-                 ? BuildGraphOfStaticFieldInitializer()
+      return IsFieldInitializer(function, Z)
+                 ? BuildGraphOfFieldInitializer()
                  : BuildGraphOfFieldAccessor(scopes()->setter_value);
     }
     case RawFunction::kMethodExtractor:
@@ -4843,6 +4898,10 @@
       return BuildConstantExpression(position);
     case kInstantiation:
       return BuildPartialTearoffInstantiation(position);
+    case kLoadLibrary:
+    case kCheckLibraryIsLoaded:
+      ReadUInt();  // skip library index
+      return BuildFutureNullValue(position);
     default:
       H.ReportError("Unsupported tag at this point: %d.", tag);
       UNREACHABLE();
@@ -5395,6 +5454,10 @@
     case kConstantExpression:
       SkipConstantReference();
       return;
+    case kLoadLibrary:
+    case kCheckLibraryIsLoaded:
+      ReadUInt();  // skip library index
+      return;
     default:
       H.ReportError("Unsupported tag at this point: %d.", tag);
       UNREACHABLE();
@@ -6206,7 +6269,8 @@
     *argument_names ^= Array::New(list_length, Heap::kOld);
   }
   for (intptr_t i = 0; i < list_length; ++i) {
-    String& name = H.DartSymbol(ReadStringReference());  // read ith name index.
+    String& name =
+        H.DartSymbolObfuscate(ReadStringReference());    // read ith name index.
     instructions += BuildExpression();                   // read ith expression.
     if (!skip_push_arguments) instructions += PushArgument();
     if (do_drop) instructions += Drop();
@@ -7082,7 +7146,7 @@
     intptr_t named_list_length = ReadListLength();
     argument_names ^= Array::New(named_list_length, H.allocation_space());
     for (intptr_t i = 0; i < named_list_length; i++) {
-      const String& arg_name = H.DartSymbol(ReadStringReference());
+      const String& arg_name = H.DartSymbolObfuscate(ReadStringReference());
       argument_names.SetAt(i, arg_name);
       SkipExpression();
     }
@@ -7855,8 +7919,8 @@
     TokenPosition* position) {
   if (position != NULL) *position = TokenPosition::kNoSource;
 
-  return Constant(
-      H.DartSymbol(ReadStringReference()));  // read index into string table.
+  return Constant(H.DartSymbolPlain(
+      ReadStringReference()));  // read index into string table.
 }
 
 Fragment StreamingFlowGraphBuilder::BuildIntLiteral(uint8_t payload,
@@ -7899,6 +7963,23 @@
   return Constant(Instance::ZoneHandle(Z, Instance::null()));
 }
 
+Fragment StreamingFlowGraphBuilder::BuildFutureNullValue(
+    TokenPosition* position) {
+  if (position != NULL) *position = TokenPosition::kNoSource;
+  const Class& future = Class::Handle(Z, I->object_store()->future_class());
+  ASSERT(!future.IsNull());
+  const Function& constructor =
+      Function::ZoneHandle(Z, future.LookupFunction(Symbols::FutureValue()));
+  ASSERT(!constructor.IsNull());
+
+  Fragment instructions;
+  instructions += BuildNullLiteral(position);
+  instructions += PushArgument();
+  instructions += StaticCall(TokenPosition::kNoSource, constructor,
+                             /* argument_count = */ 1, ICData::kStatic);
+  return instructions;
+}
+
 Fragment StreamingFlowGraphBuilder::BuildVectorCreation(
     TokenPosition* position) {
   if (position != NULL) *position = TokenPosition::kNoSource;
@@ -8453,9 +8534,15 @@
       const Class& klass = Class::ZoneHandle(
           Z, Library::LookupCoreClass(Symbols::FallThroughError()));
       ASSERT(!klass.IsNull());
+
+      GrowableHandlePtrArray<const String> pieces(Z, 3);
+      pieces.Add(Symbols::FallThroughError());
+      pieces.Add(Symbols::Dot());
+      pieces.Add(H.DartSymbolObfuscate("_create"));
+
       const Function& constructor = Function::ZoneHandle(
-          Z, klass.LookupConstructorAllowPrivate(
-                 H.DartSymbol("FallThroughError._create")));
+          Z, klass.LookupConstructorAllowPrivate(String::ZoneHandle(
+                 Z, Symbols::FromConcatAll(H.thread(), pieces))));
       ASSERT(!constructor.IsNull());
       const String& url = H.DartString(
           parsed_function()->function().ToLibNamePrefixedQualifiedCString(),
@@ -8989,7 +9076,7 @@
 
   VariableDeclarationHelper helper(this);
   helper.ReadUntilExcluding(VariableDeclarationHelper::kType);
-  String& name = H.DartSymbol(helper.name_index_);
+  String& name = H.DartSymbolObfuscate(helper.name_index_);
   AbstractType& type = T.BuildType();  // read type.
   Tag tag = ReadTag();                 // read (first part of) initializer.
 
@@ -9072,7 +9159,7 @@
 
       const String* name;
       if (declaration) {
-        name = &H.DartSymbol(name_index);
+        name = &H.DartSymbolObfuscate(name_index);
       } else {
         name = &Symbols::AnonymousClosure();
       }
@@ -9195,7 +9282,7 @@
       parameter = TypeParameter::New(
           set_on_class ? *active_class->klass : Class::Handle(Z),
           parameterized_function, i,
-          H.DartSymbol(ReadStringReference()),  // read ith name index.
+          H.DartSymbolObfuscate(ReadStringReference()),  // read ith name index.
           null_bound, TokenPosition::kNoSource);
       type_parameters.SetTypeAt(i, parameter);
       SkipDartType();  // read guard.
@@ -9312,7 +9399,7 @@
 
     function.SetParameterTypeAt(
         pos, type.IsMalformed() ? Type::dynamic_type() : type);
-    function.SetParameterNameAt(pos, H.DartSymbol(helper.name_index_));
+    function.SetParameterNameAt(pos, H.DartSymbolObfuscate(helper.name_index_));
   }
 
   intptr_t named_parameter_count_check = ReadListLength();  // read list length.
@@ -9329,7 +9416,7 @@
 
     function.SetParameterTypeAt(
         pos, type.IsMalformed() ? Type::dynamic_type() : type);
-    function.SetParameterNameAt(pos, H.DartSymbol(helper.name_index_));
+    function.SetParameterNameAt(pos, H.DartSymbolObfuscate(helper.name_index_));
   }
 
   function_node_helper->SetJustRead(FunctionNodeHelper::kNamedParameters);
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index b4dca31..80da18a 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -271,6 +271,9 @@
     kExternal = 1 << 2,
     kConst = 1 << 3,  // Only for external const factories.
     kForwardingStub = 1 << 4,
+
+    // TODO(29841): Remove this line after the issue is resolved.
+    kRedirectingFactoryConstructor = 1 << 7,
   };
 
   explicit ProcedureHelper(StreamingFlowGraphBuilder* builder) {
@@ -292,6 +295,9 @@
   bool IsExternal() { return (flags_ & kExternal) != 0; }
   bool IsConst() { return (flags_ & kConst) != 0; }
   bool IsForwardingStub() { return (flags_ & kForwardingStub) != 0; }
+  bool IsRedirectingFactoryConstructor() {
+    return (flags_ & kRedirectingFactoryConstructor) != 0;
+  }
 
   NameIndex canonical_name_;
   TokenPosition position_;
@@ -872,6 +878,7 @@
   void EvaluateListLiteralInternal();
   void EvaluateMapLiteralInternal();
   void EvaluateLet();
+  void EvaluatePartialTearoffInstantiation();
   void EvaluateBigIntLiteral();
   void EvaluateStringLiteral();
   void EvaluateIntLiteral(uint8_t payload);
@@ -1033,7 +1040,7 @@
 
   bool optimizing();
 
-  FlowGraph* BuildGraphOfStaticFieldInitializer();
+  FlowGraph* BuildGraphOfFieldInitializer();
   FlowGraph* BuildGraphOfFieldAccessor(LocalVariable* setter_value);
   void SetupDefaultParameterValues();
   Fragment BuildFieldInitializer(NameIndex canonical_name);
@@ -1304,6 +1311,7 @@
   Fragment BuildDoubleLiteral(TokenPosition* position);
   Fragment BuildBoolLiteral(bool value, TokenPosition* position);
   Fragment BuildNullLiteral(TokenPosition* position);
+  Fragment BuildFutureNullValue(TokenPosition* position);
   Fragment BuildVectorCreation(TokenPosition* position);
   Fragment BuildVectorGet(TokenPosition* position);
   Fragment BuildVectorSet(TokenPosition* position);
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 1c75fa7..e8b7c6b 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -4,6 +4,7 @@
 
 #include <set>
 
+#include "vm/compiler/aot/precompiler.h"
 #include "vm/compiler/frontend/kernel_to_il.h"
 
 #include "vm/compiler/backend/il.h"
@@ -435,23 +436,46 @@
   return String::ZoneHandle(Z, String::FromUTF8(utf8_array, len, space));
 }
 
-const String& TranslationHelper::DartSymbol(const char* content) const {
+const String& TranslationHelper::DartSymbolPlain(const char* content) const {
   return String::ZoneHandle(Z, Symbols::New(thread_, content));
 }
 
-String& TranslationHelper::DartSymbol(StringIndex string_index) const {
+String& TranslationHelper::DartSymbolPlain(StringIndex string_index) const {
   intptr_t length = StringSize(string_index);
   uint8_t* buffer = Z->Alloc<uint8_t>(length);
   {
     NoSafepointScope no_safepoint;
     memmove(buffer, StringBuffer(string_index), length);
   }
-  return String::ZoneHandle(Z, Symbols::FromUTF8(thread_, buffer, length));
+  String& result =
+      String::ZoneHandle(Z, Symbols::FromUTF8(thread_, buffer, length));
+  return result;
 }
 
-String& TranslationHelper::DartSymbol(const uint8_t* utf8_array,
-                                      intptr_t len) const {
-  return String::ZoneHandle(Z, Symbols::FromUTF8(thread_, utf8_array, len));
+const String& TranslationHelper::DartSymbolObfuscate(
+    const char* content) const {
+  String& result = String::ZoneHandle(Z, Symbols::New(thread_, content));
+  if (I->obfuscate()) {
+    Obfuscator obfuscator(thread_, String::Handle(Z));
+    result = obfuscator.Rename(result, true);
+  }
+  return result;
+}
+
+String& TranslationHelper::DartSymbolObfuscate(StringIndex string_index) const {
+  intptr_t length = StringSize(string_index);
+  uint8_t* buffer = Z->Alloc<uint8_t>(length);
+  {
+    NoSafepointScope no_safepoint;
+    memmove(buffer, StringBuffer(string_index), length);
+  }
+  String& result =
+      String::ZoneHandle(Z, Symbols::FromUTF8(thread_, buffer, length));
+  if (I->obfuscate()) {
+    Obfuscator obfuscator(thread_, String::Handle(Z));
+    result = obfuscator.Rename(result, true);
+  }
+  return result;
 }
 
 const String& TranslationHelper::DartClassName(NameIndex kernel_class) {
@@ -505,7 +529,7 @@
   }
   String& name =
       String::ZoneHandle(Z, String::FromUTF8(buffer, size, allocation_space_));
-  ManglePrivateName(parent, &name, false);
+  ManglePrivateName(parent, &name);
   name = Field::SetterSymbol(name);
   return name;
 }
@@ -518,7 +542,7 @@
 const String& TranslationHelper::DartGetterName(NameIndex parent,
                                                 StringIndex getter) {
   String& name = DartString(getter);
-  ManglePrivateName(parent, &name, false);
+  ManglePrivateName(parent, &name);
   name = Field::GetterSymbol(name);
   return name;
 }
@@ -556,7 +580,8 @@
   // This ASSERT is just a sanity check.
   ASSERT(IsLibrary(kernel_library) ||
          IsAdministrative(CanonicalNameParent(kernel_library)));
-  const String& library_name = DartSymbol(CanonicalNameString(kernel_library));
+  const String& library_name =
+      DartSymbolPlain(CanonicalNameString(kernel_library));
   ASSERT(!library_name.IsNull());
   RawLibrary* library = Library::LookupLibrary(thread_, library_name);
   ASSERT(library != Object::null());
@@ -589,7 +614,7 @@
     klass = LookupClassByKernelClass(enclosing);
   }
   RawField* field = klass.LookupFieldAllowPrivate(
-      DartSymbol(CanonicalNameString(kernel_field)));
+      DartSymbolObfuscate(CanonicalNameString(kernel_field)));
   ASSERT(field != Object::null());
   return field;
 }
@@ -726,27 +751,50 @@
 
 String& TranslationHelper::ManglePrivateName(NameIndex parent,
                                              String* name_to_modify,
-                                             bool symbolize) {
+                                             bool symbolize,
+                                             bool obfuscate) {
   if (name_to_modify->Length() >= 1 && name_to_modify->CharAt(0) == '_') {
     const Library& library =
         Library::Handle(Z, LookupLibraryByKernelLibrary(parent));
     *name_to_modify = library.PrivateName(*name_to_modify);
+    if (obfuscate && I->obfuscate()) {
+      const String& library_key = String::Handle(library.private_key());
+      Obfuscator obfuscator(thread_, library_key);
+      *name_to_modify = obfuscator.Rename(*name_to_modify);
+    }
   } else if (symbolize) {
     *name_to_modify = Symbols::New(thread_, *name_to_modify);
+    if (obfuscate && I->obfuscate()) {
+      const String& library_key = String::Handle();
+      Obfuscator obfuscator(thread_, library_key);
+      *name_to_modify = obfuscator.Rename(*name_to_modify);
+    }
   }
   return *name_to_modify;
 }
 
 String& TranslationHelper::ManglePrivateName(const Library& library,
                                              String* name_to_modify,
-                                             bool symbolize) {
+                                             bool symbolize,
+                                             bool obfuscate) {
   if (name_to_modify->Length() >= 1 && name_to_modify->CharAt(0) == '_') {
     *name_to_modify = library.PrivateName(*name_to_modify);
+    if (obfuscate && I->obfuscate()) {
+      const String& library_key = String::Handle(library.private_key());
+      Obfuscator obfuscator(thread_, library_key);
+      *name_to_modify = obfuscator.Rename(*name_to_modify);
+    }
   } else if (symbolize) {
     *name_to_modify = Symbols::New(thread_, *name_to_modify);
+    if (obfuscate && I->obfuscate()) {
+      const String& library_key = String::Handle();
+      Obfuscator obfuscator(thread_, library_key);
+      *name_to_modify = obfuscator.Rename(*name_to_modify);
+    }
   }
   return *name_to_modify;
 }
+
 FlowGraphBuilder::FlowGraphBuilder(
     intptr_t kernel_offset,
     ParsedFunction* parsed_function,
@@ -1692,9 +1740,14 @@
   const Class& klass =
       Class::ZoneHandle(Z, Library::LookupCoreClass(Symbols::TypeError()));
   ASSERT(!klass.IsNull());
+  GrowableHandlePtrArray<const String> pieces(Z, 3);
+  pieces.Add(Symbols::TypeError());
+  pieces.Add(Symbols::Dot());
+  pieces.Add(H.DartSymbolObfuscate("_create"));
+
   const Function& constructor = Function::ZoneHandle(
-      Z,
-      klass.LookupConstructorAllowPrivate(H.DartSymbol("_TypeError._create")));
+      Z, klass.LookupConstructorAllowPrivate(
+             String::ZoneHandle(Z, Symbols::FromConcatAll(thread_, pieces))));
   ASSERT(!constructor.IsNull());
 
   const String& url = H.DartString(
@@ -1720,7 +1773,7 @@
   instructions += IntConstant(0);
   instructions += PushArgument();  // column
 
-  instructions += Constant(H.DartSymbol("Malformed type."));
+  instructions += Constant(H.DartSymbolPlain("Malformed type."));
   instructions += PushArgument();  // message
 
   instructions += StaticCall(TokenPosition::kNoSource, constructor,
@@ -2162,9 +2215,8 @@
   const Class& klass =
       Class::ZoneHandle(Z, Library::LookupCoreClass(Symbols::AssertionError()));
   ASSERT(!klass.IsNull());
-  const Function& target =
-      Function::ZoneHandle(Z, klass.LookupStaticFunctionAllowPrivate(
-                                  H.DartSymbol("_evaluateAssertion")));
+  const Function& target = Function::ZoneHandle(
+      Z, klass.LookupStaticFunctionAllowPrivate(Symbols::EvaluateAssertion()));
   ASSERT(!target.IsNull());
   return StaticCall(TokenPosition::kNoSource, target, /* argument_count = */ 1,
                     ICData::kStatic);
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.h b/runtime/vm/compiler/frontend/kernel_to_il.h
index 79254c6..cd5ffd4 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.h
+++ b/runtime/vm/compiler/frontend/kernel_to_il.h
@@ -221,6 +221,10 @@
     return klass->NumTypeArguments();
   }
 
+  const char* ToCString() {
+    return member != NULL ? member->ToCString() : klass->ToCString();
+  }
+
   // The current enclosing class (or the library top-level class).
   const Class* klass;
 
@@ -375,9 +379,10 @@
                      intptr_t len,
                      Heap::Space space);
 
-  const String& DartSymbol(const char* content) const;
-  String& DartSymbol(StringIndex string_index) const;
-  String& DartSymbol(const uint8_t* utf8_array, intptr_t len) const;
+  const String& DartSymbolPlain(const char* content) const;
+  String& DartSymbolPlain(StringIndex string_index) const;
+  const String& DartSymbolObfuscate(const char* content) const;
+  String& DartSymbolObfuscate(StringIndex string_index) const;
 
   const String& DartClassName(NameIndex kernel_class);
 
@@ -434,10 +439,12 @@
   // to get the import URI of the library where the name is visible.
   String& ManglePrivateName(NameIndex parent,
                             String* name_to_modify,
-                            bool symbolize = true);
+                            bool symbolize = true,
+                            bool obfuscate = true);
   String& ManglePrivateName(const Library& library,
                             String* name_to_modify,
-                            bool symbolize = true);
+                            bool symbolize = true,
+                            bool obfuscate = true);
 
   Thread* thread_;
   Zone* zone_;
diff --git a/runtime/vm/compiler/intrinsifier_arm.cc b/runtime/vm/compiler/intrinsifier_arm.cc
index 589f84d..1fa171f 100644
--- a/runtime/vm/compiler/intrinsifier_arm.cc
+++ b/runtime/vm/compiler/intrinsifier_arm.cc
@@ -750,7 +750,7 @@
   // R6 = &r_digits[1]
   __ add(R6, R2,
          Operand(TypedData::data_offset() - kHeapObjectTag +
-                 Bigint::kBytesPerDigit));
+                 kBytesPerBigIntDigit));
   // R6 = &r_digits[x_used + n ~/ _DIGIT_BITS + 1]
   __ add(R4, R4, Operand(R0, ASR, 1));
   __ add(R6, R6, Operand(R4, LSL, 2));
@@ -761,13 +761,13 @@
   __ mov(R9, Operand(0));
   Label loop;
   __ Bind(&loop);
-  __ ldr(R4, Address(NOTFP, -Bigint::kBytesPerDigit, Address::PreIndex));
+  __ ldr(R4, Address(NOTFP, -kBytesPerBigIntDigit, Address::PreIndex));
   __ orr(R9, R9, Operand(R4, LSR, R0));
-  __ str(R9, Address(R6, -Bigint::kBytesPerDigit, Address::PreIndex));
+  __ str(R9, Address(R6, -kBytesPerBigIntDigit, Address::PreIndex));
   __ mov(R9, Operand(R4, LSL, R1));
   __ teq(NOTFP, Operand(R8));
   __ b(&loop, NE);
-  __ str(R9, Address(R6, -Bigint::kBytesPerDigit, Address::PreIndex));
+  __ str(R9, Address(R6, -kBytesPerBigIntDigit, Address::PreIndex));
   // Returning Object::null() is not required, since this method is private.
   __ Ret();
 }
@@ -797,15 +797,15 @@
   // R0 = 32 - R1
   __ rsb(R0, R1, Operand(32));
   // R9 = x_digits[n ~/ _DIGIT_BITS] >> (n % _DIGIT_BITS)
-  __ ldr(R9, Address(NOTFP, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R9, Address(NOTFP, kBytesPerBigIntDigit, Address::PostIndex));
   __ mov(R9, Operand(R9, LSR, R1));
   Label loop_entry;
   __ b(&loop_entry);
   Label loop;
   __ Bind(&loop);
-  __ ldr(R4, Address(NOTFP, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R4, Address(NOTFP, kBytesPerBigIntDigit, Address::PostIndex));
   __ orr(R9, R9, Operand(R4, LSL, R0));
-  __ str(R9, Address(R6, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R9, Address(R6, kBytesPerBigIntDigit, Address::PostIndex));
   __ mov(R9, Operand(R4, LSR, R1));
   __ Bind(&loop_entry);
   __ teq(R6, Operand(R8));
@@ -845,11 +845,11 @@
   Label add_loop;
   __ Bind(&add_loop);
   // Loop a_used times, a_used > 0.
-  __ ldr(R4, Address(R1, Bigint::kBytesPerDigit, Address::PostIndex));
-  __ ldr(R9, Address(R3, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R4, Address(R1, kBytesPerBigIntDigit, Address::PostIndex));
+  __ ldr(R9, Address(R3, kBytesPerBigIntDigit, Address::PostIndex));
   __ adcs(R4, R4, Operand(R9));
   __ teq(R1, Operand(NOTFP));  // Does not affect carry flag.
-  __ str(R4, Address(R8, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R4, Address(R8, kBytesPerBigIntDigit, Address::PostIndex));
   __ b(&add_loop, NE);
 
   Label last_carry;
@@ -859,10 +859,10 @@
   Label carry_loop;
   __ Bind(&carry_loop);
   // Loop used - a_used times, used - a_used > 0.
-  __ ldr(R4, Address(R1, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R4, Address(R1, kBytesPerBigIntDigit, Address::PostIndex));
   __ adcs(R4, R4, Operand(0));
   __ teq(R1, Operand(R6));  // Does not affect carry flag.
-  __ str(R4, Address(R8, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R4, Address(R8, kBytesPerBigIntDigit, Address::PostIndex));
   __ b(&carry_loop, NE);
 
   __ Bind(&last_carry);
@@ -904,11 +904,11 @@
   Label sub_loop;
   __ Bind(&sub_loop);
   // Loop a_used times, a_used > 0.
-  __ ldr(R4, Address(R1, Bigint::kBytesPerDigit, Address::PostIndex));
-  __ ldr(R9, Address(R3, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R4, Address(R1, kBytesPerBigIntDigit, Address::PostIndex));
+  __ ldr(R9, Address(R3, kBytesPerBigIntDigit, Address::PostIndex));
   __ sbcs(R4, R4, Operand(R9));
   __ teq(R1, Operand(NOTFP));  // Does not affect carry flag.
-  __ str(R4, Address(R8, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R4, Address(R8, kBytesPerBigIntDigit, Address::PostIndex));
   __ b(&sub_loop, NE);
 
   Label done;
@@ -918,10 +918,10 @@
   Label carry_loop;
   __ Bind(&carry_loop);
   // Loop used - a_used times, used - a_used > 0.
-  __ ldr(R4, Address(R1, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R4, Address(R1, kBytesPerBigIntDigit, Address::PostIndex));
   __ sbcs(R4, R4, Operand(0));
   __ teq(R1, Operand(R6));  // Does not affect carry flag.
-  __ str(R4, Address(R8, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R4, Address(R8, kBytesPerBigIntDigit, Address::PostIndex));
   __ b(&carry_loop, NE);
 
   __ Bind(&done);
@@ -992,7 +992,7 @@
   // n:   R8
 
   // uint32_t mi = *mip++
-  __ ldr(R2, Address(R4, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R2, Address(R4, kBytesPerBigIntDigit, Address::PostIndex));
 
   // uint32_t aj = *ajp
   __ ldr(R0, Address(R9, 0));
@@ -1001,7 +1001,7 @@
   __ umaal(R0, R1, R2, R3);  // R1:R0 = R2*R3 + R1 + R0.
 
   // *ajp++ = low32(t) = R0
-  __ str(R0, Address(R9, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R0, Address(R9, kBytesPerBigIntDigit, Address::PostIndex));
 
   // c = high32(t) = R1
 
@@ -1015,14 +1015,14 @@
   // *ajp++ += c
   __ ldr(R0, Address(R9, 0));
   __ adds(R0, R0, Operand(R1));
-  __ str(R0, Address(R9, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R0, Address(R9, kBytesPerBigIntDigit, Address::PostIndex));
   __ b(&done, CC);
 
   Label propagate_carry_loop;
   __ Bind(&propagate_carry_loop);
   __ ldr(R0, Address(R9, 0));
   __ adds(R0, R0, Operand(1));
-  __ str(R0, Address(R9, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R0, Address(R9, kBytesPerBigIntDigit, Address::PostIndex));
   __ b(&propagate_carry_loop, CS);
 
   __ Bind(&done);
@@ -1064,7 +1064,7 @@
 
   // R3 = x = *xip++, return if x == 0
   Label x_zero;
-  __ ldr(R3, Address(R4, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R3, Address(R4, kBytesPerBigIntDigit, Address::PostIndex));
   __ tst(R3, Operand(R3));
   __ b(&x_zero, EQ);
 
@@ -1079,7 +1079,7 @@
   __ umaal(R0, R8, R3, R3);  // R8:R0 = R3*R3 + R8 + R0.
 
   // *ajp++ = low32(t) = R0
-  __ str(R0, Address(NOTFP, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R0, Address(NOTFP, kBytesPerBigIntDigit, Address::PostIndex));
 
   // R8 = low32(c) = high32(t)
   // R9 = high32(c) = 0
@@ -1103,7 +1103,7 @@
   // n:   R6
 
   // uint32_t xi = *xip++
-  __ ldr(R2, Address(R4, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R2, Address(R4, kBytesPerBigIntDigit, Address::PostIndex));
 
   // uint96_t t = R9:R8:R0 = 2*x*xi + aj + c
   __ umull(R0, R1, R2, R3);  // R1:R0 = R2*R3.
@@ -1120,7 +1120,7 @@
   __ adc(R9, R2, Operand(0));  // R9:R8:R0 = 2*x*xi + c + aj.
 
   // *ajp++ = low32(t) = R0
-  __ str(R0, Address(NOTFP, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R0, Address(NOTFP, kBytesPerBigIntDigit, Address::PostIndex));
 
   // while (--n >= 0)
   __ subs(R6, R6, Operand(1));  // --n
@@ -1161,8 +1161,8 @@
   __ ldr(R4, Address(SP, 2 * kWordSize));  // args
 
   // R3 = rho = args[2]
-  __ ldr(R3, FieldAddress(
-                 R4, TypedData::data_offset() + 2 * Bigint::kBytesPerDigit));
+  __ ldr(R3,
+         FieldAddress(R4, TypedData::data_offset() + 2 * kBytesPerBigIntDigit));
 
   // R2 = digits[i >> 1]
   __ ldrd(R0, R1, SP, 0 * kWordSize);  // R0 = i as Smi, R1 = digits
@@ -1173,8 +1173,8 @@
   __ umull(R0, R1, R2, R3);
 
   // args[4] = t mod DIGIT_BASE = low32(t)
-  __ str(R0, FieldAddress(
-                 R4, TypedData::data_offset() + 4 * Bigint::kBytesPerDigit));
+  __ str(R0,
+         FieldAddress(R4, TypedData::data_offset() + 4 * kBytesPerBigIntDigit));
 
   __ mov(R0, Operand(Smi::RawValue(1)));  // One digit processed.
   __ Ret();
diff --git a/runtime/vm/compiler/intrinsifier_arm64.cc b/runtime/vm/compiler/intrinsifier_arm64.cc
index c8aaf0a..4da90f0 100644
--- a/runtime/vm/compiler/intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/intrinsifier_arm64.cc
@@ -649,7 +649,7 @@
   // R8 = &r_digits[2*1]
   __ add(R8, R4,
          Operand(TypedData::data_offset() - kHeapObjectTag +
-                 2 * Bigint::kBytesPerDigit));
+                 2 * kBytesPerBigIntDigit));
   // R8 = &r_digits[2*(R2 + n ~/ (2*_DIGIT_BITS) + 1)]
   __ add(R0, R0, Operand(R2));
   __ add(R8, R8, Operand(R0, LSL, 3));
@@ -661,14 +661,14 @@
   __ mov(R1, ZR);
   Label loop;
   __ Bind(&loop);
-  __ ldr(R0, Address(R7, -2 * Bigint::kBytesPerDigit, Address::PreIndex));
+  __ ldr(R0, Address(R7, -2 * kBytesPerBigIntDigit, Address::PreIndex));
   __ lsrv(R4, R0, R2);
   __ orr(R1, R1, Operand(R4));
-  __ str(R1, Address(R8, -2 * Bigint::kBytesPerDigit, Address::PreIndex));
+  __ str(R1, Address(R8, -2 * kBytesPerBigIntDigit, Address::PreIndex));
   __ lslv(R1, R0, R3);
   __ cmp(R7, Operand(R6));
   __ b(&loop, NE);
-  __ str(R1, Address(R8, -2 * Bigint::kBytesPerDigit, Address::PreIndex));
+  __ str(R1, Address(R8, -2 * kBytesPerBigIntDigit, Address::PreIndex));
   // Returning Object::null() is not required, since this method is private.
   __ ret();
 }
@@ -701,16 +701,16 @@
   __ LoadImmediate(R2, 64);
   __ sub(R2, R2, Operand(R3));
   // R1 = x_digits[n ~/ (2*_DIGIT_BITS)] >> (n % (2*_DIGIT_BITS))
-  __ ldr(R1, Address(R7, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R1, Address(R7, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ lsrv(R1, R1, R3);
   Label loop_entry;
   __ b(&loop_entry);
   Label loop;
   __ Bind(&loop);
-  __ ldr(R0, Address(R7, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R0, Address(R7, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ lslv(R4, R0, R2);
   __ orr(R1, R1, Operand(R4));
-  __ str(R1, Address(R8, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R1, Address(R8, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ lsrv(R1, R0, R3);
   __ Bind(&loop_entry);
   __ cmp(R8, Operand(R6));
@@ -754,11 +754,11 @@
   Label add_loop;
   __ Bind(&add_loop);
   // Loop (a_used+1)/2 times, a_used > 0.
-  __ ldr(R0, Address(R3, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
-  __ ldr(R1, Address(R5, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R0, Address(R3, 2 * kBytesPerBigIntDigit, Address::PostIndex));
+  __ ldr(R1, Address(R5, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ adcs(R0, R0, R1);
   __ sub(R9, R3, Operand(R7));  // Does not affect carry flag.
-  __ str(R0, Address(R6, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R0, Address(R6, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ cbnz(&add_loop, R9);  // Does not affect carry flag.
 
   Label last_carry;
@@ -768,10 +768,10 @@
   Label carry_loop;
   __ Bind(&carry_loop);
   // Loop (used+1)/2 - (a_used+1)/2 times, used - a_used > 0.
-  __ ldr(R0, Address(R3, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R0, Address(R3, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ adcs(R0, R0, ZR);
   __ sub(R9, R3, Operand(R8));  // Does not affect carry flag.
-  __ str(R0, Address(R6, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R0, Address(R6, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ cbnz(&carry_loop, R9);
 
   __ Bind(&last_carry);
@@ -819,11 +819,11 @@
   Label sub_loop;
   __ Bind(&sub_loop);
   // Loop (a_used+1)/2 times, a_used > 0.
-  __ ldr(R0, Address(R3, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
-  __ ldr(R1, Address(R5, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R0, Address(R3, 2 * kBytesPerBigIntDigit, Address::PostIndex));
+  __ ldr(R1, Address(R5, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ sbcs(R0, R0, R1);
   __ sub(R9, R3, Operand(R7));  // Does not affect carry flag.
-  __ str(R0, Address(R6, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R0, Address(R6, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ cbnz(&sub_loop, R9);  // Does not affect carry flag.
 
   Label done;
@@ -833,10 +833,10 @@
   Label carry_loop;
   __ Bind(&carry_loop);
   // Loop (used+1)/2 - (a_used+1)/2 times, used - a_used > 0.
-  __ ldr(R0, Address(R3, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R0, Address(R3, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ sbcs(R0, R0, ZR);
   __ sub(R9, R3, Operand(R8));  // Does not affect carry flag.
-  __ str(R0, Address(R6, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R0, Address(R6, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ cbnz(&carry_loop, R9);
 
   __ Bind(&done);
@@ -913,7 +913,7 @@
   // t:   R7:R8 (not live at loop entry)
 
   // uint64_t mi = *mip++
-  __ ldr(R2, Address(R4, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R2, Address(R4, 2 * kBytesPerBigIntDigit, Address::PostIndex));
 
   // uint64_t aj = *ajp
   __ ldr(R0, Address(R5, 0));
@@ -927,7 +927,7 @@
   __ adc(R1, R8, ZR);            // c = R1 = high64(t).
 
   // *ajp++ = low64(t) = R0
-  __ str(R0, Address(R5, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R0, Address(R5, 2 * kBytesPerBigIntDigit, Address::PostIndex));
 
   // while (--n > 0)
   __ subs(R6, R6, Operand(1));  // --n
@@ -939,14 +939,14 @@
   // *ajp++ += c
   __ ldr(R0, Address(R5, 0));
   __ adds(R0, R0, Operand(R1));
-  __ str(R0, Address(R5, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R0, Address(R5, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ b(&done, CC);
 
   Label propagate_carry_loop;
   __ Bind(&propagate_carry_loop);
   __ ldr(R0, Address(R5, 0));
   __ adds(R0, R0, Operand(1));
-  __ str(R0, Address(R5, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R0, Address(R5, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ b(&propagate_carry_loop, CS);
 
   __ Bind(&done);
@@ -989,7 +989,7 @@
 
   // R3 = x = *xip++, return if x == 0
   Label x_zero;
-  __ ldr(R3, Address(R4, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R3, Address(R4, 2 * kBytesPerBigIntDigit, Address::PostIndex));
   __ tst(R3, Operand(R3));
   __ b(&x_zero, EQ);
 
@@ -1007,7 +1007,7 @@
   __ mov(R7, ZR);                // R7 = high64(c) = 0.
 
   // *ajp++ = low64(t) = R1
-  __ str(R1, Address(R5, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R1, Address(R5, 2 * kBytesPerBigIntDigit, Address::PostIndex));
 
   // int n = (used - i + 1)/2 - 1
   __ ldr(R0, Address(SP, 0 * kWordSize));  // used is Smi
@@ -1028,7 +1028,7 @@
   // n:   R8
 
   // uint64_t xi = *xip++
-  __ ldr(R2, Address(R4, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ ldr(R2, Address(R4, 2 * kBytesPerBigIntDigit, Address::PostIndex));
 
   // uint192_t t = R2:R1:R0 = 2*x*xi + aj + c
   __ mul(R0, R2, R3);    // R0 = low64(R2*R3) = low64(x*xi).
@@ -1045,7 +1045,7 @@
   __ adc(R7, R2, ZR);  // R7:R6:R0 = 2*x*xi + aj + c.
 
   // *ajp++ = low64(t) = R0
-  __ str(R0, Address(R5, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R0, Address(R5, 2 * kBytesPerBigIntDigit, Address::PostIndex));
 
   // while (--n >= 0)
   __ subs(R8, R8, Operand(1));  // --n
@@ -1123,8 +1123,7 @@
   // R0 = i as Smi, R1 = digits
   __ ldp(R0, R1, Address(SP, 0 * kWordSize, Address::PairOffset));
   __ add(R1, R1, Operand(R0, LSL, 1));
-  __ ldr(R2,
-         FieldAddress(R1, TypedData::data_offset() - Bigint::kBytesPerDigit));
+  __ ldr(R2, FieldAddress(R1, TypedData::data_offset() - kBytesPerBigIntDigit));
 
   // R0 = qd = (DIGIT_MASK << 32) | DIGIT_MASK = -1
   __ movn(R0, Immediate(0), 0);
@@ -1135,8 +1134,8 @@
   __ b(&return_qd, EQ);
 
   // R1 = dl = digits[(i >> 1) - 3 .. (i >> 1) - 2]
-  __ ldr(R1, FieldAddress(
-                 R1, TypedData::data_offset() - 3 * Bigint::kBytesPerDigit));
+  __ ldr(R1,
+         FieldAddress(R1, TypedData::data_offset() - 3 * kBytesPerBigIntDigit));
 
   // R5 = yth = yt >> 32
   __ orr(R5, ZR, Operand(R3, LSR, 32));
@@ -1234,8 +1233,8 @@
 
   __ Bind(&return_qd);
   // args[2..3] = qd
-  __ str(R0, FieldAddress(
-                 R4, TypedData::data_offset() + 2 * Bigint::kBytesPerDigit));
+  __ str(R0,
+         FieldAddress(R4, TypedData::data_offset() + 2 * kBytesPerBigIntDigit));
 
   __ LoadImmediate(R0, Smi::RawValue(2));  // Two digits processed.
   __ ret();
@@ -1255,8 +1254,8 @@
   __ ldr(R4, Address(SP, 2 * kWordSize));  // args
 
   // R3 = rho = args[2..3]
-  __ ldr(R3, FieldAddress(
-                 R4, TypedData::data_offset() + 2 * Bigint::kBytesPerDigit));
+  __ ldr(R3,
+         FieldAddress(R4, TypedData::data_offset() + 2 * kBytesPerBigIntDigit));
 
   // R2 = digits[i >> 1 .. (i >> 1) + 1]
   // R0 = i as Smi, R1 = digits
@@ -1268,8 +1267,8 @@
   __ mul(R0, R2, R3);  // R0 = low64(R2*R3).
 
   // args[4 .. 5] = R0
-  __ str(R0, FieldAddress(
-                 R4, TypedData::data_offset() + 4 * Bigint::kBytesPerDigit));
+  __ str(R0,
+         FieldAddress(R4, TypedData::data_offset() + 4 * kBytesPerBigIntDigit));
 
   __ LoadImmediate(R0, Smi::RawValue(2));  // Two digits processed.
   __ ret();
diff --git a/runtime/vm/compiler/intrinsifier_ia32.cc b/runtime/vm/compiler/intrinsifier_ia32.cc
index fe8b123..7727717 100644
--- a/runtime/vm/compiler/intrinsifier_ia32.cc
+++ b/runtime/vm/compiler/intrinsifier_ia32.cc
@@ -755,7 +755,7 @@
   __ xorl(EAX, EAX);  // EAX = 0.
   __ movl(EDX, FieldAddress(EDI, ESI, TIMES_4, TypedData::data_offset()));
   __ shldl(EAX, EDX, ECX);
-  __ movl(Address(EBX, ESI, TIMES_4, Bigint::kBytesPerDigit), EAX);
+  __ movl(Address(EBX, ESI, TIMES_4, kBytesPerBigIntDigit), EAX);
   Label last;
   __ cmpl(ESI, Immediate(0));
   __ j(EQUAL, &last, Assembler::kNearJump);
@@ -763,7 +763,7 @@
   __ Bind(&loop);
   __ movl(EAX, EDX);
   __ movl(EDX, FieldAddress(EDI, ESI, TIMES_4,
-                            TypedData::data_offset() - Bigint::kBytesPerDigit));
+                            TypedData::data_offset() - kBytesPerBigIntDigit));
   __ shldl(EAX, EDX, ECX);
   __ movl(Address(EBX, ESI, TIMES_4, 0), EAX);
   __ decl(ESI);
@@ -808,7 +808,7 @@
   Label loop;
   __ Bind(&loop);
   __ movl(EAX, EDX);
-  __ movl(EDX, Address(EDI, ESI, TIMES_4, Bigint::kBytesPerDigit));
+  __ movl(EDX, Address(EDI, ESI, TIMES_4, kBytesPerBigIntDigit));
   __ shrdl(EAX, EDX, ECX);
   __ movl(Address(EBX, ESI, TIMES_4, 0), EAX);
   __ incl(ESI);
@@ -1010,7 +1010,7 @@
 
   // uint32_t mi = *mip++
   __ movl(EAX, Address(EDI, 0));
-  __ addl(EDI, Immediate(Bigint::kBytesPerDigit));
+  __ addl(EDI, Immediate(kBytesPerBigIntDigit));
 
   // uint64_t t = x*mi
   __ mull(EBX);       // t = EDX:EAX = EAX * EBX
@@ -1023,7 +1023,7 @@
 
   // *ajp++ = low32(t)
   __ movl(Address(ESI, 0), EAX);
-  __ addl(ESI, Immediate(Bigint::kBytesPerDigit));
+  __ addl(ESI, Immediate(kBytesPerBigIntDigit));
 
   // c = high32(t)
   __ movl(ECX, EDX);
@@ -1042,7 +1042,7 @@
 
   Label propagate_carry_loop;
   __ Bind(&propagate_carry_loop);
-  __ addl(ESI, Immediate(Bigint::kBytesPerDigit));
+  __ addl(ESI, Immediate(kBytesPerBigIntDigit));
   __ incl(Address(ESI, 0));  // c == 0 or 1
   __ j(CARRY, &propagate_carry_loop, Assembler::kNearJump);
 
@@ -1093,7 +1093,7 @@
   __ movl(EBX, Address(EDI, 0));
   __ cmpl(EBX, Immediate(0));
   __ j(EQUAL, &x_zero, Assembler::kNearJump);
-  __ addl(EDI, Immediate(Bigint::kBytesPerDigit));
+  __ addl(EDI, Immediate(kBytesPerBigIntDigit));
 
   // Preserve THR to free ESI.
   __ pushl(THR);
@@ -1111,7 +1111,7 @@
 
   // *ajp++ = low32(t)
   __ movl(Address(ESI, 0), EAX);
-  __ addl(ESI, Immediate(Bigint::kBytesPerDigit));
+  __ addl(ESI, Immediate(kBytesPerBigIntDigit));
 
   // int n = used - i - 1
   __ movl(EAX, Address(ESP, 2 * kWordSize));  // used is Smi
@@ -1143,7 +1143,7 @@
 
   // uint32_t xi = *xip++
   __ movl(EAX, Address(EDI, 0));
-  __ addl(EDI, Immediate(Bigint::kBytesPerDigit));
+  __ addl(EDI, Immediate(kBytesPerBigIntDigit));
 
   // uint96_t t = ECX:EDX:EAX = 2*x*xi + aj + c
   __ mull(EBX);       // EDX:EAX = EAX * EBX
@@ -1160,7 +1160,7 @@
 
   // *ajp++ = low32(t)
   __ movl(Address(ESI, 0), EAX);
-  __ addl(ESI, Immediate(Bigint::kBytesPerDigit));
+  __ addl(ESI, Immediate(kBytesPerBigIntDigit));
 
   // c = high64(t)
   __ movl(cl_addr, EDX);
@@ -1178,7 +1178,7 @@
   // *ajp++ = low32(t)
   // *ajp = high32(t)
   __ movl(Address(ESI, 0), EAX);
-  __ movl(Address(ESI, Bigint::kBytesPerDigit), EDX);
+  __ movl(Address(ESI, kBytesPerBigIntDigit), EDX);
 
   // Restore THR and return.
   __ Drop(3);
@@ -1210,7 +1210,7 @@
 
   // ECX = yt = args[1]
   __ movl(ECX,
-          FieldAddress(EDI, TypedData::data_offset() + Bigint::kBytesPerDigit));
+          FieldAddress(EDI, TypedData::data_offset() + kBytesPerBigIntDigit));
 
   // EBX = dp = &digits[i >> 1]
   __ movl(EBX, Address(ESP, 2 * kWordSize));  // digits
@@ -1229,7 +1229,7 @@
   __ j(EQUAL, &return_qd, Assembler::kNearJump);
 
   // EAX = dl = dp[-1]
-  __ movl(EAX, Address(EBX, -Bigint::kBytesPerDigit));
+  __ movl(EAX, Address(EBX, -kBytesPerBigIntDigit));
 
   // EAX = qd = dh:dl / yt = EDX:EAX / ECX
   __ divl(ECX);
@@ -1237,7 +1237,7 @@
   __ Bind(&return_qd);
   // args[2] = qd
   __ movl(
-      FieldAddress(EDI, TypedData::data_offset() + 2 * Bigint::kBytesPerDigit),
+      FieldAddress(EDI, TypedData::data_offset() + 2 * kBytesPerBigIntDigit),
       EAX);
 
   __ movl(EAX, Immediate(Smi::RawValue(1)));  // One digit processed.
@@ -1259,7 +1259,7 @@
 
   // ECX = rho = args[2]
   __ movl(ECX, FieldAddress(
-                   EDI, TypedData::data_offset() + 2 * Bigint::kBytesPerDigit));
+                   EDI, TypedData::data_offset() + 2 * kBytesPerBigIntDigit));
 
   // EAX = digits[i >> 1]
   __ movl(EBX, Address(ESP, 2 * kWordSize));  // digits
@@ -1271,7 +1271,7 @@
 
   // args[4] = t mod DIGIT_BASE = low32(t)
   __ movl(
-      FieldAddress(EDI, TypedData::data_offset() + 4 * Bigint::kBytesPerDigit),
+      FieldAddress(EDI, TypedData::data_offset() + 4 * kBytesPerBigIntDigit),
       EAX);
 
   __ movl(EAX, Immediate(Smi::RawValue(1)));  // One digit processed.
diff --git a/runtime/vm/compiler/intrinsifier_x64.cc b/runtime/vm/compiler/intrinsifier_x64.cc
index 636b71c..1e2574c 100644
--- a/runtime/vm/compiler/intrinsifier_x64.cc
+++ b/runtime/vm/compiler/intrinsifier_x64.cc
@@ -717,7 +717,7 @@
   __ xorq(RAX, RAX);  // RAX = 0.
   __ movq(RDX, FieldAddress(RDI, R8, TIMES_8, TypedData::data_offset()));
   __ shldq(RAX, RDX, RCX);
-  __ movq(Address(RBX, R8, TIMES_8, 2 * Bigint::kBytesPerDigit), RAX);
+  __ movq(Address(RBX, R8, TIMES_8, 2 * kBytesPerBigIntDigit), RAX);
   Label last;
   __ cmpq(R8, Immediate(0));
   __ j(EQUAL, &last, Assembler::kNearJump);
@@ -726,7 +726,7 @@
   __ movq(RAX, RDX);
   __ movq(RDX,
           FieldAddress(RDI, R8, TIMES_8,
-                       TypedData::data_offset() - 2 * Bigint::kBytesPerDigit));
+                       TypedData::data_offset() - 2 * kBytesPerBigIntDigit));
   __ shldq(RAX, RDX, RCX);
   __ movq(Address(RBX, R8, TIMES_8, 0), RAX);
   __ decq(R8);
@@ -762,7 +762,7 @@
   Label loop;
   __ Bind(&loop);
   __ movq(RAX, RDX);
-  __ movq(RDX, Address(RDI, RSI, TIMES_8, 2 * Bigint::kBytesPerDigit));
+  __ movq(RDX, Address(RDI, RSI, TIMES_8, 2 * kBytesPerBigIntDigit));
   __ shrdq(RAX, RDX, RCX);
   __ movq(Address(RBX, RSI, TIMES_8, 0), RAX);
   __ incq(RSI);
@@ -945,7 +945,7 @@
 
   // uint64_t mi = *mip++
   __ movq(RAX, Address(RDI, 0));
-  __ addq(RDI, Immediate(2 * Bigint::kBytesPerDigit));
+  __ addq(RDI, Immediate(2 * kBytesPerBigIntDigit));
 
   // uint128_t t = x*mi
   __ mulq(RBX);       // t = RDX:RAX = RAX * RBX, 64-bit * 64-bit -> 64-bit
@@ -958,7 +958,7 @@
 
   // *ajp++ = low64(t)
   __ movq(Address(RSI, 0), RAX);
-  __ addq(RSI, Immediate(2 * Bigint::kBytesPerDigit));
+  __ addq(RSI, Immediate(2 * kBytesPerBigIntDigit));
 
   // c = high64(t)
   __ movq(RCX, RDX);
@@ -976,7 +976,7 @@
 
   Label propagate_carry_loop;
   __ Bind(&propagate_carry_loop);
-  __ addq(RSI, Immediate(2 * Bigint::kBytesPerDigit));
+  __ addq(RSI, Immediate(2 * kBytesPerBigIntDigit));
   __ incq(Address(RSI, 0));  // c == 0 or 1
   __ j(CARRY, &propagate_carry_loop, Assembler::kNearJump);
 
@@ -1022,7 +1022,7 @@
   __ movq(RBX, Address(RDI, 0));
   __ cmpq(RBX, Immediate(0));
   __ j(EQUAL, &x_zero);
-  __ addq(RDI, Immediate(2 * Bigint::kBytesPerDigit));
+  __ addq(RDI, Immediate(2 * kBytesPerBigIntDigit));
 
   // RSI = ajp = &a_digits[i]
   __ movq(RSI, Address(RSP, 2 * kWordSize));  // a_digits
@@ -1036,7 +1036,7 @@
 
   // *ajp++ = low64(t)
   __ movq(Address(RSI, 0), RAX);
-  __ addq(RSI, Immediate(2 * Bigint::kBytesPerDigit));
+  __ addq(RSI, Immediate(2 * kBytesPerBigIntDigit));
 
   // int n = (used - i + 1)/2 - 1
   __ movq(R8, Address(RSP, 1 * kWordSize));  // used is Smi
@@ -1064,7 +1064,7 @@
 
   // uint64_t xi = *xip++
   __ movq(RAX, Address(RDI, 0));
-  __ addq(RDI, Immediate(2 * Bigint::kBytesPerDigit));
+  __ addq(RDI, Immediate(2 * kBytesPerBigIntDigit));
 
   // uint192_t t = RCX:RDX:RAX = 2*x*xi + aj + c
   __ mulq(RBX);       // RDX:RAX = RAX * RBX
@@ -1081,7 +1081,7 @@
 
   // *ajp++ = low64(t)
   __ movq(Address(RSI, 0), RAX);
-  __ addq(RSI, Immediate(2 * Bigint::kBytesPerDigit));
+  __ addq(RSI, Immediate(2 * kBytesPerBigIntDigit));
 
   // c = high128(t)
   __ movq(R12, RDX);
@@ -1097,7 +1097,7 @@
   // *ajp++ = low64(t)
   // *ajp = high64(t)
   __ movq(Address(RSI, 0), R12);
-  __ movq(Address(RSI, 2 * Bigint::kBytesPerDigit), R13);
+  __ movq(Address(RSI, 2 * kBytesPerBigIntDigit), R13);
 
   __ Bind(&x_zero);
   __ movq(RAX, Immediate(Smi::RawValue(2)));  // Two digits processed.
@@ -1131,7 +1131,7 @@
   __ movq(RBX, Address(RSP, 2 * kWordSize));  // digits
   __ movq(RAX, Address(RSP, 1 * kWordSize));  // i is Smi and odd.
   __ leaq(RBX, FieldAddress(RBX, RAX, TIMES_2,
-                            TypedData::data_offset() - Bigint::kBytesPerDigit));
+                            TypedData::data_offset() - kBytesPerBigIntDigit));
 
   // RDX = dh = dp[0]
   __ movq(RDX, Address(RBX, 0));
@@ -1145,7 +1145,7 @@
   __ j(EQUAL, &return_qd, Assembler::kNearJump);
 
   // RAX = dl = dp[-1]
-  __ movq(RAX, Address(RBX, -2 * Bigint::kBytesPerDigit));
+  __ movq(RAX, Address(RBX, -2 * kBytesPerBigIntDigit));
 
   // RAX = qd = dh:dl / yt = RDX:RAX / RCX
   __ divq(RCX);
@@ -1153,7 +1153,7 @@
   __ Bind(&return_qd);
   // args[2..3] = qd
   __ movq(
-      FieldAddress(RDI, TypedData::data_offset() + 2 * Bigint::kBytesPerDigit),
+      FieldAddress(RDI, TypedData::data_offset() + 2 * kBytesPerBigIntDigit),
       RAX);
 
   __ movq(RAX, Immediate(Smi::RawValue(2)));  // Two digits processed.
@@ -1175,7 +1175,7 @@
 
   // RCX = rho = args[2 .. 3]
   __ movq(RCX, FieldAddress(
-                   RDI, TypedData::data_offset() + 2 * Bigint::kBytesPerDigit));
+                   RDI, TypedData::data_offset() + 2 * kBytesPerBigIntDigit));
 
   // RAX = digits[i >> 1 .. (i >> 1) + 1]
   __ movq(RBX, Address(RSP, 2 * kWordSize));  // digits
@@ -1187,7 +1187,7 @@
 
   // args[4 .. 5] = t mod DIGIT_BASE^2 = low64(t)
   __ movq(
-      FieldAddress(RDI, TypedData::data_offset() + 4 * Bigint::kBytesPerDigit),
+      FieldAddress(RDI, TypedData::data_offset() + 4 * kBytesPerBigIntDigit),
       RAX);
 
   __ movq(RAX, Immediate(Smi::RawValue(2)));  // Two digits processed.
diff --git a/runtime/vm/compiler/jit/compiler.cc b/runtime/vm/compiler/jit/compiler.cc
index 0e61225..c77b602 100644
--- a/runtime/vm/compiler/jit/compiler.cc
+++ b/runtime/vm/compiler/jit/compiler.cc
@@ -1712,8 +1712,6 @@
         return Error::Cast(result).raw();
       }
       ASSERT(!result.IsNull());
-      func.ClearICDataArray();
-      func.ClearCode();
     }
   }
   return Error::null();
diff --git a/runtime/vm/constants_dbc.h b/runtime/vm/constants_dbc.h
index 97ee072..b86780e 100644
--- a/runtime/vm/constants_dbc.h
+++ b/runtime/vm/constants_dbc.h
@@ -165,9 +165,10 @@
 //    with arguments SP[-(1+ArgC)], ..., SP[-1].
 //    The ICData indicates whether the first argument is a type argument vector.
 //
-//  - NativeBootstrapCall, NativeNoScopeCall, NativeAutoScopeCall
+//  - NativeCall ArgA, ArgB, ArgC
 //
-//    Invoke native function SP[-1] with argc_tag SP[0].
+//    Invoke native function at pool[ArgB] with argc_tag at pool[ArgC] using
+//    wrapper at pool[ArgA].
 //
 //  - PushPolymorphicInstanceCall ArgC, D
 //
@@ -767,9 +768,7 @@
   V(InstanceCall2Opt,                    A_D, num, num, ___) \
   V(PushPolymorphicInstanceCall,         A_D, num, num, ___) \
   V(PushPolymorphicInstanceCallByRange,  A_D, num, num, ___) \
-  V(NativeBootstrapCall,                   0, ___, ___, ___) \
-  V(NativeNoScopeCall,                     0, ___, ___, ___) \
-  V(NativeAutoScopeCall,                   0, ___, ___, ___) \
+  V(NativeCall,                        A_B_C, num, num, num) \
   V(OneByteStringFromCharCode,           A_X, reg, xeg, ___) \
   V(StringToCharCode,                    A_X, reg, xeg, ___) \
   V(AddTOS,                                0, ___, ___, ___) \
@@ -1001,6 +1000,10 @@
     return (bc >> kAShift) & kAMask;
   }
 
+  DART_FORCE_INLINE static uint8_t DecodeB(Instr bc) {
+    return (bc >> kBShift) & kBMask;
+  }
+
   DART_FORCE_INLINE static uint16_t DecodeD(Instr bc) {
     return (bc >> kDShift) & kDMask;
   }
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 5b607f4..faa46ac 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -48,7 +48,6 @@
 #include "vm/symbols.h"
 #include "vm/tags.h"
 #include "vm/thread_registry.h"
-#include "vm/timeline.h"
 #include "vm/timer.h"
 #include "vm/unicode.h"
 #include "vm/uri.h"
@@ -87,34 +86,6 @@
   }
 }
 
-#ifndef PRODUCT
-#define API_TIMELINE_DURATION                                                  \
-  TimelineDurationScope tds(Thread::Current(), Timeline::GetAPIStream(),       \
-                            CURRENT_FUNC)
-#define API_TIMELINE_DURATION_BASIC                                            \
-  API_TIMELINE_DURATION;                                                       \
-  tds.SetNumArguments(1);                                                      \
-  tds.CopyArgument(0, "mode", "basic");
-
-#define API_TIMELINE_BEGIN_END                                                 \
-  TimelineBeginEndScope tbes(Thread::Current(), Timeline::GetAPIStream(),      \
-                             CURRENT_FUNC)
-
-#define API_TIMELINE_BEGIN_END_BASIC                                           \
-  API_TIMELINE_BEGIN_END;                                                      \
-  tbes.SetNumArguments(1);                                                     \
-  tbes.CopyArgument(0, "mode", "basic");
-#else
-#define API_TIMELINE_DURATION                                                  \
-  do {                                                                         \
-  } while (false)
-#define API_TIMELINE_DURATION_BASIC API_TIMELINE_DURATION
-#define API_TIMELINE_BEGIN_END                                                 \
-  do {                                                                         \
-  } while (false)
-#define API_TIMELINE_BEGIN_END_BASIC API_TIMELINE_BEGIN_END
-#endif  // !PRODUCT
-
 #if defined(DEBUG)
 // An object visitor which will iterate over all the function objects in the
 // heap and check if the result type and parameter types are canonicalized
@@ -783,8 +754,8 @@
 }
 
 DART_EXPORT const char* Dart_GetError(Dart_Handle handle) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   const Object& obj = Object::Handle(Z, Api::UnwrapHandle(handle));
   return GetErrorString(T, obj);
 }
@@ -1442,13 +1413,13 @@
 DART_EXPORT void Dart_NotifyIdle(int64_t deadline) {
   Thread* T = Thread::Current();
   CHECK_ISOLATE(T->isolate());
-  API_TIMELINE_BEGIN_END;
+  API_TIMELINE_BEGIN_END(T);
   TransitionNativeToVM transition(T);
   T->isolate()->NotifyIdle(deadline);
 }
 
 DART_EXPORT void Dart_NotifyLowMemory() {
-  API_TIMELINE_BEGIN_END;
+  API_TIMELINE_BEGIN_END(Thread::Current());
   Isolate::NotifyLowMemory();
 }
 
@@ -1479,7 +1450,7 @@
                     uint8_t** isolate_snapshot_data_buffer,
                     intptr_t* isolate_snapshot_data_size) {
   DARTSCOPE(Thread::Current());
-  API_TIMELINE_DURATION;
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
   if (!FLAG_load_deferred_eagerly) {
     return Api::NewError(
@@ -1523,8 +1494,8 @@
 DART_EXPORT Dart_Handle
 Dart_CreateScriptSnapshot(uint8_t** script_snapshot_buffer,
                           intptr_t* script_snapshot_size) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
   CHECK_NULL(script_snapshot_buffer);
   CHECK_NULL(script_snapshot_size);
@@ -1600,7 +1571,7 @@
 
 DART_EXPORT bool Dart_IsolateMakeRunnable(Dart_Isolate isolate) {
   CHECK_NO_ISOLATE(Isolate::Current());
-  API_TIMELINE_DURATION;
+  API_TIMELINE_DURATION(Thread::Current());
   if (isolate == NULL) {
     FATAL1("%s expects argument 'isolate' to be non-null.", CURRENT_FUNC);
   }
@@ -1651,7 +1622,7 @@
     CHECK_API_SCOPE(T);
     CHECK_CALLBACK_STATE(T);
   }
-  API_TIMELINE_BEGIN_END;
+  API_TIMELINE_BEGIN_END(Thread::Current());
   // The message handler run loop does not expect to have a current isolate
   // so we exit the isolate here and enter it again after the runloop is done.
   ::Dart_ExitIsolate();
@@ -1685,7 +1656,7 @@
   Isolate* I = T->isolate();
   CHECK_API_SCOPE(T);
   CHECK_CALLBACK_STATE(T);
-  API_TIMELINE_BEGIN_END_BASIC;
+  API_TIMELINE_BEGIN_END_BASIC(T);
   TransitionNativeToVM transition(T);
   if (I->message_handler()->HandleNextMessage() != MessageHandler::kOK) {
     Dart_Handle error = Api::NewHandle(T, T->sticky_error());
@@ -1700,7 +1671,7 @@
   Isolate* I = T->isolate();
   CHECK_API_SCOPE(T);
   CHECK_CALLBACK_STATE(T);
-  API_TIMELINE_BEGIN_END_BASIC;
+  API_TIMELINE_BEGIN_END_BASIC(T);
   TransitionNativeToVM transition(T);
   if (I->message_handler()->HandleAllMessages() != MessageHandler::kOK) {
     Dart_Handle error = Api::NewHandle(T, T->sticky_error());
@@ -1715,7 +1686,7 @@
   Isolate* I = T->isolate();
   CHECK_API_SCOPE(T);
   CHECK_CALLBACK_STATE(T);
-  API_TIMELINE_BEGIN_END_BASIC;
+  API_TIMELINE_BEGIN_END_BASIC(T);
   TransitionNativeToVM transition(T);
   if (I->message_notify_callback() != NULL) {
     return Api::NewError("waitForEventSync is not supported by this embedder");
@@ -1769,7 +1740,7 @@
   Isolate* I = T->isolate();
   CHECK_API_SCOPE(T);
   CHECK_CALLBACK_STATE(T);
-  API_TIMELINE_DURATION;
+  API_TIMELINE_DURATION(T);
   TransitionNativeToVM transition(T);
   ASSERT(I->GetAndClearResumeRequest() == false);
   MessageHandler::MessageStatus status =
@@ -1799,7 +1770,7 @@
 
 DART_EXPORT bool Dart_Post(Dart_Port port_id, Dart_Handle handle) {
   DARTSCOPE(Thread::Current());
-  API_TIMELINE_DURATION;
+  API_TIMELINE_DURATION(T);
   NoSafepointScope no_safepoint_scope;
   if (port_id == ILLEGAL_PORT) {
     return false;
@@ -1832,7 +1803,7 @@
                                            Dart_Port* port_id) {
   DARTSCOPE(Thread::Current());
   CHECK_CALLBACK_STATE(T);
-  API_TIMELINE_DURATION;
+  API_TIMELINE_DURATION(T);
   const SendPort& send_port = Api::UnwrapSendPortHandle(Z, port);
   if (send_port.IsNull()) {
     RETURN_TYPE_ERROR(Z, port, SendPort);
@@ -2061,8 +2032,8 @@
 }
 
 DART_EXPORT bool Dart_IsFuture(Dart_Handle handle) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
   const Object& obj = Object::Handle(Z, Api::UnwrapHandle(handle));
   if (obj.IsInstance()) {
@@ -2083,8 +2054,8 @@
 // --- Instances ----
 
 DART_EXPORT Dart_Handle Dart_InstanceGetType(Dart_Handle instance) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
   const Object& obj = Object::Handle(Z, Api::UnwrapHandle(instance));
   if (obj.IsNull()) {
@@ -2102,9 +2073,9 @@
 
 DART_EXPORT Dart_Handle Dart_IntegerFitsIntoInt64(Dart_Handle integer,
                                                   bool* fits) {
-  API_TIMELINE_DURATION;
   // Fast path for Smis and Mints.
   Thread* thread = Thread::Current();
+  API_TIMELINE_DURATION(thread);
   Isolate* isolate = thread->isolate();
   CHECK_ISOLATE(isolate);
   intptr_t class_id = Api::ClassId(integer);
@@ -2129,7 +2100,7 @@
   Thread* thread = Thread::Current();
   Isolate* isolate = thread->isolate();
   CHECK_ISOLATE(isolate);
-  API_TIMELINE_DURATION;
+  API_TIMELINE_DURATION(thread);
   if (Api::IsSmi(integer)) {
     *fits = (Api::SmiValue(integer) >= 0);
     return Api::Success();
@@ -2155,7 +2126,7 @@
   Thread* thread = Thread::Current();
   Isolate* isolate = thread->isolate();
   CHECK_ISOLATE(isolate);
-  API_TIMELINE_DURATION;
+  API_TIMELINE_DURATION(thread);
   if (Smi::IsValid(value)) {
     NOHANDLESCOPE(thread);
     return Api::NewHandle(thread, Smi::New(static_cast<intptr_t>(value)));
@@ -2169,7 +2140,7 @@
 DART_EXPORT Dart_Handle Dart_NewIntegerFromUint64(uint64_t value) {
   DARTSCOPE(Thread::Current());
   CHECK_CALLBACK_STATE(T);
-  API_TIMELINE_DURATION;
+  API_TIMELINE_DURATION(T);
   if (Integer::IsValueInRange(value)) {
     return Api::NewHandle(T, Integer::NewFromUint64(value));
   }
@@ -2180,7 +2151,7 @@
 DART_EXPORT Dart_Handle Dart_NewIntegerFromHexCString(const char* str) {
   DARTSCOPE(Thread::Current());
   CHECK_CALLBACK_STATE(T);
-  API_TIMELINE_DURATION;
+  API_TIMELINE_DURATION(T);
   const String& str_obj = String::Handle(Z, String::New(str));
   RawInteger* integer = Integer::New(str_obj);
   if (integer == Integer::null()) {
@@ -2262,8 +2233,8 @@
 
 DART_EXPORT Dart_Handle Dart_IntegerToHexCString(Dart_Handle integer,
                                                  const char** value) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   const Integer& int_obj = Api::UnwrapIntegerHandle(Z, integer);
   if (int_obj.IsNull()) {
     RETURN_TYPE_ERROR(Z, integer, Integer);
@@ -2348,8 +2319,8 @@
 }
 
 DART_EXPORT Dart_Handle Dart_NewStringFromCString(const char* str) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   if (str == NULL) {
     RETURN_NULL_ERROR(str);
   }
@@ -2359,8 +2330,8 @@
 
 DART_EXPORT Dart_Handle Dart_NewStringFromUTF8(const uint8_t* utf8_array,
                                                intptr_t length) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   if (utf8_array == NULL && length != 0) {
     RETURN_NULL_ERROR(utf8_array);
   }
@@ -2386,8 +2357,8 @@
 
 DART_EXPORT Dart_Handle Dart_NewStringFromUTF32(const int32_t* utf32_array,
                                                 intptr_t length) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   if (utf32_array == NULL && length != 0) {
     RETURN_NULL_ERROR(utf32_array);
   }
@@ -2401,8 +2372,8 @@
                              intptr_t length,
                              void* peer,
                              Dart_PeerFinalizer cback) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   if (latin1_array == NULL && length != 0) {
     RETURN_NULL_ERROR(latin1_array);
   }
@@ -2430,8 +2401,8 @@
 
 DART_EXPORT Dart_Handle Dart_StringToCString(Dart_Handle object,
                                              const char** cstr) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   if (cstr == NULL) {
     RETURN_NULL_ERROR(cstr);
   }
@@ -2454,8 +2425,8 @@
 DART_EXPORT Dart_Handle Dart_StringToUTF8(Dart_Handle str,
                                           uint8_t** utf8_array,
                                           intptr_t* length) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   if (utf8_array == NULL) {
     RETURN_NULL_ERROR(utf8_array);
   }
@@ -2479,8 +2450,8 @@
 DART_EXPORT Dart_Handle Dart_StringToLatin1(Dart_Handle str,
                                             uint8_t* latin1_array,
                                             intptr_t* length) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   if (latin1_array == NULL) {
     RETURN_NULL_ERROR(latin1_array);
   }
@@ -2506,8 +2477,8 @@
 DART_EXPORT Dart_Handle Dart_StringToUTF16(Dart_Handle str,
                                            uint16_t* utf16_array,
                                            intptr_t* length) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   const String& str_obj = Api::UnwrapStringHandle(Z, str);
   if (str_obj.IsNull()) {
     RETURN_TYPE_ERROR(Z, str, String);
@@ -3233,7 +3204,7 @@
 }
 
 DART_EXPORT Dart_TypedData_Type Dart_GetTypeOfTypedData(Dart_Handle object) {
-  API_TIMELINE_DURATION;
+  API_TIMELINE_DURATION(Thread::Current());
   intptr_t class_id = Api::ClassId(object);
   if (RawObject::IsTypedDataClassId(class_id) ||
       RawObject::IsTypedDataViewClassId(class_id)) {
@@ -3244,7 +3215,7 @@
 
 DART_EXPORT Dart_TypedData_Type
 Dart_GetTypeOfExternalTypedData(Dart_Handle object) {
-  API_TIMELINE_DURATION;
+  API_TIMELINE_DURATION(Thread::Current());
   intptr_t class_id = Api::ClassId(object);
   if (RawObject::IsExternalTypedDataClassId(class_id)) {
     return GetType(class_id);
@@ -3959,8 +3930,8 @@
                                                Dart_Handle name,
                                                int number_of_arguments,
                                                Dart_Handle* arguments) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   CHECK_CALLBACK_STATE(T);
 
   if (number_of_arguments < 0) {
@@ -4035,8 +4006,8 @@
                                     Dart_Handle name,
                                     int number_of_arguments,
                                     Dart_Handle* arguments) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   CHECK_CALLBACK_STATE(T);
 
   const String& function_name = Api::UnwrapStringHandle(Z, name);
@@ -4178,8 +4149,8 @@
 DART_EXPORT Dart_Handle Dart_InvokeClosure(Dart_Handle closure,
                                            int number_of_arguments,
                                            Dart_Handle* arguments) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   CHECK_CALLBACK_STATE(T);
   const Instance& closure_obj = Api::UnwrapInstanceHandle(Z, closure);
   if (closure_obj.IsNull() || !closure_obj.IsCallable(NULL)) {
@@ -4207,8 +4178,8 @@
 }
 
 DART_EXPORT Dart_Handle Dart_GetField(Dart_Handle container, Dart_Handle name) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   CHECK_CALLBACK_STATE(T);
 
   const String& field_name = Api::UnwrapStringHandle(Z, name);
@@ -4354,8 +4325,8 @@
 DART_EXPORT Dart_Handle Dart_SetField(Dart_Handle container,
                                       Dart_Handle name,
                                       Dart_Handle value) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   CHECK_CALLBACK_STATE(T);
 
   const String& field_name = Api::UnwrapStringHandle(Z, name);
@@ -5073,8 +5044,8 @@
 
 DART_EXPORT Dart_Handle Dart_DefaultCanonicalizeUrl(Dart_Handle base_url,
                                                     Dart_Handle url) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   CHECK_CALLBACK_STATE(T);
 
   const String& base_uri = Api::UnwrapStringHandle(Z, base_url);
@@ -5140,8 +5111,8 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
   return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
 #else
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
   const String& url_str = Api::UnwrapStringHandle(Z, url);
   if (url_str.IsNull()) {
@@ -5221,8 +5192,8 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
   return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
 #else
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
   StackZone zone(T);
   if (buffer == NULL) {
@@ -5299,8 +5270,8 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
   return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
 #else
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   StackZone zone(T);
   Isolate* I = T->isolate();
 
@@ -5528,8 +5499,8 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
   return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
 #else
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
 
   const String& url_str = Api::UnwrapStringHandle(Z, url);
@@ -5691,8 +5662,8 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
   return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
 #else
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
   const Library& lib = Api::UnwrapLibraryHandle(Z, library);
   if (lib.IsNull()) {
@@ -5742,8 +5713,8 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
   return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
 #else
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
   const Library& lib = Api::UnwrapLibraryHandle(Z, library);
   if (lib.IsNull()) {
@@ -5773,8 +5744,8 @@
 // Finalizes classes and invokes Dart core library function that completes
 // futures of loadLibrary calls (deferred library loading).
 DART_EXPORT Dart_Handle Dart_FinalizeLoading(bool complete_futures) {
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
   CHECK_CALLBACK_STATE(T);
 
@@ -6423,8 +6394,8 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
   return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
 #else
-  API_TIMELINE_DURATION;
   Thread* thread = Thread::Current();
+  API_TIMELINE_DURATION(thread);
   DARTSCOPE(thread);
   CHECK_NULL(buffer);
   CHECK_NULL(buffer_length);
@@ -6441,7 +6412,7 @@
   return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
 #else
   Thread* thread = Thread::Current();
-  API_TIMELINE_DURATION;
+  API_TIMELINE_DURATION(thread);
   DARTSCOPE(thread);
   CHECK_NULL(buffer);
   CompilationTraceLoader loader(thread);
@@ -6480,8 +6451,8 @@
   return Api::NewError(
       "This VM was built without support for AOT compilation.");
 #else
-  API_TIMELINE_BEGIN_END;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_BEGIN_END(T);
   if (!FLAG_precompiled_mode) {
     return Api::NewError("Flag --precompilation was not specified.");
   }
@@ -6509,8 +6480,8 @@
   return Api::NewError(
       "This VM was built without support for AOT compilation.");
 #else
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
   if (I->compilation_allowed()) {
     return Api::NewError(
@@ -6550,8 +6521,8 @@
   return Api::NewError(
       "This VM was built without support for AOT compilation.");
 #else
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   CHECK_NULL(assembly_buffer);
   CHECK_NULL(assembly_size);
 
@@ -6590,8 +6561,8 @@
   return Api::NewError(
       "AOT as blobs is not supported on Fuchsia; use dylibs instead.");
 #else
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
   if (I->compilation_allowed()) {
     return Api::NewError(
@@ -6641,13 +6612,11 @@
     intptr_t* isolate_snapshot_instructions_size) {
 #if defined(TARGET_ARCH_IA32)
   return Api::NewError("Snapshots with code are not supported on IA32.");
-#elif defined(TARGET_ARCH_DBC)
-  return Api::NewError("Snapshots with code are not supported on DBC.");
 #elif defined(DART_PRECOMPILED_RUNTIME)
   return Api::NewError("JIT app snapshots cannot be taken from an AOT runtime");
 #else
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
   if (!FLAG_load_deferred_eagerly) {
     return Api::NewError(
@@ -6700,13 +6669,11 @@
                                  intptr_t* isolate_snapshot_instructions_size) {
 #if defined(TARGET_ARCH_IA32)
   return Api::NewError("Snapshots with code are not supported on IA32.");
-#elif defined(TARGET_ARCH_DBC)
-  return Api::NewError("Snapshots with code are not supported on DBC.");
 #elif defined(DART_PRECOMPILED_RUNTIME)
   return Api::NewError("JIT app snapshots cannot be taken from an AOT runtime");
 #else
-  API_TIMELINE_DURATION;
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Isolate* I = T->isolate();
   if (!FLAG_load_deferred_eagerly) {
     return Api::NewError(
diff --git a/runtime/vm/dart_api_impl.h b/runtime/vm/dart_api_impl.h
index c1d3a5d..2541e0a 100644
--- a/runtime/vm/dart_api_impl.h
+++ b/runtime/vm/dart_api_impl.h
@@ -10,6 +10,7 @@
 #include "vm/object.h"
 #include "vm/safepoint.h"
 #include "vm/thread_registry.h"
+#include "vm/timeline.h"
 
 namespace dart {
 
@@ -101,6 +102,32 @@
     }                                                                          \
   } while (0)
 
+#ifndef PRODUCT
+#define API_TIMELINE_DURATION(thread)                                          \
+  TimelineDurationScope tds(thread, Timeline::GetAPIStream(), CURRENT_FUNC)
+#define API_TIMELINE_DURATION_BASIC(thread)                                    \
+  API_TIMELINE_DURATION(thread);                                               \
+  tds.SetNumArguments(1);                                                      \
+  tds.CopyArgument(0, "mode", "basic");
+
+#define API_TIMELINE_BEGIN_END(thread)                                         \
+  TimelineBeginEndScope tbes(thread, Timeline::GetAPIStream(), CURRENT_FUNC)
+
+#define API_TIMELINE_BEGIN_END_BASIC(thread)                                   \
+  API_TIMELINE_BEGIN_END(thread);                                              \
+  tbes.SetNumArguments(1);                                                     \
+  tbes.CopyArgument(0, "mode", "basic");
+#else
+#define API_TIMELINE_DURATION(thread)                                          \
+  do {                                                                         \
+  } while (false)
+#define API_TIMELINE_DURATION_BASIC(thread) API_TIMELINE_DURATION(thread)
+#define API_TIMELINE_BEGIN_END(thread)                                         \
+  do {                                                                         \
+  } while (false)
+#define API_TIMELINE_BEGIN_END_BASIC(thread) API_TIMELINE_BEGIN_END(thread)
+#endif  // !PRODUCT
+
 class Api : AllStatic {
  public:
   // Create on the stack to provide a new throw-safe api scope.
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index c8467ab..08c2c06 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.h
@@ -133,7 +133,7 @@
   P(polymorphic_with_deopt, bool, true,                                        \
     "Polymorphic calls with deoptimization / megamorphic call")                \
   P(precompiled_mode, bool, false, "Precompilation compiler mode")             \
-  P(print_precompiler_entry_points, bool, false,                               \
+  P(print_precompiler_entry_points, charp, NULL,                               \
     "Print entry points and info about recognized methods used by "            \
     "precompiler.")                                                            \
   P(print_snapshot_sizes, bool, false, "Print sizes of generated snapshots.")  \
diff --git a/runtime/vm/globals.h b/runtime/vm/globals.h
index 36525e7..4fa43f2 100644
--- a/runtime/vm/globals.h
+++ b/runtime/vm/globals.h
@@ -32,6 +32,9 @@
 const intptr_t kSmiMax32 = (static_cast<intptr_t>(1) << kSmiBits32) - 1;
 const intptr_t kSmiMin32 = -(static_cast<intptr_t>(1) << kSmiBits32);
 
+// Number of bytes per BigInt digit.
+const intptr_t kBytesPerBigIntDigit = 4;
+
 // The default old gen heap size in MB, where 0 == unlimited.
 const intptr_t kDefaultMaxOldGenHeapSize = (kWordSize <= 4) ? 1536 : 0;
 
diff --git a/runtime/vm/instructions_dbc.cc b/runtime/vm/instructions_dbc.cc
index 40877c7..697cba5 100644
--- a/runtime/vm/instructions_dbc.cc
+++ b/runtime/vm/instructions_dbc.cc
@@ -69,17 +69,23 @@
     : object_pool_(ObjectPool::Handle(code.GetObjectPool())),
       end_(pc),
       native_function_pool_index_(-1),
-      target_code_pool_index_(-1) {
-  UNIMPLEMENTED();
+      trampoline_pool_index_(-1) {
+  ASSERT(code.ContainsInstructionAt(end_));
+  const uword call_pc = end_ - sizeof(Instr);
+  Instr call_instr = Bytecode::At(call_pc);
+  ASSERT(Bytecode::DecodeOpcode(call_instr) == Bytecode::kNativeCall);
+  native_function_pool_index_ = Bytecode::DecodeB(call_instr);
+  trampoline_pool_index_ = Bytecode::DecodeA(call_instr);
 }
 
-RawCode* NativeCallPattern::target() const {
-  return reinterpret_cast<RawCode*>(
-      object_pool_.ObjectAt(target_code_pool_index_));
+NativeFunctionWrapper NativeCallPattern::target() const {
+  return reinterpret_cast<NativeFunctionWrapper>(
+      object_pool_.ObjectAt(trampoline_pool_index_));
 }
 
-void NativeCallPattern::set_target(const Code& new_target) const {
-  object_pool_.SetObjectAt(target_code_pool_index_, new_target);
+void NativeCallPattern::set_target(NativeFunctionWrapper new_target) const {
+  object_pool_.SetRawValueAt(trampoline_pool_index_,
+                             reinterpret_cast<uword>(new_target));
   // No need to flush the instruction cache, since the code is not modified.
 }
 
diff --git a/runtime/vm/instructions_dbc.h b/runtime/vm/instructions_dbc.h
index 301c14b..15ac846 100644
--- a/runtime/vm/instructions_dbc.h
+++ b/runtime/vm/instructions_dbc.h
@@ -74,8 +74,8 @@
  public:
   NativeCallPattern(uword pc, const Code& code);
 
-  RawCode* target() const;
-  void set_target(const Code& target) const;
+  NativeFunctionWrapper target() const;
+  void set_target(NativeFunctionWrapper target) const;
 
   NativeFunction native_function() const;
   void set_native_function(NativeFunction target) const;
@@ -85,7 +85,7 @@
 
   uword end_;
   intptr_t native_function_pool_index_;
-  intptr_t target_code_pool_index_;
+  intptr_t trampoline_pool_index_;
 
   DISALLOW_COPY_AND_ASSIGN(NativeCallPattern);
 };
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 6db3341..338409f 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -157,22 +157,29 @@
   }
 
   TIR_Print("Running new field initializers for class: %s\n", to_.ToCString());
-  String& initializing_expression = String::Handle();
-  Function& eval_func = Function::Handle();
-  Object& result = Object::Handle();
-  Class& owning_class = Class::Handle();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  String& initializing_expression = String::Handle(zone);
+  Function& eval_func = Function::Handle(zone);
+  Object& result = Object::Handle(zone);
+  Class& owning_class = Class::Handle(zone);
   // For each new field.
   for (intptr_t i = 0; i < new_fields_->length(); i++) {
     // Create a function that returns the expression.
     const Field* field = new_fields_->At(i);
-    owning_class ^= field->Owner();
-    ASSERT(!owning_class.IsNull());
-    // Extract the initializing expression.
-    initializing_expression = field->InitializingExpression();
-    TIR_Print("New `%s` has initializing expression `%s`\n", field->ToCString(),
-              initializing_expression.ToCString());
-    eval_func ^= Function::EvaluateHelper(owning_class, initializing_expression,
-                                          Array::empty_array(), true);
+    if (field->kernel_offset() > 0) {
+      eval_func ^= kernel::CreateFieldInitializerFunction(thread, zone, *field);
+    } else {
+      owning_class ^= field->Owner();
+      ASSERT(!owning_class.IsNull());
+      // Extract the initializing expression.
+      initializing_expression = field->InitializingExpression();
+      TIR_Print("New `%s` has initializing expression `%s`\n",
+                field->ToCString(), initializing_expression.ToCString());
+      eval_func ^= Function::EvaluateHelper(
+          owning_class, initializing_expression, Array::empty_array(), true);
+    }
+
     for (intptr_t j = 0; j < after_->length(); j++) {
       const Instance* instance = after_->At(j);
       TIR_Print("Initializing instance %" Pd " / %" Pd "\n", j + 1,
diff --git a/runtime/vm/isolate_reload_test.cc b/runtime/vm/isolate_reload_test.cc
index 8ec1d7f..f2a44d1 100644
--- a/runtime/vm/isolate_reload_test.cc
+++ b/runtime/vm/isolate_reload_test.cc
@@ -720,7 +720,7 @@
 
 TEST_CASE(IsolateReload_TypeIdentity) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class T { }\n"
       "getType() => T;\n"
       "main() {\n"
@@ -734,7 +734,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class T extends Stopwatch { }\n"
       "getType() => T;\n"
       "main() {\n"
@@ -751,7 +751,7 @@
 
 TEST_CASE(IsolateReload_TypeIdentityGeneric) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class T<G> { }\n"
       "getType() => new T<int>().runtimeType;\n"
       "main() {\n"
@@ -765,7 +765,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class T<G> extends Stopwatch { }\n"
       "getType() => new T<int>().runtimeType;\n"
       "main() {\n"
@@ -783,7 +783,7 @@
 TEST_CASE(IsolateReload_TypeIdentityParameter) {
   const char* kScript =
       "import 'dart:mirrors';\n"
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class T<G> { }\n"
       "getTypeVar() => reflectType(T).typeVariables[0];\n"
       "main() {\n"
@@ -798,7 +798,7 @@
 
   const char* kReloadScript =
       "import 'dart:mirrors';\n"
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class T<G> extends Stopwatch { }\n"
       "getTypeVar() => reflectType(T).typeVariables[0];\n"
       "main() {\n"
@@ -946,7 +946,7 @@
 
 TEST_CASE(IsolateReload_LiveStack) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "helper() => 7;\n"
       "alpha() { var x = helper(); reloadTest(); return x + helper(); }\n"
       "foo() => alpha();\n"
@@ -959,7 +959,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "helper() => 100;\n"
       "alpha() => 5 + helper();\n"
       "foo() => alpha();\n"
@@ -972,8 +972,8 @@
 
   EXPECT_EQ(107, SimpleInvoke(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
   EXPECT_EQ(105, SimpleInvoke(lib, "main"));
 }
 
@@ -1100,7 +1100,7 @@
   TestCase::AddTestLib("test:lib1", kImportScript);
 
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "import 'test:lib1' show importedIntFunc;\n"
       "main() {\n"
       "  var x = importedIntFunc();\n"
@@ -1183,7 +1183,7 @@
 
 TEST_CASE(IsolateReload_PendingUnqualifiedCall_StaticToInstance) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  static foo() => 'static';\n"
       "  test() {\n"
@@ -1199,7 +1199,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  foo() => 'instance';\n"
       "  test() {\n"
@@ -1215,14 +1215,14 @@
 
   EXPECT_STREQ("instance", SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
   EXPECT_STREQ("instance", SimpleInvokeStr(lib, "main"));
 }
 
 TEST_CASE(IsolateReload_PendingUnqualifiedCall_InstanceToStatic) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  foo() => 'instance';\n"
       "  test() {\n"
@@ -1238,7 +1238,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  static foo() => 'static';\n"
       "  test() {\n"
@@ -1254,14 +1254,14 @@
 
   EXPECT_STREQ("static", SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
   EXPECT_STREQ("static", SimpleInvokeStr(lib, "main"));
 }
 
 TEST_CASE(IsolateReload_PendingConstructorCall_AbstractToConcrete) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "abstract class Foo {}\n"
       "class C {\n"
       "  test() {\n"
@@ -1282,7 +1282,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class Foo {}\n"
       "class C {\n"
       "  test() {\n"
@@ -1303,14 +1303,14 @@
 
   EXPECT_STREQ("okay", SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
   EXPECT_STREQ("okay", SimpleInvokeStr(lib, "main"));
 }
 
 TEST_CASE(IsolateReload_PendingConstructorCall_ConcreteToAbstract) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class Foo {}\n"
       "class C {\n"
       "  test() {\n"
@@ -1331,7 +1331,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "abstract class Foo {}\n"
       "class C {\n"
       "  test() {\n"
@@ -1352,14 +1352,14 @@
 
   EXPECT_STREQ("exception", SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
   EXPECT_STREQ("exception", SimpleInvokeStr(lib, "main"));
 }
 
 TEST_CASE(IsolateReload_PendingStaticCall_DefinedToNSM) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  static foo() => 'static'\n"
       "  test() {\n"
@@ -1379,7 +1379,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  test() {\n"
       "    reloadTest();\n"
@@ -1398,14 +1398,14 @@
 
   EXPECT_STREQ("exception", SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
   EXPECT_STREQ("exception", SimpleInvokeStr(lib, "main"));
 }
 
 TEST_CASE(IsolateReload_PendingStaticCall_NSMToDefined) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  test() {\n"
       "    reloadTest();\n"
@@ -1424,7 +1424,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  static foo() => 'static'\n"
       "  test() {\n"
@@ -1444,14 +1444,14 @@
 
   EXPECT_STREQ("static", SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
   EXPECT_STREQ("static", SimpleInvokeStr(lib, "main"));
 }
 
 TEST_CASE(IsolateReload_PendingSuperCall) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class S {\n"
       "  foo() => 1;\n"
       "}\n"
@@ -1471,7 +1471,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class S {\n"
       "  foo() => 10;\n"
       "}\n"
@@ -1494,7 +1494,7 @@
 
 TEST_CASE(IsolateReload_TearOff_Instance_Equality) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  foo() => 'old';\n"
       "}\n"
@@ -1510,7 +1510,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  foo() => 'new';\n"
       "}\n"
@@ -1526,13 +1526,13 @@
 
   EXPECT_STREQ("new new true false", SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
 }
 
 TEST_CASE(IsolateReload_TearOff_Class_Identity) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  static foo() => 'old';\n"
       "}\n"
@@ -1548,7 +1548,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  static foo() => 'new';\n"
       "}\n"
@@ -1564,13 +1564,13 @@
 
   EXPECT_STREQ("new new true true", SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
 }
 
 TEST_CASE(IsolateReload_TearOff_Library_Identity) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "foo() => 'old';\n"
       "getFoo() => foo;\n"
       "main() {\n"
@@ -1584,7 +1584,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "foo() => 'new';\n"
       "getFoo() => foo;\n"
       "main() {\n"
@@ -1598,13 +1598,13 @@
 
   EXPECT_STREQ("new new true true", SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
 }
 
 TEST_CASE(IsolateReload_TearOff_List_Set) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  foo() => 'old';\n"
       "}\n"
@@ -1632,7 +1632,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  foo() => 'new';\n"
       "}\n"
@@ -1661,13 +1661,16 @@
   EXPECT_STREQ("new new true true true new true true true",
                SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
 }
 
+// TODO(bkonyi): This test has been modified since it was written and no longer
+// tests functionality that it did originally. It needs to be either re-written
+// or removed.
 TEST_CASE(IsolateReload_DanglingGetter_Instance) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  var x = 3;\n"
       "  var y = 4;\n"
@@ -1692,7 +1695,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  var x = 3;\n"
       "}\n"
@@ -1719,13 +1722,20 @@
       "NoSuchMethodError: Class 'int' has no instance method 'call'.",
       SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  if (TestCase::UsingDartFrontend() && TestCase::UsingStrongMode()) {
+    EXPECT_NULL(lib);
+  } else {
+    EXPECT_NON_NULL(lib);
+  }
 }
 
+// TODO(bkonyi): This test has been modified since it was written and no longer
+// tests functionality that it did originally. It needs to be either re-written
+// or removed.
 TEST_CASE(IsolateReload_DanglingGetter_Class) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  static var x;\n"
       "  static var y;\n"
@@ -1751,7 +1761,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  static var x;\n"
       "}\n"
@@ -1779,13 +1789,17 @@
       "NoSuchMethodError: Class 'int' has no instance method 'call'.",
       SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  if (TestCase::UsingDartFrontend() && TestCase::UsingStrongMode()) {
+    EXPECT_NULL(lib);
+  } else {
+    EXPECT_NON_NULL(lib);
+  }
 }
 
 TEST_CASE(IsolateReload_TearOff_AddArguments) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  foo(x) => x;\n"
       "}\n"
@@ -1809,7 +1823,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  foo(x, y, z) => x + y + z;\n"
       "}\n"
@@ -1836,13 +1850,13 @@
       "'foo' with matching arguments.",
       SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
 }
 
 TEST_CASE(IsolateReload_TearOff_AddArguments2) {
   const char* kScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  static foo(x) => x;\n"
       "}\n"
@@ -1865,7 +1879,7 @@
   EXPECT_VALID(lib);
 
   const char* kReloadScript =
-      "import 'test:isolate_reload_helper';\n"
+      "import 'file:///test:isolate_reload_helper';\n"
       "class C {\n"
       "  static foo(x, y, z) => x + y + z;\n"
       "}\n"
@@ -1891,8 +1905,8 @@
       "function 'C.foo'",
       SimpleInvokeStr(lib, "main"));
 
-  lib = TestCase::GetReloadErrorOrRootLibrary();
-  EXPECT_VALID(lib);
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
 }
 
 TEST_CASE(IsolateReload_EnumEquality) {
@@ -3375,6 +3389,46 @@
   EXPECT_STREQ("true true true true", SimpleInvokeStr(lib, "main"));
 }
 
+TEST_CASE(IsolateReload_RunNewFieldInitializersWithGenerics) {
+  const char* kScript =
+      "class Foo<T> {\n"
+      "  T x;\n"
+      "}\n"
+      "Foo value1;\n"
+      "Foo value2;\n"
+      "main() {\n"
+      "  value1 = new Foo<String>();\n"
+      "  value2 = new Foo<int>();\n"
+      "  return 'Okay';\n"
+      "}\n";
+
+  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+  EXPECT_VALID(lib);
+  EXPECT_STREQ("Okay", SimpleInvokeStr(lib, "main"));
+
+  const char* kReloadScript =
+      "class Foo<T> {\n"
+      "  T x;\n"
+      "  List<T> y = new List<T>();"
+      "  dynamic z = <T,T>{};"
+      "}\n"
+      "Foo value1;\n"
+      "Foo value2;\n"
+      "main() {\n"
+      "  return '${value1.y.runtimeType} ${value1.z.runtimeType}'"
+      "      ' ${value2.y.runtimeType} ${value2.z.runtimeType}';\n"
+      "}\n";
+
+  lib = TestCase::ReloadTestScript(kReloadScript);
+  EXPECT_VALID(lib);
+  // Verify that we ran field initializers on existing instances and
+  // correct type arguments were used.
+  EXPECT_STREQ(
+      "List<String> _InternalLinkedHashMap<String, String> List<int> "
+      "_InternalLinkedHashMap<int, int>",
+      SimpleInvokeStr(lib, "main"));
+}
+
 TEST_CASE(IsolateReload_TypedefToNotTypedef) {
   const char* kScript =
       "typedef bool Predicate(dynamic x);\n"
diff --git a/runtime/vm/kernel.h b/runtime/vm/kernel.h
index 366277f..579a186 100644
--- a/runtime/vm/kernel.h
+++ b/runtime/vm/kernel.h
@@ -184,6 +184,10 @@
   DISALLOW_COPY_AND_ASSIGN(KernelLineStartsReader);
 };
 
+RawFunction* CreateFieldInitializerFunction(Thread* thread,
+                                            Zone* zone,
+                                            const Field& field);
+
 ParsedFunction* ParseStaticFieldInitializer(Zone* zone, const Field& field);
 
 bool FieldHasFunctionLiteralInitializer(const Field& field,
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 4819fd2..d514487 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -40,6 +40,8 @@
   kLocalInitializer = 11,
   kAssertInitializer = 12,
 
+  kCheckLibraryIsLoaded = 13,
+  kLoadLibrary = 14,
   kDirectPropertyGet = 15,
   kDirectPropertySet = 16,
   kDirectMethodInvocation = 17,
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index f3362e4..6b2e819 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -14,6 +14,7 @@
 #include "vm/longjump.h"
 #include "vm/object_store.h"
 #include "vm/parser.h"
+#include "vm/reusable_handles.h"
 #include "vm/service_isolate.h"
 #include "vm/symbols.h"
 
@@ -56,7 +57,7 @@
         return true;
       }
       case kStringLiteral:
-        simple_value_ = &H.DartSymbol(
+        simple_value_ = &H.DartSymbolPlain(
             builder_->ReadStringReference());  // read index into string table.
         return true;
       case kSpecialIntLiteral:
@@ -466,7 +467,7 @@
 
   Tag tag = builder_.ReadTag();
   ASSERT(tag == kStringLiteral);
-  String& result = H.DartSymbol(
+  String& result = H.DartSymbolPlain(
       builder_.ReadStringReference());  // read index into string table.
 
   // List of named.
@@ -733,7 +734,7 @@
   intptr_t procedure_count = library_index.procedure_count();
 
   library_helper.ReadUntilIncluding(LibraryHelper::kName);
-  library.SetName(H.DartSymbol(library_helper.name_index_));
+  library.SetName(H.DartSymbolObfuscate(library_helper.name_index_));
 
   // The bootstrapper will take care of creating the native wrapper classes, but
   // we will add the synthetic constructors to them here.
@@ -877,7 +878,8 @@
       uint8_t flags = builder_.ReadFlags();
       intptr_t name_count = builder_.ReadListLength();
       for (intptr_t n = 0; n < name_count; ++n) {
-        String& show_hide_name = H.DartSymbol(builder_.ReadStringReference());
+        String& show_hide_name =
+            H.DartSymbolObfuscate(builder_.ReadStringReference());
         if (flags & LibraryDependencyHelper::Show) {
           show_list.Add(show_hide_name, Heap::kOld);
         } else {
@@ -904,7 +906,7 @@
         target_library.url() == Symbols::DartMirrors().raw()) {
       H.ReportError("import of dart:mirrors with --enable-mirrors=false");
     }
-    String& prefix = H.DartSymbol(dependency_helper.name_index_);
+    String& prefix = H.DartSymbolPlain(dependency_helper.name_index_);
     ns = Namespace::New(target_library, show_names, hide_names);
     if (dependency_helper.flags_ & LibraryDependencyHelper::Export) {
       library->AddExport(ns);
@@ -967,6 +969,41 @@
   if (class_helper->is_abstract_) klass->set_is_abstract();
 }
 
+// Workaround for http://dartbug.com/32087: currently Kernel front-end
+// embeds absolute build-time paths to core library sources into Kernel
+// binaries this introduces discrepancy between how stack traces were
+// looked like in legacy pipeline and how they look in Dart 2 pipeline and
+// breaks users' code that attempts to pattern match and filter various
+// irrelevant frames (e.g. frames from dart:async).
+// This also breaks debugging experience in external debuggers because
+// debugger attempts to open files that don't exist in the local file
+// system.
+// To work around this issue we reformat urls of scripts belonging to
+// dart:-scheme libraries to look like they looked like in legacy pipeline:
+//
+//               dart:libname/filename.dart
+//
+void KernelLoader::FixCoreLibraryScriptUri(const Library& library,
+                                           const Script& script) {
+  if (library.is_dart_scheme()) {
+    String& url = String::Handle(zone_, script.url());
+    if (!url.StartsWith(Symbols::DartScheme())) {
+      // Search backwards until '/' is found. That gives us the filename.
+      // Note: can't use reusable handle in the code below because
+      // concat also needs it.
+      intptr_t pos = url.Length() - 1;
+      while (pos >= 0 && url.CharAt(pos) != '/') {
+        pos--;
+      }
+
+      url = String::SubString(url, pos + 1);
+      url = String::Concat(Symbols::Slash(), url);
+      url = String::Concat(String::Handle(zone_, library.url()), url);
+      script.set_url(url);
+    }
+  }
+}
+
 Class& KernelLoader::LoadClass(const Library& library,
                                const Class& toplevel_class,
                                intptr_t class_end) {
@@ -987,6 +1024,7 @@
     const Script& script =
         Script::Handle(Z, ScriptAt(class_helper.source_uri_index_));
     klass.set_script(script);
+    FixCoreLibraryScriptUri(library, script);
   }
   if (klass.token_pos() == TokenPosition::kNoSource) {
     class_helper.ReadUntilIncluding(ClassHelper::kPosition);
@@ -1190,6 +1228,10 @@
   ProcedureHelper procedure_helper(&builder_);
 
   procedure_helper.ReadUntilExcluding(ProcedureHelper::kAnnotations);
+  if (procedure_helper.IsRedirectingFactoryConstructor()) {
+    builder_.SetOffset(procedure_end);
+    return;
+  }
   const String& name = H.DartProcedureName(procedure_helper.canonical_name_);
   bool is_method = in_class && !procedure_helper.IsStatic();
   bool is_abstract = procedure_helper.IsAbstract();
@@ -1345,6 +1387,7 @@
     patch_class ^= patch_classes_.At(source_uri_index);
     if (patch_class.IsNull() || patch_class.origin_class() != klass.raw()) {
       ASSERT(!library_kernel_data_.IsNull());
+      FixCoreLibraryScriptUri(Library::Handle(klass.library()), correct_script);
       patch_class = PatchClass::New(klass, correct_script);
       patch_class.set_library_kernel_data(library_kernel_data_);
       patch_class.set_library_kernel_offset(library_kernel_offset_);
@@ -1496,7 +1539,7 @@
 Library& KernelLoader::LookupLibrary(NameIndex library) {
   Library* handle = NULL;
   if (!libraries_.Lookup(library, &handle)) {
-    const String& url = H.DartSymbol(H.CanonicalNameString(library));
+    const String& url = H.DartString(H.CanonicalNameString(library));
     handle = &Library::Handle(Z, Library::LookupLibrary(thread_, url));
     if (handle->IsNull()) {
       *handle = Library::New(url);
@@ -1541,16 +1584,19 @@
   return static_cast<RawFunction::Kind>(lookuptable[kind]);
 }
 
-ParsedFunction* ParseStaticFieldInitializer(Zone* zone, const Field& field) {
-  Thread* thread = Thread::Current();
-
+RawFunction* CreateFieldInitializerFunction(Thread* thread,
+                                            Zone* zone,
+                                            const Field& field) {
   String& init_name = String::Handle(zone, field.name());
   init_name = Symbols::FromConcat(thread, Symbols::InitPrefix(), init_name);
 
   // Create a static initializer.
   const Object& owner = Object::Handle(field.RawOwner());
-  const Function& initializer_fun = Function::ZoneHandle(
-      zone, Function::New(init_name, RawFunction::kImplicitStaticFinalGetter,
+  const Function& initializer_fun = Function::Handle(
+      zone, Function::New(init_name,
+                          // TODO(alexmarkov): Consider creating a separate
+                          // function kind for field initializers.
+                          RawFunction::kImplicitStaticFinalGetter,
                           true,   // is_static
                           false,  // is_const
                           false,  // is_abstract
@@ -1562,6 +1608,15 @@
   initializer_fun.set_is_debuggable(false);
   initializer_fun.set_is_reflectable(false);
   initializer_fun.set_is_inlinable(false);
+  return initializer_fun.raw();
+}
+
+ParsedFunction* ParseStaticFieldInitializer(Zone* zone, const Field& field) {
+  Thread* thread = Thread::Current();
+
+  const Function& initializer_fun = Function::ZoneHandle(
+      zone, CreateFieldInitializerFunction(thread, zone, field));
+
   return new (zone) ParsedFunction(thread, initializer_fun);
 }
 
diff --git a/runtime/vm/kernel_loader.h b/runtime/vm/kernel_loader.h
index 8a5f60f..c66d499 100644
--- a/runtime/vm/kernel_loader.h
+++ b/runtime/vm/kernel_loader.h
@@ -145,12 +145,15 @@
   void AnnotateNativeProcedures(const Array& constant_table);
   void LoadNativeExtensionLibraries(const Array& constant_table);
 
-  const String& DartSymbol(StringIndex index) {
-    return translation_helper_.DartSymbol(index);
+  const String& DartSymbolPlain(StringIndex index) {
+    return translation_helper_.DartSymbolPlain(index);
+  }
+  const String& DartSymbolObfuscate(StringIndex index) {
+    return translation_helper_.DartSymbolObfuscate(index);
   }
 
   const String& LibraryUri(intptr_t library_index) {
-    return translation_helper_.DartSymbol(
+    return translation_helper_.DartSymbolPlain(
         translation_helper_.CanonicalNameString(
             library_canonical_name(library_index)));
   }
@@ -192,6 +195,8 @@
 
   void CheckForInitializer(const Field& field);
 
+  void FixCoreLibraryScriptUri(const Library& library, const Script& script);
+
   Class& LoadClass(const Library& library,
                    const Class& toplevel_class,
                    intptr_t class_end);
diff --git a/runtime/vm/native_api_impl.cc b/runtime/vm/native_api_impl.cc
index 2f52f30..c8510f6 100644
--- a/runtime/vm/native_api_impl.cc
+++ b/runtime/vm/native_api_impl.cc
@@ -102,6 +102,7 @@
   return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
 #else
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Dart_Handle result = Api::CheckAndFinalizePendingClasses(T);
   if (::Dart_IsError(result)) {
     return result;
@@ -120,6 +121,7 @@
   return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
 #else
   DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
   Dart_Handle result = Api::CheckAndFinalizePendingClasses(T);
   if (::Dart_IsError(result)) {
     return result;
diff --git a/runtime/vm/native_entry.cc b/runtime/vm/native_entry.cc
index 57405db..d993921 100644
--- a/runtime/vm/native_entry.cc
+++ b/runtime/vm/native_entry.cc
@@ -102,6 +102,19 @@
   UNREACHABLE();
 }
 
+#if defined(TARGET_ARCH_DBC)
+uword NativeEntry::BootstrapNativeCallWrapperEntry() {
+  uword entry =
+      reinterpret_cast<uword>(NativeEntry::BootstrapNativeCallWrapper);
+  return entry;
+}
+
+void NativeEntry::BootstrapNativeCallWrapper(Dart_NativeArguments args,
+                                             Dart_NativeFunction func) {
+  func(args);
+}
+#endif
+
 uword NativeEntry::NoScopeNativeCallWrapperEntry() {
   uword entry = reinterpret_cast<uword>(NativeEntry::NoScopeNativeCallWrapper);
 #if defined(USING_SIMULATOR) && !defined(TARGET_ARCH_DBC)
@@ -202,8 +215,6 @@
   VERIFY_ON_TRANSITION;
 }
 
-// DBC does not support lazy native call linking.
-#if !defined(TARGET_ARCH_DBC)
 static NativeFunction ResolveNativeFunction(Zone* zone,
                                             const Function& func,
                                             bool* is_bootstrap_native,
@@ -229,7 +240,8 @@
 
 uword NativeEntry::LinkNativeCallEntry() {
   uword entry = reinterpret_cast<uword>(NativeEntry::LinkNativeCall);
-#if defined(USING_SIMULATOR)
+#if defined(USING_SIMULATOR) && !defined(TARGET_ARCH_DBC)
+  // DBC does not use redirections unlike other simulators.
   entry = Simulator::RedirectExternalReference(
       entry, Simulator::kBootstrapNativeCall, NativeEntry::kNumArguments);
 #endif
@@ -269,7 +281,7 @@
                               &is_bootstrap_native, &is_auto_scope);
     ASSERT(target_function != NULL);
 
-#if defined(DEBUG)
+#if defined(DEBUG) && !defined(TARGET_ARCH_DBC)
     {
       NativeFunction current_function = NULL;
       const Code& current_trampoline =
@@ -291,6 +303,16 @@
 #endif
 
     NativeFunction patch_target_function = target_function;
+#if defined(TARGET_ARCH_DBC)
+    NativeFunctionWrapper trampoline;
+    if (is_bootstrap_native) {
+      trampoline = &BootstrapNativeCallWrapper;
+    } else if (is_auto_scope) {
+      trampoline = &AutoScopeNativeCallWrapper;
+    } else {
+      trampoline = &NoScopeNativeCallWrapper;
+    }
+#else
     Code& trampoline = Code::Handle(zone);
     if (is_bootstrap_native) {
       trampoline = StubCode::CallBootstrapNative_entry()->code();
@@ -305,6 +327,7 @@
     } else {
       trampoline = StubCode::CallNoScopeNative_entry()->code();
     }
+#endif
 
     CodePatcher::PatchNativeCallAt(caller_frame->pc(), code,
                                    patch_target_function, trampoline);
@@ -331,6 +354,5 @@
         args, reinterpret_cast<Dart_NativeFunction>(target_function));
   }
 }
-#endif  // !defined(TARGET_ARCH_DBC)
 
 }  // namespace dart
diff --git a/runtime/vm/native_entry.h b/runtime/vm/native_entry.h
index 1fda0b5..048c12e 100644
--- a/runtime/vm/native_entry.h
+++ b/runtime/vm/native_entry.h
@@ -36,6 +36,8 @@
 //    scope.
 
 typedef void (*NativeFunction)(NativeArguments* arguments);
+typedef void (*NativeFunctionWrapper)(Dart_NativeArguments args,
+                                      Dart_NativeFunction func);
 
 #ifndef PRODUCT
 #define TRACE_NATIVE_CALL(format, name)                                        \
@@ -127,6 +129,12 @@
                                                uword pc);
   static const uint8_t* ResolveSymbol(uword pc);
 
+#if defined(TARGET_ARCH_DBC)
+  static uword BootstrapNativeCallWrapperEntry();
+  static void BootstrapNativeCallWrapper(Dart_NativeArguments args,
+                                         Dart_NativeFunction func);
+#endif
+
   static uword NoScopeNativeCallWrapperEntry();
   static void NoScopeNativeCallWrapper(Dart_NativeArguments args,
                                        Dart_NativeFunction func);
@@ -135,11 +143,8 @@
   static void AutoScopeNativeCallWrapper(Dart_NativeArguments args,
                                          Dart_NativeFunction func);
 
-// DBC does not support lazy native call linking.
-#if !defined(TARGET_ARCH_DBC)
   static uword LinkNativeCallEntry();
   static void LinkNativeCall(Dart_NativeArguments args);
-#endif
 
  private:
   static void NoScopeNativeCallWrapperNoStackCheck(Dart_NativeArguments args,
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index a2d7cfe..3a928b4 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -12264,8 +12264,6 @@
       if (result.IsError()) {
         return Error::Cast(result).raw();
       }
-      func.ClearICDataArray();
-      func.ClearCode();
     }
   }
   return Error::null();
@@ -12547,8 +12545,10 @@
       RawObject* obj = ObjectAt(i);
       THR_Print("0x%" Px " %s (obj)\n", reinterpret_cast<uword>(obj),
                 Object::Handle(obj).ToCString());
-    } else if (TypeAt(i) == kNativeEntry) {
-      THR_Print("0x%" Px " (native entry)\n", RawValueAt(i));
+    } else if (TypeAt(i) == kNativeFunction) {
+      THR_Print("0x%" Px " (native function)\n", RawValueAt(i));
+    } else if (TypeAt(i) == kNativeFunctionWrapper) {
+      THR_Print("0x%" Px " (native function wrapper)\n", RawValueAt(i));
     } else {
       THR_Print("0x%" Px " (raw)\n", RawValueAt(i));
     }
@@ -22658,35 +22658,7 @@
     }
   }
 
-  // Workaround for http://dartbug.com/32087: currently Kernel front-end
-  // embeds absolute build-time paths to core library sources into Kernel
-  // binaries this introduces discrepancy between how stack traces were
-  // looked like in legacy pipeline and how they look in Dart 2 pipeline and
-  // breaks users' code that attempts to pattern match and filter various
-  // irrelevant frames (e.g. frames from dart:async).
-  // To work around this issue we reformat urls of scripts belonging to
-  // dart:-scheme libraries to look like they looked like in legacy pipeline:
-  //
-  //               dart:libname/filename.dart
-  //
   const char* url_string = url.ToCString();
-  if (script.kernel_program_info() != KernelProgramInfo::null()) {
-    const Class& owner = Class::Handle(function.Owner());
-    const Library& lib = Library::Handle(owner.library());
-    if (lib.is_dart_scheme()) {
-      // Search backwards until '/' is found. That gives us the filename.
-      intptr_t pos = strlen(url_string) - 1;
-      while (pos >= 0 && url_string[pos] != '/') {
-        pos--;
-      }
-      const char* filename = url_string + (pos + 1);
-
-      // Glue together canonic library url (e.g. dart:async) and filename.
-      url_string = zone->PrintToString(
-          "%s/%s", String::Handle(lib.url()).ToCString(), filename);
-    }
-  }
-
   if (column >= 0) {
     buffer->Printf("#%-6" Pd " %s (%s:%" Pd ":%" Pd ")\n", frame_index,
                    function_name.ToCString(), url_string, line, column);
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index ec35e6e..a03522c 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -3076,7 +3076,7 @@
 
   intptr_t kernel_offset() const {
 #if defined(DART_PRECOMPILED_RUNTIME)
-    return NULL;
+    return 0;
 #else
     return raw_ptr()->kernel_offset_;
 #endif
@@ -4051,7 +4051,8 @@
   enum EntryType {
     kTaggedObject,
     kImmediate,
-    kNativeEntry,
+    kNativeFunction,
+    kNativeFunctionWrapper,
   };
 
   struct Entry {
diff --git a/runtime/vm/object_service.cc b/runtime/vm/object_service.cc
index a8efe0c..aa21aa8 100644
--- a/runtime/vm/object_service.cc
+++ b/runtime/vm/object_service.cc
@@ -657,9 +657,14 @@
           jsentry.AddProperty("kind", "Immediate");
           jsentry.AddProperty64("value", imm);
           break;
-        case ObjectPool::kNativeEntry:
+        case ObjectPool::kNativeFunction:
           imm = RawValueAt(i);
-          jsentry.AddProperty("kind", "NativeEntry");
+          jsentry.AddProperty("kind", "NativeFunction");
+          jsentry.AddProperty64("value", imm);
+          break;
+        case ObjectPool::kNativeFunctionWrapper:
+          imm = RawValueAt(i);
+          jsentry.AddProperty("kind", "NativeFunctionWrapper");
           jsentry.AddProperty64("value", imm);
           break;
         default:
diff --git a/runtime/vm/os_fuchsia.cc b/runtime/vm/os_fuchsia.cc
index 624c883..abdae63 100644
--- a/runtime/vm/os_fuchsia.cc
+++ b/runtime/vm/os_fuchsia.cc
@@ -66,7 +66,7 @@
 const char* OS::GetTimeZoneName(int64_t seconds_since_epoch) {
   time_service::TimeServiceSyncPtr time_svc;
   if (GetTimeServicePtr(&time_svc) == ZX_OK) {
-    fidl::String res;
+    f1dl::String res;
     time_svc->GetTimezoneId(&res);
     char* tz_name = Thread::Current()->zone()->Alloc<char>(res.size() + 1);
     memmove(tz_name, res.get().c_str(), res.size());
diff --git a/runtime/vm/simulator_dbc.cc b/runtime/vm/simulator_dbc.cc
index 876f645..bd7be22 100644
--- a/runtime/vm/simulator_dbc.cc
+++ b/runtime/vm/simulator_dbc.cc
@@ -620,10 +620,6 @@
 // Calls to leaf float Dart runtime functions are based on this interface.
 typedef double (*SimulatorLeafFloatRuntimeCall)(double d0, double d1);
 
-// Calls to native Dart functions are based on this interface.
-typedef void (*SimulatorBootstrapNativeCall)(NativeArguments* arguments);
-typedef void (*SimulatorNativeCall)(NativeArguments* arguments, uword target);
-
 void Simulator::Exit(Thread* thread,
                      RawObject** base,
                      RawObject** frame,
@@ -970,48 +966,15 @@
   }
 }
 
-static DART_NOINLINE bool InvokeBootstrapNative(Thread* thread,
-                                                Simulator* sim,
-                                                SimulatorBootstrapNativeCall f,
-                                                NativeArguments* args) {
+static DART_NOINLINE bool InvokeNative(Thread* thread,
+                                       Simulator* sim,
+                                       NativeFunctionWrapper wrapper,
+                                       Dart_NativeFunction function,
+                                       Dart_NativeArguments args) {
   SimulatorSetjmpBuffer buffer(sim);
   if (!setjmp(buffer.buffer_)) {
-    thread->set_vm_tag(reinterpret_cast<uword>(f));
-    f(args);
-    thread->set_vm_tag(VMTag::kDartTagId);
-    thread->set_top_exit_frame_info(0);
-    return true;
-  } else {
-    return false;
-  }
-}
-
-static DART_NOINLINE bool InvokeNativeNoScopeWrapper(Thread* thread,
-                                                     Simulator* sim,
-                                                     Dart_NativeFunction f,
-                                                     NativeArguments* args) {
-  SimulatorSetjmpBuffer buffer(sim);
-  if (!setjmp(buffer.buffer_)) {
-    thread->set_vm_tag(reinterpret_cast<uword>(f));
-    NativeEntry::NoScopeNativeCallWrapper(
-        reinterpret_cast<Dart_NativeArguments>(args), f);
-    thread->set_vm_tag(VMTag::kDartTagId);
-    thread->set_top_exit_frame_info(0);
-    return true;
-  } else {
-    return false;
-  }
-}
-
-static DART_NOINLINE bool InvokeNativeAutoScopeWrapper(Thread* thread,
-                                                       Simulator* sim,
-                                                       Dart_NativeFunction f,
-                                                       NativeArguments* args) {
-  SimulatorSetjmpBuffer buffer(sim);
-  if (!setjmp(buffer.buffer_)) {
-    thread->set_vm_tag(reinterpret_cast<uword>(f));
-    NativeEntry::AutoScopeNativeCallWrapper(
-        reinterpret_cast<Dart_NativeArguments>(args), f);
+    thread->set_vm_tag(reinterpret_cast<uword>(function));
+    wrapper(args, function);
     thread->set_vm_tag(VMTag::kDartTagId);
     thread->set_top_exit_frame_info(0);
     return true;
@@ -1174,22 +1137,8 @@
     HANDLE_RETURN;                                                             \
   }
 
-#define INVOKE_BOOTSTRAP_NATIVE(Func, Args)                                    \
-  if (!InvokeBootstrapNative(thread, this, Func, &Args)) {                     \
-    HANDLE_EXCEPTION;                                                          \
-  } else {                                                                     \
-    HANDLE_RETURN;                                                             \
-  }
-
-#define INVOKE_NATIVE_NO_SCOPE(Func, Args)                                     \
-  if (!InvokeNativeNoScopeWrapper(thread, this, Func, &Args)) {                \
-    HANDLE_EXCEPTION;                                                          \
-  } else {                                                                     \
-    HANDLE_RETURN;                                                             \
-  }
-
-#define INVOKE_NATIVE_AUTO_SCOPE(Func, Args)                                   \
-  if (!InvokeNativeAutoScopeWrapper(thread, this, Func, &Args)) {              \
+#define INVOKE_NATIVE(Wrapper, Func, Args)                                     \
+  if (!InvokeNative(thread, this, Wrapper, Func, Args)) {                      \
     HANDLE_EXCEPTION;                                                          \
   } else {                                                                     \
     HANDLE_RETURN;                                                             \
@@ -1854,60 +1803,25 @@
   }
 
   {
-    BYTECODE(NativeBootstrapCall, 0);
-    intptr_t argc_tag = reinterpret_cast<intptr_t>(SP[-0]);
+    BYTECODE(NativeCall, A_B_C);
+    NativeFunctionWrapper trampoline =
+        reinterpret_cast<NativeFunctionWrapper>(LOAD_CONSTANT(rA));
+    Dart_NativeFunction function =
+        reinterpret_cast<Dart_NativeFunction>(LOAD_CONSTANT(rB));
+    intptr_t argc_tag = reinterpret_cast<intptr_t>(LOAD_CONSTANT(rC));
     const intptr_t num_arguments = NativeArguments::ArgcBits::decode(argc_tag);
 
-    RawObject** incoming_args = SP - 1 - num_arguments;
-    RawObject** return_slot = SP - 1;
-    SimulatorBootstrapNativeCall native_target =
-        reinterpret_cast<SimulatorBootstrapNativeCall>(SP[-1]);
-    SP[-0] = 0;  // Note: argc_tag is not smi-tagged.
-    SP[-1] = null_value;
-    Exit(thread, FP, SP + 1, pc);
+    *++SP = null_value;  // Result slot.
+
+    RawObject** incoming_args = SP - num_arguments;
+    RawObject** return_slot = SP;
+    Exit(thread, FP, SP, pc);
     NativeArguments args(thread, argc_tag, incoming_args, return_slot);
-    INVOKE_BOOTSTRAP_NATIVE(native_target, args);
+    INVOKE_NATIVE(trampoline, function,
+                  reinterpret_cast<Dart_NativeArguments>(&args));
 
-    *(SP - 1 - num_arguments) = *return_slot;
-    SP -= 1 + num_arguments;
-    DISPATCH();
-  }
-
-  {
-    BYTECODE(NativeNoScopeCall, 0);
-    intptr_t argc_tag = reinterpret_cast<intptr_t>(SP[-0]);
-    const intptr_t num_arguments = NativeArguments::ArgcBits::decode(argc_tag);
-
-    RawObject** incoming_args = SP - 1 - num_arguments;
-    RawObject** return_slot = SP - 1;
-    Dart_NativeFunction native_target =
-        reinterpret_cast<Dart_NativeFunction>(SP[-1]);
-    SP[-0] = 0;  // argc_tag is not smi tagged!
-    SP[-1] = null_value;
-    Exit(thread, FP, SP + 1, pc);
-    NativeArguments args(thread, argc_tag, incoming_args, return_slot);
-    INVOKE_NATIVE_NO_SCOPE(native_target, args);
-    *(SP - 1 - num_arguments) = *return_slot;
-    SP -= 1 + num_arguments;
-    DISPATCH();
-  }
-
-  {
-    BYTECODE(NativeAutoScopeCall, 0);
-    intptr_t argc_tag = reinterpret_cast<intptr_t>(SP[-0]);
-    const intptr_t num_arguments = NativeArguments::ArgcBits::decode(argc_tag);
-
-    RawObject** incoming_args = SP - 1 - num_arguments;
-    RawObject** return_slot = SP - 1;
-    Dart_NativeFunction native_target =
-        reinterpret_cast<Dart_NativeFunction>(SP[-1]);
-    SP[-0] = 0;  // argc_tag is not smi tagged!
-    SP[-1] = null_value;
-    Exit(thread, FP, SP + 1, pc);
-    NativeArguments args(thread, argc_tag, incoming_args, return_slot);
-    INVOKE_NATIVE_AUTO_SCOPE(native_target, args);
-    *(SP - 1 - num_arguments) = *return_slot;
-    SP -= 1 + num_arguments;
+    *(SP - num_arguments) = *return_slot;
+    SP -= num_arguments;
     DISPATCH();
   }
 
diff --git a/runtime/vm/source_report.cc b/runtime/vm/source_report.cc
index e6e8ac7..33afde7 100644
--- a/runtime/vm/source_report.cc
+++ b/runtime/vm/source_report.cc
@@ -65,6 +65,13 @@
 }
 
 bool SourceReport::ShouldSkipFunction(const Function& func) {
+  // TODO(32315): Verify that the check is still needed after the issue is
+  // resolved.
+  if (!func.token_pos().IsReal() || !func.end_token_pos().IsReal()) {
+    // At least one of the token positions is not known.
+    return true;
+  }
+
   if (script_ != NULL && !script_->IsNull()) {
     if (func.script() != script_->raw()) {
       // The function is from the wrong script.
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 276657a..4af3163 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -95,6 +95,7 @@
   V(ArgDescVar, ":arg_desc")                                                   \
   V(CurrentContextVar, ":current_context_var")                                 \
   V(SavedTryContextVar, ":saved_try_context_var")                              \
+  V(TryFinallyReturnValue, ":try_finally_return_value")                        \
   V(ExceptionParameter, ":exception")                                          \
   V(StackTraceParameter, ":stack_trace")                                       \
   V(ExceptionVar, ":exception_var")                                            \
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index 1d80516..a8fcbc1 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -175,17 +175,24 @@
 }
 
 #ifndef PRODUCT
+static const char* kIsolateReloadTestLibSource =
+    "void reloadTest() native 'Reload_Test';\n";
+
+static const char* IsolateReloadTestLibUri() {
+  return FLAG_use_dart_frontend ? "test:isolate_reload_helper"
+                                : "file:///test:isolate_reload_helper";
+}
+
 static bool IsIsolateReloadTestLib(const char* url_name) {
-  const char* kIsolateReloadTestLibUri = "test:isolate_reload_helper";
   static const intptr_t kIsolateReloadTestLibUriLen =
-      strlen(kIsolateReloadTestLibUri);
-  return (strncmp(url_name, kIsolateReloadTestLibUri,
+      strlen(IsolateReloadTestLibUri());
+  return (strncmp(url_name, IsolateReloadTestLibUri(),
                   kIsolateReloadTestLibUriLen) == 0);
 }
 
 static Dart_Handle IsolateReloadTestLibSource() {
   // Special library with one function.
-  return DartUtils::NewString("void reloadTest() native 'Reload_Test';\n");
+  return DartUtils::NewString(kIsolateReloadTestLibSource);
 }
 
 static void ReloadTest(Dart_NativeArguments native_args) {
@@ -198,6 +205,12 @@
     bool* auto_setup_scope) {
   return ReloadTest;
 }
+
+static Dart_Handle LoadIsolateReloadTestLib() {
+  return TestCase::LoadTestLibrary(IsolateReloadTestLibUri(),
+                                   kIsolateReloadTestLibSource,
+                                   IsolateReloadTestNativeResolver);
+}
 #endif  // !PRODUCT
 
 static Dart_Handle ResolvePackageUri(const char* uri_chars) {
@@ -215,6 +228,10 @@
   return FLAG_use_dart_frontend;
 }
 
+bool TestCase::UsingStrongMode() {
+  return FLAG_strong;
+}
+
 char* TestCase::CompileTestScriptWithDFE(const char* url,
                                          const char* source,
                                          void** kernel_pgm,
@@ -408,6 +425,12 @@
                                      const char* lib_url,
                                      bool finalize_classes) {
   if (FLAG_use_dart_frontend) {
+#ifndef PRODUCT
+    if (strstr(script, IsolateReloadTestLibUri()) != NULL) {
+      Dart_Handle result = LoadIsolateReloadTestLib();
+      EXPECT_VALID(result);
+    }
+#endif  // ifndef PRODUCT
     Dart_SourceFile* sourcefiles = NULL;
     intptr_t num_sources = BuildSourceFilesArray(&sourcefiles, script);
     Dart_Handle result = LoadTestScriptWithDFE(num_sources, sourcefiles,
@@ -420,23 +443,26 @@
   }
 }
 
-Dart_Handle TestCase::LoadTestLibrary(const char* lib_uri, const char* script) {
+Dart_Handle TestCase::LoadTestLibrary(const char* lib_uri,
+                                      const char* script,
+                                      Dart_NativeEntryResolver resolver) {
   if (FLAG_use_dart_frontend) {
     const char* prefixed_lib_uri =
         OS::SCreate(Thread::Current()->zone(), "file:///%s", lib_uri);
     Dart_SourceFile sourcefiles[] = {{prefixed_lib_uri, script}};
-    Dart_Handle result = Dart_SetLibraryTagHandler(LibraryTagHandler);
-    EXPECT_VALID(result);
     void* kernel_pgm = NULL;
     int sourcefiles_count = sizeof(sourcefiles) / sizeof(Dart_SourceFile);
     char* error = TestCase::CompileTestScriptWithDFE(
-        sourcefiles[0].uri, sourcefiles_count, sourcefiles, &kernel_pgm, false);
+        sourcefiles[0].uri, sourcefiles_count, sourcefiles, &kernel_pgm, true);
     if (error != NULL) {
       return Dart_NewApiError(error);
     }
     Dart_Handle url = NewString(prefixed_lib_uri);
-    return Dart_LoadLibrary(url, Dart_Null(),
-                            reinterpret_cast<Dart_Handle>(kernel_pgm), 0, 0);
+    Dart_Handle lib = Dart_LoadLibrary(
+        url, Dart_Null(), reinterpret_cast<Dart_Handle>(kernel_pgm), 0, 0);
+    EXPECT_VALID(lib);
+    Dart_SetNativeResolver(lib, resolver, NULL);
+    return lib;
   } else {
     Dart_Handle url = NewString(lib_uri);
     Dart_Handle source = NewString(script);
@@ -475,13 +501,20 @@
 #ifndef PRODUCT
 
 void TestCase::SetReloadTestScript(const char* script) {
-  if (script_reload_key == kUnsetThreadLocalKey) {
-    script_reload_key = OSThread::CreateThreadLocal();
+  if (FLAG_use_dart_frontend) {
+    Dart_SourceFile* sourcefiles = NULL;
+    intptr_t num_files = BuildSourceFilesArray(&sourcefiles, script);
+    KernelIsolate::UpdateInMemorySources(num_files, sourcefiles);
+  } else {
+    if (script_reload_key == kUnsetThreadLocalKey) {
+      script_reload_key = OSThread::CreateThreadLocal();
+    }
+    ASSERT(script_reload_key != kUnsetThreadLocalKey);
+    ASSERT(OSThread::GetThreadLocal(script_reload_key) == 0);
+    // Store the new script in TLS.
+    OSThread::SetThreadLocal(script_reload_key,
+                             reinterpret_cast<uword>(script));
   }
-  ASSERT(script_reload_key != kUnsetThreadLocalKey);
-  ASSERT(OSThread::GetThreadLocal(script_reload_key) == 0);
-  // Store the new script in TLS.
-  OSThread::SetThreadLocal(script_reload_key, reinterpret_cast<uword>(script));
 }
 
 Dart_Handle TestCase::TriggerReload() {
@@ -504,6 +537,16 @@
   }
 }
 
+Dart_Handle TestCase::GetReloadLibrary() {
+  Isolate* isolate = Isolate::Current();
+
+  if (isolate->reload_context() != NULL &&
+      isolate->reload_context()->reload_aborted()) {
+    return Dart_Null();
+  }
+  return Dart_RootLibrary();
+}
+
 Dart_Handle TestCase::GetReloadErrorOrRootLibrary() {
   Isolate* isolate = Isolate::Current();
 
diff --git a/runtime/vm/unit_test.h b/runtime/vm/unit_test.h
index 2e6221d..e8b1fc7 100644
--- a/runtime/vm/unit_test.h
+++ b/runtime/vm/unit_test.h
@@ -312,6 +312,7 @@
   TestCase(RunEntry* run, const char* name) : TestCaseBase(name), run_(run) {}
 
   static bool UsingDartFrontend();
+  static bool UsingStrongMode();
 
   static char* CompileTestScriptWithDFE(const char* url,
                                         const char* source,
@@ -326,7 +327,9 @@
                                     Dart_NativeEntryResolver resolver,
                                     const char* lib_uri = USER_TEST_URI,
                                     bool finalize = true);
-  static Dart_Handle LoadTestLibrary(const char* lib_uri, const char* script);
+  static Dart_Handle LoadTestLibrary(const char* lib_uri,
+                                     const char* script,
+                                     Dart_NativeEntryResolver resolver = NULL);
   static Dart_Handle LoadTestScriptWithDFE(
       int sourcefiles_count,
       Dart_SourceFile sourcefiles[],
@@ -335,6 +338,7 @@
       bool incrementally = true);
   static Dart_Handle LoadCoreTestScript(const char* script,
                                         Dart_NativeEntryResolver resolver);
+
   static Dart_Handle lib();
   static const char* url();
   static Dart_Isolate CreateTestIsolateFromSnapshot(uint8_t* buffer,
@@ -355,8 +359,10 @@
 
   // Initiates the reload.
   static Dart_Handle TriggerReload();
-  // Gets the result of a reload.
-  static Dart_Handle GetReloadErrorOrRootLibrary();
+
+  // Returns the root library if the last reload was successful, otherwise
+  // returns Dart_Null().
+  static Dart_Handle GetReloadLibrary();
 
   // Helper function which reloads the current isolate using |script|.
   static Dart_Handle ReloadTestScript(const char* script);
@@ -377,6 +383,11 @@
                                     const char* name,
                                     void* data = NULL);
 
+  // Gets the result of a reload. This touches state in IsolateReloadContext
+  // that is zone allocated and should not be used if a reload is triggered
+  // using reloadTest() from package:isolate_reload_helper.
+  static Dart_Handle GetReloadErrorOrRootLibrary();
+
   RunEntry* const run_;
 };
 
@@ -658,6 +669,24 @@
     }                                                                          \
   } while (0)
 
+#define EXPECT_NULL(handle)                                                    \
+  do {                                                                         \
+    Dart_Handle tmp_handle = (handle);                                         \
+    if (!Dart_IsNull(tmp_handle)) {                                            \
+      dart::Expect(__FILE__, __LINE__)                                         \
+          .Fail("expected '%s' to be a null handle.\n", #handle);              \
+    }                                                                          \
+  } while (0)
+
+#define EXPECT_NON_NULL(handle)                                                \
+  do {                                                                         \
+    Dart_Handle tmp_handle = (handle);                                         \
+    if (Dart_IsNull(tmp_handle)) {                                             \
+      dart::Expect(__FILE__, __LINE__)                                         \
+          .Fail("expected '%s' to be a non-null handle.\n", #handle);          \
+    }                                                                          \
+  } while (0)
+
 // Elide a substring which starts with some prefix and ends with a ".
 //
 // This is used to remove non-deterministic or fragile substrings from
diff --git a/sdk/lib/_http/http_impl.dart b/sdk/lib/_http/http_impl.dart
index ed91dd4..f2a025e 100644
--- a/sdk/lib/_http/http_impl.dart
+++ b/sdk/lib/_http/http_impl.dart
@@ -376,7 +376,7 @@
       _httpRequest._httpClientConnection.destroy();
       return new Stream<List<int>>.empty().listen(null, onDone: onDone);
     }
-    var stream = _incoming;
+    Stream<List<int>> stream = _incoming;
     if (_httpClient.autoUncompress &&
         headers.value(HttpHeaders.CONTENT_ENCODING) == "gzip") {
       stream = stream.transform(GZIP.decoder);
diff --git a/sdk/lib/_internal/js_runtime/lib/js_number.dart b/sdk/lib/_internal/js_runtime/lib/js_number.dart
index e1b1e07..c0867be 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_number.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_number.dart
@@ -55,6 +55,7 @@
     return JS('num', r'# % #', this, b);
   }
 
+  @NoInline() // Use invoke_dynamic_specializer instead of inlining.
   JSNumber abs() => JS(
       'returns:num;effects:none;depends:none;throws:never;gvn:true',
       r'Math.abs(#)',
@@ -413,21 +414,26 @@
 /**
  * The interceptor class for [int]s.
  *
- * This class implements double since in JavaScript all numbers are doubles, so
- * while we want to treat `2.0` as an integer for some operations, its
- * interceptor should answer `true` to `is double`.
+ * This class implements double (indirectly through JSNumber) since in
+ * JavaScript all numbers are doubles, so while we want to treat `2.0` as an
+ * integer for some operations, its interceptor should answer `true` to `is
+ * double`.
  */
 class JSInt extends JSNumber implements int {
   const JSInt();
 
   @override
-  JSInt abs() => super.abs();
+  @NoInline() // Use invoke_dynamic_specializer instead of inlining.
+  JSInt abs() => JS(
+      'returns:int;effects:none;depends:none;throws:never;gvn:true',
+      r'Math.abs(#)',
+      this);
 
   @override
-  JSInt get sign => super.sign;
+  JSInt get sign => this > 0 ? 1 : this < 0 ? -1 : this;
 
   @override
-  JSInt operator -() => -super;
+  JSInt operator -() => JS('int', r'-#', this);
 
   bool get isEven => (this & 1) == 0;
 
diff --git a/sdk/lib/_internal/js_runtime/lib/mirrors_patch_cfe.dart b/sdk/lib/_internal/js_runtime/lib/mirrors_patch_cfe.dart
new file mode 100644
index 0000000..6f8018a
--- /dev/null
+++ b/sdk/lib/_internal/js_runtime/lib/mirrors_patch_cfe.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Patch library for dart:mirrors.
+
+import 'dart:_js_helper' show patch;
+import 'dart:mirrors';
+
+const String _message = 'dart:mirrors is no longer supported for web apps';
+
+@patch
+MirrorSystem currentMirrorSystem() => throw new UnsupportedError(_message);
+
+@patch
+InstanceMirror reflect(Object reflectee) =>
+    throw new UnsupportedError(_message);
+
+@patch
+ClassMirror reflectClass(Type key) => throw new UnsupportedError(_message);
+
+@patch
+TypeMirror reflectType(Type key, [List<Type> typeArguments]) =>
+    throw new UnsupportedError(_message);
diff --git a/sdk/lib/collection/maps.dart b/sdk/lib/collection/maps.dart
index f6b6b26..bdc5a41 100644
--- a/sdk/lib/collection/maps.dart
+++ b/sdk/lib/collection/maps.dart
@@ -138,8 +138,8 @@
     return result;
   }
 
-  void addEntries(Iterable<MapEntry<K, V>> entries) {
-    for (var entry in entries) {
+  void addEntries(Iterable<MapEntry<K, V>> newEntries) {
+    for (var entry in newEntries) {
       this[entry.key] = entry.value;
     }
   }
diff --git a/sdk/lib/core/annotations.dart b/sdk/lib/core/annotations.dart
index ff32c8d..3071723 100644
--- a/sdk/lib/core/annotations.dart
+++ b/sdk/lib/core/annotations.dart
@@ -166,6 +166,16 @@
 }
 
 /**
+ * This annotation is deprecated and will be removed in Dart 2.
+ *
+ * Dart 2 has a more restrictive type system than Dart 1, and it requires
+ * method access to be either through a known interface or by using
+ * dynamic invocations. The original intent of `@proxy` (to implement a class
+ * that isn't known statically, as documented at the end of this text),
+ * is not supported by Dart 2.
+ * To continue to perform dynamic invocations on an object,
+ * it should be accessed through a reference of type `dynamic`.
+ *
  * The annotation `@proxy` marks a class as implementing members dynamically
  * through `noSuchMethod`.
  *
@@ -173,8 +183,7 @@
  * superclass and interfaces.
  *
  * If a class is annotated with `@proxy`, or it implements any class that is
- * annotated, then the class is considered to implement any member with regard
- * to static type analysis.
+ * annotated, then all member accesses are allowed on an object of that type.
  * As such, it is not a static type warning to access any member of the object
  * which is not implemented by the class, or to call a method with a different
  * number of parameters than it is declared with.
diff --git a/sdk/lib/core/list.dart b/sdk/lib/core/list.dart
index fe9ee96..77e40e0 100644
--- a/sdk/lib/core/list.dart
+++ b/sdk/lib/core/list.dart
@@ -172,6 +172,68 @@
   static List<T> castFrom<S, T>(List<S> source) => new CastList<S, T>(source);
 
   /**
+   * Copy a range of one list into another list.
+   *
+   * This is a utility function that can be used to implement methods like
+   * [setRange].
+   *
+   * The range from [start] to [end] must be a valid range of [source],
+   * and there must be room for `end - start` elements from position [at].
+   * If [start] is omitted, it defaults to zero.
+   * If [end] is omitted, it defaults to [source.length].
+   *
+   * If [source] and [target] is the same list, overlapping source and target
+   * ranges are respected so that the target range ends up containing the
+   * initial content of the source range.
+   * Otherwise the order of element copying is not guaranteed.
+   */
+  static void copyRange<T>(List<T> target, int at, List<T> source,
+      [int start, int end]) {
+    start ??= 0;
+    end = RangeError.checkValidRange(start, end, source.length);
+    int length = end - start;
+    if (target.length < at + length) {
+      throw new ArgumentError.value(target, "target",
+          "Not big enough to hold $length elements at position $at");
+    }
+    if (!identical(source, target) || start >= at) {
+      for (int i = 0; i < length; i++) {
+        target[at + i] = source[start + i];
+      }
+    } else {
+      for (int i = length; --i >= 0;) {
+        target[at + i] = source[start + i];
+      }
+    }
+  }
+
+  /**
+   * Write the elements of an iterable into a list.
+   *
+   * This is a utility function that can be used to implement methods like
+   * [setAll].
+   *
+   * The elements of [source] are written into [target] from position [at].
+   * The [source] must not contain more elements after writing the last
+   * position of [target].
+   *
+   * If the source is a list, the [copyRange] function is likely to be more
+   * efficient.
+   */
+  static void writeIterable<T>(List<T> target, int at, Iterable<T> source) {
+    RangeError.checkValueInInterval(at, 0, target.length, "at");
+    int index = at;
+    int targetLength = target.length;
+    for (var element in source) {
+      if (index == targetLength) {
+        throw new IndexError(targetLength, target);
+      }
+      target[index] = element;
+      index++;
+    }
+  }
+
+  /**
    * Returns a view of this list as a list of [R] instances, if necessary.
    *
    * If this list is already a `List<R>`, it is returned unchanged.
diff --git a/sdk/lib/core/map.dart b/sdk/lib/core/map.dart
index 0cae297..9e9741a 100644
--- a/sdk/lib/core/map.dart
+++ b/sdk/lib/core/map.dart
@@ -248,7 +248,7 @@
   /**
    * Adds all key/value pairs of [newEntries] to this map.
    *
-   * If a key of [other] is already in this map,
+   * If a key of [newEntries] is already in this map,
    * the corresponding value is overwritten.
    *
    * The operation is equivalent to doing `this[entry.key] = entry.value`
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index aa24f6d..b3d29f9 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -25422,6 +25422,65 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+@DocsEditable()
+@DomName('MutationEvent')
+// http://www.w3.org/TR/DOM-Level-3-Events/#events-mutationevents
+@deprecated
+@Native("MutationEvent")
+class MutationEvent extends Event {
+  // To suppress missing implicit constructor warnings.
+  factory MutationEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('MutationEvent.ADDITION')
+  @DocsEditable()
+  static const int ADDITION = 2;
+
+  @DomName('MutationEvent.MODIFICATION')
+  @DocsEditable()
+  static const int MODIFICATION = 1;
+
+  @DomName('MutationEvent.REMOVAL')
+  @DocsEditable()
+  static const int REMOVAL = 3;
+
+  @DomName('MutationEvent.attrChange')
+  @DocsEditable()
+  final int attrChange;
+
+  @DomName('MutationEvent.attrName')
+  @DocsEditable()
+  final String attrName;
+
+  @DomName('MutationEvent.newValue')
+  @DocsEditable()
+  final String newValue;
+
+  @DomName('MutationEvent.prevValue')
+  @DocsEditable()
+  final String prevValue;
+
+  @DomName('MutationEvent.relatedNode')
+  @DocsEditable()
+  final Node relatedNode;
+
+  @DomName('MutationEvent.initMutationEvent')
+  @DocsEditable()
+  void initMutationEvent(
+      String type,
+      bool bubbles,
+      bool cancelable,
+      Node relatedNode,
+      String prevValue,
+      String newValue,
+      String attrName,
+      int attrChange) native;
+}
+// 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.
+
 @DomName('MutationObserver')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
diff --git a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
index 466366f..715037b 100644
--- a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
+++ b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
@@ -534,8 +534,8 @@
   @DomName('IDBFactory.open')
   Future<Database> open(String name,
       {int version,
-      void onUpgradeNeeded(VersionChangeEvent),
-      void onBlocked(Event)}) {
+      void onUpgradeNeeded(VersionChangeEvent event),
+      void onBlocked(Event event)}) {
     if ((version == null) != (onUpgradeNeeded == null)) {
       return new Future.error(new ArgumentError(
           'version and onUpgradeNeeded must be specified together'));
@@ -1447,11 +1447,10 @@
   @DocsEditable()
   Stream<Event> get onError => errorEvent.forTarget(this);
 }
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
-@DocsEditable()
 @DomName('IDBVersionChangeEvent')
 @Unstable()
 @Native("IDBVersionChangeEvent")
@@ -1499,4 +1498,9 @@
   @Creates('int|String|Null')
   @Returns('int|String|Null')
   final int oldVersion;
+
+  @JSName('target')
+  @DomName('IDBVersionChangeEvent.target')
+  @DocsEditable()
+  final OpenDBRequest target;
 }
diff --git a/sdk/lib/libraries.json b/sdk/lib/libraries.json
index e1a1a6e..c2b21b0 100644
--- a/sdk/lib/libraries.json
+++ b/sdk/lib/libraries.json
@@ -152,7 +152,7 @@
         "uri": "async/async.dart"
       },
       "mirrors": {
-        "patches": "_internal/js_runtime/lib/mirrors_patch.dart",
+        "patches": "_internal/js_runtime/lib/mirrors_patch_cfe.dart",
         "uri": "mirrors/mirrors.dart"
       },
       "_interceptors": {
@@ -259,4 +259,4 @@
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/sdk/lib/mirrors/mirrors.dart b/sdk/lib/mirrors/mirrors.dart
index 5f6aca9..6b455c6 100644
--- a/sdk/lib/mirrors/mirrors.dart
+++ b/sdk/lib/mirrors/mirrors.dart
@@ -173,7 +173,7 @@
  *
  * Optionally takes a list of [typeArguments] for generic classes. If the list
  * is provided, then the [key] must be a generic class type, and the number of
- * the provided type arguments must be equal to the number of type variables 
+ * the provided type arguments must be equal to the number of type variables
  * declared by the class.
  *
  * Note that since one cannot obtain a [Type] object from another isolate, this
@@ -452,7 +452,7 @@
   InstanceMirror setField(Symbol fieldName, Object value);
 
   /**
-   * Performs [invocation] on [reflectee].
+   * Performs [invocation] on the reflectee of this [ObjectMirror].
    *
    * Equivalent to
    *
@@ -460,7 +460,7 @@
    *       return this.getField(invocation.memberName).reflectee;
    *     } else if (invocation.isSetter) {
    *       return this.setField(invocation.memberName,
-   *                            invocation.positionArguments[0]).reflectee;
+   *                            invocation.positionalArguments[0]).reflectee;
    *     } else {
    *       return this.invoke(invocation.memberName,
    *                          invocation.positionalArguments,
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index dffed23..a526bd4 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -5994,7 +5994,6 @@
 LayoutTests/fast/dom/Range/mutation_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/Range/range-comparePoint_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/Range/range-constructor_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Range/range-created-during-remove-children_t01: RuntimeError
 LayoutTests/fast/dom/Range/range-detached-exceptions_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/Range/range-exceptions_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/Range/range-expand_t01: RuntimeError # Please triage this failure
@@ -6002,7 +6001,6 @@
 LayoutTests/fast/dom/Range/range-insertNode-splittext_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/Range/range-isPointInRange_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/Range/range-on-detached-node_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Range/remove-twice-crash_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/Range/surroundContents-for-detached-node_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/SelectorAPI/dumpNodeList-2_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/SelectorAPI/dumpNodeList_t01: RuntimeError # Please triage this failure
@@ -6161,7 +6159,6 @@
 LayoutTests/fast/events/mutation-during-replace-child-2_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/events/mutation-during-replace-child_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/events/overflowchanged-event-raf-timing_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/events/scoped/editing-commands_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/events/scroll-event-does-not-bubble_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/events/tabindex-removal-from-focused-element_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/exclusions/parsing/parsing-wrap-flow_t01: RuntimeError # Please triage this failure
@@ -6271,8 +6268,6 @@
 LayoutTests/fast/forms/plaintext-mode-1_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/forms/search-popup-crasher_t01: Pass, RuntimeError # Fails on 7.1. Please triage this failure
 LayoutTests/fast/forms/select-max-length_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/forms/select-set-length-with-mutation-remove_t01: RuntimeError
-LayoutTests/fast/forms/select-set-length-with-mutation-reparent_t01: RuntimeError
 LayoutTests/fast/forms/selection-wrongtype_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/forms/setrangetext_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/forms/textarea-maxlength_t01: RuntimeError # Please triage this failure
@@ -6991,9 +6986,6 @@
 LibTest/core/Uri/Uri_A06_t03: Slow, Pass # Please triage this failure
 LibTest/math/Point/operator_mult_A02_t01: RuntimeError # Issue 1533
 
-[ $compiler == dart2js && $checked && $fast_startup ]
-Language/Statements/Break/async_loops_t02: RuntimeError
-
 [ $compiler == dart2js && !$checked && $enable_asserts ]
 Language/Statements/Assert/execution_t01: SkipByDesign # Unspec'd feature.
 Language/Statements/Assert/execution_t02: SkipByDesign # Unspec'd feature.
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index d3b5419..e4570b3 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -73,13 +73,10 @@
 Language/Classes/Constructors/Generative_Constructors/superclass_constructor_t03: MissingCompileTimeError
 Language/Classes/Constructors/Generative_Constructors/superclass_constructor_t05: MissingCompileTimeError
 Language/Classes/Constructors/Generative_Constructors/superclass_constructor_t06: MissingCompileTimeError
-Language/Classes/Constructors/Generative_Constructors/syntax_t04: MissingCompileTimeError
-Language/Classes/Constructors/Generative_Constructors/syntax_t05: MissingCompileTimeError
 Language/Classes/Instance_Variables/constant_t01: MissingCompileTimeError
 Language/Classes/Static_Methods/declaration_t01: MissingCompileTimeError
 Language/Classes/Superclasses/wrong_superclass_t08: MissingCompileTimeError
 Language/Classes/Superinterfaces/wrong_type_t05: MissingCompileTimeError
-Language/Classes/declarations_t33: MissingCompileTimeError
 Language/Classes/same_name_type_variable_t04: MissingCompileTimeError
 Language/Classes/same_name_type_variable_t07: MissingCompileTimeError
 Language/Expressions/Constants/bitwise_operators_t02: MissingCompileTimeError
@@ -238,6 +235,9 @@
 [ $compiler == dartkp && $mode == debug ]
 Language/Functions/External_Functions/not_connected_to_a_body_t01: Crash
 
+[ $compiler == dartkp && $minified ]
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/no_such_method_t01: RuntimeError # Compares new Symbol with noSuchMethod actual name.
+
 [ $compiler == dartkp && $strong ]
 *: SkipByDesign
 
@@ -272,12 +272,10 @@
 Language/Expressions/Constants/depending_on_itself_t03: Crash
 Language/Expressions/Constants/math_operators_t04: Crash
 Language/Expressions/Constants/math_operators_t05: Crash
-Language/Expressions/Instance_Creation/New/evaluation_t19: CompileTimeError # Issue 31938
-Language/Expressions/Instance_Creation/New/evaluation_t20: CompileTimeError # Issue 31938
+Language/Expressions/Instance_Creation/New/evaluation_t19: RuntimeError # Issue 31938
+Language/Expressions/Instance_Creation/New/evaluation_t20: RuntimeError # Issue 31938
 Language/Functions/External_Functions/not_connected_to_a_body_t01: RuntimeError # Dartk Issue 28565
-Language/Libraries_and_Scripts/Imports/deferred_import_t01: CompileTimeError # Deferred loading kernel issue 28335.
-Language/Libraries_and_Scripts/Imports/deferred_import_t02: CompileTimeError # Deferred loading kernel issue 28335.
-Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t03: CompileTimeError
+Language/Libraries_and_Scripts/Imports/deferred_import_t01: RuntimeError # Deferred loading kernel issue 28335.
 Language/Libraries_and_Scripts/Imports/same_name_t10: RuntimeError
 Language/Libraries_and_Scripts/Imports/static_type_t01: Skip # No support for deferred libraries.
 Language/Metadata/before_export_t01: RuntimeError # Issue 28434: Kernel IR misses these annotations.
@@ -294,7 +292,6 @@
 Language/Metadata/before_param_t09: RuntimeError # Issue 28434: Kernel IR misses these annotations.
 Language/Metadata/before_typedef_t01: RuntimeError # Issue 28434: Kernel IR misses these annotations.
 Language/Mixins/Mixin_Application/syntax_t16: CompileTimeError # Issue 25765
-Language/Types/Dynamic_Type_System/deferred_type_error_t01: CompileTimeError
 Language/Types/Type_Void/syntax_t01: Pass # Issue 30470
 LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: Skip # No support for deferred libraries.
 LibTest/isolate/Isolate/spawnUri_A01_t06: Skip
diff --git a/tests/co19_2/co19_2-kernel.status b/tests/co19_2/co19_2-kernel.status
index 4632eb0..5eb6348 100644
--- a/tests/co19_2/co19_2-kernel.status
+++ b/tests/co19_2/co19_2-kernel.status
@@ -45,8 +45,6 @@
 Language/Classes/Constructors/Generative_Constructors/redirection_t07: MissingCompileTimeError
 Language/Classes/Constructors/Generative_Constructors/redirection_t08: MissingCompileTimeError
 Language/Classes/Constructors/Generative_Constructors/static_type_t01: MissingCompileTimeError
-Language/Classes/Constructors/Generative_Constructors/syntax_t04: MissingCompileTimeError
-Language/Classes/Constructors/Generative_Constructors/syntax_t05: MissingCompileTimeError
 Language/Classes/Getters/instance_getter_t01: MissingCompileTimeError
 Language/Classes/Getters/instance_getter_t02: MissingCompileTimeError
 Language/Classes/Getters/instance_getter_t03: MissingCompileTimeError
@@ -91,7 +89,6 @@
 Language/Classes/Superinterfaces/wrong_type_t05: MissingCompileTimeError
 Language/Classes/declarations_t06: MissingCompileTimeError
 Language/Classes/declarations_t08: MissingCompileTimeError
-Language/Classes/declarations_t33: MissingCompileTimeError
 Language/Classes/definition_t23: CompileTimeError
 Language/Classes/method_definition_t03: MissingCompileTimeError
 Language/Classes/method_definition_t04: MissingCompileTimeError
diff --git a/tests/compiler/dart2js/constant_expression_evaluate_test.dart b/tests/compiler/dart2js/constant_expression_evaluate_test.dart
index 08a7251..c281b3f 100644
--- a/tests/compiler/dart2js/constant_expression_evaluate_test.dart
+++ b/tests/compiler/dart2js/constant_expression_evaluate_test.dart
@@ -480,9 +480,19 @@
     class B {
       const B() : assert(true, "Message");
     }
+    class C {
+      final a;
+      const C(this.a);
+    }
+    class D extends C {
+      final b;
+      const D(c) : super(c + 1), b = c + 2;
+    }
   ''', const [
     const ConstantData(r'const A()', 'ConstructedConstant(A())'),
     const ConstantData(r'const B()', 'ConstructedConstant(B())'),
+    const ConstantData(r'const D(0)',
+        'ConstructedConstant(D(a=IntConstant(1),b=IntConstant(2)))'),
   ]),
 ];
 
diff --git a/tests/compiler/dart2js/generic_methods/function_type_variable_test.dart b/tests/compiler/dart2js/generic_methods/function_type_variable_test.dart
index 62d2eb1..6fa2be5 100644
--- a/tests/compiler/dart2js/generic_methods/function_type_variable_test.dart
+++ b/tests/compiler/dart2js/generic_methods/function_type_variable_test.dart
@@ -31,6 +31,10 @@
       factory C3.fact() => C3.gen();
       C3.gen();
     }
+    void F9<U extends V, V>(U u, V v) {}
+    F10() {
+      void local<A extends B, B>(A a, B b) {}
+    }
   """), compileMode: CompileMode.kernel, options: [Flags.strongMode]);
 
     testToString(FunctionType type, String expectedToString) {
@@ -83,6 +87,21 @@
     FunctionType F6 = env.getFieldType('F6');
     FunctionType F7 = env.getFieldType('F7');
     FunctionType F8 = env.getFieldType('F8');
+    FunctionType F9 = env.getMemberType('F9');
+    FunctionType F10 = env.getClosureType('F10');
+
+    List<FunctionType> all = <FunctionType>[
+      F1,
+      F2,
+      F3,
+      F4,
+      F5,
+      F6,
+      F7,
+      F8,
+      F9,
+      F10,
+    ];
 
     testToString(F1, 'void Function<#A>(#A)');
     testToString(F2, 'void Function<#A>(#A)');
@@ -92,6 +111,8 @@
     testToString(F6, 'void Function<#A extends int>(#A)');
     testToString(F7, 'void Function<#A extends num>(#A,[int])');
     testToString(F8, '#A Function<#A extends num>(#A)');
+    testToString(F9, 'void Function<#A extends #B,#B>(#A,#B)');
+    testToString(F10, 'void Function<#A extends #B,#B>(#A,#B)');
 
     testBounds(F1, [Object_]);
     testBounds(F2, [Object_]);
@@ -101,6 +122,8 @@
     testBounds(F6, [int_]);
     testBounds(F7, [num_]);
     testBounds(F8, [num_]);
+    testBounds(F9, [F9.typeVariables.last, Object_]);
+    testBounds(F10, [F10.typeVariables.last, Object_]);
 
     testInstantiate(F1, [C1], 'void Function(C1)');
     testInstantiate(F2, [C2], 'void Function(C2)');
@@ -110,78 +133,31 @@
     testInstantiate(F6, [int_], 'void Function(int)');
     testInstantiate(F7, [int_], 'void Function(int,[int])');
     testInstantiate(F8, [int_], 'int Function(int)');
+    testInstantiate(F9, [int_, num_], 'void Function(int,num)');
+    testInstantiate(F10, [int_, num_], 'void Function(int,num)');
 
-    testRelations(F1, F1, areEqual: true);
-    testRelations(F1, F2, areEqual: true);
-    testRelations(F1, F3);
-    testRelations(F1, F4);
-    testRelations(F1, F5);
-    testRelations(F1, F6);
-    testRelations(F1, F7);
-    testRelations(F1, F8);
+    Map<FunctionType, List<FunctionType>> expectedEquals =
+        <FunctionType, List<FunctionType>>{
+      F1: [F2],
+      F2: [F1],
+      F9: [F10],
+      F10: [F9],
+    };
 
-    testRelations(F2, F1, areEqual: true);
-    testRelations(F2, F2, areEqual: true);
-    testRelations(F2, F3);
-    testRelations(F2, F4);
-    testRelations(F2, F5);
-    testRelations(F2, F6);
-    testRelations(F2, F7);
-    testRelations(F2, F8);
+    Map<FunctionType, List<FunctionType>> expectedSubtype =
+        <FunctionType, List<FunctionType>>{
+      F7: [F5],
+      F8: [F5],
+    };
 
-    testRelations(F3, F1);
-    testRelations(F3, F2);
-    testRelations(F3, F3, areEqual: true);
-    testRelations(F3, F4);
-    testRelations(F3, F5);
-    testRelations(F3, F6);
-    testRelations(F3, F7);
-    testRelations(F3, F8);
-
-    testRelations(F4, F1);
-    testRelations(F4, F2);
-    testRelations(F4, F3);
-    testRelations(F4, F4, areEqual: true);
-    testRelations(F4, F5);
-    testRelations(F4, F6);
-    testRelations(F4, F7);
-    testRelations(F4, F8);
-
-    testRelations(F5, F1);
-    testRelations(F5, F2);
-    testRelations(F5, F3);
-    testRelations(F5, F4);
-    testRelations(F5, F5, areEqual: true);
-    testRelations(F5, F6);
-    testRelations(F5, F7);
-    testRelations(F5, F8);
-
-    testRelations(F6, F1);
-    testRelations(F6, F2);
-    testRelations(F6, F3);
-    testRelations(F6, F4);
-    testRelations(F6, F5);
-    testRelations(F6, F6, areEqual: true);
-    testRelations(F6, F7);
-    testRelations(F6, F8);
-
-    testRelations(F7, F1);
-    testRelations(F7, F2);
-    testRelations(F7, F3);
-    testRelations(F7, F4);
-    testRelations(F7, F5, isSubtype: true);
-    testRelations(F7, F6);
-    testRelations(F7, F7, areEqual: true);
-    testRelations(F7, F8);
-
-    testRelations(F8, F1);
-    testRelations(F8, F2);
-    testRelations(F8, F3);
-    testRelations(F8, F4);
-    testRelations(F8, F5, isSubtype: true);
-    testRelations(F8, F6);
-    testRelations(F8, F7);
-    testRelations(F8, F8, areEqual: true);
+    for (FunctionType f1 in all) {
+      for (FunctionType f2 in all) {
+        testRelations(f1, f2,
+            areEqual: identical(f1, f2) ||
+                (expectedEquals[f1]?.contains(f2) ?? false),
+            isSubtype: expectedSubtype[f1]?.contains(f2) ?? false);
+      }
+    }
 
     testRelations(F1.typeVariables.first, F1.typeVariables.first,
         areEqual: true);
diff --git a/tests/compiler/dart2js/generic_methods/generic_method_test.dart b/tests/compiler/dart2js/generic_methods/generic_method_test.dart
index 4065293..668e99c 100644
--- a/tests/compiler/dart2js/generic_methods/generic_method_test.dart
+++ b/tests/compiler/dart2js/generic_methods/generic_method_test.dart
@@ -92,6 +92,12 @@
   }
 }
 
+// Nested generic local function.
+outside<T>() {
+  nested<T>(T t) => '';
+  return nested;
+}
+
 main(args) {
   method1<int>(0);
   method2<String, double>(0.5, 'foo');
@@ -109,6 +115,7 @@
     print('noSuchMethod: Class2.method6<int>');
     print('');
   }
+  outside();
 }
 ''';
 
@@ -162,7 +169,7 @@
     }, options: [
       Flags.useKernel,
       Flags.strongMode,
-      Flags.disableRtiOptimization
+      Flags.disableRtiOptimization,
     ], expectedOutput: OUTPUT, printJs: args.contains('-v'));
     ClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
     ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
diff --git a/tests/compiler/dart2js/old_frontend/type_variable_occurrence_test.dart b/tests/compiler/dart2js/old_frontend/type_variable_occurrence_test.dart
index a85c307..ac88d12 100644
--- a/tests/compiler/dart2js/old_frontend/type_variable_occurrence_test.dart
+++ b/tests/compiler/dart2js/old_frontend/type_variable_occurrence_test.dart
@@ -58,7 +58,7 @@
         ClassElement A = env.getElement('A');
 
         expect(bool expectResult, String memberName) {
-          ResolutionDartType memberType = env.getMemberType(A, memberName);
+          ResolutionDartType memberType = env.getMemberType(memberName, A);
           ResolutionTypeVariableType typeVariable =
               memberType.typeVariableOccurrence;
           if (expectResult) {
diff --git a/tests/compiler/dart2js/rti/emission/arguments.dart b/tests/compiler/dart2js/rti/emission/arguments.dart
index 328e684..30b4f2e 100644
--- a/tests/compiler/dart2js/rti/emission/arguments.dart
+++ b/tests/compiler/dart2js/rti/emission/arguments.dart
@@ -4,13 +4,13 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: A:checks=[]*/
+/*class: A:checkedTypeArgument,checks=[],typeArgument*/
 class A {}
 
-/*class: B:checks=[]*/
+/*class: B:checks=[],typeArgument*/
 class B {}
 
-/*class: C:checks=[]*/
+/*class: C:checkedInstance,checks=[],instance*/
 class C<T> {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/call.dart b/tests/compiler/dart2js/rti/emission/call.dart
index d603eab..41faae4 100644
--- a/tests/compiler/dart2js/rti/emission/call.dart
+++ b/tests/compiler/dart2js/rti/emission/call.dart
@@ -5,7 +5,7 @@
 import 'package:expect/expect.dart';
 import 'package:meta/dart2js.dart';
 
-/*class: A:checks=[$isFunction]*/
+/*class: A:checks=[$isFunction],instance*/
 class A {
   call() {}
 }
diff --git a/tests/compiler/dart2js/rti/emission/closure_function.dart b/tests/compiler/dart2js/rti/emission/closure_function.dart
index 82d8712..9604fba 100644
--- a/tests/compiler/dart2js/rti/emission/closure_function.dart
+++ b/tests/compiler/dart2js/rti/emission/closure_function.dart
@@ -8,6 +8,6 @@
 test(o) => o is Function;
 
 main() {
-  test(/*checks=[]*/ () {});
+  test(/*checks=[],instance*/ () {});
   test(null);
 }
diff --git a/tests/compiler/dart2js/rti/emission/closure_function_type.dart b/tests/compiler/dart2js/rti/emission/closure_function_type.dart
index 0c7e05b..f8560ed 100644
--- a/tests/compiler/dart2js/rti/emission/closure_function_type.dart
+++ b/tests/compiler/dart2js/rti/emission/closure_function_type.dart
@@ -8,6 +8,6 @@
 test(o) => o is Function();
 
 main() {
-  test(/*checks=[]*/ () {});
-  test(/*checks=[]*/ (a) {});
+  test(/*checks=[],instance*/ () {});
+  test(/*checks=[],instance*/ (a) {});
 }
diff --git a/tests/compiler/dart2js/rti/emission/generic_instanceof4.dart b/tests/compiler/dart2js/rti/emission/generic_instanceof4.dart
index 45ab17f..46cc720 100644
--- a/tests/compiler/dart2js/rti/emission/generic_instanceof4.dart
+++ b/tests/compiler/dart2js/rti/emission/generic_instanceof4.dart
@@ -4,7 +4,7 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: A:checks=[]*/
+/*class: A:checks=[],instance*/
 class A<T> {
   @noInline
   foo(x) {
@@ -12,10 +12,10 @@
   }
 }
 
-/*class: BB:checks=[]*/
+/*class: BB:checkedInstance,checks=[],typeArgument*/
 class BB {}
 
-/*class: B:checks=[$isBB]*/
+/*class: B:checks=[$isBB],instance*/
 class B<T> implements BB {
   @noInline
   foo() {
diff --git a/tests/compiler/dart2js/rti/emission/inherited_is.dart b/tests/compiler/dart2js/rti/emission/inherited_is.dart
index 618b16f..6e071e9 100644
--- a/tests/compiler/dart2js/rti/emission/inherited_is.dart
+++ b/tests/compiler/dart2js/rti/emission/inherited_is.dart
@@ -5,6 +5,7 @@
 import 'package:expect/expect.dart';
 import 'package:meta/dart2js.dart';
 
+/*class: A:checkedInstance*/
 class A {}
 
 /*class: B:checks=[]*/
@@ -13,7 +14,7 @@
 /*class: C:checks=[$isA]*/
 class C = Object with B;
 
-/*class: D:checks=[]*/
+/*class: D:checks=[],instance*/
 class D extends C {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/inherited_is2.dart b/tests/compiler/dart2js/rti/emission/inherited_is2.dart
index a703a2b..13739e1 100644
--- a/tests/compiler/dart2js/rti/emission/inherited_is2.dart
+++ b/tests/compiler/dart2js/rti/emission/inherited_is2.dart
@@ -5,6 +5,7 @@
 import 'package:expect/expect.dart';
 import 'package:meta/dart2js.dart';
 
+/*class: A:checkedInstance*/
 class A {}
 
 /*class: B:checks=[$isA]*/
@@ -13,7 +14,7 @@
 /*class: C:checks=[]*/
 class C extends B {}
 
-/*class: D:checks=[]*/
+/*class: D:checks=[],instance*/
 class D extends C {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/list.dart b/tests/compiler/dart2js/rti/emission/list.dart
index b5d777c..bfcd830 100644
--- a/tests/compiler/dart2js/rti/emission/list.dart
+++ b/tests/compiler/dart2js/rti/emission/list.dart
@@ -4,13 +4,13 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: global#JSArray:checks=[$isIterable]*/
-/*class: global#Iterable:*/
+/*class: global#JSArray:checkedInstance,checks=[$isIterable],instance*/
+/*class: global#Iterable:checkedInstance*/
 
-/*class: A:checks=[]*/
+/*class: A:checkedTypeArgument,checks=[],typeArgument*/
 class A {}
 
-/*class: B:checks=[]*/
+/*class: B:checks=[],typeArgument*/
 class B {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/map_literal.dart b/tests/compiler/dart2js/rti/emission/map_literal.dart
index 1b86df4..d666180 100644
--- a/tests/compiler/dart2js/rti/emission/map_literal.dart
+++ b/tests/compiler/dart2js/rti/emission/map_literal.dart
@@ -2,11 +2,11 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*class: global#Map:*/
+/*class: global#Map:instance*/
 /*class: global#LinkedHashMap:*/
-/*class: global#JsLinkedHashMap:checks=[]*/
-/*class: global#double:checks=[]*/
-/*class: global#JSDouble:checks=[]*/
+/*class: global#JsLinkedHashMap:checks=[],instance*/
+/*class: global#double:checks=[],instance,typeArgument*/
+/*class: global#JSDouble:checks=[],instance*/
 
 main() {
   <int, double>{}[0] = 0.5;
diff --git a/tests/compiler/dart2js/rti/emission/map_literal_checked.dart b/tests/compiler/dart2js/rti/emission/map_literal_checked.dart
index c074638..2f51833 100644
--- a/tests/compiler/dart2js/rti/emission/map_literal_checked.dart
+++ b/tests/compiler/dart2js/rti/emission/map_literal_checked.dart
@@ -2,12 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*class: global#Map:checks=[]*/
-/*class: global#LinkedHashMap:*/
-/*class: global#JsLinkedHashMap:checks=[$isLinkedHashMap]*/
-/*class: global#double:checks=[]*/
-/*class: global#JSNumber:checks=[$isdouble,$isnum]*/
-/*class: global#JSDouble:checks=[]*/
+/*class: global#Map:checkedInstance,checks=[],instance*/
+/*class: global#LinkedHashMap:checkedInstance*/
+/*class: global#JsLinkedHashMap:checkedInstance,checks=[$isLinkedHashMap],instance*/
+/*class: global#double:checkedInstance,checks=[],instance,typeArgument*/
+/*class: global#JSNumber:checks=[$isdouble,$isnum],instance*/
+/*class: global#JSDouble:checks=[],instance*/
 
 main() {
   <int, double>{}[0] = 0.5;
diff --git a/tests/compiler/dart2js/rti/emission/mixin_mixin2.dart b/tests/compiler/dart2js/rti/emission/mixin_mixin2.dart
index 747c430..5c1ed6a 100644
--- a/tests/compiler/dart2js/rti/emission/mixin_mixin2.dart
+++ b/tests/compiler/dart2js/rti/emission/mixin_mixin2.dart
@@ -23,16 +23,16 @@
 /*class: D:checks=[$asM]*/
 class D<V> = Object with C<Set<V>>;
 
-/*class: E:checks=[$asM]*/
+/*class: E:checks=[$asM],instance*/
 class E extends A<num> {}
 
-/*class: F:checks=[$asM]*/
+/*class: F:checks=[$asM],instance*/
 class F extends B<String> {}
 
-/*class: G:checks=[]*/
+/*class: G:checks=[],instance*/
 class G<T> extends C<T> {}
 
-/*class: H:checks=[$asM]*/
+/*class: H:checks=[$asM],instance*/
 class H<T> extends D<Map<String, T>> {}
 
 main() {
diff --git a/tests/compiler/dart2js/rti/emission/mixin_mixin4.dart b/tests/compiler/dart2js/rti/emission/mixin_mixin4.dart
index 7d42422..8a1e159 100644
--- a/tests/compiler/dart2js/rti/emission/mixin_mixin4.dart
+++ b/tests/compiler/dart2js/rti/emission/mixin_mixin4.dart
@@ -4,23 +4,26 @@
 
 import "package:expect/expect.dart";
 
+/*class: I:checkedInstance*/
 class I<T> {}
 
+/*class: J:checkedInstance*/
 class J<T> {}
 
-/*class: S:checks=[]*/
+/*class: S:checkedInstance,checks=[]*/
 class S<T> {}
 
-/*class: M:checks=[]*/
+/*class: M:checkedInstance,checks=[]*/
 class M<T> {
   t() {
     return T;
   }
 }
 
+/*class: A:checkedInstance*/
 class A<U, V> = Object with M<Map<U, V>> implements I<V>;
 
-/*class: C:checks=[$asA,$asI,$asJ,$asM,$asS,$isA,$isI,$isJ]*/
+/*class: C:checks=[$asA,$asI,$asJ,$asM,$asS,$isA,$isI,$isJ],instance*/
 class C<T, K> = S<T> with A<T, List<K>> implements J<K>;
 
 @NoInline()
diff --git a/tests/compiler/dart2js/rti/emission/mixin_type_arguments.dart b/tests/compiler/dart2js/rti/emission/mixin_type_arguments.dart
index 6067cef..cc6f668 100644
--- a/tests/compiler/dart2js/rti/emission/mixin_type_arguments.dart
+++ b/tests/compiler/dart2js/rti/emission/mixin_type_arguments.dart
@@ -19,7 +19,7 @@
 /*class: E:checks=[]*/
 class E {}
 
-/*class: F:checks=[]*/
+/*class: F:checks=[],typeArgument*/
 class F {}
 
 /*class: M1:checks=[]*/
@@ -47,35 +47,35 @@
   m5() => "M5<$Tm5>";
 }
 
-/*class: C1:checks=[$asM1,$asM2,$asM3,$asM4,$asM5]*/
+/*class: C1:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
 class C1 = Object with M1, M2<A>, M3, M4<B>, M5<C>;
 
-/*class: C2:checks=[$asM1,$asM2,$asM3,$asM4,$asM5]*/
+/*class: C2:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
 class C2 = Object with M1<A>, M2<B>, M3<C>, M4<D>, M5<E>;
 
-/*class: C3:checks=[$asM1,$asM3,$asM4,$asM5]*/
+/*class: C3:checks=[$asM1,$asM3,$asM4,$asM5],instance*/
 class C3<T> = Object with M1<A>, M2<T>, M3, M4, M5<B>;
 
-/*class: C4:checks=[$asM1,$asM2,$asM3,$asM4,$asM5]*/
+/*class: C4:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
 class C4 extends Object with M1, M2<A>, M3, M4<B>, M5<C> {}
 
-/*class: C5:checks=[$asM1,$asM2,$asM3,$asM4,$asM5]*/
+/*class: C5:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
 class C5 extends Object with M1<A>, M2<B>, M3<C>, M4<D>, M5<E> {}
 
-/*class: C6:checks=[$asM1,$asM3,$asM4,$asM5]*/
+/*class: C6:checks=[$asM1,$asM3,$asM4,$asM5],instance*/
 class C6<T> extends Object with M1<A>, M2<T>, M3, M4, M5<B> {}
 
-/*class: C7:checks=[$asM1,$asM2,$asM3,$asM4,$asM5]*/
+/*class: C7:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
 class C7 = Object with M1<A>, M2<A>, M3<A>, M4<A>, M5<A>;
 
-/*class: C8:checks=[$asM1,$asM2,$asM3,$asM4,$asM5]*/
+/*class: C8:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
 class C8 extends Object with M1<A>, M2<A>, M3<A>, M4<A>, M5<A> {}
 
-/*class: C9:checks=[$asM1,$asM2,$asM3,$asM4,$asM5]*/
+/*class: C9:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
 class C9 = Object
     with M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>;
 
-/*class: CA:checks=[$asM1,$asM2,$asM3,$asM4,$asM5]*/
+/*class: CA:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
 class CA extends Object
     with M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/native.dart b/tests/compiler/dart2js/rti/emission/native.dart
index c7bfb9f..edcf75a 100644
--- a/tests/compiler/dart2js/rti/emission/native.dart
+++ b/tests/compiler/dart2js/rti/emission/native.dart
@@ -8,10 +8,11 @@
 // ignore: import_internal_library
 import 'dart:_foreign_helper' show JS;
 
-/*class: Purple:checks=[$isPurple]*/
+/*class: Purple:checkedInstance,checks=[$isPurple],instance*/
 @Native('PPPP')
 class Purple {}
 
+/*class: Q:instance*/
 @Native('QQQQ')
 class Q {}
 
diff --git a/tests/compiler/dart2js/rti/emission/regress_18713.dart b/tests/compiler/dart2js/rti/emission/regress_18713.dart
index 8d0ff99..b923d1d 100644
--- a/tests/compiler/dart2js/rti/emission/regress_18713.dart
+++ b/tests/compiler/dart2js/rti/emission/regress_18713.dart
@@ -16,7 +16,7 @@
   Type get getSType => Y;
 }
 
-/*class: TS:checks=[$asS0,$asT]*/
+/*class: TS:checks=[$asS0,$asT],instance*/
 class TS<A, B> = T<A> with S<B>;
 
 @NoInline()
diff --git a/tests/compiler/dart2js/rti/emission/runtime_type.dart b/tests/compiler/dart2js/rti/emission/runtime_type.dart
index c9973eb..8e7fd19 100644
--- a/tests/compiler/dart2js/rti/emission/runtime_type.dart
+++ b/tests/compiler/dart2js/rti/emission/runtime_type.dart
@@ -2,10 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*class: A:checks=[]*/
+/*class: A:checks=[],instance*/
 class A<T> {}
 
-/*class: B:checks=[]*/
+/*class: B:checks=[],typeArgument*/
 class B<T> {}
 
 main() {
diff --git a/tests/compiler/dart2js/rti/emission/self.dart b/tests/compiler/dart2js/rti/emission/self.dart
index 76c29c4..a6aa4a6 100644
--- a/tests/compiler/dart2js/rti/emission/self.dart
+++ b/tests/compiler/dart2js/rti/emission/self.dart
@@ -4,7 +4,7 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: C:checks=[]*/
+/*class: C:checkedInstance,checks=[],instance*/
 class C {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/self_generic.dart b/tests/compiler/dart2js/rti/emission/self_generic.dart
index 793f276..ca5bc11 100644
--- a/tests/compiler/dart2js/rti/emission/self_generic.dart
+++ b/tests/compiler/dart2js/rti/emission/self_generic.dart
@@ -4,7 +4,7 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: C:checks=[]*/
+/*class: C:checkedInstance,checks=[],instance*/
 class C<T> {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/subtype_named_args.dart b/tests/compiler/dart2js/rti/emission/subtype_named_args.dart
index b2b1cc7..3291f16 100644
--- a/tests/compiler/dart2js/rti/emission/subtype_named_args.dart
+++ b/tests/compiler/dart2js/rti/emission/subtype_named_args.dart
@@ -6,25 +6,25 @@
 
 import 'package:expect/expect.dart';
 
-/*class: A:checks=[]*/
+/*class: A:checkedTypeArgument,checks=[],typeArgument*/
 class A {}
 
-/*class: A1:checks=[]*/
+/*class: A1:checkedTypeArgument,checks=[],typeArgument*/
 class A1 {}
 
-/*class: A2:checks=[]*/
+/*class: A2:checkedTypeArgument,checks=[],typeArgument*/
 class A2 {}
 
-/*class: B:checks=[$isA,$isA1,$isA2]*/
+/*class: B:checkedTypeArgument,checks=[$isA,$isA1,$isA2],typeArgument*/
 class B implements A, A1, A2 {}
 
-/*class: C:checks=[$isA,$isA1,$isA2,$isB]*/
+/*class: C:checkedTypeArgument,checks=[$isA,$isA1,$isA2,$isB],typeArgument*/
 class C implements B {}
 
-/*class: D:checks=[$isA,$isA1,$isA2,$isB,$isC]*/
+/*class: D:checkedTypeArgument,checks=[$isA,$isA1,$isA2,$isB,$isC],typeArgument*/
 class D implements C {}
 
-/*class: G:checks=[]*/
+/*class: G:checkedTypeArgument,checks=[],typeArgument*/
 class G<T, S, U, W> {}
 
 typedef classesFunc({A a, B b, C c, D d});
@@ -45,35 +45,46 @@
 typedef okWithDynamicFunc_2({int x, bool y, List<Map> z, classesFunc v});
 
 main() {
-  Expect.isTrue(/*checks=[]*/ ({D a, B b, C c, A d}) {} is classesFunc);
-  Expect.isTrue(/*checks=[]*/ ({A a, A b, A c, A d}) {} is classesFunc);
-  Expect.isTrue(/*checks=[]*/ ({D a, A1 b, A1 c, A1 d}) {} is classesFunc);
-  Expect.isTrue(/*checks=[]*/ ({D a, A2 b, A2 c, A2 d}) {} is classesFunc);
-  Expect.isTrue(/*checks=[]*/ ({D a, D b, D c, D d}) {} is classesFunc);
-  Expect.isTrue(/*checks=[]*/ ({var a, var b, var c, var d}) {} is classesFunc);
-  Expect.isTrue(/*checks=[]*/ ({Object a, Object b, Object c, Object d}) {}
-      is classesFunc);
+  Expect
+      .isTrue(/*checks=[],instance*/ ({D a, B b, C c, A d}) {} is classesFunc);
+  Expect
+      .isTrue(/*checks=[],instance*/ ({A a, A b, A c, A d}) {} is classesFunc);
+  Expect.isTrue(
+      /*checks=[],instance*/ ({D a, A1 b, A1 c, A1 d}) {} is classesFunc);
+  Expect.isTrue(
+      /*checks=[],instance*/ ({D a, A2 b, A2 c, A2 d}) {} is classesFunc);
+  Expect
+      .isTrue(/*checks=[],instance*/ ({D a, D b, D c, D d}) {} is classesFunc);
+  Expect.isTrue(
+      /*checks=[],instance*/ ({var a, var b, var c, var d}) {} is classesFunc);
+  Expect.isTrue(/*checks=[],instance*/ (
+      {Object a, Object b, Object c, Object d}) {} is classesFunc);
 
-  Expect.isTrue(/*checks=[]*/ (
+  Expect.isTrue(/*checks=[],instance*/ (
       {Map<num, num> m,
       List<List<A1>> l,
       G<A, A1, A1, A1> g}) {} is genericsFunc);
   Expect.isTrue(
-      /*checks=[]*/ ({Map<int, int> m, List<List<D>> l, G<D, D, D, D> g}) {}
-          is genericsFunc);
-  Expect.isTrue(/*checks=[]*/ ({var m, var l, var g}) {} is genericsFunc);
+      /*checks=[],instance*/ (
+          {Map<int, int> m,
+          List<List<D>> l,
+          G<D, D, D, D> g}) {} is genericsFunc);
   Expect.isTrue(
-      /*checks=[]*/ ({Object m, Object l, Object g}) {} is genericsFunc);
+      /*checks=[],instance*/ ({var m, var l, var g}) {} is genericsFunc);
+  Expect.isTrue(
+      /*checks=[],instance*/ ({Object m, Object l, Object g}) {}
+          is genericsFunc);
 
-  Expect.isTrue(/*checks=[]*/ ({A x, G y, mixFunc z, var v}) {} is dynamicFunc);
-  Expect.isTrue(/*checks=[]*/ ({int x, bool y, List<Map> z, classesFunc v}) {}
-      is dynamicFunc);
+  Expect.isTrue(
+      /*checks=[],instance*/ ({A x, G y, mixFunc z, var v}) {} is dynamicFunc);
+  Expect.isTrue(/*checks=[],instance*/ (
+      {int x, bool y, List<Map> z, classesFunc v}) {} is dynamicFunc);
 
-  Expect.isTrue(/*checks=[]*/ (
+  Expect.isTrue(/*checks=[],instance*/ (
       {okWithClassesFunc_1 f1,
       okWithGenericsFunc_1 f2,
       okWithDynamicFunc_1 f3}) {} is funcFunc);
-  Expect.isTrue(/*checks=[]*/ (
+  Expect.isTrue(/*checks=[],instance*/ (
       {okWithClassesFunc_2 f1,
       okWithGenericsFunc_2 f2,
       okWithDynamicFunc_2 f3}) {} is funcFunc);
diff --git a/tests/compiler/dart2js/rti/emission/superclass.dart b/tests/compiler/dart2js/rti/emission/superclass.dart
index 4270537..e0427de 100644
--- a/tests/compiler/dart2js/rti/emission/superclass.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass.dart
@@ -4,10 +4,10 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: B:checks=[]*/
+/*class: B:checkedInstance,checks=[],instance*/
 class B {}
 
-/*class: C:checks=[]*/
+/*class: C:checks=[],instance*/
 class C extends B {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/superclass_as.dart b/tests/compiler/dart2js/rti/emission/superclass_as.dart
index e780a0e..0bcd138 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_as.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_as.dart
@@ -5,7 +5,7 @@
 import 'package:expect/expect.dart';
 import 'package:meta/dart2js.dart';
 
-/*class: A:checks=[]*/
+/*class: A:checkedInstance,checks=[],instance*/
 class A<T> {}
 
 /*class: B:checks=[]*/
@@ -14,7 +14,7 @@
   method() => new A<S>();
 }
 
-/*class: C:checks=[$asB]*/
+/*class: C:checks=[$asB],instance*/
 class C<T> extends B<T, T> {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/superclass_complex.dart b/tests/compiler/dart2js/rti/emission/superclass_complex.dart
index d2f9bb5..1d4fe7f 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_complex.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_complex.dart
@@ -4,13 +4,13 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: A:checks=[]*/
+/*class: A:checkedTypeArgument,checks=[],typeArgument*/
 class A<T> {}
 
-/*class: B:checks=[]*/
+/*class: B:checkedInstance,checks=[]*/
 class B<T> {}
 
-/*class: C:checks=[$asB]*/
+/*class: C:checks=[$asB],instance*/
 class C<T> extends B<A<T>> {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/superclass_fixed.dart b/tests/compiler/dart2js/rti/emission/superclass_fixed.dart
index 5c86698..7beb498 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_fixed.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_fixed.dart
@@ -4,10 +4,10 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: B:checks=[]*/
+/*class: B:checkedInstance,checks=[]*/
 class B<T> {}
 
-/*class: C:checks=[$asB]*/
+/*class: C:checks=[$asB],instance*/
 class C extends B<String> {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/superclass_supertype.dart b/tests/compiler/dart2js/rti/emission/superclass_supertype.dart
index fa9bad0..5f38aa3 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_supertype.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_supertype.dart
@@ -7,10 +7,10 @@
 /*class: A:checks=[]*/
 class A {}
 
-/*class: B:*/
+/*class: B:checkedInstance*/
 class B {}
 
-/*class: C:checks=[$isB]*/
+/*class: C:checks=[$isB],instance*/
 class C extends A implements B {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/superclass_supertype_complex.dart b/tests/compiler/dart2js/rti/emission/superclass_supertype_complex.dart
index 29bcaa7..c87c3f3 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_supertype_complex.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_supertype_complex.dart
@@ -4,16 +4,16 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: A:checks=[]*/
+/*class: A:checkedTypeArgument,checks=[],typeArgument*/
 class A<T> {}
 
-/*class: B:*/
+/*class: B:checkedInstance*/
 class B<T> {}
 
 /*class: C:checks=[]*/
 class C<T> {}
 
-/*class: D:checks=[$asB,$isB]*/
+/*class: D:checks=[$asB,$isB],instance*/
 class D<T> extends C<T> implements B<A<T>> {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/superclass_supertype_fixed.dart b/tests/compiler/dart2js/rti/emission/superclass_supertype_fixed.dart
index 3c5a8d0..6db1e5e 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_supertype_fixed.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_supertype_fixed.dart
@@ -7,10 +7,10 @@
 /*class: A:checks=[]*/
 class A {}
 
-/*class: B:*/
+/*class: B:checkedInstance*/
 class B<T> {}
 
-/*class: C:checks=[$asB,$isB]*/
+/*class: C:checks=[$asB,$isB],instance*/
 class C extends A implements B<String> {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/superclass_supertype_trivial.dart b/tests/compiler/dart2js/rti/emission/superclass_supertype_trivial.dart
index 73f6b8b..d5c5878 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_supertype_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_supertype_trivial.dart
@@ -7,10 +7,10 @@
 /*class: A:checks=[]*/
 class A<T> {}
 
-/*class: B:*/
+/*class: B:checkedInstance*/
 class B<T> {}
 
-/*class: C:checks=[$isB]*/
+/*class: C:checks=[$isB],instance*/
 class C<T> extends A<T> implements B<T> {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/superclass_trivial.dart b/tests/compiler/dart2js/rti/emission/superclass_trivial.dart
index b9d8ac1..52b3c6f 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_trivial.dart
@@ -4,10 +4,10 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: B:checks=[]*/
+/*class: B:checkedInstance,checks=[]*/
 class B<T> {}
 
-/*class: C:checks=[]*/
+/*class: C:checks=[],instance*/
 class C<T> extends B<T> {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/superclasses_non_trivial.dart b/tests/compiler/dart2js/rti/emission/superclasses_non_trivial.dart
index c3ff5dd..bbaac15 100644
--- a/tests/compiler/dart2js/rti/emission/superclasses_non_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/superclasses_non_trivial.dart
@@ -4,13 +4,13 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: A:checks=[]*/
+/*class: A:checkedInstance,checks=[]*/
 class A<T> {}
 
-/*class: B:checks=[$asA]*/
+/*class: B:checks=[$asA],instance*/
 class B<S, T> extends A<T> {} // Non-trivial substitution of A.
 
-/*class: C:checks=[]*/
+/*class: C:checks=[],instance*/
 class C<S, T> extends B<S, T> {} // Non-trivial substitution of A
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/superclasses_trivial.dart b/tests/compiler/dart2js/rti/emission/superclasses_trivial.dart
index a552926..5067b79 100644
--- a/tests/compiler/dart2js/rti/emission/superclasses_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/superclasses_trivial.dart
@@ -4,13 +4,13 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: A:checks=[]*/
+/*class: A:checkedInstance,checks=[]*/
 class A<T> {}
 
-/*class: B:checks=[$asA]*/
+/*class: B:checks=[$asA],instance*/
 class B<S, T> extends A<T> {} // Non-trivial substitution of A.
 
-/*class: C:checks=[$asA,$asB]*/
+/*class: C:checks=[$asA,$asB],instance*/
 class C<T> extends B<T, T> {} // Trivial substitution of A
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/supertype.dart b/tests/compiler/dart2js/rti/emission/supertype.dart
index 763d175..92bae3f 100644
--- a/tests/compiler/dart2js/rti/emission/supertype.dart
+++ b/tests/compiler/dart2js/rti/emission/supertype.dart
@@ -4,10 +4,10 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: B:*/
+/*class: B:checkedInstance*/
 class B {}
 
-/*class: C:checks=[$isB]*/
+/*class: C:checks=[$isB],instance*/
 class C implements B {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/supertype_complex.dart b/tests/compiler/dart2js/rti/emission/supertype_complex.dart
index 8a70382..5ca3b0f 100644
--- a/tests/compiler/dart2js/rti/emission/supertype_complex.dart
+++ b/tests/compiler/dart2js/rti/emission/supertype_complex.dart
@@ -4,13 +4,13 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: A:checks=[]*/
+/*class: A:checkedTypeArgument,checks=[],typeArgument*/
 class A<T> {}
 
-/*class: B:*/
+/*class: B:checkedInstance*/
 class B<T> {}
 
-/*class: C:checks=[$asB,$isB]*/
+/*class: C:checks=[$asB,$isB],instance*/
 class C<T> implements B<A<T>> {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/supertype_fixed.dart b/tests/compiler/dart2js/rti/emission/supertype_fixed.dart
index ce5d6d7..2b14e4c 100644
--- a/tests/compiler/dart2js/rti/emission/supertype_fixed.dart
+++ b/tests/compiler/dart2js/rti/emission/supertype_fixed.dart
@@ -4,10 +4,10 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: B:*/
+/*class: B:checkedInstance*/
 class B<T> {}
 
-/*class: C:checks=[$asB,$isB]*/
+/*class: C:checks=[$asB,$isB],instance*/
 class C implements B<String> {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/supertype_trivial.dart b/tests/compiler/dart2js/rti/emission/supertype_trivial.dart
index 4cc95f5..40f9e29 100644
--- a/tests/compiler/dart2js/rti/emission/supertype_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/supertype_trivial.dart
@@ -4,10 +4,10 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: B:*/
+/*class: B:checkedInstance*/
 class B<T> {}
 
-/*class: C:checks=[$isB]*/
+/*class: C:checks=[$isB],instance*/
 class C<T> implements B<T> {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/supertypes_extends.dart b/tests/compiler/dart2js/rti/emission/supertypes_extends.dart
index ab679a8..f9ab4fa 100644
--- a/tests/compiler/dart2js/rti/emission/supertypes_extends.dart
+++ b/tests/compiler/dart2js/rti/emission/supertypes_extends.dart
@@ -4,13 +4,13 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: A:*/
+/*class: A:checkedInstance*/
 class A {}
 
 /*class: B:checks=[$isA]*/
 class B implements A {}
 
-/*class: C:checks=[]*/
+/*class: C:checks=[],instance*/
 class C extends B {} // Implements A through `extends B`.
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/supertypes_extends2.dart b/tests/compiler/dart2js/rti/emission/supertypes_extends2.dart
index 772ef53..dc3de4e 100644
--- a/tests/compiler/dart2js/rti/emission/supertypes_extends2.dart
+++ b/tests/compiler/dart2js/rti/emission/supertypes_extends2.dart
@@ -4,12 +4,13 @@
 
 import 'package:meta/dart2js.dart';
 
+/*class: A:checkedInstance*/
 class A {}
 
-/*class: B:checks=[$isA]*/
+/*class: B:checks=[$isA],instance*/
 class B implements A {}
 
-/*class: C:checks=[]*/
+/*class: C:checks=[],instance*/
 class C extends B {} // Implements A through `extends B`.
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/supertypes_extends3.dart b/tests/compiler/dart2js/rti/emission/supertypes_extends3.dart
index 894e130..eee47b1 100644
--- a/tests/compiler/dart2js/rti/emission/supertypes_extends3.dart
+++ b/tests/compiler/dart2js/rti/emission/supertypes_extends3.dart
@@ -4,7 +4,7 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: A:*/
+/*class: A:checkedInstance*/
 class A {}
 
 /*class: B:checks=[$isA]*/
@@ -13,7 +13,7 @@
 /*class: C:checks=[]*/
 class C extends B {} // Implements A through `extends B`.
 
-/*class: D:checks=[]*/
+/*class: D:checks=[],instance*/
 class D extends C {} // Implements A through `extends C`.
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/supertypes_implements.dart b/tests/compiler/dart2js/rti/emission/supertypes_implements.dart
index ac984b7..c5a92b4 100644
--- a/tests/compiler/dart2js/rti/emission/supertypes_implements.dart
+++ b/tests/compiler/dart2js/rti/emission/supertypes_implements.dart
@@ -4,13 +4,13 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: A:*/
+/*class: A:checkedInstance*/
 class A {}
 
 /*class: B:*/
 class B extends A {}
 
-/*class: C:checks=[$isA]*/
+/*class: C:checks=[$isA],instance*/
 class C implements B {} // Implements A through `implements B`.
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/supertypes_non_trivial.dart b/tests/compiler/dart2js/rti/emission/supertypes_non_trivial.dart
index 27fd588..0dedcb3 100644
--- a/tests/compiler/dart2js/rti/emission/supertypes_non_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/supertypes_non_trivial.dart
@@ -4,13 +4,13 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: A:checks=[]*/
+/*class: A:checkedInstance,checks=[]*/
 class A<T> {}
 
-/*class: B:checks=[$asA]*/
+/*class: B:checks=[$asA],instance*/
 class B<S, T> extends A<T> {} // Non-trivial substitution of A.
 
-/*class: C:checks=[$asA,$isA]*/
+/*class: C:checks=[$asA,$isA],instance*/
 class C<S, T> implements B<S, T> {} // Non-trivial substitution of A
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/supertypes_trivial.dart b/tests/compiler/dart2js/rti/emission/supertypes_trivial.dart
index 340c2f4..f1a15cd 100644
--- a/tests/compiler/dart2js/rti/emission/supertypes_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/supertypes_trivial.dart
@@ -4,13 +4,13 @@
 
 import 'package:meta/dart2js.dart';
 
-/*class: A:checks=[]*/
+/*class: A:checkedInstance,checks=[]*/
 class A<T> {}
 
-/*class: B:checks=[$asA]*/
+/*class: B:checks=[$asA],instance*/
 class B<S, T> extends A<T> {} // Non-trivial substitution of A.
 
-/*class: C:checks=[$isA]*/
+/*class: C:checks=[$isA],instance*/
 class C<T> implements B<T, T> {} // Trivial substitution of A
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/type_argument_dynamic_strong.dart b/tests/compiler/dart2js/rti/emission/type_argument_dynamic_strong.dart
new file mode 100644
index 0000000..a3d12e2
--- /dev/null
+++ b/tests/compiler/dart2js/rti/emission/type_argument_dynamic_strong.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+import 'package:meta/dart2js.dart';
+
+/*class: A:checkedTypeArgument,checks=[],typeArgument*/
+class A {}
+
+/*class: B:checks=[$isA],typeArgument*/
+class B implements A {}
+
+/*class: C:checkedInstance,checks=[],instance*/
+class C<T> {}
+
+/*class: D:checks=[],typeArgument*/
+class D {}
+
+/*class: E:checks=[],instance*/
+class E {
+  @noInline
+  m<T>() => new C<T>();
+}
+
+/*class: F:checks=[],instance*/
+class F {
+  @noInline
+  m<T>() => false;
+}
+
+@noInline
+test(o) => o is C<A>;
+
+main() {
+  dynamic o =
+      new DateTime.now().millisecondsSinceEpoch == 0 ? new F() : new E();
+  Expect.isTrue(test(o.m<B>()));
+  Expect.isFalse(test(o.m<D>()));
+}
diff --git a/tests/compiler/dart2js/rti/emission/type_argument_static_strong.dart b/tests/compiler/dart2js/rti/emission/type_argument_static_strong.dart
new file mode 100644
index 0000000..05ba49e
--- /dev/null
+++ b/tests/compiler/dart2js/rti/emission/type_argument_static_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: A:checkedTypeArgument,checks=[],typeArgument*/
+class A {}
+
+/*class: B:checks=[$isA],typeArgument*/
+class B implements A {}
+
+/*class: C:checkedInstance,checks=[],instance*/
+class C<T> {}
+
+/*class: D:checks=[],typeArgument*/
+class D {}
+
+@noInline
+m<T>() => new C<T>();
+
+@noInline
+test(o) => o is C<A>;
+
+main() {
+  Expect.isTrue(test(m<B>()));
+  Expect.isFalse(test(m<D>()));
+}
diff --git a/tests/compiler/dart2js/rti/rti_emission_test.dart b/tests/compiler/dart2js/rti/rti_emission_test.dart
index 2dcdc43..cb3a0a4 100644
--- a/tests/compiler/dart2js/rti/rti_emission_test.dart
+++ b/tests/compiler/dart2js/rti/rti_emission_test.dart
@@ -11,6 +11,7 @@
 import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/elements.dart';
 import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/js_backend/runtime_types.dart';
 import 'package:compiler/src/js_emitter/model.dart';
 import 'package:compiler/src/tree/nodes.dart' as ast;
 import 'package:compiler/src/kernel/element_map.dart';
@@ -23,6 +24,7 @@
 
 main(List<String> args) {
   asyncTest(() async {
+    cacheRtiDataForTesting = true;
     Directory dataDir =
         new Directory.fromUri(Platform.script.resolve('emission'));
     await checkTests(
@@ -43,6 +45,10 @@
 
 class Tags {
   static const String isChecks = 'checks';
+  static const String instance = 'instance';
+  static const String checkedInstance = 'checkedInstance';
+  static const String typeArgument = 'typeArgument';
+  static const String checkedTypeArgument = 'checkedTypeArgument';
 }
 
 void computeAstRtiMemberEmission(
@@ -67,6 +73,9 @@
   Compiler get compiler;
   ProgramLookup lookup;
 
+  RuntimeTypesImpl get checksBuilder =>
+      compiler.backend.rtiChecksBuilderForTesting;
+
   String getClassValue(ClassEntity element) {
     lookup ??= new ProgramLookup(compiler);
     Class cls = lookup.getClass(element);
@@ -77,6 +86,21 @@
         features.addElement(Tags.isChecks, stub.name.key);
       }
     }
+    ClassUse classUse = checksBuilder.classUseMapForTesting[element];
+    if (classUse != null) {
+      if (classUse.instance) {
+        features.add(Tags.instance);
+      }
+      if (classUse.checkedInstance) {
+        features.add(Tags.checkedInstance);
+      }
+      if (classUse.typeArgument) {
+        features.add(Tags.typeArgument);
+      }
+      if (classUse.checkedTypeArgument) {
+        features.add(Tags.checkedTypeArgument);
+      }
+    }
     return features.getText();
   }
 
diff --git a/tests/compiler/dart2js/subtype_test.dart b/tests/compiler/dart2js/subtype_test.dart
index 719a484..7d938fc 100644
--- a/tests/compiler/dart2js/subtype_test.dart
+++ b/tests/compiler/dart2js/subtype_test.dart
@@ -315,12 +315,12 @@
     ClassEntity classA = env.getClass('A');
     DartType A = env.elementEnvironment.getRawType(classA);
     DartType function = env['Function'];
-    DartType call = env.getMemberType(classA, 'call');
-    DartType m1 = env.getMemberType(classA, 'm1');
-    DartType m2 = env.getMemberType(classA, 'm2');
-    DartType m3 = env.getMemberType(classA, 'm3');
-    DartType m4 = env.getMemberType(classA, 'm4');
-    DartType m5 = env.getMemberType(classA, 'm5');
+    DartType call = env.getMemberType('call', classA);
+    DartType m1 = env.getMemberType('m1', classA);
+    DartType m2 = env.getMemberType('m2', classA);
+    DartType m3 = env.getMemberType('m3', classA);
+    DartType m4 = env.getMemberType('m4', classA);
+    DartType m5 = env.getMemberType('m5', classA);
 
     expect(true, A, function);
     expect(true, A, call);
diff --git a/tests/compiler/dart2js/type_test_helper.dart b/tests/compiler/dart2js/type_test_helper.dart
index 7a064ab..e4f6b26 100644
--- a/tests/compiler/dart2js/type_test_helper.dart
+++ b/tests/compiler/dart2js/type_test_helper.dart
@@ -215,8 +215,17 @@
     return getElementType(name);
   }
 
-  DartType getMemberType(ClassEntity cls, String name) {
-    MemberEntity member = elementEnvironment.lookupLocalClassMember(cls, name);
+  MemberEntity _getMember(String name, [ClassEntity cls]) {
+    if (cls != null) {
+      return elementEnvironment.lookupLocalClassMember(cls, name);
+    } else {
+      LibraryEntity mainLibrary = elementEnvironment.mainLibrary;
+      return elementEnvironment.lookupLibraryMember(mainLibrary, name);
+    }
+  }
+
+  DartType getMemberType(String name, [ClassEntity cls]) {
+    MemberEntity member = _getMember(name, cls);
     if (member is FieldEntity) {
       return elementEnvironment.getFieldType(member);
     } else if (member is FunctionEntity) {
@@ -225,6 +234,22 @@
     throw 'Unexpected member: $member';
   }
 
+  DartType getClosureType(String name, [ClassEntity cls]) {
+    if (testBackendWorld) {
+      throw new UnsupportedError(
+          "getClosureType not supported for backend testing.");
+    }
+    MemberEntity member = _getMember(name, cls);
+    DartType type;
+    compiler.resolutionWorldBuilder
+        .forEachLocalFunction((MemberEntity m, Local local) {
+      if (member == m) {
+        type ??= elementEnvironment.getLocalFunctionType(local);
+      }
+    });
+    return type;
+  }
+
   DartType getFieldType(String name) {
     LibraryEntity mainLibrary = elementEnvironment.mainLibrary;
     FieldEntity field =
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index c6a7753..ffe01f1 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -27,6 +27,11 @@
 dummy_compiler_test: Skip # Issue 28649
 recursive_import_test: Skip # Issue 28649
 
+[ $compiler == dart2js && !$strong ]
+generic_method_dynamic_is_test: RuntimeError # Test against function type variables is only supported in strong mode.
+generic_method_static_is_test: RuntimeError # Test against function type variables is only supported in strong mode.
+local_signature_test: RuntimeError # Test against function type variables is only supported in strong mode.
+
 [ $compiler == dart2js && $mode == debug ]
 operator_test: Skip
 string_interpolation_test: Skip
@@ -136,96 +141,94 @@
 unconditional_dartio_import_test: RuntimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
-21666_test: CompileTimeError
-23056_test: CompileTimeError
+21666_test: RuntimeError
 23264_test: RuntimeError
 closure_capture2_test: RuntimeError
-closure_type_reflection2_test: CompileTimeError
-closure_type_reflection_test: CompileTimeError
+closure_type_reflection2_test: RuntimeError
+closure_type_reflection_test: RuntimeError
 constant_javascript_semantics_test/01: MissingCompileTimeError
-deferred/deferred_mirrors1_test: CompileTimeError
-deferred/deferred_mirrors2_test: CompileTimeError
-deferred/reflect_multiple_annotations_test: CompileTimeError
-deferred/reflect_multiple_default_arg_test: CompileTimeError
+deferred/deferred_mirrors1_test: RuntimeError
+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: CompileTimeError
-invalid_annotation2_test/none: CompileTimeError
-mirror_enqueuer_regression_test: CompileTimeError
-mirror_invalid_field_access2_test: CompileTimeError
-mirror_invalid_field_access3_test: CompileTimeError
-mirror_invalid_field_access4_test: CompileTimeError
-mirror_invalid_field_access_test: CompileTimeError
-mirror_invalid_invoke2_test: CompileTimeError
-mirror_invalid_invoke3_test: CompileTimeError
-mirror_invalid_invoke_test: CompileTimeError
-mirror_printer_test/01: CompileTimeError
-mirror_printer_test/none: CompileTimeError
-mirror_test: CompileTimeError
-mirror_type_inference_field2_test: CompileTimeError
-mirror_type_inference_field_test: CompileTimeError
-mirror_type_inference_function_test: CompileTimeError
-mirrors_declarations_filtering_test: CompileTimeError
-mirrors_used_metatargets_test: CompileTimeError
-mirrors_used_native_test: CompileTimeError
-mirrors_used_warning2_test: CompileTimeError
-mirrors_used_warning_test/minif: CompileTimeError
-mirrors_used_warning_test/none: CompileTimeError
-no_such_method_mirrors_test: CompileTimeError
+inference_nsm_mirrors_test: RuntimeError
+invalid_annotation2_test/none: RuntimeError
+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_closure_test: SkipByDesign
+mirrors_used_metatargets_test: RuntimeError
+mirrors_used_native_test: RuntimeError
+mirrors_used_warning2_test: RuntimeError
+mirrors_used_warning_test/minif: RuntimeError
+mirrors_used_warning_test/none: RuntimeError
+no_such_method_mirrors_test: RuntimeError
 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
-reflect_native_types_test: CompileTimeError
+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 && $dart2js_with_kernel && $minified ]
-21666_test: CompileTimeError
-23056_test: CompileTimeError
+21666_test: RuntimeError
 23264_test: RuntimeError
-closure_type_reflection2_test: CompileTimeError
-closure_type_reflection_test: CompileTimeError
+closure_type_reflection2_test: RuntimeError
+closure_type_reflection_test: RuntimeError
 constant_javascript_semantics_test/01: MissingCompileTimeError
-deferred/deferred_mirrors1_test: CompileTimeError
-deferred/deferred_mirrors2_test: CompileTimeError
+deferred/deferred_mirrors1_test: RuntimeError
+deferred/deferred_mirrors2_test: RuntimeError
 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.
 deferred_fail_and_retry_test: RuntimeError
 deferred_fail_and_retry_worker_test: Fail
 dummy_compiler_test: CompileTimeError
-inference_nsm_mirrors_test: CompileTimeError
-invalid_annotation2_test/none: CompileTimeError
-mirror_enqueuer_regression_test: CompileTimeError
-mirror_invalid_field_access2_test: CompileTimeError
-mirror_invalid_field_access3_test: CompileTimeError
-mirror_invalid_field_access4_test: CompileTimeError
-mirror_invalid_field_access_test: CompileTimeError
-mirror_invalid_invoke2_test: CompileTimeError
-mirror_invalid_invoke3_test: CompileTimeError
-mirror_invalid_invoke_test: CompileTimeError
-mirror_printer_test/01: CompileTimeError
-mirror_printer_test/none: CompileTimeError
-mirror_test: CompileTimeError
-mirror_type_inference_field2_test: CompileTimeError
-mirror_type_inference_field_test: CompileTimeError
-mirror_type_inference_function_test: CompileTimeError
-mirrors_declarations_filtering_test: CompileTimeError
-mirrors_used_metatargets_test: CompileTimeError
-mirrors_used_native_test: CompileTimeError
-mirrors_used_warning2_test: CompileTimeError
-mirrors_used_warning_test/none: CompileTimeError
-no_such_method_mirrors_test: CompileTimeError
+inference_nsm_mirrors_test: RuntimeError
+invalid_annotation2_test/none: RuntimeError
+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_closure_test: SkipByDesign
+mirrors_used_metatargets_test: RuntimeError
+mirrors_used_native_test: RuntimeError
+mirrors_used_warning2_test: RuntimeError
+mirrors_used_warning_test/none: RuntimeError
+no_such_method_mirrors_test: RuntimeError
 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
-reflect_native_types_test: CompileTimeError
+reflect_native_types_test: RuntimeError
 regress/4562_test/none: CompileTimeError
 type_constant_switch_test/01: MissingCompileTimeError
 unconditional_dartio_import_test: RuntimeError # Issue 30902
@@ -265,7 +268,7 @@
 mirror_type_inference_field_test: Fail # mirrors not supported
 mirror_type_inference_function_test: Fail # mirrors not supported
 mirrors_declarations_filtering_test: Fail # mirrors not supported
-mirrors_used_closure_test: Fail # mirrors not supported
+mirrors_used_closure_test: SkipByDesign
 mirrors_used_metatargets_test: Fail # mirrors not supported
 mirrors_used_native_test: Fail # mirrors not supported
 mirrors_used_warning2_test: Fail # mirrors not supported
diff --git a/tests/compiler/dart2js_extra/generic_method_dynamic_is_test.dart b/tests/compiler/dart2js_extra/generic_method_dynamic_is_test.dart
new file mode 100644
index 0000000..4f3a720
--- /dev/null
+++ b/tests/compiler/dart2js_extra/generic_method_dynamic_is_test.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class A {}
+
+class B implements A {}
+
+class C<T> {}
+
+class D {}
+
+class E {
+  @NoInline()
+  m<T>() => new C<T>();
+}
+
+class F {
+  @NoInline()
+  m<T>() => false;
+}
+
+@NoInline()
+test(o) => o is C<A>;
+
+main() {
+  dynamic o =
+      new DateTime.now().millisecondsSinceEpoch == 0 ? new F() : new E();
+  Expect.isTrue(test(o.m<B>()));
+  Expect.isFalse(test(o.m<D>()));
+}
diff --git a/tests/compiler/dart2js_extra/generic_method_static_is_test.dart b/tests/compiler/dart2js_extra/generic_method_static_is_test.dart
new file mode 100644
index 0000000..946fa1c
--- /dev/null
+++ b/tests/compiler/dart2js_extra/generic_method_static_is_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class A {}
+
+class B implements A {}
+
+class C<T> {}
+
+class D {}
+
+@NoInline()
+m<T>() => new C<T>();
+
+@NoInline()
+test(o) => o is C<A>;
+
+main() {
+  Expect.isTrue(test(m<B>()));
+  Expect.isFalse(test(m<D>()));
+}
diff --git a/tests/compiler/dart2js_extra/local_signature_test.dart b/tests/compiler/dart2js_extra/local_signature_test.dart
new file mode 100644
index 0000000..8d39233
--- /dev/null
+++ b/tests/compiler/dart2js_extra/local_signature_test.dart
@@ -0,0 +1,34 @@
+// 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';
+
+@NoInline()
+test1(o) => o is Function(int);
+
+@NoInline()
+test2(o) => o is Function<T>(T);
+
+class C<S> {
+  @NoInline()
+  test(bool expected) {
+    local1(int i) {}
+    local2<T>(T t) {}
+    local3(S s) {}
+
+    Expect.isTrue(test1(local1));
+    Expect.isFalse(test2(local1));
+
+    Expect.isFalse(test1(local2));
+    Expect.isTrue(test2(local2));
+
+    Expect.equals(expected, test1(local3));
+    Expect.isFalse(test2(local3));
+  }
+}
+
+main() {
+  new C<int>().test(true);
+  new C<double>().test(false);
+}
diff --git a/tests/compiler/dart2js_extra/named_mixin_runtime_type_test.dart b/tests/compiler/dart2js_extra/named_mixin_runtime_type_test.dart
new file mode 100644
index 0000000..ec4adf2
--- /dev/null
+++ b/tests/compiler/dart2js_extra/named_mixin_runtime_type_test.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+abstract class A {}
+
+abstract class B {}
+
+class C = B with A;
+
+@NoInline()
+test(o) => o.runtimeType;
+
+main() {
+  Expect.equals(C, test(new C()));
+}
diff --git a/tests/compiler/dart2js_native/dart2js_native.status b/tests/compiler/dart2js_native/dart2js_native.status
index 29cb393..d3fcb95 100644
--- a/tests/compiler/dart2js_native/dart2js_native.status
+++ b/tests/compiler/dart2js_native/dart2js_native.status
@@ -40,12 +40,12 @@
 bound_closure_super_test: RuntimeError
 compute_this_script_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/types.dart': Failed assertion: line 63 pos 12: '!result.isEmpty': is not true.
 fake_thing_test: RuntimeError
-mirror_intercepted_field_test: CompileTimeError
+mirror_intercepted_field_test: RuntimeError
 native_library_same_name_used_frog_test: CompileTimeError
-native_mirror_test: CompileTimeError
-native_no_such_method_exception3_frog_test: CompileTimeError
-native_no_such_method_exception4_frog_test: CompileTimeError
-native_no_such_method_exception5_frog_test: CompileTimeError
+native_mirror_test: RuntimeError
+native_no_such_method_exception3_frog_test: RuntimeError
+native_no_such_method_exception4_frog_test: RuntimeError
+native_no_such_method_exception5_frog_test: RuntimeError
 subclassing_constructor_1_test: RuntimeError
 subclassing_super_call_test: RuntimeError
 subclassing_super_field_1_test: RuntimeError
@@ -54,12 +54,12 @@
 [ $compiler == dart2js && $dart2js_with_kernel && $minified ]
 bound_closure_super_test: RuntimeError
 fake_thing_test: RuntimeError
-mirror_intercepted_field_test: CompileTimeError
+mirror_intercepted_field_test: RuntimeError
 native_library_same_name_used_frog_test: CompileTimeError
-native_mirror_test: CompileTimeError
-native_no_such_method_exception3_frog_test: CompileTimeError
-native_no_such_method_exception4_frog_test: CompileTimeError
-native_no_such_method_exception5_frog_test: CompileTimeError
+native_mirror_test: RuntimeError
+native_no_such_method_exception3_frog_test: RuntimeError
+native_no_such_method_exception4_frog_test: RuntimeError
+native_no_such_method_exception5_frog_test: RuntimeError
 optimization_hints_test: RuntimeError
 subclassing_constructor_1_test: RuntimeError
 subclassing_super_call_test: RuntimeError
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index edd0cde..3996278 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -177,7 +177,7 @@
 symbol_reserved_word_test/03: RuntimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
-apply3_test: CompileTimeError
+apply3_test: RuntimeError
 big_integer_parsed_arith_vm_test: RuntimeError
 big_integer_parsed_div_rem_vm_test: RuntimeError
 big_integer_parsed_mul_div_vm_test: RuntimeError
@@ -194,7 +194,7 @@
 symbol_reserved_word_test/03: RuntimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel && $minified ]
-apply3_test: CompileTimeError
+apply3_test: RuntimeError
 big_integer_parsed_arith_vm_test: RuntimeError
 big_integer_parsed_div_rem_vm_test: RuntimeError
 big_integer_parsed_mul_div_vm_test: RuntimeError
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 5e4efa2..e0bcaf1 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -210,10 +210,10 @@
 uri_base_test: Crash # RangeError (index): Invalid value: Valid value range is empty: 0
 
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked && $strong ]
-apply3_test: CompileTimeError
+apply3_test: RuntimeError
 cast_test: RuntimeError
 collection_removes_test: RuntimeError
-dynamic_nosuchmethod_test: CompileTimeError
+dynamic_nosuchmethod_test: RuntimeError
 error_stack_trace1_test: RuntimeError # Issue 12399
 growable_list_test: RuntimeError
 int_parse_radix_test/01: RuntimeError
@@ -244,10 +244,10 @@
 uri_base_test: RuntimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel && $minified && $strong ]
-apply3_test: CompileTimeError
+apply3_test: RuntimeError
 cast_test: RuntimeError
 collection_removes_test: RuntimeError
-dynamic_nosuchmethod_test: CompileTimeError
+dynamic_nosuchmethod_test: RuntimeError
 error_stack_trace1_test: RuntimeError
 growable_list_test: RuntimeError
 hash_set_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(_CustomHashSet.#x), local(_CustomHashSet.#)) for j:closure_call(_CustomHashSet__CustomHashSet_closure.call).
diff --git a/tests/corelib_2/list_copy_range_test.dart b/tests/corelib_2/list_copy_range_test.dart
new file mode 100644
index 0000000..009f445
--- /dev/null
+++ b/tests/corelib_2/list_copy_range_test.dart
@@ -0,0 +1,115 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:typed_data";
+import "package:expect/expect.dart";
+
+// Tests of List.copyRange.
+
+void main() {
+  var list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
+
+  List.copyRange(list, 3, [10, 11, 12, 13], 0, 4);
+
+  Expect.listEquals([0, 1, 2, 10, 11, 12, 13, 7, 8, 9], list);
+
+  List.copyRange(list, 6, [20, 21, 22, 23], 1, 3);
+
+  Expect.listEquals([0, 1, 2, 10, 11, 12, 21, 22, 8, 9], list);
+
+  // Empty ranges won't change anything.
+  List.copyRange(list, 7, [30, 31, 32, 33], 3, 3);
+  List.copyRange(list, list.length, [30, 31, 32, 33], 3, 3);
+
+  Expect.listEquals([0, 1, 2, 10, 11, 12, 21, 22, 8, 9], list);
+
+  List.copyRange(list, 0, [40, 41, 42, 43], 0, 2);
+
+  Expect.listEquals([40, 41, 2, 10, 11, 12, 21, 22, 8, 9], list);
+
+  // Overlapping self-ranges
+
+  List.copyRange(list, 2, list, 0, 4);
+
+  Expect.listEquals([40, 41, 40, 41, 2, 10, 21, 22, 8, 9], list);
+
+  List.copyRange(list, 4, list, 6, 10);
+
+  Expect.listEquals([40, 41, 40, 41, 21, 22, 8, 9, 8, 9], list);
+
+  // Invalid source ranges.
+
+  Expect.throwsArgumentError(() {
+    List.copyRange(list, 0, [0, 0, 0], -1, 1);
+  });
+
+  Expect.throwsArgumentError(() {
+    List.copyRange(list, 0, [0, 0, 0], 0, 4);
+  });
+
+  Expect.throwsArgumentError(() {
+    List.copyRange(list, 0, [0, 0, 0], 2, 1);
+  });
+
+  Expect.throwsArgumentError(() {
+    List.copyRange(list, 0, [], 1, 1);
+  });
+
+  // Invalid target range.
+  Expect.throwsArgumentError(() {
+    List.copyRange(list, list.length - 3, [0, 0, 0, 0], 0, 4);
+  });
+
+  // Invalid target range.
+  Expect.throwsArgumentError(() {
+    List.copyRange(list, list.length + 1, [0, 0, 0, 0], 0, 0);
+  });
+
+  // Argument errors throw before changing anything, so list is unchanged.
+  Expect.listEquals([40, 41, 40, 41, 21, 22, 8, 9, 8, 9], list);
+
+  // Omitting start/end (or passing null).
+  List.copyRange(list, 2, [1, 2, 3]);
+
+  Expect.listEquals([40, 41, 1, 2, 3, 22, 8, 9, 8, 9], list);
+
+  List.copyRange(list, 5, [1, 2, 3], 1);
+
+  Expect.listEquals([40, 41, 1, 2, 3, 2, 3, 9, 8, 9], list);
+
+  // Other kinds of lists.
+  var listu8 = new Uint8List.fromList([1, 2, 3, 4]);
+  var list16 = new Int16List.fromList([11, 12, -13, -14]);
+  List.copyRange(listu8, 2, list16, 1, 3);
+  Expect.listEquals([1, 2, 12, 256 - 13], listu8);
+
+  var clist = const <int>[1, 2, 3, 4];
+  var flist = new List<int>(4)..setAll(0, [10, 11, 12, 13]);
+  List.copyRange(flist, 1, clist, 1, 3);
+  Expect.listEquals([10, 2, 3, 13], flist);
+
+  // Invoking with a type parameter that is a supertype of the list types
+  // is valid and useful.
+  List<int> ilist = <int>[1, 2, 3, 4];
+  List<num> nlist = <num>[11, 12, 13, 14];
+
+  List.copyRange<num>(ilist, 1, nlist, 1, 3);
+  Expect.listEquals([1, 12, 13, 4], ilist);
+  List.copyRange<Object>(ilist, 1, nlist, 0, 2);
+  Expect.listEquals([1, 11, 12, 4], ilist);
+  List.copyRange<dynamic>(ilist, 1, nlist, 2, 4);
+  Expect.listEquals([1, 13, 14, 4], ilist);
+
+  var d = new D();
+  List<B> bdlist = <B>[d];
+  List<C> cdlist = <C>[null];
+  List.copyRange<Object>(cdlist, 0, bdlist, 0, 1);
+  Expect.identical(d, cdlist[0]);
+}
+
+class B {}
+
+class C {}
+
+class D implements B, C {}
diff --git a/tests/corelib_2/list_write_elements_test.dart b/tests/corelib_2/list_write_elements_test.dart
new file mode 100644
index 0000000..3f382ce
--- /dev/null
+++ b/tests/corelib_2/list_write_elements_test.dart
@@ -0,0 +1,75 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:typed_data";
+import "package:expect/expect.dart";
+
+void main() {
+  test([1, 2, 3, 4], [5, 6], 2, [1, 2, 5, 6]);
+  test([1, 2, 3, 4], [5, 6], 0, [5, 6, 3, 4]);
+  test([1, 2, 3, 4], [5, 6], 1, [1, 5, 6, 4]);
+  test([1, 2, 3, 4], [], 2, [1, 2, 3, 4]);
+  test([1, 2, 3, 4], [5, 6], 2, [1, 2, 5, 6]);
+  test([1, 2, 3, 4], [5, 6], 2, [1, 2, 5, 6]);
+  test([1, 2, 3, 4], [5, 6], 2, [1, 2, 5, 6]);
+  test([], [], 0, []);
+  test([1], [2], 0, [2]);
+
+  // Other (non-list) iterables.
+  test([1, 2, 3, 4], new Iterable.generate(2, (x) => x + 7), 1, [1, 7, 8, 4]);
+  test([1, 2, 3, 4], [9, 9, 5, 6].skip(2), 1, [1, 5, 6, 4]);
+  test([1, 2, 3, 4], [5, 6, 9, 9].take(2), 1, [1, 5, 6, 4]);
+  test([1, 2, 3, 4], [9, 5, 9, 6, 9, 9].where((x) => x != 9), 1, [1, 5, 6, 4]);
+  test([1, 2, 3, 4], new Set.from([5, 6]), 1, [1, 5, 6, 4]);
+
+  // Other types of lists.
+  test(new Uint8List(4), [5, 6], 1, [0, 5, 6, 0]);
+  test(new Uint8List(4), [-5, 6], 1, [0, 256 - 5, 6, 0]);
+
+  // Over-long iterables. Updates until end, then throws.
+  testThrows([], [1], 0);
+  testThrows([2], [1], 1);
+  testThrows([2], [1], 1);
+  testThrows([1, 2, 3, 4], [5, 6, 7, 8], 2, [1, 2, 5, 6]);
+
+  // Throwing iterable.
+  Expect.throws(() {
+    Iterable<int> throwingIterable() sync* {
+      yield 1;
+      throw "2";
+    }
+
+    List.writeIterable([1, 2, 3], 1, throwingIterable());
+  }, (e) => e == "2");
+
+  // Bad start index.
+  testThrows([1, 2], [1], -1);
+  testThrows([1, 2], [1], 2);
+
+  // Working at a supertype is practical and useful.
+  test<Object>(<int>[1, 2, 3, 4], <num>[5, 6], 1, [1, 5, 6, 4]);
+
+  var d = new D();
+  test<Object>(<B>[null], <C>[d], 0, [d]);
+}
+
+testThrows<T>(list, iterable, start, [expect]) {
+  Expect.throws(() {
+    List.writeIterable<T>(list, start, iterable);
+  });
+  if (expect != null) {
+    Expect.listEquals(expect, list);
+  }
+}
+
+test<T>(List<T> list, Iterable<T> iterable, int start, List expect) {
+  List.writeIterable<T>(list, start, iterable);
+  Expect.listEquals(expect, list);
+}
+
+class B {}
+
+class C {}
+
+class D implements B, C {}
diff --git a/tests/html/html.status b/tests/html/html.status
index 6a3157d..cfa3a87 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -40,11 +40,6 @@
 indexeddb_4_test: Pass, Timeout # Roll 50 failure
 indexeddb_5_test: Pass, Timeout # Roll 50 failure
 input_element_test/attributes: Fail # Issue 21555
-js_interop_constructor_name_test/HTMLDivElement-types-erroneous1: Fail # Issue 26838
-js_interop_constructor_name_test/HTMLDivElement-types-erroneous2: Fail # Issue 26838
-js_type_test/dynamic-String-not-Foo: Fail # Issue 26838
-js_type_test/dynamic-String-not-dynamic-Foo: Fail # Issue 26838
-js_type_test/dynamic-null-not-Foo: Fail # Issue 26838
 js_typed_interop_default_arg_test/default_value: MissingCompileTimeError # Issue #25759
 js_typed_interop_side_cast_exp_test: Pass, RuntimeError # Roll 50 failure
 mirrors_js_typed_interop_test: Pass, Slow
diff --git a/tests/html/js_interop_constructor_name_test.dart b/tests/html/js_interop_constructor_name_test.dart
index e82422f..6ed93e4 100644
--- a/tests/html/js_interop_constructor_name_test.dart
+++ b/tests/html/js_interop_constructor_name_test.dart
@@ -23,7 +23,7 @@
 
 @NoInline()
 @AssumeDynamic()
-confuse(x) => x;
+dynamic confuse(dynamic x) => x;
 
 main() {
   useHtmlIndividualConfiguration();
@@ -43,27 +43,15 @@
       var e = confuse(makeDiv('hello'));
       expect(e is HTMLDivElement, isTrue);
     });
-  });
-
-  group('HTMLDivElement-types-erroneous1', () {
     test('dom-is-js', () {
       var e = confuse(new html.DivElement());
-      // TODO(26838): When Issue 26838 is fixed and this test passes, move this
-      // test into group `HTMLDivElement-types`.
-
       // Currently, HTML types are not [JavaScriptObject]s. We could change that
       // by having HTML types extend JavaScriptObject, in which case we would
       // change this expectation.
       expect(e is HTMLDivElement, isFalse);
     });
-  });
-
-  group('HTMLDivElement-types-erroneous2', () {
     test('String-is-not-js', () {
       var e = confuse('kombucha');
-      // TODO(26838): When Issue 26838 is fixed and this test passes, move this
-      // test into group `HTMLDivElement-types`.
-
       // A String should not be a JS interop type. The type test flags are added
       // to Interceptor, but should be added to the class that implements all
       // the JS-interop methods.
diff --git a/tests/language/bad_constructor_test.dart b/tests/language/bad_constructor_test.dart
index 747ebc6..968f789 100644
--- a/tests/language/bad_constructor_test.dart
+++ b/tests/language/bad_constructor_test.dart
@@ -23,6 +23,12 @@
   int foo(int a, int b) => a + b * m;
 }
 
+class B {
+  // Constructor may not be static.
+  static B(){} // //# 07: compile-time error
+}
+
 main() {
   new A();
+  new B();
 }
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 5ced098..271a2ed 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -121,7 +121,6 @@
 const_error_multiply_initialized_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/04: MissingCompileTimeError
 const_evaluation_test/01: RuntimeError
-const_factory_with_body_test/01: MissingCompileTimeError
 const_init2_test/02: MissingCompileTimeError
 const_instance_field_test/01: MissingCompileTimeError
 const_map2_test/00: MissingCompileTimeError
@@ -490,7 +489,6 @@
 const_error_multiply_initialized_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/04: MissingCompileTimeError
 const_evaluation_test/01: RuntimeError
-const_factory_with_body_test/01: MissingCompileTimeError
 const_instance_field_test/01: MissingCompileTimeError
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
@@ -784,7 +782,6 @@
 call_nonexistent_constructor_test/01: RuntimeError
 call_type_literal_test/01: RuntimeError
 canonical_const2_test: RuntimeError
-canonical_const3_test: CompileTimeError
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
 class_cycle_test/03: MissingCompileTimeError
@@ -797,9 +794,7 @@
 config_import_test: RuntimeError
 const_error_multiply_initialized_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/04: MissingCompileTimeError
-const_evaluation_test/01: CompileTimeError
-const_evaluation_test/none: CompileTimeError
-const_factory_with_body_test/01: MissingCompileTimeError
+const_evaluation_test/01: RuntimeError
 const_instance_field_test/01: MissingCompileTimeError
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
@@ -817,8 +812,8 @@
 constructor_redirect2_negative_test: Crash # Issue 30856
 constructor_redirect_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(A.named2#x), local(A.named2#y), local(A.named2#z)) for j:constructor(A.named2).
 cyclic_constructor_test/01: Crash # Issue 30856
-deferred_constraints_constants_test/none: CompileTimeError
-deferred_constraints_constants_test/reference_after_load: CompileTimeError
+deferred_constraints_constants_test/none: RuntimeError
+deferred_constraints_constants_test/reference_after_load: RuntimeError
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
@@ -833,7 +828,7 @@
 duplicate_implements_test/04: MissingCompileTimeError
 dynamic_prefix_core_test/01: RuntimeError
 dynamic_prefix_core_test/none: RuntimeError
-enum_mirror_test: CompileTimeError
+enum_mirror_test: RuntimeError
 example_constructor_test: RuntimeError
 expect_test: RuntimeError
 external_test/10: MissingRuntimeError
@@ -842,7 +837,7 @@
 factory_redirection_test/07: MissingCompileTimeError
 fauxverride_test/03: MissingCompileTimeError
 fauxverride_test/05: MissingCompileTimeError
-field_increment_bailout_test: CompileTimeError
+field_increment_bailout_test: RuntimeError
 field_initialization_order_test: RuntimeError
 field_override3_test/00: MissingCompileTimeError
 field_override3_test/01: MissingCompileTimeError
@@ -867,23 +862,23 @@
 identical_closure2_test: RuntimeError
 if_null_assignment_behavior_test/14: RuntimeError
 infinity_test: RuntimeError
-instance_creation_in_function_annotation_test: CompileTimeError
+instance_creation_in_function_annotation_test: RuntimeError
 integer_division_by_zero_test: RuntimeError
 internal_library_test/02: Crash # type 'DillLibraryBuilder' is not a subtype of type 'SourceLibraryBuilder<KernelTypeBuilder, Library>' of 'value' where
-invocation_mirror2_test: CompileTimeError
+invocation_mirror2_test: RuntimeError
 invocation_mirror_empty_arguments_test: RuntimeError
-invocation_mirror_invoke_on2_test: CompileTimeError
-invocation_mirror_invoke_on_test: CompileTimeError
+invocation_mirror_invoke_on2_test: RuntimeError
+invocation_mirror_invoke_on_test: RuntimeError
 invocation_mirror_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 2521 pos 14: 'arguments.named.isEmpty': is not true.
 issue13474_test: RuntimeError
-issue21079_test: CompileTimeError
+issue21079_test: RuntimeError
 left_shift_test: RuntimeError
 library_env_test/has_mirror_support: RuntimeError
 library_env_test/has_no_html_support: RuntimeError
 library_env_test/has_no_io_support: RuntimeError
 list_literal4_test: RuntimeError
 main_not_a_function_test/01: CompileTimeError
-many_overridden_no_such_method_test: CompileTimeError
+many_overridden_no_such_method_test: RuntimeError
 map_literal4_test: RuntimeError
 method_override5_test: RuntimeError
 method_override7_test/00: MissingCompileTimeError
@@ -1005,12 +1000,13 @@
 named_parameters_type_test/03: MissingRuntimeError
 nan_identical_test: RuntimeError
 no_main_test/01: CompileTimeError
-no_such_method_test: CompileTimeError
-null_test/none: CompileTimeError
+no_such_method_test: RuntimeError
+null_test/none: RuntimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError
+operator2_negative_test: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
 operator_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.
-overridden_no_such_method_test: CompileTimeError
+overridden_no_such_method_test: RuntimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
@@ -1028,21 +1024,20 @@
 redirecting_constructor_initializer_test: RuntimeError
 redirecting_factory_default_values_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/02: MissingCompileTimeError
-redirecting_factory_long_test: RuntimeError
-redirecting_factory_reflection_test: CompileTimeError
-regress_13462_0_test: CompileTimeError
-regress_13462_1_test: CompileTimeError
+redirecting_factory_reflection_test: RuntimeError
+regress_13462_1_test: RuntimeError
 regress_13494_test: RuntimeError
 regress_17382_test: RuntimeError
-regress_18535_test: CompileTimeError
+regress_18535_test: RuntimeError
 regress_20394_test/01: MissingCompileTimeError
 regress_22936_test/01: RuntimeError
+regress_23408_test: RuntimeError
 regress_24283_test: RuntimeError
 regress_27572_test: RuntimeError
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
 regress_28217_test/01: MissingCompileTimeError
 regress_28217_test/none: MissingCompileTimeError
-regress_28255_test: CompileTimeError
+regress_28255_test: RuntimeError
 setter_override_test/00: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
 stacktrace_demangle_ctors_test: RuntimeError # Issue 12698
@@ -1053,8 +1048,8 @@
 static_getter_no_setter1_test/01: RuntimeError
 static_getter_no_setter2_test/01: RuntimeError
 static_getter_no_setter3_test/01: RuntimeError
-super_call4_test: CompileTimeError
-super_getter_setter_test: CompileTimeError
+super_call4_test: RuntimeError
+super_getter_setter_test: RuntimeError
 super_test: RuntimeError
 switch_bad_case_test/01: MissingCompileTimeError
 switch_bad_case_test/02: MissingCompileTimeError
@@ -1063,6 +1058,28 @@
 switch_case_test/02: MissingCompileTimeError
 sync_generator2_test/41: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
 sync_generator2_test/52: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
+syntax_test/04: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/05: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/06: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/07: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/08: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/09: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/10: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/11: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/13: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/14: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/15: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/16: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/17: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/18: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/19: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/20: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/21: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/22: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/23: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/24: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/25: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
+syntax_test/26: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
 syntax_test/none: CompileTimeError
 top_level_getter_no_setter1_test/01: RuntimeError
 top_level_getter_no_setter2_test/01: RuntimeError
@@ -1089,7 +1106,6 @@
 call_nonexistent_constructor_test/01: RuntimeError
 call_type_literal_test/01: RuntimeError
 canonical_const2_test: RuntimeError
-canonical_const3_test: CompileTimeError
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
 class_cycle_test/03: MissingCompileTimeError
@@ -1101,9 +1117,7 @@
 config_import_test: RuntimeError
 const_error_multiply_initialized_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/04: MissingCompileTimeError
-const_evaluation_test/01: CompileTimeError
-const_evaluation_test/none: CompileTimeError
-const_factory_with_body_test/01: MissingCompileTimeError
+const_evaluation_test/01: RuntimeError
 const_instance_field_test/01: MissingCompileTimeError
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
@@ -1121,8 +1135,8 @@
 constructor_redirect2_negative_test: Crash # Issue 30856
 constructor_redirect_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(A.named2#x), local(A.named2#y), local(A.named2#z)) for j:constructor(A.named2).
 cyclic_constructor_test/01: Crash # Issue 30856
-deferred_constraints_constants_test/none: CompileTimeError
-deferred_constraints_constants_test/reference_after_load: CompileTimeError
+deferred_constraints_constants_test/none: RuntimeError
+deferred_constraints_constants_test/reference_after_load: RuntimeError
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
@@ -1139,7 +1153,7 @@
 duplicate_implements_test/04: MissingCompileTimeError
 dynamic_prefix_core_test/01: RuntimeError
 dynamic_prefix_core_test/none: RuntimeError
-enum_mirror_test: CompileTimeError
+enum_mirror_test: RuntimeError
 example_constructor_test: RuntimeError
 expect_test: RuntimeError
 external_test/10: MissingRuntimeError
@@ -1149,7 +1163,7 @@
 factory_redirection_test/07: MissingCompileTimeError
 fauxverride_test/03: MissingCompileTimeError
 fauxverride_test/05: MissingCompileTimeError
-field_increment_bailout_test: CompileTimeError
+field_increment_bailout_test: RuntimeError
 field_initialization_order_test: RuntimeError
 field_override3_test/00: MissingCompileTimeError
 field_override3_test/01: MissingCompileTimeError
@@ -1173,23 +1187,23 @@
 identical_closure2_test: RuntimeError
 if_null_assignment_behavior_test/14: RuntimeError
 infinity_test: RuntimeError
-instance_creation_in_function_annotation_test: CompileTimeError
+instance_creation_in_function_annotation_test: RuntimeError
 integer_division_by_zero_test: RuntimeError
 internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
-invocation_mirror2_test: CompileTimeError
+invocation_mirror2_test: RuntimeError
 invocation_mirror_empty_arguments_test: RuntimeError
-invocation_mirror_invoke_on2_test: CompileTimeError
-invocation_mirror_invoke_on_test: CompileTimeError
+invocation_mirror_invoke_on2_test: RuntimeError
+invocation_mirror_invoke_on_test: RuntimeError
 invocation_mirror_test: RuntimeError
 issue13474_test: RuntimeError
-issue21079_test: CompileTimeError
+issue21079_test: RuntimeError
 left_shift_test: RuntimeError
 library_env_test/has_mirror_support: RuntimeError
 library_env_test/has_no_html_support: RuntimeError
 library_env_test/has_no_io_support: RuntimeError
 list_literal4_test: RuntimeError
 main_not_a_function_test/01: CompileTimeError
-many_overridden_no_such_method_test: CompileTimeError
+many_overridden_no_such_method_test: RuntimeError
 map_literal4_test: RuntimeError
 method_override5_test: RuntimeError
 method_override7_test/00: MissingCompileTimeError
@@ -1311,11 +1325,11 @@
 named_parameters_type_test/03: MissingRuntimeError
 nan_identical_test: RuntimeError
 no_main_test/01: CompileTimeError
-no_such_method_test: CompileTimeError
-null_test/none: CompileTimeError
+no_such_method_test: RuntimeError
+null_test/none: RuntimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError
-overridden_no_such_method_test: CompileTimeError
+overridden_no_such_method_test: RuntimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
@@ -1332,12 +1346,11 @@
 redirecting_constructor_initializer_test: RuntimeError
 redirecting_factory_default_values_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/02: MissingCompileTimeError
-redirecting_factory_reflection_test: CompileTimeError
-regress_13462_0_test: CompileTimeError
-regress_13462_1_test: CompileTimeError
+redirecting_factory_reflection_test: RuntimeError
+regress_13462_1_test: RuntimeError
 regress_13494_test: RuntimeError
 regress_17382_test: RuntimeError
-regress_18535_test: CompileTimeError
+regress_18535_test: RuntimeError
 regress_20394_test/01: MissingCompileTimeError
 regress_22936_test/01: RuntimeError
 regress_23408_test: RuntimeError
@@ -1346,7 +1359,7 @@
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
 regress_28217_test/01: MissingCompileTimeError
 regress_28217_test/none: MissingCompileTimeError
-regress_28255_test: CompileTimeError
+regress_28255_test: RuntimeError
 setter_override_test/00: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
 stacktrace_demangle_ctors_test: RuntimeError # Issue 12698
@@ -1357,8 +1370,8 @@
 static_getter_no_setter1_test/01: RuntimeError
 static_getter_no_setter2_test/01: RuntimeError
 static_getter_no_setter3_test/01: RuntimeError
-super_call4_test: CompileTimeError
-super_getter_setter_test: CompileTimeError
+super_call4_test: RuntimeError
+super_getter_setter_test: RuntimeError
 super_test: RuntimeError
 switch_bad_case_test/01: MissingCompileTimeError
 switch_bad_case_test/02: MissingCompileTimeError
diff --git a/tests/language/language_kernel.status b/tests/language/language_kernel.status
index 7f1bb06..a7c5a89 100644
--- a/tests/language/language_kernel.status
+++ b/tests/language/language_kernel.status
@@ -20,7 +20,6 @@
 config_import_test: Crash
 const_error_multiply_initialized_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/04: MissingCompileTimeError
-const_factory_with_body_test/01: MissingCompileTimeError
 const_instance_field_test/01: MissingCompileTimeError
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
diff --git a/tests/language_2/bad_constructor_test.dart b/tests/language_2/bad_constructor_test.dart
index 6bc4f12..429da88 100644
--- a/tests/language_2/bad_constructor_test.dart
+++ b/tests/language_2/bad_constructor_test.dart
@@ -38,10 +38,17 @@
   E.setter();
 }
 
+// A constructor can't be static.
+class F {
+  static //# 07: compile-time error
+  F(){}
+}
+
 main() {
   new A();
   new B();
   new C.good();
   new D.good();
   new E.setter();
+  new F();
 }
diff --git a/tests/language_2/call_method_implicit_tear_off_nullable_test.dart b/tests/language_2/call_method_implicit_tear_off_nullable_test.dart
new file mode 100644
index 0000000..2b1050d
--- /dev/null
+++ b/tests/language_2/call_method_implicit_tear_off_nullable_test.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// Dart test program to test arithmetic operations.
+
+import "package:expect/expect.dart";
+
+class B {}
+
+class C {
+  B call(B b) => b;
+}
+
+typedef B BToB(B x);
+
+C c = null;
+
+void check(BToB f) {
+  Expect.isNull(f);
+}
+
+main() {
+  // The implicit tear-off of `.call` should be tolerant of `null`.
+  check(c); // Equivalent to `check(c?.call);`
+}
diff --git a/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_named_test.dart b/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_named_test.dart
index d3f7601..468077d 100644
--- a/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_named_test.dart
+++ b/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_named_test.dart
@@ -47,6 +47,6 @@
   // Annotation argument.
   // (Cannot check that it's const, just that it's accepted).
   @C.named(C<int>.named(42))
-  void foo() {}
-  foo();  // avoid "unused" hints.
+  var foo = null;
+  foo; // avoid "unused" hints.
 }
diff --git a/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_test.dart b/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_test.dart
index aeb663b..ffeb1fe 100644
--- a/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_test.dart
+++ b/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_test.dart
@@ -49,6 +49,6 @@
   // Annotation argument.
   // (Cannot check that it's const, just that it's accepted).
   @C(C<int>(42))
-  void foo() {}
-  foo(); // avoid "unused" hints.
+  var foo = null;
+  foo; // avoid "unused" hints.
 }
diff --git a/tests/language_2/implicit_creation/implicit_const_context_constructor_named_test.dart b/tests/language_2/implicit_creation/implicit_const_context_constructor_named_test.dart
index e523ca4..16345ab 100644
--- a/tests/language_2/implicit_creation/implicit_const_context_constructor_named_test.dart
+++ b/tests/language_2/implicit_creation/implicit_const_context_constructor_named_test.dart
@@ -49,6 +49,6 @@
   // Annotation argument.
   // (Cannot check that it's const, just that it's accepted).
   @C.named(C.named(42))
-  void foo() {}
-  foo(); // avoid "unused" hints.
+  var foo = null;
+  foo; // avoid "unused" hints.
 }
diff --git a/tests/language_2/implicit_creation/implicit_const_context_constructor_test.dart b/tests/language_2/implicit_creation/implicit_const_context_constructor_test.dart
index 6d24997..fec39c2 100644
--- a/tests/language_2/implicit_creation/implicit_const_context_constructor_test.dart
+++ b/tests/language_2/implicit_creation/implicit_const_context_constructor_test.dart
@@ -49,6 +49,6 @@
   // Annotation argument.
   // (Cannot check that it's const, just that it's accepted).
   @C(C(42))
-  void foo() {}
-  foo(); // avoid "unused" hints.
+  var foo = null;
+  foo; // avoid "unused" hints.
 }
diff --git a/tests/language_2/implicit_creation/implicit_const_context_list_test.dart b/tests/language_2/implicit_creation/implicit_const_context_list_test.dart
index 442cf74..c089d35 100644
--- a/tests/language_2/implicit_creation/implicit_const_context_list_test.dart
+++ b/tests/language_2/implicit_creation/implicit_const_context_list_test.dart
@@ -58,6 +58,6 @@
   // Annotation argument.
   // (Cannot check that it's const, just that it's accepted).
   @C(<int>[42])
-  void foo() {}
-  foo(); // avoid "unused" hints.
+  var foo = null;
+  foo; // avoid "unused" hints.
 }
diff --git a/tests/language_2/implicit_creation/implicit_const_context_map_test.dart b/tests/language_2/implicit_creation/implicit_const_context_map_test.dart
index 1ed8fe5..231bfc3 100644
--- a/tests/language_2/implicit_creation/implicit_const_context_map_test.dart
+++ b/tests/language_2/implicit_creation/implicit_const_context_map_test.dart
@@ -58,6 +58,6 @@
   // Annotation argument.
   // (Cannot check that it's const, just that it's accepted).
   @C(<int, int>{37: 87})
-  void foo() {}
-  foo(); // avoid "unused" hints.
+  var foo = null;
+  foo; // avoid "unused" hints.
 }
diff --git a/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_named_test.dart b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_named_test.dart
index 4ab25f6..0455aa7 100644
--- a/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_named_test.dart
+++ b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_named_test.dart
@@ -50,6 +50,6 @@
   // Annotation argument.
   // (Cannot check that it's const, just that it's accepted).
   @C.named(prefix.C<int>.named(42))
-  void foo() {}
-  foo();  // avoid "unused" hints.
+  var foo = null;
+  foo; // avoid "unused" hints.
 }
diff --git a/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_test.dart b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_test.dart
index 2933b77..e86289f 100644
--- a/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_test.dart
+++ b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_test.dart
@@ -51,6 +51,6 @@
   // Annotation argument.
   // (Cannot check that it's const, just that it's accepted).
   @C(prefix.C<int>(42))
-  void foo() {}
-  foo(); // avoid "unused" hints.
+  var foo = null;
+  foo; // avoid "unused" hints.
 }
diff --git a/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_named_test.dart b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_named_test.dart
index a865f0f..4ab1603 100644
--- a/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_named_test.dart
+++ b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_named_test.dart
@@ -51,6 +51,6 @@
   // Annotation argument.
   // (Cannot check that it's const, just that it's accepted).
   @C.named(prefix.C.named(42))
-  void foo() {}
-  foo(); // avoid "unused" hints.
+  var foo = null;
+  foo; // avoid "unused" hints.
 }
diff --git a/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_test.dart b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_test.dart
index 95edd04..cfd8fd1 100644
--- a/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_test.dart
+++ b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_test.dart
@@ -51,6 +51,6 @@
   // Annotation argument.
   // (Cannot check that it's const, just that it's accepted).
   @C(prefix.C(42))
-  void foo() {}
-  foo(); // avoid "unused" hints.
+  var foo = null;
+  foo; // avoid "unused" hints.
 }
diff --git a/tests/language_2/invalid_override_in_mixin_test.dart b/tests/language_2/invalid_override_in_mixin_test.dart
new file mode 100644
index 0000000..426dac0
--- /dev/null
+++ b/tests/language_2/invalid_override_in_mixin_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class A {
+  noSuchMethod() {} //                                   //# 01: compile-time error
+}
+
+class C extends Object with A {
+  test() {
+    print("Hello from test");
+  }
+}
+
+main() {
+  C c = new C();
+  c.test();
+  dynamic cc = c;
+  Expect.throwsNoSuchMethodError(() => cc.doesntExist());
+}
diff --git a/tests/language_2/invalid_type_argument_count_test.dart b/tests/language_2/invalid_type_argument_count_test.dart
new file mode 100644
index 0000000..7e9c351
--- /dev/null
+++ b/tests/language_2/invalid_type_argument_count_test.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test top level field.
+dynamic // Formatter shouldn't join this line.
+    <int> //           //# 01: compile-time error
+    x1 = 42;
+
+class Foo {
+  // Test class member.
+  dynamic // Formatter shouldn't join this line.
+      <int> //         //# 02: compile-time error
+      x2 = 42;
+
+  Foo() {
+    print(x2);
+  }
+}
+
+main() {
+  print(x1);
+
+  new Foo();
+
+  // Test local variable.
+  dynamic // Formatter shouldn't join this line.
+      <int> //         //# 03: compile-time error
+      x3 = 42;
+  print(x3);
+
+  foo(42);
+}
+
+// Test parameter.
+void foo(
+    dynamic // Formatter shouldn't join this line.
+        <int> //       //# 04: compile-time error
+        x4) {
+  print(x4);
+}
diff --git a/tests/language_2/issue_25671a_test.dart b/tests/language_2/issue_25671a_test.dart
deleted file mode 100644
index 17c7a1e..0000000
--- a/tests/language_2/issue_25671a_test.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:expect/expect.dart';
-
-class A {
-  noSuchMethod() { //                                   //# 01: static type warning
-    throw new Exception( //                             //# 01: continued
-        "Wrong noSuchMethod() should not be called"); //# 01: continued
-  } //                                                  //# 01: continued
-}
-
-class C extends A {
-  test() {
-    super.v = 1; //# 01: continued
-  }
-}
-
-main() {
-  C c = new C();
-  Expect.throwsNoSuchMethodError(() => c.test()); //# 01: continued
-}
diff --git a/tests/language_2/issue_25671b_test.dart b/tests/language_2/issue_25671b_test.dart
deleted file mode 100644
index 5fc62f4..0000000
--- a/tests/language_2/issue_25671b_test.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:expect/expect.dart';
-
-class A {
-  noSuchMethod() { //                                   //# 01: static type warning
-    throw new Exception( //                             //# 01: continued
-        "Wrong noSuchMethod() should not be called"); //# 01: continued
-  } //                                                  //# 01: continued
-}
-
-class C extends Object with A {
-  test() {
-    super.v = 1; //# 01: continued
-  }
-}
-
-main() {
-  C c = new C();
-  Expect.throwsNoSuchMethodError(() => c.test()); //# 01: continued
-}
diff --git a/tests/language_2/language_2.status b/tests/language_2/language_2.status
index 06cff1c..9828cc6 100644
--- a/tests/language_2/language_2.status
+++ b/tests/language_2/language_2.status
@@ -5,6 +5,29 @@
 [ $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
 
@@ -52,8 +75,6 @@
 compile_time_constant_static5_test/16: CompileTimeError # Issue 30546
 compile_time_constant_static5_test/21: CompileTimeError # Issue 30546
 compile_time_constant_static5_test/23: CompileTimeError # Issue 30546
-issue_25671a_test/01: CompileTimeError
-issue_25671b_test/01: CompileTimeError
 type_promotion_more_specific_test/04: CompileTimeError # Issue 30906.
 
 [ $compiler != dart2js && !$fasta && !$strong ]
@@ -99,29 +120,6 @@
 [ $compiler != dartdevc && !$checked ]
 function_type/*: Skip # Needs checked mode.
 
-[ $compiler != dartdevc && !$fasta && $strong ]
-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 != dartk && $compiler != dartkp && $mode == debug && $runtime == vm ]
 built_in_identifier_type_annotation_test/15: Crash # Not supported by legacy VM front-end.
 
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index 31ebcc6..bf6f7d9 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -56,6 +56,10 @@
 interface_static_method_negative_test: CompileTimeError
 interface_static_non_final_fields_negative_test: Fail # Issue 11594
 interface_test/00: MissingCompileTimeError
+invalid_type_argument_count_test/01: MissingCompileTimeError
+invalid_type_argument_count_test/02: MissingCompileTimeError
+invalid_type_argument_count_test/03: MissingCompileTimeError
+invalid_type_argument_count_test/04: MissingCompileTimeError
 is_not_class1_negative_test: CompileTimeError
 is_not_class4_negative_test: CompileTimeError
 issue1578_negative_test: CompileTimeError
@@ -1434,6 +1438,7 @@
 invalid_cast_test/09: MissingCompileTimeError
 invalid_cast_test/10: MissingCompileTimeError
 invalid_cast_test/11: MissingCompileTimeError
+invalid_override_in_mixin_test/01: MissingCompileTimeError
 invocation_mirror_test: StaticWarning
 issue13179_test: StaticWarning
 issue15606_test/none: StaticWarning # invalid use of void for dart 2, see also #32100
@@ -1583,6 +1588,12 @@
 object_has_no_call_method_test/05: MissingCompileTimeError
 object_has_no_call_method_test/08: MissingCompileTimeError
 override_inheritance_no_such_method_test/05: MissingCompileTimeError
+partial_tearoff_instantiation_test/01: MissingCompileTimeError
+partial_tearoff_instantiation_test/03: MissingCompileTimeError
+partial_tearoff_instantiation_test/05: MissingCompileTimeError
+partial_tearoff_instantiation_test/06: MissingCompileTimeError
+partial_tearoff_instantiation_test/07: MissingCompileTimeError
+partial_tearoff_instantiation_test/08: MissingCompileTimeError
 positional_parameters_type_test/01: MissingCompileTimeError
 positional_parameters_type_test/02: MissingCompileTimeError
 prefix13_negative_test: CompileTimeError, OK
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index f257594..18de4de 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -499,7 +499,6 @@
 const_error_multiply_initialized_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/04: MissingCompileTimeError
 const_evaluation_test/01: RuntimeError
-const_factory_with_body_test/01: MissingCompileTimeError
 const_init2_test/02: MissingCompileTimeError
 const_instance_field_test/01: MissingCompileTimeError
 const_map2_test/00: MissingCompileTimeError
@@ -910,23 +909,6 @@
 [ $compiler == dart2js && $dart2js_with_kernel ]
 async_error_timing_test: Crash
 bug31436_test: RuntimeError
-built_in_identifier_type_annotation_test/22: Crash # Issue 28815
-built_in_identifier_type_annotation_test/52: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/53: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/54: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/55: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/57: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/58: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/59: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/60: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/61: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/62: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/63: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/64: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/65: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/66: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/67: MissingCompileTimeError # Issue 28815
-built_in_identifier_type_annotation_test/68: MissingCompileTimeError # Issue 28815
 call_method_as_cast_test/01: RuntimeError
 call_method_as_cast_test/02: RuntimeError
 call_method_as_cast_test/03: RuntimeError
@@ -981,6 +963,13 @@
 mixin_type_parameter_inference_test/13: CompileTimeError
 mixin_type_parameter_inference_test/16: CompileTimeError
 mixin_type_parameter_inference_test/none: CompileTimeError
+partial_tearoff_instantiation_test/02: CompileTimeError
+partial_tearoff_instantiation_test/04: CompileTimeError
+partial_tearoff_instantiation_test/05: Pass # for the wrong reason.
+partial_tearoff_instantiation_test/06: Pass # for the wrong reason.
+partial_tearoff_instantiation_test/07: Pass # for the wrong reason.
+partial_tearoff_instantiation_test/08: Pass # for the wrong reason.
+partial_tearoff_instantiation_test/none: CompileTimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel && $fast_startup && $strong ]
 assertion_initializer_const_error2_test/none: CompileTimeError
@@ -1062,7 +1051,6 @@
 const_error_multiply_initialized_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/04: MissingCompileTimeError
 const_evaluation_test/01: RuntimeError
-const_factory_with_body_test/01: MissingCompileTimeError
 const_init2_test/02: MissingCompileTimeError
 const_instance_field_test/01: MissingCompileTimeError
 const_map2_test/00: MissingCompileTimeError
@@ -1397,11 +1385,9 @@
 abstract_getter_test/01: MissingCompileTimeError
 abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
 abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError
-abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError
 abstract_syntax_test/00: MissingCompileTimeError
 additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
 additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
-additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
 argument_assignability_function_typed_test/03: RuntimeError
 argument_assignability_function_typed_test/04: RuntimeError
 argument_assignability_function_typed_test/05: RuntimeError
@@ -1458,12 +1444,6 @@
 await_for_use_local_test: RuntimeError
 await_not_started_immediately_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).
 await_test: RuntimeError
-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/01: MissingCompileTimeError
 bad_override_test/02: MissingCompileTimeError
 bad_override_test/03: MissingCompileTimeError
@@ -1509,14 +1489,9 @@
 config_import_test: RuntimeError
 const_constructor2_test/11: CompileTimeError
 const_constructor2_test/12: CompileTimeError
-const_constructor2_test/20: MissingCompileTimeError
-const_constructor2_test/22: MissingCompileTimeError
-const_constructor2_test/24: MissingCompileTimeError
 const_constructor3_test/03: CompileTimeError
 const_dynamic_type_literal_test/02: MissingCompileTimeError
-const_evaluation_test/01: CompileTimeError
-const_evaluation_test/none: CompileTimeError
-const_factory_with_body_test/01: MissingCompileTimeError
+const_evaluation_test/01: RuntimeError
 const_instance_field_test/01: MissingCompileTimeError
 const_list_test: RuntimeError
 const_map2_test/00: MissingCompileTimeError
@@ -1557,8 +1532,8 @@
 cyclic_typedef_test/11: Crash # Stack Overflow
 default_factory2_test/01: MissingCompileTimeError
 default_factory_test/01: MissingCompileTimeError
-deferred_constraints_constants_test/none: CompileTimeError
-deferred_constraints_constants_test/reference_after_load: CompileTimeError
+deferred_constraints_constants_test/none: RuntimeError
+deferred_constraints_constants_test/reference_after_load: RuntimeError
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
@@ -1574,7 +1549,7 @@
 duplicate_implements_test/02: MissingCompileTimeError
 dynamic_prefix_core_test/none: CompileTimeError
 emit_const_fields_test: CompileTimeError
-enum_mirror_test: CompileTimeError
+enum_mirror_test: RuntimeError
 example_constructor_test: RuntimeError
 expect_test: RuntimeError
 external_test/10: MissingRuntimeError
@@ -1590,10 +1565,9 @@
 fauxverride_test/03: MissingCompileTimeError
 fauxverride_test/05: MissingCompileTimeError
 field3_test/01: MissingCompileTimeError
-field_increment_bailout_test: CompileTimeError
+field_increment_bailout_test: RuntimeError
 field_initialization_order_test/01: MissingCompileTimeError
 field_initialization_order_test/none: RuntimeError
-field_method4_test: MissingCompileTimeError
 field_override2_test: MissingCompileTimeError
 field_override3_test/00: MissingCompileTimeError
 field_override3_test/01: MissingCompileTimeError
@@ -1620,7 +1594,6 @@
 function_subtype_bound_closure7_test: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
 function_subtype_call1_test: RuntimeError
 function_subtype_call2_test: RuntimeError
-function_subtype_cast0_test: RuntimeError
 function_subtype_cast1_test: RuntimeError
 function_subtype_checked0_test: RuntimeError
 function_subtype_closure0_test: RuntimeError
@@ -1637,7 +1610,7 @@
 function_subtype_setter0_test: RuntimeError
 function_subtype_simple2_test: RuntimeError
 function_subtype_typearg5_test: RuntimeError
-function_type2_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(B.T) in (local(B.#)) for j:signature(B_closure.$signature).
+function_type2_test: RuntimeError
 function_type_alias2_test: RuntimeError
 function_type_alias4_test: RuntimeError
 function_type_alias_test: RuntimeError
@@ -1647,7 +1620,7 @@
 generic_closure_test/01: RuntimeError
 generic_closure_test/none: RuntimeError
 generic_field_mixin6_test/none: RuntimeError
-generic_function_bounds_test: Crash # Unsupported operation: Unsupported type parameter type node U.
+generic_function_bounds_test: RuntimeError
 generic_function_dcall_test: Crash # Unsupported operation: Unsupported type parameter type node T.
 generic_function_type_as_type_argument_test/01: MissingCompileTimeError
 generic_function_type_as_type_argument_test/02: MissingCompileTimeError
@@ -1699,7 +1672,7 @@
 infinity_test: RuntimeError
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
-instance_creation_in_function_annotation_test: CompileTimeError
+instance_creation_in_function_annotation_test: RuntimeError
 instantiate_tearoff_after_contravariance_check_test: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
 instantiate_tearoff_of_call_test: CompileTimeError
 instantiate_tearoff_test: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
@@ -1715,19 +1688,16 @@
 int64_literal_test/none: RuntimeError
 integer_division_by_zero_test: RuntimeError
 internal_library_test/02: Crash # type 'DillLibraryBuilder' is not a subtype of type 'SourceLibraryBuilder<KernelTypeBuilder, Library>' of 'value' where
-invocation_mirror2_test: CompileTimeError
-invocation_mirror_invoke_on2_test: CompileTimeError
-invocation_mirror_invoke_on_test: CompileTimeError
-invocation_mirror_test: CompileTimeError
+invocation_mirror2_test: RuntimeError
+invocation_mirror_invoke_on2_test: RuntimeError
+invocation_mirror_invoke_on_test: RuntimeError
 issue18628_2_test/01: MissingCompileTimeError
-issue21079_test: CompileTimeError
+issue21079_test: RuntimeError
 issue23244_test: RuntimeError
 issue31596_override_test/07: MissingCompileTimeError
 issue31596_override_test/08: MissingCompileTimeError
 issue31596_super_test/01: CompileTimeError
 issue31596_super_test/03: CompileTimeError
-issue_25671a_test/01: CompileTimeError
-issue_25671b_test/01: CompileTimeError
 known_identifier_usage_error_test/none: RuntimeError
 left_shift_test: RuntimeError
 library_env_test/has_mirror_support: RuntimeError
@@ -1736,8 +1706,6 @@
 library_prefixes_test: CompileTimeError
 local_function2_test/none: RuntimeError
 local_function3_test/none: RuntimeError
-local_function_test/01: MissingCompileTimeError
-local_function_test/02: MissingCompileTimeError
 local_function_test/none: RuntimeError
 main_test/03: RuntimeError
 main_test/20: RuntimeError
@@ -1760,7 +1728,7 @@
 malbounded_type_test_test/01: MissingCompileTimeError
 malbounded_type_test_test/02: MissingCompileTimeError
 many_generic_instanceof_test: RuntimeError
-many_overridden_no_such_method_test: CompileTimeError
+many_overridden_no_such_method_test: RuntimeError
 map_literal11_test/none: MissingRuntimeError
 map_literal3_test/01: MissingCompileTimeError
 map_literal3_test/02: MissingCompileTimeError
@@ -1882,31 +1850,22 @@
 named_constructor_test/01: MissingCompileTimeError
 named_parameters_default_eq_test/02: MissingCompileTimeError
 named_parameters_default_eq_test/none: RuntimeError
-named_parameters_test/02: MissingCompileTimeError
-named_parameters_test/04: MissingCompileTimeError
-named_parameters_test/06: MissingCompileTimeError
-named_parameters_test/08: MissingCompileTimeError
-named_parameters_test/10: MissingCompileTimeError
 nan_identical_test: RuntimeError
 nested_generic_closure_test: RuntimeError
 no_main_test/01: CompileTimeError
 no_such_method_mock_test: RuntimeError
-no_such_method_test: CompileTimeError
+no_such_method_test: RuntimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError
 null_no_such_method_test: CompileTimeError
-null_test/mirrors: CompileTimeError
-null_test/none: CompileTimeError
+null_test/mirrors: RuntimeError
+null_test/none: RuntimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError
 operator2_negative_test: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
 operator4_test: RuntimeError
 operator_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.
-optional_named_parameters_test/02: MissingCompileTimeError
-optional_named_parameters_test/04: MissingCompileTimeError
-optional_named_parameters_test/06: MissingCompileTimeError
-optional_named_parameters_test/08: MissingCompileTimeError
-overridden_no_such_method_test: CompileTimeError
+overridden_no_such_method_test: RuntimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
@@ -1943,8 +1902,6 @@
 override_inheritance_field_test/53: MissingCompileTimeError
 override_inheritance_field_test/54: MissingCompileTimeError
 override_inheritance_generic_test/02: CompileTimeError
-override_inheritance_method_test/17: CompileTimeError
-override_inheritance_method_test/18: CompileTimeError
 override_inheritance_method_test/28: CompileTimeError
 override_inheritance_method_test/29: CompileTimeError
 override_inheritance_mixed_test/01: MissingCompileTimeError
@@ -1965,16 +1922,21 @@
 override_inheritance_no_such_method_test/13: MissingCompileTimeError
 override_method_with_field_test/01: MissingCompileTimeError
 parser_quirks_test: CompileTimeError
+partial_tearoff_instantiation_test/02: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
+partial_tearoff_instantiation_test/04: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
+partial_tearoff_instantiation_test/05: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
+partial_tearoff_instantiation_test/06: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
+partial_tearoff_instantiation_test/07: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
+partial_tearoff_instantiation_test/08: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
+partial_tearoff_instantiation_test/none: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
 prefix5_negative_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.
 redirecting_factory_default_values_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/02: MissingCompileTimeError
-redirecting_factory_default_values_test/03: MissingCompileTimeError
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
-redirecting_factory_reflection_test: CompileTimeError
-regress_13462_0_test: CompileTimeError
-regress_13462_1_test: CompileTimeError
-regress_18535_test: CompileTimeError
+redirecting_factory_reflection_test: RuntimeError
+regress_13462_1_test: RuntimeError
+regress_18535_test: RuntimeError
 regress_23089_test: Crash # Stack Overflow
 regress_23408_test: CompileTimeError
 regress_23996_test: RuntimeError
@@ -1982,14 +1944,13 @@
 regress_24935_test/none: RuntimeError
 regress_26175_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).
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
-regress_28255_test: CompileTimeError
+regress_28255_test: RuntimeError
 regress_29025_test: CompileTimeError
 regress_29405_test: CompileTimeError
 regress_29784_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in () for j:constructor(A.ok).
 regress_29784_test/02: MissingCompileTimeError # Issue 29784
 regress_30339_test: CompileTimeError
 regress_31591_test: RuntimeError
-regress_32012_test: Crash # Unsupported operation: Unsupported type parameter type node B.
 runtime_type_function_test: RuntimeError
 setter4_test: MissingCompileTimeError
 setter_no_getter_test/01: CompileTimeError
@@ -2100,7 +2061,7 @@
 vm/optimization_test: RuntimeError
 vm/optimized_guarded_field_isolates_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).
 vm/optimized_list_constructor_test: RuntimeError
-vm/reflect_core_vm_test: CompileTimeError
+vm/reflect_core_vm_test: RuntimeError
 vm/regress_22480_test: RuntimeError
 vm/regress_23238_test: RuntimeError
 vm/regress_27201_test: CompileTimeError
@@ -2265,9 +2226,7 @@
 const_constructor2_test/12: CompileTimeError
 const_constructor3_test/03: CompileTimeError
 const_dynamic_type_literal_test/02: MissingCompileTimeError
-const_evaluation_test/01: CompileTimeError
-const_evaluation_test/none: CompileTimeError
-const_factory_with_body_test/01: MissingCompileTimeError
+const_evaluation_test/01: RuntimeError
 const_instance_field_test/01: MissingCompileTimeError
 const_list_test: RuntimeError
 const_map2_test/00: MissingCompileTimeError
@@ -2308,8 +2267,8 @@
 cyclic_typedef_test/11: Crash # Stack Overflow
 default_factory2_test/01: MissingCompileTimeError
 default_factory_test/01: MissingCompileTimeError
-deferred_constraints_constants_test/none: CompileTimeError
-deferred_constraints_constants_test/reference_after_load: CompileTimeError
+deferred_constraints_constants_test/none: RuntimeError
+deferred_constraints_constants_test/reference_after_load: RuntimeError
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
@@ -2325,7 +2284,7 @@
 duplicate_implements_test/02: MissingCompileTimeError
 dynamic_prefix_core_test/none: CompileTimeError
 emit_const_fields_test: CompileTimeError
-enum_mirror_test: CompileTimeError
+enum_mirror_test: RuntimeError
 example_constructor_test: RuntimeError
 expect_test: RuntimeError
 external_test/10: MissingRuntimeError
@@ -2342,7 +2301,7 @@
 fauxverride_test/03: MissingCompileTimeError
 fauxverride_test/05: MissingCompileTimeError
 field3_test/01: MissingCompileTimeError
-field_increment_bailout_test: CompileTimeError
+field_increment_bailout_test: RuntimeError
 field_initialization_order_test/01: MissingCompileTimeError
 field_initialization_order_test/none: RuntimeError
 field_override2_test: MissingCompileTimeError
@@ -2387,7 +2346,7 @@
 function_subtype_setter0_test: RuntimeError
 function_subtype_simple2_test: RuntimeError
 function_subtype_typearg5_test: RuntimeError
-function_type2_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(B.T) in (local(B.#)) for j:signature(B_closure.$signature).
+function_type2_test: RuntimeError
 function_type_alias2_test: RuntimeError
 function_type_alias4_test: RuntimeError
 function_type_alias_test: RuntimeError
@@ -2395,7 +2354,7 @@
 function_type_test: RuntimeError
 generic_async_star_test: RuntimeError
 generic_field_mixin6_test/none: RuntimeError
-generic_function_bounds_test: Crash # Unsupported operation: Unsupported type parameter type node U.
+generic_function_bounds_test: RuntimeError
 generic_function_dcall_test: RuntimeError
 generic_function_type_as_type_argument_test/01: MissingCompileTimeError
 generic_function_type_as_type_argument_test/02: MissingCompileTimeError
@@ -2446,7 +2405,7 @@
 infinity_test: RuntimeError
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
-instance_creation_in_function_annotation_test: CompileTimeError
+instance_creation_in_function_annotation_test: RuntimeError
 instantiate_tearoff_of_call_test: CompileTimeError
 int64_literal_test/01: RuntimeError
 int64_literal_test/02: RuntimeError
@@ -2460,19 +2419,17 @@
 int64_literal_test/none: RuntimeError
 integer_division_by_zero_test: RuntimeError
 internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
-invocation_mirror2_test: CompileTimeError
-invocation_mirror_invoke_on2_test: CompileTimeError
-invocation_mirror_invoke_on_test: CompileTimeError
+invocation_mirror2_test: RuntimeError
+invocation_mirror_invoke_on2_test: RuntimeError
+invocation_mirror_invoke_on_test: RuntimeError
 invocation_mirror_test: RuntimeError
 issue18628_2_test/01: MissingCompileTimeError
-issue21079_test: CompileTimeError
+issue21079_test: RuntimeError
 issue23244_test: RuntimeError
 issue31596_override_test/07: MissingCompileTimeError
 issue31596_override_test/08: MissingCompileTimeError
 issue31596_super_test/01: CompileTimeError
 issue31596_super_test/03: CompileTimeError
-issue_25671a_test/01: CompileTimeError
-issue_25671b_test/01: CompileTimeError
 known_identifier_usage_error_test/none: RuntimeError
 left_shift_test: RuntimeError
 library_env_test/has_mirror_support: RuntimeError
@@ -2503,7 +2460,7 @@
 malbounded_type_test_test/01: MissingCompileTimeError
 malbounded_type_test_test/02: MissingCompileTimeError
 many_generic_instanceof_test: RuntimeError
-many_overridden_no_such_method_test: CompileTimeError
+many_overridden_no_such_method_test: RuntimeError
 map_literal11_test/none: MissingRuntimeError
 map_literal3_test/01: MissingCompileTimeError
 map_literal3_test/02: MissingCompileTimeError
@@ -2634,16 +2591,16 @@
 no_main_test/01: CompileTimeError
 no_such_method_mock_test: RuntimeError
 no_such_method_native_test: RuntimeError
-no_such_method_test: CompileTimeError
+no_such_method_test: RuntimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError
 null_no_such_method_test: CompileTimeError
-null_test/mirrors: CompileTimeError
-null_test/none: CompileTimeError
+null_test/mirrors: RuntimeError
+null_test/none: RuntimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError
 operator4_test: RuntimeError
-overridden_no_such_method_test: CompileTimeError
+overridden_no_such_method_test: RuntimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
@@ -2680,8 +2637,6 @@
 override_inheritance_field_test/53: MissingCompileTimeError
 override_inheritance_field_test/54: MissingCompileTimeError
 override_inheritance_generic_test/02: CompileTimeError
-override_inheritance_method_test/17: CompileTimeError
-override_inheritance_method_test/18: CompileTimeError
 override_inheritance_method_test/28: CompileTimeError
 override_inheritance_method_test/29: CompileTimeError
 override_inheritance_mixed_test/01: MissingCompileTimeError
@@ -2707,10 +2662,9 @@
 redirecting_factory_default_values_test/02: MissingCompileTimeError
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
-redirecting_factory_reflection_test: CompileTimeError
-regress_13462_0_test: CompileTimeError
-regress_13462_1_test: CompileTimeError
-regress_18535_test: CompileTimeError
+redirecting_factory_reflection_test: RuntimeError
+regress_13462_1_test: RuntimeError
+regress_18535_test: RuntimeError
 regress_21795_test: RuntimeError
 regress_23089_test: Crash # Stack Overflow
 regress_23408_test: CompileTimeError
@@ -2719,14 +2673,13 @@
 regress_24935_test/none: RuntimeError
 regress_26175_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).
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
-regress_28255_test: CompileTimeError
+regress_28255_test: RuntimeError
 regress_29025_test: CompileTimeError
 regress_29405_test: CompileTimeError
 regress_29784_test/01: Crash # Issue 29784
 regress_29784_test/02: MissingCompileTimeError # Issue 29784
 regress_30339_test: CompileTimeError
 regress_31591_test: RuntimeError
-regress_32012_test: Crash # Issue 32078
 runtime_type_function_test: RuntimeError
 setter4_test: MissingCompileTimeError
 setter_no_getter_test/01: CompileTimeError
@@ -2815,12 +2768,11 @@
 vm/optimization_test: RuntimeError
 vm/optimized_guarded_field_isolates_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).
 vm/optimized_list_constructor_test: RuntimeError
-vm/reflect_core_vm_test: CompileTimeError
+vm/reflect_core_vm_test: RuntimeError
 vm/regress_22480_test: RuntimeError
 vm/regress_23238_test: RuntimeError
 vm/regress_27201_test: CompileTimeError
 vm/regress_28325_test: RuntimeError
-vm/regress_32204_test: Crash
 vm/store_to_load_forwarding_phis_vm_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).
 vm/type_cast_vm_test: RuntimeError
 vm/type_vm_test/28: MissingRuntimeError
@@ -2906,23 +2858,6 @@
 bad_typedef_test/00: Crash # Issue 28214
 bug31436_test: RuntimeError
 built_in_identifier_prefix_test: CompileTimeError
-built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Error only in strong mode
-built_in_identifier_type_annotation_test/52: Crash # Issue 28815
-built_in_identifier_type_annotation_test/53: Crash # Issue 28815
-built_in_identifier_type_annotation_test/54: Crash # Issue 28815
-built_in_identifier_type_annotation_test/55: Crash # Issue 28815
-built_in_identifier_type_annotation_test/57: Crash # Issue 28815
-built_in_identifier_type_annotation_test/58: Crash # Issue 28815
-built_in_identifier_type_annotation_test/59: Crash # Issue 28815
-built_in_identifier_type_annotation_test/60: Crash # Issue 28815
-built_in_identifier_type_annotation_test/61: Crash # Issue 28815
-built_in_identifier_type_annotation_test/62: Crash # Issue 28815
-built_in_identifier_type_annotation_test/63: Crash # Issue 28815
-built_in_identifier_type_annotation_test/64: Crash # Issue 28815
-built_in_identifier_type_annotation_test/65: Crash # Issue 28815
-built_in_identifier_type_annotation_test/66: Crash # Issue 28815
-built_in_identifier_type_annotation_test/67: Crash # Issue 28815
-built_in_identifier_type_annotation_test/68: Crash # Issue 28815
 call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
 call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
 call_constructor_on_unresolvable_class_test/03: MissingCompileTimeError
@@ -3271,6 +3206,7 @@
 int64_literal_test/*: Skip # This is testing Dart 2.0 int64 semantics.
 integer_division_by_zero_test: RuntimeError # Issue 8301
 interface_test/00: MissingCompileTimeError
+invalid_override_in_mixin_test/01: MissingCompileTimeError
 invocation_mirror2_test: RuntimeError # Issue 6490 (wrong retval).
 issue31596_override_test/05: MissingCompileTimeError
 issue31596_override_test/06: MissingCompileTimeError
@@ -3592,6 +3528,14 @@
 override_inheritance_no_such_method_test/13: MissingCompileTimeError
 override_method_with_field_test/02: MissingCompileTimeError
 part2_test/01: MissingCompileTimeError
+partial_tearoff_instantiation_test/01: MissingCompileTimeError
+partial_tearoff_instantiation_test/02: MissingRuntimeError
+partial_tearoff_instantiation_test/03: MissingCompileTimeError
+partial_tearoff_instantiation_test/04: MissingRuntimeError
+partial_tearoff_instantiation_test/05: MissingCompileTimeError
+partial_tearoff_instantiation_test/06: MissingCompileTimeError
+partial_tearoff_instantiation_test/07: MissingCompileTimeError
+partial_tearoff_instantiation_test/08: MissingCompileTimeError
 positional_parameters_type_test/01: MissingCompileTimeError
 positional_parameters_type_test/02: MissingCompileTimeError
 prefix16_test/00: MissingCompileTimeError
@@ -3692,8 +3636,7 @@
 try_catch_on_syntax_test/07: MissingCompileTimeError
 try_catch_on_syntax_test/10: Fail # Issue 19823
 try_catch_on_syntax_test/10: MissingCompileTimeError
-try_catch_on_syntax_test/11: MissingCompileTimeError
-try_catch_on_syntax_test/11: Fail # Issue 19823
+try_catch_on_syntax_test/11: MissingCompileTimeError, Fail # Issue 19823
 try_catch_syntax_test/08: MissingCompileTimeError
 type_checks_in_factory_method_test/01: MissingCompileTimeError
 type_inference_accessor_ref_test/03: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index ca259ad..e41601c 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -1,8 +1,8 @@
 # Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
-# Sections in this file should contain "$compiler == dartdevc" or dartdevk.
 
+# Sections in this file should contain "$compiler == dartdevc" or dartdevk.
 [ $compiler == dartdevc ]
 abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError # Issue #30568
 accessor_conflict_export2_test: CompileTimeError # Issue 25626
@@ -12,6 +12,14 @@
 accessor_conflict_import_prefixed_test: CompileTimeError # Issue 25626
 accessor_conflict_import_test: CompileTimeError # Issue 25626
 additional_interface_adds_optional_args_test: CompileTimeError # Issue #30568
+assertion_test: RuntimeError # Issue 30326; Expect.equals(expected: <1>, actual: <0>) fails.
+async_star_test/01: RuntimeError
+async_star_test/03: RuntimeError
+async_star_test/04: RuntimeError
+async_star_test/05: RuntimeError
+async_star_test/none: RuntimeError
+await_future_test: Pass, Timeout # Issue 29920
+bit_operations_test: RuntimeError # No bigints on web.
 black_listed_test/none: Fail # Issue 14228
 built_in_identifier_prefix_test: CompileTimeError
 built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Issue 28816
@@ -46,23 +54,31 @@
 cascaded_forwarding_stubs_generic_test: RuntimeError
 cascaded_forwarding_stubs_test: CompileTimeError
 conflicting_type_variable_and_setter_test: CompileTimeError
+const_evaluation_test/01: RuntimeError # Issue 29920
 const_for_in_variable_test/01: MissingCompileTimeError
 const_types_test/07: MissingCompileTimeError
 const_types_test/08: MissingCompileTimeError
 const_types_test/14: MissingCompileTimeError
 const_types_test/15: MissingCompileTimeError
 constant_type_literal_test/01: MissingCompileTimeError # DDC allows type parameter type literals in const expressions.
+covariance_field_test/03: RuntimeError
+covariant_override/tear_off_type_test: RuntimeError # Issue 28395
 default_implementation2_test: CompileTimeError # Issue 30855
+deferred_load_library_wrong_args_test/01: MissingRuntimeError, RuntimeError # Issue 29920
 double_identical_test: RuntimeError # Negative and positive zero are distinct, but not in ddc
 emit_const_fields_test: CompileTimeError
 enum_syntax_test/05: MissingCompileTimeError
 enum_syntax_test/06: MissingCompileTimeError
+execute_finally6_test: RuntimeError # Issue 29920
+expect_test: RuntimeError # Issue 29920
 export_private_test/01: MissingCompileTimeError # Issue 29920
+f_bounded_quantification3_test: RuntimeError # Issue 29920
 field_wierd_name_test: Crash
 final_syntax_test/01: MissingCompileTimeError
 final_syntax_test/02: MissingCompileTimeError
 final_syntax_test/03: MissingCompileTimeError
 final_syntax_test/04: MissingCompileTimeError
+forwarding_stub_tearoff_generic_test: RuntimeError
 forwarding_stub_tearoff_test: CompileTimeError
 function_propagation_test: RuntimeError
 fuzzy_arrows_test/01: MissingCompileTimeError
@@ -72,6 +88,7 @@
 generic_methods_overriding_test/03: MissingCompileTimeError # Issue 29920
 generic_no_such_method_dispatcher_simple_test: Skip # This test is just for kernel.
 generic_no_such_method_dispatcher_test: CompileTimeError
+getter_closure_execution_order_test: RuntimeError # Issue 29920
 getter_setter_in_lib_test: CompileTimeError
 implicit_creation/implicit_const_context_constructor_generic_named_test: CompileTimeError
 implicit_creation/implicit_const_context_constructor_generic_test: CompileTimeError
@@ -79,6 +96,9 @@
 implicit_creation/implicit_const_context_prefix_constructor_generic_test: CompileTimeError
 implicit_creation/implicit_new_or_const_composite_test: RuntimeError
 implicit_creation/implicit_new_or_const_generic_test: RuntimeError
+implicit_downcast_during_compound_assignment_test: RuntimeError
+implicit_downcast_during_indexed_compound_assignment_test: RuntimeError
+implicit_downcast_during_indexed_if_null_assignment_test: RuntimeError
 import_core_prefix_test: CompileTimeError
 import_private_test/01: MissingCompileTimeError # Issue 29920
 initializing_formal_final_test: MissingCompileTimeError
@@ -86,6 +106,10 @@
 instantiate_tearoff_of_call_test: RuntimeError
 interface_test/00: MissingCompileTimeError
 internal_library_test/01: MissingCompileTimeError # Issue 29920
+invalid_type_argument_count_test/01: MissingCompileTimeError
+invalid_type_argument_count_test/02: MissingCompileTimeError
+invalid_type_argument_count_test/03: MissingCompileTimeError
+invalid_type_argument_count_test/04: MissingCompileTimeError
 issue15606_test/none: CompileTimeError
 issue31596_implement_covariant_test: CompileTimeError
 issue31596_override_test/01: CompileTimeError
@@ -99,13 +123,21 @@
 issue31596_super_test/none: CompileTimeError
 issue31596_tearoff_test: CompileTimeError
 issue31596_test: CompileTimeError
+label_test: RuntimeError
+lazy_static3_test: RuntimeError # Issue 30852
+lazy_static8_test: RuntimeError # Issue 30852
+left_shift_test: RuntimeError # Ints and doubles are unified.
+library_env_test/has_io_support: RuntimeError # Intended to fail, bool.fromEnvironment("dart.library.async") is false
+library_env_test/has_mirror_support: RuntimeError # Intended to fail, bool.fromEnvironment("dart.library.async") is false
+library_env_test/has_no_html_support: RuntimeError # Intended to fail, bool.fromEnvironment("dart.library.async") is false
 method_override_test: CompileTimeError # Negative test
 mixin_super_2_test/01: MissingCompileTimeError
 mixin_super_2_test/03: MissingCompileTimeError
+mixin_super_test: RuntimeError
+mixin_super_use_test: RuntimeError
 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/02: RuntimeError # should be CompileTimeError, fuzzy arrows
 mixin_type_parameter_inference_previous_mixin_test/03: MissingCompileTimeError # fuzzy arrows
 mixin_type_parameter_inference_previous_mixin_test/04: MissingCompileTimeError
@@ -125,6 +157,9 @@
 multiline_newline_test/01r: CompileTimeError
 multiline_newline_test/02: CompileTimeError
 multiline_newline_test/02r: CompileTimeError
+multiline_newline_test/03: RuntimeError
+multiline_newline_test/03r: RuntimeError
+multiline_newline_test/none: RuntimeError
 multiple_interface_inheritance_test: CompileTimeError # Issue 30552
 nested_generic_closure_test: CompileTimeError
 override_inheritance_field_test/04: CompileTimeError
@@ -144,19 +179,31 @@
 prefix10_negative_test: Fail # Issue 29920
 private_access_test/04: MissingCompileTimeError
 regress_23408_test: CompileTimeError
+regress_24283_test: RuntimeError # Intended to fail, requires 64-bit numbers.
 regress_29025_test: CompileTimeError # Issue 29081
 regress_29349_test: CompileTimeError # Issue 31093
 regress_29405_test: CompileTimeError # Issue 29421
+regress_29784_test/02: Crash # assert initializers not implemented
 regress_29784_test/02: MissingCompileTimeError
 regress_30121_test: CompileTimeError # Issue 31087
 regress_30339_test: CompileTimeError # As expected. Should we make this a multi test?
 reify_typevar_static_test/00: MissingCompileTimeError # Issue 29920
+stacktrace_test: RuntimeError # Issue 29920
 string_interpolate_test: CompileTimeError
 string_split_test: CompileTimeError
 string_supertype_checked_test: CompileTimeError
 super_bound_closure_test/none: CompileTimeError
+super_call4_test: RuntimeError
+super_no_such_method1_test: RuntimeError
+super_no_such_method2_test: RuntimeError
+super_no_such_method3_test: RuntimeError
+super_no_such_method4_test: RuntimeError
+super_operator_index5_test: RuntimeError
+super_operator_index7_test: RuntimeError
+super_operator_index8_test: RuntimeError
 switch_case_test/none: CompileTimeError
 syntax_test/none: CompileTimeError
+truncdiv_test: RuntimeError # Issue 29920
 try_catch_on_syntax_test/10: MissingCompileTimeError
 try_catch_on_syntax_test/11: MissingCompileTimeError
 type_inference_circularity_test: MissingCompileTimeError
@@ -288,23 +335,6 @@
 bad_override_test/04: MissingCompileTimeError
 bad_override_test/05: MissingCompileTimeError
 built_in_identifier_type_annotation_test/05: RuntimeError # Issue 32194
-built_in_identifier_type_annotation_test/22: Crash # Crashes in Fasta, issue 31416
-built_in_identifier_type_annotation_test/52: MissingCompileTimeError
-built_in_identifier_type_annotation_test/53: MissingCompileTimeError
-built_in_identifier_type_annotation_test/54: MissingCompileTimeError
-built_in_identifier_type_annotation_test/55: MissingCompileTimeError
-built_in_identifier_type_annotation_test/57: MissingCompileTimeError
-built_in_identifier_type_annotation_test/58: MissingCompileTimeError
-built_in_identifier_type_annotation_test/59: MissingCompileTimeError
-built_in_identifier_type_annotation_test/60: MissingCompileTimeError
-built_in_identifier_type_annotation_test/61: MissingCompileTimeError
-built_in_identifier_type_annotation_test/62: MissingCompileTimeError
-built_in_identifier_type_annotation_test/63: MissingCompileTimeError
-built_in_identifier_type_annotation_test/64: MissingCompileTimeError
-built_in_identifier_type_annotation_test/65: MissingCompileTimeError
-built_in_identifier_type_annotation_test/66: MissingCompileTimeError
-built_in_identifier_type_annotation_test/67: MissingCompileTimeError
-built_in_identifier_type_annotation_test/68: MissingCompileTimeError
 built_in_identifier_type_annotation_test/none: RuntimeError # Issue 32194
 call_method_as_cast_test/01: RuntimeError
 call_method_as_cast_test/02: RuntimeError
@@ -352,7 +382,6 @@
 const_constructor3_test/04: MissingCompileTimeError
 const_constructor_nonconst_field_test/01: MissingCompileTimeError
 const_dynamic_type_literal_test/02: MissingCompileTimeError
-const_factory_with_body_test/01: MissingCompileTimeError
 const_instance_field_test/01: MissingCompileTimeError
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
@@ -433,7 +462,6 @@
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
 instantiate_tearoff_of_call_test: CompileTimeError
-invocation_mirror_test: CompileTimeError # Issue 31402 Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Invocation'.
 issue18628_2_test/01: MissingCompileTimeError
 issue31596_override_test/07: MissingCompileTimeError
 issue31596_override_test/08: MissingCompileTimeError
@@ -442,8 +470,6 @@
 issue31596_super_test/03: CompileTimeError
 issue31596_super_test/04: MissingCompileTimeError
 issue31596_super_test/05: RuntimeError
-issue_25671a_test/01: CompileTimeError # Warning: The method 'A::noSuchMethod' has fewer positional arguments than those of overridden method 'Object::noSuchMethod'.
-issue_25671b_test/01: CompileTimeError # Warning: The method 'A::noSuchMethod' has fewer positional arguments than those of overridden method 'Object::noSuchMethod'.
 library_env_test/has_io_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
 library_env_test/has_mirror_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
 library_env_test/has_no_html_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
@@ -583,8 +609,6 @@
 override_inheritance_field_test/53: MissingCompileTimeError
 override_inheritance_field_test/54: MissingCompileTimeError
 override_inheritance_generic_test/02: CompileTimeError # Issue 31616
-override_inheritance_method_test/17: CompileTimeError
-override_inheritance_method_test/18: CompileTimeError
 override_inheritance_method_test/28: CompileTimeError # Issue 31616
 override_inheritance_method_test/29: CompileTimeError # Issue 31616
 override_inheritance_mixed_test/01: MissingCompileTimeError
@@ -684,52 +708,6 @@
 void_type_usage_test/conditional_return_to_void: MissingCompileTimeError, Crash
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 
-[ $compiler == dartdevc && $runtime != none ]
-assertion_test: RuntimeError # Issue 30326; Expect.equals(expected: <1>, actual: <0>) fails.
-async_star_test/01: RuntimeError
-async_star_test/03: RuntimeError
-async_star_test/04: RuntimeError
-async_star_test/05: RuntimeError
-async_star_test/none: RuntimeError
-await_future_test: Pass, Timeout # Issue 29920
-bit_operations_test: RuntimeError # No bigints on web.
-const_evaluation_test/01: RuntimeError # Issue 29920
-covariance_field_test/03: RuntimeError
-covariant_override/tear_off_type_test: RuntimeError # Issue 28395
-deferred_load_library_wrong_args_test/01: MissingRuntimeError, RuntimeError # Issue 29920
-execute_finally6_test: RuntimeError # Issue 29920
-expect_test: RuntimeError # Issue 29920
-f_bounded_quantification3_test: RuntimeError # Issue 29920
-forwarding_stub_tearoff_generic_test: RuntimeError
-getter_closure_execution_order_test: RuntimeError # Issue 29920
-implicit_downcast_during_compound_assignment_test: RuntimeError
-implicit_downcast_during_indexed_compound_assignment_test: RuntimeError
-implicit_downcast_during_indexed_if_null_assignment_test: RuntimeError
-label_test: RuntimeError
-lazy_static3_test: RuntimeError # Issue 30852
-lazy_static8_test: RuntimeError # Issue 30852
-left_shift_test: RuntimeError # Ints and doubles are unified.
-library_env_test/has_io_support: RuntimeError, OK
-library_env_test/has_mirror_support: RuntimeError, OK
-library_env_test/has_no_html_support: RuntimeError, OK
-mixin_super_test: RuntimeError
-mixin_super_use_test: RuntimeError
-multiline_newline_test/03: RuntimeError
-multiline_newline_test/03r: RuntimeError
-multiline_newline_test/none: RuntimeError
-regress_24283_test: RuntimeError, OK # Requires 64 bit numbers.
-regress_29784_test/02: Crash # assert initializers not implemented
-stacktrace_test: RuntimeError # Issue 29920
-super_call4_test: RuntimeError
-super_no_such_method1_test: RuntimeError
-super_no_such_method2_test: RuntimeError
-super_no_such_method3_test: RuntimeError
-super_no_such_method4_test: RuntimeError
-super_operator_index5_test: RuntimeError
-super_operator_index7_test: RuntimeError
-super_operator_index8_test: RuntimeError
-truncdiv_test: RuntimeError # Issue 29920
-
 [ $compiler == dartdevk && $checked ]
 assertion_initializer_const_error2_test/*: MissingCompileTimeError
 assertion_initializer_const_error2_test/none: Pass
@@ -738,10 +716,6 @@
 [ $compiler == dartdevk && !$checked ]
 assertion_initializer_const_error2_test/*: SkipByDesign # DDC does not support non-checked mode.
 
-# Compiler tests for dartdevc and dartdevk.  These contain common expectations
-# for all runtimes including $runtime == none.  They are organized by: shared
-# expectations for dartdevc and dartdevk, then expectations for dartdevc, and
-# then expectations for dartdevk.
 [ $compiler == dartdevc || $compiler == dartdevk ]
 abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError # Issue #30568
 abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError # Issue #30568
diff --git a/tests/language_2/language_2_flutter.status b/tests/language_2/language_2_flutter.status
index 8ed9601..896791b 100644
--- a/tests/language_2/language_2_flutter.status
+++ b/tests/language_2/language_2_flutter.status
@@ -102,7 +102,6 @@
 is_malformed_type_test/99: CompileTimeError
 is_not_class2_test: RuntimeError
 issue21079_test: CompileTimeError
-issue_25671b_test/01: CompileTimeError
 library_env_test/has_mirror_support: RuntimeError, OK
 library_env_test/has_no_mirror_support: Pass
 list_literal_syntax_test/01: CompileTimeError
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 79a1f4a..d5d228a 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -39,22 +39,6 @@
 async_return_types_test/wrongReturnType: MissingCompileTimeError
 bad_override_test/01: MissingCompileTimeError
 bad_override_test/02: MissingCompileTimeError
-built_in_identifier_type_annotation_test/52: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/53: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/54: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/55: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/57: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/58: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/59: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/60: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/61: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/62: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/63: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/64: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/65: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/66: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/67: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/68: MissingCompileTimeError # Issue 28814
 call_non_method_field_test/01: MissingCompileTimeError
 call_non_method_field_test/02: MissingCompileTimeError
 check_member_static_test/01: MissingCompileTimeError
@@ -63,8 +47,7 @@
 compile_time_constant_o_test/01: MissingCompileTimeError
 compile_time_constant_o_test/02: MissingCompileTimeError
 const_dynamic_type_literal_test/02: MissingCompileTimeError
-const_factory_with_body_test/01: MissingCompileTimeError # Fasta bug: Const factory with body.
-const_instance_field_test/01: MissingCompileTimeError # Fasta bug: Const instance field.
+const_instance_field_test/01: MissingCompileTimeError # Fasta bug: Const instance field. Issue 32326.
 const_map2_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 const_map3_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 const_switch2_test/01: MissingCompileTimeError # KernelVM bug: Constant evaluation.
@@ -103,15 +86,7 @@
 identical_const_test/03: MissingCompileTimeError
 identical_const_test/04: MissingCompileTimeError
 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_or_const_generic_test: CompileTimeError
 implicit_creation/implicit_new_prefix_constructor_generic_named_test: CompileTimeError
@@ -215,6 +190,10 @@
 override_inheritance_no_such_method_test/10: MissingCompileTimeError
 override_inheritance_no_such_method_test/12: MissingCompileTimeError
 override_inheritance_no_such_method_test/13: MissingCompileTimeError
+partial_tearoff_instantiation_test/05: MissingCompileTimeError
+partial_tearoff_instantiation_test/06: MissingCompileTimeError
+partial_tearoff_instantiation_test/07: MissingCompileTimeError
+partial_tearoff_instantiation_test/08: MissingCompileTimeError
 redirecting_factory_default_values_test/01: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
 redirecting_factory_default_values_test/02: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
 regress_22976_test/*: CompileTimeError # Issue 31935
@@ -487,6 +466,13 @@
 [ $arch != simarm && $arch != simarm64 && $arch != simdbc64 && $compiler == dartk ]
 export_ambiguous_main_test: MissingCompileTimeError
 
+[ $arch == simdbc64 && $compiler == dartk && $mode == debug && $strong ]
+partial_tearoff_instantiation_test/05: Crash # Issue http://dartbug.com/32340
+partial_tearoff_instantiation_test/06: Crash # Issue http://dartbug.com/32340
+partial_tearoff_instantiation_test/07: Crash # Issue http://dartbug.com/32340
+partial_tearoff_instantiation_test/08: Crash # Issue http://dartbug.com/32340
+partial_tearoff_instantiation_test/none: Crash # Issue http://dartbug.com/32340
+
 [ $compiler != dart2js && $fasta ]
 compile_time_constant_c_test/02: MissingCompileTimeError
 const_constructor_nonconst_field_test/01: MissingCompileTimeError
@@ -504,7 +490,7 @@
 mixin_supertype_subclass_test/05: MissingCompileTimeError
 
 [ $compiler == dartk && $mode == debug && $runtime == vm && $strong ]
-const_instance_field_test/01: Crash
+const_instance_field_test/01: Crash # Issue 32326.
 cyclic_type_variable_test/01: Crash
 cyclic_type_variable_test/02: Crash
 cyclic_type_variable_test/03: Crash
@@ -593,13 +579,10 @@
 async_star_pause_test: Fail, OK
 async_star_test/02: RuntimeError # Issue 31402 (Invocation arguments)
 built_in_identifier_prefix_test: CompileTimeError
-built_in_identifier_type_annotation_test/22: DartkCrash # Issue 28814
 call_method_must_not_be_field_test/03: RuntimeError # Issue 32265
 call_method_must_not_be_getter_test/03: RuntimeError # Issue 32265
 call_operator_test: RuntimeError, OK
 call_with_no_such_method_test: RuntimeError
-cha_deopt1_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-cha_deopt1_test: RuntimeError
 compile_time_constant_k_test/01: MissingCompileTimeError
 compile_time_constant_k_test/02: MissingCompileTimeError
 compile_time_constant_k_test/03: MissingCompileTimeError
@@ -628,40 +611,13 @@
 cyclic_type_test/04: RuntimeError, CompileTimeError
 cyclic_typedef_test/10: Crash
 cyclic_typedef_test/11: Crash
-deferred_call_empty_before_load_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_closurize_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_constant_list_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_constraints_constants_test/default_argument2: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 30273.
-deferred_constraints_constants_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_constraints_constants_test/reference_after_load: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_constraints_type_annotation_test/new: CompileTimeError # Deferred loading kernel issue 30273.
-deferred_constraints_type_annotation_test/new_generic1: CompileTimeError # Deferred loading kernel issue 30273
-deferred_constraints_type_annotation_test/none: CompileTimeError # Deferred loading kernel issue 30273.
-deferred_constraints_type_annotation_test/static_method: CompileTimeError # Deferred loading kernel issue 30273.
-deferred_constraints_type_annotation_test/type_annotation_non_deferred: CompileTimeError # Deferred loading kernel issue 30273.
-deferred_function_type_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_global_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_import_core_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_inlined_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_load_constants_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_load_inval_code_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
+deferred_call_empty_before_load_test: RuntimeError # KernelVM bug: Deferred loading kernel issue 30273.
+deferred_load_constants_test/none: RuntimeError # KernelVM bug: Deferred loading kernel issue 30273.
 deferred_load_library_wrong_args_test/01: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 30273.
-deferred_load_library_wrong_args_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_mixin_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_no_such_method_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_not_loaded_check_test: CompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
-deferred_only_constant_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_optimized_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
+deferred_not_loaded_check_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
 deferred_redirecting_factory_test: RuntimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_regression_22995_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_regression_28678_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_shadow_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
 deferred_shared_and_unshared_classes_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_static_seperate_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_type_dependency_test/as: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_type_dependency_test/is: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_type_dependency_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_type_dependency_test/type_annotation: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
+deferred_static_seperate_test: RuntimeError # KernelVM bug: Deferred loading kernel issue 30273.
 disassemble_test: Pass, Slow
 dynamic_prefix_core_test/none: CompileTimeError
 emit_const_fields_test: CompileTimeError # Issue 31533
@@ -698,9 +654,6 @@
 issue31596_super_test/01: CompileTimeError
 issue31596_super_test/03: CompileTimeError
 issue31596_super_test/05: RuntimeError
-issue_1751477_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-issue_25671a_test/01: CompileTimeError # Test assumes Dart 1.0 semantics
-issue_25671b_test/01: DartkCrash
 least_upper_bound_expansive_test/none: CompileTimeError
 library_env_test/has_html_support: RuntimeError # KernelVM bug: Configurable imports.
 library_env_test/has_no_io_support: RuntimeError # KernelVM bug: Configurable imports.
@@ -740,18 +693,15 @@
 override_inheritance_field_test/26: CompileTimeError # Issue 31616
 override_inheritance_field_test/29: CompileTimeError # Issue 31616
 override_inheritance_generic_test/02: CompileTimeError
-override_inheritance_method_test/17: CompileTimeError
-override_inheritance_method_test/18: CompileTimeError
 override_inheritance_method_test/28: CompileTimeError
 override_inheritance_method_test/29: CompileTimeError
 parser_quirks_test: CompileTimeError # Issue 31533
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
-regress_22443_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
+regress_22443_test: RuntimeError # KernelVM bug: Deferred loading kernel issue 30273.
 regress_23089_test: Crash
 regress_23408_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
 regress_23408_test: RuntimeError
-regress_28278_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
 regress_29025_test: CompileTimeError # Issue 31402 (Variable declaration)
 regress_29405_test: CompileTimeError # Issue 31402 (Invocation arguments)
 regress_30339_test: CompileTimeError # Issue 31402 (Variable declaration)
@@ -810,11 +760,8 @@
 assertion_initializer_const_error2_test/cc09: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc10: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc11: MissingCompileTimeError # Not reporting failed assert() at compile time.
-cha_deopt2_test: CompileTimeError, DartkCrash # KernelVM bug: Deferred loading kernel issue 30273.
-cha_deopt3_test: CompileTimeError, DartkCrash # KernelVM bug: Deferred loading kernel issue 30273.
-hello_dart_test: Crash
 recursive_mixin_test: Crash
-redirecting_factory_reflection_test: Crash
+redirecting_factory_reflection_test: RuntimeError
 
 # Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
@@ -823,7 +770,7 @@
 least_upper_bound_expansive_test/none: RuntimeError # Please triage.
 
 [ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled && $strong ]
-const_instance_field_test/01: Crash
+const_instance_field_test/01: Crash # Issue 32326.
 cyclic_type_variable_test/01: Crash
 cyclic_type_variable_test/02: Crash
 cyclic_type_variable_test/03: Crash
@@ -957,14 +904,10 @@
 async_star_pause_test: Fail, OK
 async_star_test/02: RuntimeError, CompileTimeError # Issue 31402 (Invocation arguments)
 built_in_identifier_prefix_test: CompileTimeError
-built_in_identifier_type_annotation_test/22: DartkCrash # Issue 28814
 call_method_must_not_be_field_test/03: RuntimeError # Issue 32265
 call_method_must_not_be_getter_test/03: RuntimeError # Issue 32265
 call_operator_test: RuntimeError, OK
 call_with_no_such_method_test: RuntimeError
-cha_deopt1_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-cha_deopt2_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-cha_deopt3_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
 checked_setter3_test/01: MissingCompileTimeError
 checked_setter3_test/02: MissingCompileTimeError
 checked_setter3_test/03: MissingCompileTimeError
@@ -997,42 +940,17 @@
 cyclic_typedef_test/11: Crash
 deep_nesting1_negative_test: Skip # Issue 31158
 deep_nesting2_negative_test: Skip # Issue 31158
-deferred_call_empty_before_load_test: CompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
-deferred_closurize_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_constant_list_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
+deferred_call_empty_before_load_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
 deferred_constraints_constants_test: SkipByDesign
 deferred_constraints_constants_test/default_argument2: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 30273.
 deferred_constraints_constants_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
 deferred_constraints_constants_test/reference_after_load: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_constraints_type_annotation_test/new: CompileTimeError
-deferred_constraints_type_annotation_test/new_generic1: CompileTimeError
-deferred_constraints_type_annotation_test/none: CompileTimeError
-deferred_constraints_type_annotation_test/static_method: CompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_non_deferred: CompileTimeError
-deferred_function_type_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_global_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_global_test: Fail
-deferred_import_core_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_inlined_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_load_constants_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_load_inval_code_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
+deferred_load_constants_test/none: RuntimeError # KernelVM bug: Deferred loading kernel issue 30273.
 deferred_load_library_wrong_args_test/01: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 30273.
-deferred_load_library_wrong_args_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_mixin_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_no_such_method_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_not_loaded_check_test: CompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
-deferred_only_constant_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_optimized_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
+deferred_not_loaded_check_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
 deferred_redirecting_factory_test: CompileTimeError, Fail, Crash # Issue 23408, KernelVM bug: Deferred loading kernel issue 30273.
-deferred_regression_22995_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_regression_28678_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_shadow_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
 deferred_shared_and_unshared_classes_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_static_seperate_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_type_dependency_test/as: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_type_dependency_test/is: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_type_dependency_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-deferred_type_dependency_test/type_annotation: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
+deferred_static_seperate_test: RuntimeError # KernelVM bug: Deferred loading kernel issue 30273.
 deopt_inlined_function_lazy_test: Skip # Incompatible flag: --deoptimize-alot
 dynamic_prefix_core_test/none: CompileTimeError
 emit_const_fields_test: CompileTimeError # Issue 31533
@@ -1105,9 +1023,6 @@
 issue31596_super_test/01: CompileTimeError
 issue31596_super_test/03: CompileTimeError
 issue31596_super_test/05: RuntimeError
-issue_1751477_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
-issue_25671a_test/01: CompileTimeError # Test assumes Dart 1.0 semantics
-issue_25671b_test/01: Crash
 least_upper_bound_expansive_test/none: RuntimeError
 library_env_test/has_html_support: RuntimeError # KernelVM bug: Configurable imports.
 library_env_test/has_mirror_support: RuntimeError, OK
@@ -1151,8 +1066,6 @@
 override_inheritance_field_test/26: CompileTimeError # Issue 31616
 override_inheritance_field_test/29: CompileTimeError # Issue 31616
 override_inheritance_generic_test/02: CompileTimeError
-override_inheritance_method_test/17: CompileTimeError
-override_inheritance_method_test/18: CompileTimeError
 override_inheritance_method_test/28: CompileTimeError
 override_inheritance_method_test/29: CompileTimeError
 override_inheritance_mixed_test/08: Pass # Correctly passes.
@@ -1164,12 +1077,11 @@
 regress_13462_0_test: SkipByDesign
 regress_13462_1_test: SkipByDesign
 regress_18535_test: SkipByDesign
-regress_22443_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
+regress_22443_test: RuntimeError # KernelVM bug: Deferred loading kernel issue 30273.
 regress_23089_test: Crash
 regress_23408_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
 regress_23408_test: RuntimeError
 regress_28255_test: SkipByDesign
-regress_28278_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 30273.
 regress_29025_test: CompileTimeError # Issue 31402 (Variable declaration)
 regress_29405_test: CompileTimeError # Issue 31402 (Invocation arguments)
 regress_30339_test: CompileTimeError # Issue 31402 (Variable declaration)
@@ -1213,7 +1125,6 @@
 vm/optimized_stacktrace_test: Skip # Issue 30198
 vm/reflect_core_vm_test: SkipByDesign
 vm/regress_27671_test: Skip # Unsupported
-vm/regress_27671_test: Crash
 vm/regress_29145_test: Skip # Issue 29145
 vm/type_cast_vm_test: RuntimeError # Expects line and column numbers
 vm/type_vm_test: RuntimeError, Pass # Expects line and column numbers
@@ -1246,9 +1157,18 @@
 void_type_usage_test/conditional_return_to_void: MissingCompileTimeError
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 
+[ $compiler == dartkp && $minified ]
+no_such_method_native_test: RuntimeError # Compares symbol #foobar with string "foobar" in noSuchMethod
+recursive_generic_test: RuntimeError # Compares a (dynamic) toString call to 'C<D>'
+tearoff_dynamic_test: RuntimeError # Compares call to "foo" (noSuchMethod) with string "foo"
+type_variable_promotion_test: RuntimeError # Compares runtime type to the string "List<B>"
+
 [ $compiler == fasta && $strong ]
 deferred_super_dependency_test/01: MissingCompileTimeError
 
+[ $compiler == fasta && !$strong ]
+invalid_override_in_mixin_test/01: MissingCompileTimeError
+
 [ $runtime == vm && $fasta ]
 implicit_creation/implicit_new_or_const_composite_test: RuntimeError
 implicit_creation/implicit_new_or_const_test: RuntimeError
@@ -1303,7 +1223,7 @@
 bad_override_test/04: MissingCompileTimeError
 bad_override_test/05: MissingCompileTimeError
 bad_override_test/06: MissingCompileTimeError
-built_in_identifier_type_annotation_test/22: Crash # Issue 28814
+built_in_identifier_type_annotation_test/22: MissingCompileTimeError
 call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
 call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
 call_constructor_on_unresolvable_class_test/03: MissingCompileTimeError
@@ -1594,6 +1514,10 @@
 invalid_cast_test/09: MissingCompileTimeError
 invalid_cast_test/10: MissingCompileTimeError
 invalid_cast_test/11: MissingCompileTimeError
+invalid_type_argument_count_test/01: MissingCompileTimeError
+invalid_type_argument_count_test/02: MissingCompileTimeError
+invalid_type_argument_count_test/03: MissingCompileTimeError
+invalid_type_argument_count_test/04: MissingCompileTimeError
 issue31596_override_test/05: MissingCompileTimeError
 issue31596_override_test/06: MissingCompileTimeError
 least_upper_bound_expansive_test/01: MissingCompileTimeError
@@ -2035,3 +1959,4 @@
 [ $compiler == dartk || $compiler == dartkp ]
 generic_function_bounds_test: RuntimeError # Issue 32076
 generic_test/01: MissingCompileTimeError
+
diff --git a/tests/language_2/language_2_vm.status b/tests/language_2/language_2_vm.status
index 65f1f55..726711c 100644
--- a/tests/language_2/language_2_vm.status
+++ b/tests/language_2/language_2_vm.status
@@ -1115,6 +1115,7 @@
 function_type/function_type96_test: RuntimeError # Issue 30475
 function_type/function_type9_test: RuntimeError # Issue 30475
 function_type_alias2_test: RuntimeError
+invalid_override_in_mixin_test/01: MissingCompileTimeError
 recursive_mixin_test: Crash
 type_literal_prefix_call_test: RuntimeError
 
@@ -1337,4 +1338,8 @@
 [ $compiler != dartk && $runtime == vm || $compiler != dartkp && $runtime == dart_precompiled ]
 built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Error only in strong mode
 int64_literal_test/*: Skip # This is testing Dart 2.0 int64 semantics.
-
+invalid_type_argument_count_test/01: MissingCompileTimeError # Error only in strong mode
+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
diff --git a/tests/language_2/partial_tearoff_instantiation_test.dart b/tests/language_2/partial_tearoff_instantiation_test.dart
new file mode 100644
index 0000000..72bd744
--- /dev/null
+++ b/tests/language_2/partial_tearoff_instantiation_test.dart
@@ -0,0 +1,116 @@
+// 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";
+
+typedef F1 = void Function<T>(T);
+typedef void F2<T>(T v);
+
+dynamic defaultFLatest;
+
+void defaultF<T>(T v) {
+  defaultFLatest = v;
+}
+
+class X1 {
+  final F1 f;
+  const X1({this.f: defaultF});
+}
+
+class X2 {
+  final F2 f;
+  const X2({this.f: defaultF});
+}
+
+class Y1 {
+  F1 f;
+}
+
+class Y2 {
+  F2 f;
+}
+
+dynamic foo() {
+  if (defaultFLatest == -1) return -1;
+  return "not -1";
+}
+
+void main() {
+  {
+    var x = const X1();
+
+    // OK with implicit dynamic type argument.
+    x.f("hello1");
+    Expect.equals("hello1", defaultFLatest);
+
+    // OK with explicit dynamic type argument.
+    x.f<dynamic>("hello2");
+    Expect.equals("hello2", defaultFLatest);
+
+    // OK with correctly given argument type.
+    x.f<String>("hello3");
+    Expect.equals("hello3", defaultFLatest);
+
+    // OK with correctly given argument type.
+    x.f<int>(42);
+    Expect.equals(42, defaultFLatest);
+
+    // Not OK with incorrectly given argument type.
+    x.f<int>("hello"); //# 01: compile-time error
+
+    // Not OK with incorrectly given argument type.
+    x.f<int>(foo()); //# 02: runtime error
+
+    var y = new Y1();
+    y.f = defaultF;
+
+    // OK with implicit dynamic type argument.
+    y.f("hello4");
+    Expect.equals("hello4", defaultFLatest);
+
+    // OK with explicit dynamic type argument.
+    y.f<dynamic>("hello5");
+    Expect.equals("hello5", defaultFLatest);
+
+    // OK with correctly given argument type.
+    y.f<String>("hello6");
+    Expect.equals("hello6", defaultFLatest);
+
+    // OK with correctly given argument type.
+    y.f<int>(43);
+    Expect.equals(43, defaultFLatest);
+
+    // Not OK with incorrectly given argument type.
+    y.f<int>("hello"); //# 03: compile-time error
+
+    // Not OK with incorrectly given argument type.
+    y.f<int>(foo()); //# 04: runtime error
+  }
+  {
+    var x = const X2();
+
+    // OK with no type arguments.
+    x.f("hello1");
+    Expect.equals("hello1", defaultFLatest);
+
+    // Not OK with a type argument.
+    x.f<dynamic>("hello2"); //# 05: compile-time error
+
+    // Not OK with a type argument.
+    x.f<String>("hello3"); //# 06: compile-time error
+
+    var y = new Y2();
+    y.f = defaultF;
+
+    // OK with no type argument.
+    y.f("hello4");
+    Expect.equals("hello4", defaultFLatest);
+
+    // Not OK with a type argument.
+    y.f<dynamic>("hello5"); //# 07: compile-time error
+
+    // Not OK with a type argument.
+    y.f<String>("hello6"); //# 08: compile-time error
+  }
+}
diff --git a/tests/language_2/regress_32267_test.dart b/tests/language_2/regress_32267_test.dart
new file mode 100644
index 0000000..5180b62
--- /dev/null
+++ b/tests/language_2/regress_32267_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// There was a bug in the Kernel mixin transformation: it copied factory
+// constructors from the mixin into the mixin application class.  This could be
+// observed as an unbound type parameter which led to a crash.
+
+class State<T> {}
+
+class A {}
+
+abstract class Mixin<T> {
+  factory Mixin._() => null;
+}
+
+class AState extends State<A> {}
+
+class AStateImpl extends AState with Mixin {}
+
+void main() {
+  new AStateImpl();
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 9a42a66..d55049b 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -118,16 +118,6 @@
 typed_data/int64_list_load_store_test: RuntimeError # Issue 10275
 typed_data/typed_data_hierarchy_int64_test: RuntimeError # Issue 10275
 
-[ $compiler == dartk ]
-mirrors/invoke_throws_test: Crash
-mirrors/mirrors_test: Crash
-mirrors/redirecting_factory_test/01: Crash
-mirrors/redirecting_factory_test/02: Crash
-mirrors/redirecting_factory_test/none: Crash
-
-[ $compiler == dartkp ]
-mirrors/*: Skip # mirrors are not supported by under precompilation
-
 [ $compiler == fasta ]
 mirrors/library_imports_bad_metadata_test/01: Crash
 mirrors/metadata_allowed_values_test/02: MissingCompileTimeError
@@ -202,10 +192,6 @@
 [ $arch != ia32 && $arch != simarm && $arch != simarmv5te && $arch != simarmv6 && $arch != x64 && $mode == debug ]
 convert/streamed_conversion_json_utf8_decode_test: Skip # Verification not yet implemented.
 
-[ $arch == x64 && $compiler == dartk && $mode == debug && $runtime == vm ]
-mirrors/invocation_fuzz_test: Skip # Because it times out, issue 29439.
-mirrors/variable_is_const_test/01: Crash
-
 [ $arch == x64 && $mode == debug && $system == windows && ($runtime == dart_precompiled || $runtime == vm) ]
 convert/streamed_conversion_json_utf8_decode_test: Pass, Slow
 
@@ -304,27 +290,9 @@
 math/math2_test: RuntimeError
 math/math_test: RuntimeError
 
-[ $compiler == dartk && $mode == debug && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) ]
-mirrors/invocation_fuzz_test/smi: Pass, Slow
-mirrors/variable_is_const_test/01: Crash # Please triage.
-
-[ $compiler == dartk && $system == windows ]
-mirrors/invocation_fuzz_test/smi: Pass, Timeout # Issue 32137.
-
-# Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
-# are to be triaged.  Isolate tests are skipped on purpose due to the usage of
-# batch mode.
-[ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) ]
-mirrors/invocation_fuzz_test/smi: Crash # Please triage.
-mirrors/library_uri_io_test: RuntimeError # Please triage.
-
 [ $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
 
-[ $compiler == dartkp && $mode == debug ]
-mirrors/variable_is_const_test/01: Crash
-vm/async_await_catch_stacktrace_test/01: Crash
-
 [ $compiler == none && $mode == product ]
 mirrors/library_enumeration_deferred_loading_test: RuntimeError, OK # Deferred loaded eagerly
 mirrors/library_import_deferred_loading_test: RuntimeError, OK # Deferred loaded eagerly
@@ -333,9 +301,6 @@
 [ $compiler == none && !$checked ]
 mirrors/reflected_type_generics_test/02: Fail, OK # Type check for a bounded type argument.
 
-[ $mode == debug && ($compiler == dartk || $compiler == dartkp) ]
-mirrors/other_declarations_location_test: Crash # assertion error, TypeParameter not having position.
-
 [ $runtime == chrome && $system == linux ]
 mirrors/native_class_test: Pass, Slow
 
@@ -379,13 +344,6 @@
 mirrors/library_uri_io_test: RuntimeError # These use package:unittest
 mirrors/library_uri_package_test: RuntimeError # These use package:unittest
 
-# dartk: checked mode failures
-[ $checked && ($compiler == dartk || $compiler == dartkp) ]
-mirrors/invocation_fuzz_test/smi: Crash
-mirrors/redirecting_factory_different_type_test/01: Crash # Issue 28424
-mirrors/redirecting_factory_different_type_test/none: Crash # Issue 28424
-mirrors/reflected_type_generics_test/02: Pass
-
 [ $arch == simarm || $arch == simarmv5te || $arch == simarmv6 ]
 convert/chunked_conversion_utf88_test: Skip # Pass, Slow Issue 12644.
 convert/utf85_test: Skip # Pass, Slow Issue 12644.
@@ -396,88 +354,10 @@
 mirrors/mirrors_used*: SkipByDesign # Invalid tests. MirrorsUsed does not have a specification, and dart:mirrors is not required to hide declarations that are not covered by any MirrorsUsed annotation.
 mirrors/symbol_validation_test: RuntimeError # Issue 13596
 
+# All these tests have been migrated as strong mode compatible tests to
+# lib_2, so skipping these tests for dartk and dartkp
 [ $compiler == dartk || $compiler == dartkp ]
-mirrors/class_declarations_test/01: RuntimeError
-mirrors/class_declarations_test/none: RuntimeError
-mirrors/class_mirror_location_test: RuntimeError
-mirrors/constructor_kinds_test/01: RuntimeError
-mirrors/constructor_kinds_test/none: RuntimeError
-mirrors/function_type_mirror_test: RuntimeError
-mirrors/generic_f_bounded_mixin_application_test: RuntimeError
-mirrors/generic_function_typedef_test: RuntimeError
-mirrors/generic_interface_test/01: RuntimeError
-mirrors/generic_interface_test/none: RuntimeError
-mirrors/hot_get_field_test: RuntimeError
-mirrors/hot_set_field_test: RuntimeError
-mirrors/intercepted_object_test: RuntimeError
-mirrors/invocation_fuzz_test/emptyarray: Crash
-mirrors/invocation_fuzz_test/false: Crash
-mirrors/invocation_fuzz_test/none: Crash
-mirrors/invocation_fuzz_test/smi: RuntimeError
-mirrors/invocation_fuzz_test/string: Crash
-mirrors/invoke_private_test: RuntimeError
-mirrors/invoke_private_wrong_library_test: RuntimeError
-mirrors/library_declarations_test/none: RuntimeError
-mirrors/library_enumeration_deferred_loading_test: CompileTimeError # Deferred loading kernel issue 28335.
-mirrors/library_exports_hidden_test: RuntimeError
-mirrors/library_exports_shown_test: RuntimeError
-mirrors/library_import_deferred_loading_test: CompileTimeError # Deferred loading kernel issue 28335.
-mirrors/library_imports_deferred_test: RuntimeError
-mirrors/library_imports_hidden_test: RuntimeError
-mirrors/library_imports_metadata_test: RuntimeError
-mirrors/library_imports_prefixed_show_hide_test: RuntimeError
-mirrors/library_imports_prefixed_test: RuntimeError
-mirrors/library_imports_shown_test: RuntimeError
-mirrors/library_metadata_test: RuntimeError
-mirrors/load_library_test: CompileTimeError
-mirrors/metadata_allowed_values_test/16: Skip # Flaky, crashes.
-mirrors/metadata_constructed_constant_test: Crash
-mirrors/metadata_scope_test/none: RuntimeError
-mirrors/method_mirror_location_test: RuntimeError
-mirrors/method_mirror_source_line_ending_test: Crash
-mirrors/method_mirror_source_test: Crash
-mirrors/mirrors_nsm_mismatch_test: RuntimeError
-mirrors/mirrors_nsm_test/dart2js: RuntimeError
-mirrors/mirrors_reader_test: Crash
-mirrors/mirrors_used_inheritance_test: RuntimeError
-mirrors/mirrors_used_typedef_declaration_test/01: RuntimeError
-mirrors/mirrors_used_typedef_declaration_test/none: RuntimeError
-mirrors/mixin_application_test: RuntimeError
-mirrors/mixin_test: RuntimeError
-mirrors/other_declarations_location_test: RuntimeError
-mirrors/parameter_annotation_mirror_test: RuntimeError
-mirrors/parameter_metadata_test: RuntimeError
-mirrors/parameter_of_mixin_app_constructor_test: RuntimeError
-mirrors/private_class_field_test: RuntimeError
-mirrors/private_symbol_test: RuntimeError
-mirrors/private_types_test: RuntimeError
-mirrors/reflect_class_test/01: RuntimeError
-mirrors/reflect_class_test/02: RuntimeError
-mirrors/reflect_class_test/none: RuntimeError
-mirrors/reflected_type_function_type_test: RuntimeError
-mirrors/reflected_type_generics_test/01: RuntimeError
-mirrors/reflected_type_generics_test/02: RuntimeError
-mirrors/reflected_type_typedefs_test: RuntimeError
-mirrors/reflected_type_typevars_test: RuntimeError
-mirrors/regress_26187_test: RuntimeError
-mirrors/relation_assignable_test: RuntimeError
-mirrors/relation_subclass_test: RuntimeError
-mirrors/relation_subtype_test: RuntimeError
-mirrors/repeated_private_anon_mixin_app_test: RuntimeError
-mirrors/static_members_easier_test: RuntimeError
-mirrors/static_members_test: RuntimeError
-mirrors/symbol_validation_test/01: RuntimeError
-mirrors/symbol_validation_test/none: RuntimeError
-mirrors/type_variable_is_static_test: RuntimeError
-mirrors/type_variable_owner_test/01: RuntimeError
-mirrors/typedef_deferred_library_test: CompileTimeError # Deferred loading kernel issue 28335.
-mirrors/typedef_in_signature_test: RuntimeError
-mirrors/typedef_library_test: RuntimeError
-mirrors/typedef_metadata_test: RuntimeError
-mirrors/typedef_reflected_type_test/01: RuntimeError
-mirrors/typedef_reflected_type_test/none: RuntimeError
-mirrors/typedef_test: RuntimeError
-mirrors/typevariable_mirror_metadata_test: RuntimeError
+*: SkipByDesign
 
 [ $runtime == chrome || $runtime == ff ]
 async/stream_timeout_test: SkipSlow # Times out. Issue 22050
diff --git a/tests/lib_2/async/futures_test.dart b/tests/lib_2/async/futures_test.dart
index 81909021..51a3018 100644
--- a/tests/lib_2/async/futures_test.dart
+++ b/tests/lib_2/async/futures_test.dart
@@ -170,7 +170,8 @@
   }, onError: (e, s) {
     Expect.equals(e, 42);
     Expect.identical(st, s);
-    return true;
+  }).whenComplete(() {
+    return new Future(() => true);
   });
   c1.completeError(42, st);
   return result;
@@ -235,6 +236,8 @@
     throw 'incorrect exception';
   }).catchError((error) {
     Expect.equals('correct exception', error);
+  }).whenComplete(() {
+    return new Future(() => false);
   });
 }
 
diff --git a/tests/lib_2/html/indexeddb_1_test.dart b/tests/lib_2/html/indexeddb_1_test.dart
index d2f7927..419b1c5 100644
--- a/tests/lib_2/html/indexeddb_1_test.dart
+++ b/tests/lib_2/html/indexeddb_1_test.dart
@@ -46,15 +46,15 @@
         dbName = nextDatabaseName();
       }
       createObjectStore(e) {
-        var store = e.target.result.createObjectStore(storeName);
+        idb.ObjectStore store = e.target.result.createObjectStore(storeName);
         expect(store, isNotNull);
       }
 
-      var db;
+      idb.Database db;
       return html.window.indexedDB.deleteDatabase(dbName).then((_) {
         return html.window.indexedDB
             .open(dbName, version: version, onUpgradeNeeded: createObjectStore);
-      }).then((result) {
+      }).then((idb.Database result) {
         db = result;
         var transaction = db.transactionList([storeName], 'readwrite');
         transaction.objectStore(storeName).put(value, key);
diff --git a/tests/lib_2/html/indexeddb_2_test.dart b/tests/lib_2/html/indexeddb_2_test.dart
index 8b7be3c..a649638 100644
--- a/tests/lib_2/html/indexeddb_2_test.dart
+++ b/tests/lib_2/html/indexeddb_2_test.dart
@@ -15,35 +15,34 @@
 const int VERSION = 1;
 
 testReadWrite(key, value, check,
-    [dbName = DB_NAME, storeName = STORE_NAME, version = VERSION]) {
-  createObjectStore(e) {
-    var store = e.target.result.createObjectStore(storeName);
+    [dbName = DB_NAME, storeName = STORE_NAME, version = VERSION]) async {
+  void createObjectStore(e) {
+    idb.ObjectStore store = e.target.result.createObjectStore(storeName);
     expect(store, isNotNull);
   }
 
-  var db;
+  idb.Database db;
   // Delete any existing DBs.
-  return html.window.indexedDB.deleteDatabase(dbName).then(expectAsync((_) {
-    return html.window.indexedDB
+  try {
+    await html.window.indexedDB.deleteDatabase(dbName);
+    idb.Database db = await html.window.indexedDB
         .open(dbName, version: version, onUpgradeNeeded: createObjectStore);
-  })).then(expectAsync((result) {
-    db = result;
-    var transaction = db.transactionList([storeName], 'readwrite');
+
+    idb.Transaction transaction = db.transactionList([storeName], 'readwrite');
     transaction.objectStore(storeName).put(value, key);
 
-    return transaction.completed;
-  })).then(expectAsync((db) {
-    var transaction = db.transaction(storeName, 'readonly');
-    return transaction.objectStore(storeName).getObject(key);
-  })).then(expectAsync((object) {
+    db = await transaction.completed;
+    transaction = db.transaction(storeName, 'readonly');
+    var object = await transaction.objectStore(storeName).getObject(key);
+
     db.close();
     check(value, object);
-  })).catchError((e) {
+  } catch (error) {
     if (db != null) {
       db.close();
     }
-    throw e;
-  });
+    throw error;
+  }
 }
 
 List<String> get nonNativeListData {
diff --git a/tests/lib_2/html/indexeddb_3_test.dart b/tests/lib_2/html/indexeddb_3_test.dart
index 50a4d85..6bd5c4a 100644
--- a/tests/lib_2/html/indexeddb_3_test.dart
+++ b/tests/lib_2/html/indexeddb_3_test.dart
@@ -15,7 +15,7 @@
 Future<Database> createAndOpenDb() {
   return html.window.indexedDB.deleteDatabase(DB_NAME).then((_) {
     return html.window.indexedDB.open(DB_NAME, version: VERSION,
-        onUpgradeNeeded: (e) {
+        onUpgradeNeeded: (VersionChangeEvent e) {
       var db = e.target.result;
       db.createObjectStore(STORE_NAME);
     });
diff --git a/tests/lib_2/html/indexeddb_5_test.dart b/tests/lib_2/html/indexeddb_5_test.dart
index cc50cea..d4d3a28 100644
--- a/tests/lib_2/html/indexeddb_5_test.dart
+++ b/tests/lib_2/html/indexeddb_5_test.dart
@@ -18,17 +18,14 @@
   var indexName = 'name_index';
   var db;
 
-  test('init', () {
-    return html.window.indexedDB.deleteDatabase(dbName).then((_) {
-      return html.window.indexedDB.open(dbName, version: 1,
-          onUpgradeNeeded: (e) {
-        var db = e.target.result;
-        var objectStore = db.createObjectStore(storeName, autoIncrement: true);
-        var index =
-            objectStore.createIndex(indexName, 'name_index', unique: false);
-      });
-    }).then((database) {
-      db = database;
+  test('init', () async {
+    await html.window.indexedDB.deleteDatabase(dbName);
+    db = await html.window.indexedDB.open(dbName, version: 1,
+        onUpgradeNeeded: (idb.VersionChangeEvent e) {
+      var db = e.target.result;
+      var objectStore = db.createObjectStore(storeName, autoIncrement: true);
+      var index =
+          objectStore.createIndex(indexName, 'name_index', unique: false);
     });
   });
 
diff --git a/tests/lib_2/html/js_interop_constructor_name_error1_test.dart b/tests/lib_2/html/js_interop_constructor_name_error1_test.dart
index 37b179f..b534222 100644
--- a/tests/lib_2/html/js_interop_constructor_name_error1_test.dart
+++ b/tests/lib_2/html/js_interop_constructor_name_error1_test.dart
@@ -30,9 +30,6 @@
 
   test('dom-is-js', () {
     var e = confuse(new html.DivElement());
-    // TODO(26838): When Issue 26838 is fixed and this test passes, move this
-    // test into group `HTMLDivElement-types`.
-
     // Currently, HTML types are not [JavaScriptObject]s. We could change that
     // by having HTML types extend JavaScriptObject, in which case we would
     // change this expectation.
diff --git a/tests/lib_2/html/js_interop_constructor_name_error2_test.dart b/tests/lib_2/html/js_interop_constructor_name_error2_test.dart
index d45183e..00c8fd6 100644
--- a/tests/lib_2/html/js_interop_constructor_name_error2_test.dart
+++ b/tests/lib_2/html/js_interop_constructor_name_error2_test.dart
@@ -30,9 +30,6 @@
 
   test('String-is-not-js', () {
     var e = confuse('kombucha');
-    // TODO(26838): When Issue 26838 is fixed and this test passes, move this
-    // test into group `HTMLDivElement-types`.
-
     // A String should not be a JS interop type. The type test flags are added
     // to Interceptor, but should be added to the class that implements all
     // the JS-interop methods.
diff --git a/tests/lib_2/html/js_mock_test.dart b/tests/lib_2/html/js_mock_test.dart
index 871bba2..94e62a7 100644
--- a/tests/lib_2/html/js_mock_test.dart
+++ b/tests/lib_2/html/js_mock_test.dart
@@ -41,10 +41,12 @@
     expect(f, isNull);
 
     var doc = document;
-    expect(doc is Document, isTrue);
     // Fails in dart2js
-    // expect(doc is! Element, isTrue);
-    expect(doc is Node, isTrue);
+    // expect(doc is Document, isTrue);
+    expect(doc is! Element, isTrue);
+
+    // Fails in dart2js
+    // expect(doc is Node, isTrue);
 
     expect(doc is! MockDocument, isTrue);
     expect(doc is! MockElement, isTrue);
diff --git a/tests/lib_2/html/worker_test.dart b/tests/lib_2/html/worker_test.dart
index 783fcf0..dc21b3b 100644
--- a/tests/lib_2/html/worker_test.dart
+++ b/tests/lib_2/html/worker_test.dart
@@ -40,6 +40,7 @@
 
     test('works', () {
       // Use Blob to make a local URL so we don't have to have a separate file.
+      // This does not work on browsers using CSP (Content Security Policy).
       var blob = new Blob([workerScript], 'text/javascript');
       var url = Url.createObjectUrl(blob);
       var worker = new Worker(url);
diff --git a/tests/lib_2/html/xhr_test.dart b/tests/lib_2/html/xhr_test.dart
index 4354461..c6b493a 100644
--- a/tests/lib_2/html/xhr_test.dart
+++ b/tests/lib_2/html/xhr_test.dart
@@ -8,11 +8,14 @@
 import 'dart:convert';
 import 'dart:html';
 import 'dart:typed_data';
-import 'package:unittest/html_individual_config.dart';
-import 'package:unittest/unittest.dart';
 
-main() {
-  useHtmlIndividualConfiguration();
+import 'package:unittest/unittest.dart';
+import 'package:unittest/html_config.dart';
+import 'package:async_helper/async_helper.dart';
+
+main() async {
+  useHtmlConfiguration();
+
   // Cache blocker is a workaround for:
   // https://code.google.com/p/dart/issues/detail?id=11834
   var cacheBlocker = new DateTime.now().millisecondsSinceEpoch;
@@ -89,11 +92,11 @@
     test('XHR.request No file', () {
       HttpRequest.request('NonExistingFile').then((_) {
         fail('Request should not have succeeded.');
-      }, onError: expectAsync((error) {
-        var xhr = error.target;
+      }).catchError((error) {
+        HttpRequest xhr = error.target;
         expect(xhr.readyState, equals(HttpRequest.DONE));
         validate404(xhr);
-      }));
+      });
     });
 
     test('XHR.request file', () {
@@ -117,30 +120,36 @@
     test('XHR.request withCredentials No file', () {
       HttpRequest.request('NonExistingFile', withCredentials: true).then((_) {
         fail('Request should not have succeeded.');
-      }, onError: expectAsync((error) {
-        var xhr = error.target;
+      }).catchError((error) {
+        HttpRequest xhr = error.target;
         expect(xhr.readyState, equals(HttpRequest.DONE));
         validate404(xhr);
-      }));
+      });
     });
 
-    test('XHR.request withCredentials file', () {
-      HttpRequest.request(url, withCredentials: true).then(expectAsync((xhr) {
+    test('XHR.request withCredentials file', () async {
+      try {
+        HttpRequest xhr = await HttpRequest.request(url, withCredentials: true);
         expect(xhr.readyState, equals(HttpRequest.DONE));
         validate200Response(xhr);
-      }));
+      } catch (error) {
+        fail('Request should succeed.');
+      }
     });
 
     test('XHR.getString file', () {
       HttpRequest.getString(url).then(expectAsync((str) {}));
     });
 
-    test('XHR.getString No file', () {
-      HttpRequest.getString('NonExistingFile').then((_) {
+    test('XHR.getString No file', () async {
+      try {
+        await HttpRequest.getString('NonExistingFile');
         fail('Succeeded for non-existing file.');
-      }, onError: expectAsync((error) {
-        validate404(error.target);
-      }));
+      } catch (error) {
+        HttpRequest xhr = error.target;
+        expect(xhr.readyState, equals(HttpRequest.DONE));
+        validate404(xhr);
+      }
     });
 
     test('XHR.request responseType arraybuffer', () {
diff --git a/tests/lib_2/lib_2_dart2js.status b/tests/lib_2/lib_2_dart2js.status
index 2d31eaa..ca7739e 100644
--- a/tests/lib_2/lib_2_dart2js.status
+++ b/tests/lib_2/lib_2_dart2js.status
@@ -25,7 +25,7 @@
 html/mirrors_js_typed_interop_test: Pass, Slow
 html/svgelement_test/PathElement: Pass, RuntimeError # Roll 50 failure
 html/wrapping_collections_test: SkipByDesign # Testing an issue that is only relevant to Dartium
-html/xhr_test/xhr: Pass, RuntimeError # Roll 50 failure
+html/xhr_test: Pass, Slow
 isolate/browser/issue_12474_test: CompileTimeError # Issue 22529
 isolate/enum_const_test/02: RuntimeError # Issue 21817
 isolate/error_at_spawnuri_test: SkipByDesign # Test uses a ".dart" URI.
@@ -104,7 +104,7 @@
 html/js_typed_interop_lazy_test/none: RuntimeError
 html/js_typed_interop_rename_static_test: RuntimeError
 html/no_linked_scripts_htmltest: Timeout, Pass # Issue 32262
-html/worker_test/functional/functional: RuntimeError # Issue 32261
+html/worker_test/functional: RuntimeError # Issue 32261
 
 [ $compiler == dart2js && $runtime == chromeOnAndroid ]
 html/audiobuffersourcenode_test/supported: Fail # TODO(dart2js-team): Please triage this failure.
@@ -137,8 +137,6 @@
 html/input_element_attributes_test: RuntimeError
 html/interactive_media_test: RuntimeError
 html/js_extend_class_test: RuntimeError
-html/js_interop_constructor_name_error1_test: Fail # Issue 26838
-html/js_interop_constructor_name_error2_test: Fail # Issue 26838
 
 [ $compiler == dart2js && $runtime == drt && !$checked ]
 html/audiocontext_test/functional: Pass, Fail
@@ -176,7 +174,6 @@
 html/touchevent_test: Fail
 html/webgl_1_test: Pass, Fail # Issue 8219
 html/websql_test: Fail
-html/xhr_test/xhr: Pass, Fail # Issue 11602
 isolate/kill_self_synchronously_test: RuntimeError
 
 [ $compiler == dart2js && $runtime == ie11 ]
@@ -261,12 +258,17 @@
 html/element_types_shadow_test: RuntimeError # Issue 29922
 html/file_sample_test: Skip # FileSystem not supported on Safari.
 html/fileapi_supported_throws_test: Skip # FileSystem not supported on Safari
+html/js_mock_test: RuntimeError # Issue 32286
+html/xhr_test: RuntimeError
 isolate/cross_isolate_message_test: Skip # Issue 12627
 isolate/message_test: Skip # Issue 12627
 
 [ $compiler == dart2js && $system == linux ]
 html/interactive_geolocation_test: Skip # Requires allowing geo location.
 
+[ $compiler == dart2js && $system == windows ]
+html/xhr_test: RuntimeError
+
 [ $compiler == dart2js && $browser ]
 html/custom/created_callback_test: RuntimeError
 html/fontface_loaded_test: Fail # Support for promises.
@@ -769,4 +771,3 @@
 html/custom/attribute_changed_callback_test/unsupported_on_polyfill: Fail # Polyfill does not support
 html/custom/entered_left_view_test/viewless_document: Fail # Polyfill does not handle this
 html/fontface_test: Fail # Fontface not supported on these.
-
diff --git a/tests/lib_2/lib_2_dartdevc.status b/tests/lib_2/lib_2_dartdevc.status
index e4f21b3..2f18565 100644
--- a/tests/lib_2/lib_2_dartdevc.status
+++ b/tests/lib_2/lib_2_dartdevc.status
@@ -3,8 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dartdevc ]
-async/futures_test: RuntimeError # Issue 29922
-html/xhr_test/xhr: RuntimeError # Issue 29922, strong mode cast failure
+html/xhr_test: Pass, Slow
 
 [ $compiler == dartdevk ]
 async/slow_consumer_test: CompileTimeError
@@ -38,7 +37,7 @@
 html/css_test: Pass, RuntimeError # Issue 31019
 
 [ $system == windows && ($compiler == dartdevc || $compiler == dartdevk) ]
-html/xhr_test/xhr: Skip # Times out. Issue 21527
+html/xhr_test: Skip # Times out. Issue 21527
 
 [ $compiler == dartdevc || $compiler == dartdevk ]
 async/async_await_sync_completer_test: RuntimeError # Issue 29922
@@ -91,8 +90,6 @@
 html/element_classes_test: RuntimeError # Issue 29922
 html/fontface_loaded_test: RuntimeError
 html/gamepad_test: RuntimeError # Issue 31029
-html/indexeddb_1_test/functional: RuntimeError # Issue 29922, strong mode cast failure
-html/indexeddb_2_test: RuntimeError, Skip # Times out. Issue 29922, strong mode cast failure
 html/interactive_media_test: Skip # requests interactive permissions (camera, geolocation)
 html/isolates_test: RuntimeError # Issue 29922
 html/js_typed_interop_default_arg_test/default_value: MissingCompileTimeError # Issue 29922
@@ -130,4 +127,3 @@
 typed_data/int64_list_load_store_test: RuntimeError # Issue 29922
 typed_data/typed_data_hierarchy_int64_test: RuntimeError # Issue 29922
 typed_data/unmodifiable_typed_data_test: RuntimeError # Issue 10275
-
diff --git a/tests/lib_2/lib_2_kernel.status b/tests/lib_2/lib_2_kernel.status
index dad45d5..883580c 100644
--- a/tests/lib_2/lib_2_kernel.status
+++ b/tests/lib_2/lib_2_kernel.status
@@ -52,6 +52,8 @@
 
 [ $compiler == dartk && $mode == debug && $strong ]
 mirrors/instance_members_unimplemented_interface_test: Crash
+mirrors/library_import_deferred_loading_test: Crash # Deferred loading kernel issue 28335.
+mirrors/load_library_test: Crash
 
 # Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
@@ -60,8 +62,8 @@
 mirrors/variable_is_const_test/01: Crash # Please triage.
 
 [ $compiler == dartk && $runtime == vm && $checked && $strong ]
-mirrors/redirecting_factory_different_type_test/01: Crash # Issue 28424
-mirrors/redirecting_factory_different_type_test/none: Crash # Issue 28424
+mirrors/redirecting_factory_different_type_test/01: MissingCompileTimeError # Issue 28424
+mirrors/redirecting_factory_different_type_test/none: RuntimeError # Issue 28424
 mirrors/reflected_type_generics_test/02: Pass
 
 # ===== dartk + vm status lines =====
@@ -92,11 +94,9 @@
 mirrors/constructor_kinds_test/none: RuntimeError
 mirrors/constructor_private_name_test: RuntimeError
 mirrors/constructors_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/dart2js_mirrors_test: Crash # 31916
+mirrors/dart2js_mirrors_test: RuntimeError # 31916
 mirrors/deferred_mirrors_metadata_test: RuntimeError, CompileTimeError # Deferred loading kernel issue 28335.
-mirrors/deferred_mirrors_metatarget_test: CompileTimeError # Deferred loading kernel issue 28335.
 mirrors/deferred_mirrors_test: Crash # 31916
-mirrors/deferred_mirrors_update_test: RuntimeError, CompileTimeError # Deferred loading kernel issue 28335.
 mirrors/deferred_type_test: CompileTimeError, RuntimeError
 mirrors/empty_test: Crash, RuntimeError
 mirrors/enum_test: RuntimeError # Issue 31402 (Invocation arguments)
@@ -120,10 +120,10 @@
 mirrors/invoke_private_test: RuntimeError
 mirrors/invoke_private_wrong_library_test: RuntimeError
 mirrors/library_declarations_test/none: RuntimeError # Issue 31402 (Invocation arguments)
-mirrors/library_enumeration_deferred_loading_test: CompileTimeError
+mirrors/library_enumeration_deferred_loading_test: RuntimeError
 mirrors/library_exports_hidden_test: RuntimeError, Crash, CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/library_exports_shown_test: RuntimeError, CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/library_import_deferred_loading_test: CompileTimeError # Deferred loading kernel issue 28335.
+mirrors/library_import_deferred_loading_test: RuntimeError # Deferred loading kernel issue 28335.
 mirrors/library_imports_bad_metadata_test/none: Crash
 mirrors/library_imports_deferred_test: RuntimeError, CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/library_imports_hidden_test: RuntimeError # Issue 31402 (Invocation arguments)
@@ -132,7 +132,7 @@
 mirrors/library_imports_prefixed_test: RuntimeError # Issue 31402 (Invocation arguments)
 mirrors/library_imports_shown_test: RuntimeError # Issue 31402 (Invocation arguments)
 mirrors/library_metadata_test: RuntimeError
-mirrors/load_library_test: CompileTimeError
+mirrors/load_library_test: RuntimeError
 mirrors/metadata_allowed_values_test/16: Skip # Flaky, crashes.
 mirrors/metadata_constructed_constant_test: Crash, RuntimeError
 mirrors/metadata_scope_test/none: RuntimeError
@@ -143,7 +143,7 @@
 mirrors/mirrors_nsm_test/dart2js: CompileTimeError # Issue 31533
 mirrors/mirrors_nsm_test/none: CompileTimeError # Issue 31533
 mirrors/mirrors_reader_test: Crash
-mirrors/mirrors_test: Crash
+mirrors/mirrors_test: RuntimeError
 mirrors/mirrors_used*: SkipByDesign # Invalid tests. MirrorsUsed does not have a specification, and dart:mirrors is not required to hide declarations that are not covered by any MirrorsUsed annotation.
 mirrors/mirrors_used_inheritance_test: RuntimeError
 mirrors/mirrors_used_typedef_declaration_test/01: RuntimeError
@@ -165,10 +165,10 @@
 mirrors/private_field_test: RuntimeError
 mirrors/private_symbol_test: RuntimeError
 mirrors/private_types_test: RuntimeError
-mirrors/redirecting_factory_different_type_test/01: Crash
-mirrors/redirecting_factory_test/01: Crash
-mirrors/redirecting_factory_test/02: Crash
-mirrors/redirecting_factory_test/none: Crash
+mirrors/redirecting_factory_different_type_test/01: MissingCompileTimeError
+mirrors/redirecting_factory_test/01: RuntimeError
+mirrors/redirecting_factory_test/02: RuntimeError
+mirrors/redirecting_factory_test/none: RuntimeError
 mirrors/reflect_class_test/none: RuntimeError
 mirrors/reflected_type_classes_test/01: RuntimeError
 mirrors/reflected_type_function_type_test: RuntimeError
@@ -218,7 +218,7 @@
 isolate/request_reply_test: Pass, Timeout
 isolate/stacktrace_message_test: RuntimeError
 mirrors/class_mirror_type_variables_test: RuntimeError
-mirrors/constructor_optional_args_test: Crash
+mirrors/constructor_optional_args_test: RuntimeError
 mirrors/constructors_test: RuntimeError
 mirrors/fake_function_with_call_test: RuntimeError
 mirrors/generic_bounded_by_type_parameter_test/none: RuntimeError
@@ -240,7 +240,7 @@
 mirrors/instance_members_with_override_test: RuntimeError
 mirrors/instantiate_abstract_class_test: RuntimeError
 mirrors/invoke_closurization2_test: RuntimeError
-mirrors/invoke_throws_test: Crash
+mirrors/invoke_throws_test: RuntimeError
 mirrors/library_imports_bad_metadata_test/none: RuntimeError
 mirrors/metadata_const_map_test: Crash
 mirrors/mixin_members_test: RuntimeError
@@ -249,8 +249,8 @@
 mirrors/parameter_is_const_test/none: RuntimeError
 mirrors/parameter_test/01: RuntimeError
 mirrors/parameter_test/none: RuntimeError
-mirrors/redirecting_factory_different_type_test/02: Crash
-mirrors/redirecting_factory_different_type_test/none: Crash
+mirrors/redirecting_factory_different_type_test/02: MissingCompileTimeError
+mirrors/redirecting_factory_different_type_test/none: RuntimeError
 mirrors/regress_16321_test/none: Crash
 mirrors/top_level_accessors_test/01: MissingCompileTimeError
 mirrors/type_argument_is_type_variable_test: RuntimeError
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index f2594fa..8249747 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -36,12 +36,11 @@
 
 # ===== dartk + vm status lines =====
 [ $compiler == dartk && $runtime == vm && $strong ]
-io/compile_all_test: Crash
 io/http_client_request_test: Pass, Timeout
 io/http_compression_test: RuntimeError
 io/platform_resolved_executable_test/03: Pass, RuntimeError
 io/platform_resolved_executable_test/04: Pass, RuntimeError
-io/secure_builtin_roots_test: Timeout
+io/secure_builtin_roots_test: Pass, Timeout
 io/socket_finalizer_test: Pass, Timeout
 no_support_debugger_test: Skip # kernel-service snapshot not compatible with flag disabled
 regress_29350_test: MissingCompileTimeError
@@ -93,7 +92,7 @@
 # ===== dartkp + dart_precompiled status lines =====
 [ $compiler == dartkp && $runtime == dart_precompiled && $strong ]
 dwarf_stack_trace_test: RuntimeError
-io/compile_all_test: Crash
+io/compile_all_test: RuntimeError # Issue 32338
 io/file_fuzz_test: RuntimeError, Pass
 io/http_client_connect_test: Skip # Flaky.
 io/http_close_test: Crash
diff --git a/tools/VERSION b/tools/VERSION
index d08b1b6..9bcd14c 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 0
 PATCH 0
-PRERELEASE 30
+PRERELEASE 31
 PRERELEASE_PATCH 0
diff --git a/tools/dom/dom.json b/tools/dom/dom.json
index 52e3ab7..8a113c8 100644
--- a/tools/dom/dom.json
+++ b/tools/dom/dom.json
@@ -8088,6 +8088,9 @@
     "dart_action": "unstable",
     "members": {
       "IDBVersionChangeEvent": {},
+      "Xyzzy": {
+        "support_level": "untriaged"
+      },
       "dataLoss": {
         "support_level": "untriaged"
       },
@@ -8095,7 +8098,10 @@
         "support_level": "untriaged"
       },
       "newVersion": {},
-      "oldVersion": {}
+      "oldVersion": {},
+      "target": {
+        "support_level": "untriaged"
+      }
     },
     "support_level": "stable"
   },
diff --git a/tools/dom/idl/dart/dart.idl b/tools/dom/idl/dart/dart.idl
index ca1993b..e7e1549 100644
--- a/tools/dom/idl/dart/dart.idl
+++ b/tools/dom/idl/dart/dart.idl
@@ -150,6 +150,7 @@
 interface IDBCursor {
   [DartName=next, CallWith=ExecutionContext, ImplementedAs=continueFunction, RaisesException] void continue([DartForceOptional] optional any key);
 };
+
 [DartSupplemental]
 interface IDBIndex {
     [CallWith=ExecutionContext, RaisesException] IDBRequest count([Default=Undefined] optional any key);
@@ -432,9 +433,6 @@
     [DartSuppress] void send(sequence<unsigned long> data, optional double timestamp);
 };
 
-[DartSuppress]
-interface MutationEvent {};
-
 // Tweaks types required for Dart strong mode.
 [DartSupplemental]
 interface HTMLCollection {
diff --git a/tools/dom/scripts/databasebuilder.py b/tools/dom/scripts/databasebuilder.py
index 95dcd42..5c3ab8c 100755
--- a/tools/dom/scripts/databasebuilder.py
+++ b/tools/dom/scripts/databasebuilder.py
@@ -515,7 +515,6 @@
     imported_interfaces = self._imported_interfaces
 
     # Step 1: Pre process imported interfaces
-#    for interface, import_options in imported_interfaces.iteritems():
     for interface, import_options in imported_interfaces:
       self._annotate(interface, import_options)
 
diff --git a/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate b/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
index eaed1fe..7488d85 100644
--- a/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
@@ -17,8 +17,8 @@
 
   @DomName('IDBFactory.open')
   Future<Database> open(String name,
-      {int version, void onUpgradeNeeded(VersionChangeEvent),
-      void onBlocked(Event)}) {
+      {int version, void onUpgradeNeeded(VersionChangeEvent event),
+      void onBlocked(Event event)}) {
     if ((version == null) != (onUpgradeNeeded == null)) {
       return new Future.error(new ArgumentError(
           'version and onUpgradeNeeded must be specified together'));
diff --git a/tools/dom/templates/html/impl/impl_IDBVersionChangeEvent.darttemplate b/tools/dom/templates/html/impl/impl_IDBVersionChangeEvent.darttemplate
new file mode 100644
index 0000000..60faa8d
--- /dev/null
+++ b/tools/dom/templates/html/impl/impl_IDBVersionChangeEvent.darttemplate
@@ -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.
+
+part of $LIBRARYNAME;
+
+$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$!MEMBERS
+  @JSName('target')
+  @DomName('IDBVersionChangeEvent.target')
+  @DocsEditable()
+  final OpenDBRequest target;
+}
+
diff --git a/tools/infra/config/cq.cfg b/tools/infra/config/cq.cfg
index 2c729e6..0e116ef 100644
--- a/tools/infra/config/cq.cfg
+++ b/tools/infra/config/cq.cfg
@@ -24,10 +24,7 @@
       builders { name: "vm-linux-release-x64-try"}
       builders { name: "vm-mac-release-x64-try"}
       builders { name: "dart2js-linux-d8-hostchecked-try"}
-      builders {
-        name: "dart2js-linux-d8-kernel-minified-try"
-        experiment_percentage: 100
-      }
+      builders { name: "dart2js-linux-d8-kernel-minified-try" }
       builders { name: "dart2js-linux-none-only-unittest-try"}
       builders { name: "pkg-linux-release-try"}
       builders { name: "dart2js-linux-chrome-try"}
diff --git a/tools/sdks/linux/dart-sdk.tar.gz.sha1 b/tools/sdks/linux/dart-sdk.tar.gz.sha1
index f443005..fcfff24 100644
--- a/tools/sdks/linux/dart-sdk.tar.gz.sha1
+++ b/tools/sdks/linux/dart-sdk.tar.gz.sha1
@@ -1 +1 @@
-d324de88855f3b114d49b7e6d8062f7b09086def
\ No newline at end of file
+e1d5dbecbca504ffa66db767045aeb3714a2a696
\ No newline at end of file
diff --git a/tools/sdks/mac/dart-sdk.tar.gz.sha1 b/tools/sdks/mac/dart-sdk.tar.gz.sha1
index ddd536d..9921e91 100644
--- a/tools/sdks/mac/dart-sdk.tar.gz.sha1
+++ b/tools/sdks/mac/dart-sdk.tar.gz.sha1
@@ -1 +1 @@
-f660c896556152fdc6870af8a1b5dc9441e2d922
\ No newline at end of file
+3e694dc99bb13d9b094401c6424764459109676e
\ No newline at end of file
diff --git a/tools/sdks/win/dart-sdk.tar.gz.sha1 b/tools/sdks/win/dart-sdk.tar.gz.sha1
index 687ceaa..81e6c51 100644
--- a/tools/sdks/win/dart-sdk.tar.gz.sha1
+++ b/tools/sdks/win/dart-sdk.tar.gz.sha1
@@ -1 +1 @@
-80630eb22ebe2e6c7fcf0dcc464fba9bdc6b94ff
\ No newline at end of file
+8ea5e44f520f93a65f05f36f1d7886d04650d29a
\ No newline at end of file
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index fc3dead..a6d9f5f 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -709,8 +709,16 @@
   /// almost identical configurations are tested simultaneosly.
   Command computeRemoveKernelFileCommand(String tempDir, List arguments,
       Map<String, String> environmentOverrides) {
-    var exec = 'rm';
-    var args = [tempKernelFile(tempDir)];
+    String exec;
+    List<String> args;
+
+    if (Platform.isWindows) {
+      exec = 'cmd.exe';
+      args = <String>['/c', 'del', tempKernelFile(tempDir)];
+    } else {
+      exec = 'rm';
+      args = <String>[tempKernelFile(tempDir)];
+    }
 
     return Command.compilation('remove_kernel_file', tempDir,
         bootstrapDependencies(), exec, args, environmentOverrides,
@@ -1045,14 +1053,18 @@
   bool get _isStrong;
   bool get _isAot;
 
+  String get executableScriptSuffix;
+
   List<Uri> bootstrapDependencies();
 
-  String tempKernelFile(String tempDir) => '$tempDir/out.dill';
+  String tempKernelFile(String tempDir) =>
+      new Path('$tempDir/out.dill').toNativePath();
 
   Command computeCompileToKernelCommand(String tempDir, List<String> arguments,
       Map<String, String> environmentOverrides) {
-    final genKernel =
-        Platform.script.resolve('../../../pkg/vm/tool/gen_kernel').toFilePath();
+    final genKernel = Platform.script
+        .resolve('../../../pkg/vm/tool/gen_kernel${executableScriptSuffix}')
+        .toFilePath();
 
     final kernelBinariesFolder = _useSdk
         ? '${_configuration.buildDirectory}/dart-sdk/lib/_internal'
diff --git a/utils/kernel-service/BUILD.gn b/utils/kernel-service/BUILD.gn
index 7d1bfd1..6f539d9 100644
--- a/utils/kernel-service/BUILD.gn
+++ b/utils/kernel-service/BUILD.gn
@@ -53,12 +53,12 @@
   # flags --no-strong-mode once https://github.com/dart-lang/sdk/issues/31623
   # is fixed.
   args = [
-    "--packages=file:///" + rebase_path("../../.packages"),
-    "--platform=file:///" + rebase_path("$root_out_dir/vm_platform.dill"),
+    "--packages=" + rebase_path("../../.packages"),
+    "--platform=" + rebase_path("$root_out_dir/vm_platform.dill"),
     "--no-aot",
     "--no-strong-mode",
     "--no-embed-sources",
     "--output=" + rebase_path("$root_gen_dir/kernel_service.dill"),
-    "file:///" + rebase_path(kernel_service_script),
+    rebase_path(kernel_service_script),
   ]
 }
