diff --git a/BUILD.gn b/BUILD.gn
index 80e3bdd..e621934 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -56,6 +56,7 @@
     "runtime/vm:kernel_platform_files($host_toolchain)",
 
     # TODO(rmacnak): Link this into 'dart'.
+    "utils/kernel-service:copy_kernel_service_snapshot",
     "utils/kernel-service:kernel-service",
   ]
 }
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 282a3ac..ad5a4f0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -172,8 +172,12 @@
 
 * Emit exit code 66 when a path dependency doesn't exist ([issue 1747][pub#1747]).
 
+* `pub publish` throws a more explicit error if the `publish_to` field isn't an
+  absolute URL ([issue 1769][pub#1769]).
+
 [pub#1556]: https://github.com/dart-lang/pub/issues/1556
 [pub#1747]: https://github.com/dart-lang/pub/issues/1747
+[pub#1769]: https://github.com/dart-lang/pub/issues/1769
 
 ##### Bug Fixes
 
diff --git a/DEPS b/DEPS
index 38556fb..46b2c54 100644
--- a/DEPS
+++ b/DEPS
@@ -96,8 +96,8 @@
   "intl_tag": "@0.15.2",
   "isolate_tag": "@1.1.0",
   "jinja2_rev": "@2222b31554f03e62600cd7e383376a7c187967a1",
-  "json_rpc_2_tag": "@2.0.4",
-  "linter_tag": "@0.1.41",
+  "json_rpc_2_tag": "@2.0.6",
+  "linter_tag": "@0.1.42",
   "logging_tag": "@0.11.3+1",
   "markdown_tag": "@1.0.0",
   "matcher_tag": "@0.12.1+4",
@@ -113,7 +113,7 @@
   "ply_rev": "@604b32590ffad5cbb82e4afef1d305512d06ae93",
   "pool_tag": "@1.3.4",
   "protobuf_tag": "@0.6.0",
-  "pub_rev": "@667281eef93b4be648cceca400e954e000edba38",
+  "pub_rev": "@ca0d52f5d4058e7b9ef7b5091e407ff3ac05198d",
   "pub_semver_tag": "@1.3.2",
   "quiver_tag": "@0.27.0",
   "resource_rev":"@af5a5bf65511943398146cf146e466e5f0b95cb9",
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex
index 1df31f2..8e7874d 100644
--- a/docs/language/dartLangSpec.tex
+++ b/docs/language/dartLangSpec.tex
@@ -36,6 +36,10 @@
 % - Require that a top-level "main" declaration is a valid script-entry
 %   function declaration.
 % - State that the return type of a setter or []= is void when not specified.
+% - Clarify that "noSuchMethod" must be implemented, not just redeclared
+%   abstractly, to eliminate certain diagnostic messages.
+% - Add generic functions and methods to the language.
+% - Don't cause warning if a non-system library import shadows a system library.
 %
 % 1.15
 % - Change how language specification describes control flow.
@@ -219,7 +223,7 @@
 We use such lists extensively throughout this specification.
 
 \LMHash{}
-The notation $[x_1, \ldots, x_n/y_1, \ldots, y_n]E$ denotes a copy of $E$ in which all occurrences of $y_i, 1 \le i \le n$ have been replaced with $x_i$.
+The notation $[x_1/y_1, \ldots, x_n/y_n]E$ denotes a copy of $E$ in which all occurrences of $y_i, 1 \le i \le n$ have been replaced with $x_i$.
 
 \LMHash{}
 We sometimes abuse list or map literal syntax, writing $[o_1, \ldots, o_n]$ (respectively $\{k_1: o_1, \ldots, k_n: o_n\}$) where the $o_i$ and $k_i$ may be objects rather than expressions.
@@ -230,7 +234,7 @@
 Such specifications should be understood as a shorthand for:
 \begin{itemize}
 \item
-$x$ $op$ $y$ is equivalent to the method invocation $x.op^\prime(y)$, assuming the class of $x$ actually declared a non-operator method named $op^\prime$ defining the same function as the operator $op$.
+$x$ $op$ $y$ is equivalent to the method invocation $x.op'(y)$, assuming the class of $x$ actually declared a non-operator method named $op'$ defining the same function as the operator $op$.
 \end{itemize}
 
 \rationale{
@@ -760,7 +764,10 @@
 Functions abstract over executable actions.
 
 \begin{grammar}
-{\bf functionSignature:}metadata returnType? identifier formalParameterList
+{\bf functionSignature:}metadata returnType? identifier formalParameterPart
+  .
+
+{\bf formalParameterPart:}typeParameters? formalParameterList
   .
 
 {\bf returnType:}\VOID{};
@@ -776,11 +783,19 @@
 \end{grammar}
 
 \LMHash{}
-Functions include function declarations (\ref{functionDeclarations}), methods (\ref{instanceMethods}, \ref{staticMethods}), getters (\ref{getters}), setters (\ref{setters}), constructors (\ref{constructors}) and function literals (\ref{functionExpressions}).
+Functions can be introduced by function declarations (\ref{functionDeclarations}),
+method declarations (\ref{instanceMethods}, \ref{staticMethods}),
+getter declarations (\ref{getters}),
+setter declarations (\ref{setters}),
+and constructor declarations (\ref{constructors});
+and they can be introduced by function literals (\ref{functionExpressions}).
 
 \LMHash{}
-All functions have a signature and a body.
-The signature describes the formal parameters of the function, and possibly its name and return type.
+Each declaration that introduces a function has a signature that specifies its return type, name, and formal parameter part,
+except that the return type may be omitted, and getters never have a formal parameter part.
+Function literals have a formal parameter part, but no return type and no name.
+The formal parameter part optionally specifies the formal type parameter list of the function,
+and it always specifies its formal parameter list.
 A function body is either:
 \begin{itemize}
 \item A block statement (\ref{blocks}) containing the statements (\ref{statements}) executed by the function, optionally marked with one of the modifiers: \ASYNC, \ASYNC* or \SYNC*.
@@ -864,18 +879,6 @@
 The scope of a local function is described in section \ref{localFunctionDeclaration}.
 In both cases, the name of the function is in scope in its formal parameter scope (\ref{formalParameters}).
 
-%A function declaration of the form $T_0$ $id(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k])\{s\}$ is equivalent to a variable declaration of the form \code{\FINAL{} $F$ $id$ = $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k}= d_k])\{s\}$}, where $F$ is the function type alias (\ref{typedef}) \code{\TYPEDEF{} $T_0$ $F(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}])$}.  Likewise, a function declaration of the form $id(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k])\{s\}$ is equivalent to a variable declaration of the form \code{\FINAL{} $F$ $id$ = $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k])\{s\}$}, where $F$ is the function type alias \code{\TYPEDEF{} $F(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}])$}.
-
-%\commentary{
-%Some obvious conclusions:
-
-%A function declaration of the form $id(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k]) => e$ is equivalent to a variable declaration of the form \code{\FINAL{} $id$ = ($(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k])=> e$}.
-
-%A function literal of the form $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k]) => e$ is equivalent to a function literal of the form \code{$(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k])\{$ \RETURN{} $e$;\}}.
-%}
-
-%A function declaration of the form $T_0$ $id(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots, T_{n+k}$ $x_{n+k} : d_k\})\{s\}$ is equivalent to a variable declaration of the form \code{\FINAL{} $F$ $id$ = $(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots, T_{n+k}$ $x_{n+k} : d_k\})\{s\}$}, where $F$ is the function type alias (\ref{typedef}) \code{\TYPEDEF{} $T_0$ $F(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]\}$}.  Likewise, a function declaration of the form $id(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots, T_{n+k}$ $x_{n+k} : d_k\})\{s\}$ is equivalent to a variable declaration of the form \code{\FINAL{} $F$ $id$ = $(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots, T_{n+k}$ $x_{n+k} : d_k\})\{s\}$}, where $F$ is the function type alias \code{\TYPEDEF{} $F(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\})$}.
-
 \LMHash{}
 It is a compile-time error to preface a function declaration with the built-in identifier \STATIC{}.
 
@@ -888,17 +891,59 @@
 \LMLabel{formalParameters}
 
 \LMHash{}
-Every function includes a {\em formal parameter list}, which consists of a list of required positional parameters (\ref{requiredFormals}), followed by any optional parameters (\ref{optionalFormals}).
+Every non-getter function declaration includes a {\em formal parameter list},
+which consists of a list of required positional parameters (\ref{requiredFormals}),
+followed by any optional parameters (\ref{optionalFormals}).
 The optional parameters may be specified either as a set of named parameters or as a list of positional parameters, but not both.
 
 \LMHash{}
-The formal parameter list of a function introduces a new scope known as the function's {\em formal parameter scope}.
-The formal parameter scope of a function $f$ is enclosed in the scope where $f$ is declared.
-Every formal parameter introduces a local variable into the formal parameter scope.
-However, the scope of a function's signature is the function's enclosing scope, not the formal parameter scope.
+Some function declarations include a {\em formal type parameter list} (\ref{functions}),
+in which case we say that it is a {\em generic function}.
+A {\em non-generic function} is a function which is not generic.
 
 \LMHash{}
-The body of a function introduces a new scope known as the function's {\em body scope}.
+The {\em formal parameter part} of a function declaration consists of the formal type parameter list, if any, and the formal parameter list.
+
+\commentary{
+The following kinds of functions cannot be generic:
+Getters, setters, operators, and constructors.
+}
+
+\LMHash{}
+The formal type parameter list of a function declaration introduces a new scope known as the function's {\em type parameter scope}.
+The type parameter scope of a generic function $f$ is enclosed in the scope where $f$ is declared.
+Every formal type parameter introduces a type into the type parameter scope.
+
+\LMHash{}
+If it exists, the type parameter scope of a function $f$ is the current scope for the signature of $f$, and for the formal type parameter list itself;
+otherwise the scope where $f$ is declared is the current scope for the signature of $f$.
+
+\commentary{
+This means that formal type parameters are in scope in the bounds of parameter declarations,
+allowing for so-called F-bounded type parameters like
+
+\code{class C<X \EXTENDS{} Comparable<X>{}> \{ \ldots{} \}},
+
+\noindent
+and the formal type parameters are in scope for each other, allowing dependencies like
+\code{class D<X \EXTENDS{} Y, Y> \{ \ldots{} \}}.
+}
+
+\LMHash{}
+The formal parameter list of a function declaration introduces a new scope known as the function's {\em formal parameter scope}.
+The formal parameter scope of a non-generic function $f$ is enclosed in the scope where $f$ is declared.
+The formal parameter scope of a generic function $f$ is enclosed in the type parameter scope of $f$.
+Every formal parameter introduces a local variable into the formal parameter scope.
+The current scope for the function's signature is the scope that encloses the formal parameter scope.
+
+\commentary{
+This means that in a generic function declaration,
+the return type and parameter type annotations can use the formal type parameters,
+but the formal parameters are not in scope in the signature.
+}
+
+\LMHash{}
+The body of a function declaration introduces a new scope known as the function's {\em body scope}.
 The body scope of a function $f$ is enclosed in the scope introduced by the formal parameter scope of $f$.
 
 %The formal parameter scope of a function maps the name of each formal parameter $p$ to the value $p$ is bound to.
@@ -953,14 +998,15 @@
   simpleFormalParameter
   .
 
-{\bf functionFormalParameter:}metadata \COVARIANT{}? returnType? identifier formalParameterList
+{\bf functionFormalParameter:}metadata \COVARIANT{}? returnType? identifier
+  \gnewline{} formalParameterPart
   .
 
 {\bf simpleFormalParameter:}metadata \COVARIANT{}? finalConstVarOrType? identifier;
   .
 
 {\bf fieldFormalParameter:}metadata finalConstVarOrType? \THIS{} `{\escapegrammar .}' identifier
-  \gnewline{} formalParameterList?
+  \gnewline{} formalParameterPart?
   .
 \end{grammar}
 
@@ -1022,21 +1068,54 @@
 \LMLabel{typeOfAFunction}
 
 \LMHash{}
-If a function does not declare a return type explicitly, its return type is \DYNAMIC{} (\ref{typeDynamic}),
+If a function declaration does not declare a return type explicitly, its return type is \DYNAMIC{} (\ref{typeDynamic}),
 unless it is a constructor function, in which case its return type is the immediately enclosing class,
 or it is a setter or operator \code{[]=}, in which case its return type is \VOID{}.
 
 \LMHash{}
-Let $F$ be a function with required formal parameters $T_1$ $p_1 \ldots, T_n$ $p_n$, return type $T_0$ and no optional parameters.
-Then the type of $F$ is $(T_1 ,\ldots, T_n) \rightarrow T_0$.
+A function declaration may declare formal type parameters.
+The type of the function includes the names of the type parameters and their upper bounds.
+When consistent renaming of type parameters can make two function types identical,
+they are considered to be the same type.
+
+\commentary{
+It is convenient to include the type parameter names in function types because they are needed in order to express such things as relations among different type parameters, and F-bounds.
+However, we do not wish to distinguish two function types if they have the same structure and only differ in the choice of names.
+This treatment of names is also known as alpha-equivalence.
+}
 
 \LMHash{}
-Let $F$ be a function with required formal parameters $T_1$ $p_1 \ldots, T_n$ $p_n$, return type $T_0$ and positional optional parameters $T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $ p_{n+k}$.
-Then the type of $F$ is $(T_1 ,\ldots, T_n, [T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}]) \rightarrow T_0$.
+In the following three paragraphs,
+if the number $m$ of formal type parameters is zero then the type parameter list in the function type should be omitted.
 
 \LMHash{}
-Let $F$ be a function with required formal parameters $T_1$ $p_1 \ldots, T_n$ $p_n$, return type $T_0$ and named optional parameters $T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $ p_{n+k}$.
-Then the type of $F$ is $(T_1 ,\ldots, T_n, \{T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}\}) \rightarrow T_0$.
+Let $F$ be a function with
+formal type parameters $X_1\ B_1, \ldots,\ X_m\ B_m$,
+required formal parameters $T_1\ p_1, \ldots,\ T_n\ p_n$,
+return type $T_0$
+and no optional parameters.
+Then the type of $F$ is
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>($T_1, \ldots,\ T_n$) $ \rightarrow T_0$}.
+
+\LMHash{}
+Let $F$ be a function with
+formal type parameters $X_1\ B_1, \ldots,\ X_m\ B_m$,
+required formal parameters $T_1\ p_1, \ldots,\ T_n\ p_n$,
+return type $T_0$
+and positional optional parameters $T_{n+1}\ p_{n+1}, \ldots,\ T_{n+k}\ p_{n+k}$.
+Then the type of $F$ is
+
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>($T_1, \ldots,\ T_n, $ [$T_{n+1}\ p_{n+1}, \ldots,\ T_{n+k}\ p_{n+k}$]) $ \rightarrow T_0$}.
+
+\LMHash{}
+Let $F$ be a function with
+formal type parameters $X_1\ B_1, \ldots,\ X_m\ B_m$,
+required formal parameters $T_1\ p_1, \ldots,\ T_n\ p_n$,
+return type $T_0$
+and named optional parameters $T_{n+1}\ p_{n+1}, \ldots,\ T_{n+k}\ p_{n+k}$.
+Then the type of $F$ is
+
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>($T_1, \ldots,\ T_n, $ \{$T_{n+1}\ p_{n+1}, \ldots,\ T_{n+k}\ p_{n+k}$\}) $ \rightarrow T_0$}.
 
 \LMHash{}
 The run-time type of a function object always implements the class \code{Function}.
@@ -1255,8 +1334,8 @@
 
 {\bf operator:}`\~{}';
   binaryOperator;
-  `[' `]' ;
-  `[' `]' `='
+  `[]' ;
+  `[]='
   .
 
 {\bf binaryOperator:}multiplicativeOperator;
@@ -1458,7 +1537,7 @@
 It is a static warning if an abstract member $m$ is declared or inherited in a concrete class $C$ unless:
 \begin{itemize}
 \item $m$ overrides a concrete member, or
-\item $C$ has a \code{noSuchMethod()} method distinct from the one declared in class \code{Object}.
+\item $C$ has a concrete \code{noSuchMethod()} method distinct from the one declared in class \code{Object}.
 \end{itemize}
 
 \rationale{
@@ -1700,7 +1779,7 @@
 \LMHash{}
 Execution of a generative constructor $k$ of type $T$ to initialize a fresh instance $i$
 is always done with respect to a set of bindings for its formal parameters
-and the type parameters of the immediately enclosing class bound to a set of actual type arguments of $T$, $V_1, \ldots , V_m$.
+and the type parameters of the immediately enclosing class bound to a set of actual type arguments of $T$, $V_1, \ldots, V_m$.
 
 \commentary{
 These bindings are usually determined by the instance creation expression that invoked the constructor (directly or indirectly).
@@ -1710,10 +1789,14 @@
 \LMHash{}
 If $k$ is redirecting then its redirect clause has the form
 
-\THIS{}$.g(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$
+\code{\THIS{}.$g$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
 
-where $g$ identifies another generative constructor of the immediately surrounding class.
-Then execution of $k$ to initialize $i$ proceeds by evaluating the argument list $(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$, and then executing $g$ to initialize $i$ with respect to the bindings resulting from the evaluation of $(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ and with \THIS{} bound to $i$ and the type parameters of the immediately enclosing class bound to $V_1, \ldots , V_m$.
+where $g$ identifies another  generative constructor of the immediately surrounding class.
+Then execution of $k$ to initialize $i$ proceeds by evaluating the argument list
+\code{($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)},
+and then executing $g$ to initialize $i$ with respect to the bindings resulting from the evaluation of
+\code{($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+and with \THIS{} bound to $i$ and the type parameters of the immediately enclosing class bound to $V_1, \ldots, V_m$.
 
 \LMHash{}
 Otherwise, execution proceeds as follows:
@@ -1783,14 +1866,17 @@
 \LMHash{}
 Execution of a superinitializer of the form
 
-\SUPER{}$(a_1, \ldots, a_n, x_{n+1}: a_{n+1}, \ldots, x_{n+k}: a_{n+k})$
+\code{\SUPER{}($a_1, \ldots,\ a_n,\ x_{n+1}: a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
 
-(respectively \SUPER{}$.id(a_1, \ldots, a_n, x_{n+1}: a_{n+1}, \ldots, x_{n+k}: a_{n+k})$
+(respectively
+\code{\SUPER{}.id($a_1, \ldots,\ a_n,\ x_{n+1}: a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)})
 
 proceeds as follows:
 
 \LMHash{}
-First, the argument list $(a_1, \ldots, a_n, x_{n+1}: a_{n+1}, \ldots, x_{n+k}: a_{n+k})$ is evaluated.
+First, the argument list
+\code{($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+is evaluated.
 
 \LMHash{}
 Then, after the remainder of the initializer list of $k$ has been executed,
@@ -1803,7 +1889,7 @@
 \LMHash{}
 The generative constructor $S$ (respectively $S.id$) of $S$ is executed
 to initialize $i$ with respect to the bindings that resulted from the evaluation of
-$(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$,
+\code{($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)},
 and the type parameters (if any) of class $S$ bound to $U_1, \ldots, U_m$.
 
 \LMHash{}
@@ -1824,7 +1910,8 @@
 %The enclosing scope of a factory constructor is the static scope \ref{} of the class in which it is declared.
 
 \LMHash{}
-The {\em return type} of a factory whose signature is of the form \FACTORY{} $M$ or the form \FACTORY{} $M.id$ is $M$ if $M$ is not a generic type; otherwise the return type is $M <T_1, \ldots, T_n>$ where $T_1, \ldots, T_n$ are the type parameters of the enclosing class
+The {\em return type} of a factory whose signature is of the form \FACTORY{} $M$ or the form \FACTORY{} $M.id$ is $M$ if $M$ is not a generic type;
+otherwise the return type is \code{$M$<$T_1, \ldots,\ T_n$>} where $T_1, \ldots, T_n$ are the type parameters of the enclosing class.
 
 \LMHash{}
 It is a compile-time error if $M$ is not the name of the immediately enclosing class.
@@ -1857,18 +1944,18 @@
 \end{grammar}
 
 \LMHash{}
-Calling a redirecting factory constructor $k$ causes the constructor $k^\prime$ denoted by $type$ (respectively, $type.identifier$) to be called with the actual arguments passed to $k$, and returns the result of $k^\prime$ as the result of $k$.
+Calling a redirecting factory constructor $k$ causes the constructor $k'$ denoted by $type$ (respectively, $type.identifier$) to be called with the actual arguments passed to $k$, and returns the result of $k'$ as the result of $k$.
 The resulting constructor call is governed by the same rules as an instance creation expression using \NEW{} (\ref{instanceCreation}).
 
 \commentary{
 It follows that if $type$ or $type.id$ are not defined, or do not refer to a class or constructor, a dynamic error occurs, as with any other undefined constructor call.
-The same holds if $k$ is called with fewer required parameters or more positional parameters than $k^\prime$ expects, or if $k$ is called with a named parameter that is not declared by $k^\prime$.
+The same holds if $k$ is called with fewer required parameters or more positional parameters than $k'$ expects, or if $k$ is called with a named parameter that is not declared by $k'$.
 }
 
 \LMHash{}
 It is a compile-time error if $k$ explicitly specifies a default value for an optional parameter.
 \commentary{
-Default values specified in $k$ would be ignored, since it is the {\em actual} parameters that are passed to $k^\prime$.
+Default values specified in $k$ would be ignored, since it is the {\em actual} parameters that are passed to $k'$.
 Hence, default values are disallowed.
 }
 
@@ -1924,17 +2011,17 @@
 %\end{dartCode}
 
 \LMHash{}
-It is a compile-time error if $k$ is prefixed with the \CONST{} modifier but $k^\prime$ is not a constant constructor (\ref{constantConstructors}).
+It is a compile-time error if $k$ is prefixed with the \CONST{} modifier but $k'$ is not a constant constructor (\ref{constantConstructors}).
 
 \LMHash{}
-It is a static warning if the function type of $k^\prime$ is not a subtype of the type of $k$.
+It is a static warning if the function type of $k'$ is not a subtype of the type of $k$.
 
 \commentary{
 This implies that the resulting object conforms to the interface of the immediately enclosing class of $k$.
 }
 
 \LMHash{}
-It is a static type warning if any of the type arguments to $k^\prime$ are not subtypes of the bounds of the corresponding formal type parameters of $type$.
+It is a static type warning if any of the type arguments to $k'$ are not subtypes of the bounds of the corresponding formal type parameters of $type$.
 
 
 \subsubsection{Constant Constructors}
@@ -1976,7 +2063,7 @@
 Any expression that appears within the initializer list of a constant constructor must be a potentially constant expression, or a compile-time error occurs.
 
 \LMHash{}
-A {\em potentially constant expression} is an expression $e$ that would be a valid constant expression if all formal parameters of $e$'s immediately enclosing constant constructor were treated as compile-time constants that were guaranteed to evaluate to an integer, boolean or string value as required by their immediately enclosing superexpression, <em>and</em> where $e$ is also a valid expression if all the formal parameters are treated as non-constant variables.
+A {\em potentially constant expression} is an expression $e$ that would be a valid constant expression if all formal parameters of $e$'s immediately enclosing constant constructor were treated as compile-time constants that were guaranteed to evaluate to an integer, boolean or string value as required by their immediately enclosing superexpression, and where $e$ is also a valid expression if all the formal parameters are treated as non-constant variables.
 
 \commentary{
 Note that a parameter that is not used in a superexpression that is restricted to certain types can be a constant of any type.
@@ -2128,7 +2215,7 @@
 \LMLabel{superclasses}
 
 \LMHash{}
-The superclass of a class $C$ that has a with clause \code{\WITH{} $M_1, \ldots, M_k$} and an extends clause \code{\EXTENDS{} S} is the application of mixin (\ref{mixins}) $M_k* \cdots * M_1$ to S.
+The superclass of a class $C$ that has a with clause \code{\WITH{} $M_1, \ldots,\ M_k$} and an extends clause \code{\EXTENDS{} S} is the application of mixin (\ref{mixins}) $M_k* \cdots * M_1$ to S.
 If no \WITH{} clause is specified then the \EXTENDS{} clause of a class $C$ specifies its superclass.
 If no \EXTENDS{} clause is specified, then either:
 \begin{itemize}
@@ -2173,8 +2260,8 @@
 A class $S$ is {\em a superclass} of a class $C$ if{}f either:
 \begin{itemize}
 \item $S$ is the superclass of $C$, or
-\item $S$ is a superclass of a class $S^{\prime}$,
-and $S^{\prime}$ is the superclass of $C$.
+\item $S$ is a superclass of a class $S'$,
+and $S'$ is the superclass of $C$.
 \end{itemize}
 
 \LMHash{}
@@ -2187,8 +2274,8 @@
 %A class $C$ {\em inherits} any accessible instance members of its superclass that are not overridden by members declared in $C$.
 
 \LMHash{}
-Let $C$ be a class, let $A$ be a superclass of $C$, and let $S_1 \ldots S_k$ be superclasses of $C$ that are also subclasses of $A$.
-$C$ {\em inherits} all accessible instance members of $A$ that have not been overridden by a declaration in $C$ or in at least one of $S_1 \ldots S_k$.
+Let $C$ be a class, let $A$ be a superclass of $C$, and let $S_1, \ldots, S_k$ be superclasses of $C$ that are also subclasses of $A$.
+$C$ {\em inherits} all accessible instance members of $A$ that have not been overridden by a declaration in $C$ or in at least one of $S_1, \ldots, S_k$.
 
 \rationale{
 It would be more attractive to give a purely local definition of inheritance, that depended only on the members of the direct superclass $S$.
@@ -2202,11 +2289,11 @@
 A class may override instance members that would otherwise have been inherited from its superclass.
 
 \LMHash{}
-Let $C = S_0$ be a class declared in library $L$, and let $\{S_1 \ldots S_k\}$ be the set of all superclasses of $C$, where $S_i$ is the superclass of $S_{i-1}$ for $i \in 1 .. k$.
-Let $C$ declare a member $m$, and let $m^\prime$ be a member of $S_j, j \in 1 .. k$, that has the same name as $m$, such that $m^\prime$ is accessible to $L$.
-Then $m$ overrides $m^\prime$ if $m^\prime$ is not already overridden by a member of at least one of $S_1 \ldots S_{j-1}$ and neither $m$ nor $m^\prime$ are instance variables.
+Let $C = S_0$ be a class declared in library $L$, and let $\{S_1, \ldots, S_k\}$ be the set of all superclasses of $C$, where $S_i$ is the superclass of $S_{i-1}$ for $i \in 1 .. k$.
+Let $C$ declare a member $m$, and let $m'$ be a member of $S_j, j \in 1 .. k$, that has the same name as $m$, such that $m'$ is accessible to $L$.
+Then $m$ overrides $m'$ if $m'$ is not already overridden by a member of at least one of $S_1, \ldots, S_{j-1}$ and neither $m$ nor $m'$ are instance variables.
 
-%Let $C$ be a class declared in library $L$, with superclass $S$ and let $C$ declare an instance member $m$, and assume $S$ declares an instance member $m^\prime$ with the same name as $m$. Then $m$ {\em overrides} $m^\prime$ if{}f $m^\prime$ is accessible (\ref{privacy}) to $L$, $m$ has the same name as $m^\prime$ and neither $m$ nor $m^\prime$ are fields.
+%Let $C$ be a class declared in library $L$, with superclass $S$ and let $C$ declare an instance member $m$, and assume $S$ declares an instance member $m'$ with the same name as $m$. Then $m$ {\em overrides} $m'$ if{}f $m'$ is accessible (\ref{privacy}) to $L$, $m$ has the same name as $m'$ and neither $m$ nor $m'$ are fields.
 
 \commentary{
 Instance variables never override each other.
@@ -2236,7 +2323,7 @@
 }
 
 \LMHash{}
-It is a static warning if a non-abstract class inherits an abstract method.
+It is a static warning if a concrete class inherits an abstract method.
 
 \commentary{
 For convenience, here is a summary of the relevant rules.
@@ -2284,7 +2371,7 @@
 If this is impossible then no member $m$ appears in the interface.
 \end{itemize} (\ref{interfaceInheritanceAndOverriding})
 \item Rule \ref{typeSigAssignable} applies to interfaces as well as classes (\ref{interfaceInheritanceAndOverriding}).
-\item It is a static warning if a concrete class does not have an implementation for a method in any of its superinterfaces unless it has a \code{noSuchMethod} method (\ref{superinterfaces}).
+\item It is a static warning if a concrete class does not have an implementation for a method in any of its superinterfaces unless it has a concrete \code{noSuchMethod} method (\ref{superinterfaces}) distinct from the one in class \code{Object}.
 \item The identifier of a named constructor cannot be the same as the name of a member declared (as opposed to inherited) in the same class (\ref{constructors}).
 \end{enumerate}
 }
@@ -2329,8 +2416,8 @@
 It is a compile-time error if the interface of a class $C$ is a superinterface of itself.
 
 \LMHash{}
-Let $C$ be a concrete class that does not have a \code{noSuchMethod()} method distinct from the one declared in class \code{Object}.
-It is a static warning if the implicit interface of $C$ includes an instance member $m$ of type $F$ and $C$ does not declare or inherit a corresponding non-abstract instance member $m$ of type $F'$ such that $F' <: F$.
+Let $C$ be a concrete class that does not have a concrete \code{noSuchMethod()} method distinct from the one declared in class \code{Object}.
+It is a static warning if the implicit interface of $C$ includes an instance member $m$ of type $F$ and $C$ does not declare or inherit a corresponding concrete instance member $m$ of type $F'$ such that $F' <: F$.
 
 \commentary{
 A class does not inherit members from its superinterfaces.
@@ -2339,7 +2426,7 @@
 
 \rationale{
 We choose to issue these warnings only for concrete classes; an abstract class might legitimately be designed with the expectation that concrete subclasses will implement part of the interface.
-We also disable these warnings if a \code{noSuchMethod()} declaration is present or inherited from any class other than \code{Object}.
+We also disable these warnings if a concrete \code{noSuchMethod()} declaration is present or inherited from any class other than \code{Object}.
 In such cases, the supported interface is going to be implemented via \code{noSuchMethod()} and no actual declarations of the implemented interface's members are needed.
 This allows proxy classes for specific types to be implemented without provoking type warnings.
 }
@@ -2390,30 +2477,30 @@
 \end{itemize}
 
 \LMHash{}
-Furthermore, we define $overrides(J, K)$ to be the set of members $m^\prime$ such that all of the following hold:
+Furthermore, we define $overrides(J, K)$ to be the set of members $m'$ such that all of the following hold:
 \begin{itemize}
 \item $J$ is the implicit interface of a class $C$.
 \item $C$ declares a member $m$.
-\item $m^\prime$ has the same name as $m$.
-\item $m^\prime$ is accessible to $K$.
+\item $m'$ has the same name as $m$.
+\item $m'$ is accessible to $K$.
 \item $A$ is a direct superinterface of $J$ and either
   \begin{itemize}
-  \item $A$ declares a member $m^\prime$ or
-  \item $m^\prime$ is a member of $inherited(A, K)$.
+  \item $A$ declares a member $m'$ or
+  \item $m'$ is a member of $inherited(A, K)$.
   \end{itemize}
 \end{itemize}
 
 \LMHash{}
 Let $I$ be the implicit interface of a class $C$ declared in library $L$.
-$I$ {\em inherits} all members of $inherited(I, L)$ and $I$ {\em overrides} $m^\prime$ if $m^\prime \in overrides(I, L)$.
+$I$ {\em inherits} all members of $inherited(I, L)$ and $I$ {\em overrides} $m'$ if $m' \in overrides(I, L)$.
 
 \LMHash{}
 All the static warnings pertaining to the overriding of instance members given in section \ref{classes} above hold for overriding between interfaces as well.
 
 \LMHash{}
-It is a static warning if $m$ is a method and $m^\prime$ is a getter, or if $m$ is a getter and $m^\prime$ is a method.
+It is a static warning if $m$ is a method and $m'$ is a getter, or if $m$ is a getter and $m'$ is a method.
 
-%Let $I = S_0$ be the implicit interface of a class $C$ declared in library $L$, and let $\{S_1 \ldots S_k\}$ be the set of all superinterfaces of $I$.
+%Let $I = S_0$ be the implicit interface of a class $C$ declared in library $L$, and let $\{S_1, \ldots, S_k\}$ be the set of all superinterfaces of $I$.
 
 %Let $I$ be the implicit interface of a class $C$.  $I$ inherits any instance members of its superinterfaces that are not overridden by members declared in $C$.
 
@@ -2426,9 +2513,11 @@
 If some but not all of the $m_i, 1 \le i \le k$ are getters none of the $m_i$ are inherited, and a static warning is issued.
 
 \LMHash{}
-Otherwise, if the static types $T_1, \ldots, T_k$ of the members $m_1, \ldots, m_k$ are not identical, then there must be a member $m_x$ such that $T_x <: T_i, 1 \le x \le k$ for all $i \in 1 .. k$, or a static type warning occurs.
-The member that is inherited is $m_x$, if it exists; otherwise:
-let $numberOfPositionals(f)$ denote the number of positional parameters of a function $f$, and let $numberOfRequiredParams(f)$ denote the number of required parameters of a function $f$.
+Otherwise, if the static types $T_1, \ldots, T_k$ of the members $m_1, \ldots, m_k$ are not identical then there must be an $x \in 1 .. k$ such that $T_x <: T_i$ for all $i \in 1 .. k$,
+or a static type warning occurs.
+The member that is inherited  is $m_x$, if it exists; otherwise:
+let $numberOfPositionals(f)$ denote the number of positional parameters of a function $f$,
+and let $numberOfRequiredParams(f)$ denote the number of required parameters of a function $f$.
 Furthermore, let $s$ denote the set of all named parameters of the $m_1, \ldots, m_k$.
 Then let
 
@@ -2496,7 +2585,7 @@
 A mixin application of the form \code{$S$ \WITH{} $M$;} defines a class $C$ with superclass $S$.
 
 \LMHash{}
-A mixin application of the form \code{$S$ \WITH{} $M_1, \ldots, M_k$;} defines a class $C$ whose superclass is the application of the mixin composition (\ref{mixinComposition}) $M_{k-1} * \ldots * M_1$ to $S$.
+A mixin application of the form \code{$S$ \WITH{} $M_1, \ldots,\ M_k$;} defines a class $C$ whose superclass is the application of the mixin composition (\ref{mixinComposition}) $M_{k-1} * \ldots * M_1$ to $S$.
 
 \LMHash{}
 In both cases above, $C$ declares the same instance members as $M$ (respectively, $M_k$).
@@ -2504,10 +2593,13 @@
 
 \LMHash{}
 Let $L_M$ be the library in which $M$ is declared.
-For each generative constructor named $q_i(T_{i1}$ $ a_{i1}, \ldots , T_{ik_i}$ $ a_{ik_i}), i \in 1 .. n$ of $S$ that is accessible to $L_M$, $C$ has an implicitly declared constructor named
+For each generative constructor named
+$q_i(T_{i1}\ a_{i1}, \ldots,\ T_{ik_i}\ a_{ik_i}), i \in 1 .. n$
+of $S$ that is accessible to $L_M$,
+$C$ has an implicitly declared constructor named
 $q'_i = [C/S]q_i$ of the form
 
-$q'_i(a_{i1}, \ldots , a_{ik_i}):\SUPER(a_{i1}, \ldots , a_{ik_i});$.
+\code{$q'_i$($a_{i1}, \ldots,\ a_{ik_i}$): \SUPER($a_{i1}, \ldots,\ a_{ik_i}$);}.
 
 %super.id
 
@@ -2529,15 +2621,18 @@
 }
 
 \LMHash{}
-The effect of a class definition of the form \code{\CLASS{} $C$ = $M$; } or the form \code{\CLASS{} $C<T_1, \ldots, T_n>$ = $M$; } in library $L$ is to introduce the name $C$ into the scope of $L$, bound to the class (\ref{classes}) defined by the mixin application $M$.
+The effect of a class definition of the form \code{\CLASS{} $C$ = $M$; } or the form \code{\CLASS{} $C$<$T_1, \ldots,\ T_n$> = $M$; } in library $L$ is to introduce the name $C$ into the scope of $L$, bound to the class (\ref{classes}) defined by the mixin application $M$.
 The name of the class is also set to $C$.
 If{}f the class is prefixed by the built-in identifier \ABSTRACT{}, the class being defined is an abstract class.
 
+\LMHash{}
 Let $M_A$ be a mixin derived from a class $M$ with direct superclass $S_{static}$, e.g., as defined by the class declaration \code{class M extends S$_{static}$ \{ \ldots \}}.
 
+\LMHash{}
 Let $A$ be an application of $M_A$.
 It is a static warning if the superclass of $A$ is not a subtype of $S_{static}$.
 
+\LMHash{}
 Let $C$ be a class declaration that includes $M_A$ in a with clause.
 It is a static warning if $C$ does not implement, directly or indirectly, all the direct superinterfaces of $M$.
 
@@ -2550,22 +2645,22 @@
 }
 
 \LMHash{}
-The {\em composition of two mixins}, $M_1<T_1 \ldots T_{k_{M_1}}>$ and $M_2<U_1 \ldots U_{k_{M_2}}>$, written $M_1<T_1 \ldots T_{k_{M_1}}> * M_2<U_1 \ldots U_{k_{M_2}}>$ defines an anonymous mixin such that for any class $S<V_1 \ldots V_{k_S}>$, the application of
+The {\em composition of two mixins}, $M_1<T_1, \ldots, T_{k_{M_1}}>$ and $M_2<U_1, \ldots, U_{k_{M_2}}>$, written $M_1<T_1, \ldots, T_{k_{M_1}}> * M_2<U_1, \ldots, U_{k_{M_2}}>$ defines an anonymous mixin such that for any class $S<V_1, \ldots, V_{k_S}>$, the application of
 
-$M_1<T_1 \ldots T_{k_{M_1}}> * M_2<U_1 \ldots U_{k_{M_2}}>$
+$M_1<T_1, \ldots, T_{k_{M_1}}> * M_2<U_1, \ldots, U_{k_{M_2}}>$
 
-to $S<V_1 \ldots V_{k_S}>$ is equivalent to
+to $S<V_1, \ldots, V_{k_S}>$ is equivalent to
 
 \begin{dartCode}
-\ABSTRACT{} \CLASS{} $Id_1<T_1 \ldots T_{k_{M_1}}, U_1 \ldots U_{k_{M_2}}, V_1 \ldots V_{k_S}> = $
-      $Id_2<U_1 \ldots U_{k_{M_2}}, V_1 \ldots V_{k_S}>$ \WITH{} $M_1 <T_1 \ldots T_{k_{M_1}}>$;
+\ABSTRACT{} \CLASS{} $Id_1<T_1, \ldots, T_{k_{M_1}}, U_1, \ldots, U_{k_{M_2}}, V_1, \ldots, V_{k_S}> = $
+      $Id_2<U_1, \ldots, U_{k_{M_2}}, V_1, \ldots, V_{k_S}>$ \WITH{} $M_1 <T_1, \ldots, T_{k_{M_1}}>$;
 \end{dartCode}
 
 where $Id_2$ denotes
 
 \begin{dartCode}
-\ABSTRACT{} \CLASS{} $Id_2<U_1 \ldots U_{k_{M_2}}, V_1 \ldots V_{k_S}> =$
-                         $S<V_1 \ldots V_{k_S}>$ \WITH{} $M_2<U_1 \ldots U_{k_{M_2}}>$;
+\ABSTRACT{} \CLASS{} $Id_2<U_1, \ldots, U_{k_{M_2}}, V_1, \ldots, V_{k_S}> =$
+                         $S<V_1, \ldots, V_{k_S}>$ \WITH{} $M_2<U_1, \ldots, U_{k_{M_2}}>$;
 \end{dartCode}
 
 and $Id_1$ and $Id_2$ are unique identifiers that do not exist anywhere in the program.
@@ -2597,7 +2692,7 @@
 \end{grammar}
 
 \LMHash{}
-The declaration of an enum of the form \code{metadata \ENUM{} E \{ id$_0$, \ldots id$_{n-1}$\};}
+The declaration of an enum of the form \code{metadata \ENUM{} E \{ id$_0$, \ldots,\ id$_{n-1}$\};}
 has the same effect as a class declaration
 
 \begin{dartCode}
@@ -2607,7 +2702,7 @@
   \STATIC{} \CONST{} E id$_0$ = \CONST{} E(0);
   $\ldots$
   \STATIC{} \CONST{} E id$_{n-1}$ = const E(n - 1);
-  \STATIC{} \CONST{} List<E> values = const <E>[id$_0 \ldots $ id$_{n-1}$];
+  \STATIC{} \CONST{} List<E> values = const <E>[id$_0, \ldots, $ id$_{n-1}$];
   String toString() => \{ 0: `E.id$_0$', $\ldots$, n-1: `E.id$_{n-1}$'\}[index]
 \}
 \end{dartCode}
@@ -2622,9 +2717,93 @@
 \LMLabel{generics}
 
 \LMHash{}
-A class declaration (\ref{classes}) or type alias (\ref{typedef})
-$G$ may be {\em generic}, that is, $G$ may have formal type parameters declared.
-A generic declaration induces a family of declarations, one for each set of actual type parameters provided in the program.
+A class declaration (\ref{classes}), type alias (\ref{typedef}), or function (\ref{functions}) $G$ may be {\em generic}, that is, $G$ may have formal type parameters declared.
+
+\LMHash{}
+When an entity in this specification is described as generic,
+and the special case is considered where the number of type arguments is zero,
+the type argument list should be omitted.
+
+\commentary{
+This allows non-generic cases to be included implicitly as special cases.
+For example, an invocation of a non-generic function arises as the special case where the function takes zero type arguments, and zero type arguments are passed.
+In this situation some operations are also omitted (have no effect), e.g.,
+operations where formal type parameters are replaced by actual type arguments.
+}
+
+\LMHash{}
+A {\em generic class declaration} introduces a generic class into the enclosing library scope.
+A {\em generic class} is a mapping that accepts a list of actual type arguments and maps them to a class.
+Consider a generic class declaration $G$ named \code{C} with formal type parameter declarations
+$X_1\ \EXTENDS\ B_1, \ldots,\ X_m\ \EXTENDS\ B_m$,
+and a parameterized type \code{C<$T_1, \ldots,\ T_l$>}.
+
+\LMHash{}
+It is a static warning if $m \not= l$.
+It is a static warning if there exists a $j$
+such that $T_j$ is not a subtype of $[T_1/X_1, \ldots, T_m/X_m]B_j$.
+
+\commentary{
+That is, if the number of type arguments is wrong,
+or if the $j$th actual type argument is not a subtype of the corresponding bound, where each formal type parameter has been replaced by the corresponding actual type argument.
+}
+
+\LMHash{}
+Otherwise, said parameterized type \code{C<$T_1, \ldots,\ T_m$>} denotes an application of the generic class declared by $G$ to the type arguments $T_1, \ldots, T_m$.
+This yields a class $C'$ whose members are equivalent to those of a class declaration which is obtained from the declaration of $G$ by replacing each occurrence of $X_j$ by $T_j$.
+\commentary{
+
+% TODO(eernst): make sure this list of properties is complete.
+Other properties of $C'$ such as the subtype relationships are specified elsewhere (\ref{interfaceTypes}).
+}
+
+\LMHash{}
+A {\em generic type alias} introduces a mapping from actual type argument lists to types.
+Consider a generic type alias declaration $G$ named \code{F} with formal type parameter declarations
+$X_1\ \EXTENDS\ B_1, \ldots,\ X_m\ \EXTENDS\ B_m$,
+and right hand side $T$,
+and the parameterized type \code{F<$T_1, \ldots,\ T_l$>}.
+
+\LMHash{}
+It is a static warning if $m \not= l$.
+It is a static warning if there exists a $j$
+such that $T_j$ is not a subtype of $[T_1/X_1, \ldots, T_m/X_m]B_j$.
+
+\commentary{
+That is, if the number of type arguments is wrong,
+or if the $j$th actual type argument violates the bound.
+}
+
+\LMHash{}
+Otherwise, said parameterized type
+\code{F<$T_1, \ldots,\ T_m$>}
+denotes an application of the mapping denoted by $G$ to the type arguments
+$T_1, \ldots, T_m$.
+This yields the type
+$[T_1/X_1, \ldots, T_m/X_m]T$.
+
+\commentary{
+A generic type alias does not correspond to any entities at run time,
+it is only an alias for an existing type.
+Hence, we may consider it as syntactic sugar which is eliminated before the program runs.
+}
+
+\LMHash{}
+A {\em generic function declaration} introduces a generic function (\ref{formalParameters}) into the enclosing scope.
+Consider a function invocation expression of the form
+\code{f<$T_1, \ldots,\ T_l$>(\ldots)},
+where the static type of \code{f} is a generic function type with formal type parameters
+$X_1\ \EXTENDS\ B_1, \ldots,\ X_m\ \EXTENDS\ B_m$.
+
+\LMHash{}
+It is a static warning if $m \not= l$.
+It is a static warning if there exists a $j$
+such that $T_j$ is not a subtype of $[T_1/X_1, \ldots, T_m/X_m]B_j$.
+
+\commentary{
+That is, if the number of type arguments is wrong,
+or if the $j$th actual type argument is not a subtype of the corresponding bound, where each formal type parameter has been replaced by the corresponding actual type argument.
+}
 
 \begin{grammar}
 {\bf typeParameter:}metadata identifier (\EXTENDS{} type)?
@@ -2641,14 +2820,20 @@
 The bounds of type variables are a form of type annotation and have no effect on execution in production mode.
 
 \LMHash{}
-Type parameters are declared in the type-parameter scope of a class.
+Type parameters are declared in the type parameter scope of a class or function.
 The type parameters of a generic $G$ are in scope in the bounds of all of the type parameters of $G$.
 The type parameters of a generic class declaration $G$ are also in scope in the \EXTENDS{} and \IMPLEMENTS{} clauses of $G$ (if these exist) and in the body of $G$.
-However, a type parameter is considered to be a malformed type when referenced by a static member.
+However, a type parameter of a generic class is considered to be a malformed type when referenced by a static member.
+
+\commentary{
+The scopes associated with the type parameters of a generic function are described in (\ref{formalParameters}).
+}
 
 \rationale{
-The restriction is necessary since a type variable has no meaning in the context of a static member, because statics are shared among all instantiations of a generic.
-However, a type variable may be referenced from an instance initializer, even though \THIS{} is not available.
+The restriction on static members is necessary since a type variable has no meaning in the context of a static member,
+because statics are shared among all generic instantiations of a generic class.
+However, a type variable may be referenced from an instance initializer,
+even though \THIS{} is not available.
 }
 
 \commentary{
@@ -2685,7 +2870,7 @@
 %\item The type arguments of any parameterized type in $S$.
 %\end{itemize}
 
-%Let $P$ be the instantiation of a generic type with its own type parameters. It is a compile-time error if the induced type set of $P$ is not finite.
+%Let $P$ be the generic instantiation of a generic type with its own type parameters. It is a compile-time error if the induced type set of $P$ is not finite.
 
 %\rationale {A typical recursive type declaration such as}
 
@@ -2695,7 +2880,7 @@
 %\end{dartCode}
 
 %\rationale{
-%poses no problem under this rule. The instantiation \code{D<T>} has an induced
+%poses no problem under this rule. The generic instantiation \code{D<T>} has an induced
 %set consisting of: \code{B<D<T$>>$, Object, D<T>, T}. However, the following variant
 %}
 
@@ -2705,8 +2890,8 @@
 %\end{dartCode}
 
 %\rationale{
-%is disallowed. Consider again the instantiation \code{D<T>}. It leads to the
-%superclass \code{B<D<D<T$>>>$}, and so adds \code{D<D$< $T$>>$} to the induced set. The latter in turn leads to \code{B<D<D<D<T$>>>>$} and \code{D<D<D<T$>>>$}
+%is disallowed. Consider again the generic instantiation \code{D<T>}. It leads to the
+%superclass \code{B<D<D<T$>>>$}, and so adds \code{D<D$<$T$>>$} to the induced set. The latter in turn leads to \code{B<D<D<D<T$>>>>$} and \code{D<D<D<T$>>>$}
 %and so on ad infinitum.}
 
 %\commentary{
@@ -2934,12 +3119,12 @@
   m1() \{
    \VAR{} z = \FALSE{};
     \IF{} (z) \{\RETURN{} x; \}
-    \ELSE{} \{ \RETURN{} 2;\}
+    \ELSE{} \{ \RETURN{} 2; \}
   \}
 
   m2() \{
     \IF{} (\TRUE{}) \{\RETURN{} y; \}
-    \ELSE{} \{ \RETURN{} 3;\}
+    \ELSE{} \{ \RETURN{} 3; \}
   \}
 \}
 \end{dartCode}
@@ -3176,8 +3361,8 @@
 \begin{grammar}
 {\bf singleLineString:}`{\escapegrammar \code{"}}' stringContentDQ* `{\escapegrammar \code{"}}';
   `{\escapegrammar \code{'}}' stringContentSQ* `{\escapegrammar \code{'}}';
-  `r' `{\escapegrammar \code{'}}' (\~{}( `{\escapegrammar \code{'}}' $|$ NEWLINE ))* `{\escapegrammar \code{'}}';
-  `r' `{\escapegrammar \code{"}}' (\~{}( `{\escapegrammar \code{"}}' $|$ NEWLINE ))* `{\escapegrammar \code{"}}'
+  `r{\escapegrammar \code{'}}' (\~{}( `{\escapegrammar \code{'}}' $|$ NEWLINE ))* `{\escapegrammar \code{'}}';
+  `r{\escapegrammar \code{"}}' (\~{}( `{\escapegrammar \code{"}}' $|$ NEWLINE ))* `{\escapegrammar \code{"}}'
   .
 \end{grammar}
 
@@ -3244,19 +3429,19 @@
 \begin{grammar}
 {\bf multilineString:}`{\escapegrammar \texttt{"""}}' stringContentTDQ* `{\escapegrammar \texttt{"""}}';
   `{\escapegrammar \code{'}\code{'}\code{'}}' stringContentTSQ* `{\escapegrammar \code{'}\code{'}\code{'}}';
-  `r' `{\escapegrammar \texttt{"""}}' (\~{} `{\escapegrammar \texttt{"""}}')* `{\escapegrammar \texttt{"""}}';
-  `r' `{\escapegrammar \code{'}\code{'}\code{'}}' (\~{} `{\escapegrammar \code{'}\code{'}\code{'}}')* `{\escapegrammar \code{'}\code{'}\code{'}}'
+  `r{\escapegrammar \texttt{"""}}' (\~{} `{\escapegrammar \texttt{"""}}')* `{\escapegrammar \texttt{"""}}';
+  `r{\escapegrammar \code{'}\code{'}\code{'}}' (\~{} `{\escapegrammar \code{'}\code{'}\code{'}}')* `{\escapegrammar \code{'}\code{'}\code{'}}'
   .
 
-{\bf ESCAPE\_SEQUENCE:}`$\backslash$ n';
-  `$\backslash$ r';
-  `$\backslash$ f';
-  `$\backslash$ b';
-  `$\backslash$ t';
-  `$\backslash$ v';
-  `$\backslash$ x' HEX\_DIGIT HEX\_DIGIT;
-  `$\backslash$ u' HEX\_DIGIT HEX\_DIGIT HEX\_DIGIT HEX\_DIGIT;
-  `$\backslash$ u\{' HEX\_DIGIT\_SEQUENCE `\}'
+{\bf ESCAPE\_SEQUENCE:}`$\backslash$n';
+  `$\backslash$r';
+  `$\backslash$f';
+  `$\backslash$b';
+  `$\backslash$t';
+  `$\backslash$v';
+  `$\backslash$x' HEX\_DIGIT HEX\_DIGIT;
+  `$\backslash$u' HEX\_DIGIT HEX\_DIGIT HEX\_DIGIT HEX\_DIGIT;
+  `$\backslash$u\{' HEX\_DIGIT\_SEQUENCE `\}'
   .
 
 {\bf HEX\_DIGIT\_SEQUENCE:}HEX\_DIGIT HEX\_DIGIT? HEX\_DIGIT?
@@ -3266,7 +3451,7 @@
 
 \LMHash{}
 Multiline strings are delimited by either matching triples of single quotes or matching triples of double quotes.
-If the first line of a multiline string consists solely of the whitespace characters defined by the production {\em WHITESPACE} \ref{lexicalRules}), possibly prefixed by $\backslash$, then that line is ignored, including the line break at its end.
+If the first line of a multiline string consists solely of the whitespace characters defined by the production {\em WHITESPACE} (\ref{lexicalRules}), possibly prefixed by $\backslash$, then that line is ignored, including the line break at its end.
 
 \rationale{
 The idea is to ignore a whitespace-only first line of a multiline string, where whitespace is defined as tabs, spaces and the final line break.
@@ -3327,9 +3512,9 @@
   stringInterpolation
   .
 
-{\bf NEWLINE:}$\backslash$ n;
-  $\backslash$ r;
-  $\backslash$ r $\backslash$ n
+{\bf NEWLINE:}$\backslash$n;
+  $\backslash$r;
+  $\backslash$r$\backslash$n
   .
 \end{grammar}
 
@@ -3348,7 +3533,7 @@
 
 \begin{grammar}
 {\bf stringInterpolation:}`\$' IDENTIFIER\_NO\_DOLLAR;
-  `\$' `\{' expression `\}'
+  `\$\{' expression `\}'
   .
 \end{grammar}
 
@@ -3366,7 +3551,7 @@
 
 \LMHash{}
 The form \code{\$id} is equivalent to the form \code{\$\{id\}}.
-An interpolated string, $s$, with content `\code{$s_0$\$\{$e_1$\}$s_1\ldots{}s_{n-1}\$\{e_n\}s_{n}$}' (where any of $s_0 \ldots{} s_n$ can be empty)
+An interpolated string, $s$, with content `\code{$s_0$\$\{$e_1$\}$s_1\ldots{}s_{n-1}\$\{e_n\}s_{n}$}' (where any of $s_0, \ldots, s_n$ can be empty)
 is evaluated by evaluating each expression $e_i$ ($1 \le i \le n$) in to a string $r_i$ in the order they occur in the source text, as follows:
 \begin{itemize}
 \item{} Evaluate $e_i$ to an object $o_i$.
@@ -3374,7 +3559,7 @@
  $r_i$ be the returned value.
 \item{} If $r_i$ is not an instance of the built-in type \code{String}, throw an \code{Error}.
 \end{itemize}
-Finally, the result of the evaluation of $s$ is the concatenation of the strings $s_0$, $r_1$, \ldots{}, $r_n$, and $s_n$.
+Finally, the result of the evaluation of $s$ is the concatenation of the strings $s_0$, $r_1$, \ldots, $r_n$, and $s_n$.
 
 
 \subsection{Symbols}
@@ -3429,7 +3614,7 @@
 The number of elements in a list is its size.
 A list has an associated set of indices.
 An empty list has an empty set of indices.
-A non-empty list has the index set $\{0 \ldots n -1\}$ where $n$ is the size of the list.
+A non-empty list has the index set $\{0, \ldots, n - 1\}$ where $n$ is the size of the list.
 It is a run-time error to attempt to access a list using an index that is not a member of its set of indices.
 
 \LMHash{}
@@ -3447,12 +3632,12 @@
 }
 
 \LMHash{}
-The value of a constant list literal \CONST{} $<E>[e_1\ldots e_n]$ is an object $a$ whose class implements the built-in class $List<E>$.
+The value of a constant list literal \CONST{} $<E>[e_1, \ldots, e_n]$ is an object $a$ whose class implements the built-in class $List<E>$.
 The $i$th element of $a$ is $v_{i+1}$, where $v_i$ is the value of the compile-time expression $e_i$.
-The value of a constant list literal \CONST{} $[e_1 \ldots e_n]$ is defined as the value of the constant list literal \CONST{}$ < \DYNAMIC{}>[e_1\ldots e_n]$.
+The value of a constant list literal \CONST{} $[e_1, \ldots, e_n]$ is defined as the value of the constant list literal \CONST{}$ <\DYNAMIC{}>[e_1, \ldots, e_n]$.
 
 \LMHash{}
-Let $list_1 =$ \CONST{} $<V>[e_{11} \ldots e_{1n}]$ and $list_2 =$ \CONST{} $<U>[e_{21} \ldots e_{2n}]$ be two constant list literals and let the elements of $list_1$ and $list_2$ evaluate to $o_{11} \ldots o_{1n}$ and $o_{21} \ldots o_{2n}$ respectively.
+Let $list_1 =$ \CONST{} $<V>[e_{11}, \ldots, e_{1n}]$ and $list_2 =$ \CONST{} $<U>[e_{21}, \ldots, e_{2n}]$ be two constant list literals and let the elements of $list_1$ and $list_2$ evaluate to $o_{11}, \ldots, o_{1n}$ and $o_{21}, \ldots, o_{2n}$ respectively.
 If{}f \code{identical($o_{1i}$, $o_{2i}$)} for $i \in 1 .. n$ and $V = U$ then \code{identical($list_1$, $list_2$)}.
 
 \commentary{
@@ -3460,10 +3645,10 @@
 }
 
 \LMHash{}
-A run-time list literal $<E>[e_1 \ldots e_n]$ is evaluated as follows:
+A run-time list literal $<E>[e_1, \ldots, e_n]$ is evaluated as follows:
 \begin{itemize}
 \item
-First, the expressions $e_1 \ldots e_n$ are evaluated in order they appear in the program, producing objects $o_1 \ldots o_n$.
+First, the expressions $e_1, \ldots, e_n$ are evaluated in order they appear in the program, producing objects $o_1, \ldots, o_n$.
 \item A fresh instance (\ref{generativeConstructors}) $a$, of size $n$, whose class implements the built-in class $List<E>$ is allocated.
 \item
 The operator \code{[]=} is invoked on $a$ with first argument $i$ and second argument
@@ -3480,7 +3665,7 @@
 }
 
 \LMHash{}
-A run-time list literal $[e_1 \ldots e_n]$ is evaluated as $< \DYNAMIC{}>[e_1\ldots e_n]$.
+A run-time list literal $[e_1, \ldots, e_n]$ is evaluated as $<\DYNAMIC{}>[e_1, \ldots, e_n]$.
 
 \commentary{
 There is no restriction precluding nesting of list literals.
@@ -3490,8 +3675,8 @@
 }
 
 \LMHash{}
-The static type of a list literal of the form \CONST{}$ <E>[e_1\ldots e_n]$ or the form $<E>[e_1 \ldots e_n]$ is $List<E>$.
-The static type a list literal of the form \CONST{} $[e_1 \ldots e_n$] or the form $[e_1\ldots e_n$] is $List< \DYNAMIC{}>$.
+The static type of a list literal of the form \CONST{}$ <E>[e_1, \ldots, e_n]$ or the form $<E>[e_1, \ldots, e_n]$ is $List<E>$.
+The static type a list literal of the form \CONST{} $[e_1, \ldots, e_n$] or the form $[e_1, \ldots, e_n$] is $List<\DYNAMIC{}>$.
 
 \rationale{
 It is tempting to assume that the type of the list literal would be computed based on the types of its elements.
@@ -3540,13 +3725,13 @@
 It is a compile-time error if the type arguments of a constant map literal include a type parameter.
 
 \LMHash{}
-The value of a constant map literal \CONST{}$ <K, V>\{k_1:e_1\ldots k_n :e_n\}$ is an object $m$ whose class implements the built-in class $Map<K, V>$.
+The value of a constant map literal \CONST{}$ <K, V>\{k_1:e_1, \ldots, k_n :e_n\}$ is an object $m$ whose class implements the built-in class $Map<K, V>$.
 The entries of $m$ are $u_i:v_i, i \in 1 .. n$, where $u_i$ is the value of the compile-time expression $k_i$ and $v_i$ is the value of the compile-time expression $e_i$.
-The value of a constant map literal \CONST{} $\{k_1:e_1\ldots k_n :e_n\}$ is defined as the value of a constant map literal \CONST{} $<\DYNAMIC{}, \DYNAMIC{}>\{k_1:e_1\ldots k_n :e_n\}$.
+The value of a constant map literal \CONST{} $\{k_1:e_1, \ldots, k_n :e_n\}$ is defined as the value of a constant map literal \CONST{} $<\DYNAMIC{}, \DYNAMIC{}>\{k_1:e_1, \ldots, k_n:e_n\}$.
 
 \LMHash{}
-Let $map_1 =$ \CONST{}$ <K, V>\{k_{11}:e_{11} \ldots k_{1n} :e_{1n}\}$ and $map_2 =$ \CONST{}$ <J, U>\{k_{21}:e_{21} \ldots k_{2n} :e_{2n}\}$ be two constant map literals.
-Let the keys of $map_1$ and $map_2$ evaluate to $s_{11} \ldots s_{1n}$ and $s_{21} \ldots s_{2n}$ respectively, and let the elements of $map_1$ and $map_2$ evaluate to $o_{11} \ldots o_{1n}$ and $o_{21} \ldots o_{2n}$ respectively.
+Let $map_1 =$ \CONST{}$ <K, V>\{k_{11}:e_{11}, \ldots, k_{1n} :e_{1n}\}$ and $map_2 =$ \CONST{}$ <J, U>\{k_{21}:e_{21}, \ldots, k_{2n} :e_{2n}\}$ be two constant map literals.
+Let the keys of $map_1$ and $map_2$ evaluate to $s_{11}, \ldots, s_{1n}$ and $s_{21}, \ldots, s_{2n}$ respectively, and let the elements of $map_1$ and $map_2$ evaluate to $o_{11}, \ldots, o_{1n}$ and $o_{21}, \ldots, o_{2n}$ respectively.
 If{}f \code{identical($o_{1i}$, $o_{2i}$)} and \code{identical($s_{1i}$, $s_{2i}$)} for $i \in 1 .. n$, and $K = J, V = U$ then \code{identical($map_1$, $map_2$)}.
 
 \commentary{
@@ -3554,13 +3739,13 @@
 }
 
 \LMHash{}
-A run-time map literal $<K, V>\{k_1:e_1\ldots k_n :e_n\}$ is evaluated as follows:
+A run-time map literal $<K, V>\{k_1:e_1, \ldots, k_n :e_n\}$ is evaluated as follows:
 \begin{itemize}
 \item
 For each $i \in 1 .. n$ in numeric order,
 first the expression $k_i$ is evaluated producing object $u_i$,
 and then $e_i$ is evaluated producing object $o_i$.
-This produces all the objects $u_1, o_1\ldots u_n, o_n$.
+This produces all the objects $u_1, o_1, \ldots, u_n, o_n$.
 \item A fresh instance (\ref{generativeConstructors}) $m$ whose class implements the built-in class $Map<K, V>$ is allocated.
 \item
 The operator \code{[]=} is invoked on $m$ with first argument $u_i$ and second argument $o_i$ for each $i \in 1 .. n$.
@@ -3569,9 +3754,9 @@
 \end{itemize}
 
 \LMHash{}
-A run-time map literal $\{k_1:e_1\ldots k_n :e_n\}$ is evaluated as
+A run-time map literal $\{k_1:e_1, \ldots, k_n :e_n\}$ is evaluated as
 
-$<\DYNAMIC{}, \DYNAMIC{}>\{k_1:e_1\ldots k_n :e_n\}$.
+$<\DYNAMIC{}, \DYNAMIC{}>\{k_1:e_1, \ldots, k_n :e_n\}$.
 
 \LMHash{}
 If{}f all the keys in a map literal are compile-time constants, it is a static warning if the values of any two keys in a map literal are equal.
@@ -3585,8 +3770,8 @@
 }
 
 \LMHash{}
-The static type of a map literal of the form \CONST{}$ <K, V>\{k_1:e_1\ldots k_n :e_n\}$ or the form $<K, V>\{k_1:e_1\ldots k_n :e_n\}$ is $Map<K, V>$.
-The static type of a map literal of the form \CONST{}$\{k_1:e_1\ldots k_n :e_n\}$ or the form $\{k_1:e_1\ldots k_n :e_n\}$ is $Map<\DYNAMIC{}, \DYNAMIC{}>$.
+The static type of a map literal of the form \CONST{}$ <K, V>\{k_1:e_1, \ldots, k_n :e_n\}$ or the form $<K, V>\{k_1:e_1, \ldots, k_n :e_n\}$ is $Map<K, V>$.
+The static type of a map literal of the form \CONST{}$\{k_1:e_1, \ldots, k_n :e_n\}$ or the form $\{k_1:e_1, \ldots, k_n :e_n\}$ is $Map<\DYNAMIC{}, \DYNAMIC{}>$.
 
 
 \subsection{Throw}
@@ -3640,114 +3825,219 @@
 A {\em function literal} is an object that encapsulates an executable unit of code.
 
 \begin{grammar}
-{\bf functionExpression:}formalParameterList functionBody
+{\bf functionExpression:}formalParameterPart functionBody
   .
 \end{grammar}
 
+%% TODO[inference]: The static and dynamic type of a function literal
+%% interacts with inference: If a type-from-context $T$ exists and the
+%% function literal can be given a type which is a subtype of $T$, we may
+%% end up typing both the function as a whole and the body of the function
+%% very differently than we would in a situation where no type-from-context
+%% exists. So the rules below must be changed to be the default case (where
+%% no type-from-context is available, or it is `Object` or some other
+%% non-constraing type, and other cases where the type-from-context is
+%% actually used to select the function literal signature must be described
+%% specifically for each relevant type of situation.
+
 \LMHash{}
 The class of a function literal implements the built-in class \code{Function}.
-%Invoking the getter \code{runtimeType} on a function literal returns the \code{Type} object that is the value of the expression \code{Function}.
-% not necessarily
-
-%Q{Can anyone implement it? Then we should define things via call}
 
 \LMHash{}
 The static type of a function literal of the form
 
-$(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k]) => e$
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>}
+
+\code{($T_1\ a_1, \ldots,\ T_n\ a_n, $ [$T_{n+1}\ x_{n+1} = d_1, \ldots,\ T_{n+k}\ x_{n+k} = d_k$]) => $e$}
+
+\noindent
 is
 
-$(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow T_0$, where $T_0$ is the static type of $e$.
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>($T_1, \ldots,\ T_n, $ [$T_{n+1}\ x_{n+1}, \ldots,\ T_{n+k}\ x_{n+k}$]) $ \rightarrow T_0$},
+
+\noindent
+%% TODO[inference]: The static type of the function literal may come from context.
+where $T_0$ is the static type of $e$.
 
 \LMHash{}
 The static type of a function literal of the form
 
-$(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k} = d_k])$ \ASYNC{} $=> e$
-is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow \code{Future<$flatten(T_0)$>}$, where $T_0$ is the static type of $e$and $flatten(T)$ is defined as follows:
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>}
 
-If $T = FutureOr<S>$ then $flatten(T) = S$.
+\code{($T_1\ a_1, \ldots,\ T_n\ a_n, $ [$T_{n+1}\ x_{n+1} = d_1, \ldots,\ T_{n+k}\ x_{n+k} = d_k$]) \ASYNC{} => $e$}
 
-Otherwise if $T <: Future$ then let $S$ be a type such that $T << Future<S>$ and for all $R$, if $T << Future<R>$ then $S << R$.
+\noindent
+is
+
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>}
+
+\code{($T_1, \ldots,\ T_n, $ [$T_{n+1}\ x_{n+1}, \ldots,\ T_{n+k}\ x_{n+k}$]) $ \rightarrow$ Future<$flatten(T_0)$>},
+
+\noindent
+where $T_0$ is the static type of $e$.
+
+\LMHash{}
+In the previous two paragraphs, the type argument lists are omitted in the case where $m = 0$, and $flatten(T)$ is defined as follows:
+
+\begin{itemize}
+\item If \code{$T =$ FutureOr<$S$>} then $flatten(T) = S$.
+
+\item Otherwise if
+\code{$T <:$ Future}
+then let $S$ be a type such that
+\code{$T <<$ Future<$S$>}
+and for all $R$, if
+\code{$T <<$ Future<$R$>}
+then $S << R$.
 
 \rationale{
-This ensures that \code{Future<$S$>} is the most specific instantiation of \code{Future} that is a supertype of $T$.
+This ensures that
+\code{Future<$S$>}
+is the most specific generic instantiation of \code{Future} that is a supertype of $T$.
+%% TODO[class-interfaces]: When we have finished the specification of class
+%% interface computations we may have the following property, but it is not
+%% true at this point. Adjust the following by then!
 Note that $S$ is well-defined because of the requirements on superinterfaces.
 }
 
 Then $flatten(T) = S$.
 
-In any other circumstance, $flatten(T) = T$.
+\item In any other circumstance, $flatten(T) = T$.
+\end{itemize}
 
 \LMHash{}
 The static type of a function literal of the form
 
-$(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k\}) => e$
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>}
+
+\code{($T_1\ a_1, \ldots,\ T_n\ a_n, $ \{$T_{n+1}\ x_{n+1} = d_1, \ldots,\ T_{n+k}\ x_{n+k} = d_k$\}) => $e$}
+
+\noindent
 is
 
-$(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow T_0$, where $T_0$ is the static type of $e$.
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>($T_1, \ldots,\ T_n, $ \{$T_{n+1}\ x_{n+1}, \ldots,\ T_{n+k}\ x_{n+k}$\}) $ \rightarrow T_0$},
+
+\noindent
+where $T_0$ is the static type of $e$.
 
 \LMHash{}
 The static type of a function literal of the form
 
-$(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k\})$ \ASYNC{} $=> e$
+\code{<$X_1 B_1, \ldots,\ X_m B_m$>}
 
-is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow Future<flatten(T_0)>$, where $T_0$ is the static type of $e$.
+\code{($T_1\ a_1, \ldots,\ T_n\ a_n, $ \{$T_{n+1}\ x_{n+1} = d_1, \ldots,\ T_{n+k}\ x_{n+k} = d_k$\}) \ASYNC{} => $e$}
+
+\noindent
+is
+
+\code{<$X_1 B_1, \ldots,\ X_m B_m$>}
+
+\code{($T_1, \ldots,\ T_n, $ \{$T_{n+1}\ x_{n+1}, \ldots,\ T_{n+k}\ x_{n+k}$\}) $ \rightarrow$ Future<$flatten(T_0)$>},
+
+\noindent
+where $T_0$ is the static type of $e$.
 
 \LMHash{}
 The static type of a function literal of the form
 
-$(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k}= d_k])\{s\}$
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>}
 
-is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow \DYNAMIC{}$.
+\code{($T_1\ a_1, \ldots,\ T_n\ a_n, $ [$T_{n+1}\ x_{n+1} = d_1, \ldots,\ T_{n+k}\ x_{n+k}= d_k$]) \{ $s$ \}}
+
+\noindent
+is
+
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>($T_1, \ldots,\ T_n, $ [$T_{n+1}\ x_{n+1}, \ldots,\ T_{n+k}\ x_{n+k}$]) $ \rightarrow$ \DYNAMIC{}}.
 
 \LMHash{}
 The static type of a function literal of the form
 
-$(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k}= d_k])$ $ \ASYNC{}$ $\{s\}$
-is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow Future$.
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>}
+
+\code{($T_1\ a_1, \ldots,\ T_n\ a_n, $ [$T_{n+1}\ x_{n+1} = d_1, \ldots,\ T_{n+k}\ x_{n+k} = d_k$]) \ASYNC{} \{ $s$ \}}
+
+\noindent
+is
+
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>($T_1, \ldots,\ T_n, $ [$T_{n+1}\ x_{n+1}, \ldots,\ T_{n+k}\ x_{n+k}$]) $ \rightarrow$ Future}.
 
 \LMHash{}
 The static type of a function literal of the form
 
-$(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k}= d_k])$ $ \ASYNC*{}$ $\{s\}$
-is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow Stream$.
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>}
+
+\code{($T_1\ a_1, \ldots,\ T_n\ a_n, $ [$T_{n+1}\ x_{n+1} = d_1, \ldots,\ T_{n+k}\ x_{n+k}= d_k$]) \ASYNC*{} \{ $s$ \}}
+
+\noindent
+is
+
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>($T_1, \ldots,\ T_n, $ [$T_{n+1}\ x_{n+1}, \ldots,\ T_{n+k}\ x_{n+k}$]) $ \rightarrow$ Stream}.
 
 \LMHash{}
 The static type of a function literal of the form
 
-$(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k}= d_k])$ $ \SYNC*{}$ $\{s\}$
-is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow Iterable$.
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>}
+
+\code{($T_1\ a_1, \ldots,\ T_n\ a_n, $ [$T_{n+1}\ x_{n+1} = d_1, \ldots,\ T_{n+k}\ x_{n+k}= d_k$]) \SYNC*{} \{ $s$ \}}
+
+\noindent
+is
+
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>($T_1, \ldots,\ T_n, $ [$T_{n+1}\ x_{n+1}, \ldots,\ T_{n+k}\ x_{n+k}$]) $ \rightarrow$ Iterable}.
 
 \LMHash{}
 The static type of a function literal of the form
 
-$(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k}= d_k])\{s\}$
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>}
 
-is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow \DYNAMIC{}$.
+\code{($T_1\ a_1, \ldots,\ T_n\ a_n, $ [$T_{n+1}\ x_{n+1} = d_1, \ldots,\ T_{n+k}\ x_{n+k}= d_k$]) \{ $s$ \}}
+
+\noindent
+is
+
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>($T_1, \ldots,\ T_n, $ [$T_{n+1}\ x_{n+1}, \ldots,\ T_{n+k}\ x_{n+k}$]) $ \rightarrow$ \DYNAMIC{}}.
 
 \LMHash{}
 The static type of a function literal of the form
 
-$(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k\})$ $\ASYNC{}$ $\{s\}$
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>}
 
-is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow Future{}$.
+\code{($T_1\ a_1, \ldots,\ T_n\ a_n, $ \{$T_{n+1}\ x_{n+1} = d_1, \ldots,\ T_{n+k}\ x_{n+k} = d_k$\}) \ASYNC{} \{ $s$ \}}
+
+\noindent
+is
+
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>($T_1, \ldots,\ T_n, $ \{$T_{n+1}\ x_{n+1}, \ldots,\ T_{n+k}\ x_{n+k}$\}) $ \rightarrow$ Future}.
 
 \LMHash{}
 The static type of a function literal of the form
 
-$(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k\})$ $\ASYNC*{}$ $\{s\}$
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>}
 
-is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow Stream{}$.
+\code{($T_1\ a_1, \ldots,\ T_n\ a_n, $ \{$T_{n+1}\ x_{n+1} = d_1, \ldots,\ T_{n+k}\ x_{n+k} = d_k$\}) \ASYNC*{} \{ $s$ \}}
+
+\noindent
+is
+
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>($T_1, \ldots,\ T_n, $ \{$T_{n+1}\ x_{n+1}, \ldots,\ T_{n+k}\ x_{n+k}$\}) $ \rightarrow$ Stream}.
 
 \LMHash{}
 The static type of a function literal of the form
 
-$(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k\})$ $\SYNC*{}$ $\{s\}$
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>}
 
-is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow Iterable{}$.
+\code{($T_1\ a_1, \ldots,\ T_n\ a_n, $ \{$T_{n+1}\ x_{n+1} = d_1, \ldots,\ T_{n+k}\ x_{n+k} = d_k$\}) \SYNC*{} \{ $s$ \}}
+
+\noindent
+is
+
+\code{<$X_1\ B_1, \ldots,\ X_m\ B_m$>($T_1, \ldots,\ T_n, $ \{$T_{n+1}\ x_{n+1}, \ldots,\ T_{n+k}\ x_{n+k}$\}) $ \rightarrow$ Iterable}.
 
 \LMHash{}
-In all of the above cases, whenever $T_i, 1 \le i \le n+k$, is not specified, it is considered to have been specified as \DYNAMIC{}.
+In all of the above cases,
+the type argument lists are omitted when $m=0$,
+and whenever $T_i, 1 \le i \le n+k$, is not specified,
+it is considered to have been specified as \DYNAMIC{}.
 
 
 \subsection{This}
@@ -3786,24 +4076,25 @@
 It is a static type warning if
 the type $T$ in an instance creation expression of one of the forms
 
-\NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$,
+\code{\NEW{} $T.id$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)},
 
-\NEW{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$,
+\code{\NEW{} $T$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)},
 
-\CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$,
+\code{\CONST{} $T.id$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)},
 
-\CONST{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ is malformed (\ref{dynamicTypeSystem}) or malbounded (\ref{parameterizedTypes}).
+\code{\CONST{} $T$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+is malformed (\ref{dynamicTypeSystem}) or malbounded (\ref{parameterizedTypes}).
 
 \LMHash{}
 It is a compile-time error if the type $T$ in an instance creation expression of one of the forms
 
-\NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$,
+\code{\NEW{} $T.id$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)},
 
-\NEW{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$,
+\code{\NEW{} $T$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)},
 
-\CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$,
+\code{\CONST{} $T.id$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)},
 
-\CONST{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$
+\code{\CONST{} $T$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
 
 is an enumerated type (\ref{enums}).
 %any of the type arguments to a constructor of a generic type $G$ invoked by a new expression or a constant object expression are not subtypes of the bounds of the corresponding formal type parameters of $G$.
@@ -3823,9 +4114,10 @@
 \LMHash{}
 Let $e$ be a new expression of the form
 
-\NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ or the form
+\code{\NEW{} $T.id$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+or the form
 
-\NEW{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
+\code{\NEW{} $T$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}.
 
 %It is a run-time type error if
 %the type $T$ is malformed.
@@ -3837,18 +4129,27 @@
 If $T$ is a class or parameterized type accessible in the current scope then:
 \begin{itemize}
 \item
-If $e$ is of the form \NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ it is a static warning if $T.id$ is not the name of a constructor declared by the type $T$.
-If $e$ is of the form \NEW{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ it is a static warning if the type $T$ does not declare a constructor with the same name as the declaration of $T$.
+If $e$ is of the form
+\code{\NEW{} $T.id$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+it is a static warning if $T.id$ is not the name of a constructor declared by the type $T$.
+\item
+If $e$ is of the form
+\code{\NEW{} $T$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+it is a static warning if the type $T$ does not declare a constructor with the same name as the declaration of $T$.
 \end{itemize}
 
 \LMHash{}
-If $T$ is a parameterized type (\ref{parameterizedTypes}) $S<U_1, \ldots, U_m>$, let $R = S$.
+If $T$ is a parameterized type (\ref{parameterizedTypes})
+\code{$S$<$U_1, \ldots,\ U_m$>},
+let $R = S$.
 %It is a
 %compile-time CHANGED
 %run-time type
 %error if $S$ is not a generic (\ref{generics}) type with $m$ type parameters.
 If $T$ is not a parameterized type, let $R = T$.
-Furthermore, if $e$ is of the form \NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ then let $q$ be the constructor $T.id$, otherwise let $q$ be the constructor $T$.
+Furthermore, if $e$ is of the form
+\code{\NEW{} $T.id$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+then let $q$ be the constructor $T.id$, otherwise let $q$ be the constructor $T$.
 
 \LMHash{}
 If $R$ is a generic with $l = m$ type parameters then
@@ -3865,7 +4166,9 @@
 Evaluation of $e$ proceeds as follows:
 
 \LMHash{}
-First, the argument list $(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ is evaluated.
+First, the argument list
+\code{($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+is evaluated.
 
 \LMHash{}
 If $T$ is a deferred type with prefix $p$, then if $p$ has not been successfully loaded, a dynamic error occurs.
@@ -3889,7 +4192,7 @@
 
 \LMHash{}
 A fresh instance (\ref{generativeConstructors}), $i$, of class $R$ is allocated.
-Then $q$ is executed to initialize $i$ with respect to the bindings that resulted from the evaluation of the argument list, and, if $R$ is a generic class, with its type parameters bound to $V_1 \ldots V_m$.
+Then $q$ is executed to initialize $i$ with respect to the bindings that resulted from the evaluation of the argument list, and, if $R$ is a generic class, with its type parameters bound to $V_1, \ldots, V_m$.
 
 If execution of $q$ completes normally (\ref{completion}), $e$ evaluates to $i$.
 Otherwise execution of $q$ throws an exception object $x$ and stack trace $t$,
@@ -3901,9 +4204,9 @@
 Then:
 
 \LMHash{}
-If $q$ is a redirecting factory constructor of the form $T(p_1, \ldots, p_{n+k}) = c;$ or of the form $T.id(p_1, \ldots, p_{n+k}) = c;$ then the result of the evaluation of $e$ is equivalent to evaluating the expression
+If $q$ is a redirecting factory constructor of the form $T(p_1, \ldots,\ p_{n+k}) = c;$ or of the form $T.id(p_1, \ldots,\ p_{n+k}) = c;$ then the result of the evaluation of $e$ is equivalent to evaluating the expression
 
-$[V_1, \ldots, V_m/T_1, \ldots, T_m]($\code{\NEW{} $c(a_1, \ldots, a_n, x_{n+1}: a_{n+1}, \ldots, x_{n+k}: a_{n+k}))$}.
+$[V_1/T_1, \ldots, V_m/T_m]($\code{\NEW{} $c(a_1, \ldots,\ a_n, x_{n+1}: a_{n+1}, \ldots,\ x_{n+k}: a_{n+k}))$}.
 If evaluation of $q$ causes $q$ to be re-evaluated cyclically, with only factory constructor redirections in-between, a run-time error occurs.
 % Used to not have the "in-between" clause, which would disallow a factory constructor redirecting to another constructor which conditionally calls the original factory constructor again with different arguments.
 
@@ -3931,14 +4234,14 @@
 \LMHash{}
 The static type of an instance creation expression of either the form
 
-\NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$
+\code{\NEW{} $T.id$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
 
 or the form
 
-\NEW{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$
+\code{\NEW{} $T$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
 
 is $T$.
-It is a static warning if the static type of $a_i, 1 \le i \le n+ k$ may not be assigned to the type of the corresponding formal parameter of the constructor $T.id$ (respectively $T$).
+It is a static warning if the static type of $a_i, 1 \le i \le n + k$ may not be assigned to the type of the corresponding formal parameter of the constructor $T.id$ (respectively $T$).
 
 
 \subsubsection{Const}
@@ -3955,9 +4258,10 @@
 \LMHash{}
 Let $e$ be a constant object expression of the form
 
-\CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$
+\code{\CONST{} $T.id$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
 
-or the form \CONST{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
+or the form
+\code{\CONST{} $T$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}.
 It is a compile-time error if $T$ does not denote a class accessible in the current scope.
 It is a compile-time error if $T$ is a deferred type (\ref{staticTypes}).
 
@@ -3969,14 +4273,18 @@
 If $T$ is a parameterized type, it is a compile-time error if $T$ includes a type variable among its type arguments.
 
 \LMHash{}
-If $e$ is of the form \CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ it is a compile-time error if $T.id$ is not the name of a constant constructor declared by the type $T$.
-If $e$ is of the form \CONST{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ it is a compile-time error if the type $T$ does not declare a constant constructor with the same name as the declaration of $T$.
+If $e$ is of the form
+\code{\CONST{} $T.id$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+it is a compile-time error if $T.id$ is not the name of a constant constructor declared by the type $T$.
+If $e$ is of the form
+\code{\CONST{} $T$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+it is a compile-time error if the type $T$ does not declare a constant constructor with the same name as the declaration of $T$.
 
 \LMHash{}
 In all of the above cases, it is a compile-time error if $a_i, i\in 1 .. n + k$, is not a compile-time constant expression.
 
-%If $T$ is a parameterized type (\ref{parameterizedTypes}) $S<U_1, \ldots, U_m>$, let $R = S$.  It is a compile-time error if $T$ is malformed. If $T$ is not a parameterized type, let $R = T$.
- %Finally,
+%If $T$ is a parameterized type (\ref{parameterizedTypes}) $S<U_1, \ldots,\ U_m>$, let $R = S$.  It is a compile-time error if $T$ is malformed. If $T$ is not a parameterized type, let $R = T$.
+%Finally,
 % If $T$ is a generic with $l$ retype parameters, then for all $ i \in 1 .. l$, let $V_i = \DYNAMIC{}$.
 
 \LMHash{}
@@ -3985,20 +4293,20 @@
 \LMHash{}
 First, if $e$ is of the form
 
-\CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$
+\code{\CONST{} $T.id$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
 
 then let $i$ be the value of the expression
 
-\NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
+\code{\NEW{} $T.id$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}.
 
 \LMHash{}
 Otherwise, $e$ must be of the form
 
-\CONST{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$,
+\code{\CONST{} $T$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)},
 
 in which case let $i$ be the result of evaluating
 
-\NEW{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
+\code{\NEW{} $T$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}.
 
 \LMHash{}
 Then:
@@ -4023,11 +4331,11 @@
 \LMHash{}
 The static type of a constant object expression of either the form
 
-\CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$
+\code{\CONST{} $T.id$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
 
 or the form
 
-\CONST{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$
+\code{\CONST{} $T$($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
 
 is $T$.
 It is a static warning if the static type of $a_i, 1 \le i \le n+ k$ may not be assigned to the type of the corresponding formal parameter of the constructor $T.id$ (respectively $T$).
@@ -4063,7 +4371,7 @@
 }
 
 \LMHash{}
-Given an instance creation expression of the form \CONST{} $q(a_1, \ldots , a_n)$ it is a static warning if $q$ is a constructor of an abstract class (\ref{abstractInstanceMembers}) but $q$ is not a factory constructor.
+Given an instance creation expression of the form \CONST{} $q(a_1, \ldots,\ a_n)$ it is a static warning if $q$ is a constructor of an abstract class (\ref{abstractInstanceMembers}) but $q$ is not a factory constructor.
 
 
 \subsection{Spawning an Isolate}
@@ -4086,9 +4394,15 @@
 \LMLabel{functionInvocation}
 
 \LMHash{}
-Function invocation occurs in the following cases: when a function expression (\ref{functionExpressions}) is invoked (\ref{functionExpressionInvocation}), when a method (\ref{methodInvocation}), getter (\ref{topLevelGetterInvocation}, \ref{propertyExtraction}) or setter (\ref{assignment}) is invoked or when a constructor is invoked (either via instance creation (\ref{instanceCreation}), constructor redirection (\ref{redirectingConstructors}) or super initialization).
+Function invocation occurs in the following cases:
+when a function expression (\ref{functionExpressions}) is invoked (\ref{functionExpressionInvocation}),
+when a method (\ref{methodInvocation}), getter (\ref{topLevelGetterInvocation}, \ref{propertyExtraction}) or setter (\ref{assignment}) is invoked,
+or when a constructor is invoked
+(either via instance creation (\ref{instanceCreation}), constructor redirection (\ref{redirectingConstructors}) or super initialization).
 The various kinds of function invocation differ as to how the function to be invoked, $f$, is determined, as well as whether \THIS{} (\ref{this}) is bound.
-Once $f$ has been determined, the formal parameters of $f$ are bound to corresponding actual arguments.
+Once $f$ has been determined,
+formal type parameters of $f$ are bound to the corresponding actual type arguments,
+and the formal parameters of $f$ are bound to corresponding actual arguments.
 When the body of $f$ is executed it will be executed with the aforementioned bindings.
 
 \LMHash{}
@@ -4130,7 +4444,7 @@
 
 \LMHash{}
 When iteration over the iterable is started, by getting an iterator $j$ from the iterable and calling \code{moveNext()}, execution of the body of $f$ will begin.
-When execution of the body of $f$ completes (\ref{completion},
+When execution of the body of $f$ completes (\ref{completion}),
 \begin{itemize}
 \item If it returns without a value or it completes normally (\ref{completion}), $j$ is positioned after its last element, so that its current value is the null object (\ref{null}) and the current call to \code{moveNext()} on $j$ returns false, as must all further calls.
 \item If it throws an exception object $e$ and stack trace $t$ then the current value of $j$ is the null object (\ref{null}) and the current call to \code{moveNext()} throws $e$ and $t$ as well.
@@ -4222,22 +4536,45 @@
   .
 \end{grammar}
 
+\LMHash{}
 Argument lists allow an optional trailing comma after the last argument ($`,\!'?$).
-An argument list with such a trailing comma is equivalent in all ways to the same parameter list without the trailing comma.
+An argument list with such a trailing comma is equivalent in all ways to the same argument list without the trailing comma.
 All argument lists in this specification are shown without a trailing comma, but the rules and semantics apply equally to the corresponding argument list with a trailing comma.
 
 \LMHash{}
-Evaluation of an actual argument list of the form
+When parsing an argument list, an ambiguity may arise because the same source code could be one generic function invocation, and it could be two or more relational expressions and/or shift expressions.
+In this situation, the expression is always parsed as a generic function invocation.
 
-$(a_1, \ldots, a_m, q_1: a_{m+1}, \ldots, q_l: a_{m+l})$
+% Should we specify the precise disambiguation rule here?:
+%   We have seen 'a', '<', a matching '>', and '(', where
+%   'a' is tricky because we can have things like 'new Foo().m<...>(...',
+%   'x..y(...).m<...>(...', etc, basically everything that can precede
+%   argumentPart in the grammar.
+
+\commentary{
+An example is \code{f(a<B, C>($d$))}, which may be an invocation of \code{f} passing two actual arguments of type \code{bool}, or an invocation of \code{f} passing the result returned by an invocation of the generic function \code{a}.
+Note that the ambiguity can be eliminated by omitting the parentheses around the expression $d$, or adding parentheses around one of the relational expressions.
+}
+
+\rationale{
+When the intention is to pass several relational or shift expressions as actual arguments and there is an ambiguity, the source code can easily be adjusted to a form which is unambiguous.
+Also, we expect that it will be more common to have generic function invocations as actual arguments than having relational or shift expressions that happen to match up and have parentheses at the end, such that the ambiguity arises.
+}
+
+\LMHash{}
+Evaluation of an actual argument part of the form
+
+\code{<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_m,\ q_1$: $a_{m+1}, \ldots,\ q_l$: $a_{m+l}$)}
 
 proceeds as follows:
 
 \LMHash{}
+The type arguments $A_1, \ldots, A_r$ are evaluated in the order they appear in the program, producing types $t_1, \ldots, t_r$.
 The arguments $a_1, \ldots, a_{m+l}$ are evaluated in the order they appear in the program, producing objects $o_1, \ldots, o_{m+l}$.
 
 \commentary{
-Simply stated, an argument list consisting of $m$ positional arguments and $l$ named arguments is evaluated from left to right.
+Simply stated, an argument part consisting of $s$ type arguments, $m$ positional arguments, and $l$ named arguments is evaluated from left to right.
+Note that the type argument list is omitted when $r = 0$ (\ref{generics}).
 }
 
 
@@ -4245,29 +4582,69 @@
 \LMLabel{bindingActualsToFormals}
 
 \LMHash{}
-Let $f$ be a function with $h$ required parameters, let $p_1 \ldots p_n$ be the positional parameters of $f$ and let $p_{h+1}, \ldots, p_{h+k}$ be the optional parameters declared by $f$.
-
-\LMHash{}
-An evaluated actual argument list $o_1 \ldots o_{m+l}$ derived from an actual argument list of the form $(a_1, \ldots, a_m, q_1: a_{m+1}, \ldots, q_l: a_{m+l})$ is bound to the formal parameters of $f$ as follows:
+Let $f$ be a function with $s$ type parameters and $h$ required parameters;
+let $p_1, \ldots, p_n$ be the positional parameters of $f$;
+and let $p_{h+1}, \ldots, p_{h+k}$ be the optional parameters declared by $f$.
 
 \commentary{
-We have an argument list consisting of $m$ positional arguments and $l$ named arguments.
-We have a function with $h$ required parameters and $k$ optional parameters.
+Note that the type argument lists in the following are omitted in the case where $s = 0$,
+and similarly for empty type parameter lists (\ref{generics}).
+}
+
+\LMHash{}
+An evaluated actual argument part
+\code{<$t_1, \ldots,\ t_r$>($o_1, \ldots,\ o_{m+l}$)}
+derived from an actual argument part of the form
+
+\code{<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_m,\ q_1$: $a_{m+1}, \ldots,\ q_l$: $a_{m+l}$)}
+
+\noindent
+is bound to the formal type parameters and formal parameters of $f$ as follows:
+
+\commentary{
+We have an actual argument list consisting of $r$ type arguments, $m$ positional arguments, and $l$ named arguments.
+We have a function with $s$ type parameters, $h$ required parameters, and $k$ optional parameters.
+The number of type arguments must match the number of type parameters.
 The number of positional arguments must be at least as large as the number of required parameters, and no larger than the number of positional parameters.
 All named arguments must have a corresponding named parameter.
-You may not provide a given named argument more than once.
+A given named argument cannot be provided more than once.
 If an optional parameter has no corresponding argument, it gets its default value.
 In checked mode, all arguments must belong to subtypes of the type of their corresponding formal.
 }
 
-\commentary{
-If $l > 0$, then it is necessarily the case that $n = h$, because a method cannot have both optional positional parameters and named parameters.
-}
-
+% View on declaration:
+%
+%     |**   ...        *|**        ...         *|**     ...          *|
+%      <-s type par.s--> <--h required par.s---> <--k optional par.s->
+%                        <--n pos, par.s, h=n--> <---k named par.s---> NAMED
+%                        <----------n positional par.s, n=h+k--------> POS
+%
+% Actual argument part:
+%
+%     |**   ...        *|**           ...          *|**     ...       *|
+%      <-r type par.s--> <----m positional arg.s---> <--l named arg.s->
 \LMHash{}
+% Passing a wrong number of actual type arguments.
+If $r = 0$ and $s > 0$ then replace the actual type argument list:
+%% TODO[instantiate-to-bound]: The actual type arguments passed here
+%% should be chosen based on the instantiate-to-bound algorithm, but we
+%% cannot yet refer to that because it hasn't yet been specified here.
+let $r$ be $s$ and $t_i = \DYNAMIC{}$ for $i \in 1 .. s$.
+If $r \not= s$, a \code{NoSuchMethodError} is thrown.
+% Passing named arguments to a function with optional positional parameters.
+If $l > 0$ and $n \not= h$, a \code{NoSuchMethodError} is thrown.
+% Passing too few or too many positional arguments.
 If $m < h$, or $m > n$, a \code{NoSuchMethodError} is thrown.
-Furthermore, each $q_i, 1 \le i \le l$, must have a corresponding named parameter in the set $\{p_{n+1}, \ldots, p_{n +k}\}$ or a \code{NoSuchMethodError} is thrown.
-Then $p_i$ is bound to $o_i, i \in 1 .. m$, and $q_j$ is bound to $o_{m+j}, j \in 1 .. l$.
+% When l>0, h=n and there are k named parameters p_{h+1}..p_{h+k}.
+Furthermore, each
+$q_i, i \in 1 .. l$,
+must have a corresponding named parameter in the set
+$\{p_{h+1}, \ldots, p_{h+k}\}$,
+or a \code{NoSuchMethodError} is thrown.
+% Finally, bindings!
+Then $p_i$ is bound to
+$o_i, i \in 1 .. m$,
+and $q_j$ is bound to $o_{m+j}, j \in 1 .. l$.
 All remaining formal parameters of $f$ are bound to their default values.
 
 \commentary{
@@ -4275,17 +4652,37 @@
 }
 
 \LMHash{}
+% Check the type arguments.
+In checked mode, it is a dynamic type error if $t_i$ is not a subtype of the actual bound (\ref{actualTypeOfADeclaration}) of the $i$th type argument of $f$, for actual type arguments $t_1, \ldots, t_r$.
+% Check the types of positional arguments.
 In checked mode, it is a dynamic type error if $o_i$ is not the null object (\ref{null}) and the actual type (\ref{actualTypeOfADeclaration}) of $p_i$ is not a supertype of the type of $o_i, i \in 1 .. m$.
+% Check the types of named arguments.
 In checked mode, it is a dynamic type error if $o_{m+j}$ is not the null object and the actual type (\ref{actualTypeOfADeclaration}) of $q_j$ is not a supertype of the type of $o_{m+j}, j \in 1 .. l$.
 
 \LMHash{}
+% We cannot pass the same named parameter twice.
 It is a compile-time error if $q_i = q_j$ for any $i \ne j$.
 
 \LMHash{}
-Let $T_i$ be the static type of $a_i$, let $S_i$ be the type of $p_i, i \in 1 .. h+k$ and let $S_q$ be the type of the named parameter $q$ of $f$.
-It is a static warning if $T_j$ may not be assigned to $S_j, j \in 1..m$.
+Let $T_i$ be the static type of $a_i$.
+If the static type of $f$ is \DYNAMIC{} or the built-in class \code{Function},
+no further static checks are performed.
+Otherwise, it is a static type warning if the static type of $f$ is not a function type.
+
+\LMHash{}
+Otherwise, let $X_1, \ldots, X_s$ be the formal type parameters of the static type of $f$,
+let $S_i$ be the type of $p_i, i \in 1 .. h+k$,
+and let $S_q$ be the type of the named parameter $q$ of $f$,
+where each parameter type is obtained by replacing $X_j$ by $A_j, j \in 1 .. s$, in the given parameter type annotation.
+
+\commentary{
+Checks regarding the number of type parameters and their bounds is specified in (\ref{generics}).
+}
+
+\LMHash{}
+It is a static warning if $T_j$ may not be assigned to $S_j, j \in 1 .. m$.
 It is a static warning if $m < h$ or if $m > n$.
-Furthermore, each $q_i, 1 \le i \le l$, must have a corresponding named parameter in the set $\{p_{n+1}, \ldots, p_{n +k}\}$ or a static warning occurs.
+Furthermore, each $q_i, i \in 1 .. l$, must have a corresponding named parameter in the set $\{p_{h+1}, \ldots, p_{h+k}\}$ or a static warning occurs.
 It is a static warning if $T_{m+j}$ may not be assigned to $S_{q_j}, j \in 1 .. l$.
 
 
@@ -4295,16 +4692,21 @@
 \LMHash{}
 An unqualified function invocation $i$ has the form
 
-$id(a_1, \ldots, a_n, x_{n+1}: a_{n+1}, \ldots, x_{n+k}: a_{n+k})$,
+\code{$id$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)},
 
+\noindent
 where $id$ is an identifier.
 
+\commentary{
+Note that the type argument list is omitted when $r = 0$ (\ref{generics}).
+}
+
 \LMHash{}
 If there exists a lexically visible declaration named $id$, let $f_{id}$ be the innermost such declaration.
 Then:
 \begin{itemize}
 \item
-If $id$ is a type literal, then $i$ is interpreted as a function expression invocation (\ref{functionExpressionInvociation}) with $(id)$ as the expression $e_f$.
+If $id$ is a type literal, then $i$ is interpreted as a function expression invocation (\ref{functionExpressionInvocation}) with $(id)$ as the expression $e_f$.
 \commentary{
 The expression $(id)$ where $id$ is a type literal always evaluates to an instance of class \code{Type} which is not a function.
 This ensures that a run-time error occurs when trying to call a type literal.
@@ -4314,15 +4716,19 @@
 \item
 If $f_{id}$ is a local function, a library function, a library or static getter or a variable then $i$ is interpreted as a function expression invocation (\ref{functionExpressionInvocation}).
 \item
-Otherwise, if $f_{id}$ is a static method of the enclosing class $C$, $i$ is equivalent to $C.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
-\item Otherwise, $f_{id}$ is considered equivalent to the ordinary method invocation $\THIS{}.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
+Otherwise, if $f_{id}$ is a static method of the enclosing class $C$, $i$ is equivalent to
+\code{$C.id$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}.
+\item Otherwise, $f_{id}$ is equivalent to the ordinary method invocation
+
+\code{\THIS{}.$id$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}.
 \end{itemize}
 
 \LMHash{}
 Otherwise, if $i$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer, evaluation of $i$ causes a \code{NoSuchMethodError} to be thrown.
 
 \LMHash{}
-If $i$ does not occur inside a top level or static function, $i$ is equivalent to $\THIS{}.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
+If $i$ does not occur inside a top level or static function, $i$ is equivalent to
+\code{\THIS{}.$id$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}.
 
 % Should also say:
 % It is a static warning if $i$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer and there is no lexically visible declaration named $id$ in scope.
@@ -4334,9 +4740,16 @@
 \LMHash{}
 A function expression invocation $i$ has the form
 
-$e_f(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$,
+\code{$e_f$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)},
 
+\noindent
 where $e_f$ is an expression.
+
+\commentary{
+Note that the type argument list is omitted when $r = 0$ (\ref{generics}).
+}
+
+\LMHash{}
 If $e_f$ is an identifier $id$, then $id$ must necessarily denote a local function, a library function, a library or static getter or a variable as described above, or $i$ is not considered a function expression invocation.
 If $e_f$ is a type literal, then it is equivalent to the expression $(e_f)$.
 
@@ -4357,7 +4770,14 @@
 \LMHash{}
 Otherwise:
 
-Execution of a function expression invocation $e_f(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ is equivalent to execution of $e_f.call(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
+Execution of a function expression invocation
+
+\code{$e_f$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+
+\noindent
+is equivalent to execution of
+
+\code{$e_f$.call<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}.
 
 \commentary{
 The implication of this definition, and the other definitions involving the method \code{call()}, is that user defined types can be used as function values provided they define a \CALL{} method.
@@ -4372,17 +4792,36 @@
 \item $F$ is \DYNAMIC{}.
 \item $F$ is \code{Function}.
 \item $F$ is a function type
-  $(T_1, \ldots, T_n,
-  \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}, \ldots, T_{n+k+p}$ $x_{n+k+p}\})
-  \rightarrow T_0$
-such that the static type of $a_j$ is assignable to $T_j$ for all
-$j \in 1 .. n+k$.
+
+\code{<$X_1\ \EXTENDS\ B_1, \ldots,\ A_s\ \EXTENDS\ B_s$>}
+
+\code{($T_1, \ldots,\ T_n,\ $\{$T_{n+1}\ x_{n+1}, \ldots,\ T_{n+k}\ x_{n+k}, \ldots,\ T_{n+k+p}\ x_{n+k+p}$\}) $ \rightarrow T_0$}
+
+\noindent
+where $r = s$, and the static type of $a_j$ is assignable to
+$[A_1/X_1, \ldots, A_r/X_s]T_j$, for all $j \in 1 .. n+k$.
+
 \item $k$ is zero, $0 \leq m \leq n$, and $F$ is a function type
-$(T_1, \ldots, T_m, [T_{m+1}, \ldots, T_n]) \rightarrow T_0$
-where the static type of $a_j$ is assignable to $T_j$ for all $j \in 1 .. n$.
+
+\code{<$X_1\ \EXTENDS\ B_1, \ldots,\ A_s\ \EXTENDS\ B_s$>}
+
+\code{($T_1, \ldots,\ T_m,\ $[$T_{m+1}, \ldots,\ T_n, \ldots,\ T_{n+p}$]) $ \rightarrow T_0$}
+
+\noindent
+where $r = s$, and the static type of $a_j$ is assignable to
+$[A_1/X_1, \ldots, A_r/X_s]T_j$,
+for all $j \in 1 .. n$.
 \end{itemize}
-If $F$ is not a function type, the static type of $i$ is \DYNAMIC{}.
-Otherwise, the static type of $i$ is the return type $T_0$ of $F$.
+
+\commentary{
+That is, the types of the actual arguments must match the declared types of the corresponding parameters where the formal type parameters have been replaced by the actual type arguments.
+Note that the type parameter lists are omitted when $s = 0$ (\ref{generics}),
+and that checks on the number of type arguments and their bounds is specified elsewhere (\ref{generics}).
+}
+
+If $F$ is not a function type or $r \not= s$, the static type of $i$ is \DYNAMIC{}.
+Otherwise, the static type of $i$ is the return type
+$[A_1/X_1, \ldots, A_r/X_s]T_0$ of $F$.
 
 
 \subsection{Lookup}
@@ -4451,88 +4890,162 @@
 \subsubsection{Ordinary Invocation}
 \LMLabel{ordinaryInvocation}
 
+\commentary{
+Note that non-generic invocations arise as the special case where the number of type arguments is zero,
+in which case the type argument list is omitted,
+and similarly for formal type parameter lists (\ref{generics}).
+}
+
 \LMHash{}
 An ordinary method invocation can be {\em conditional} or {\em unconditional}.
 
 \LMHash{}
 Evaluation of a {\em conditional ordinary method invocation} $i$ of the form
 
-\LMHash{}
-$e?.m(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$
+\code{$e$?.$m$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
 
-\LMHash{}
+\noindent
 proceeds as follows:
 
 \LMHash{}
-If $e$ is a type literal, $i$ is equivalent to \code{$e$.$m$($a_1$, \ldots , $a_n$, $x_{n+1}$: $a_{n+1}$, \ldots , $x_{n+k}$: $a_{n+k}$)}.
+If $e$ is a type literal, $i$ is equivalent to
+
+\code{$e.m$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}.
 
 \LMHash{}
 Otherwise, evaluate $e$ to an object $o$.
 If $o$ is the null object, $i$ evaluates to the null object (\ref{null}).
 Otherwise let $v$ be a fresh variable bound to $o$ and evaluate
-\code{$v$.$m$($a_1$, $\ldots$ , $a_n$, $x_{n+1}$: $a_{n+1}$, $\ldots$ , $x_{n+k}$: $a_{n+k}$))} to a value $r$, and then $e$ evaluates to $r$.
+\code{$v$.$m$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+to a value $r$.
+Then $e$ evaluates to $r$.
 
 \LMHash{}
-The static type of $i$ is the same as the static type of $e.m(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
-Exactly the same static warnings that would be caused by $e.m(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ are also generated in the case of $e?.m(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
+The static type of $i$ is the same as the static type of
+
+\code{$e$.$m$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}.
+
+\noindent
+Exactly the same static warnings that would be caused by
+
+\code{$e$.$m$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+
+\noindent
+are also generated in the case of
+
+\code{$e$?.$m$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}.
 
 \LMHash{}
 An {\em unconditional ordinary method invocation} $i$ has the form
 
-$e.m(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
+\code{$e$.$m$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}.
 
 \LMHash{}
 Evaluation of an unconditional ordinary method invocation $i$ of the form
-
-$e.m(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$
-
+\code{$e$.$m$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
 proceeds as follows:
 
 \LMHash{}
 First, the expression $e$ is evaluated to a value $o$.
-Next, the argument list $(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ is evaluated yielding actual argument objects $o_1, \ldots , o_{n+k}$.
+Next, the argument part
+\code{<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+is evaluated yielding actual type arguments
+$t_1, \ldots, t_r$
+and actual argument objects $o_1, \ldots, o_{n+k}$.
 Let $f$ be the result of looking up (\ref{methodLookup}) method $m$ in $o$ with respect to the current library $L$.
 
 \LMHash{}
-Let $p_1 \ldots p_h$ be the required parameters of $f$, let $p_1 \ldots p_m$ be the positional parameters of $f$ and let $p_{h+1}, \ldots, p_{h+l}$ be the optional parameters declared by $f$.
+Let $X_1, \ldots, X_s$ be the formal type parameters of $f$,
+let $p_1, \ldots, p_h$ be the required parameters of $f$,
+let $p_1, \ldots, p_m$ be the positional parameters of $f$,
+and let $p_{h+1}, \ldots, p_{h+l}$ be the optional parameters declared by $f$.
 
 \commentary{
-We have an argument list consisting of $n$ positional arguments and $k$ named arguments.
-We have a function with $h$ required parameters and $l$ optional parameters.
+We have an actual argument list consisting of $r$ type arguments, $n$ positional arguments, and $k$ named arguments.
+We have a function with $s$ type parameters, $h$ required parameters, and $l$ optional parameters.
+The number of type arguments must match the number of type parameters.
 The number of positional arguments must be at least as large as the number of required parameters, and no larger than the number of positional parameters.
 All named arguments must have a corresponding named parameter.
+A given named argument cannot be provided more than once.
 }
 
+% View on declaration:
+%
+%     |**   ...        *|**        ...         *|**     ...          *|
+%      <-s type par.s--> <--h required par.s---> <--l optional par.s->
+%                        <--m pos, par.s, h=m--> <---l named par.s---> NAMED
+%                        <----------m positional par.s, m=h+l--------> POS
+%
+% Actual argument part:
+%
+%     |**   ...        *|**           ...          *|**     ...       *|
+%      <-r type par.s--> <----n positional arg.s---> <--k named arg.s->
 \LMHash{}
+% Passing a wrong number of actual type arguments.
+If $r = 0$ and $s > 0$ then replace the actual type argument list:
+%% TODO[instantiate-to-bound]: The actual type arguments passed here
+%% should be chosen based on the instantiate-to-bound algorithm, but we
+%% cannot yet refer to that because it hasn't yet been specified here.
+let $r$ be $s$ and $t_i = \DYNAMIC{}$ for $i \in 1 .. s$.
+If $r \not= s$, the method lookup has failed.
+% Passing named arguments to a function with optional positional parameters.
+If $k > 0$ and $m \not= h$, the method lookup has failed.
+% Passing too few or too many positional arguments.
 If $n < h$, or $n > m$, the method lookup has failed.
-Furthermore, each $x_i, n+1 \le i \le n+k$, must have a corresponding named parameter in the set $\{p_{m+1}, \ldots, p_{h+l}\}$ or the method lookup also fails.
-If $o$ is an instance of \code{Type} but $e$ is not a constant type literal, then if $m$ is a method that forwards (\ref{functionDeclarations}) to a static method, method lookup fails.
+% When k>0, h=m and there are l named parameters p_{h+1} .. p_{h+l}.
+Furthermore, each
+$x_i, i \in n+1 .. n+k$, must have a corresponding named parameter in the set
+$\{p_{h+1}, \ldots, p_{h+l}\}$,
+or the method lookup also fails.
+
+\LMHash{}
+If $o$ is an instance of \code{Type} but $e$ is not a constant type literal,
+then if $m$ is a method that forwards (\ref{functionDeclarations}) to a static method,
+method lookup fails.
 Otherwise method lookup has succeeded.
 
 \LMHash{}
-If the method lookup succeeded, the body of $f$ is executed with respect to the bindings that resulted from the evaluation of the argument list, and with \THIS{} bound to $o$.
+If the method lookup succeeded,
+the body of $f$ is executed with respect to the bindings that resulted from the evaluation of the argument list,
+and with \THIS{} bound to $o$.
 The value of $i$ is the value returned after $f$ is executed.
 
 \LMHash{}
-If the method lookup has failed, then let $g$ be the result of looking up getter (\ref{getterAndSetterLookup}) $m$ in $o$ with respect to $L$.
-If $o$ is an instance of \code{Type} but $e$ is not a constant type literal, then if $g$ is a getter that forwards to a static getter, getter lookup fails.
-If the getter lookup succeeded, let $v_g$ be the value of the getter invocation $e.m$.
-Then the value of $i$ is the result of invoking the static method \code{Function.apply()} with arguments $v.g, [o_1, \ldots , o_n], \{\#x_{n+1}: o_{n+1}, \ldots , \#x_{n+k}: o_{n+k}\}$.
+If the method lookup has failed,
+then let $g$ be the result of looking up getter (\ref{getterAndSetterLookup}) $m$ in $o$ with respect to $L$.
+If $o$ is an instance of \code{Type} but $e$ is not a constant type literal,
+then if $g$ is a getter that forwards to a static getter, getter lookup fails.
+If the getter lookup succeeded,
+let $v_g$ be the value of the getter invocation $e.m$.
+Then the value of $i$ is the result of invoking the static method
+\code{Function.apply()}
+with arguments
+$v_g$,
+\code{[$o_1, \ldots, o_n$]},
+\code{\{$\#x_{n+1}$: $o_{n+1}, \ldots, \#x_{n+k}$: $o_{n+k}$\}},
+and
+\code{[$t_1, \ldots, t_r$]}.
 
 \LMHash{}
-If getter lookup has also failed, then a new instance $im$ of the predefined class \code{Invocation} is created, such that:
+If getter lookup has also failed,
+then a new instance $im$ of the predefined class \code{Invocation} is created, such that:
 \begin{itemize}
 \item \code{im.isMethod} evaluates to \code{\TRUE{}}.
 \item \code{im.memberName} evaluates to the symbol \code{m}.
-\item \code{im.positionalArguments} evaluates to an immutable list with the same values as \code{[$o_1, \ldots, o_n$]}.
-\item \code{im.namedArguments} evaluates to an immutable map with the same keys and values as \code{\{$\#x_{n+1}: o_{n+1}, \ldots, \#x_{n+k} : o_{n+k}$\}}.
+\item \code{im.positionalArguments} evaluates to an unmodifiable list with the same values as
+\code{<Object>[$o_1, \ldots, o_n$]}.
+\item \code{im.namedArguments} evaluates to an unmodifiable map with the same keys and values as
+\code{<Symbol, Object>\{$\#x_{n+1}$: $o_{n+1}, \ldots, \#x_{n+k}$: $o_{n+k}$\}}.
+\item \code{im.typeArguments} evaluates to an unmodifiable list with the same values as
+\code{<Type>[$t_1, \ldots, t_r$]}.
 \end{itemize}
 
 \LMHash{}
-Then the method \code{noSuchMethod()} is looked up in $v_o$ and invoked with argument $im$, and the result of this invocation is the result of evaluating $i$.
+Then the method \code{noSuchMethod()} is looked up in $o$ and invoked with argument $im$,
+and the result of this invocation is the result of evaluating $i$.
 
 \commentary{
-It is not possible to override the \code{noSuchMethod} if class \code{Object}
+It is not possible to override the \code{noSuchMethod} of class \code{Object}
 in such a way that it cannot be invoked with one argument of type \code{Invocation}.
 }
 
@@ -4541,26 +5054,36 @@
 }
 
 \LMHash{}
-Let $T$ be the static type of $o$.
-It is a static type warning if $T$ does not have an accessible (\ref{privacy}) instance member named $m$ unless either:
+Let $T$ be the static type of $e$.
+It is a static type warning if $T$ does not have an accessible (\ref{privacy}) instance member named $m$, unless either:
 \begin{itemize}
-\item $T$ is \code{Type}, $e$ is a constant type literal and the class corresponding to $e$ has a static getter named $m$.
+\item $T$ is \code{Type}, $e$ is a constant type literal,
+and the class corresponding to $e$ has a static getter named $m$.
 Or
 \item $T$ is \code{Function} and $m$ is \CALL.
-\rationale{
+\rationale {
 The type \code{Function} is treated as if it has a \code{call} method for any possible signature of \CALL.
 The expectation is that any concrete subclass of \code{Function} will implement \CALL.
 Note that a warning will be issued if this is not the case.
-Furthermore, any use of \CALL{} on a subclass of \code{Function} that fails to implement \CALL{} will also provoke a warning, as this exemption is limited to type \code{Function}, and does not apply to its subtypes.
+Furthermore, any use of \CALL{} on a subclass of \code{Function} that fails to implement \CALL{} will also provoke a warning,
+as this exemption is limited to type \code{Function}, and does not apply to its subtypes.
 }
 \end{itemize}
 
 \LMHash{}
 If $T.m$ exists, it is a static type warning if the type $F$ of $T.m$ may not be assigned to a function type.
-If $T.m$ does not exist, or if $F$ is not a function type, the static type of $i$ is \DYNAMIC{}; otherwise the static type of $i$ is the declared return type of $F$.
+If $T.m$ does not exist, or if $F$ is not a function type, the static type of $i$ is \DYNAMIC{}.
+Otherwise, let $X_1, \ldots, X_s$ be the formal type parameters of the type of $F$,
+and $T_0$ its declared return type.
+If $r \not= s$ the static type of $i$ is \DYNAMIC{};
+otherwise, the static type of $i$ is $[A_1/X_1, \ldots, A_r/X_s]T_0$.
+
+\commentary{
+That is, the declared return type where each formal type parameter has been replaced by the corresponding actual type argument.
+}
 
 \LMHash{}
-It is a compile-time error to invoke any of the methods of class \code{Object} on a prefix object (\ref{imports}) or on a constant type literal that is immediately followed by the token `.'.
+It is a compile-time error to invoke any of the methods of class \code{Object} on a prefix object (\ref{imports}) or on a constant type literal that is immediately followed by the token `.'\,.
 
 
 \subsubsection{Cascaded Invocations}
@@ -4571,12 +5094,18 @@
 where $e$ is an expression and \metavar{suffix} is a sequence of operator, method, getter or setter invocations.
 
 \begin{grammar}
-{\bf cascadeSection:}`{\escapegrammar ..}' (cascadeSelector arguments*) (assignableSelector arguments*)* (assignmentOperator expressionWithoutCascade)?
+{\bf cascadeSection:}`{\escapegrammar ..}' (cascadeSelector argumentPart*)
+  \gnewline{} (assignableSelector argumentPart*)*
+  \gnewline{} (assignmentOperator expressionWithoutCascade)?
   .
 
 {\bf cascadeSelector:}`[' expression `]';
   identifier
   .
+
+{\bf argumentPart:}
+  typeArguments? arguments
+  .
 \end{grammar}
 
 \LMHash{}
@@ -4599,54 +5128,146 @@
 \subsubsection{Super Invocation}
 \LMLabel{superInvocation}
 
+\commentary{
+Note that non-generic invocations arise as the special case where the number of type arguments is zero,
+in which case the type argument list is omitted,
+and similarly for formal type parameter lists (\ref{generics}).
+}
+
+% Conditional super invocation is meaningless: \THIS{} is not null.
+
 \LMHash{}
 A super method invocation $i$ has the form
 
-$\SUPER{}.m(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
+\code{\SUPER{}.$m$<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}.
 
 \LMHash{}
 Evaluation of $i$ proceeds as follows:
 
 \LMHash{}
-First, the argument list $(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ is evaluated producing actual argument objects $o_1, \ldots , o_{n+k}$.
-Let $g$ be the method currently executing, and let $C$ be the class in which $g$ was looked up (\ref{methodLookup}).
-Let $S_{dynamic}$ be the superclass of $C$, and let $f$ be the result of looking up method (\ref{methodLookup}) $m$ in $S_{dynamic}$ with respect to the current library $L$.
-Let $p_1 \ldots p_h$ be the required parameters of $f$, let $p_1 \ldots p_m$ be the positional parameters of $f$ and let $p_{h+1}, \ldots, p_{h+l}$ be the optional parameters declared by $f$.
+First, the argument part
+
+\code{<$A_1, \ldots,\ A_r$>($a_1, \ldots,\ a_n,\ x_{n+1}$: $a_{n+1}, \ldots,\ x_{n+k}$: $a_{n+k}$)}
+
+\noindent
+is evaluated producing actual type arguments $t_1, \ldots, t_r$ and actual argument objects $o_1, \ldots, o_{n+k}$.
+Let $g$ be the method currently executing,
+and let $C$ be the class in which $g$ was looked up (\ref{methodLookup}).
+Let $S_{dynamic}$ be the superclass of $C$,
+and let $f$ be the result of looking up method (\ref{methodLookup}) $m$ in $S_{dynamic}$ with respect to the current library $L$.
 
 \LMHash{}
+Let $X_1, \ldots, X_s$ be the formal type parameters of $f$.
+Let $p_1, \ldots, p_h$ be the required parameters of $f$,
+let $p_1, \ldots, p_m$ be the positional parameters of $f$,
+and let $p_{h+1}, \ldots, p_{h+l}$ be the optional parameters declared by $f$.
+
+\commentary{
+We have an actual argument list consisting of $r$ type arguments, $n$ positional arguments, and $k$ named arguments.
+We have a function with $s$ type parameters, $h$ required parameters, and $l$ optional parameters.
+The number of type arguments must match the number of type parameters.
+The number of positional arguments must be at least as large as the number of required parameters, and no larger than the number of positional parameters.
+All named arguments must have a corresponding named parameter.
+A given named argument cannot be provided more than once.
+}
+
+% View on declaration:
+%
+%     |**   ...        *|**        ...         *|**     ...          *|
+%      <-s type par.s--> <--h required par.s---> <--l optional par.s->
+%                        <--m pos, par.s, h=m--> <---l named par.s---> NAMED
+%                        <----------m positional par.s, m=h+l--------> POS
+%
+% Actual argument part:
+%
+%     |**   ...        *|**           ...          *|**     ...       *|
+%      <-r type par.s--> <----n positional arg.s---> <--k named arg.s->
+\LMHash{}
+% Passing a wrong number of actual type arguments.
+If $r \not= s$, the method lookup has failed.
+% Passing named arguments to a function with optional positional parameters.
+If $k > 0$ and $m \not= h$, the method lookup has failed.
+% Passing too few or too many positional arguments.
 If $n < h$, or $n > m$, the method lookup has failed.
-Furthermore, each $x_i, n+1 \le i \le n+k$, must have a corresponding named parameter in the set $\{p_{m+1}, \ldots, p_{h+l}\}$ or the method lookup also fails.
-Otherwise method lookup has succeeded.
+% When k>0, h=m and there are l named parameters p_{h+1} .. p_{h+l}.
+Furthermore, each
+$x_i, i \in n+1 .. n+k$, must have a corresponding named parameter in the set
+$\{p_{h+1}, \ldots, p_{h+l}\}$,
+or the method lookup also fails.
+Otherwise, method lookup has succeeded.
 
 \LMHash{}
-If the method lookup succeeded, the body of $f$ is executed with respect to the bindings that resulted from the evaluation of the argument list, and with \THIS{} bound to the current value of \THIS{}.
+If the method lookup succeeded,
+the body of $f$ is executed with respect to the bindings that resulted from the evaluation of the argument list,
+and with \THIS{} bound to the current value of \THIS{}.
 The value of $i$ is the value returned after $f$ is executed.
 
 \LMHash{}
-If the method lookup has failed, then let $g$ be the result of looking up getter (\ref{getterAndSetterLookup}) $m$ in $S_{dynamic}$ with respect to $L$.
-If the getter lookup succeeded, let $v_g$ be the value of the getter invocation $\SUPER{}.m$.
-Then the value of $i$ is the result of invoking the static method \code{Function.apply()} with arguments $v_g, [o_1, \ldots , o_n], \{x_{n+1} = o_{n+1}, \ldots , x_{n+k} = o_{n+k}\}$.
+If the method lookup has failed,
+then let $g$ be the result of looking up getter (\ref{getterAndSetterLookup}) $m$ in $S_{dynamic}$ with respect to $L$.
+If the getter lookup succeeded,
+let $v_g$ be the value of the getter invocation $\SUPER{}.m$.
+Then the value of $i$ is the result of invoking
+the static method
+\code{Function.apply()}
+with arguments
+$v_g,
+[o_1, \ldots, o_n],
+\{\#x_{n+1}: o_{n+1}, \ldots, \#x_{n+k}: o_{n+k}\},
+[t_1, \ldots, t_r]$.
 
 \LMHash{}
-If getter lookup has also failed, then a new instance $im$ of the predefined class \code{Invocation} is created, such that:
+If getter lookup has also failed,
+then a new instance $im$ of the predefined class \code{Invocation} is created, such that:
 \begin{itemize}
 \item \code{im.isMethod} evaluates to \code{\TRUE{}}.
 \item \code{im.memberName} evaluates to the symbol \code{m}.
-\item \code{im.positionalArguments} evaluates to an immutable list with the same values as \code{[$o_1, \ldots, o_n$]}.
-\item \code{im.namedArguments} evaluates to an immutable map with the same keys and values as \code{\{$\#x_{n+1}: o_{n+1}, \ldots, \#x_{n+k} : o_{n+k}$\}}.
+\item \code{im.positionalArguments} evaluates to an unmodifiable list with the same values as
+$\code{<Object>}[o_1, \ldots, o_n]$.
+\item \code{im.namedArguments} evaluates to an unmodifiable map with the same keys and values as
+$\code{<Symbol, Object>}\{\#x_{n+1}: o_{n+1}, \ldots, \#x_{n+k}: o_{n+k}\}$.
+\item \code{im.typeArguments} evaluates to an unmodifiable list with the same values as
+$\code{<Type>}[t_1, \ldots, t_r]$.
 \end{itemize}
-Then the method \code{noSuchMethod()} is looked up in $S_{dynamic}$ and invoked on \THIS{} with argument $im$, and the result of this invocation is the result of evaluating $i$.
 
 \LMHash{}
-It is a compile-time error if a super method invocation occurs in a top-level function or variable initializer, in an instance variable initializer or initializer list, in class \code{Object}, in a factory constructor or in a static method or variable initializer.
+Then the method \code{noSuchMethod()} is looked up in $S_{dynamic}$ and invoked on \THIS{} with argument $im$,
+and the result of this invocation is the result of evaluating $i$.
+
+% TODO(eernst): We have removed the description of how to invoke noSuchMethod
+% in Object if the overriding noSuchMethod does not accept one argument of
+% type Invocation, because that will be a compile-time error soon. At this
+% point we just keep a commentary ready to say that:
+%
+%% \commentary {
+%% It is a compile-time error to override the \code{noSuchMethod} of class \code{Object} in such a way that it cannot be invoked with one positional argument of type \code{Invocation}.
+%% }
+
+\LMHash{}
+It is a compile-time error if a super method invocation occurs in a top-level function or variable initializer,
+in an instance variable initializer or initializer list,
+in class \code{Object},
+in a factory constructor,
+or in a static method or variable initializer.
 
 \LMHash{}
 Let $S_{static}$ be the superclass of the immediately enclosing class.
 It is a static type warning if $S_{static}$ does not have an accessible (\ref{privacy}) instance member named $m$.
+
+\LMHash{}
 If $S_{static}.m$ exists, it is a static type warning if the type $F$ of $S_{static}.m$ may not be assigned to a function type.
-If $S_{static}.m$ does not exist, or if $F$ is not a function type, the static type of $i$ is \DYNAMIC{}; otherwise the static type of $i$ is the declared return type of $F$.
+If $S_{static}.m$ does not exist, or if $F$ is not a function type, the static type of $i$ is \DYNAMIC{};
+Otherwise, let $X_1, \ldots, X_s$ be the formal type parameters of the type of $F$,
+and $T_0$ its declared return type.
+If $r \not= s$ the static type of $i$ is \DYNAMIC{};
+otherwise, the static type of $i$ is $[A_1/X_1, \ldots, A_r/X_s]T_0$.
+
+\commentary{
+That is, the declared return type where each formal type parameter has been replaced by the corresponding actual type argument.
+}
+
 % The following is not needed because it is specified in 'Binding Actuals to Formals"
-%Let $T_i$ be the static type of $a_i, i \in 1 .. n+k$. It is a static warning if $F$ is not a supertype of $(T_1, \ldots, t_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \to \bot$.
+%Let $T_i$ be the static type of $a_i, i \in 1 .. n+k$. It is a static warning if $F$ is not a supertype of $(T_1, \ldots, t_n, \{T_{n+1}\ x_{n+1}, \ldots, T_{n+k}\ x_{n+k}\}) \to \bot$.
 
 
 \subsubsection{Sending Messages}
@@ -4732,10 +5353,28 @@
 \begin{itemize}
 \item \code{im.isGetter} evaluates to \code{\TRUE{}}.
 \item \code{im.memberName} evaluates to the symbol \code{m}.
-\item \code{im.positionalArguments} evaluates to an empty unmodifiable instance of \code{List<Object>}.
-\item \code{im.namedArguments} evaluates to an empty unmodifiable instance of \code{Map<Symbol, Object>}.
+\item \code{im.positionalArguments} evaluates to an empty, unmodifiable instance of
+\code{List<Object>}.
+\item \code{im.namedArguments} evaluates to an empty, unmodifiable instance of
+
+\code{Map<Symbol, Object>}.
+\item \code{im.typeArguments} evaluates to an empty, unmodifiable instance of
+
+\code{List<Type>}.
 \end{itemize}
-Then the method \code{noSuchMethod()} is looked up in $o$ and invoked with argument $im$, and the result of this invocation is the result of evaluating $i$.
+
+\LMHash{}
+Then the method \code{noSuchMethod()} is looked up in $o$ and invoked with argument $im$,
+and the result of this invocation is the result of evaluating $i$.
+
+% TODO(eernst): We have removed the description of how to invoke noSuchMethod
+% in Object if the overriding noSuchMethod does not accept one argument of
+% type Invocation, because that will be a compile-time error soon. At this
+% point we just keep a commentary ready to say that:
+%
+%% \commentary {
+%% It is a compile-time error to override the \code{noSuchMethod} of class \code{Object} in such a way that it cannot be invoked with one positional argument of type \code{Invocation}.
+%% }
 
 \LMHash{}
 It is a compile-time error if $m$ is a member of class \code{Object} and $e$ is either a prefix object (\ref{imports}) or a constant type literal.
@@ -4746,7 +5385,10 @@
 
 \LMHash{}
 Let $T$ be the static type of $e$.
-It is a static type warning if $T$ does not have a method or getter named $m$ unless $T$ is \code{Type}, $e$ is a constant type literal and the class corresponding to $e$ has a static method or getter named $m$.
+It is a static type warning if $T$ does not have a method or getter named $m$,
+unless $T$ is \code{Type},
+$e$ is a constant type literal,
+and the class corresponding to $e$ has a static method or getter named $m$.
 
 \LMHash{}
 The static type of $i$ is:
@@ -4772,7 +5414,7 @@
 If method lookup succeeds then $i$ evaluates to the closurization of method $f$ with respect to superclass $S_{dynamic}$ (\ref{superClosurization}).
 
 \LMHash{}
- Otherwise, $i$ is a getter invocation.
+Otherwise, $i$ is a getter invocation.
 Let $f$ be the result of looking up getter $m$ in $S_{dynamic}$ with respect to $L$.
 The body of $f$ is executed with \THIS{} bound to the current value of \THIS{}.
 The value of $i$ is the result returned by the call to the getter function.
@@ -4782,11 +5424,28 @@
 \begin{itemize}
 \item \code{im.isGetter} evaluates to \code{\TRUE{}}.
 \item \code{im.memberName} evaluates to the symbol \code{m}.
-\item \code{im.positionalArguments} evaluates to an empty unmodifiable instance of \code{List<Object>}.
-\item \code{im.namedArguments} evaluates to an empty unmodifiable instance of \code{Map<Symbol, Object>}.
+\item \code{im.positionalArguments} evaluates to an empty, unmodifiable instance of
+\code{List<Object>}.
+\item \code{im.namedArguments} evaluates to an empty, unmodifiable instance of
+
+\code{Map<Symbol, Object>}.
+\item \code{im.typeArguments} evaluates to an empty, unmodifiable instance of
+
+\code{List<Type>}.
 \end{itemize}
+
+\LMHash{}
 Then the method \code{noSuchMethod()} is looked up in $S_{dynamic}$ and invoked with argument $im$, and the result of this invocation is the result of evaluating $i$.
 
+% TODO(eernst): We have removed the description of how to invoke noSuchMethod
+% in Object if the overriding noSuchMethod does not accept one argument of
+% type Invocation, because that will be a compile-time error soon. At this
+% point we just keep a commentary ready to say that:
+%
+%% \commentary {
+%% It is a compile-time error to override the \code{noSuchMethod} of class \code{Object} in such a way that it cannot be invoked with one positional argument of type \code{Invocation}.
+%% }
+
 \LMHash{}
 Let $S_{static}$ be the superclass of the immediately enclosing class.
 It is a static type warning if $S_{static}$ does not have an accessible instance method or getter named $m$.
@@ -4802,6 +5461,11 @@
 \subsubsection{Ordinary Member Closurization}
 \LMLabel{ordinaryMemberClosurization}
 
+\commentary{
+Note that the non-generic case is covered implicitly using $s = 0$,
+in which case the type parameter declarations are omitted (\ref{generics}).
+}
+
 \LMHash{}
 Let $o$ be an object, and let $u$ be a fresh final variable bound to $o$.
 The {\em closurization of method $f$ on object $o$} is defined to be equivalent to:
@@ -4812,27 +5476,88 @@
 %\item $(a, b) \{\RETURN{}$ $u[a] = b;$\} if $f$ is named $[]=$.
 \item
 \begin{dartCode}
-$(r_1, \ldots, r_n, \{p_1 = d_1, \ldots , p_k = d_k\})$ \{
-  \RETURN{} $ u.m(r_1, \ldots, r_n, p_1: p_1, \ldots, p_k: p_k);$
-\}
+<$X_1\ \EXTENDS\ B'_1, \ldots,\ X_s\ \EXTENDS\ B'_s$>
+
+($T_1\ r_1, \ldots,\ T_n\ r_n,\ $\{$T_{n+1}\ p_1 = d_1, \ldots,\ T_{n+k}\ p_k = d_k$\}) =>
+    $u.m$<$X_1, \ldots,\ X_s$>($r_1, \ldots,\ r_n,\ p_1$: $p_1, \ldots,\ p_k$: $p_k$);
 \end{dartCode}
-if $f$ is named $m$ and has required parameters $r_1, \ldots, r_n$, and named parameters $p_1, \ldots, p_k$ with defaults $d_1, \ldots, d_k$.
+if $f$ is named $m$ and has type parameter declarations
+$X_1\ \EXTENDS\ B_1$, \ldots,\ $X_s\ \EXTENDS\ B_s$,
+required parameters $r_1, \ldots, r_n$,
+and named parameters $p_1, \ldots, p_k$ with defaults $d_1, \ldots, d_k$.
 \item
 \begin{dartCode}
-$(r_1, \ldots, r_n, [p_1 = d_1, \ldots , p_k = d_k])$\{
-  \RETURN{} $u.m(r_1, \ldots, r_n, p_1, \ldots, p_k)$;
-\}
+<$X_1\ \EXTENDS\ B'_1, \ldots,\ X_s\ \EXTENDS\ B'_s$>
+
+($T_1\ r_1, \ldots,\ T_n\ r_n,\ $[$T_{n+1}\ p_1 = d_1, \ldots,\ T_{n+k}\ p_k = d_k$]) =>
+    $u.m$<$X_1, \ldots,\ X_s$>($r_1, \ldots,\ r_n,\ p_1, \ldots,\ p_k$);
 \end{dartCode}
-if $f$ is named $m$ and has required parameters $r_1, \ldots, r_n$, and optional positional parameters $p_1, \ldots, p_k$ with defaults $d_1, \ldots, d_k$.
+if $f$ is named $m$ and has type parameter declarations
+$X_1\ \EXTENDS\ B_1$, \ldots,\ $X_s\ \EXTENDS\ B_s$,
+required parameters $r_1, \ldots, r_n$,
+and optional positional parameters
+$p_1, \ldots, p_k$ with defaults $d_1, \ldots, d_k$.
 \end{itemize}
 
 \LMHash{}
-Except that if{}f \code{identical($o_1, o_2$)} then \code{$o_1.m$ == $o_2.m$}.
+$B'_j, j \in 1 .. s$, are determined as follows:
+If $o$ is an instance of a non-generic class, $B'_j = B_j, j \in 1 .. s$.
+Otherwise, let $X'_1, \ldots, X'_{s'}$ be the formal type parameters of the class of $o$,
+and $t'_1, \ldots, t'_{s'}$ be the actual type arguments.
+Then $B'_j = [t'_1/X'_1, \ldots, t'_{s'}/X'_{s'}]B_j, j \in 1 .. s$.
+
+\commentary{
+That is, we replace the formal type parameters of the enclosing class, if any, by the corresponding actual type arguments.
+}
+
+%% TODO: We should specify tear-offs by means of their (static and dynamice)
+%% semantics, not via syntactic sugar, because the syntactic sugar causes
+%% weird phenomena like `a type annotation that denotes the same type as`
+%% etc.
+
+%% TODO[covariant-parameters]: When adding a specification of covariant
+%% parameters we will need to indicate that the dynamic parameter type is
+%% `Object` for such a parameter, and that the static type of the function
+%% as a whole will be taken from the statically known type of the receiver
+%% of the tear-off invocation.
+
+\LMHash{}
+The parameter types $T_j, j \in 1 .. n+k$, are determined as follows:
+Let the method declaration $D$ be the implementation of $m$ which is invoked by the expression in the body.
+Let $T$ be the class that contains $D$.
+
+\commentary{
+Note that $T$ is the dynamic type of $o$, or a superclass thereof.
+}
+
+\LMHash{}
+If $T$ is a non-generic class then for $j \in 1 .. n+k$,
+$T_j$ is a type annotation that denotes the same type as that which is denoted by the type annotation on the corresponding parameter declaration in $D$.
+If that parameter declaration has no type annotation then $T_j$ is \DYNAMIC{}.
+
+\LMHash{}
+Otherwise $T$ is a generic instantiation of a generic class $G$.
+Let $X''_1, \ldots, X''_{s''}$ be the formal type parameters of $G$,
+and $t''_1, \ldots, t''_{s''}$ be the actual type arguments of $o$ at $T$.
+Then $T_j$ is a type annotation that denotes $[t''_1/X''_1, \ldots, t''_{s''}/X''_{s''}]S_j$,
+where $S_j$ is the type annotation of the corresponding parameter in $D$.
+If that parameter declaration has no type annotation then $T_j$ is \DYNAMIC{}.
+
+\LMHash{}
+There is one way in which the closurization differs from the function literal:
+\code{$o_1.m$ == $o_2.m$} is equal to \code{identical($o_1, o_2$)}.
+
 %\item The static type of the property extraction is the static type of function $T.m$, where $T$ is the static type of $e$, if $T.m$ is defined. Otherwise the static type of $e.m$ is \DYNAMIC{}.
 
 \commentary{
-There is no guarantee that \code{identical($o_1.m, o_2.m$)}.
-Dart implementations are not required to canonicalize these or any other closures.
+% Spell out the consequences for `==` and for `identical`, for the receivers
+% and for the closurizations.
+In particular, two closurizations of a method $m$ from the same object are equal,
+and two closurizations of a method $m$ from non-identical objects are not equal.
+It also follows that \code{identical($o_1.m, o_2.m$)} must be false when $o_1$ and $o_2$ are not identical.
+However, Dart implementations are not required to canonicalize closures,
+which means that \code{identical($o_1.m, o_2.m$)} is not guaranteed to be true,
+even when it is known that $o_1$ and $o_2$ are identical.
 }
 % local functions that have a closure extracted are always different
 
@@ -4845,8 +5570,22 @@
 \subsubsection{Super Closurization}
 \LMLabel{superClosurization}
 
+\commentary{
+Note that the non-generic case is covered implicitly using $s = 0$,
+in which case the type parameter declarations are omitted (\ref{generics}).
+}
+
 \LMHash{}
-The {\em closurization of method $f$ with respect to superclass $S$} is defined to be equivalent to:
+Consider expressions in the body of a class $T$ which is a subclass of a given class $S$,
+where a method declaration that implements $f$ exists in $S$,
+and there is no class $U$ which is a subclass of $S$ and a superclass of $T$ which implements $f$.
+
+\commentary{
+In short, consider a situation where a superinvocation of $f$ will execute $f$ as declared in $S$.
+}
+
+\LMHash{}
+The {\em closurization of method $f$ with respect to $S$} is defined to be equivalent to:
 
 \LMHash{}
 \begin{itemize}
@@ -4856,22 +5595,73 @@
 %\item $(a, b) \{\RETURN{}$ $\SUPER[a] = b;$\} if $f$ is named $[]=$.
 \item
 \begin{dartCode}
-$(r_1, \ldots, r_n, \{p_1 = d_1, \ldots , p_k = d_k\})$ \{
-  \RETURN{} \SUPER$.m(r_1, \ldots, r_n, p_1: p_1, \ldots, p_k: p_k);$
-\}
+<$X_1\ \EXTENDS\ B'_1, \ldots,\ X_s\ \EXTENDS\ B'_s$>
+
+($T_1\ r_1, \ldots,\ T_n\ r_n,\ $\{$T_{n+1}\ p_1 = d_1, \ldots,\ T_{n+k}\ p_k = d_k$\}) =>
+    \SUPER$.m$<$X_1, \ldots,\ X_s$>($r_1, \ldots,\ r_n,\ p_1$: $p_1, \ldots,\ p_k$: $p_k$);
 \end{dartCode}
-if $f$ is named $m$ and has required parameters $r_1, \ldots, r_n$, and named parameters $p_1, \ldots, p_k$ with defaults $d_1, \ldots, d_k$.
+if $f$ is named $m$ and has type parameter declarations
+$X_1\ \EXTENDS\ B_1$, \ldots,\ $X_s\ \EXTENDS\ B_s$,
+required parameters $r_1, \ldots, r_n$,
+and named parameters $p_1, \ldots, p_k$ with defaults $d_1, \ldots, d_k$.
 \item
 \begin{dartCode}
-$(r_1, \ldots, r_n, [p_1 = d_1, \ldots , p_k = d_k])$\{
-  \RETURN{} \SUPER$.m(r_1, \ldots, r_n, p_1, \ldots, p_k)$;
-\}
+<$X_1\ \EXTENDS\ B'_1, \ldots,\ X_s\ \EXTENDS\ B'_s$>
+
+($T_1\ r_1, \ldots,\ T_n\ r_n,\ $[$T_{n+1}\ p_1 = d_1, \ldots,\ T_{n+k}\ p_k = d_k$]) =>
+    \SUPER.$m$<$X_1, \ldots,\ X_s$>($r_1, \ldots,\ r_n,\ p_1, \ldots,\ p_k$);
 \end{dartCode}
-if $f$ is named $m$ and has required parameters $r_1, \ldots, r_n$, and optional positional parameters $p_1, \ldots, p_k$ with defaults $d_1, \ldots, d_k$.
+if $f$ is named $m$ and has type parameter declarations
+$X_1\ \EXTENDS\ B_1$, \ldots,\ $X_s\ \EXTENDS\ B_s$,
+required parameters $r_1, \ldots, r_n$,
+and optional positional parameters $p_1, \ldots, p_k$ with defaults $d_1, \ldots, d_k$.
 \end{itemize}
 
 \LMHash{}
-Except that if{}f two closurizations were created by code declared in the same class with identical bindings of \THIS{} then \code{\SUPER$_1.m$ == \SUPER$_2.m$}.
+$B'_j, j \in 1 .. s$, are determined as follows:
+If $S$ is a non-generic class then $B'_j = B_j, j \in 1 .. s$.
+Otherwise, let $X'_1, \ldots, X'_{s'}$ be the formal type parameters of $S$,
+and $t'_1, \ldots, t'_{s'}$ be the actual type arguments of \THIS{} at $S$.
+Then $B'_j = [t'_1/X'_1, \ldots, t'_{s'}/X'_{s'}]B_j, j \in 1 .. s$.
+
+\commentary{
+That is, we replace the formal type parameters of the enclosing class, if any, by the corresponding actual type arguments.
+We need to consider the type arguments with respect to a specific class because it is possible for a class to pass different type arguments to its superclass than the ones it receives itself.
+}
+
+%% TODO: We should specify tear-offs by means of their (static and dynamice)
+%% semantics, not via syntactic sugar, because the syntactic sugar causes
+%% weird phenomena like `a type annotation that denotes the same type as`
+%% etc.
+
+%% TODO[covariant-parameters]: When adding a specification of covariant
+%% parameters we will need to indicate that the dynamic parameter type is
+%% `Object` for such a parameter, and that the static type of the function
+%% as a whole will be taken from the statically known type of the receiver
+%% of the tear-off invocation.
+
+\LMHash{}
+The parameter types $T_j, j \in 1 .. n+k$, are determined as follows:
+Let the method declaration $D$ be the implementation of $m$ in $S$.
+
+\LMHash{}
+If $S$ is a non-generic class then for $j \in 1 .. n+k$,
+$T_j$ is a type annotation that denotes the same type as that which is denoted by the type annotation on the corresponding parameter declaration in $D$.
+If that parameter declaration has no type annotation then $T_j$ is \DYNAMIC{}.
+
+\LMHash{}
+Otherwise $S$ is a generic instantiation of a generic class $G$.
+Let $X''_1, \ldots, X''_{s''}$ be the formal type parameters of $G$,
+and $t''_1, \ldots, t''_{s''}$ be the actual type arguments of $o$ at $S$.
+Then $T_j$ is a type annotation that denotes $[t''_1/X''_1, \ldots, t''_{s''}/X''_{s''}]S_j$,
+where $S_j$ is the type annotation of the corresponding parameter in $D$.
+If that parameter declaration has no type annotation then $T_j$ is \DYNAMIC{}.
+
+\LMHash{}
+There is one way in which the closurization differs from the function literal:
+Assume that an occurrence of the expression \SUPER{}.$m$ in a given class is evaluated on two occasions where \THIS{} is $o_1$ respectively $o_2$,
+and the resulting closurization is $c_1$ respectively $c_2$:
+\code{$c_1$ == $c_2$} is then equal to \code{identical($o_1, o_2$)}.
 
 
 \subsection{Assignment}
@@ -4955,7 +5745,8 @@
 The expression $e_1$ is evaluated to an object $o_1$.
 Then, the expression $e_2$ is evaluated to an object $o_2$.
 Then, the setter $v=$ is looked up (\ref{getterAndSetterLookup}) in $o_1$ with respect to the current library.
-If $o_1$ is an instance of \code{Type} but $e_1$ is not a constant type literal, then if $v=$ is a setter that forwards (\ref{functionDeclarations}) to a static setter, setter lookup fails.
+If $o_1$ is an instance of \code{Type} but $e_1$ is not a constant type literal,
+then if $v=$ is a setter that forwards (\ref{functionDeclarations}) to a static setter, setter lookup fails.
 Otherwise, the body of $v=$ is executed with its formal parameter bound to $o_2$ and \THIS{} bound to $o_1$.
 
 \LMHash{}
@@ -4963,13 +5754,28 @@
 \begin{itemize}
 \item \code{im.isSetter} evaluates to \code{\TRUE{}}.
 \item \code{im.memberName} evaluates to the symbol \code{v=}.
-\item \code{im.positionalArguments} evaluates to an immutable list with the same values as \code{[$o_2$]}.
-\item \code{im.namedArguments} evaluates to an empty unmodifiable instance of \code{Map<Symbol, Object>}.
-\end{itemize}
+\item \code{im.positionalArguments} evaluates to an unmodifiable list with the same values as
+$\code{<Object>}[o_2]$.
+\item \code{im.namedArguments} evaluates to an empty, unmodifiable instance of
+
+\code{Map<Symbol, Object>}.
+\item \code{im.typeArguments} evaluates to an empty, unmodifiable instance of
+
+\code{List<Type>}.
+m\end{itemize}
 
 \LMHash{}
 Then the method \code{noSuchMethod()} is looked up in $o_1$ and invoked with argument $im$.
 
+% TODO(eernst): We have removed the description of how to invoke noSuchMethod
+% in Object if the overriding noSuchMethod does not accept one argument of
+% type Invocation, because that will be a compile-time error soon. At this
+% point we just keep a commentary ready to say that:
+%
+%% \commentary {
+%% It is a compile-time error to override the \code{noSuchMethod} of class \code{Object} in such a way that it cannot be invoked with one positional argument of type \code{Invocation}.
+%% }
+
 \LMHash{}
 The value of the assignment expression is $o_2$ irrespective of whether setter lookup has failed or succeeded.
 
@@ -4999,8 +5805,10 @@
 \begin{itemize}
 \item \code{im.isSetter} evaluates to \code{\TRUE{}}.
 \item \code{im.memberName} evaluates to the symbol \code{v=}.
-\item \code{im.positionalArguments} evaluates to an immutable list with the same values as \code{[$o$]}.
+\item \code{im.positionalArguments} evaluates to an unmodifiable list with the same values as \code{[$o$]}.
 \item \code{im.namedArguments} evaluates to an empty unmodifiable instance of \code{Map<Symbol, Object>}.
+\item \code{im.typeArguments} evaluates to an empty, unmodifiable instance of
+\code{List<Type>}.
 \end{itemize}
 
 \LMHash{}
@@ -5044,7 +5852,6 @@
 \LMHash{}
 It is a compile-time error to invoke any of the setters of class \code{Object} on a prefix object (\ref{imports}) or on a constant type literal that is immediately followed by the token `.'.
 
-
 \subsubsection{Compound Assignment}
 \LMLabel{compoundAssignment}
 
@@ -5190,7 +5997,7 @@
   `\&=';
   `\^{}=';
   `$|$=';
-  `??=';
+  `??='
   .
 \end{grammar}
 
@@ -5634,7 +6441,7 @@
   .
 
 {\bf selector:}assignableSelector;
-  arguments
+  argumentPart
   .
 
 {\bf incrementOperator:}`++';
@@ -5805,7 +6612,7 @@
 }
 
 \begin{grammar}
-{\bf assignableExpression:}primary (arguments* assignableSelector)+;
+{\bf assignableExpression:}primary (argumentPart* assignableSelector)+;
   \SUPER{} unconditionalAssignableSelector;
   identifier
   .
@@ -5855,7 +6662,8 @@
 {\bf identifier:}IDENTIFIER
   .
 
-{\bf IDENTIFIER\_NO\_DOLLAR:}IDENTIFIER\_START\_NO\_DOLLAR IDENTIFIER\_PART\_NO\_DOLLAR*
+{\bf IDENTIFIER\_NO\_DOLLAR:}IDENTIFIER\_START\_NO\_DOLLAR
+  \gnewline{} IDENTIFIER\_PART\_NO\_DOLLAR*
   .
 
 {\bf IDENTIFIER:}IDENTIFIER\_START IDENTIFIER\_PART*
@@ -6361,10 +7169,10 @@
 \LMLabel{forLoop}
 
 \LMHash{}
-Execution of a for statement of the form \code{\FOR{} (\VAR{} $v$ = $e_0$ ; $c$; $e$) $s$} proceeds as follows:
+Execution of a for statement of the form \code{\FOR{} (\VAR{} $v$ = $e_0$; $c$; $e$) $s$} proceeds as follows:
 
 \LMHash{}
-If $c$ is empty then let $c^\prime$ be \TRUE{} otherwise let $c^\prime$ be $c$.
+If $c$ is empty then let $c'$ be \TRUE{} otherwise let $c'$ be $c$.
 
 \LMHash{}
 First the variable declaration statement \VAR{} $v = e_0$ is executed.
@@ -6372,25 +7180,25 @@
 \begin{enumerate}
 \item
 \label{beginFor}
-If this is the first iteration of the for loop, let $v^\prime$ be $v$.
-Otherwise, let $v^\prime$ be the variable $v^{\prime\prime}$ created in the previous execution of step \ref{allocateFreshVar}.
+If this is the first iteration of the for loop, let $v'$ be $v$.
+Otherwise, let $v'$ be the variable $v''$ created in the previous execution of step \ref{allocateFreshVar}.
 \item
-The expression $[v^\prime/v]c$ is evaluated and subjected to boolean conversion (\ref{booleans}).
+The expression $[v'/v]c$ is evaluated and subjected to boolean conversion (\ref{booleans}).
 If the result is \FALSE{}, the for loop completes normally.
 Otherwise, execution continues at step \ref{beginIteration}.
 \item
 \label{beginIteration}
-The statement $[v^\prime/v]\{s\}$ is executed.
+The statement $[v'/v]\{s\}$ is executed.
 
 If this execution completes normally, continues without a label,
 or continues to a label (\ref{labels}) that prefixes this \FOR{} statement (\ref{completion}),
 then execution of the statement is treated as if it had completed normally.
 
 \label{allocateFreshVar}
-Let $v^{\prime\prime}$ be a fresh variable.
-$v^{\prime\prime}$ is bound to the value of $v^\prime$.
+Let $v''$ be a fresh variable.
+$v''$ is bound to the value of $v'$.
 \item
-The expression $[v^{\prime\prime}/v]e$ is evaluated, and the process recurses at step \ref{beginFor}.
+The expression $[v''/v]e$ is evaluated, and the process recurses at step \ref{beginFor}.
 \end{enumerate}
 
 \rationale{
@@ -6398,7 +7206,7 @@
 
 Instead, each iteration has its own distinct variable.
 The first iteration uses the variable created by the initial declaration.
-The expression executed at the end of each iteration uses a fresh variable $v^{\prime\prime}$, bound to the value of the current iteration variable, and then modifies $v^{\prime\prime}$ as required for the next iteration.
+The expression executed at the end of each iteration uses a fresh variable $v''$, bound to the value of the current iteration variable, and then modifies $v''$ as required for the next iteration.
 }
 
 \LMHash{}
@@ -6631,7 +7439,7 @@
 \}
 \end{dartCode}
 
- it is a compile-time error if the expressions $e_k$ are not compile-time constants for all $k \in 1..n$.
+ it is a compile-time error if the expressions $e_k$ are not compile-time constants for all $k \in 1 .. n$.
 It is a compile-time error if the values of the expressions $e_k$ are not either:
 \begin{itemize}
 \item instances of the same class $C$, for all $k \in 1 .. n$, or
@@ -6683,7 +7491,7 @@
 
 \LMHash{}
 The statement \code{\VAR{} $id$ = $e$;} is evaluated, where $id$ is a fresh variable.
-In checked mode, it is a run-time error if the value of $e$ is not an instance of the same class as the constants $e_1 \ldots e_n$.
+In checked mode, it is a run-time error if the value of $e$ is not an instance of the same class as the constants $e_1, \ldots, e_n$.
 
 \commentary{
 Note that if there are no case clauses ($n = 0$), the type of $e$ does not matter.
@@ -6761,7 +7569,7 @@
 
 \begin{dartCode}
 \SWITCH{} (x) \{
-  \CASE{} 1: \TRY{} \{ $\ldots$ \RETURN{};\} \FINALLY{} \{ $\ldots$ \RETURN{};\}
+  \CASE{} 1: \TRY{} \{ $\ldots$ \RETURN{}; \} \FINALLY{} \{ $\ldots$ \RETURN{}; \}
 \}
 \end{dartCode}
 
@@ -7596,9 +8404,9 @@
 \begin{itemize}
 \item If $C_i$ is of the form
 
-\code{\SHOW{} $id_1, \ldots, id_k$}
+\code{\SHOW{} $id_1, \ldots,\ id_k$}
 
-then let $NS_i = \SHOW{}([id_1, \ldots, id_k], NS_{i-1}$)
+then let $NS_i = \SHOW{}([id_1, \ldots,\ id_k], NS_{i-1}$)
 
 where $show(l,n)$ takes a list of identifiers $l$ and a namespace $n$, and produces a namespace that maps each name in $l$ to the same element that $n$ does.
 Furthermore, for each name $x$ in $l$, if $n$ defines the name $x=$ then the new namespace maps $x=$ to the same element that $n$ does.
@@ -7606,9 +8414,9 @@
 
 \item If $C_i$ is of the form
 
-\code{\HIDE{} $id_1, \ldots, id_k$}
+\code{\HIDE{} $id_1, \ldots,\ id_k$}
 
-then let $NS_i = \HIDE{}([id_1, \ldots, id_k], NS_{i-1}$)
+then let $NS_i = \HIDE{}([id_1, \ldots,\ id_k], NS_{i-1}$)
 
 where $hide(l, n)$ takes a list of identifiers $l$ and a namespace $n$, and produces a namespace that is identical to $n$ except that for each name $k$ in $l$, $k$ and $k=$ are undefined.
 \end{itemize}
@@ -7648,14 +8456,15 @@
 \LMHash{}
 A {\em system library} is a library that is part of the Dart implementation.
 Any other library is a {\em non-system library}.
-If a name $N$ is referenced by a library $L$ and $N$ would be introduced into the top level scope of $L$ by
-imports of two libraries, $L_1$ and $L_2$, and the exported namespace of $L_1$ binds $N$ to a declaration originating in a system library:
 
-%an import of a system library and an import of a non-system library:
-\begin{itemize}
-\item The import of $L_1$ is implicitly extended by a \code{\HIDE{} $N$} clause.
-\item A static warning is issued.
-\end{itemize}
+If a name $N$ is referenced by a library $L$
+and $N$ would be introduced into the top level scope of $L$
+by imports of two libraries, $L_1$ and $L_2$,
+the exported namespace of $L_1$ binds $N$
+to a declaration originating in a system library,
+and the exported namespace of $L_2$ binds $N$ to a declaration
+that does not originate in a system library,
+then the import of $L_1$ is implicitly extended by a \code{\HIDE{} $N$} clause.
 
 \rationale{
 Whereas normal conflicts are resolved at deployment time, the functionality of \code{dart:} libraries is injected into an application at run time, and may vary over time as browsers are upgraded.
@@ -7671,7 +8480,6 @@
 \item A static warning occurs.
 \item If $N$ is referenced as a function, getter or setter, a \code{NoSuchMethodError} is thrown.
 \item If $N$ is referenced as a type, it is treated as a malformed type.
-
 \end{itemize}
 
 \LMHash{}
@@ -7770,12 +8578,12 @@
 Let $NS_0$ be the exported namespace of $B$.
 Then, for each combinator clause $C_i, i \in 1 .. n$ in $E$:
 \begin{itemize}
-\item If $C_i$ is of the form \code{\SHOW{} $id_1, \ldots, id_k$} then let
+\item If $C_i$ is of the form \code{\SHOW{} $id_1, \ldots,\ id_k$} then let
 
-$NS_i = \SHOW{}([id_1, \ldots, id_k], NS_{i-1}$).
-\item If $C_i$ is of the form \code{\HIDE{} $id_1, \ldots, id_k$}
+$NS_i = \SHOW{}([id_1, \ldots,\ id_k], NS_{i-1}$).
+\item If $C_i$ is of the form \code{\HIDE{} $id_1, \ldots,\ id_k$}
 
-then let $NS_i = \HIDE{}([id_1, \ldots, id_k], NS_{i-1}$).
+then let $NS_i = \HIDE{}([id_1, \ldots,\ id_k], NS_{i-1}$).
 \end{itemize}
 
 \LMHash{}
@@ -7783,12 +8591,13 @@
 entry mapping key $k$ to declaration $d$ in $NS_n$ an entry mapping $k$ to $d$ is added to the exported namespace of $L$ unless a top-level declaration with the name $k$ exists in $L$.
 
 \LMHash{}
-If a name $N$ is referenced by a library $L$ and $N$ would be introduced into the exported namespace of $L$ by exports of two libraries, $L_1$ and $L_2$, and the exported namespace of $L_1$ binds $N$ to a declaration originating in a system library:
-%an export of a system library and an export of a non-system library:
-\begin{itemize}
-\item The export of $L_1$ is implicitly extended by a \code{\HIDE{} $N$} clause.
-\item A static warning is issued.
-\end{itemize}
+If a name $N$ is not declared by a library $L$
+and $N$ would be introduced into the exported namespace of $L$
+by exports of two libraries, $L_1$ and $L_2$,
+the exported namespace of $L_1$ binds $N$ to a declaration originating in a system library,
+and the exported namespace of $L_2$ binds $N$ to a declaration
+that does not originate in a system library,
+then the export of $L_1$ is implicitly extended by a \code{\HIDE{} $N$} clause.
 
 \rationale{
 See the discussion in section \ref{imports} for the reasoning behind this rule.
@@ -7985,11 +8794,11 @@
 \begin{itemize}
 \item $T$ has the form $id$ or the form $prefix.id$, and in the enclosing lexical scope, the name $id$ (respectively $prefix.id$) does not denote a type.
 \item $T$ denotes a type variable in the enclosing lexical scope, but occurs in the signature or body of a static member.
-\item $T$ is a parameterized type of the form $G<S_1, \ldots , S_n>$, and $G$ is malformed.
+\item $T$ is a parameterized type of the form \code{$G$<$S_1, \ldots,\ S_n$>}, and $G$ is malformed.
 \item $T$ denotes declarations that were imported from multiple imports clauses.
 %Either $G$ or $S_i, i \in 1 .. n$ are malformed.
 % \item $G$ is not a generic type with $n$ type parameters.
-% \item Let $T_i$ be the type parameters of $G$ (if any) and let $B_i$ be the bound of $T_i, i \in 1 .. n$, and $S_i$ is not a subtype of $[S_1, \ldots, S_n/T_1, \ldots, T_n]B_i, i \in 1 .. n$.
+% \item Let $T_i$ be the type parameters of $G$ (if any) and let $B_i$ be the bound of $T_i, i \in 1 .. n$, and $S_i$ is not a subtype of $[S_1/T_1, \ldots, S_n/T_n]B_i, i \in 1 .. n$.
 % \end{itemize}
 \end{itemize}
 
@@ -8159,9 +8968,24 @@
   .
 \end{grammar}
 
+% TODO(eernst): Introduce new type aliases and new function type syntax, then
+% include support for generic functions here.
+
 \LMHash{}
- The effect of a type alias of the form \code{\TYPEDEF{} $T$ $id (T_1$ $p_1, \ldots, T_n$ $p_n, [T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}])$} declared in a library $L$ is to introduce the name $id$ into the scope of $L$, bound to the function type $(T_1, \ldots, T_n, [T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}]) \rightarrow T$.
-The effect of a type alias of the form \code{\TYPEDEF{} $T$ $id (T_1$ $p_1, \ldots, T_n$ $p_n, \{T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}\})$} declared in a library $L$ is to introduce the name $id$ into the scope of $L$, bound to the function type $(T_1, \ldots, T_n, \{T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}\}) \rightarrow T$.
+The effect of a type alias of the form
+
+\code{\TYPEDEF{} $T$ $id$($T_1\ p_1, \ldots,\ T_n\ p_n,\ [T_{n+1}\ p_{n+1}, \ldots,\ T_{n+k}\ p_{n+k}]$)}
+
+\noindent
+declared in a library $L$ is to introduce the name $id$ into the scope of $L$, bound to the function type
+$(T_1, \ldots,\ T_n, [T_{n+1}\ p_{n+1}, \ldots,\ T_{n+k} p_{n+k}]) \rightarrow T$.
+The effect of a type alias of the form
+
+\code{\TYPEDEF{} $T$ $id$($T_1\ p_1, \ldots,\ T_n\ p_n,\ \{T_{n+1}\ p_{n+1}, \ldots,\ T_{n+k}\ p_{n+k}\}$)}
+
+\noindent
+declared in a library $L$ is to introduce the name $id$ into the scope of $L$, bound to the function type
+$(T_1, \ldots,\ T_n, \{T_{n+1}\ p_{n+1}, \ldots,\ T_{n+k}\ p_{n+k}\}) \rightarrow T$.
 In either case, if{}f no return type is specified, it is taken to be \DYNAMIC{}.
 Likewise, if a type annotation is omitted on a formal parameter, it is taken to be \DYNAMIC{}.
 
@@ -8195,7 +9019,7 @@
 \item $S$ is a direct supertype of $T$.
 \item $T$ is a type parameter and $S$ is the upper bound of $T$.
 \item $T$ is a type parameter and $S$ is \code{Object}.
-\item $T$ is of the form $I<T_1, \ldots, T_n>$ and $S$ is of the form $I<S_1, \ldots, S_n>$ and:
+\item $T$ is of the form \code{$I$<$T_1, \ldots,\ T_n$>} and $S$ is of the form \code{$I$<$S_1, \ldots,\ S_n$>} and:
 $T_i << S_i, 1 \le i \le n$
 \item $T$ and $S$ are both function types, and $T << S$ under the rules of section \ref{functionTypes}.
 \item $T$ is a function type and $S$ is \code{Function}.
@@ -8245,18 +9069,31 @@
 \subsection{Function Types}
 \LMLabel{functionTypes}
 
+\commentary{
+Note that the non-generic case is covered by using $s = 0$,
+in which case the type parameter declarations are omitted (\ref{generics}).
+}
+
 \LMHash{}
 Function types come in two variants:
 \begin{enumerate}
 \item
 The types of functions that only have positional parameters.
-These have the general form $(T_1, \ldots, T_n, [T_{n+1} \ldots, T_{n+k}]) \rightarrow T$.
+These have the general form
+
+\code{<$X_1\ \EXTENDS\ B_1, \ldots,\ X_s\ \EXTENDS\ B_s$>}
+
+\code{($T_1, \ldots,\ T_n,\ $[$T_{n+1}, \ldots,\ T_{n+k}$]) $ \rightarrow T$}.
 \item
 The types of functions with named parameters.
-These have the general form $(T_1, \ldots, T_n, \{T_{x_1}$ $x_1 \ldots, T_{x_k}$ $x_k\}) \rightarrow T$.
+These have the general form
+
+\code{<$X_1\ \EXTENDS\ B_1, \ldots,\ X_s\ \EXTENDS\ B_s$>}
+
+\code{($T_1, \ldots,\ T_n,\ $\{$T_{x_1}\ x_1, \ldots,\ T_{x_k}\ x_k$\}) $ \rightarrow T$}.
 \end{enumerate}
 
-%$(T_1, \ldots T_n) \rightarrow T$ is a subtype of $(S_1, \ldots, S_n, ) \rightarrow S$, if all of the following conditions are met:
+%$(T_1, \ldots, T_n) \rightarrow T$ is a subtype of  $(S_1, \ldots, S_n, ) \rightarrow S$, if all of the following conditions are met:
 %\begin{enumerate}
 %\item Either
 %\begin{itemize}
@@ -8267,10 +9104,34 @@
 %\end{enumerate}
 
 \LMHash{}
-%A function type $(T_1, \ldots T_n, [T_{n+1} \ldots, T_{n+k}]) \rightarrow T$ is a subtype of the
+Two function types are considered equal if consistent renaming of type
+parameters can make them identical.
+
+\commentary{
+A common way to say this is that we do not distinguish function types which are alpha-equivalent.
+For the subtyping rule below this means we can assume that a suitable renaming has already taken place.
+In cases where this is not possible because the number of type parameters in the two types differ or the bounds are different, no subtype relationship exists.
+}
+
+\LMHash{}
+%A function type $(T_1, \ldots, T_n, [T_{n+1} , \ldots, T_{n+k}]) \rightarrow T$ is a subtype of the
 % the line below revises the rule to be more liberal
-A function type $(T_1, \ldots T_{k}, [T_{k+1} \ldots, T_{n+m}]) \rightarrow T$ is a subtype of the
-function type $(S_1, \ldots, S_{k+j}, [S_{k+j+1} \ldots, S_{n}]) \rightarrow S$, if all of the following conditions are met:
+The function type
+
+\code{<$X_1\ \EXTENDS\ B_1, \ldots,\ X_s\ \EXTENDS\ B_s$>}
+
+\code{($T_1, \ldots,\ T_{k},\ $[$T_{k+1}, \ldots,\ T_{n+m}$]) $ \rightarrow T$}
+
+\noindent
+is a subtype of the function type
+
+\code{<$X_1\ \EXTENDS\ B_1, \ldots,\ X_s\ \EXTENDS\ B_s$>}
+
+\code{($S_1, \ldots,\ S_{k+j},\ $[$S_{k+j+1}, \ldots,\ S_{n}$]) $ \rightarrow S$},
+
+\noindent
+if all of the following conditions are met,
+assuming that $X_j$ is a subtype of $B_j$, for all $j \in 1 .. s$:
 \begin{enumerate}
 \item Either
 \begin{itemize}
@@ -8281,7 +9142,22 @@
 \end{enumerate}
 
 \LMHash{}
-A function type $(T_1, \ldots T_n, \{T_{x_1}$ $x_1, \ldots, T_{x_k}$ $x_k\}) \rightarrow T$ is a subtype of the function type $(S_1, \ldots, S_n, \{S_{y_1}$ $y_1, \ldots, S_{y_m}$ $y_m\}) \rightarrow S$, if all of the following conditions are met:
+A function type
+
+\code{<$X_1\ \EXTENDS\ B_1, \ldots,\ X_s\ \EXTENDS\ B_s$>}
+
+\code{($T_1, \ldots,\ T_n,\ $\{$T_{x_1}\ x_1, \ldots,\ T_{x_k}\ x_k$\}) $ \rightarrow T$}
+
+\noindent
+is a subtype of the function type
+
+\code{<$X_1\ \EXTENDS\ B_1, \ldots,\ X_s\ \EXTENDS\ B_s$>}
+
+\code{($S_1, \ldots,\ S_n,\ $\{$S_{y_1}\ y_1, \ldots,\ S_{y_m}\ y_m$\}) $ \rightarrow S$},
+
+\noindent
+if all of the following conditions are met,
+assuming that $X_j$ is a subtype of $B_j$, for all $j \in 1 .. s$:
 \begin{enumerate}
 \item Either
 \begin{itemize}
@@ -8301,18 +9177,42 @@
 %We write $(T_1, \ldots, T_n) \rightarrow T$ as a shorthand for the type $(T_1, \ldots, T_n, []) \rightarrow T$.
 
 %The rules above need to be sanity checked, but the intent is that we view functions with rest parameters as having type $(T_1, ..., T_n, [\_{Tn+1}[] \_]) \rightarrow T$, where \_ is some magical identifier. Then the rules above may cover everything.
-% This is wrong - from the outside, the type takes an unbounded sequence of types, not a list. This can be modeled as $(T_1, \ldots, T_n, [T_{n+1}, \_ \ldots, T_{n+k} \_]) \rightarrow T$ for some finite $k$.
+% This is wrong - from the outside, the type takes an unbounded sequence of types, not a list. This can be modeled as $(T_1, \ldots, T_n, [T_{n+1}, \_, \ldots, T_{n+k} \_]) \rightarrow T$ for some finite $k$.
 
 \LMHash{}
 In addition, the following subtype rules apply:
 
-$(T_1, \ldots, T_n, []) \rightarrow T <: (T_1, \ldots, T_n) \rightarrow T$.
+% NOTE(eernst): In Dart 1 we do not have transitivity of subtyping so we
+% cannot use a rule about the empty list/set of optional parameters ('[]'
+% or '{}') as an "intermediate step" in a subtype judgment. We keep them
+% for now because they will be useful in Dart 2.
 
-$(T_1, \ldots, T_n) \rightarrow T <: (T_1, \ldots, T_n, \{\}) \rightarrow T$.
+\code{<$X_1\ B_1, \ldots,\ X_s\ B_s$>($T_1, \ldots,\ T_n,\ $[]) $ \rightarrow T \quad<:$}
 
-$(T_1, \ldots, T_n, \{\}) \rightarrow T <: (T_1, \ldots, T_n) \rightarrow T$.
+\code{<$X_1\ B_1, \ldots,\ X_s\ B_s$>($T_1, \ldots,\ T_n$)\ $\rightarrow T$}.
 
-$(T_1, \ldots, T_n) \rightarrow T <: (T_1, \ldots, T_n, []) \rightarrow T$.
+\vspace{2mm}
+\code{<$X_1\ B_1, \ldots,\ X_s\ B_s$>($T_1, \ldots,\ T_n,\ $\{\}) $ \rightarrow T \quad<:$}
+
+\code{<$X_1\ B_1, \ldots,\ X_s\ B_s$>($T_1, \ldots,\ T_n$)\ $\rightarrow T$}.
+
+\vspace{2mm}
+
+% NOTE(eernst): I think this rule is useless. We cannot use it (along with
+% other rules) to prove (T1) -> S <: (T1, []) -> S <: (T1, [T2]) -> S,
+% because it should not be provable (and it isn't) that we can accept two
+% arguments statically, but at runtime we only accept one argument; similarly,
+% we cannot prove (T1) -> S <: (T1, []) -> S <: ([T1]) -> S, because we
+% would then allow invocation with no arguments where the run-time
+% requirement is exactly one argument. So I believe that this rule is
+% simply useless (it's not dangerous, it just doesn't allow us to prove
+% anything). Hence, I'm commenting it out now.
+%
+% $(T_1, \ldots, T_n) \rightarrow T <: (T_1, \ldots, T_n, []) \rightarrow T$.
+%
+% Same for this rule:
+%
+% $(T_1, \ldots, T_n) \rightarrow T <: (T_1, \ldots, T_n, \{\}) \rightarrow T$.
 
 \rationale{
 The naive reader might conclude that, since it is not legal to declare a function with an empty optional parameter list, these rules are pointless.
@@ -8327,13 +9227,26 @@
 A function is always an instance of some class that implements the class \code{Function} and implements a \CALL{} method with the same signature as the function.
 All function types are subtypes of \code{Function}.
 If a type $I$ includes an instance method named \CALL{}, and the type of \CALL{} is the function type $F$, then $I$ is considered to be more specific than $F$.
-It is a static warning if a concrete class implements \code{Function} and does not have a concrete method named \CALL{} unless that class has an implementation of \code{noSuchMethod()} distinct from the one declared in class \code{Object}.
+It is a static warning if a concrete class implements \code{Function} and does not have a concrete method named \CALL{} unless that class has a concrete \code{noSuchMethod()} distinct from the one declared in class \code{Object}.
 
 %\commentary{Need to specify how a function values dynamic type is derived from its static signature.}
 
 \LMHash{}
-A function type $(T_1, \ldots T_{k}, [T_{k+1} \ldots, T_{n+m}]) \rightarrow T$ is more specific than the
-function type $(S_1, \ldots, S_{k+j}, [S_{k+j+1} \ldots, S_{n}]) \rightarrow S$, if all of the following conditions are met:
+A function type
+
+\code{<$X_1\ \EXTENDS\ B_1, \ldots,\ X_s\ \EXTENDS\ B_s$>}
+
+\code{($T_1, \ldots,\ T_{k},\ $[$T_{k+1}, \ldots,\ T_{n+m}$]) $ \rightarrow T$}
+
+\noindent
+is more specific than the function type
+
+\code{<$X_1\ \EXTENDS\ B_1, \ldots,\ X_s\ \EXTENDS\ B_s$>}
+
+\code{($S_1, \ldots,\ S_{k+j},\ $[$S_{k+j+1}, \ldots,\ S_{n}$]) $ \rightarrow S$},
+
+\noindent
+if all of the following conditions are met:
 \begin{enumerate}
 \item Either
 \begin{itemize}
@@ -8344,7 +9257,21 @@
 \end{enumerate}
 
 \LMHash{}
-A function type $(T_1, \ldots T_n, \{T_{x_1}$ $x_1, \ldots, T_{x_k}$ $x_k\}) \rightarrow T$ is more specific than the function type $(S_1, \ldots, S_n, \{S_{y_1}$ $y_1, \ldots, S_{y_m}$ $y_m\}) \rightarrow S$, if all of the following conditions are met:
+A function type
+
+\code{<$X_1\ \EXTENDS\ B_1, \ldots,\ X_s\ \EXTENDS\ B_s$>}
+
+\code{($T_1, \ldots,\ T_n,\ $\{$T_{x_1}\ x_1, \ldots,\ T_{x_k}\ x_k$\}) $ \rightarrow T$}
+
+\noindent
+is more specific than the function type
+
+\code{<$X_1\ \EXTENDS\ B_1, \ldots,\ X_s\ \EXTENDS\ B_s$>}
+
+\code{($S_1, \ldots,\ S_n,\ $\{$S_{y_1}\ y_1, \ldots,\ S_{y_m}\ y_m$\}) $ \rightarrow S$},
+
+\noindent
+if all of the following conditions are met:
 \begin{enumerate}
 \item Either
 \begin{itemize}
@@ -8372,7 +9299,8 @@
 If a generic type is used but type arguments are not provided, then the type arguments default to the unknown type.
 
 \commentary{
-This means that given a generic declaration $G<T_1, \ldots, T_n>$, the type $G$ is equivalent to $G< \DYNAMIC{}, \ldots, \DYNAMIC{}>$.
+This means that given a generic declaration \code{$G$<$T_1, \ldots,\ T_n$>}, the type $G$ is equivalent to
+\code{$G$<$\DYNAMIC{}, \ldots,\ \DYNAMIC{}$>}.
 }
 
 \LMHash{}
@@ -8504,22 +9432,73 @@
 \subsection{Parameterized Types}
 \LMLabel{parameterizedTypes}
 
-\LMHash{}
-A {\em parameterized type} is an invocation of a generic type declaration.
+% TODO(eernst): Deletions needed below when switching warning-->error; new
+% concept may be needed when adding support for generic tear-offs.
+%
+% Details:
+%
+% When switching to Dart 2 the static warnings about having an incorrect
+% number of type arguments or violating the bounds will become compile-time
+% errors, and we will no longer need a specification of the dynamic
+% semantics: Parameterized types will always apply a compile-time constant
+% denotation of a class (a dynamic value, i.e., an instance of \code{Type},
+% cannot be applied to actual type arguments), so no error free program can
+% need this semantics.
+%
+% We may want to add a new concept for the application of a generic
+% function to actual type arguments (maybe it's an extra kind of
+% 'parameterized type', but it differs from the generic class case because
+% we _can_ have dynamic invocations of a generic function). But this does
+% not arise as a stand-alone entity before we introduce generic tear-offs
+% (\code{var f = foo<int>;}), or if we allow it to arise implicitly based
+% on inference. That new concept should probably be added to this section.
 
 \LMHash{}
-Let $T$ be a parameterized type $G<S_1, \ldots, S_n>$.
-If $G$ is not a generic type, the type arguments $S_i$, $1 \le i \le n$ are discarded.
-If $G$ has $m \ne n$ type parameters, $T$ is treated as a parameterized type with $m$ arguments, all of which are \DYNAMIC{}.
+A \emph{parameterized type} is a syntactic construct where the name of a generic type declaration is applied to a list of actual type arguments.
+A \emph{generic instantiation} is the operation where a generic type is applied to actual type arguments.
 
 \commentary{
-In short, any arity mismatch results in all type arguments being dropped, and replaced with the correct number of type arguments, all set to \DYNAMIC{}.
+So a parameterized type is the syntactic concept that corresponds to the semantic concept of a generic instantiation.
+When using the former, we will often leave the latter implicit.
+}
+
+\LMHash{}
+Let $T$ be a parameterized type \code{$G$<$S_1, \ldots,\ S_n$>}.
+It is evaluated as follows.
+
+\LMHash{}
+If $G$ is not a generic type,
+the type arguments $S_i, i \in 1 .. n$ are ignored.
+If $G$ has $m \ne n$ type parameters, $T$ is treated as a parameterized type with $m$ arguments,
+all of which are \DYNAMIC{},
+and $S_i, i \in 1 .. n$ are ignored.
+
+%% TODO[dart-2]: This commentary should be completely obsolete in Dart 2.
+\commentary{
+In short, any arity mismatch results in all type arguments being dropped, and replaced by the correct number of type arguments, all set to \DYNAMIC{}.
 Of course, a static warning will be issued.
 }
 
 \LMHash{}
-Otherwise, let $T_i$ be the type parameters of $G$ and let $B_i$ be the bound of $T_i, i \in 1 .. n$.
-$T$ is {\em malbounded} if{}f either $S_i$ is malbounded or $S_i$ is not a subtype of $[S_1, \ldots, S_n/T_1, \ldots, T_n]B_i, i \in 1 .. n$.
+Otherwise, let $X_i$ be the type parameters of $G$ and let $B_i$ be the bound of $X_i, i \in 1 .. n$.
+Let $t_i$ be the result of evaluating $S_i$, for $i \in 1 .. n$.
+
+\LMHash{}
+$T$ is {\em malbounded} if{}f either $S_i$ is malbounded or $t_i$ is not a subtype of
+$[t_1/X_1, \ldots, t_n/X_n]B_i$,
+for one or more $i \in 1 .. n$.
+
+% TODO(eernst): When changing from warnings to errors, include the following
+% as a commentary:
+%
+%   We do not specify the result of evaluating a malbounded type.
+%   This is because it is a compile-time error when a parameterized type is
+%   encountered, unless it is statically known that it will not be malbounded.
+%
+% That is also the reason why we say "$S_i$ is malbounded", not "$t_i$" above.
+
+\LMHash{}
+Otherwise, $T$ evaluates to the generic instantiation where $G$ is applied to $t_1, \ldots, t_n$.
 
 \commentary{
 Note, that, in checked mode, it is a dynamic type error if a malbounded type is used in a type test as specified in \ref{dynamicTypeSystem}.
@@ -8529,35 +9508,80 @@
 Any use of a malbounded type gives rise to a static warning.
 
 \LMHash{}
-If $S$ is the static type of a member $m$ of $G$, then the static type of the member $m$ of $G<A_1, \ldots, A_n>$ is $[A_1, \ldots, A_n/T_1, \ldots, T_n]S$ where $T_1, \ldots, T_n$ are the formal type parameters of $G$.
-Let $B_i$, be the bounds of $T_i, 1 \le i \le n$.
-It is a static type warning if $A_i$ is not a subtype of $[A_1, \ldots, A_n/T_1, \ldots, T_n]B_i, i \in 1 .. n$.
+If $S$ is the static type of a member $m$ of $G$,
+then the static type of the member $m$ of
+\code{$G$<$A_1, \ldots,\ A_n$>}
+is
+$[A_1/X_1, \ldots, A_n/X_n]S$,
+where $X_1, \ldots, X_n$ are the formal type parameters of $G$.
+Let $B_i$ be the bounds of $X_i, i \in 1 .. n$.
+It is a static type warning if $A_i$ is not a subtype of
+$[A_1/X_1, \ldots, A_n/X_n]B_i, i \in 1 .. n$.
 It is a static type warning if $G$ is not a generic type with exactly $n$ type parameters.
 
 
 \subsubsection{Actual Type of Declaration}
 \LMLabel{actualTypeOfADeclaration}
 
-\LMHash{}
-A type $T$ {\em depends on a type parameter} $U$ if{}f:
-\begin{itemize}
-\item $T$ is $U$.
-\item $T$ is a parameterized type, and one of the type arguments of $T$ depends on $U$.
-\end{itemize}
+% NOTE(eernst): The actual type arguments in this section are dynamic entities,
+% not syntax (the concept of an 'actual type' and an 'actual bound' is used to
+% specify the dynamic semantics, including dynamic errors). So we use $t_i$
+% to denote these type arguments, just like all those location where the
+% concept is used, rather than $A_i$ which is frequently used to denote the
+% syntax of an actual type argument.
+%
+% The point is that $t_i$ will never contain a formal type parameter, so we
+% need not worry about the need to iterate in the substitution that finds an
+% actual bound. For instance, there is no problem determining the actual bound
+% for \code{X} in an invocation of \code{void foo<X extends C<X>>() \{...\}}
+% even if it is a recursive invocation on the form \code{foo<C<X>>()} in the
+% body.
 
 \LMHash{}
-Let $T$ be the declared type of a declaration $d$, as it appears in the program source.
-The {\em actual type} of $d$ is
+Let $T$ be the declared type of a declaration $d$,
+as it appears in the program source.
+Let $X_1, \ldots, X_n$ be the formal type parameters in scope at $d$.
+In a context where the actual type arguments corresponding to
+$X_1, \ldots, X_n$
+are
+$t_1, \ldots, t_n$,
+the {\em actual type} of $d$ is
+$[t_1/X_1, \ldots, t_n/X_n]T$.
 
-\begin{itemize}
-\item $[A_1, \ldots, A_n/U_1, \ldots, U_n]T$ if $d$ depends on type parameters $U_1, \ldots, U_n$, and $A_i$ is the value of $U_i, 1 \le i \le n$.
-\item $T$ otherwise.
-\end{itemize}
+\commentary{
+In the non-generic case where $n = 0$ the actual type is equal to the declared type.
+Note that
+$X_1, \ldots, X_n$
+may be declared by multiple entities, e.g.,
+one or more enclosing generic functions and an enclosing generic class.
+}
+
+\LMHash{}
+Let \code{$X$ \EXTENDS{} $B$} be a formal type parameter declaration.
+Let
+$X_1, \ldots, X_n$
+be the formal type parameters in scope the declaration of $X$.
+In a context where the actual type arguments corresponding to
+$X_1, \ldots, X_n$
+are
+$t_1, \ldots, t_n$,
+the {\em actual bound} for $X$ is
+$[t_1/X_1, \ldots, t_n/X_n]B$.
+
+\commentary{
+Note that there exists a $j$ such that $X = X_j$,
+because each formal type parameter is in scope at its own declaration.
+}
+
 
 
 \subsubsection{Least Upper Bounds}
 \LMLabel{leastUpperBounds}
 
+% TODO(eernst): This section has been updated to take generic functions
+% into account, but no other changes have been performed. Hence, we still
+% need to update this section to use Dart 2 rules for LUB.
+
 \LMHash{}
 % does this diverge in some cases?
 Given two interfaces $I$ and $J$,
@@ -8589,46 +9613,58 @@
 \LMHash{}
 The least upper bound of a function type and an interface type $T$ is the least upper bound of \code{Function} and $T$.
 Let $F$ and $G$ be function types.
-If $F$ and $G$ differ in their number of required parameters, then the least upper bound of $F$ and $G$ is \code{Function}.
+If $F$ and $G$ differ in their number of required parameters,
+then the least upper bound of $F$ and $G$ is \code{Function}.
 Otherwise:
 \begin{itemize}
 \item If
 
-$F= (T_1 \ldots T_r, [T_{r+1}, \ldots, T_n]) \longrightarrow T_0$,
+\code{$F = $ <$X_1\ B_1, \ldots,\ X_s\ B_s$>($T_1, \ldots,\ T_r,\ $[$T_{r+1}, \ldots,\ T_n$]) $ \rightarrow T_0$} and
 
-$G= (S_1 \ldots S_r, [S_{r+1}, \ldots, S_k]) \longrightarrow S_0$
+\code{$G = $ <$X_1\ B_1, \ldots,\ X_s\ B_s$>($S_1, \ldots,\ S_r,\ $[$S_{r+1}, \ldots,\ S_k$]) $ \rightarrow S_0$}
 
+\noindent
 where $k \le n$ then the least upper bound of $F$ and $G$ is
 
-$(L_1 \ldots L_r, [L_{r+1}, \ldots, L_k]) \longrightarrow L_0$
+\code{<$X_1\ B_1, \ldots,\ X_s\ B_s$>($L_1, \ldots,\ L_r,\ $[$L_{r+1}, \ldots,\ L_k$]) $ \rightarrow L_0$}
 
+\noindent
 where $L_i$ is the least upper bound of $T_i$ and $S_i, i \in 0 .. k$.
 \item If
 
-$F= (T_1 \ldots T_r, [T_{r+1}, \ldots, T_n]) \longrightarrow T_0$,
+\code{$F = $ <$X_1\ B_1, \ldots,\ X_s\ B_s$>($T_1, \ldots,\ T_r,\ $[$T_{r+1}, \ldots,\ T_n$]) $ \rightarrow T_0$},
 
-$G= (S_1 \ldots S_r, \{ \ldots \}) \longrightarrow S_0$
+\code{$G = $ <$X_1\ B_1, \ldots,\ X_s\ B_s$>($S_1, \ldots,\ S_r,\ $\{ \ldots{} \}) $ \rightarrow S_0$}
 
+\noindent
 then the least upper bound of $F$ and $G$ is
 
-$(L_1 \ldots L_r) \longrightarrow L_0$
+\code{<$X_1\ B_1, \ldots,\ X_s\ B_s$>($L_1, \ldots,\ L_r$) $ \rightarrow L_0$}
 
-where $L_i$
-is the least upper bound of $T_i$ and $S_i, i \in 0 .. r$.
+\noindent
+where $L_i$ is the least upper bound of $T_i$ and $S_i, i \in 0 .. r$.
 \item If
 
-$F= (T_1 \ldots T_r, \{T_{r+1}$ $p_{r+1}, \ldots, T_f$ $p_f\}) \longrightarrow T_0$,
+\code{$F = $ <$X_1\ B_1, \ldots,\ X_s\ B_s$>($T_1, \ldots,\ T_r,\ $\{$T_{r+1}\ p_{r+1}, \ldots,\ T_f\ p_f$\}) $ \rightarrow T_0$},
 
-$G= (S_1 \ldots S_r, \{ S_{r+1}$ $q_{r+1}, \ldots, S_g$ $q_g\}) \longrightarrow S_0$
+\code{$G = $ <$X_1\ B_1, \ldots,\ X_s\ B_s$>($S_1, \ldots,\ S_r,\ $\{$S_{r+1}\ q_{r+1}, \ldots,\ S_g\ q_g$\}) $ \rightarrow S_0$}
 
-then let $\{x_m, \ldots x_n\} = \{p_{r+1}, \ldots, p_f\} \cap \{q_{r+1}, \ldots, q_g\}$ and let $X_j$ be the least upper bound of the types of $x_j$ in $F$ and $G, j \in m .. n$.
+then let
+$\{x_m, \ldots, x_n\} = \{p_{r+1}, \ldots, p_f\} \cap \{q_{r+1}, \ldots, q_g\}$
+and let $X_j$ be the least upper bound of the types of $x_j$ in $F$ and
+$G, j \in m .. n$.
 Then the least upper bound of $F$ and $G$ is
 
-$(L_1 \ldots L_r, \{ X_m$ $x_m, \ldots, X_n$ $x_n\}) \longrightarrow L_0$
+\code{<$X_1\ B_1, \ldots,\ X_s\ B_s$>($L_1, \ldots,\ L_r,\ $\{$X_m\ x_m, \ldots,\ X_n\ x_n$\}) $ \rightarrow L_0$}
 
 where $L_i$ is the least upper bound of $T_i$ and $S_i, i \in 0 .. r$
 \end{itemize}
 
+\commentary{
+Note that the non-generic case is covered by using $s = 0$,
+in which case the type parameter declarations are omitted (\ref{generics}).
+}
+
 
 \section{Reference}
 \LMLabel{reference}
diff --git a/docs/language/informal/assert-in-initializer-list.md b/docs/language/informal/assert-in-initializer-list.md
index 5eff658..38e523d 100644
--- a/docs/language/informal/assert-in-initializer-list.md
+++ b/docs/language/informal/assert-in-initializer-list.md
@@ -1,7 +1,11 @@
 # Asserts in Initializer List
 [lrn@google.com](mailto:lrn@google.com)
+
 Version 1.1 (2017-06-08)
-Status: Accepted, Informally specified
+
+**Status**: Integrated into the language specification in
+[`609d26a`](https://github.com/dart-lang/sdk/commit/609d26a2274ccde0f74725f4df7e081ebc8ea020);
+this document is now background material.
 
 (See: http://dartbug.com/24841, http://dartbug.com/27141)
 
diff --git a/docs/language/informal/covariant-overrides.md b/docs/language/informal/covariant-overrides.md
index bacb8fc..f0f415e 100644
--- a/docs/language/informal/covariant-overrides.md
+++ b/docs/language/informal/covariant-overrides.md
@@ -1,10 +1,10 @@
 # Covariant Overrides
 
-Owner: rnystrom@, eernstg@.
+**Owner**: rnystrom@, eernst@.
 
-Status: Implemented.
+**Status**: Implemented.
 
-Version: 1.1 (Oct 10, 2017).
+**Version**: 1.1 (Oct 10, 2017).
 
 ## Summary
 
diff --git a/docs/language/informal/generalized-void.md b/docs/language/informal/generalized-void.md
index 23c45af..2c10975 100644
--- a/docs/language/informal/generalized-void.md
+++ b/docs/language/informal/generalized-void.md
@@ -1,6 +1,6 @@
 ## Feature: Generalized Void
 
-Author: eernst@
+**Author**: eernst@
 
 **Status**: Under implementation.
 
diff --git a/docs/language/informal/generic-method-syntax.md b/docs/language/informal/generic-method-syntax.md
index d69c400..f7ddc3e 100644
--- a/docs/language/informal/generic-method-syntax.md
+++ b/docs/language/informal/generic-method-syntax.md
@@ -1,5 +1,12 @@
 # Feature: Generic Method Syntax
 
+**Author**: eernst@
+
+**Status**: Integrated into (and subsumed by) updates to the language
+specification as of
+[`673d5f0`](https://github.com/dart-lang/sdk/commit/673d5f0a665085153d25f8c39495eacdb010ca64).
+This document is now background material.
+
 **This document** is an informal specification of the support in Dart 1.x
 for generic methods and functions which includes syntax and name
 resolution, but not reification of type arguments.
diff --git a/docs/language/informal/int64.md b/docs/language/informal/int64.md
index db00f55..4bf67d5 100644
--- a/docs/language/informal/int64.md
+++ b/docs/language/informal/int64.md
@@ -1,7 +1,11 @@
 Dart - Fixed-Size Integers
 ===
-2017-09-26
-floitsch@google.com
+
+**Author**: floitsch@
+
+**Version**: 2017-09-26.
+
+**Status**: Under implementation.
 
 This document discusses Dart's plan to switch the `int` type so that it represents 64-bit integers instead of bigints. It is part of our continued effort of changing the integer type to fixed size ([issue]).
 
diff --git a/docs/language/informal/mixin-declaration.md b/docs/language/informal/mixin-declaration.md
index 6bb97ae..7012ea7 100644
--- a/docs/language/informal/mixin-declaration.md
+++ b/docs/language/informal/mixin-declaration.md
@@ -1,10 +1,10 @@
 # Dart 2.0 Mixins
 
-Author: [lrn@google.com](mailto:lrn@google.com)
+**Author**: [lrn@google.com](mailto:lrn@google.com)
 
-Version 0.6 (2017-06-14)
+**Version**: 0.6 (2017-06-14)
 
-Status: Mostly designed, ready for external comments.
+**Status**: Mostly designed, ready for external comments.
 
 ## Proposal
 This proposal introduces a new syntax for declaring mixins, separate from deriving a mixin from a class declaration. It expects to deprecate and remove the ability to derive a mixin from a class declaration, but doesn't require it.
diff --git a/docs/language/informal/optional-new-const.md b/docs/language/informal/optional-new-const.md
index e5d12ff..8e100a7 100644
--- a/docs/language/informal/optional-new-const.md
+++ b/docs/language/informal/optional-new-const.md
@@ -1,10 +1,11 @@
 # Optional new/const
 
-Author: Lasse R.H. Nielsen ([lrn@google.com](mailto:lrn@google.com))
+**Author**: Lasse R.H. Nielsen ([lrn@google.com](mailto:lrn@google.com))
 
-Version: 0.8 (2017-06-20)
+**Version**: 0.8 (2017-06-20)
 
-Status: Under discussion
+**Status**: This is background material for
+[implicit-creation.md](https://github.com/dart-lang/sdk/blob/master/docs/language/informal/implicit-creation.md).
 
 This informal specification documents a group of four related features.
 * Optional `const`
diff --git a/docs/language/informal/super-bounded-types.md b/docs/language/informal/super-bounded-types.md
index 028db60..db2e46c 100644
--- a/docs/language/informal/super-bounded-types.md
+++ b/docs/language/informal/super-bounded-types.md
@@ -4,7 +4,7 @@
 
 **Version**: 0.5 (2018-01-11).
 
-**Status**: Under discussion.
+**Status**: Under implementation.
 
 **This document** is an informal specification of the support in Dart 2 for
 using certain generic types where the declared bounds are violated. The
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
index d29210f..6e50eb5 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
@@ -247,20 +247,25 @@
   @override
   visitFieldDeclaration(FieldDeclaration node) {
     VariableDeclarationList fields = node.fields;
-    NodeList<VariableDeclaration> variables = fields.variables;
-    if (variables.length != 1 ||
-        !variables[0].name.isSynthetic ||
-        fields.type == null) {
-      return;
-    }
     if (entity != fields) {
       return;
     }
-    List<Keyword> keywords = <Keyword>[Keyword.CONST, Keyword.FINAL];
-    if (!node.isStatic) {
-      keywords.add(Keyword.STATIC);
+    NodeList<VariableDeclaration> variables = fields.variables;
+    if (variables.isEmpty || request.offset > variables.first.beginToken.end) {
+      return;
     }
-    _addSuggestions(keywords);
+    if (node.covariantKeyword == null) {
+      _addSuggestion(Keyword.COVARIANT);
+    }
+    if (!node.isStatic) {
+      _addSuggestion(Keyword.STATIC);
+    }
+    if (!variables.first.isConst) {
+      _addSuggestion(Keyword.CONST);
+    }
+    if (!variables.first.isFinal) {
+      _addSuggestion(Keyword.FINAL);
+    }
   }
 
   @override
@@ -525,6 +530,7 @@
   void _addClassBodyKeywords() {
     _addSuggestions([
       Keyword.CONST,
+      Keyword.COVARIANT,
       Keyword.DYNAMIC,
       Keyword.FACTORY,
       Keyword.FINAL,
@@ -555,6 +561,7 @@
       Keyword.ABSTRACT,
       Keyword.CLASS,
       Keyword.CONST,
+      Keyword.COVARIANT,
       Keyword.DYNAMIC,
       Keyword.FINAL,
       Keyword.TYPEDEF,
diff --git a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
index f4265da..425178b 100644
--- a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
@@ -21,6 +21,7 @@
 class KeywordContributorTest extends DartCompletionContributorTest {
   static const List<Keyword> CLASS_BODY_KEYWORDS = const [
     Keyword.CONST,
+    Keyword.COVARIANT,
     Keyword.DYNAMIC,
     Keyword.FACTORY,
     Keyword.FINAL,
@@ -36,6 +37,7 @@
     Keyword.ABSTRACT,
     Keyword.CLASS,
     Keyword.CONST,
+    Keyword.COVARIANT,
     Keyword.DYNAMIC,
     Keyword.FINAL,
     Keyword.TYPEDEF,
@@ -47,6 +49,7 @@
     Keyword.ABSTRACT,
     Keyword.CLASS,
     Keyword.CONST,
+    Keyword.COVARIANT,
     Keyword.DYNAMIC,
     Keyword.EXPORT,
     Keyword.FINAL,
@@ -62,6 +65,7 @@
     Keyword.ABSTRACT,
     Keyword.CLASS,
     Keyword.CONST,
+    Keyword.COVARIANT,
     Keyword.DYNAMIC,
     Keyword.EXPORT,
     Keyword.FINAL,
@@ -769,7 +773,7 @@
 }
 ''');
     await computeSuggestions();
-    assertSuggestKeywords([Keyword.CONST, Keyword.FINAL]);
+    assertSuggestKeywords([Keyword.CONST, Keyword.COVARIANT, Keyword.FINAL]);
   }
 
   test_class_member_final_afterStatic() async {
@@ -779,7 +783,7 @@
 }
 ''');
     await computeSuggestions();
-    assertSuggestKeywords([Keyword.CONST, Keyword.FINAL]);
+    assertSuggestKeywords([Keyword.CONST, Keyword.COVARIANT, Keyword.FINAL]);
   }
 
   test_class_name() async {
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 958b75a..323ff7ff 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -94,7 +94,7 @@
   /**
    * The version of data format, should be incremented on every format change.
    */
-  static const int DATA_VERSION = 48;
+  static const int DATA_VERSION = 49;
 
   /**
    * The number of exception contexts allowed to write. Once this field is
diff --git a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
index 3668894..fdb6d87 100644
--- a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
@@ -33,7 +33,6 @@
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart';
-import 'package:kernel/src/incremental_class_hierarchy.dart';
 import 'package:kernel/target/targets.dart';
 import 'package:kernel/type_environment.dart';
 import 'package:package_config/packages.dart';
@@ -254,7 +253,7 @@
 
         // TODO(scheglov) Can we keep the same instance?
         var types = new TypeEnvironment(
-            new CoreTypes(_program), new IncrementalClassHierarchy());
+            new CoreTypes(_program), new ClassHierarchy(_program));
 
         // Add results for new libraries.
         for (var library in _program.libraries) {
diff --git a/pkg/analyzer/lib/src/dart/element/builder.dart b/pkg/analyzer/lib/src/dart/element/builder.dart
index 19eee60..1837250 100644
--- a/pkg/analyzer/lib/src/dart/element/builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/builder.dart
@@ -223,6 +223,7 @@
       constantName.staticElement = constantField;
     }
     enumElement.fields = fields;
+    enumElement.createToStringMethodElement();
 
     _currentHolder.addEnum(enumElement);
     enumName.staticElement = enumElement;
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 8da11b2..d1a4712 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -63,6 +63,11 @@
   List<FieldElement> _fields;
 
   /**
+   * A list containing all of the methods contained in this class.
+   */
+  List<MethodElement> _methods;
+
+  /**
    * Initialize a newly created class element to have the given [name] at the
    * given [offset] in the file that contains the declaration of this element.
    */
@@ -181,6 +186,18 @@
   }
 
   @override
+  MethodElement getMethod(String methodName) {
+    int length = methods.length;
+    for (int i = 0; i < length; i++) {
+      MethodElement method = methods[i];
+      if (method.name == methodName) {
+        return method;
+      }
+    }
+    return null;
+  }
+
+  @override
   PropertyAccessorElement getSetter(String setterName) {
     // TODO (jwren) revisit- should we append '=' here or require clients to
     // include it?
@@ -472,11 +489,6 @@
   List<ConstructorElement> _constructors;
 
   /**
-   * A list containing all of the methods contained in this class.
-   */
-  List<MethodElement> _methods;
-
-  /**
    * A flag indicating whether the types associated with the instance members of
    * this class have been inferred.
    */
@@ -1116,18 +1128,6 @@
   }
 
   @override
-  MethodElement getMethod(String methodName) {
-    int length = methods.length;
-    for (int i = 0; i < length; i++) {
-      MethodElement method = methods[i];
-      if (method.name == methodName) {
-        return method;
-      }
-    }
-    return null;
-  }
-
-  @override
   ConstructorElement getNamedConstructor(String name) {
     for (ConstructorElement element in constructors) {
       String elementName = element.name;
@@ -3777,7 +3777,7 @@
   List<PropertyAccessorElement> get accessors {
     if (_accessors == null) {
       if (_kernel != null || _unlinkedEnum != null) {
-        _resynthesizeFieldsAndPropertyAccessors();
+        _resynthesizeMembers();
       }
     }
     return _accessors ?? const <PropertyAccessorElement>[];
@@ -3833,7 +3833,7 @@
   List<FieldElement> get fields {
     if (_fields == null) {
       if (_kernel != null || _unlinkedEnum != null) {
-        _resynthesizeFieldsAndPropertyAccessors();
+        _resynthesizeMembers();
       }
     }
     return _fields ?? const <FieldElement>[];
@@ -3889,7 +3889,14 @@
   }
 
   @override
-  List<MethodElement> get methods => const <MethodElement>[];
+  List<MethodElement> get methods {
+    if (_methods == null) {
+      if (_kernel != null || _unlinkedEnum != null) {
+        _resynthesizeMembers();
+      }
+    }
+    return _methods ?? const <MethodElement>[];
+  }
 
   @override
   List<InterfaceType> get mixins => const <InterfaceType>[];
@@ -3945,8 +3952,18 @@
     }
   }
 
-  @override
-  MethodElement getMethod(String name) => null;
+  /**
+   * Create the only method enums have - `toString()`.
+   */
+  void createToStringMethodElement() {
+    var method = new MethodElementImpl('toString', -1);
+    if (_kernel != null || _unlinkedEnum != null) {
+      method.returnType = context.typeProvider.stringType;
+      method.type = new FunctionTypeImpl(method);
+    }
+    method.enclosingElement = this;
+    _methods = <MethodElement>[method];
+  }
 
   @override
   ConstructorElement getNamedConstructor(String name) => null;
@@ -3954,7 +3971,7 @@
   @override
   bool isSuperConstructorAccessible(ConstructorElement constructor) => false;
 
-  void _resynthesizeFieldsAndPropertyAccessors() {
+  void _resynthesizeMembers() {
     List<FieldElementImpl> fields = <FieldElementImpl>[];
     // Build the 'index' field.
     fields.add(new FieldElementImpl('index', -1)
@@ -3993,6 +4010,7 @@
             new PropertyAccessorElementImpl_ImplicitGetter(field)
               ..enclosingElement = this)
         .toList(growable: false);
+    createToStringMethodElement();
   }
 }
 
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index a73324f..744a53d 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -418,14 +418,17 @@
    * Initialize a newly created function type that is semantically the same as
    * [original], but which has been syntactically renamed with fresh type
    * parameters at its outer binding site (if any).
+   *
+   * If type formals is empty, this returns the original unless [force] is set
+   * to [true].
    */
-  factory FunctionTypeImpl.fresh(FunctionType original) {
+  factory FunctionTypeImpl.fresh(FunctionType original, {bool force = false}) {
     // We build up a substitution for the type parameters,
     // {variablesFresh/variables} then apply it.
 
     var originalFormals = original.typeFormals;
     var formalCount = originalFormals.length;
-    if (formalCount == 0) return original;
+    if (formalCount == 0 && !force) return original;
 
     // Allocate fresh type variables
     var typeVars = <DartType>[];
diff --git a/pkg/analyzer/lib/src/fasta/resolution_storer.dart b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
index 9215502..397dc49 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_storer.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/src/fasta/resolution_applier.dart';
 import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart';
-import 'package:front_end/src/fasta/type_inference/interface_resolver.dart';
 import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/type_algebra.dart';
@@ -426,11 +425,9 @@
     _replaceType(invokeType, resultOffset);
 
     if (!isImplicitCall) {
-      if (interfaceMember is ForwardingStub) {
-        interfaceMember = ForwardingStub.getInterfaceTarget(interfaceMember);
-      }
+      interfaceMember = _getRealTarget(interfaceMember);
       _replaceReference(interfaceMember);
-      _replaceType(calleeType);
+      _replaceType(const NullType()); // callee type
     }
     super.genericExpressionExit("methodInvocation", expression, inferredType);
   }
@@ -456,7 +453,7 @@
 
     if (!isImplicitCall) {
       _replaceReference(const NullNode('explicit-call'));
-      _replaceType(const NullType());
+      _replaceType(const NullType()); // callee type
     }
     super.genericExpressionExit("methodInvocation", expression, inferredType);
   }
@@ -477,9 +474,7 @@
       DartType writeContext,
       Procedure combiner,
       DartType inferredType) {
-    if (writeMember is ForwardingStub) {
-      writeMember = ForwardingStub.getInterfaceTarget(writeMember);
-    }
+    writeMember = _getRealTarget(writeMember);
     _replaceReference(new MemberSetterNode(writeMember));
     _replaceType(writeContext);
     _recordReference(
@@ -609,7 +604,7 @@
         ? calleeType
         : substitution.substituteType(calleeType.withoutTypeParameters);
     _replaceType(invokeType);
-    _replaceType(calleeType);
+    _replaceType(const NullType()); // callee type
     super.genericExpressionExit("staticInvocation", expression, inferredType);
   }
 
@@ -739,6 +734,15 @@
     int slot = _deferredTypeSlots.removeLast();
     _types[slot] = type;
   }
+
+  /// If the [member] is a forwarding stub, return the target it forwards to.
+  /// Otherwise return the given [member].
+  static Member _getRealTarget(Member member) {
+    if (member is Procedure && member.isForwardingStub) {
+      return member.forwardingStubInterfaceTarget.node;
+    }
+    return member;
+  }
 }
 
 /// A [DartType] wrapper around invocation type arguments.
diff --git a/pkg/analyzer/lib/src/generated/declaration_resolver.dart b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
index a28b6ca..8b7ee76 100644
--- a/pkg/analyzer/lib/src/generated/declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
@@ -228,6 +228,7 @@
       for (EnumConstantDeclaration constant in node.constants) {
         _match(constant.name, _walker.getVariable());
       }
+      _walker.getFunction(); // toString()
       super.visitEnumDeclaration(node);
     });
     _resolveMetadata(node, node.metadata, element);
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 82b8ad0..b11e946 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -2992,6 +2992,12 @@
     //
     valuesField.evaluationResult = new EvaluationResultImpl(
         new DartObjectImpl(valuesField.type, new ListState(constantValues)));
+    // Update toString() return type.
+    {
+      MethodElementImpl toStringMethod = enumElement.methods[0];
+      toStringMethod.returnType = _typeProvider.stringType;
+      toStringMethod.type = new FunctionTypeImpl(toStringMethod);
+    }
     //
     // Finish building the enum.
     //
@@ -5676,7 +5682,7 @@
     DartType valueType;
     if (loopVariable != null) {
       TypeAnnotation typeAnnotation = loopVariable.type;
-      valueType = typeAnnotation?.type ?? typeProvider.dynamicType;
+      valueType = typeAnnotation?.type ?? UnknownInferredType.instance;
     }
     if (identifier != null) {
       Element element = identifier.staticElement;
diff --git a/pkg/analyzer/lib/src/generated/type_system.dart b/pkg/analyzer/lib/src/generated/type_system.dart
index 1e1b95b..e8b7614 100644
--- a/pkg/analyzer/lib/src/generated/type_system.dart
+++ b/pkg/analyzer/lib/src/generated/type_system.dart
@@ -38,6 +38,31 @@
       identical(t, UnknownInferredType.instance);
 }
 
+/**
+ * `void`, `dynamic`, and `Object` are all equivalent. However, this makes
+ * LUB/GLB indeterministic. Therefore, for the cases of LUB/GLB, we have some
+ * types which are more top than others.
+ *
+ * So, `void` < `Object` < `dynamic` for the purposes of LUB and GLB.
+ *
+ * This is expressed by their topiness (higher = more toppy).
+ */
+int _getTopiness(DartType t) {
+  assert(_isTop(t), 'only Top types have a topiness');
+
+  // Highest top
+  if (t.isDynamic) return 2;
+  if (t.isObject) return 1;
+  if (t.isDartAsyncFutureOr)
+    return -2 + _getTopiness((t as InterfaceType).typeArguments[0]);
+  // Lowest top
+
+  assert(false, 'a Top type without a defined topiness');
+
+  // Try to ensure that if this happens, its less toppy than an actual Top type.
+  return -100000;
+}
+
 typedef bool _GuardedSubtypeChecker<T>(T t1, T t2, Set<TypeImpl> visitedTypes);
 
 /**
@@ -148,6 +173,12 @@
       return type1;
     }
 
+    // If both are top, we have a preferred "greatest" top to return.
+    if (_isTop(type1, dynamicIsBottom: dynamicIsBottom) &&
+        _isTop(type2, dynamicIsBottom: dynamicIsBottom)) {
+      return _getTopiness(type1) > _getTopiness(type2) ? type1 : type2;
+    }
+
     // The GLB of top and any type is just that type.
     // Also GLB of bottom and any type is bottom.
     if (_isTop(type1, dynamicIsBottom: dynamicIsBottom) ||
@@ -1163,6 +1194,12 @@
       return type1;
     }
 
+    // If both are top, we have a preferred "least" top to return.
+    if (_isTop(type1, dynamicIsBottom: dynamicIsBottom) &&
+        _isTop(type2, dynamicIsBottom: dynamicIsBottom)) {
+      return _getTopiness(type1) < _getTopiness(type2) ? type1 : type2;
+    }
+
     // The least upper bound of top and any type T is top.
     // The least upper bound of bottom and any type T is T.
     if (_isTop(type1, dynamicIsBottom: dynamicIsBottom) ||
diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart
index f13233f..0ec4a47 100644
--- a/pkg/analyzer/lib/src/summary/format.dart
+++ b/pkg/analyzer/lib/src/summary/format.dart
@@ -2307,6 +2307,12 @@
       _implicitFunctionTypeIndices ??= <int>[];
 
   /**
+   * Notice: This will be deprecated. However, its not deprecated yet, as we're
+   * keeping it for backwards compatibilty, and marking it deprecated makes it
+   * unreadable.
+   *
+   * TODO(mfairhurst) mark this deprecated, and remove its logic.
+   *
    * If this is a reference to a function type implicitly defined by a
    * function-typed parameter, a list of zero-based indices indicating the path
    * from the entity referred to by [reference] to the appropriate type
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 5e21f11..8722ccc 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -1215,6 +1215,12 @@
   entityKind:EntityRefKind (id: 8);
 
   /**
+   * Notice: This will be deprecated. However, its not deprecated yet, as we're
+   * keeping it for backwards compatibilty, and marking it deprecated makes it
+   * unreadable.
+   *
+   * TODO(mfairhurst) mark this deprecated, and remove its logic.
+   *
    * If this is a reference to a function type implicitly defined by a
    * function-typed parameter, a list of zero-based indices indicating the path
    * from the entity referred to by [reference] to the appropriate type
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index b1f6330..b4ce55a 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -405,6 +405,12 @@
   EntityRefKind get entityKind;
 
   /**
+   * Notice: This will be deprecated. However, its not deprecated yet, as we're
+   * keeping it for backwards compatibilty, and marking it deprecated makes it
+   * unreadable.
+   *
+   * TODO(mfairhurst) mark this deprecated, and remove its logic.
+   *
    * If this is a reference to a function type implicitly defined by a
    * function-typed parameter, a list of zero-based indices indicating the path
    * from the entity referred to by [reference] to the appropriate type
diff --git a/pkg/analyzer/lib/src/summary/link.dart b/pkg/analyzer/lib/src/summary/link.dart
index 7cd78e7..5169d33 100644
--- a/pkg/analyzer/lib/src/summary/link.dart
+++ b/pkg/analyzer/lib/src/summary/link.dart
@@ -230,9 +230,8 @@
       return result;
     }
     if (element is GenericFunctionTypeElementForLink) {
-      // TODO(mfairhurst) update the typeParameterContext to be the current
-      // element. See test_constExpr_makeTypedList_functionType. This causes
-      // serious breakages elsewhere.
+      // Function types are their own type parameter context
+      typeParameterContext = element;
       result.entityKind = EntityRefKind.genericFunctionType;
       result.syntheticReturnType = _createLinkedType(
           type.returnType, compilationUnit, typeParameterContext);
@@ -251,6 +250,13 @@
   throw new UnimplementedError('${type.runtimeType}');
 }
 
+DartType _dynamicIfBottom(DartType type) {
+  if (type == null || type.isBottom) {
+    return DynamicTypeImpl.instance;
+  }
+  return type;
+}
+
 DartType _dynamicIfNull(DartType type) {
   if (type == null || type.isBottom || type.isDartCoreNull) {
     return DynamicTypeImpl.instance;
@@ -3267,7 +3273,7 @@
   void _setInferredType(DartType type) {
     // TODO(paulberry): store the inferred return type in the summary.
     assert(!_hasTypeBeenInferred);
-    _inferredReturnType = _dynamicIfNull(type);
+    _inferredReturnType = _dynamicIfBottom(type);
   }
 }
 
@@ -4371,6 +4377,9 @@
       !_unlinkedParam.isFunctionTyped && _unlinkedParam.type == null;
 
   @override
+  String get identifier => name;
+
+  @override
   bool get inheritsCovariant => _inheritsCovariant;
 
   @override
diff --git a/pkg/analyzer/lib/src/task/strong_mode.dart b/pkg/analyzer/lib/src/task/strong_mode.dart
index 45150a5..8873c01 100644
--- a/pkg/analyzer/lib/src/task/strong_mode.dart
+++ b/pkg/analyzer/lib/src/task/strong_mode.dart
@@ -169,7 +169,18 @@
           parameter, index, overriddenTypes[i].parameters);
       DartType type = matchingParameter?.type ?? typeProvider.dynamicType;
       if (parameterType == null) {
-        parameterType = type;
+        if (type is FunctionType &&
+            type.element is! TypeDefiningElement &&
+            type.element.enclosingElement is! TypeDefiningElement) {
+          // The resulting parameter's type element has an `enclosingElement` of
+          // the overridden parameter. Change it to the overriding parameter.
+          parameterType = new FunctionTypeImpl.fresh(type, force: true);
+          (parameterType.element as ElementImpl).enclosingElement = parameter;
+          // TODO(mfairhurst) handle cases where non-functions contain functions
+          // See test_inferredType_parameter_genericFunctionType_asTypeArgument
+        } else {
+          parameterType = type;
+        }
       } else if (parameterType != type) {
         if (parameter is ParameterElementForLink) {
           parameter.setInferenceError(new TopLevelInferenceErrorBuilder(
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 220cc65..cfb31c2 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -1070,11 +1070,14 @@
   }
 
   test_await_flattened() async {
+    // The analyzer type system over-flattens so it considers `await ffi()` to
+    // have type `int` - see dartbug.com/31887
+    var expectedType = enableKernelDriver ? 'Future<int>' : 'int';
     Source source = addSource('''
 import 'dart:async';
 Future<Future<int>> ffi() => null;
 f() async {
-  int b = await ffi();
+  $expectedType b = await ffi();
 }
 ''');
     await computeAnalysisResult(source);
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index 8d6d88d..b5f10f5 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -189,15 +189,6 @@
 
   @override
   @failingTest
-  void test_covariantConstructor() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.COVARIANT_CONSTRUCTOR, found 0;
-    // 0 errors of type ParserErrorCode.EXTRANEOUS_MODIFIER, found 1 (10)
-    super.test_covariantConstructor();
-  }
-
-  @override
-  @failingTest
   void test_duplicateLabelInSwitchStatement() {
     // TODO(brianwilkerson) Wrong errors:
     // Expected 1 errors of type ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT, found 0
@@ -260,19 +251,6 @@
 
   @override
   @failingTest
-  void test_expectedExecutable_topLevel_eof() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Expected CompilationUnit, but found [CompilationUnit, TopLevelMember]
-    //   package:test                                                       fail
-    //   test/generated/parser_fasta_listener.dart 50:7                     ForwardingTestListener.expectIn
-    //   test/generated/parser_fasta_listener.dart 1030:5                   ForwardingTestListener.endTopLevelDeclaration
-    //   package:front_end/src/fasta/parser/parser.dart 264:14              Parser.parseTopLevelDeclaration
-    //   test/generated/parser_fasta_test.dart 2851:22                      ParserProxy.parseTopLevelDeclaration
-    super.test_expectedExecutable_topLevel_eof();
-  }
-
-  @override
-  @failingTest
   void test_expectedInterpolationIdentifier() {
     // TODO(brianwilkerson) Does not recover.
     //   RangeError: Value not in range: -1
@@ -411,15 +389,6 @@
 
   @override
   @failingTest
-  void test_functionTypedParameter_const() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, found 0;
-    // 0 errors of type ParserErrorCode.EXTRANEOUS_MODIFIER, found 1 (8)
-    super.test_functionTypedParameter_const();
-  }
-
-  @override
-  @failingTest
   void test_functionTypedParameter_final() {
     // TODO(brianwilkerson) Wrong errors:
     // Expected 1 errors of type ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, found 0
@@ -1213,34 +1182,6 @@
 
   @override
   @failingTest
-  void test_missingNameInLibraryDirective() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE, found 0
-    super.test_missingNameInLibraryDirective();
-  }
-
-  @override
-  @failingTest
-  void test_missingNameInPartOfDirective() {
-    // TODO(brianwilkerson) Does not recover.
-    //   type 'KeywordToken' is not a subtype of type 'Comment' of 'comment' where
-    //   KeywordToken is from package:front_end/src/scanner/token.dart
-    //   Comment is from package:analyzer/dart/ast/ast.dart
-    //
-    //   package:analyzer/src/fasta/ast_builder.dart 1457:23                AstBuilder.endPartOf
-    //   package:front_end/src/fasta/parser/parser.dart 499:14              Parser.parsePartOf
-    //   package:front_end/src/fasta/parser/parser.dart 467:14              Parser.parsePartOrPartOf
-    //   package:front_end/src/fasta/parser/parser.dart 296:14              Parser._parseTopLevelDeclaration
-    //   package:front_end/src/fasta/parser/parser.dart 263:13              Parser.parseTopLevelDeclaration
-    //   package:front_end/src/fasta/parser/parser.dart 252:15              Parser.parseUnit
-    //   package:analyzer/src/generated/parser_fasta.dart 77:33             _Parser2.parseCompilationUnit2
-    //   package:analyzer/src/generated/parser_fasta.dart 72:12             _Parser2.parseCompilationUnit
-    //   test/generated/parser_fasta_test.dart 3016:35                      FastaParserTestCase.parseCompilationUnit
-    super.test_missingNameInPartOfDirective();
-  }
-
-  @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.
@@ -1401,30 +1342,6 @@
 
   @override
   @failingTest
-  void test_nonUserDefinableOperator() {
-    // TODO(brianwilkerson) Does not recover.
-    //   type 'SimpleIdentifierImpl' is not a subtype of type 'TypeAnnotation' of 'returnType' where
-    //   SimpleIdentifierImpl 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 3766:39                      ParserProxy._run
-    super.test_nonUserDefinableOperator();
-  }
-
-  void test_nonUserDefinableOperator_ignoreErrors() {
-    // TODO(danrubel): Remove this test
-    // once test_nonUserDefinableOperator passes.
-    createParser('operator +=(int x) => x + 1;');
-    ClassMember member = parser.parseClassMember('C');
-    expectNotNullIfNoErrors(member);
-  }
-
-  @override
-  @failingTest
   void test_parseCascadeSection_missingIdentifier() {
     // TODO(brianwilkerson) Testing at too low a level.
     super.test_parseCascadeSection_missingIdentifier();
@@ -1479,22 +1396,6 @@
 
   @override
   @failingTest
-  void test_staticGetterWithoutBody() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.STATIC_GETTER_WITHOUT_BODY, found 0
-    super.test_staticGetterWithoutBody();
-  }
-
-  @override
-  @failingTest
-  void test_staticSetterWithoutBody() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.STATIC_SETTER_WITHOUT_BODY, found 0
-    super.test_staticSetterWithoutBody();
-  }
-
-  @override
-  @failingTest
   void test_topLevelVariable_withMetadata() {
     // TODO(brianwilkerson) Wrong errors:
     // Expected 1 errors of type ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, found 0;
@@ -1527,14 +1428,6 @@
 
   @override
   @failingTest
-  void test_unexpectedTerminatorForParameterGroup_named() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, found 0
-    super.test_unexpectedTerminatorForParameterGroup_named();
-  }
-
-  @override
-  @failingTest
   void test_unexpectedToken_endOfFieldDeclarationStatement() {
     // TODO(brianwilkerson) Wrong errors:
     // Expected 1 errors of type ParserErrorCode.UNEXPECTED_TOKEN, found 0
@@ -1571,41 +1464,6 @@
   }
 
   @override
-  @failingTest
-  void test_unexpectedToken_semicolonBetweenClassMembers() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Expected ClassBody, but found [CompilationUnit, ClassOrNamedMixinApplication, ClassDeclaration, ClassBody, Member]
-    //   package:test                                                       fail
-    //   test/generated/parser_fasta_listener.dart 50:7                     ForwardingTestListener.expectIn
-    //   test/generated/parser_fasta_listener.dart 55:5                     ForwardingTestListener.end
-    //   test/generated/parser_fasta_listener.dart 615:5                    ForwardingTestListener.endClassBody
-    //   package:front_end/src/fasta/parser/parser.dart 2220:14             Parser.parseClassBody
-    //   package:front_end/src/fasta/parser/parser.dart 897:13              Parser.parseClass
-    //   package:front_end/src/fasta/parser/parser.dart 850:14              Parser.parseClassOrNamedMixinApplication
-    //   package:front_end/src/fasta/parser/parser.dart 283:14              Parser._parseTopLevelDeclaration
-    //   package:front_end/src/fasta/parser/parser.dart 263:13              Parser.parseTopLevelDeclaration
-    //   test/generated/parser_fasta_test.dart 3896:22                      ParserProxy.parseTopLevelDeclaration
-    super.test_unexpectedToken_semicolonBetweenClassMembers();
-  }
-
-  @override
-  @failingTest
-  void test_unexpectedToken_semicolonBetweenCompilationUnitMembers() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Internal problem: Compiler cannot run without a compiler context.
-    //   Tip: Are calls to the compiler wrapped in CompilerContext.runInContext?
-    //   package:front_end/src/fasta/compiler_context.dart 81:7             CompilerContext.current
-    //   package:front_end/src/fasta/problems.dart 29:25                    internalProblem
-    //   package:front_end/src/fasta/source/stack_listener.dart 148:7       StackListener.checkEmpty
-    //   package:analyzer/src/fasta/ast_builder.dart 1163:5                 AstBuilder.endCompilationUnit
-    //   package:front_end/src/fasta/parser/parser.dart 255:14              Parser.parseUnit
-    //   package:analyzer/src/generated/parser_fasta.dart 77:33             _Parser2.parseCompilationUnit2
-    //   package:analyzer/src/generated/parser_fasta.dart 72:12             _Parser2.parseCompilationUnit
-    //   test/generated/parser_fasta_test.dart 3371:35                      FastaParserTestCase.parseCompilationUnit
-    super.test_unexpectedToken_semicolonBetweenCompilationUnitMembers();
-  }
-
-  @override
   void test_varAndType_local() {
     // The inherited test is marked as failing.
     super.test_varAndType_local();
@@ -1618,14 +1476,6 @@
   }
 
   @override
-  @failingTest
-  void test_varAsTypeName_as() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.VAR_AS_TYPE_NAME, found 0
-    super.test_varAsTypeName_as();
-  }
-
-  @override
 //  @failingTest
   void test_voidVariable_parseClassMember_initializer() {
     // TODO(brianwilkerson) Passes, but ought to fail.
@@ -1680,24 +1530,6 @@
     // TODO(brianwilkerson) Passes, but ought to fail.
     super.test_voidVariable_statement_noInitializer();
   }
-
-  @override
-  @failingTest
-  void test_wrongTerminatorForParameterGroup_named() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, found 0;
-    // 1 errors of type ScannerErrorCode.EXPECTED_TOKEN, found 0
-    super.test_wrongTerminatorForParameterGroup_named();
-  }
-
-  @override
-  @failingTest
-  void test_wrongTerminatorForParameterGroup_optional() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, found 0;
-    // 1 errors of type ScannerErrorCode.EXPECTED_TOKEN, found 0
-    super.test_wrongTerminatorForParameterGroup_optional();
-  }
 }
 
 /**
@@ -2702,30 +2534,6 @@
 
   @override
   @failingTest
-  void test_keywordInPlaceOfIdentifier() {
-    // TODO(brianwilkerson) reportUnrecoverableErrorWithToken
-    super.test_keywordInPlaceOfIdentifier();
-  }
-
-  @override
-  @failingTest
-  void test_missingGet() {
-    // TODO(brianwilkerson) exception:
-    //   NoSuchMethodError: Class '_KernelLibraryBuilder' has no instance method 'addCompileTimeError'.
-    //   Receiver: Instance of '_KernelLibraryBuilder'
-    //   Tried calling: addCompileTimeError(Instance of 'Message', 17, Instance of '_Uri')
-    //   dart:core                                                          Object.noSuchMethod
-    //   package:analyzer/src/generated/parser_fasta.dart 20:60             _KernelLibraryBuilder.noSuchMethod
-    //   package:analyzer/src/fasta/ast_builder.dart 1956:13                AstBuilder.addCompileTimeError
-    //   package:front_end/src/fasta/source/stack_listener.dart 271:5       StackListener.handleRecoverableError
-    //   package:front_end/src/fasta/parser/parser.dart 4099:16             Parser.reportRecoverableErrorWithToken
-    //   package:front_end/src/fasta/parser/parser.dart 1744:7              Parser.checkFormals
-    //    package:front_end/src/fasta/parser/parser.dart 2406:5              Parser.parseMethod
-    super.test_missingGet();
-  }
-
-  @override
-  @failingTest
   void test_missingIdentifier_afterAnnotation() {
     // TODO(brianwilkerson) reportUnrecoverableErrorWithToken
     super.test_missingIdentifier_afterAnnotation();
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 5814a6f..e371ddd 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -2676,8 +2676,14 @@
     createParser('class C { covariant C(); }');
     ClassDeclaration member = parseFullCompilationUnitMember();
     expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.COVARIANT_CONSTRUCTOR, 10, 9)]);
+    listener.assertErrors([
+      expectedError(
+          usingFastaParser
+              ? ParserErrorCode.COVARIANT_MEMBER
+              : ParserErrorCode.COVARIANT_CONSTRUCTOR,
+          10,
+          9)
+    ]);
   }
 
   void test_covariantMember_getter_noReturnType() {
@@ -2964,8 +2970,12 @@
     createParser('x');
     CompilationUnitMember member = parseFullCompilationUnitMember();
     expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 1)]);
+    listener.assertErrors(usingFastaParser
+        ? [
+            expectedError(ParserErrorCode.MISSING_IDENTIFIER, 1, 0),
+            expectedError(ParserErrorCode.EXPECTED_TOKEN, 1, 0)
+          ]
+        : [expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 1)]);
   }
 
   void test_expectedInterpolationIdentifier() {
@@ -3117,6 +3127,26 @@
     ]);
   }
 
+  void test_exportAsType() {
+    parseCompilationUnit('export<dynamic> foo;',
+        errors: usingFastaParser
+            ? [
+                expectedError(
+                    CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, 0, 6)
+              ]
+            : []);
+  }
+
+  void test_exportAsType_inClass() {
+    parseCompilationUnit('class C { export<dynamic> foo; }',
+        errors: usingFastaParser
+            ? [
+                expectedError(
+                    CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, 10, 6)
+              ]
+            : []);
+  }
+
   void test_externalAfterConst() {
     createParser('const external C();');
     ClassMember member = parser.parseClassMember('C');
@@ -3403,6 +3433,16 @@
         errors: [expectedError(ParserErrorCode.FINAL_CLASS, 0, 5)]);
   }
 
+  void test_finalClassMember_modifierOnly() {
+    createParser('final');
+    ClassMember member = parser.parseClassMember('C');
+    expectNotNullIfNoErrors(member);
+    listener.assertErrors([
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 5, 0),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 5, 0)
+    ]);
+  }
+
   void test_finalConstructor() {
     createParser('final C() {}');
     ClassMember member = parser.parseClassMember('C');
@@ -3438,9 +3478,13 @@
   }
 
   void test_functionTypedParameter_const() {
-    parseCompilationUnit("void f(const x()) {}", errors: [
-      expectedError(ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, 7, 9)
-    ]);
+    parseCompilationUnit("void f(const x()) {}",
+        errors: usingFastaParser
+            ? [expectedError(ParserErrorCode.EXTRANEOUS_MODIFIER, 7, 5)]
+            : [
+                expectedError(
+                    ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, 7, 9)
+              ]);
   }
 
   void test_functionTypedParameter_final() {
@@ -4312,14 +4356,24 @@
 
   void test_missingNameInLibraryDirective() {
     CompilationUnit unit = parseCompilationUnit("library;", errors: [
-      expectedError(ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE, 7, 1)
+      expectedError(
+          usingFastaParser
+              ? ParserErrorCode.MISSING_IDENTIFIER
+              : ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE,
+          7,
+          1)
     ]);
     expect(unit, isNotNull);
   }
 
   void test_missingNameInPartOfDirective() {
     CompilationUnit unit = parseCompilationUnit("part of;", errors: [
-      expectedError(ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE, 7, 1)
+      expectedError(
+          usingFastaParser
+              ? ParserErrorCode.EXPECTED_STRING_LITERAL
+              : ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE,
+          7,
+          1)
     ]);
     expect(unit, isNotNull);
   }
@@ -4552,8 +4606,14 @@
     createParser('operator +=(int x) => x + 1;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.NON_USER_DEFINABLE_OPERATOR, 9, 2)]);
+    listener.assertErrors([
+      expectedError(
+          usingFastaParser
+              ? ParserErrorCode.INVALID_OPERATOR
+              : ParserErrorCode.NON_USER_DEFINABLE_OPERATOR,
+          9,
+          2)
+    ]);
   }
 
   void test_optionalAfterNormalParameters_named() {
@@ -4703,8 +4763,14 @@
     createParser('static get m;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.STATIC_GETTER_WITHOUT_BODY, 12, 1)]);
+    listener.assertErrors([
+      expectedError(
+          usingFastaParser
+              ? ParserErrorCode.MISSING_FUNCTION_BODY
+              : ParserErrorCode.STATIC_GETTER_WITHOUT_BODY,
+          12,
+          1)
+    ]);
   }
 
   void test_staticOperator_noReturnType() {
@@ -4727,8 +4793,14 @@
     createParser('static set m(x);');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.STATIC_SETTER_WITHOUT_BODY, 15, 1)]);
+    listener.assertErrors([
+      expectedError(
+          usingFastaParser
+              ? ParserErrorCode.MISSING_FUNCTION_BODY
+              : ParserErrorCode.STATIC_SETTER_WITHOUT_BODY,
+          15,
+          1)
+    ]);
   }
 
   void test_staticTopLevelDeclaration_class() {
@@ -4988,7 +5060,11 @@
     expectNotNullIfNoErrors(list);
     listener.assertErrors([
       expectedError(
-          ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, 5, 1)
+          usingFastaParser
+              ? ParserErrorCode.EXPECTED_TOKEN
+              : ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP,
+          5,
+          1)
     ]);
   }
 
@@ -5027,13 +5103,25 @@
     createParser('class C { int x; ; int y;}');
     ClassDeclaration declaration = parseFullCompilationUnitMember();
     expectNotNullIfNoErrors(declaration);
-    listener
-        .assertErrors([expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 17, 1)]);
+    listener.assertErrors([
+      expectedError(
+          usingFastaParser
+              ? ParserErrorCode.EXPECTED_CLASS_MEMBER
+              : ParserErrorCode.UNEXPECTED_TOKEN,
+          17,
+          1)
+    ]);
   }
 
   void test_unexpectedToken_semicolonBetweenCompilationUnitMembers() {
-    parseCompilationUnit("int x; ; int y;",
-        errors: [expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 7, 1)]);
+    parseCompilationUnit("int x; ; int y;", errors: [
+      expectedError(
+          usingFastaParser
+              ? ParserErrorCode.EXPECTED_EXECUTABLE
+              : ParserErrorCode.UNEXPECTED_TOKEN,
+          7,
+          1)
+    ]);
   }
 
   void test_unterminatedString_at_eof() {
@@ -5179,7 +5267,9 @@
 
   void test_varAsTypeName_as() {
     parseExpression("x as var",
-        errors: [expectedError(ParserErrorCode.VAR_AS_TYPE_NAME, 7, 3)]);
+        errors: usingFastaParser
+            ? [expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 5, 3)]
+            : [expectedError(ParserErrorCode.VAR_AS_TYPE_NAME, 7, 3)]);
   }
 
   void test_varClass() {
@@ -5291,16 +5381,16 @@
     createParser('(a, {b, c])');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    if (fe.Scanner.useFasta) {
-      listener.assertErrors([
-        // fasta scanner generates '(a, {b, c]})' where '}' is synthetic
-        expectedError(
-            ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, 9, 1),
-        expectedError(ScannerErrorCode.EXPECTED_TOKEN, 9, 1),
-      ]);
+    // fasta scanner generates '(a, {b, c]})' where '}' is synthetic
+    if (usingFastaParser) {
+      listener
+          .assertErrors([expectedError(ParserErrorCode.EXPECTED_TOKEN, 9, 1)]);
     } else {
-      listener.assertErrorsWithCodes(
-          [ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP]);
+      listener.assertErrors([
+        expectedError(ScannerErrorCode.EXPECTED_TOKEN, 9, 1),
+        expectedError(
+            ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, 9, 1)
+      ]);
     }
   }
 
@@ -5308,16 +5398,16 @@
     createParser('(a, [b, c})');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    if (usingFastaScanner) {
-      listener.assertErrors([
-        // fasta scanner generates '(a, [b, c}])' where ']' is synthetic
-        expectedError(
-            ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, 9, 1),
-        expectedError(ScannerErrorCode.EXPECTED_TOKEN, 9, 1),
-      ]);
+    // fasta scanner generates '(a, [b, c}])' where ']' is synthetic
+    if (usingFastaParser) {
+      listener
+          .assertErrors([expectedError(ParserErrorCode.EXPECTED_TOKEN, 9, 1)]);
     } else {
-      listener.assertErrorsWithCodes(
-          [ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP]);
+      listener.assertErrors([
+        expectedError(ScannerErrorCode.EXPECTED_TOKEN, 4, 1),
+        expectedError(
+            ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, 10, 1)
+      ]);
     }
   }
 }
@@ -10877,10 +10967,13 @@
 
   void test_keywordInPlaceOfIdentifier() {
     // TODO(brianwilkerson) We could do better with this.
-    parseCompilationUnit("do() {}", codes: [
-      ParserErrorCode.EXPECTED_EXECUTABLE,
-      ParserErrorCode.UNEXPECTED_TOKEN
-    ]);
+    parseCompilationUnit("do() {}",
+        codes: usingFastaParser
+            ? [ParserErrorCode.MISSING_IDENTIFIER]
+            : [
+                ParserErrorCode.EXPECTED_EXECUTABLE,
+                ParserErrorCode.UNEXPECTED_TOKEN
+              ]);
   }
 
   void test_logicalAndExpression_missing_LHS() {
@@ -11007,7 +11100,14 @@
 class C {
   int length {}
   void foo() {}
-}''', errors: [expectedError(ParserErrorCode.MISSING_GET, 16, 6)]);
+}''', errors: [
+      expectedError(
+          usingFastaParser
+              ? ParserErrorCode.MISSING_METHOD_PARAMETERS
+              : ParserErrorCode.MISSING_GET,
+          16,
+          6)
+    ]);
     expect(unit, isNotNull);
     ClassDeclaration classDeclaration =
         unit.declarations[0] as ClassDeclaration;
@@ -11056,7 +11156,7 @@
     // would be to insert a synthetic comma after the `n`.
     CompilationUnit unit = parseCompilationUnit('String n x = "";',
         codes: usingFastaParser
-            ? [ParserErrorCode.EXTRANEOUS_MODIFIER]
+            ? [ParserErrorCode.UNEXPECTED_TOKEN]
             : [
                 ParserErrorCode.EXPECTED_TOKEN,
                 ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE
@@ -11065,7 +11165,7 @@
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     if (usingFastaParser) {
       expect(declarations, hasLength(1));
-      verify(declarations[0], 'String', 'x', ';');
+      verify(declarations[0], 'n', 'x', ';');
     } else {
       expect(declarations, hasLength(2));
       verify(declarations[0], 'String', 'n', '');
@@ -11157,9 +11257,10 @@
             ? [
                 expectedError(ParserErrorCode.EXPECTED_STRING_LITERAL, 7, 4),
                 expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 4),
+                expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 7, 4),
+                expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 11, 1),
                 expectedError(
-                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 7, 4),
-                expectedError(ParserErrorCode.EXTRANEOUS_MODIFIER, 7, 4)
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 12, 2)
               ]
             : [expectedError(ParserErrorCode.NON_STRING_LITERAL_AS_URI, 7, 4)]);
   }
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
index 8b0473c..2e1a353 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
@@ -143,13 +143,14 @@
   }
 
   test_await_flattened() async {
+    // The analyzer type system over-flattens - see dartbug.com/31887
     await assertErrorsInCode('''
 import 'dart:async';
 Future<Future<int>> ffi() => null;
 f() async {
   Future<int> b = await ffi(); // Warning: int not assignable to Future<int>
 }
-''', [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
+''', useCFE ? [] : [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
   }
 
   test_await_simple() async {
diff --git a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
index 2c48053..2d3a194 100644
--- a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
@@ -379,13 +379,6 @@
 
   @override
   @failingTest
-  test_implicitBounds() async {
-    // Expected: 'B<num>'
-    await super.test_implicitBounds();
-  }
-
-  @override
-  @failingTest
   @potentialAnalyzerProblem
   test_instantiateToBounds_class_error_recursion() async {
     return super.test_instantiateToBounds_class_error_recursion();
@@ -393,13 +386,6 @@
 
   @override
   @failingTest
-  test_instantiateToBounds_class_ok_simpleBounds() async {
-    // Expected: 'B<num>'
-    await super.test_instantiateToBounds_class_ok_simpleBounds();
-  }
-
-  @override
-  @failingTest
   test_notInstantiatedBound_direct_class_class() async {
     // Expected 1 errors of type StrongModeCode.STRONG_MODE_NOT_INSTANTIATED_BOUND, found 0
     await super.test_notInstantiatedBound_direct_class_class();
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index b766357..7e1db80 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -4312,4 +4312,26 @@
     assertPropagatedAssignedType(code, unit, typeProvider.intType, null);
     assertTypeOfMarkedExpression(code, unit, typeProvider.intType, null);
   }
+
+  test_inconsistentMethodInheritance_inferFunctionTypeFromTypedef() async {
+    Source source = addSource(r'''
+typedef bool F<E>(E argument);
+
+abstract class Base {
+  f<E extends int>(F<int> x);
+}
+
+abstract class BaseCopy extends Base {
+}
+
+abstract class Override implements Base, BaseCopy {
+  f<E>(x) => null;
+}
+
+class C extends Override implements Base {}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
 }
diff --git a/pkg/analyzer/test/generated/type_system_test.dart b/pkg/analyzer/test/generated/type_system_test.dart
index acd2708..ef803c9 100644
--- a/pkg/analyzer/test/generated/type_system_test.dart
+++ b/pkg/analyzer/test/generated/type_system_test.dart
@@ -55,6 +55,7 @@
   InterfaceType get numType => typeProvider.numType;
   InterfaceType get objectType => typeProvider.objectType;
   InterfaceType get stringType => typeProvider.stringType;
+  InterfaceType get futureOrType => typeProvider.futureOrType;
   StrongTypeSystemImpl get strongTypeSystem =>
       typeSystem as StrongTypeSystemImpl;
 
@@ -1237,6 +1238,60 @@
     _checkGreatestLowerBound(dynamicType, voidType, voidType);
   }
 
+  void test_bounds_of_top_types_sanity() {
+    final futureOrDynamicType = futureOrType.instantiate([dynamicType]);
+    final futureOrFutureOrDynamicType =
+        futureOrType.instantiate([futureOrDynamicType]);
+
+    // Sanity check specific cases of top for GLB/LUB.
+    _checkGreatestLowerBound(objectType, dynamicType, dynamicType);
+    _checkLeastUpperBound(objectType, dynamicType, objectType);
+    _checkGreatestLowerBound(futureOrDynamicType, dynamicType, dynamicType);
+    _checkLeastUpperBound(futureOrDynamicType, objectType, futureOrDynamicType);
+    _checkLeastUpperBound(futureOrDynamicType, futureOrFutureOrDynamicType,
+        futureOrFutureOrDynamicType);
+  }
+
+  void test_bounds_of_top_types_complete() {
+    // Test every combination of a subset of Tops programatically.
+    final futureOrDynamicType = futureOrType.instantiate([dynamicType]);
+    final futureOrObjectType = futureOrType.instantiate([objectType]);
+    final futureOrFutureOrDynamicType =
+        futureOrType.instantiate([futureOrDynamicType]);
+    final futureOrFutureOrObjectType =
+        futureOrType.instantiate([futureOrObjectType]);
+
+    final orderedTops = [
+      // Lower index, so lower Top
+      futureOrFutureOrObjectType,
+      futureOrFutureOrDynamicType,
+      futureOrObjectType,
+      futureOrDynamicType,
+      objectType,
+      dynamicType,
+      // Higher index, higher Top
+    ];
+
+    // We could sort and check the sort result is correct in O(n log n), but a
+    // good sorting algorithm would only run n tests here (that each value is
+    // correct relative to its nearest neighbors). But O(n^2) for n=6 is stupid
+    // fast, in this case, so just do the brute force check because we can.
+    for (var i = 0; i < orderedTops.length; ++i) {
+      for (var lower = 0; lower <= i; ++lower) {
+        _checkGreatestLowerBound(
+            orderedTops[i], orderedTops[lower], orderedTops[i]);
+        _checkLeastUpperBound(
+            orderedTops[i], orderedTops[lower], orderedTops[lower]);
+      }
+      for (var greater = i; greater < orderedTops.length; ++greater) {
+        _checkGreatestLowerBound(
+            orderedTops[i], orderedTops[greater], orderedTops[greater]);
+        _checkLeastUpperBound(
+            orderedTops[i], orderedTops[greater], orderedTops[i]);
+      }
+    }
+  }
+
   void test_functionsDifferentNamedTakeUnion() {
     FunctionType type1 = _functionType([], named: {'a': intType, 'b': intType});
     FunctionType type2 =
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 95a3cb0..15773b5 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -1677,6 +1677,29 @@
     }
   }
 
+  test_enum_toString() async {
+    addTestFile(r'''
+enum MyEnum { A, B, C }
+main(MyEnum e) {
+  e.toString();
+}
+''');
+    AnalysisResult result = await driver.getResult(testFile);
+
+    EnumDeclaration enumNode = result.unit.declarations[0];
+    ClassElement enumElement = enumNode.element;
+
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    ExpressionStatement statement = mainStatements[0];
+    MethodInvocation invocation = statement.expression;
+    expect(invocation.staticInvokeType.toString(), '() → String');
+
+    MethodElement methodElement = invocation.methodName.staticElement;
+    expect(methodElement.name, 'toString');
+    expect(methodElement.enclosingElement, same(enumElement));
+  }
+
   test_error_unresolvedTypeAnnotation() async {
     String content = r'''
 main() {
@@ -1863,6 +1886,32 @@
     expect(parameterNode.identifier.staticType, typeProvider.intType);
   }
 
+  test_forwardingStub_class() async {
+    addTestFile(r'''
+class A<T> {
+  void m(T t) {}
+}
+class B extends A<int> {}
+main(B b) {
+  b.m(1);
+}
+''');
+    AnalysisResult result = await driver.getResult(testFile);
+
+    ClassDeclaration aNode = result.unit.declarations[0];
+    ClassElement eElement = aNode.element;
+    MethodElement mElement = eElement.getMethod('m');
+
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    ExpressionStatement statement = mainStatements[0];
+    MethodInvocation invocation = statement.expression;
+    expect(invocation.staticInvokeType.toString(), '(int) → void');
+    if (useCFE) {
+      expect(invocation.methodName.staticElement, same(mElement));
+    }
+  }
+
   test_functionExpressionInvocation() async {
     addTestFile(r'''
 typedef Foo<S> = S Function<T>(T x);
diff --git a/pkg/analyzer/test/src/summary/linker_test.dart b/pkg/analyzer/test/src/summary/linker_test.dart
index 212781c..f01caa2 100644
--- a/pkg/analyzer/test/src/summary/linker_test.dart
+++ b/pkg/analyzer/test/src/summary/linker_test.dart
@@ -467,6 +467,33 @@
     expect(fType.parameters[0].type.toString(), 'int');
   }
 
+  @failingTest
+  void test_inferredType_parameter_genericFunctionType_asTypeArgument() {
+    var bundle = createPackageBundle('''
+class A<T> {
+  A<R> map<R>(List<R Function(T)> fs) => null;
+}
+''', path: '/a.dart');
+    addBundle('/a.ds', bundle);
+    createLinker('''
+import 'a.dart';
+class C extends A<int> {
+  map<R2>(fs) => null;
+}
+''');
+    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    library.libraryCycleForLink.ensureLinked();
+    ClassElementForLink_Class c = library.getContainedName('C');
+    expect(c.methods, hasLength(1));
+    MethodElementForLink map = c.methods[0];
+    expect(map.parameters, hasLength(1));
+    InterfaceType iType = map.parameters[0].type;
+    expect(iType.typeArguments, hasLength(1));
+    FunctionType fType = iType.typeArguments[0];
+    expect(fType.returnType.toString(), 'R2');
+    expect(fType.parameters[0].type.toString(), 'int');
+  }
+
   void test_inferredType_staticField_dynamic() {
     createLinker('''
 dynamic x = null;
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 742fcbe..58cc888 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -3746,6 +3746,7 @@
   static const E a;
   static const E b;
   static const E c;
+  String toString() {}
 }
 class C {
 }
@@ -3775,6 +3776,7 @@
   static const E a;
   static const E b;
   static const E c;
+  String toString() {}
 }
 class C {
 }
@@ -4407,6 +4409,7 @@
   static const E a;
   static const E b;
   static const E c;
+  String toString() {}
 }
 final E vValue;
 final List<E> vValues;
@@ -4420,6 +4423,7 @@
   static const E a;
   static const E b;
   static const E c;
+  String toString() {}
 }
 final dynamic vValue;
 final dynamic vValues;
@@ -4439,6 +4443,7 @@
   synthetic final int index;
   synthetic static const List<E> values;
   static const E a;
+  String toString() {}
 }
 final String vToString;
 ''');
@@ -4448,6 +4453,7 @@
   synthetic final int index;
   synthetic static const List<E> values;
   static const E a;
+  String toString() {}
 }
 final dynamic vToString;
 ''');
@@ -5377,6 +5383,7 @@
   synthetic final int index;
   synthetic static const List<E> values;
   static const E v;
+  String toString() {}
 }
 ''');
   }
@@ -5401,6 +5408,7 @@
   static const E a;
   /// bbb
   static const E b;
+  String toString() {}
 }
 ''');
   }
@@ -5413,6 +5421,7 @@
   synthetic static const List<E> values;
   static const E v1;
   static const E v2;
+  String toString() {}
 }
 ''');
   }
@@ -5424,11 +5433,13 @@
   synthetic final int index;
   synthetic static const List<E1> values;
   static const E1 v1;
+  String toString() {}
 }
 enum E2 {
   synthetic final int index;
   synthetic static const List<E2> values;
   static const E2 v2;
+  String toString() {}
 }
 ''');
   }
@@ -5460,6 +5471,7 @@
   static const E a;
   static const E b;
   static const E c;
+  String toString() {}
 }
 class M {
 }
@@ -7045,10 +7057,18 @@
 var v = (Future<Future<Future<int>>> f) async => await f;
 ''');
     if (isStrongMode) {
-      checkElementText(library, r'''
+      if (isSharedFrontEnd) {
+        checkElementText(library, r'''
+import 'dart:async';
+(Future<Future<Future<int>>>) → Future<Future<int>> v;
+''');
+      } else {
+        // The analyzer type system over-flattens - see dartbug.com/31887
+        checkElementText(library, r'''
 import 'dart:async';
 (Future<Future<Future<int>>>) → Future<int> v;
 ''');
+      }
     } else {
       checkElementText(library, r'''
 import 'dart:async';
@@ -7873,6 +7893,7 @@
   synthetic final int index;
   synthetic static const List<E> values;
   static const E v;
+  String toString() {}
 }
 const dynamic a = null;
 ''');
@@ -9116,6 +9137,7 @@
   synthetic final int index;
   synthetic static const List<E> values;
   static const E v;
+  String toString() {}
 }
 class C {
 }
@@ -9143,6 +9165,7 @@
   synthetic final int index;
   synthetic static const List<E> values;
   static const E v;
+  String toString() {}
 }
 class C {
 }
@@ -9161,6 +9184,7 @@
   synthetic final int index;
   synthetic static const List<E> values;
   static const E v;
+  String toString() {}
 }
 class C {
 }
@@ -9190,6 +9214,7 @@
   synthetic final int index;
   synthetic static const List<E> values;
   static const E v;
+  String toString() {}
 }
 class C {
 }
@@ -9217,6 +9242,7 @@
   synthetic final int index;
   synthetic static const List<E> values;
   static const E v;
+  String toString() {}
 }
 class C {
 }
@@ -9260,6 +9286,7 @@
   synthetic final int index;
   synthetic static const List<E> values;
   static const E v;
+  String toString() {}
 }
 E e;
 ''');
diff --git a/pkg/analyzer/test/src/summary/summary_common.dart b/pkg/analyzer/test/src/summary/summary_common.dart
index 7581f8e..ab0b33b 100644
--- a/pkg/analyzer/test/src/summary/summary_common.dart
+++ b/pkg/analyzer/test/src/summary/summary_common.dart
@@ -16,7 +16,6 @@
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/public_namespace_computer.dart'
     as public_namespace;
-import 'package:test_reflective_loader/test_reflective_loader.dart';
 import 'package:path/path.dart' show posix;
 import 'package:test/test.dart';
 
@@ -549,6 +548,7 @@
       List<_PrefixExpectation> prefixExpectations,
       int numTypeArguments: 0,
       ReferenceKind expectedKind: ReferenceKind.classOrEnum,
+      EntityRefKind entityKind: null,
       int expectedTargetUnit: 0,
       LinkedUnit linkedSourceUnit,
       UnlinkedUnit unlinkedSourceUnit,
@@ -559,6 +559,12 @@
     expect(typeRef.paramReference, 0);
     int index = typeRef.reference;
     expect(typeRef.typeArguments, hasLength(numTypeArguments));
+
+    if (entityKind == EntityRefKind.genericFunctionType) {
+      // [GenericFunctionType]s don't have references to check.
+      return;
+    }
+
     UnlinkedReference reference = checkReferenceIndex(
         index, absoluteUri, expectedName,
         expectedKind: expectedKind,
@@ -1506,9 +1512,9 @@
       closure = executable.localFunctions[0];
     }
     if (strongMode) {
-      // Strong mode infers a type for the closure of `() => dynamic`, so the
-      // inferred return type slot should be empty.
-      expect(getTypeRefForSlot(closure.inferredReturnTypeSlot), isNull);
+      // Strong mode infers a type for the closure of `() => Null`.
+      checkInferredTypeSlot(
+          closure.inferredReturnTypeSlot, 'dart:core', 'Null');
     } else {
       // Spec mode infers a type for the closure of `() => Bottom`.
       checkInferredTypeSlot(closure.inferredReturnTypeSlot, null, '*bottom*',
@@ -2663,7 +2669,6 @@
     ]);
   }
 
-  @failingTest
   test_constExpr_makeTypedList_functionType_withTypeParameters() {
     UnlinkedVariable variable = serializeVariableText(
         'final v = <void Function<T>(Function<Q>(T, Q))>[];');
@@ -2682,13 +2687,13 @@
           expect(param.type.entityKind, EntityRefKind.genericFunctionType);
           expect(param.type.syntheticParams, hasLength(2));
           {
-            final subparam = reference.syntheticParams[0];
+            final subparam = param.type.syntheticParams[0];
             expect(subparam.name, ''); // no name for generic type parameters
             expect(subparam.type, new isInstanceOf<EntityRef>());
             expect(subparam.type.paramReference, 2);
           }
           {
-            final subparam = reference.syntheticParams[1];
+            final subparam = param.type.syntheticParams[1];
             expect(subparam.name, ''); // no name for generic type parameters
             expect(subparam.type, new isInstanceOf<EntityRef>());
             expect(subparam.type.paramReference, 1);
@@ -7989,10 +7994,6 @@
     if (!strongMode || skipFullyLinkedData) {
       return;
     }
-    // The type that is inferred for C.f's parameter g is "() -> void".
-    // Since the associated element for that function type is B.f's parameter g,
-    // and B has a type parameter, the inferred type will record a type
-    // parameter.
     UnlinkedClass c = serializeClassText('''
 abstract class B<T> {
   void f(void g());
@@ -8007,9 +8008,14 @@
     UnlinkedParam g = f.parameters[0];
     expect(g.name, 'g');
     EntityRef typeRef = getTypeRefForSlot(g.inferredTypeSlot);
-    checkLinkedTypeRef(typeRef, null, 'f',
-        expectedKind: ReferenceKind.method, numTypeArguments: 1);
-    checkParamTypeRef(typeRef.typeArguments[0], 1);
+
+    // The type that is inferred for C.f's parameter g is "() -> void".
+    // Therefore it has no type arguments. However, the associated element for
+    // that function type is B.f's parameter g, and B has a type parameter, so
+    // the inferred type *may* safely record that T as a type parameter, in
+    // which case this assertion can be altered accordingly.
+    checkTypeRef(typeRef, null, 'f',
+        numTypeArguments: 0, entityKind: EntityRefKind.genericFunctionType);
   }
 
   test_inferred_type_keeps_leading_dynamic() {
@@ -8071,7 +8077,7 @@
     expect(y.name, 'y');
     EntityRef typeRef = getTypeRefForSlot(y.inferredTypeSlot);
     checkLinkedTypeRef(typeRef, null, 'F', expectedKind: ReferenceKind.typedef);
-    expect(typeRef.implicitFunctionTypeIndices, [0]);
+    expect(typeRef.implicitFunctionTypeIndices, isEmpty);
   }
 
   test_inferred_type_refers_to_function_typed_parameter_type_generic_class() {
@@ -8086,24 +8092,15 @@
         getTypeRefForSlot(cls.executables[0].parameters[1].inferredTypeSlot);
     // Check that parameter g's inferred type is the type implied by D.f's 1st
     // (zero-based) parameter.
-    expect(type.implicitFunctionTypeIndices, [1]);
+    expect(type.implicitFunctionTypeIndices, isEmpty);
     expect(type.paramReference, 0);
-    expect(type.typeArguments, hasLength(2));
-    checkParamTypeRef(type.typeArguments[0], 1);
-    checkTypeRef(type.typeArguments[1], 'dart:core', 'int');
-    expect(type.reference,
-        greaterThanOrEqualTo(unlinkedUnits[0].references.length));
-    LinkedReference linkedReference =
-        linked.units[0].references[type.reference];
-    expect(linkedReference.dependency, 0);
-    expect(linkedReference.kind, ReferenceKind.method);
-    expect(linkedReference.name, 'f');
-    expect(linkedReference.numTypeParameters, 0);
-    expect(linkedReference.unit, 0);
-    expect(linkedReference.containingReference, isNot(0));
-    expect(linkedReference.containingReference, lessThan(type.reference));
-    checkReferenceIndex(linkedReference.containingReference, null, 'D',
-        numTypeParameters: 2);
+    // Note: this *may* legally have two type arguments (V, W), but for the
+    // moment does not in practice, so we assert isEmpty.
+    expect(type.typeArguments, isEmpty);
+    expect(type.entityKind, EntityRefKind.syntheticFunction);
+    expect(type.syntheticParams, hasLength(1));
+    checkParamTypeRef(type.syntheticParams[0].type, 1);
+    checkLinkedTypeRef(type.syntheticReturnType, 'dart:core', 'int');
   }
 
   test_inferred_type_refers_to_function_typed_parameter_type_other_lib() {
@@ -8117,24 +8114,15 @@
         'import "a.dart"; class C extends D { void f(int x, g) {} }');
     EntityRef type =
         getTypeRefForSlot(cls.executables[0].parameters[1].inferredTypeSlot);
-    // Check that parameter g's inferred type is the type implied by D.f's 1st
-    // (zero-based) parameter.
-    expect(type.implicitFunctionTypeIndices, [1]);
+    expect(type.implicitFunctionTypeIndices, isEmpty);
     expect(type.paramReference, 0);
+    // Note: this *may* legally have two type arguments (V, W), but for the
+    // moment does not in practice, so we assert isEmpty.
     expect(type.typeArguments, isEmpty);
-    expect(type.reference,
-        greaterThanOrEqualTo(unlinkedUnits[0].references.length));
-    LinkedReference linkedReference =
-        linked.units[0].references[type.reference];
-    expect(linkedReference.dependency, 0);
-    expect(linkedReference.kind, ReferenceKind.method);
-    expect(linkedReference.name, 'f');
-    expect(linkedReference.numTypeParameters, 0);
-    expect(linkedReference.unit, 0);
-    expect(linkedReference.containingReference, isNot(0));
-    expect(linkedReference.containingReference, lessThan(type.reference));
-    checkReferenceIndex(
-        linkedReference.containingReference, absUri('/b.dart'), 'E');
+    expect(type.entityKind, EntityRefKind.syntheticFunction);
+    expect(type.syntheticParams, hasLength(1));
+    checkLinkedTypeRef(type.syntheticReturnType, 'dart:core', 'int');
+    checkLinkedTypeRef(type.syntheticParams[0].type, 'dart:core', 'String');
   }
 
   test_inferred_type_refers_to_method_function_typed_parameter_type() {
@@ -8147,23 +8135,16 @@
         className: 'C');
     EntityRef type =
         getTypeRefForSlot(cls.executables[0].parameters[1].inferredTypeSlot);
-    // Check that parameter g's inferred type is the type implied by D.f's 1st
-    // (zero-based) parameter.
-    expect(type.implicitFunctionTypeIndices, [1]);
+
+    expect(type.implicitFunctionTypeIndices, isEmpty);
     expect(type.paramReference, 0);
+    // Note: this *may* legally have two type arguments (V, W), but for the
+    // moment does not in practice, so we assert isEmpty.
     expect(type.typeArguments, isEmpty);
-    expect(type.reference,
-        greaterThanOrEqualTo(unlinkedUnits[0].references.length));
-    LinkedReference linkedReference =
-        linked.units[0].references[type.reference];
-    expect(linkedReference.dependency, 0);
-    expect(linkedReference.kind, ReferenceKind.method);
-    expect(linkedReference.name, 'f');
-    expect(linkedReference.numTypeParameters, 0);
-    expect(linkedReference.unit, 0);
-    expect(linkedReference.containingReference, isNot(0));
-    expect(linkedReference.containingReference, lessThan(type.reference));
-    checkReferenceIndex(linkedReference.containingReference, null, 'D');
+    expect(type.entityKind, EntityRefKind.syntheticFunction);
+    expect(type.syntheticParams, hasLength(1));
+    checkLinkedTypeRef(type.syntheticReturnType, 'dart:core', 'int');
+    checkLinkedTypeRef(type.syntheticParams[0].type, 'dart:core', 'String');
   }
 
   test_inferred_type_refers_to_nested_function_typed_param() {
diff --git a/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart b/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
index 4f208e9..3969217 100644
--- a/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
+++ b/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
@@ -575,7 +575,44 @@
     _assertTypeAnnotations(code, unit);
   }
 
-  test_forIn() async {
+  test_forIn_identifier() async {
+    var code = r'''
+T f<T>() => null;
+
+class A {}
+
+A aTopLevel;
+void set aTopLevelSetter(A value) {}
+
+class C {
+  A aField;
+  void set aSetter(A value) {}
+  void test() {
+    A aLocal;
+    for (aLocal in f()) {} // local
+    for (aField in f()) {} // field
+    for (aSetter in f()) {} // setter
+    for (aTopLevel in f()) {} // top variable
+    for (aTopLevelSetter in f()) {} // top setter
+  }
+}''';
+    var source = addSource(code);
+    var analysisResult = await computeAnalysisResult(source);
+    var unit = analysisResult.unit;
+
+    void assertType(String prefix) {
+      var invocation = _findMethodInvocation(unit, code, prefix);
+      expect(invocation.staticType.toString(), 'Iterable<A>');
+    }
+
+    assertType('f()) {} // local');
+    assertType('f()) {} // field');
+    assertType('f()) {} // setter');
+    assertType('f()) {} // top variable');
+    assertType('f()) {} // top setter');
+  }
+
+  test_forIn_variable() async {
     var code = r'''
 T f<T>() => null;
 
@@ -618,41 +655,39 @@
     }
   }
 
-  test_forIn_identifier() async {
+  test_forIn_variable_implicitlyTyped() async {
     var code = r'''
-T f<T>() => null;
-
 class A {}
+class B extends A {}
 
-A aTopLevel;
-void set aTopLevelSetter(A value) {}
+List<T> f<T extends A>(List<T> items) => items;
 
-class C {
-  A aField;
-  void set aSetter(A value) {}
-  void test() {
-    A aLocal;
-    for (aLocal in f()) {} // local
-    for (aField in f()) {} // field
-    for (aSetter in f()) {} // setter
-    for (aTopLevel in f()) {} // top variable
-    for (aTopLevelSetter in f()) {} // top setter
-  }
-}''';
+void test(List<A> listA, List<B> listB) {
+  for (var a1 in f(listA)) {} // 1
+  for (A a2 in f(listA)) {} // 2
+  for (var b1 in f(listB)) {} // 3
+  for (A b2 in f(listB)) {} // 4
+  for (B b3 in f(listB)) {} // 5
+}
+''';
     var source = addSource(code);
     var analysisResult = await computeAnalysisResult(source);
     var unit = analysisResult.unit;
 
-    void assertType(String prefix) {
-      var invocation = _findMethodInvocation(unit, code, prefix);
-      expect(invocation.staticType.toString(), 'Iterable<A>');
+    void assertTypes(
+        String vSearch, String vType, String fSearch, String fType) {
+      var node = EngineTestCase.findSimpleIdentifier(unit, code, vSearch);
+      expect(node.staticType.toString(), vType);
+
+      var invocation = _findMethodInvocation(unit, code, fSearch);
+      expect(invocation.staticType.toString(), fType);
     }
 
-    assertType('f()) {} // local');
-    assertType('f()) {} // field');
-    assertType('f()) {} // setter');
-    assertType('f()) {} // top variable');
-    assertType('f()) {} // top setter');
+    assertTypes('a1 in', 'A', 'f(listA)) {} // 1', 'List<A>');
+    assertTypes('a2 in', 'A', 'f(listA)) {} // 2', 'List<A>');
+    assertTypes('b1 in', 'B', 'f(listB)) {} // 3', 'List<B>');
+    assertTypes('b2 in', 'A', 'f(listB)) {} // 4', 'List<A>');
+    assertTypes('b3 in', 'B', 'f(listB)) {} // 5', 'List<B>');
   }
 
   test_implicitVoidReturnType_default() async {
diff --git a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
index c5187b2..506f323 100644
--- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
+++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
@@ -4349,12 +4349,6 @@
   @override
   bool get hasExtraTaskModelPass => false;
 
-  @failingTest
-  @override
-  test_bottom_inClosure() async {
-    await super.test_bottom_inClosure();
-  }
-
   @override
   test_circularReference_viaClosures() async {
     await super.test_circularReference_viaClosures();
diff --git a/pkg/compiler/lib/src/closure.dart b/pkg/compiler/lib/src/closure.dart
index d585eec..869ed63 100644
--- a/pkg/compiler/lib/src/closure.dart
+++ b/pkg/compiler/lib/src/closure.dart
@@ -667,6 +667,8 @@
     return closureClass.methodElement.memberContext;
   }
 
+  SourceSpan get sourcePosition => expression.sourcePosition;
+
   bool get hasNode => node != null;
 
   FunctionExpression parseNode(ParsingContext parsing) => node;
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 95d84b7..7a6f642 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -39,6 +39,7 @@
   /// See [CompilerOptions.useKernel] for details.
   static const String useKernel = '--use-kernel';
   static const String strongMode = '--strong';
+  static const String addMethodSignatures = '--method-signatures';
   static const String platformBinaries = '--platform-binaries=.+';
 
   static const String minify = '--minify';
diff --git a/pkg/compiler/lib/src/common/names.dart b/pkg/compiler/lib/src/common/names.dart
index cafa0bc..749c072 100644
--- a/pkg/compiler/lib/src/common/names.dart
+++ b/pkg/compiler/lib/src/common/names.dart
@@ -73,6 +73,8 @@
   static const Name length = const PublicName(Identifiers.length);
 
   static const Name runtimeType_ = const PublicName(Identifiers.runtimeType_);
+
+  static const Name genericInstantiation = const PublicName('instantiate');
 }
 
 /// [Selector]s commonly used.
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 50a5ebb..f92e7cc 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -429,6 +429,11 @@
           });
         }
       }
+    } else {
+      if (loadedLibraries.containsLibrary(Uris.dart_mirrors)) {
+        reporter.reportErrorMessage(NO_LOCATION_SPANNABLE,
+            MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_WITH_KERNEL);
+      }
     }
     backend.onLibrariesLoaded(frontendStrategy.commonElements, loadedLibraries);
     return loadedLibraries;
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index a17e4b3..b080d91 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -401,6 +401,7 @@
     new OptionHandler(Flags.enableExperimentalMirrors, passThrough),
     new OptionHandler(Flags.enableAssertMessage, passThrough),
     new OptionHandler(Flags.strongMode, passThrough),
+    new OptionHandler(Flags.addMethodSignatures, passThrough),
 
     // TODO(floitsch): remove conditional directives flag.
     // We don't provide the info-message yet, since we haven't publicly
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index 8ba05a1..d099669 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -95,6 +95,9 @@
   /// Will be `true` if the program contains deferred libraries.
   bool isProgramSplit = false;
 
+  /// Whether mirrors have been used in the program.
+  bool _isMirrorsUsed = false;
+
   static const ImpactUseCase IMPACT_USE = const ImpactUseCase('Deferred load');
 
   /// A mapping from the name of a defer import to all the output units it
@@ -217,7 +220,9 @@
       collectConstantsInBody(analyzableElement, constants);
     }
 
-    collectConstantsFromMetadata(element, constants);
+    if (_isMirrorsUsed) {
+      collectConstantsFromMetadata(element, constants);
+    }
 
     if (element is FunctionEntity) {
       _collectTypeDependencies(
@@ -630,6 +635,7 @@
 
     work() {
       var queue = new WorkQueue(this.importSets);
+      _isMirrorsUsed = closedWorld.backendUsage.isMirrorsUsed;
 
       // Add `main` and their recursive dependencies to the main output unit.
       // We do this upfront to avoid wasting time visiting these elements when
@@ -650,7 +656,7 @@
         element = element is ClassElement ? element.implementation : element;
         queue.addElement(element, importSets.mainSet);
       }
-      if (closedWorld.backendUsage.isMirrorsUsed) {
+      if (_isMirrorsUsed) {
         addMirrorElementsForLibrary(queue, main.library, importSets.mainSet);
       }
 
@@ -781,14 +787,37 @@
     return "${outName}_$name$extension";
   }
 
+  bool ignoreEntityInDump(Entity element) => false;
+
   /// Creates a textual representation of the output unit content.
   String dump() {
     Map<OutputUnit, List<String>> elementMap = <OutputUnit, List<String>>{};
     Map<OutputUnit, List<String>> constantMap = <OutputUnit, List<String>>{};
     _elementToSet.forEach((Entity element, ImportSet importSet) {
-      elementMap.putIfAbsent(importSet.unit, () => <String>[]).add('$element');
+      if (ignoreEntityInDump(element)) return;
+      var elements = elementMap.putIfAbsent(importSet.unit, () => <String>[]);
+      var id = element.name ?? '$element';
+      if (element is MemberEntity) {
+        var cls = element.enclosingClass?.name;
+        if (cls != null) id = '$cls.$id';
+        if (element.isSetter) id = '$id=';
+        id = '$id member';
+      } else if (element is ClassEntity) {
+        id = '$id cls';
+      } else if (element is TypedefEntity) {
+        id = '$id typedef';
+      } else if (element is Local) {
+        var context = (element as dynamic).memberContext.name;
+        id = element.name == null || element.name == '' ? '<anonymous>' : id;
+        id = '$context.$id';
+        id = '$id local';
+      }
+      elements.add(id);
     });
     _constantToSet.forEach((ConstantValue value, ImportSet importSet) {
+      // Skip primitive values: they are not stored in the constant tables and
+      // if they are shared, they end up duplicated anyways across output units.
+      if (value.isPrimitive) return;
       constantMap
           .putIfAbsent(importSet.unit, () => <String>[])
           .add(value.toStructuredText());
@@ -801,9 +830,10 @@
         unitText.write(' <MAIN UNIT>');
       } else {
         unitText.write(' imports:');
-        var imports = outputUnit._imports.map((i) => '${i.uri}').toList()
-          ..sort();
-        for (var i in imports) {
+        var imports = outputUnit._imports
+            .map((i) => '${i.enclosingLibrary.canonicalUri.resolveUri(i.uri)}')
+            .toList();
+        for (var i in imports..sort()) {
           unitText.write('\n   $i:');
         }
       }
diff --git a/pkg/compiler/lib/src/diagnostics/generated/shared_messages.dart b/pkg/compiler/lib/src/diagnostics/generated/shared_messages.dart
index 6fc156d..eddc55e 100644
--- a/pkg/compiler/lib/src/diagnostics/generated/shared_messages.dart
+++ b/pkg/compiler/lib/src/diagnostics/generated/shared_messages.dart
@@ -50,8 +50,6 @@
         "var abstract foo; main(){}",
         "var static foo; main(){}",
         "var external foo; main(){}",
-        "get var foo; main(){}",
-        "set var foo; main(){}",
         "final var foo; main(){}",
         "var var foo; main(){}",
         "const var foo; main(){}",
diff --git a/pkg/compiler/lib/src/diagnostics/messages.dart b/pkg/compiler/lib/src/diagnostics/messages.dart
index 7d1be45..c1755d7 100644
--- a/pkg/compiler/lib/src/diagnostics/messages.dart
+++ b/pkg/compiler/lib/src/diagnostics/messages.dart
@@ -287,6 +287,7 @@
   MIRRORS_EXPECTED_STRING_OR_TYPE,
   MIRRORS_EXPECTED_STRING_TYPE_OR_LIST,
   MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND,
+  MIRRORS_LIBRARY_NOT_SUPPORT_WITH_KERNEL,
   MISSING_ARGUMENT,
   MISSING_ENUM_CASES,
   MISSING_FACTORY_KEYWORD,
@@ -3821,6 +3822,11 @@
           """
 $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.DIRECTLY_THROWING_NSM: const MessageTemplate(
           MessageKind.DIRECTLY_THROWING_NSM,
           "This 'noSuchMethod' implementation is guaranteed to throw an "
diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index 098a4df..e508a0c 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -381,6 +381,15 @@
   }
 
   @override
+  TypeInformation visitInstantiation(ir.Instantiation node) {
+    // TODO(sra): Add a TypeInformation for Instantiations.  Instantiated
+    // generic methods will need to be traced separately, and have the
+    // information gathered in tracing reflected back to the generic method. For
+    // now, pass along the uninstantiated method.
+    return visit(node.expression);
+  }
+
+  @override
   TypeInformation defaultExpression(ir.Expression node) {
     throw new UnimplementedError(
         'Unhandled expression: ${node} (${node.runtimeType})');
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
index ac9ae6e..02f075e 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
@@ -115,7 +115,7 @@
   void setDefaultTypeOfParameter(Local parameter, TypeInformation type,
       {bool isInstanceMember});
 
-  Iterable<MemberEntity> getCallersOf(MemberEntity element);
+  Iterable<MemberEntity> getCallersOfForTesting(MemberEntity element);
 
   // TODO(johnniwinther): Make this private again.
   GlobalTypeInferenceElementData<T> dataOfMember(MemberEntity element);
@@ -250,6 +250,8 @@
 }
 
 abstract class InferrerEngineImpl<T> extends InferrerEngine<T> {
+  static bool retainDataForTesting = false;
+
   final Map<Local, TypeInformation> defaultTypeOfParameter =
       new Map<Local, TypeInformation>();
   final WorkQueue workQueue = new WorkQueue();
@@ -1094,7 +1096,11 @@
   }
 
   void clear() {
-    void cleanup(TypeInformation info) => info.cleanup();
+    void cleanup(TypeInformation info) {
+      if (!retainDataForTesting) {
+        info.cleanup();
+      }
+    }
 
     types.allocatedCalls.forEach(cleanup);
     types.allocatedCalls.clear();
@@ -1119,9 +1125,9 @@
     types.allocatedLists.values.forEach(cleanup);
   }
 
-  Iterable<MemberEntity> getCallersOf(MemberEntity element) {
+  Iterable<MemberEntity> getCallersOfForTesting(MemberEntity element) {
     MemberTypeInformation info = types.getInferredTypeOfMember(element);
-    return info.callers;
+    return info.callersForTesting;
   }
 
   TypeInformation typeOfMemberWithSelector(
diff --git a/pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart
index ccda1f4..24b0ecc 100644
--- a/pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart
@@ -213,6 +213,8 @@
         break;
       case MemberKind.closureField:
         break;
+      case MemberKind.signature:
+        break;
     }
     failedAt(member, 'Unexpected member definition: $definition.');
     return null;
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
index 5df2869..19410c0 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
@@ -140,12 +140,12 @@
     return result;
   }
 
-  Iterable<MemberEntity> getCallersOf(MemberEntity element) {
+  Iterable<MemberEntity> getCallersOfForTesting(MemberEntity element) {
     if (_disableTypeInference) {
       throw new UnsupportedError(
           "Cannot query the type inferrer when type inference is disabled.");
     }
-    return inferrer.getCallersOf(element);
+    return inferrer.getCallersOfForTesting(element);
   }
 
   bool isMemberCalledOnce(MemberEntity element) {
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
index 5fcca72..2a74cf9 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
@@ -429,13 +429,8 @@
     }
   }
 
-  Iterable<MemberEntity> get callers {
-    // TODO(sra): This is called only from an unused API and a test. If it
-    // becomes used, [cleanup] will need to copy `_caller.keys`.
-
-    // `simple_inferrer_callers_test.dart` ensures that cleanup has not
-    // happened.
-    return _callers.keys;
+  Iterable<MemberEntity> get callersForTesting {
+    return _callers?.keys;
   }
 
   bool isCalledOnce() {
diff --git a/pkg/compiler/lib/src/io/kernel_source_information.dart b/pkg/compiler/lib/src/io/kernel_source_information.dart
index da70b55..93d324e 100644
--- a/pkg/compiler/lib/src/io/kernel_source_information.dart
+++ b/pkg/compiler/lib/src/io/kernel_source_information.dart
@@ -11,6 +11,7 @@
 import '../elements/entities.dart';
 import '../kernel/element_map.dart';
 import '../js_model/js_strategy.dart';
+import '../universe/call_structure.dart';
 import 'source_information.dart';
 import 'position_information.dart';
 
@@ -28,13 +29,15 @@
   }
 }
 
-/// Compute the source map name for kernel based [member].
+/// Compute the source map name for kernel based [member]. If [callStructure]
+/// is non-null it is used to name the parameter stub for [element].
 ///
 /// [elementMap] is used to compute names for closure call methods.
 // TODO(johnniwinther): Make the closure call names available to
 // `sourcemap_helper.dart`.
 String computeKernelElementNameForSourceMaps(
-    KernelToElementMapForBuilding elementMap, MemberEntity member) {
+    KernelToElementMapForBuilding elementMap, MemberEntity member,
+    [CallStructure callStructure]) {
   MemberDefinition definition = elementMap.getMemberDefinition(member);
   switch (definition.kind) {
     case MemberKind.closureCall:
@@ -58,10 +61,10 @@
       }
       MemberEntity enclosingMember = elementMap.getMember(node);
       String enclosingMemberName =
-          computeElementNameForSourceMaps(enclosingMember);
+          computeElementNameForSourceMaps(enclosingMember, callStructure);
       return '$enclosingMemberName.$name';
     default:
-      return computeElementNameForSourceMaps(member);
+      return computeElementNameForSourceMaps(member, callStructure);
   }
 }
 
@@ -77,11 +80,13 @@
       : this._name =
             computeKernelElementNameForSourceMaps(_elementMap, _member);
 
-  /// Returns the [SourceLocation] for the [offset] within [node].
+  /// Returns the [SourceLocation] for the [offset] within [node] using [name]
+  /// as the name of the source location.
   ///
   /// If [offset] is `null`, the first `fileOffset` of [node] or its parents is
   /// used.
-  SourceLocation _getSourceLocation(ir.TreeNode node, [int offset]) {
+  SourceLocation _getSourceLocation(String name, ir.TreeNode node,
+      [int offset]) {
     ir.Location location;
     if (offset != null) {
       location = node.location;
@@ -93,7 +98,7 @@
       location = node.location;
       offset = node.fileOffset;
     }
-    return new KernelSourceLocation(location, offset, _name);
+    return new KernelSourceLocation(location, offset, name);
   }
 
   /// Creates the source information for a function definition defined by the
@@ -101,10 +106,10 @@
   ///
   /// This method handles both methods, constructors, and local functions.
   SourceInformation _buildFunction(
-      ir.TreeNode node, ir.FunctionNode functionNode) {
+      String name, ir.TreeNode node, ir.FunctionNode functionNode) {
     if (functionNode.fileEndOffset != ir.TreeNode.noOffset) {
-      return new PositionSourceInformation(_getSourceLocation(node),
-          _getSourceLocation(functionNode, functionNode.fileEndOffset));
+      return new PositionSourceInformation(_getSourceLocation(name, node),
+          _getSourceLocation(name, functionNode, functionNode.fileEndOffset));
     }
     return _buildTreeNode(node);
   }
@@ -116,31 +121,32 @@
   /// to the end of the member as the closing position.
   SourceInformation _buildFunctionEnd(MemberEntity member, [ir.TreeNode base]) {
     MemberDefinition definition = _elementMap.getMemberDefinition(member);
+    String name = computeKernelElementNameForSourceMaps(_elementMap, member);
     ir.Node node = definition.node;
     switch (definition.kind) {
       case MemberKind.regular:
         if (node is ir.Procedure) {
-          return _buildFunction(base ?? node, node.function);
+          return _buildFunction(name, base ?? node, node.function);
         }
         break;
       case MemberKind.constructor:
       case MemberKind.constructorBody:
         if (node is ir.Procedure) {
-          return _buildFunction(base ?? node, node.function);
+          return _buildFunction(name, base ?? node, node.function);
         } else if (node is ir.Constructor) {
-          return _buildFunction(base ?? node, node.function);
+          return _buildFunction(name, base ?? node, node.function);
         }
         break;
       case MemberKind.closureCall:
         if (node is ir.FunctionDeclaration) {
-          return _buildFunction(base ?? node, node.function);
+          return _buildFunction(name, base ?? node, node.function);
         } else if (node is ir.FunctionExpression) {
-          return _buildFunction(base ?? node, node.function);
+          return _buildFunction(name, base ?? node, node.function);
         }
         break;
       default:
     }
-    return _buildTreeNode(base ?? node);
+    return _buildTreeNode(base ?? node, name: name);
   }
 
   /// Creates the source information for exiting a function definition defined
@@ -151,7 +157,7 @@
       ir.TreeNode node, ir.FunctionNode functionNode) {
     if (functionNode.fileEndOffset != ir.TreeNode.noOffset) {
       return new PositionSourceInformation(
-          _getSourceLocation(functionNode, functionNode.fileEndOffset));
+          _getSourceLocation(_name, functionNode, functionNode.fileEndOffset));
     }
     return _buildTreeNode(node);
   }
@@ -164,12 +170,12 @@
     SourceLocation location;
     if (body != null) {
       if (body is ir.Block && body.statements.isNotEmpty) {
-        location = _getSourceLocation(body.statements.first);
+        location = _getSourceLocation(_name, body.statements.first);
       } else {
-        location = _getSourceLocation(body);
+        location = _getSourceLocation(_name, body);
       }
     } else {
-      location = _getSourceLocation(node);
+      location = _getSourceLocation(_name, node);
     }
     return new PositionSourceInformation(location);
   }
@@ -242,9 +248,9 @@
 
   /// Creates source information based on the location of [node].
   SourceInformation _buildTreeNode(ir.TreeNode node,
-      [SourceLocation closingPosition]) {
+      {SourceLocation closingPosition, String name}) {
     return new PositionSourceInformation(
-        _getSourceLocation(node), closingPosition);
+        _getSourceLocation(name ?? _name, node), closingPosition);
   }
 
   @override
@@ -370,7 +376,7 @@
   SourceInformation buildCall(
       covariant ir.TreeNode receiver, covariant ir.TreeNode call) {
     return new PositionSourceInformation(
-        _getSourceLocation(receiver), _getSourceLocation(call));
+        _getSourceLocation(_name, receiver), _getSourceLocation(_name, call));
   }
 
   @override
@@ -410,6 +416,16 @@
   }
 
   @override
+  SourceInformation buildStub(
+      FunctionEntity function, CallStructure callStructure) {
+    MemberDefinition definition = _elementMap.getMemberDefinition(function);
+    String name = computeKernelElementNameForSourceMaps(
+        _elementMap, function, callStructure);
+    ir.Node node = definition.node;
+    return _buildTreeNode(node, name: name);
+  }
+
+  @override
   SourceInformation buildGoto(ir.Node node) {
     return _buildTreeNode(node);
   }
diff --git a/pkg/compiler/lib/src/io/multi_information.dart b/pkg/compiler/lib/src/io/multi_information.dart
index 84c3421..25c61fe 100644
--- a/pkg/compiler/lib/src/io/multi_information.dart
+++ b/pkg/compiler/lib/src/io/multi_information.dart
@@ -11,6 +11,7 @@
 import '../elements/entities.dart';
 import '../js/js_source_mapping.dart';
 import '../js/js.dart' as js;
+import '../universe/call_structure.dart';
 import 'code_output.dart' show BufferedCodeOutput;
 import 'source_information.dart';
 
@@ -289,6 +290,13 @@
   }
 
   @override
+  SourceInformation buildStub(
+      FunctionEntity function, CallStructure callStructure) {
+    return new MultiSourceInformation(
+        builders.map((b) => b.buildStub(function, callStructure)).toList());
+  }
+
+  @override
   SourceInformation buildGoto(T node) {
     return new MultiSourceInformation(
         builders.map((b) => b.buildGoto(node)).toList());
diff --git a/pkg/compiler/lib/src/io/position_information.dart b/pkg/compiler/lib/src/io/position_information.dart
index 4e1fd6c..5704c6e 100644
--- a/pkg/compiler/lib/src/io/position_information.dart
+++ b/pkg/compiler/lib/src/io/position_information.dart
@@ -9,11 +9,12 @@
 
 import '../common.dart';
 import '../elements/elements.dart'
-    show MemberElement, ResolvedAst, ResolvedAstKind;
+    show MemberElement, MethodElement, ResolvedAst, ResolvedAstKind;
 import '../js/js.dart' as js;
 import '../js/js_debug.dart';
 import '../js/js_source_mapping.dart';
 import '../tree/tree.dart' show Node, Send;
+import '../universe/call_structure.dart';
 import 'code_output.dart' show BufferedCodeOutput;
 import 'source_file.dart';
 import 'source_information.dart';
@@ -158,7 +159,8 @@
 
   SourceInformation buildDeclaration(MemberElement member) {
     ResolvedAst resolvedAst = member.resolvedAst;
-    SourceFile sourceFile = computeSourceFile(member.resolvedAst);
+    String name = computeElementNameForSourceMaps(resolvedAst.element);
+    SourceFile sourceFile = computeSourceFile(resolvedAst);
     if (resolvedAst.kind != ResolvedAstKind.PARSED) {
       SourceSpan span = resolvedAst.element.sourcePosition;
       return new PositionSourceInformation(
@@ -172,6 +174,20 @@
     }
   }
 
+  @override
+  SourceInformation buildStub(
+      MethodElement function, CallStructure callStructure) {
+    ResolvedAst resolvedAst = function.resolvedAst;
+    String name =
+        computeElementNameForSourceMaps(resolvedAst.element, callStructure);
+    SourceFile sourceFile = computeSourceFile(resolvedAst);
+    SourceSpan span = resolvedAst.element.sourcePosition;
+    assert(
+        span != null, failedAt(function, "No source position for $function."));
+    return new PositionSourceInformation(
+        new OffsetSourceLocation(sourceFile, span.begin, name));
+  }
+
   /// Builds a source information object pointing the start position of [node].
   SourceInformation buildBegin(Node node) {
     return new PositionSourceInformation(new OffsetSourceLocation(
diff --git a/pkg/compiler/lib/src/io/source_information.dart b/pkg/compiler/lib/src/io/source_information.dart
index 34a80d7..ae22161 100644
--- a/pkg/compiler/lib/src/io/source_information.dart
+++ b/pkg/compiler/lib/src/io/source_information.dart
@@ -16,6 +16,7 @@
 import '../elements/entities.dart';
 import '../js/js.dart' show JavaScriptNodeSourceInformation;
 import '../script.dart';
+import '../universe/call_structure.dart';
 import 'source_file.dart';
 
 /// Interface for passing source information, for instance for use in source
@@ -67,9 +68,14 @@
   /// Create a [SourceInformationBuilder] for [member].
   SourceInformationBuilder forContext(covariant MemberEntity member) => this;
 
-  /// Generate [SourceInformation] the declaration of the [member].
+  /// Generate [SourceInformation] for the declaration of the [member].
   SourceInformation buildDeclaration(covariant MemberEntity member) => null;
 
+  /// Generate [SourceInformation] for the stub of [callStructure] for [member].
+  SourceInformation buildStub(
+          covariant FunctionEntity function, CallStructure callStructure) =>
+      null;
+
   /// Generate [SourceInformation] for the generic [node].
   @deprecated
   SourceInformation buildGeneric(T node) => null;
@@ -271,35 +277,41 @@
   String toString() => '${super.toString()}:$sourceName';
 }
 
-/// Compute the source map name for [element].
-String computeElementNameForSourceMaps(Entity element) {
+/// Compute the source map name for [element]. If [callStructure] is non-null
+/// it is used to name the parameter stub for [element].
+String computeElementNameForSourceMaps(Entity element,
+    [CallStructure callStructure]) {
   if (element is AstElement) {
-    return _computeAstElementNameForSourceMaps(element);
+    return _computeAstElementNameForSourceMaps(element, callStructure);
   } else if (element is ClassEntity) {
     return element.name;
   } else if (element is MemberEntity) {
+    String suffix = computeStubSuffix(callStructure);
     if (element is ConstructorEntity || element is ConstructorBodyEntity) {
       String className = element.enclosingClass.name;
       if (element.name == '') {
         return className;
       }
-      return '$className.${element.name}';
+      return '$className.${element.name}$suffix';
     } else if (element.enclosingClass != null) {
       if (element.enclosingClass.isClosure) {
-        return computeElementNameForSourceMaps(element.enclosingClass);
+        return computeElementNameForSourceMaps(
+            element.enclosingClass, callStructure);
       }
-      return '${element.enclosingClass.name}.${element.name}';
+      return '${element.enclosingClass.name}.${element.name}$suffix';
     } else {
-      return element.name;
+      return '${element.name}$suffix';
     }
   }
   // TODO(redemption): Create element names from kernel locals and closures.
   return element.name;
 }
 
-String _computeAstElementNameForSourceMaps(AstElement element) {
+String _computeAstElementNameForSourceMaps(
+    AstElement element, CallStructure callStructure) {
   if (element.isClosure) {
-    return computeElementNameForSourceMaps(element.enclosingElement);
+    return computeElementNameForSourceMaps(
+        element.enclosingElement, callStructure);
   } else if (element.isClass) {
     return element.name;
   } else if (element.isConstructor || element.isGenerativeConstructorBody) {
@@ -314,17 +326,36 @@
     if (name == '') {
       name = '<anonymous function>';
     }
-    return '${computeElementNameForSourceMaps(local.executableContext)}.$name';
+    String enclosingName =
+        computeElementNameForSourceMaps(local.executableContext, callStructure);
+    return '$enclosingName.$name';
   } else if (element.enclosingClass != null) {
+    String suffix = computeStubSuffix(callStructure);
     if (element.enclosingClass.isClosure) {
-      return computeElementNameForSourceMaps(element.enclosingClass);
+      return computeElementNameForSourceMaps(
+          element.enclosingClass, callStructure);
     }
-    return '${element.enclosingClass.name}.${element.name}';
+    return '${element.enclosingClass.name}.${element.name}$suffix';
   } else {
-    return element.name;
+    String suffix = computeStubSuffix(callStructure);
+    return '${element.name}$suffix';
   }
 }
 
+/// Compute the suffix used for a parameter stub for [callStructure].
+String computeStubSuffix(CallStructure callStructure) {
+  if (callStructure == null) return '';
+  StringBuffer sb = new StringBuffer();
+  sb.write(r'[function-entry$');
+  sb.write(callStructure.positionalArgumentCount);
+  if (callStructure.namedArguments.isNotEmpty) {
+    sb.write(r'$');
+    sb.write(callStructure.getOrderedNamedArguments().join(r'$'));
+  }
+  sb.write(']');
+  return sb.toString();
+}
+
 /// Computes the [SourceFile] for the source code of [resolvedAst].
 SourceFile computeSourceFile(ResolvedAst resolvedAst) {
   SourceFile sourceFile;
diff --git a/pkg/compiler/lib/src/io/start_end_information.dart b/pkg/compiler/lib/src/io/start_end_information.dart
index d67d6a2..099917d 100644
--- a/pkg/compiler/lib/src/io/start_end_information.dart
+++ b/pkg/compiler/lib/src/io/start_end_information.dart
@@ -12,10 +12,11 @@
 import '../common.dart';
 import '../diagnostics/messages.dart' show MessageTemplate;
 import '../elements/elements.dart'
-    show MemberElement, ResolvedAst, ResolvedAstKind;
+    show MemberElement, MethodElement, ResolvedAst, ResolvedAstKind;
 import '../js/js.dart' as js;
 import '../js/js_source_mapping.dart';
 import '../tree/tree.dart' show Node, Send;
+import '../universe/call_structure.dart';
 import 'source_file.dart';
 import 'source_information.dart';
 
@@ -62,8 +63,10 @@
   // TODO(johnniwinther): Inline this in
   // [StartEndSourceInformationBuilder.buildDeclaration].
   static StartEndSourceInformation _computeSourceInformation(
-      ResolvedAst resolvedAst) {
-    String name = computeElementNameForSourceMaps(resolvedAst.element);
+      ResolvedAst resolvedAst,
+      [CallStructure callStructure]) {
+    String name =
+        computeElementNameForSourceMaps(resolvedAst.element, callStructure);
     SourceFile sourceFile = computeSourceFile(resolvedAst);
     int begin;
     int end;
@@ -113,8 +116,9 @@
   const StartEndSourceInformationStrategy();
 
   @override
-  SourceInformationBuilder<Node> createBuilderForContext(MemberElement member) {
-    return new StartEndSourceInformationBuilder(member);
+  SourceInformationBuilder<Node> createBuilderForContext(MemberElement member,
+      [CallStructure callStructure]) {
+    return new StartEndSourceInformationBuilder(member, callStructure);
   }
 
   @override
@@ -193,15 +197,23 @@
   final SourceFile sourceFile;
   final String name;
 
-  StartEndSourceInformationBuilder(MemberElement member)
+  StartEndSourceInformationBuilder(MemberElement member,
+      [CallStructure callStructure])
       : sourceFile = computeSourceFile(member.resolvedAst),
-        name = computeElementNameForSourceMaps(member.resolvedAst.element);
+        name = computeElementNameForSourceMaps(
+            member.resolvedAst.element, callStructure);
 
   SourceInformation buildDeclaration(MemberElement member) {
     return StartEndSourceInformation
         ._computeSourceInformation(member.resolvedAst);
   }
 
+  SourceInformation buildStub(
+      MethodElement member, CallStructure callStructure) {
+    return StartEndSourceInformation._computeSourceInformation(
+        member.resolvedAst, callStructure);
+  }
+
   SourceLocation sourceFileLocationForToken(Token token) {
     SourceLocation location =
         new OffsetSourceLocation(sourceFile, token.charOffset, name);
diff --git a/pkg/compiler/lib/src/js_backend/frequency_namer.dart b/pkg/compiler/lib/src/js_backend/frequency_namer.dart
index 511bb03..e075856 100644
--- a/pkg/compiler/lib/src/js_backend/frequency_namer.dart
+++ b/pkg/compiler/lib/src/js_backend/frequency_namer.dart
@@ -24,6 +24,7 @@
   String get requiredParameterField => r'$R';
   String get defaultValuesField => r'$D';
   String get operatorSignature => r'$S';
+  String get genericInstantiationPrefix => r'$I';
 
   jsAst.Name get staticsPropertyName =>
       _staticsPropertyName ??= getFreshName(instanceScope, 'static');
diff --git a/pkg/compiler/lib/src/js_backend/impact_transformer.dart b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
index 887befd..985fe4a 100644
--- a/pkg/compiler/lib/src/js_backend/impact_transformer.dart
+++ b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
@@ -179,16 +179,18 @@
           _customElementsResolutionAnalysis.registerTypeLiteral(type);
           if (type.isTypeVariable) {
             TypeVariableType typeVariable = type;
-            if (typeVariable.element.typeDeclaration is ClassEntity) {
-              // GENERIC_METHODS: The `is!` test above filters away method type
-              // variables, because they have the value `dynamic` with the
-              // incomplete support for generic methods offered with
-              // '--generic-method-syntax'. This must be revised in order to
-              // support generic methods fully.
-              ClassEntity cls = typeVariable.element.typeDeclaration;
-              _rtiNeedBuilder.registerClassUsingTypeVariableExpression(cls);
-              registerImpact(_impacts.typeVariableExpression);
+            Entity typeDeclaration = typeVariable.element.typeDeclaration;
+            if (typeDeclaration is ClassEntity) {
+              _rtiNeedBuilder
+                  .registerClassUsingTypeVariableLiteral(typeDeclaration);
+            } else if (typeDeclaration is FunctionEntity) {
+              _rtiNeedBuilder
+                  .registerMethodUsingTypeVariableLiteral(typeDeclaration);
+            } else if (typeDeclaration is Local) {
+              _rtiNeedBuilder.registerLocalFunctionUsingTypeVariableLiteral(
+                  typeDeclaration);
             }
+            registerImpact(_impacts.typeVariableExpression);
           }
           hasTypeLiteral = true;
           break;
diff --git a/pkg/compiler/lib/src/js_backend/minify_namer.dart b/pkg/compiler/lib/src/js_backend/minify_namer.dart
index 6be7b26..94ba9a0 100644
--- a/pkg/compiler/lib/src/js_backend/minify_namer.dart
+++ b/pkg/compiler/lib/src/js_backend/minify_namer.dart
@@ -31,6 +31,7 @@
   String get requiredParameterField => r'$R';
   String get defaultValuesField => r'$D';
   String get operatorSignature => r'$S';
+  String get genericInstantiationPrefix => r'$I';
 
   final ALPHABET_CHARACTERS = 52; // a-zA-Z.
   final ALPHANUMERIC_CHARACTERS = 62; // a-zA-Z0-9.
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 7d2e799..0360aac 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -11,7 +11,7 @@
 
 import '../closure.dart';
 import '../common.dart';
-import '../common/names.dart' show Identifiers, Selectors;
+import '../common/names.dart' show Identifiers, Names, Selectors;
 import '../constants/values.dart';
 import '../common_elements.dart' show CommonElements, ElementEnvironment;
 import '../diagnostics/invariant.dart' show DEBUG_MODE;
@@ -862,12 +862,26 @@
             _disambiguateMember(selector.memberName, suffix);
         return disambiguatedName; // Methods other than call are not annotated.
 
+      case SelectorKind.SPECIAL:
+        return specialSelectorName(selector);
+
       default:
         throw failedAt(CURRENT_ELEMENT_SPANNABLE,
             'Unexpected selector kind: ${selector.kind}');
     }
   }
 
+  jsAst.Name specialSelectorName(Selector selector) {
+    assert(selector.kind == SelectorKind.SPECIAL);
+    if (selector.memberName == Names.genericInstantiation) {
+      return new StringBackedName('${genericInstantiationPrefix}'
+          '${selector.callStructure.typeArgumentCount}');
+    }
+
+    throw failedAt(
+        CURRENT_ELEMENT_SPANNABLE, 'Unexpected special selector: $selector');
+  }
+
   /**
    * Returns the internal name used for an invocation mirror of this selector.
    */
@@ -1611,6 +1625,8 @@
 
   String get operatorSignature => r'$signature';
 
+  String get genericInstantiationPrefix => r'$instantiate';
+
   String get typedefTag => r'typedef';
 
   String get functionTypeTag => r'func';
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index 6fd95da..16d9d9e 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -95,7 +95,7 @@
   // TODO(redemption): Remove this when the old frontend is deleted.
   bool localFunctionNeedsSignature(Local localFunction);
 
-  bool classUsesTypeVariableExpression(ClassEntity cls);
+  bool classUsesTypeVariableLiteral(ClassEntity cls);
 }
 
 class TrivialRuntimeTypesNeed implements RuntimeTypesNeed {
@@ -105,7 +105,7 @@
   bool classNeedsTypeArguments(ClassEntity cls) => true;
 
   @override
-  bool classUsesTypeVariableExpression(ClassEntity cls) => true;
+  bool classUsesTypeVariableLiteral(ClassEntity cls) => true;
 
   @override
   bool localFunctionNeedsSignature(Local localFunction) => true;
@@ -117,13 +117,23 @@
   bool classNeedsRtiField(ClassEntity cls) => true;
 
   @override
-  bool methodNeedsTypeArguments(FunctionEntity method) => true;
+  bool methodNeedsTypeArguments(FunctionEntity method) =>
+      // TODO(johnniwinther): Align handling of type arguments passed to factory
+      // constructors with type arguments passed the regular generic methods.
+      !(method is ConstructorEntity && method.isFactoryConstructor);
 }
 
 /// Interface for computing classes and methods that need runtime types.
 abstract class RuntimeTypesNeedBuilder {
-  /// Registers that [cls] contains a type variable literal.
-  void registerClassUsingTypeVariableExpression(ClassEntity cls);
+  /// Registers that [cls] uses one of its type variables as a literal.
+  void registerClassUsingTypeVariableLiteral(ClassEntity cls);
+
+  /// Registers that [method] uses one of its type variables as a literal.
+  void registerMethodUsingTypeVariableLiteral(FunctionEntity method);
+
+  /// Registers that [localFunction] uses one of its type variables as a
+  /// literal.
+  void registerLocalFunctionUsingTypeVariableLiteral(Local localFunction);
 
   /// Registers that if [element] needs type arguments at runtime then so does
   /// [dependency].
@@ -160,7 +170,13 @@
   const TrivialRuntimeTypesNeedBuilder();
 
   @override
-  void registerClassUsingTypeVariableExpression(ClassEntity cls) {}
+  void registerClassUsingTypeVariableLiteral(ClassEntity cls) {}
+
+  @override
+  void registerMethodUsingTypeVariableLiteral(FunctionEntity method) {}
+
+  @override
+  void registerLocalFunctionUsingTypeVariableLiteral(Local localFunction) {}
 
   @override
   RuntimeTypesNeed computeRuntimeTypesNeed(
@@ -523,9 +539,8 @@
   final Set<Local> localFunctionsNeedingSignature;
   final Set<Local> localFunctionsNeedingTypeArguments;
 
-  /// The set of classes that use one of their type variables as expressions
-  /// to get the runtime type.
-  final Set<ClassEntity> classesUsingTypeVariableExpression;
+  /// The set of classes that use one of their type variables as literals.
+  final Set<ClassEntity> classesUsingTypeVariableLiterals;
 
   RuntimeTypesNeedImpl(
       this._elementEnvironment,
@@ -535,7 +550,7 @@
       this.methodsNeedingTypeArguments,
       this.localFunctionsNeedingSignature,
       this.localFunctionsNeedingTypeArguments,
-      this.classesUsingTypeVariableExpression);
+      this.classesUsingTypeVariableLiterals);
 
   bool checkClass(covariant ClassEntity cls) => true;
 
@@ -577,8 +592,8 @@
   }
 
   @override
-  bool classUsesTypeVariableExpression(ClassEntity cls) {
-    return classesUsingTypeVariableExpression.contains(cls);
+  bool classUsesTypeVariableLiteral(ClassEntity cls) {
+    return classesUsingTypeVariableLiterals.contains(cls);
   }
 }
 
@@ -586,19 +601,19 @@
   _ResolutionRuntimeTypesNeed(
       ElementEnvironment elementEnvironment,
       BackendUsage backendUsage,
-      Set<ClassEntity> classesNeedingRti,
-      Set<FunctionEntity> methodsNeedingRti,
-      Set<FunctionEntity> methodsNeedingGenericRti,
-      Set<Local> localFunctionsNeedingRti,
+      Set<ClassEntity> classesNeedingTypeArguments,
+      Set<FunctionEntity> methodsNeedingSignature,
+      Set<FunctionEntity> methodsNeedingTypeArguments,
+      Set<Local> localFunctionsNeedingSignature,
       Set<Local> localFunctionsNeedingTypeArguments,
       Set<ClassEntity> classesUsingTypeVariableExpression)
       : super(
             elementEnvironment,
             backendUsage,
-            classesNeedingRti,
-            methodsNeedingRti,
-            methodsNeedingGenericRti,
-            localFunctionsNeedingRti,
+            classesNeedingTypeArguments,
+            methodsNeedingSignature,
+            methodsNeedingTypeArguments,
+            localFunctionsNeedingSignature,
             localFunctionsNeedingTypeArguments,
             classesUsingTypeVariableExpression);
 
@@ -612,9 +627,14 @@
   final Map<Entity, Set<Entity>> typeArgumentDependencies =
       <Entity, Set<Entity>>{};
 
-  final Set<ClassEntity> classesUsingTypeVariableExpression =
+  final Set<ClassEntity> classesUsingTypeVariableLiterals =
       new Set<ClassEntity>();
 
+  final Set<FunctionEntity> methodsUsingTypeVariableLiterals =
+      new Set<FunctionEntity>();
+
+  final Set<Local> localFunctionsUsingTypeVariableLiterals = new Set<Local>();
+
   final Set<ClassEntity> classesUsingTypeVariableTests = new Set<ClassEntity>();
 
   Set<DartType> isChecks;
@@ -627,8 +647,18 @@
   bool checkClass(covariant ClassEntity cls) => true;
 
   @override
-  void registerClassUsingTypeVariableExpression(ClassEntity cls) {
-    classesUsingTypeVariableExpression.add(cls);
+  void registerClassUsingTypeVariableLiteral(ClassEntity cls) {
+    classesUsingTypeVariableLiterals.add(cls);
+  }
+
+  @override
+  void registerMethodUsingTypeVariableLiteral(FunctionEntity method) {
+    methodsUsingTypeVariableLiterals.add(method);
+  }
+
+  @override
+  void registerLocalFunctionUsingTypeVariableLiteral(Local localFunction) {
+    localFunctionsUsingTypeVariableLiterals.add(localFunction);
   }
 
   @override
@@ -768,9 +798,12 @@
       checkClosures();
     }
 
-    // Add the classes that need RTI because they use a type variable as
-    // expression.
-    classesUsingTypeVariableExpression.forEach(potentiallyNeedTypeArguments);
+    // Add the classes, methods and local functions that need type arguments
+    // because they use a type variable as a literal.
+    classesUsingTypeVariableLiterals.forEach(potentiallyNeedTypeArguments);
+    methodsUsingTypeVariableLiterals.forEach(potentiallyNeedTypeArguments);
+    localFunctionsUsingTypeVariableLiterals
+        .forEach(potentiallyNeedTypeArguments);
 
     return _createRuntimeTypesNeed(
         _elementEnvironment,
@@ -780,7 +813,7 @@
         methodsNeedingTypeArguments,
         localFunctionsNeedingSignature,
         localFunctionsNeedingTypeArguments,
-        classesUsingTypeVariableExpression);
+        classesUsingTypeVariableLiterals);
   }
 
   RuntimeTypesNeed _createRuntimeTypesNeed(
diff --git a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
index ecd5f24..d9cf761 100644
--- a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
+++ b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
@@ -207,6 +207,7 @@
           namer,
           this,
           closedWorld,
+          backend.sourceInformationStrategy,
           compiler.backendStrategy.sorter,
           typeTestRegistry.rtiNeededClasses,
           closedWorld.elementEnvironment.mainFunction,
diff --git a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
index db80fe3..b945d93 100644
--- a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
@@ -7,6 +7,7 @@
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
+import '../io/source_information.dart';
 import '../js/js.dart' as jsAst;
 import '../js/js.dart' show js;
 import '../js_backend/namer.dart' show Namer;
@@ -31,9 +32,16 @@
   final InterceptorData _interceptorData;
   final CodegenWorldBuilder _codegenWorldBuilder;
   final ClosedWorld _closedWorld;
+  final SourceInformationStrategy _sourceInformationStrategy;
 
-  ParameterStubGenerator(this._emitterTask, this._namer, this._nativeData,
-      this._interceptorData, this._codegenWorldBuilder, this._closedWorld);
+  ParameterStubGenerator(
+      this._emitterTask,
+      this._namer,
+      this._nativeData,
+      this._interceptorData,
+      this._codegenWorldBuilder,
+      this._closedWorld,
+      this._sourceInformationStrategy);
 
   Emitter get _emitter => _emitterTask.emitter;
 
@@ -59,6 +67,11 @@
   ParameterStubMethod generateParameterStub(
       FunctionEntity member, Selector selector, Selector callSelector) {
     CallStructure callStructure = selector.callStructure;
+    SourceInformationBuilder sourceInformationBuilder =
+        _sourceInformationStrategy.createBuilderForContext(member);
+    SourceInformation sourceInformation =
+        sourceInformationBuilder.buildStub(member, callStructure);
+
     ParameterStructure parameterStructure = member.parameterStructure;
     int positionalArgumentCount = callStructure.positionalArgumentCount;
     bool needsTypeArguments =
@@ -182,7 +195,8 @@
           [_emitter.staticFunctionAccess(member), argumentsBuffer]);
     }
 
-    jsAst.Fun function = js('function(#) { #; }', [parametersBuffer, body]);
+    jsAst.Fun function = js('function(#) { #; }', [parametersBuffer, body])
+        .withSourceInformation(sourceInformation);
 
     jsAst.Name name = member.isStatic ? null : _namer.invocationName(selector);
     jsAst.Name callName =
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 33b9496..8edc01d 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
@@ -19,6 +19,7 @@
     show ClassElement, FieldElement, LibraryElement, MethodElement;
 import '../../elements/entities.dart';
 import '../../elements/types.dart';
+import '../../io/source_information.dart';
 import '../../js/js.dart' as js;
 import '../../js_backend/backend.dart' show SuperMemberData;
 import '../../js_backend/backend_usage.dart';
@@ -89,6 +90,7 @@
   final Namer _namer;
   final CodeEmitterTask _task;
   final ClosedWorld _closedWorld;
+  final SourceInformationStrategy _sourceInformationStrategy;
 
   /// The [Sorter] used for ordering elements in the generated JavaScript.
   final Sorter _sorter;
@@ -136,6 +138,7 @@
       this._namer,
       this._task,
       this._closedWorld,
+      this._sourceInformationStrategy,
       this._sorter,
       Set<ClassEntity> rtiNeededClasses,
       this._mainFunction,
@@ -976,8 +979,14 @@
       FunctionEntity element, bool canTearOff) {
     if (!_methodNeedsStubs(element)) return const <ParameterStubMethod>[];
 
-    ParameterStubGenerator generator = new ParameterStubGenerator(_task, _namer,
-        _nativeData, _interceptorData, _worldBuilder, _closedWorld);
+    ParameterStubGenerator generator = new ParameterStubGenerator(
+        _task,
+        _namer,
+        _nativeData,
+        _interceptorData,
+        _worldBuilder,
+        _closedWorld,
+        _sourceInformationStrategy);
     return generator.generateParameterStubs(element, canTearOff: canTearOff);
   }
 
diff --git a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
index 10308c1..bc4ea30 100644
--- a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
@@ -331,7 +331,7 @@
         if (generated.contains(superclass)) return;
 
         if (classesUsingTypeVariableTests.contains(superclass) ||
-            _rtiNeed.classUsesTypeVariableExpression(superclass) ||
+            _rtiNeed.classUsesTypeVariableLiteral(superclass) ||
             checkedClasses.contains(superclass)) {
           // Generate substitution.  If no substitution is necessary, emit
           // `null` to overwrite a (possibly) existing substitution from the
diff --git a/pkg/compiler/lib/src/js_model/closure.dart b/pkg/compiler/lib/src/js_model/closure.dart
index 4d20f75..b50699f 100644
--- a/pkg/compiler/lib/src/js_model/closure.dart
+++ b/pkg/compiler/lib/src/js_model/closure.dart
@@ -42,9 +42,8 @@
       hasThisLocal = !constructor.isFactoryConstructor;
     }
     ScopeModel model = new ScopeModel();
-    CapturedScopeBuilder translator = new CapturedScopeBuilder(model,
-        hasThisLocal: hasThisLocal,
-        addTypeChecks: options.enableTypeAssertions);
+    CapturedScopeBuilder translator =
+        new CapturedScopeBuilder(model, options, hasThisLocal: hasThisLocal);
     if (entity.isField) {
       if (node is ir.Field && node.initializer != null) {
         node.accept(translator);
@@ -111,18 +110,41 @@
   void _updateScopeBasedOnRtiNeed(
       KernelScopeInfo scope,
       ir.Node node,
-      Set<ir.Node> localFunctionsNeedingRti,
-      Set<ClassEntity> classesNeedingRti,
+      bool Function(ir.Node) localFunctionNeedsSignature,
+      bool Function(ClassEntity) classNeedsTypeArguments,
+      bool Function(MemberEntity) methodNeedsTypeArguments,
+      bool Function(ir.Node) localFunctionNeedsTypeArguments,
       MemberEntity outermostEntity) {
-    if (localFunctionsNeedingRti.contains(node) ||
-        classesNeedingRti.contains(outermostEntity.enclosingClass) ||
-        _addTypeChecks) {
-      if (outermostEntity is FunctionEntity &&
-          outermostEntity is! ConstructorEntity) {
-        scope.thisUsedAsFreeVariable = scope.thisUsedAsFreeVariableIfNeedsRti ||
-            scope.thisUsedAsFreeVariable;
-      } else {
-        scope.freeVariables.addAll(scope.freeVariablesForRti);
+    if (scope.thisUsedAsFreeVariableIfNeedsRti &&
+        classNeedsTypeArguments(outermostEntity.enclosingClass)) {
+      scope.thisUsedAsFreeVariable = true;
+    }
+    if (_addTypeChecks) {
+      scope.freeVariables.addAll(scope.freeVariablesForRti);
+    } else {
+      for (TypeVariableTypeWithContext typeVariable
+          in scope.freeVariablesForRti) {
+        switch (typeVariable.kind) {
+          case TypeVariableKind.cls:
+            if (classNeedsTypeArguments(
+                _elementMap.getClass(typeVariable.typeDeclaration))) {
+              scope.freeVariables.add(typeVariable);
+            }
+            break;
+          case TypeVariableKind.method:
+            if (methodNeedsTypeArguments(
+                _elementMap.getMember(typeVariable.typeDeclaration))) {
+              scope.freeVariables.add(typeVariable);
+            }
+            break;
+          case TypeVariableKind.local:
+            if (localFunctionNeedsTypeArguments(typeVariable.typeDeclaration)) {
+              scope.freeVariables.add(typeVariable);
+            }
+            break;
+          case TypeVariableKind.function:
+            break;
+        }
       }
     }
   }
@@ -130,8 +152,10 @@
   Iterable<FunctionEntity> createClosureEntities(
       JsClosedWorldBuilder closedWorldBuilder,
       Map<MemberEntity, ScopeModel> closureModels,
-      Set<ir.Node> localFunctionsNeedingRti,
-      Set<ClassEntity> classesNeedingRti) {
+      {bool Function(ir.Node) localFunctionNeedsSignature,
+      bool Function(ClassEntity) classNeedsTypeArguments,
+      bool Function(FunctionEntity) methodNeedsTypeArguments,
+      bool Function(ir.Node) localFunctionNeedsTypeArguments}) {
     List<FunctionEntity> callMethods = <FunctionEntity>[];
     closureModels.forEach((MemberEntity member, ScopeModel model) {
       KernelToLocalsMap localsMap = _globalLocalsMap.getLocalsMap(member);
@@ -145,7 +169,13 @@
         Map<Local, JRecordField> boxedVariables =
             _elementMap.makeRecordContainer(scope, member, localsMap);
         _updateScopeBasedOnRtiNeed(
-            scope, node, localFunctionsNeedingRti, classesNeedingRti, member);
+            scope,
+            node,
+            localFunctionNeedsSignature,
+            classNeedsTypeArguments,
+            methodNeedsTypeArguments,
+            localFunctionNeedsTypeArguments,
+            member);
 
         if (scope is KernelCapturedLoopScope) {
           _capturedScopesMap[node] = new JsCapturedLoopScope.from(
@@ -174,10 +204,13 @@
             functionNode,
             closuresToGenerate[node],
             allBoxedVariables,
-            localFunctionsNeedingRti,
-            classesNeedingRti);
+            localFunctionNeedsSignature,
+            classNeedsTypeArguments,
+            methodNeedsTypeArguments,
+            localFunctionNeedsTypeArguments);
         // Add also for the call method.
         _scopeMap[closureClassInfo.callMethod] = closureClassInfo;
+        _scopeMap[closureClassInfo.signatureMethod] = closureClassInfo;
         callMethods.add(closureClassInfo.callMethod);
       }
     });
@@ -196,10 +229,18 @@
       ir.FunctionNode node,
       KernelScopeInfo info,
       Map<Local, JRecordField> boxedVariables,
-      Set<ir.Node> localFunctionsNeedingRti,
-      Set<ClassEntity> classesNeedingRti) {
+      bool Function(ir.Node) localFunctionNeedsSignature,
+      bool Function(ClassEntity) classNeedsTypeArguments,
+      bool Function(FunctionEntity) methodNeedsTypeArguments,
+      bool Function(ir.Node) localFunctionNeedsTypeArguments) {
     _updateScopeBasedOnRtiNeed(
-        info, node.parent, localFunctionsNeedingRti, classesNeedingRti, member);
+        info,
+        node.parent,
+        localFunctionNeedsSignature,
+        classNeedsTypeArguments,
+        methodNeedsTypeArguments,
+        localFunctionNeedsTypeArguments,
+        member);
     KernelToLocalsMap localsMap = _globalLocalsMap.getLocalsMap(member);
     KernelClosureClassInfo closureClassInfo =
         closedWorldBuilder.buildClosureClass(
@@ -209,6 +250,8 @@
     // to the correct closure class.
     _memberClosureRepresentationMap[closureClassInfo.callMethod] =
         closureClassInfo;
+    _memberClosureRepresentationMap[closureClassInfo.signatureMethod] =
+        closureClassInfo;
     _globalLocalsMap.setLocalsMap(closureClassInfo.callMethod, localsMap);
     if (node.parent is ir.Member) {
       assert(_elementMap.getMember(node.parent) == member);
@@ -247,6 +290,7 @@
       case MemberKind.constructor:
       case MemberKind.constructorBody:
       case MemberKind.closureCall:
+      case MemberKind.signature:
         return _capturedScopesMap[definition.node] ?? const CapturedScope();
       default:
         throw failedAt(entity, "Unexpected member definition $definition");
@@ -291,8 +335,8 @@
   /// freeVariables set. Whether these variables are actually used as
   /// freeVariables will be set by the time this structure is converted to a
   /// JsScopeInfo, so JsScopeInfo does not need to use them.
-  Set<TypeParameterTypeWithContext> freeVariablesForRti =
-      new Set<TypeParameterTypeWithContext>();
+  Set<TypeVariableTypeWithContext> freeVariablesForRti =
+      new Set<TypeVariableTypeWithContext>();
 
   /// If true, `this` is used as a free variable, in this scope. It is stored
   /// separately from [freeVariables] because there is no single
@@ -338,10 +382,10 @@
 Local _getLocal(ir.Node variable, KernelToLocalsMap localsMap,
     KernelToElementMap elementMap) {
   assert(variable is ir.VariableDeclaration ||
-      variable is TypeParameterTypeWithContext);
+      variable is TypeVariableTypeWithContext);
   if (variable is ir.VariableDeclaration) {
     return localsMap.getLocalVariable(variable);
-  } else if (variable is TypeParameterTypeWithContext) {
+  } else if (variable is TypeVariableTypeWithContext) {
     return localsMap.getLocalTypeVariable(variable.type, elementMap);
   }
   throw new ArgumentError('Only know how to get/create locals for '
@@ -398,7 +442,7 @@
       Set<ir.VariableDeclaration> localsUsedInTryOrSync,
       Set<ir.Node /* VariableDeclaration | TypeParameterTypeWithContext */ >
           freeVariables,
-      Set<TypeParameterTypeWithContext> freeVariablesForRti,
+      Set<TypeVariableTypeWithContext> freeVariablesForRti,
       bool thisUsedAsFreeVariable,
       bool thisUsedAsFreeVariableIfNeedsRti,
       bool hasThisLocal)
@@ -440,7 +484,7 @@
       Set<ir.VariableDeclaration> localsUsedInTryOrSync,
       Set<ir.Node /* VariableDeclaration | TypeParameterTypeWithContext */ >
           freeVariables,
-      Set<TypeParameterTypeWithContext> freeVariablesForRti,
+      Set<TypeVariableTypeWithContext> freeVariablesForRti,
       bool thisUsedAsFreeVariable,
       bool thisUsedAsFreeVariableIfNeedsRti,
       bool hasThisLocal)
@@ -477,6 +521,7 @@
 class KernelClosureClassInfo extends JsScopeInfo
     implements ClosureRepresentationInfo {
   JFunction callMethod;
+  JSignatureMethod signatureMethod;
   final Local closureEntity;
   final Local thisLocal;
   final JClass closureClassEntity;
@@ -775,27 +820,78 @@
       <ir.TreeNode, KernelScopeInfo>{};
 }
 
+enum TypeVariableKind { cls, method, local, function }
+
 /// A fake ir.Node that holds the TypeParameterType as well as the context in
 /// which it occurs.
-class TypeParameterTypeWithContext implements ir.Node {
-  final ir.Node memberContext;
+class TypeVariableTypeWithContext implements ir.Node {
+  final ir.Node context;
   final ir.TypeParameterType type;
-  TypeParameterTypeWithContext(this.type, this.memberContext);
+  final TypeVariableKind kind;
+  final ir.TreeNode typeDeclaration;
+
+  factory TypeVariableTypeWithContext(
+      ir.TypeParameterType type, ir.Member memberContext) {
+    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)`.
+      kind = TypeVariableKind.function;
+    } else if (typeDeclaration is ir.Class) {
+      // We have a class type variable, like `T` in `class Class<T> { ... }`.
+      kind = TypeVariableKind.cls;
+    } else if (typeDeclaration.parent is ir.Member) {
+      ir.Member member = typeDeclaration.parent;
+      if (member is ir.Constructor ||
+          (member is ir.Procedure && member.isFactory)) {
+        // We have a synthesized generic method type variable for a class type
+        // variable.
+        // TODO(johnniwinther): Handle constructor/factory type variables as
+        // method type variables.
+        kind = TypeVariableKind.cls;
+        typeDeclaration = member.enclosingClass;
+      } else {
+        // We have a generic method type variable, like `T` in
+        // `m<T>() { ... }`.
+        kind = TypeVariableKind.method;
+        typeDeclaration = typeDeclaration.parent;
+        context = typeDeclaration;
+      }
+    } else {
+      // We have a generic local function type variable, like `T` in
+      // `m() { local<T>() { ... } ... }`.
+      assert(
+          typeDeclaration.parent is ir.FunctionExpression ||
+              typeDeclaration.parent is ir.FunctionDeclaration,
+          "Unexpected type declaration: $typeDeclaration");
+      kind = TypeVariableKind.local;
+      typeDeclaration = typeDeclaration.parent;
+      context = typeDeclaration;
+    }
+    return new TypeVariableTypeWithContext.internal(
+        type, context, kind, typeDeclaration);
+  }
+
+  TypeVariableTypeWithContext.internal(
+      this.type, this.context, this.kind, this.typeDeclaration);
 
   accept(ir.Visitor v) {
-    throw new UnsupportedError('TypeParameterTypeWithContext.accept');
+    throw new UnsupportedError('TypeVariableTypeWithContext.accept');
   }
 
   visitChildren(ir.Visitor v) {
-    throw new UnsupportedError('TypeParameterTypeWithContext.visitChildren');
+    throw new UnsupportedError('TypeVariableTypeWithContext.visitChildren');
   }
 
   int get hashCode => type.hashCode;
 
   bool operator ==(other) {
-    if (other is! TypeParameterTypeWithContext) return false;
-    return type == other.type && memberContext == other.memberContext;
+    if (other is! TypeVariableTypeWithContext) return false;
+    return type == other.type && context == other.context;
   }
 
-  String toString() => 'TypeParameterTypeWithContext $type $memberContext';
+  String toString() =>
+      'TypeVariableTypeWithContext(type=$type,context=$context,'
+      'kind=$kind,typeDeclaration=$typeDeclaration)';
 }
diff --git a/pkg/compiler/lib/src/js_model/closure_visitors.dart b/pkg/compiler/lib/src/js_model/closure_visitors.dart
index 3cc6a15..941a284 100644
--- a/pkg/compiler/lib/src/js_model/closure_visitors.dart
+++ b/pkg/compiler/lib/src/js_model/closure_visitors.dart
@@ -5,6 +5,7 @@
 import 'package:kernel/ast.dart' as ir;
 
 import '../closure.dart';
+import '../options.dart';
 import 'closure.dart';
 
 /// This builder walks the code to determine what variables are captured/free at
@@ -13,6 +14,8 @@
 class CapturedScopeBuilder extends ir.Visitor {
   ScopeModel _model;
 
+  CompilerOptions _options;
+
   /// A map of each visited call node with the associated information about what
   /// variables are captured/used. Each ir.Node key corresponds to a scope that
   /// was encountered while visiting a closure (initially called through
@@ -61,17 +64,16 @@
 
   final bool _hasThisLocal;
 
-  /// If true add type assetions to assert that at runtime the type is in line
-  /// with the stated type.
-  final bool _addTypeChecks;
-
   /// Keeps track of the number of boxes that we've created so that they each
   /// have unique names.
   int _boxCounter = 0;
 
-  CapturedScopeBuilder(this._model, {bool hasThisLocal, bool addTypeChecks})
-      : this._hasThisLocal = hasThisLocal,
-        this._addTypeChecks = addTypeChecks;
+  CapturedScopeBuilder(this._model, this._options, {bool hasThisLocal})
+      : this._hasThisLocal = hasThisLocal;
+
+  /// If true add type assetions to assert that at runtime the type is in line
+  /// with the stated type.
+  bool get _addTypeChecks => _options.enableTypeAssertions;
 
   /// Update the [CapturedScope] object corresponding to
   /// this node if any variables are captured.
@@ -202,7 +204,7 @@
       ir.Node /* VariableDeclaration | TypeParameterTypeWithContext */ variable,
       {bool onlyForRtiChecks = false}) {
     assert(variable is ir.VariableDeclaration ||
-        variable is TypeParameterTypeWithContext);
+        variable is TypeVariableTypeWithContext);
     if (_isInsideClosure && !_inCurrentContext(variable)) {
       // If the element is not declared in the current function and the element
       // is not the closure itself we need to mark the element as free variable.
@@ -230,33 +232,29 @@
   void visitTypeParameter(ir.TypeParameter typeParameter) {
     if (_addTypeChecks) {
       ir.TreeNode context = _executableContext;
+      TypeVariableTypeWithContext typeVariable =
+          new TypeVariableTypeWithContext(
+              new ir.TypeParameterType(typeParameter),
+              typeParameter.parent.parent);
       if (_isInsideClosure && context is ir.Procedure && context.isFactory) {
         // This is a closure in a factory constructor.  Since there is no
         // [:this:], we have to mark the type arguments as free variables to
         // capture them in the closure.
-        _useTypeVariableAsLocal(new ir.TypeParameterType(typeParameter));
+        _useTypeVariableAsLocal(typeVariable);
       }
 
-      if (_executableContext is ir.Member &&
-          _executableContext is! ir.Field &&
-          _hasThisLocal) {
+      if (_executableContext is ir.Member && _executableContext is! ir.Field) {
         // In checked mode, using a type variable in a type annotation may lead
         // to a runtime type check that needs to access the type argument and
         // therefore the closure needs a this-element, if it is not in a field
         // initializer; field initializers are evaluated in a context where
         // the type arguments are available in locals.
 
-        // TODO(efortuna): This is not correct for the case of type variables on
-        // methods. For example, the code:
-        //     class Foo<T> {
-        //         int bar<E>(...) {
-        //             ...use of E...
-        //         }
-        //     }
-        // We do not need the `this` variable in this case to use E.
-        // Add code to distinguish between this case and the case of a class
-        // type variable (like T, where we need `this`).
-        _registerNeedsThis();
+        if (_hasThisLocal) {
+          _registerNeedsThis();
+        } else {
+          _useTypeVariableAsLocal(typeVariable);
+        }
       }
     }
   }
@@ -423,9 +421,9 @@
   /// context.
   bool _inCurrentContext(ir.Node variable) {
     assert(variable is ir.VariableDeclaration ||
-        variable is TypeParameterTypeWithContext);
-    if (variable is TypeParameterTypeWithContext) {
-      return variable.memberContext == _executableContext;
+        variable is TypeVariableTypeWithContext);
+    if (variable is TypeVariableTypeWithContext) {
+      return variable.context == _executableContext;
     }
     ir.TreeNode node = variable;
     while (node != _outermostNode && node != _executableContext) {
@@ -461,7 +459,14 @@
 
   @override
   visitTypeParameterType(ir.TypeParameterType type) {
-    _analyzeType(type);
+    _analyzeTypeVariable(type);
+  }
+
+  @override
+  visitTypeLiteral(ir.TypeLiteral node) {
+    if (node.type is ir.TypeParameterType) {
+      _analyzeTypeVariable(node.type, onlyIfNeedsRti: false);
+    }
   }
 
   /// Returns true if the node is a field, or a constructor (factory or
@@ -471,22 +476,44 @@
       node is ir.Field ||
       (node is ir.Procedure && node.isFactory);
 
-  void _analyzeType(ir.TypeParameterType type) {
+  void _analyzeTypeVariable(ir.TypeParameterType type,
+      {bool onlyIfNeedsRti: true}) {
     if (_outermostNode is ir.Member) {
-      ir.Member outermostMember = _outermostNode;
-      if (_isFieldOrConstructor(_outermostNode)) {
-        _useTypeVariableAsLocal(type, onlyForRtiChecks: true);
-      } else if (outermostMember.isInstanceMember) {
-        _registerNeedsThis(onlyIfNeedsRti: true);
+      TypeVariableTypeWithContext typeVariable =
+          new TypeVariableTypeWithContext(type, _outermostNode);
+      switch (typeVariable.kind) {
+        case TypeVariableKind.cls:
+          if (_isFieldOrConstructor(_outermostNode)) {
+            // Class type variable used in a field or constructor.
+            _useTypeVariableAsLocal(typeVariable,
+                onlyForRtiChecks: onlyIfNeedsRti);
+          } else {
+            // Class type variable used in a method.
+            _registerNeedsThis(onlyIfNeedsRti: onlyIfNeedsRti);
+          }
+          break;
+        case TypeVariableKind.method:
+        case TypeVariableKind.local:
+          _useTypeVariableAsLocal(typeVariable,
+              onlyForRtiChecks: onlyIfNeedsRti);
+          break;
+        case TypeVariableKind.function:
+        // The type variable is a function type variable, like `T` in
+        //
+        //     List<void Function<T>(T)> list;
+        //
+        // which doesn't correspond to a captured local variable.
       }
     }
   }
 
   /// If [onlyForRtiChecks] is true, the variable will be added to a list
   /// indicating it *may* be used only if runtime type information is checked.
-  void _useTypeVariableAsLocal(ir.TypeParameterType type,
-      {bool onlyForRtiChecks = false}) {
-    _markVariableAsUsed(new TypeParameterTypeWithContext(type, _outermostNode),
-        onlyForRtiChecks: onlyForRtiChecks);
+  void _useTypeVariableAsLocal(TypeVariableTypeWithContext typeVariable,
+      {bool onlyForRtiChecks: false}) {
+    if (typeVariable.kind != TypeVariableKind.cls && !_options.strongMode) {
+      return;
+    }
+    _markVariableAsUsed(typeVariable, onlyForRtiChecks: onlyForRtiChecks);
   }
 }
diff --git a/pkg/compiler/lib/src/js_model/elements.dart b/pkg/compiler/lib/src/js_model/elements.dart
index e9b84a1..df8f603 100644
--- a/pkg/compiler/lib/src/js_model/elements.dart
+++ b/pkg/compiler/lib/src/js_model/elements.dart
@@ -9,7 +9,6 @@
 import '../elements/names.dart';
 import '../elements/types.dart';
 import '../kernel/indexed.dart';
-import 'closure.dart' show KernelClosureClassInfo;
 
 /// Map from 'frontend' to 'backend' elements.
 ///
@@ -522,21 +521,27 @@
 }
 
 class JClosureCallMethod extends JMethod {
-  JClosureCallMethod(KernelClosureClassInfo closureClassInfo,
+  JClosureCallMethod(ClassEntity enclosingClass,
       ParameterStructure parameterStructure, AsyncMarker asyncMarker)
-      : super(
-            closureClassInfo.closureClassEntity.library,
-            closureClassInfo.closureClassEntity,
-            Names.call,
-            parameterStructure,
-            asyncMarker,
-            isStatic: false,
-            isExternal: false,
-            isAbstract: false);
+      : super(enclosingClass.library, enclosingClass, Names.call,
+            parameterStructure, asyncMarker,
+            isStatic: false, isExternal: false, isAbstract: false);
 
   String get _kind => 'closure_call';
 }
 
+/// A method that returns the signature of the Dart closure/tearoff that this
+/// method's parent class is representing.
+class JSignatureMethod extends JMethod {
+  JSignatureMethod(LibraryEntity enclosingLibrary, ClassEntity enclosingClass,
+      ParameterStructure parameterStructure, AsyncMarker asyncMarker)
+      : super(enclosingLibrary, enclosingClass, const PublicName('\$signature'),
+            parameterStructure, asyncMarker,
+            isStatic: false, isExternal: false, isAbstract: false);
+
+  String get _kind => 'signature';
+}
+
 class JTypeVariable extends IndexedTypeVariable {
   final Entity typeDeclaration;
   final String name;
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index 55bda1b..17b9935 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -36,6 +36,7 @@
 import '../kernel/kernel_strategy.dart';
 import '../kernel/kelements.dart';
 import '../native/behavior.dart';
+import '../options.dart';
 import '../ssa/ssa.dart';
 import '../types/types.dart';
 import '../universe/class_set.dart';
@@ -74,8 +75,8 @@
     _commonElements = _elementMap.commonElements;
     _closureDataLookup = new KernelClosureConversionTask(_compiler.measurer,
         _elementMap, _globalLocalsMap, _compiler.options.enableTypeAssertions);
-    JsClosedWorldBuilder closedWorldBuilder =
-        new JsClosedWorldBuilder(_elementMap, _closureDataLookup);
+    JsClosedWorldBuilder closedWorldBuilder = new JsClosedWorldBuilder(
+        _elementMap, _closureDataLookup, _compiler.options);
     return closedWorldBuilder._convertClosedWorld(
         closedWorld, strategy.closureModels);
   }
@@ -186,8 +187,10 @@
       <ClassEntity, ClassHierarchyNode>{};
   final Map<ClassEntity, ClassSet> _classSets = <ClassEntity, ClassSet>{};
   final KernelClosureConversionTask _closureConversionTask;
+  final CompilerOptions _options;
 
-  JsClosedWorldBuilder(this._elementMap, this._closureConversionTask);
+  JsClosedWorldBuilder(
+      this._elementMap, this._closureConversionTask, this._options);
 
   ElementEnvironment get _elementEnvironment => _elementMap.elementEnvironment;
   CommonElements get _commonElements => _elementMap.commonElements;
@@ -264,45 +267,66 @@
     Iterable<MemberEntity> processedMembers =
         map.toBackendMemberSet(closedWorld.processedMembers);
 
-    RuntimeTypesNeedImpl kernelRtiNeed = closedWorld.rtiNeed;
-    Set<ir.Node> localFunctionsNodesNeedingSignature = new Set<ir.Node>();
-    for (KLocalFunction localFunction
-        in kernelRtiNeed.localFunctionsNeedingSignature) {
-      localFunctionsNodesNeedingSignature.add(localFunction.node);
-    }
-    Set<ir.Node> localFunctionsNodesNeedingTypeArguments = new Set<ir.Node>();
-    for (KLocalFunction localFunction
-        in kernelRtiNeed.localFunctionsNeedingTypeArguments) {
-      localFunctionsNodesNeedingTypeArguments.add(localFunction.node);
-    }
+    RuntimeTypesNeed rtiNeed;
+    // ignore: unused_local_variable
+    Iterable<FunctionEntity> callMethods;
 
-    Set<ClassEntity> classesNeedingTypeArguments =
-        map.toBackendClassSet(kernelRtiNeed.classesNeedingTypeArguments);
-    Iterable<FunctionEntity> callMethods =
-        _closureConversionTask.createClosureEntities(
-            this,
-            map.toBackendMemberMap(closureModels, identity),
-            localFunctionsNodesNeedingSignature,
-            classesNeedingTypeArguments);
+    if (_options.disableRtiOptimization) {
+      rtiNeed = new TrivialRuntimeTypesNeed();
+      callMethods = _closureConversionTask.createClosureEntities(
+          this, map.toBackendMemberMap(closureModels, identity),
+          localFunctionNeedsSignature: (_) => true,
+          classNeedsTypeArguments: (_) => true,
+          methodNeedsTypeArguments: (_) => true,
+          localFunctionNeedsTypeArguments: (_) => true);
+    } else {
+      RuntimeTypesNeedImpl kernelRtiNeed = closedWorld.rtiNeed;
+      Set<ir.Node> localFunctionsNodesNeedingSignature = new Set<ir.Node>();
+      for (KLocalFunction localFunction
+          in kernelRtiNeed.localFunctionsNeedingSignature) {
+        localFunctionsNodesNeedingSignature.add(localFunction.node);
+      }
+      Set<ir.Node> localFunctionsNodesNeedingTypeArguments = new Set<ir.Node>();
+      for (KLocalFunction localFunction
+          in kernelRtiNeed.localFunctionsNeedingTypeArguments) {
+        localFunctionsNodesNeedingTypeArguments.add(localFunction.node);
+      }
 
-    List<FunctionEntity> callMethodsNeedingSignature = <FunctionEntity>[];
-    for (ir.Node node in localFunctionsNodesNeedingSignature) {
-      callMethodsNeedingSignature
-          .add(_closureConversionTask.getClosureInfo(node).callMethod);
-    }
-    List<FunctionEntity> callMethodsNeedingTypeArguments = <FunctionEntity>[];
-    for (ir.Node node in localFunctionsNodesNeedingTypeArguments) {
-      callMethodsNeedingTypeArguments
-          .add(_closureConversionTask.getClosureInfo(node).callMethod);
-    }
+      Set<ClassEntity> classesNeedingTypeArguments =
+          map.toBackendClassSet(kernelRtiNeed.classesNeedingTypeArguments);
 
-    RuntimeTypesNeed rtiNeed = _convertRuntimeTypesNeed(
-        map,
-        backendUsage,
-        kernelRtiNeed,
-        callMethodsNeedingSignature,
-        callMethodsNeedingTypeArguments,
-        classesNeedingTypeArguments);
+      Set<FunctionEntity> methodsNeedingTypeArguments =
+          map.toBackendFunctionSet(kernelRtiNeed.methodsNeedingTypeArguments);
+
+      callMethods = _closureConversionTask.createClosureEntities(
+          this, map.toBackendMemberMap(closureModels, identity),
+          localFunctionNeedsSignature:
+              localFunctionsNodesNeedingSignature.contains,
+          classNeedsTypeArguments: classesNeedingTypeArguments.contains,
+          methodNeedsTypeArguments: methodsNeedingTypeArguments.contains,
+          localFunctionNeedsTypeArguments:
+              localFunctionsNodesNeedingTypeArguments.contains);
+
+      List<FunctionEntity> callMethodsNeedingSignature = <FunctionEntity>[];
+      for (ir.Node node in localFunctionsNodesNeedingSignature) {
+        callMethodsNeedingSignature
+            .add(_closureConversionTask.getClosureInfo(node).callMethod);
+      }
+      List<FunctionEntity> callMethodsNeedingTypeArguments = <FunctionEntity>[];
+      for (ir.Node node in localFunctionsNodesNeedingTypeArguments) {
+        callMethodsNeedingTypeArguments
+            .add(_closureConversionTask.getClosureInfo(node).callMethod);
+      }
+
+      rtiNeed = _convertRuntimeTypesNeed(
+          map,
+          backendUsage,
+          kernelRtiNeed,
+          callMethodsNeedingSignature,
+          callMethodsNeedingTypeArguments,
+          classesNeedingTypeArguments,
+          methodsNeedingTypeArguments);
+    }
 
     NoSuchMethodDataImpl oldNoSuchMethodData = closedWorld.noSuchMethodData;
     NoSuchMethodData noSuchMethodData = new NoSuchMethodDataImpl(
@@ -324,7 +348,10 @@
         classSets: _classSets,
         implementedClasses: implementedClasses,
         liveNativeClasses: liveNativeClasses,
-        liveInstanceMembers: liveInstanceMembers..addAll(callMethods),
+        // TODO(johnniwinther): Include the call method when we can also
+        // represent the synthesized call methods for static and instance method
+        // closurizations.
+        liveInstanceMembers: liveInstanceMembers /*..addAll(callMethods)*/,
         assignedInstanceMembers: assignedInstanceMembers,
         processedMembers: processedMembers,
         mixinUses: mixinUses,
@@ -474,15 +501,14 @@
       RuntimeTypesNeedImpl rtiNeed,
       List<FunctionEntity> callMethodsNeedingSignature,
       List<FunctionEntity> callMethodsNeedingTypeArguments,
-      Set<ClassEntity> classesNeedingTypeArguments) {
+      Set<ClassEntity> classesNeedingTypeArguments,
+      Set<FunctionEntity> methodsNeedingTypeArguments) {
     Set<FunctionEntity> methodsNeedingSignature =
         map.toBackendFunctionSet(rtiNeed.methodsNeedingSignature);
     methodsNeedingSignature.addAll(callMethodsNeedingSignature);
-    Set<FunctionEntity> methodsNeedingTypeArguments =
-        map.toBackendFunctionSet(rtiNeed.methodsNeedingTypeArguments);
     methodsNeedingTypeArguments.addAll(callMethodsNeedingTypeArguments);
     Set<ClassEntity> classesUsingTypeVariableExpression =
-        map.toBackendClassSet(rtiNeed.classesUsingTypeVariableExpression);
+        map.toBackendClassSet(rtiNeed.classesUsingTypeVariableLiterals);
     return new RuntimeTypesNeedImpl(
         _elementEnvironment,
         backendUsage,
diff --git a/pkg/compiler/lib/src/kernel/deferred_load.dart b/pkg/compiler/lib/src/kernel/deferred_load.dart
index 0117c71..f2641c6 100644
--- a/pkg/compiler/lib/src/kernel/deferred_load.dart
+++ b/pkg/compiler/lib/src/kernel/deferred_load.dart
@@ -145,16 +145,16 @@
       constants.add(elementMap.getConstantValue(node));
 
   @override
-  void visitIntLiteral(ir.IntLiteral literal) => add(literal);
+  void visitIntLiteral(ir.IntLiteral literal) {}
 
   @override
-  void visitDoubleLiteral(ir.DoubleLiteral literal) => add(literal);
+  void visitDoubleLiteral(ir.DoubleLiteral literal) {}
 
   @override
-  void visitBoolLiteral(ir.BoolLiteral literal) => add(literal);
+  void visitBoolLiteral(ir.BoolLiteral literal) {}
 
   @override
-  void visitStringLiteral(ir.StringLiteral literal) => add(literal);
+  void visitStringLiteral(ir.StringLiteral literal) {}
 
   @override
   void visitSymbolLiteral(ir.SymbolLiteral literal) => add(literal);
diff --git a/pkg/compiler/lib/src/kernel/element_map.dart b/pkg/compiler/lib/src/kernel/element_map.dart
index 2d256cc..097def4 100644
--- a/pkg/compiler/lib/src/kernel/element_map.dart
+++ b/pkg/compiler/lib/src/kernel/element_map.dart
@@ -255,6 +255,10 @@
   // A field corresponding to a captured variable in the closure. It does not
   // have a corresponding ir.Node.
   closureField,
+  // A method that describes the type of a function (in this case the type of
+  // the closure class. It does not have a corresponding ir.Node or a method
+  // body.
+  signature,
 }
 
 /// Definition information for a [MemberEntity].
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index c212e70..c9e1de2 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -2439,6 +2439,22 @@
       closureEntity = new JLocal('', localsMap.currentMember);
     }
 
+    FunctionEntity callMethod = new JClosureCallMethod(
+        classEntity, _getParameterStructure(node), getAsyncMarker(node));
+    _nestedClosureMap
+        .putIfAbsent(member, () => <FunctionEntity>[])
+        .add(callMethod);
+    // We need create the type variable here - before we try to make local
+    // variables from them (in `JsScopeInfo.from` called through
+    // `KernelClosureClassInfo.fromScopeInfo` below).
+    int index = 0;
+    for (ir.TypeParameter typeParameter in node.typeParameters) {
+      _typeVariableMap[typeParameter] = _typeVariables.register(
+          createTypeVariable(callMethod, typeParameter.name, index),
+          new TypeVariableData(typeParameter));
+      index++;
+    }
+
     KernelClosureClassInfo closureClassInfo =
         new KernelClosureClassInfo.fromScopeInfo(
             classEntity,
@@ -2452,18 +2468,11 @@
     _buildClosureClassFields(closureClassInfo, member, memberThisType, info,
         localsMap, recordFieldsVisibleInScope, memberMap);
 
-    FunctionEntity callMethod = new JClosureCallMethod(
-        closureClassInfo, _getParameterStructure(node), getAsyncMarker(node));
-    _nestedClosureMap
-        .putIfAbsent(member, () => <FunctionEntity>[])
-        .add(callMethod);
-    int index = 0;
-    for (ir.TypeParameter typeParameter in node.typeParameters) {
-      _typeVariableMap[typeParameter] = _typeVariables.register(
-          createTypeVariable(callMethod, typeParameter.name, index),
-          new TypeVariableData(typeParameter));
-      index++;
+    if (options.addMethodSignatures) {
+      _constructSignatureMethod(closureClassInfo, memberMap, node,
+          memberThisType, location, typeVariableAccess);
     }
+
     _members.register<IndexedFunction, FunctionData>(
         callMethod,
         new ClosureFunctionData(
@@ -2543,7 +2552,7 @@
               fieldNumber);
           fieldNumber++;
         }
-      } else if (variable is TypeParameterTypeWithContext) {
+      } else if (variable is TypeVariableTypeWithContext) {
         _constructClosureField(
             localsMap.getLocalTypeVariable(variable.type, this),
             closureClassInfo,
@@ -2602,6 +2611,32 @@
     return true;
   }
 
+  void _constructSignatureMethod(
+      KernelClosureClassInfo closureClassInfo,
+      Map<String, MemberEntity> memberMap,
+      ir.FunctionNode closureSourceNode,
+      InterfaceType memberThisType,
+      SourceSpan location,
+      ClassTypeVariableAccess typeVariableAccess) {
+    FunctionEntity signatureMethod = new JSignatureMethod(
+        closureClassInfo.closureClassEntity.library,
+        closureClassInfo.closureClassEntity,
+        // SignatureMethod takes no arguments.
+        const ParameterStructure(0, 0, const [], 0),
+        getAsyncMarker(closureSourceNode));
+    _members.register<IndexedFunction, FunctionData>(
+        signatureMethod,
+        new SignatureFunctionData(
+            new SpecialMemberDefinition(signatureMethod,
+                closureSourceNode.parent, MemberKind.signature),
+            memberThisType,
+            null,
+            closureSourceNode.typeParameters,
+            typeVariableAccess));
+    memberMap[signatureMethod.name] =
+        closureClassInfo.signatureMethod = signatureMethod;
+  }
+
   _constructClosureField(
       Local capturedLocal,
       KernelClosureClassInfo closureClassInfo,
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index 37d97ef..8d9f0d6 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -644,6 +644,43 @@
   }
 }
 
+class SignatureFunctionData implements FunctionData {
+  final FunctionType functionType;
+  final MemberDefinition definition;
+  final InterfaceType memberThisType;
+  final ClassTypeVariableAccess classTypeVariableAccess;
+  final List<ir.TypeParameter> typeParameters;
+
+  SignatureFunctionData(this.definition, this.memberThisType, this.functionType,
+      this.typeParameters, this.classTypeVariableAccess);
+
+  FunctionType getFunctionType(covariant KernelToElementMapBase elementMap) {
+    return functionType;
+  }
+
+  List<TypeVariableType> getFunctionTypeVariables(
+      KernelToElementMap elementMap) {
+    return typeParameters
+        .map<TypeVariableType>((ir.TypeParameter typeParameter) {
+      return elementMap.getDartType(new ir.TypeParameterType(typeParameter));
+    }).toList();
+  }
+
+  void forEachParameter(KernelToElementMapForBuilding elementMap,
+      void f(DartType type, String name, ConstantValue defaultValue)) {
+    throw new UnimplementedError('SignatureData.forEachParameter');
+  }
+
+  @override
+  Iterable<ConstantValue> getMetadata(KernelToElementMap elementMap) {
+    return const <ConstantValue>[];
+  }
+
+  InterfaceType getMemberThisType(KernelToElementMapForBuilding elementMap) {
+    return memberThisType;
+  }
+}
+
 abstract class ConstructorData extends FunctionData {
   ConstantConstructor getConstructorConstant(
       KernelToElementMapBase elementMap, ConstructorEntity constructor);
diff --git a/pkg/compiler/lib/src/kernel/kernel_strategy.dart b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
index 2146eba..f58417e 100644
--- a/pkg/compiler/lib/src/kernel/kernel_strategy.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
@@ -248,7 +248,7 @@
         WorldImpact worldImpact =
             _impactTransformer.transformResolutionImpact(impact);
         if (impactCache != null) {
-          impactCache[element] = impact;
+          impactCache[element] = worldImpact;
         }
         return worldImpact;
       });
diff --git a/pkg/compiler/lib/src/library_loader.dart b/pkg/compiler/lib/src/library_loader.dart
index b0e0610..e79d5da 100644
--- a/pkg/compiler/lib/src/library_loader.dart
+++ b/pkg/compiler/lib/src/library_loader.dart
@@ -1657,7 +1657,10 @@
     assert(rootLibrary != null);
   }
 
-  bool containsLibrary(Uri uri) => getLibrary(uri) != null;
+  bool containsLibrary(Uri uri) {
+    var lib = getLibrary(uri);
+    return lib != null && _newLibraries.contains(lib);
+  }
 
   LibraryEntity getLibrary(Uri uri) => worldBuilder.lookupLibrary(uri);
 
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 26c7d71..129af4d 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -259,6 +259,12 @@
   /// This is an experimental feature.
   final String experimentalAllocationsPath;
 
+  /// Add signatures to closures that return the type of the original closure
+  /// call. Currently hidden behind a flag because this interacts with generic
+  /// function types and strong mode, hitting some edge cases that have not yet
+  /// been implemented.
+  final bool addMethodSignatures;
+
   // -------------------------------------------------
   // Options for deprecated features
   // -------------------------------------------------
@@ -336,6 +342,7 @@
         sourceMapUri: _extractUriOption(options, '--source-map='),
         strips: _extractCsvOption(options, '--force-strip='),
         strongMode: _hasOption(options, Flags.strongMode),
+        addMethodSignatures: _hasOption(options, Flags.addMethodSignatures),
         testMode: _hasOption(options, Flags.testMode),
         trustJSInteropTypeAnnotations:
             _hasOption(options, Flags.trustJSInteropTypeAnnotations),
@@ -403,6 +410,7 @@
       Uri sourceMapUri: null,
       List<String> strips: const [],
       bool strongMode: false,
+      bool addMethodSignatures: false,
       bool testMode: false,
       bool trustJSInteropTypeAnnotations: false,
       bool trustPrimitives: false,
@@ -485,6 +493,7 @@
         sourceMapUri: sourceMapUri,
         strips: strips,
         strongMode: strongMode,
+        addMethodSignatures: addMethodSignatures,
         testMode: testMode,
         trustJSInteropTypeAnnotations: trustJSInteropTypeAnnotations,
         trustPrimitives: trustPrimitives,
@@ -539,6 +548,7 @@
       this.sourceMapUri: null,
       this.strips: const [],
       this.strongMode: false,
+      this.addMethodSignatures: false,
       this.testMode: false,
       this.trustJSInteropTypeAnnotations: false,
       this.trustPrimitives: false,
@@ -601,6 +611,7 @@
       sourceMapUri,
       strips,
       strongMode,
+      addMethodSignatures,
       testMode,
       trustJSInteropTypeAnnotations,
       trustPrimitives,
@@ -671,6 +682,7 @@
         sourceMapUri: sourceMapUri ?? options.sourceMapUri,
         strips: strips ?? options.strips,
         strongMode: strongMode ?? options.strongMode,
+        addMethodSignatures: addMethodSignatures ?? options.addMethodSignatures,
         testMode: testMode ?? options.testMode,
         trustJSInteropTypeAnnotations: trustJSInteropTypeAnnotations ??
             options.trustJSInteropTypeAnnotations,
diff --git a/pkg/compiler/lib/src/resolution/deferred_load.dart b/pkg/compiler/lib/src/resolution/deferred_load.dart
index 04e4fbf..5824e16 100644
--- a/pkg/compiler/lib/src/resolution/deferred_load.dart
+++ b/pkg/compiler/lib/src/resolution/deferred_load.dart
@@ -15,6 +15,7 @@
         AstElement,
         AccessorElement,
         ClassElement,
+        ConstructorElement,
         Element,
         ExportElement,
         ImportElement,
@@ -145,6 +146,11 @@
     TreeElements treeElements = element.resolvedAst.elements;
     assert(treeElements != null);
 
+    Set<ast.Node> metadataNodes = element.implementation.metadata
+        .map((m) => m.node)
+        .toSet()
+          ..addAll(element.declaration.metadata.map((m) => m.node));
+
     // TODO(johnniwinther): Add only expressions that are actually needed.
     // Currently we have some noise here: Some potential expressions are
     // seen that should never be added (for instance field initializers
@@ -154,6 +160,7 @@
     // See dartbug.com/26406 for context.
     treeElements
         .forEachConstantNode((ast.Node node, ConstantExpression expression) {
+      if (metadataNodes.contains(node)) return;
       if (compiler.serialization.isDeserialized(element)) {
         if (!expression.isPotential) {
           // Enforce evaluation of [expression].
@@ -366,4 +373,10 @@
     assert(result != null);
     return result;
   }
+
+  bool ignoreEntityInDump(covariant Element element) =>
+      // origin element will already be dumped.
+      element.isPatch ||
+      // redirecting factories are not visible to the kernel ir
+      element is ConstructorElement && element.isRedirectingFactory;
 }
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 424bc55..5c6a96f 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -228,6 +228,23 @@
         case MemberKind.closureField:
           failedAt(targetElement, "Unexpected closure field: $targetElement");
           break;
+        case MemberKind.signature:
+          ir.Node target = definition.node;
+          ir.FunctionNode originalClosureNode;
+          if (target is ir.Procedure) {
+            originalClosureNode = target.function;
+          } else if (target is ir.FunctionExpression) {
+            originalClosureNode = target.function;
+          } else if (target is ir.FunctionDeclaration) {
+            originalClosureNode = target.function;
+          } else {
+            failedAt(
+                targetElement,
+                "Unexpected function signature: "
+                "$targetElement inside a non-closure: $target");
+          }
+          buildMethodSignature(originalClosureNode);
+          break;
       }
       assert(graph.isValid());
 
@@ -482,8 +499,8 @@
       // Create the runtime type information, if needed.
       bool hasRtiInput = closedWorld.rtiNeed.classNeedsRtiField(cls);
       if (hasRtiInput) {
-        // Read the values of the type arguments and create a HTypeInfoExpression
-        // to set on the newly create object.
+        // Read the values of the type arguments and create a
+        // HTypeInfoExpression to set on the newly created object.
         List<HInstruction> typeArguments = <HInstruction>[];
         InterfaceType thisType =
             _elementMap.elementEnvironment.getThisType(cls);
@@ -870,6 +887,35 @@
     localsHandler.scopeInfo = oldScopeInfo;
   }
 
+  /// Constructs a special signature function for a closure. It is unique in
+  /// that no corresponding ir.Node actually exists for it. We just use the
+  /// targetElement.
+  void buildMethodSignature(ir.FunctionNode originalClosureNode) {
+    openFunction(targetElement);
+    List<HInstruction> typeArguments = <HInstruction>[];
+
+    // Add function type variables.
+    FunctionType functionType =
+        _elementMap.getFunctionType(originalClosureNode);
+    functionType.forEachTypeVariable((TypeVariableType typeVariableType) {
+      DartType result = localsHandler.substInContext(typeVariableType);
+      HInstruction argument =
+          typeBuilder.analyzeTypeArgument(result, sourceElement);
+      typeArguments.add(argument);
+    });
+    push(new HTypeInfoExpression(
+        TypeInfoExpressionKind.COMPLETE,
+        _elementMap.getFunctionType(originalClosureNode),
+        typeArguments,
+        commonMasks.functionType));
+    HInstruction value = pop();
+    close(new HReturn(
+            value, _sourceInformationBuilder.buildReturn(originalClosureNode)))
+        .addSuccessor(graph.exit);
+
+    closeFunction();
+  }
+
   /// Builds generative constructor body.
   void buildConstructorBody(ir.Constructor constructor) {
     openFunction(
@@ -2566,7 +2612,8 @@
           // there is no prefix the old FE wouldn't treat this in any special
           // way. Also, if the prefix points to a constant in the main output
           // unit, the old FE would still generate a deferred wrapper here.
-          if (!unit.isMainOutput) {
+          if (!compiler.backend.outputUnitData
+              .hasOnlyNonDeferredImportPaths(targetElement, field)) {
             stack.add(graph.addDeferredConstant(
                 value, unit, sourceInformation, compiler, closedWorld));
           } else {
@@ -3003,7 +3050,12 @@
     }
 
     if (isFixedListConstructorCall) {
-      assert(arguments.length == 1);
+      assert(
+          arguments.length == 1,
+          failedAt(
+              function,
+              "Unexpected arguments. "
+              "Expected 1 argument, actual: $arguments."));
       HInstruction lengthInput = arguments.first;
       if (!lengthInput.isNumber(closedWorld)) {
         HTypeConversion conversion = new HTypeConversion(
@@ -3816,6 +3868,22 @@
   }
 
   @override
+  void visitInstantiation(ir.Instantiation node) {
+    var arguments = <HInstruction>[];
+    node.expression.accept(this);
+    arguments.add(pop());
+    for (ir.DartType type in node.typeArguments) {
+      HInstruction instruction = typeBuilder.analyzeTypeArgument(
+          _elementMap.getDartType(type), sourceElement);
+      arguments.add(instruction);
+    }
+    Selector selector =
+        new Selector.genericInstantiation(node.typeArguments.length);
+    _pushDynamicInvocation(node, commonMasks.functionType, selector, arguments,
+        null /*_sourceInformationBuilder.?*/);
+  }
+
+  @override
   void visitMethodInvocation(ir.MethodInvocation invocation) {
     invocation.receiver.accept(this);
     HInstruction receiver = pop();
diff --git a/pkg/compiler/lib/src/universe/call_structure.dart b/pkg/compiler/lib/src/universe/call_structure.dart
index b05f853..f20d529 100644
--- a/pkg/compiler/lib/src/universe/call_structure.dart
+++ b/pkg/compiler/lib/src/universe/call_structure.dart
@@ -19,6 +19,9 @@
   static const CallStructure TWO_ARGS = const CallStructure.unnamed(2);
   static const CallStructure THREE_ARGS = const CallStructure.unnamed(3);
 
+  /// The number of type arguments of the call.
+  final int typeArgumentCount;
+
   /// The numbers of arguments of the call. Includes named arguments.
   final int argumentCount;
 
@@ -28,9 +31,6 @@
   /// The number of positional argument of the call.
   int get positionalArgumentCount => argumentCount;
 
-  /// The number of type argument of the call.
-  final int typeArgumentCount;
-
   const CallStructure.unnamed(this.argumentCount, [this.typeArgumentCount = 0]);
 
   factory CallStructure(int argumentCount,
diff --git a/pkg/compiler/lib/src/universe/member_usage.dart b/pkg/compiler/lib/src/universe/member_usage.dart
index 9248c0b..de15737 100644
--- a/pkg/compiler/lib/src/universe/member_usage.dart
+++ b/pkg/compiler/lib/src/universe/member_usage.dart
@@ -203,7 +203,14 @@
   bool hasInvoke = false;
   bool hasRead = false;
 
-  _FunctionUsage(FunctionEntity function) : super.internal(function);
+  _FunctionUsage(FunctionEntity function) : super.internal(function) {
+    if (function is JSignatureMethod) {
+      // We mark signature methods as "always used" to prevent them from being
+      // optimized away.
+      // TODO(johnniwinther): Make this a part of the regular enqueueing.
+      invoke();
+    }
+  }
 
   EnumSet<MemberUse> get _originalUse =>
       entity.isInstanceMember ? MemberUses.ALL_INSTANCE : MemberUses.ALL_STATIC;
diff --git a/pkg/compiler/lib/src/universe/selector.dart b/pkg/compiler/lib/src/universe/selector.dart
index 6332157..e03e640 100644
--- a/pkg/compiler/lib/src/universe/selector.dart
+++ b/pkg/compiler/lib/src/universe/selector.dart
@@ -23,6 +23,7 @@
   static const SelectorKind CALL = const SelectorKind('call', 2);
   static const SelectorKind OPERATOR = const SelectorKind('operator', 3);
   static const SelectorKind INDEX = const SelectorKind('index', 4);
+  static const SelectorKind SPECIAL = const SelectorKind('special', 5);
 
   int get index => hashCode;
 
@@ -33,7 +34,8 @@
     SETTER,
     CALL,
     OPERATOR,
-    INDEX
+    INDEX,
+    SPECIAL
   ];
 }
 
@@ -47,6 +49,7 @@
   int get argumentCount => callStructure.argumentCount;
   int get namedArgumentCount => callStructure.namedArgumentCount;
   int get positionalArgumentCount => callStructure.positionalArgumentCount;
+  int get typeArgumentCount => callStructure.typeArgumentCount;
   List<String> get namedArguments => callStructure.namedArguments;
 
   String get name => memberName.text;
@@ -182,6 +185,11 @@
   factory Selector.callDefaultConstructor() => new Selector(
       SelectorKind.CALL, const PublicName(''), CallStructure.NO_ARGS);
 
+  factory Selector.genericInstantiation(int typeArguments) => new Selector(
+      SelectorKind.SPECIAL,
+      Names.genericInstantiation,
+      new CallStructure(0, null, typeArguments));
+
   bool get isGetter => kind == SelectorKind.GETTER;
   bool get isSetter => kind == SelectorKind.SETTER;
   bool get isCall => kind == SelectorKind.CALL;
diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart
index 330d84f..8b1269f 100644
--- a/pkg/compiler/lib/src/universe/world_builder.dart
+++ b/pkg/compiler/lib/src/universe/world_builder.dart
@@ -25,6 +25,7 @@
 import '../js_backend/no_such_method_registry.dart';
 import '../js_backend/runtime_types.dart';
 import '../js_model/locals.dart';
+import '../js_model/elements.dart' show JSignatureMethod;
 import '../kernel/element_map_impl.dart';
 import '../native/enqueue.dart' show NativeResolutionEnqueuer;
 import '../options.dart';
diff --git a/pkg/compiler/lib/src/use_unused_api.dart b/pkg/compiler/lib/src/use_unused_api.dart
index 08601ea..fa487cb 100644
--- a/pkg/compiler/lib/src/use_unused_api.dart
+++ b/pkg/compiler/lib/src/use_unused_api.dart
@@ -254,7 +254,7 @@
   closedWorld.getClassHierarchyNode(null);
   closedWorld.getClassSet(null);
   closedWorld.haveAnyCommonSubtypes(null, null);
-  typeGraphInferrer.getCallersOf(null);
+  typeGraphInferrer.getCallersOfForTesting(null);
   dart_types.Types.sorted(null);
   new dart_types.Types(null).copy(null);
 }
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index a91d346..d1353b1 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -1388,7 +1388,10 @@
     assert(callMethod != null, failedAt(cls, "No call method in $cls"));
     assert(_allFunctions == null,
         failedAt(cls, "Function set has already be created."));
-    liveInstanceMembers.add(callMethod);
+    // TODO(johnniwinther): Include the call method when we can also represent
+    // the synthesized call methods for static and instance method
+    // closurizations.
+    //liveInstanceMembers.add(callMethod);
   }
 
   void _updateSuperClassHierarchyNodeForClass(ClassHierarchyNode node) {
diff --git a/pkg/compiler/testing_dart.json b/pkg/compiler/testing_dart.json
index 3441f2a..428cfd2 100644
--- a/pkg/compiler/testing_dart.json
+++ b/pkg/compiler/testing_dart.json
@@ -15,45 +15,47 @@
 
     "exclude": [
       "^tests/compiler/dart2js/codegen_helper\\.dart",
+      "^tests/compiler/dart2js/codegen/type_inference8_test\\.dart",
       "^tests/compiler/dart2js/constant_expression_evaluate_test\\.dart",
       "^tests/compiler/dart2js/constant_expression_test\\.dart",
-      "^tests/compiler/dart2js/data/mirrors_helper\\.dart",
       "^tests/compiler/dart2js/data/one_line_dart_program\\.dart",
       "^tests/compiler/dart2js/deferred/inline_restrictions_test\\.dart",
       "^tests/compiler/dart2js/deferred/load_graph_segmentation2_test\\.dart",
       "^tests/compiler/dart2js/deferred/load_graph_segmentation_test\\.dart",
-      "^tests/compiler/dart2js/mirrors/deferred_mirrors_test\\.dart",
       "^tests/compiler/dart2js/deferred/not_in_main_test\\.dart",
       "^tests/compiler/dart2js/in_user_code_test\\.dart",
-      "^tests/compiler/dart2js/jsinterop/world_test\\.dart",
-      "^tests/compiler/dart2js/kernel/class_hierarchy_test\\.dart",
-      "^tests/compiler/dart2js/kernel/closed_world_test\\.dart",
-      "^tests/compiler/dart2js/kernel/visitor_test\\.dart",
-      "^tests/compiler/dart2js/memory_compiler\\.dart",
-      "^tests/compiler/dart2js/old_frontend/message_kind_helper\\.dart",
-      "^tests/compiler/dart2js/old_frontend/metadata_test\\.dart",
-      "^tests/compiler/dart2js/mirrors/mirrors_used_test\\.dart",
-      "^tests/compiler/dart2js/mixin_typevariable_test\\.dart",
-      "^tests/compiler/dart2js/needs_no_such_method_test\\.dart",
-      "^tests/compiler/dart2js/no_such_method_enabled_test\\.dart",
-      "^tests/compiler/dart2js/output_collector\\.dart",
-      "^tests/compiler/dart2js/old_frontend/patch_test\\.dart",
-      "^tests/compiler/dart2js/quarantined/http_launch_data/http_launch_main_package\\.dart",
-      "^tests/compiler/dart2js/quarantined/http_test\\.dart",
-      "^tests/compiler/dart2js/old_frontend/reexport_handled_test\\.dart",
-      "^tests/compiler/dart2js/old_frontend/resolution_test\\.dart",
-      "^tests/compiler/dart2js/serialization/analysis_test_helper\\.dart",
-      "^tests/compiler/dart2js/serialization/compilation_test_helper\\.dart",
-      "^tests/compiler/dart2js/serialization/duplicate_library_test\\.dart",
-      "^tests/compiler/dart2js/serialization/equivalence_test\\.dart",
-      "^tests/compiler/dart2js/serialization/model_test_helper\\.dart",
-      "^tests/compiler/dart2js/serialization/test_helper\\.dart",
       "^tests/compiler/dart2js/inference/data/super_invoke\\.dart",
       "^tests/compiler/dart2js/inference/simple_inferrer_closure_test\\.dart",
       "^tests/compiler/dart2js/inference/simple_inferrer_const_closure2_test\\.dart",
       "^tests/compiler/dart2js/inference/simple_inferrer_const_closure_test\\.dart",
       "^tests/compiler/dart2js/inference/simple_inferrer_global_field_closure_test\\.dart",
       "^tests/compiler/dart2js/inference/simple_inferrer_test\\.dart",
+      "^tests/compiler/dart2js/inference/type_mask2_test\\.dart",
+      "^tests/compiler/dart2js/jsinterop/world_test\\.dart",
+      "^tests/compiler/dart2js/kernel/class_hierarchy_test\\.dart",
+      "^tests/compiler/dart2js/kernel/closed_world_test\\.dart",
+      "^tests/compiler/dart2js/kernel/visitor_test\\.dart",
+      "^tests/compiler/dart2js/memory_compiler\\.dart",
+      "^tests/compiler/dart2js/mirrors/data/mirrors_helper\\.dart",
+      "^tests/compiler/dart2js/mirrors/deferred_mirrors_test\\.dart",
+      "^tests/compiler/dart2js/mirrors/mirrors_used_test\\.dart",
+      "^tests/compiler/dart2js/mixin_typevariable_test\\.dart",
+      "^tests/compiler/dart2js/needs_no_such_method_test\\.dart",
+      "^tests/compiler/dart2js/no_such_method_enabled_test\\.dart",
+      "^tests/compiler/dart2js/output_collector\\.dart",
+      "^tests/compiler/dart2js/old_frontend/patch_test\\.dart",
+      "^tests/compiler/dart2js/old_frontend/message_kind_helper\\.dart",
+      "^tests/compiler/dart2js/old_frontend/metadata_test\\.dart",
+      "^tests/compiler/dart2js/old_frontend/reexport_handled_test\\.dart",
+      "^tests/compiler/dart2js/old_frontend/resolution_test\\.dart",
+      "^tests/compiler/dart2js/quarantined/http_launch_data/http_launch_main_package\\.dart",
+      "^tests/compiler/dart2js/quarantined/http_test\\.dart",
+      "^tests/compiler/dart2js/serialization/analysis_test_helper\\.dart",
+      "^tests/compiler/dart2js/serialization/compilation_test_helper\\.dart",
+      "^tests/compiler/dart2js/serialization/duplicate_library_test\\.dart",
+      "^tests/compiler/dart2js/serialization/equivalence_test\\.dart",
+      "^tests/compiler/dart2js/serialization/model_test_helper\\.dart",
+      "^tests/compiler/dart2js/serialization/test_helper\\.dart",
       "^tests/compiler/dart2js/sourcemaps/helpers/source_map_validator_helper\\.dart",
       "^tests/compiler/dart2js/sourcemaps/diff_view\\.dart",
       "^tests/compiler/dart2js/sourcemaps/html_parts\\.dart",
@@ -69,8 +71,6 @@
       "^tests/compiler/dart2js/subtype_test\\.dart",
       "^tests/compiler/dart2js/subtypeset_test\\.dart",
       "^tests/compiler/dart2js/token_naming_test\\.dart",
-      "^tests/compiler/dart2js/inference/type_inference8_test\\.dart",
-      "^tests/compiler/dart2js/inference/type_mask2_test\\.dart",
       "^tests/compiler/dart2js/type_representation_test\\.dart",
       "^tests/compiler/dart2js/type_substitution_test\\.dart",
       "^tests/compiler/dart2js/type_variable_occurrence_test\\.dart",
diff --git a/pkg/compiler/tool/status_files/update_all.dart b/pkg/compiler/tool/status_files/update_all.dart
new file mode 100644
index 0000000..09310ab
--- /dev/null
+++ b/pkg/compiler/tool/status_files/update_all.dart
@@ -0,0 +1,127 @@
+// 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.
+
+// Script to update the dart2js status lines for all tests running with the
+// $dart2js_with_kernel test configuration.
+
+import 'dart:io';
+import 'package:args/args.dart';
+import 'update_from_log.dart' as update_script;
+
+const List<String> strongSuites = const <String>[
+  'language_2',
+  'corelib_2',
+];
+
+const List<String> nonStrongSuites = const <String>[
+  'dart2js_native',
+  'dart2js_extra',
+  'language',
+  'corelib',
+  'html',
+];
+
+main(List<String> args) {
+  ArgParser argParser = new ArgParser(allowTrailingOptions: true)
+    ..addFlag('with-fast-startup')
+    ..addFlag('fast-startup')
+    ..addFlag('strong')
+    ..addFlag('with-checked-mode')
+    ..addFlag('checked-mode')
+    ..addFlag('checked');
+  ArgResults argResults = argParser.parse(args);
+  bool fastStartup =
+      argResults['with-fast-startup'] || argResults['fast-startup'];
+  bool strong = argResults['strong'];
+  bool checkedMode = argResults['with-checked-mode'] ||
+      argResults['checked-mode'] ||
+      argResults['checked'];
+  List<String> suites = argResults.rest;
+  if (suites.isEmpty) {
+    if (strong) {
+      suites = strongSuites;
+    } else {
+      suites = nonStrongSuites;
+    }
+    if (Platform.isWindows) {
+      // TODO(johnniwinther): Running drt seems to be broken on Windows.
+      suites = new List<String>.from(suites)..remove('html');
+    }
+  } else {
+    bool failure = false;
+    for (String suite in suites) {
+      if (strongSuites.contains(suite) && nonStrongSuites.contains(suite)) {
+        print("Unknown suite '$suite'");
+        failure = true;
+      }
+    }
+    if (failure) {
+      exit(1);
+    }
+  }
+
+  Directory tmp = Directory.systemTemp.createTempSync('update_all');
+
+  String python = Platform.isWindows ? 'python.exe' : 'python';
+
+  updateSuiteWithFlags(
+      String name, String suite, String runtime, List<String> args) {
+    if (strong) {
+      name = "$name-strong";
+      args.add('--strong');
+    }
+
+    print("  - $name tests");
+    List<String> testArgs = [
+      './tools/test.py',
+      '-m',
+      'release',
+      '-c',
+      'dart2js',
+      '-r',
+      runtime,
+      '--dart2js-batch',
+      '--dart2js-with-kernel'
+    ];
+    testArgs.addAll(args);
+    testArgs.add(suite);
+    String temp = '${tmp.path}/$suite-$name.txt';
+    ProcessResult result = Process.runSync(python, testArgs);
+    String stdout = result.stdout.toString();
+    new File(temp).writeAsStringSync(stdout);
+    print(temp);
+    update_script.main([name, temp]);
+  }
+
+  updateSuite(String suite) {
+    String runtime = "d8";
+    if (suite == "html") {
+      runtime = "drt";
+    }
+    print("update suite: \u001b[32m$suite\u001b[0m");
+
+    updateSuiteWithFlags(
+        'minified', suite, runtime, ["--minified", "--use-sdk"]);
+    updateSuiteWithFlags('host-checked', suite, runtime, ["--host-checked"]);
+    if (fastStartup) {
+      updateSuiteWithFlags('fast-startup', suite, runtime, ["--fast-startup"]);
+    }
+    if (checkedMode) {
+      updateSuiteWithFlags('checked-mode', suite, runtime, ["--checked"]);
+    }
+  }
+
+  print('build create_sdk');
+  ProcessResult result = Process
+      .runSync(python, ['./tools/build.py', '-m', 'release', 'create_sdk']);
+  if (result.exitCode != 0) {
+    print(result.stdout);
+    print(result.stderr);
+    exit(1);
+  }
+
+  suites.forEach(updateSuite);
+
+  tmp.deleteSync(recursive: true);
+}
diff --git a/pkg/compiler/tool/status_files/update_all.sh b/pkg/compiler/tool/status_files/update_all.sh
deleted file mode 100755
index 96453a2..0000000
--- a/pkg/compiler/tool/status_files/update_all.sh
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/usr/bin/env bash
-# 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.
-
-# Script to update the dart2js status lines for all tests running with the
-# $dart2js_with_kernel test configuration.
-
-suites=
-
-for arg in "$@"; do
-  case $arg in
-    dart2js_native|dart2js_extra|language|language_2|corelib|corelib_2|html)
-      suites="$suites $arg"
-      ;;
-    --with-fast-startup|--fast-startup)
-      fast_startup=true
-      ;;
-    --strong)
-      strong=true
-      ;;
-    --with-checked-mode|--checked-mode|--checked)
-      checked_mode=true
-      ;;
-    -*)
-      echo "Unknown option '$arg'"
-      exit 1
-      ;;
-    *)
-      echo "Unknown suite '$arg'"
-      exit 1
-      ;;
-  esac
-done
-
-if [ -z "$suites" ]; then
-  if [[ "$strong" == true ]]; then
-    suites="language_2 corelib_2"
-  else
-    suites="dart2js_native dart2js_extra language corelib html"
-  fi
-fi
-
-repodir=$(cd $(dirname ${BASH_SOURCE[0]})/../../../../; pwd)
-dart="out/ReleaseX64/dart"
-update_script=$(dirname ${BASH_SOURCE[0]})/update_from_log.dart
-binaries_dir=out/ReleaseX64
-
-tmp=$(mktemp -d)
-
-function update_suite_with_flags {
-  local name=$1
-  local suite=$2
-  shift 2
-  local args=$@
-  if [[ "$strong" == true ]]; then
-    name="$name-strong"
-    args="--strong $args"
-  fi
-
-  echo "  - $name tests"
-  ./tools/test.py -m release -c dart2js -r $runtime --dart2js-batch \
-      --dart2js-with-kernel $args $suite > $tmp/$suite-$name.txt
-  echo $tmp/$suite-$name.txt
-  $dart $update_script $name $tmp/$suite-$name.txt
-}
-
-function update_suite {
-  local suite=$1
-  local runtime="d8"
-  if [ "$suite" == "html" ]; then
-    runtime="drt"
-  fi
-  echo -e "\nupdate suite: [32m$suite[0m"
-  update_suite_with_flags minified $suite "--minified --use-sdk"
-  update_suite_with_flags host-checked $suite "--host-checked"
-  if [ "$fast_startup" = true ]; then
-    update_suite_with_flags fast-startup $suite "--fast-startup"
-  fi
-  if [ "$checked_mode" = true ]; then
-    update_suite_with_flags checked-mode $suite "--checked"
-  fi
-}
-
-
-pushd $repodir > /dev/null
-./tools/build.py -m release create_sdk
-
-for suite in $suites; do
-  update_suite $suite
-done
-
-rm -rf $tmp
-popd > /dev/null
diff --git a/pkg/compiler/tool/status_files/update_from_log.dart b/pkg/compiler/tool/status_files/update_from_log.dart
index af5afdb..3a525cf 100644
--- a/pkg/compiler/tool/status_files/update_from_log.dart
+++ b/pkg/compiler/tool/status_files/update_from_log.dart
@@ -78,7 +78,8 @@
     exit(1);
   }
 
-  var uri = Uri.base.resolve(args[1]);
+  var uri =
+      Uri.base.resolveUri(new Uri.file(args[1], windows: Platform.isWindows));
   var file = new File.fromUri(uri);
   if (!file.existsSync()) {
     print('file not found: $file');
@@ -105,6 +106,10 @@
     if (section?.suite != record.suite) {
       section?.update(globalReason);
       var statusFile = statusFiles[record.suite];
+      if (statusFile == null) {
+        print("No status file for suite '${record.suite}'.");
+        continue;
+      }
       var condition = configurations[mode];
       section = ConfigurationInSuiteSection.create(
           record.suite, mode, statusFile, condition);
diff --git a/pkg/dart_messages/lib/generated/shared_messages.json b/pkg/dart_messages/lib/generated/shared_messages.json
index d53c338..d0e6532 100644
--- a/pkg/dart_messages/lib/generated/shared_messages.json
+++ b/pkg/dart_messages/lib/generated/shared_messages.json
@@ -80,8 +80,6 @@
       "var abstract foo; main(){}",
       "var static foo; main(){}",
       "var external foo; main(){}",
-      "get var foo; main(){}",
-      "set var foo; main(){}",
       "final var foo; main(){}",
       "var var foo; main(){}",
       "const var foo; main(){}",
diff --git a/pkg/dart_messages/lib/shared_messages.dart b/pkg/dart_messages/lib/shared_messages.dart
index 4113fa6..cadf550 100644
--- a/pkg/dart_messages/lib/shared_messages.dart
+++ b/pkg/dart_messages/lib/shared_messages.dart
@@ -198,8 +198,6 @@
         "var abstract foo; main(){}",
         "var static foo; main(){}",
         "var external foo; main(){}",
-        "get var foo; main(){}",
-        "set var foo; main(){}",
         "final var foo; main(){}",
         "var var foo; main(){}",
         "const var foo; main(){}",
diff --git a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
index bb2c765..d08f1e3 100644
--- a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
@@ -3898,93 +3898,91 @@
 
   /// Emits code for the `JS(...)` macro.
   JS.Node _emitForeignJS(MethodInvocation node, Element e) {
-    if (isInlineJS(e)) {
-      var args = node.argumentList.arguments;
-      // arg[0] is static return type, used in `RestrictedStaticTypeAnalyzer`
-      var code = args[1];
-      List<Expression> templateArgs;
-      String source;
-      if (code is StringInterpolation) {
-        if (args.length > 2) {
-          throw new ArgumentError(
-              "Can't mix template args and string interpolation in JS calls.");
-        }
-        templateArgs = <Expression>[];
-        source = code.elements.map((element) {
-          if (element is InterpolationExpression) {
-            templateArgs.add(element.expression);
-            return '#';
-          } else {
-            return (element as InterpolationString).value;
-          }
-        }).join();
-      } else {
-        templateArgs = args.skip(2).toList();
-        source = (code as StringLiteral).stringValue;
-      }
+    if (!isInlineJS(e)) return null;
 
-      // TODO(vsm): Constructors in dart:html and friends are trying to
-      // allocate a type defined on window/self, but this often conflicts a
-      // with the generated extension class in scope.  We really should
-      // qualify explicitly in dart:html itself.
-      var constructorPattern = new RegExp("new [A-Z][A-Za-z]+\\(");
-      if (constructorPattern.matchAsPrefix(source) != null) {
-        var containingClass = node.parent;
-        while (
-            containingClass != null && containingClass is! ClassDeclaration) {
-          containingClass = containingClass.parent;
+    var args = node.argumentList.arguments;
+    // arg[0] is static return type, used in `RestrictedStaticTypeAnalyzer`
+    var code = args[1];
+    List<Expression> templateArgs;
+    String source;
+    if (code is StringInterpolation) {
+      if (args.length > 2) {
+        throw new ArgumentError(
+            "Can't mix template args and string interpolation in JS calls.");
+      }
+      templateArgs = <Expression>[];
+      source = code.elements.map((element) {
+        if (element is InterpolationExpression) {
+          templateArgs.add(element.expression);
+          return '#';
+        } else {
+          return (element as InterpolationString).value;
         }
-        if (containingClass is ClassDeclaration &&
-            _extensionTypes.isNativeClass(containingClass.element)) {
-          var constructorName = source.substring(4, source.indexOf('('));
-          var className = containingClass.name.name;
-          if (className == constructorName) {
-            source =
-                source.replaceFirst('new $className(', 'new self.$className(');
-          }
+      }).join();
+    } else {
+      templateArgs = args.skip(2).toList();
+      source = (code as StringLiteral).stringValue;
+    }
+
+    // TODO(vsm): Constructors in dart:html and friends are trying to
+    // allocate a type defined on window/self, but this often conflicts a
+    // with the generated extension class in scope.  We really should
+    // qualify explicitly in dart:html itself.
+    var constructorPattern = new RegExp("new [A-Z][A-Za-z]+\\(");
+    if (constructorPattern.matchAsPrefix(source) != null) {
+      var containingClass = node.parent;
+      while (containingClass != null && containingClass is! ClassDeclaration) {
+        containingClass = containingClass.parent;
+      }
+      if (containingClass is ClassDeclaration &&
+          _extensionTypes.isNativeClass(containingClass.element)) {
+        var constructorName = source.substring(4, source.indexOf('('));
+        var className = containingClass.name.name;
+        if (className == constructorName) {
+          source =
+              source.replaceFirst('new $className(', 'new self.$className(');
         }
       }
+    }
 
-      JS.Expression visitTemplateArg(Expression arg) {
-        if (arg is InvocationExpression) {
-          var e = arg is MethodInvocation
-              ? arg.methodName.staticElement
-              : (arg as FunctionExpressionInvocation).staticElement;
-          if (e?.name == 'getGenericClass' &&
-              e.library.name == 'dart._runtime' &&
-              arg.argumentList.arguments.length == 1) {
-            var typeArg = arg.argumentList.arguments[0];
-            if (typeArg is SimpleIdentifier) {
-              var typeElem = typeArg.staticElement;
-              if (typeElem is TypeDefiningElement &&
-                  typeElem.type is ParameterizedType) {
-                return _emitTopLevelNameNoInterop(typeElem, suffix: '\$');
-              }
+    JS.Expression visitTemplateArg(Expression arg) {
+      if (arg is InvocationExpression) {
+        var e = arg is MethodInvocation
+            ? arg.methodName.staticElement
+            : (arg as FunctionExpressionInvocation).staticElement;
+        if (e?.name == 'getGenericClass' &&
+            e.library.name == 'dart._runtime' &&
+            arg.argumentList.arguments.length == 1) {
+          var typeArg = arg.argumentList.arguments[0];
+          if (typeArg is SimpleIdentifier) {
+            var typeElem = typeArg.staticElement;
+            if (typeElem is TypeDefiningElement &&
+                typeElem.type is ParameterizedType) {
+              return _emitTopLevelNameNoInterop(typeElem, suffix: '\$');
             }
           }
         }
-        return _visitExpression(arg);
       }
-
-      // TODO(rnystrom): The JS() calls are almost never nested, and probably
-      // really shouldn't be, but there are at least a couple of calls in the
-      // HTML library where an argument to JS() is itself a JS() call. If those
-      // go away, this can just assert(!_isInForeignJS).
-      // Inside JS(), type names evaluate to the raw runtime type, not the
-      // wrapped Type object.
-      var wasInForeignJS = _isInForeignJS;
-      _isInForeignJS = true;
-      var jsArgs = templateArgs.map(visitTemplateArg).toList();
-      _isInForeignJS = wasInForeignJS;
-
-      var result = js.parseForeignJS(source).instantiate(jsArgs);
-
-      // `throw` is emitted as a statement by `parseForeignJS`.
-      assert(result is JS.Expression ||
-          result is JS.Throw && node.parent is ExpressionStatement);
-      return result;
+      return _visitExpression(arg);
     }
-    return null;
+
+    // TODO(rnystrom): The JS() calls are almost never nested, and probably
+    // really shouldn't be, but there are at least a couple of calls in the
+    // HTML library where an argument to JS() is itself a JS() call. If those
+    // go away, this can just assert(!_isInForeignJS).
+    // Inside JS(), type names evaluate to the raw runtime type, not the
+    // wrapped Type object.
+    var wasInForeignJS = _isInForeignJS;
+    _isInForeignJS = true;
+    var jsArgs = templateArgs.map(visitTemplateArg).toList();
+    _isInForeignJS = wasInForeignJS;
+
+    var result = js.parseForeignJS(source).instantiate(jsArgs);
+
+    // `throw` is emitted as a statement by `parseForeignJS`.
+    assert(result is JS.Expression ||
+        result is JS.Throw && node.parent is ExpressionStatement);
+    return result;
   }
 
   @override
diff --git a/pkg/dev_compiler/lib/src/analyzer/js_interop.dart b/pkg/dev_compiler/lib/src/analyzer/js_interop.dart
index 768f48e..4e76a27 100644
--- a/pkg/dev_compiler/lib/src/analyzer/js_interop.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/js_interop.dart
@@ -71,10 +71,10 @@
     isBuiltinAnnotation(value, '_js_helper', 'Native');
 
 bool isNotNullAnnotation(DartObjectImpl value) =>
-    isBuiltinAnnotation(value, '_js_helper', 'NotNull');
+    isBuiltinAnnotation(value, '_js_helper', '_NotNull');
 
 bool isNullCheckAnnotation(DartObjectImpl value) =>
-    isBuiltinAnnotation(value, '_js_helper', 'NullCheck');
+    isBuiltinAnnotation(value, '_js_helper', '_NullCheck');
 
 /// Returns the name value of the `JSExportName` annotation (when compiling
 /// the SDK), or `null` if there's none. This is used to control the name
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index ca2474d..2c07cf0 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -11,7 +11,6 @@
 import 'package:front_end/src/api_prototype/standard_file_system.dart';
 import 'package:front_end/src/api_unstable/ddc.dart' as fe;
 import 'package:front_end/src/multi_root_file_system.dart';
-import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart';
 import 'package:path/path.dart' as path;
 import 'package:source_maps/source_maps.dart';
@@ -152,9 +151,7 @@
       .map((s) => stringToCustomUri(s, multiRoots, customScheme))
       .toList();
 
-  var sdkSummaryPath = argResults['dart-sdk-summary'] ??
-      path.join(path.dirname(path.dirname(Platform.resolvedExecutable)), 'lib',
-          '_internal', 'ddc_sdk.dill');
+  var sdkSummaryPath = argResults['dart-sdk-summary'] ?? defaultSdkSummaryPath;
 
   var packageFile =
       argResults['packages'] ?? path.absolute(ddcPath, '..', '..', '.packages');
@@ -219,7 +216,7 @@
 
 JS.Program compileToJSModule(Program p, List<Program> summaries,
     List<Uri> summaryUris, Map<String, String> declaredVariables) {
-  var compiler = new ProgramCompiler(new NativeTypeSet(p, new CoreTypes(p)),
+  var compiler = new ProgramCompiler(new NativeTypeSet(p),
       declaredVariables: declaredVariables);
   return compiler.emitProgram(p, summaries, summaryUris);
 }
@@ -375,3 +372,10 @@
 
   return declaredVariables;
 }
+
+/// The default path of the kernel summary for the Dart SDK.
+final defaultSdkSummaryPath = path.join(
+    path.dirname(path.dirname(Platform.resolvedExecutable)),
+    'lib',
+    '_internal',
+    'ddc_sdk.dill');
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 4f76e3e..f1f7661 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -9,7 +9,6 @@
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart' hide ConstantVisitor;
-import 'package:kernel/src/incremental_class_hierarchy.dart';
 import 'package:kernel/type_algebra.dart';
 import 'package:kernel/type_environment.dart';
 
@@ -22,6 +21,7 @@
 import 'js_typerep.dart';
 import 'kernel_helpers.dart';
 import 'native_types.dart';
+import 'nullable_inference.dart';
 import 'property_model.dart';
 import 'type_table.dart';
 
@@ -188,6 +188,8 @@
 
   final ConstantVisitor _constants;
 
+  NullableInference _nullableInference;
+
   ProgramCompiler(NativeTypeSet nativeTypes,
       {this.emitMetadata: true,
       this.replCompile: false,
@@ -195,24 +197,26 @@
       : _extensionTypes = nativeTypes,
         coreTypes = nativeTypes.coreTypes,
         _constants = new ConstantVisitor(nativeTypes.coreTypes),
-        types = new TypeSchemaEnvironment(
-            nativeTypes.coreTypes, new IncrementalClassHierarchy(), true),
-        _jsArrayClass = nativeTypes.getClass('dart:_interceptors', 'JSArray'),
+        types = new TypeSchemaEnvironment(nativeTypes.coreTypes,
+            new ClassHierarchy.deprecated_incremental(), true),
+        _jsArrayClass =
+            nativeTypes.sdk.getClass('dart:_interceptors', 'JSArray'),
         _asyncStreamIteratorClass =
-            nativeTypes.getClass('dart:async', 'StreamIterator'),
+            nativeTypes.sdk.getClass('dart:async', 'StreamIterator'),
         privateSymbolClass =
-            nativeTypes.getClass('dart:_js_helper', 'PrivateSymbol'),
+            nativeTypes.sdk.getClass('dart:_js_helper', 'PrivateSymbol'),
         linkedHashMapImplClass =
-            nativeTypes.getClass('dart:_js_helper', 'LinkedMap'),
+            nativeTypes.sdk.getClass('dart:_js_helper', 'LinkedMap'),
         identityHashMapImplClass =
-            nativeTypes.getClass('dart:_js_helper', 'IdentityMap'),
+            nativeTypes.sdk.getClass('dart:_js_helper', 'IdentityMap'),
         linkedHashSetImplClass =
-            nativeTypes.getClass('dart:collection', '_HashSet'),
+            nativeTypes.sdk.getClass('dart:collection', '_HashSet'),
         identityHashSetImplClass =
-            nativeTypes.getClass('dart:collection', '_IdentityHashSet'),
+            nativeTypes.sdk.getClass('dart:collection', '_IdentityHashSet'),
         syncIterableClass =
-            nativeTypes.getClass('dart:_js_helper', 'SyncIterable') {
-    _typeRep = new JSTypeRep(types, coreTypes);
+            nativeTypes.sdk.getClass('dart:_js_helper', 'SyncIterable') {
+    _typeRep = new JSTypeRep(types, nativeTypes.sdk);
+    _nullableInference = new NullableInference(_typeRep);
   }
 
   ClassHierarchy get hierarchy => types.hierarchy;
@@ -240,6 +244,7 @@
       // There is JS code in dart:* that depends on their names.
       _runtimeModule = new JS.Identifier('dart');
       _extensionSymbolsModule = new JS.Identifier('dartx');
+      _nullableInference.allowNotNullDeclarations = true;
     } else {
       // Otherwise allow these to be renamed so users can write them.
       _runtimeModule = new JS.TemporaryId('dart');
@@ -652,7 +657,7 @@
         var jsParams = _emitFormalParameters(ctor.function);
         var ctorBody = <JS.Statement>[];
         if (mixinCtor != null) ctorBody.add(mixinCtor);
-        if (ctor.name != '' || hasUnnamedSuper) {
+        if (ctor.name.name != '' || hasUnnamedSuper) {
           ctorBody.add(
               _emitSuperConstructorCall(className, ctor.name.name, jsParams));
         }
@@ -1263,18 +1268,10 @@
   JS.Expression _emitConstructor(Constructor node, List<Field> fields,
       bool isCallable, JS.Expression className) {
     var params = _emitFormalParameters(node.function);
-
-    var savedFunction = _currentFunction;
-    var savedLetVariables = _letVariables;
-    _currentFunction = node.function;
-    _letVariables = [];
-    var savedSuperAllowed = _superAllowed;
-    _superAllowed = false;
-    var body = _emitConstructorBody(node, fields, className);
-
-    _letVariables = savedLetVariables;
-    _superAllowed = savedSuperAllowed;
-    _currentFunction = savedFunction;
+    var body = _withCurrentFunction(
+        node.function,
+        () => _superDisallowed(
+            () => _emitConstructorBody(node, fields, className)));
 
     return _finishConstructorFunction(params, body, isCallable);
   }
@@ -1732,8 +1729,7 @@
   ///
   /// Same technique is applied if interface I has fields, and C doesn't declare
   /// neither the fields nor the corresponding getters and setters.
-  Iterable<JS.Method> _addMockMembers(
-      Member member, Class c, List<JS.Method> jsMethods) {
+  void _addMockMembers(Member member, Class c, List<JS.Method> jsMethods) {
     JS.Method implementMockMember(
         List<TypeParameter> typeParameters,
         List<VariableDeclaration> namedParameters,
@@ -2032,12 +2028,12 @@
     var lazyFields = <Field>[];
     for (var field in fields) {
       // Skip our magic undefined constant.
-      if (field.name == 'undefined') continue;
+      if (field.name.name == 'undefined') continue;
 
       var init = field.initializer;
       if (init == null ||
           init is BasicLiteral ||
-          _isJSInvocation(init) ||
+          _isInlineJSCall(init) ||
           init is ConstructorInvocation &&
               isSdkInternalRuntime(init.target.enclosingLibrary)) {
         _moduleItems.add(js.statement('# = #;', [
@@ -2051,9 +2047,6 @@
     return _emitLazyFields(_currentLibrary, lazyFields);
   }
 
-  bool _isJSInvocation(Expression expr) =>
-      expr is StaticInvocation && isInlineJS(expr.target);
-
   JS.Statement _emitLazyFields(NamedNode target, Iterable<Field> fields) {
     var accessors = <JS.Method>[];
     for (var field in fields) {
@@ -2690,30 +2683,28 @@
     // using ES6 generators.
 
     emitGeneratorFn(Iterable<JS.Expression> getParameters(JS.Block jsBody)) {
-      var savedSuperAllowed = _superAllowed;
       var savedController = _asyncStarController;
-      _superAllowed = false;
-
       _asyncStarController = function.asyncMarker == AsyncMarker.AsyncStar
           ? new JS.TemporaryId('stream')
           : null;
 
-      // Visit the body with our async* controller set.
-      //
-      // TODO(jmesserly): this will emit argument initializers (for default
-      // values) inside the generator function body. Is that the best place?
-      var jsBody = _emitFunctionBody(function)..sourceInformation = function;
-      JS.Expression gen =
-          new JS.Fun(getParameters(jsBody), jsBody, isGenerator: true);
+      JS.Expression gen;
+      _superDisallowed(() {
+        // Visit the body with our async* controller set.
+        //
+        // TODO(jmesserly): this will emit argument initializers (for default
+        // values) inside the generator function body. Is that the best place?
+        var jsBody = _emitFunctionBody(function)..sourceInformation = function;
+        gen = new JS.Fun(getParameters(jsBody), jsBody, isGenerator: true);
 
-      // Name the function if possible, to get better stack traces.
-      if (name != null) {
-        name = JS.friendlyNameForDartOperator[name] ?? name;
-        gen = new JS.NamedFunction(new JS.TemporaryId(name), gen);
-      }
-      if (JS.This.foundIn(gen)) gen = js.call('#.bind(this)', gen);
+        // Name the function if possible, to get better stack traces.
+        if (name != null) {
+          name = JS.friendlyNameForDartOperator[name] ?? name;
+          gen = new JS.NamedFunction(new JS.TemporaryId(name), gen);
+        }
+        if (JS.This.foundIn(gen)) gen = js.call('#.bind(this)', gen);
+      });
 
-      _superAllowed = savedSuperAllowed;
       _asyncStarController = savedController;
       return gen;
     }
@@ -2795,18 +2786,13 @@
   }
 
   JS.Block _emitFunctionBody(FunctionNode f) {
-    var savedFunction = _currentFunction;
-    _currentFunction = f;
-    var savedLetVariables = _letVariables;
-    _letVariables = [];
-
-    var block = _emitArgumentInitializers(f);
-    var jsBody = _visitStatement(f.body);
-    if (jsBody != null) addStatementToList(jsBody, block);
-
-    _initTempVars(block);
-    _currentFunction = savedFunction;
-    _letVariables = savedLetVariables;
+    List<JS.Statement> block;
+    _withCurrentFunction(f, () {
+      block = _emitArgumentInitializers(f);
+      var jsBody = _visitStatement(f.body);
+      if (jsBody != null) addStatementToList(jsBody, block);
+      _initTempVars(block);
+    });
 
     if (f.asyncMarker == AsyncMarker.Sync) {
       // It is a JS syntax error to use let or const to bind two variables with
@@ -2826,6 +2812,29 @@
     return new JS.Block(block);
   }
 
+  T _withCurrentFunction<T>(FunctionNode fn, T action()) {
+    var savedFunction = _currentFunction;
+    _currentFunction = fn;
+    var savedLetVariables = _letVariables;
+    _letVariables = [];
+    _nullableInference.enterFunction(fn);
+
+    var result = action();
+
+    _nullableInference.exitFunction(fn);
+    _currentFunction = savedFunction;
+    _letVariables = savedLetVariables;
+    return result;
+  }
+
+  T _superDisallowed<T>(T action()) {
+    var savedSuperAllowed = _superAllowed;
+    _superAllowed = false;
+    var result = action();
+    _superAllowed = savedSuperAllowed;
+    return result;
+  }
+
   /// Emits argument initializers, which handles optional/named args, as well
   /// as generic type checks needed due to our covariance.
   List<JS.Statement> _emitArgumentInitializers(FunctionNode f) {
@@ -2889,7 +2898,7 @@
   }
 
   bool _annotatedNullCheck(List<Expression> annotations) =>
-      annotations.any(isNullCheckAnnotation);
+      annotations.any(_nullableInference.isNullCheckAnnotation);
 
   JS.Statement _nullParameterCheck(JS.Expression param) {
     var call = _callHelper('argumentError((#))', [param]);
@@ -3019,8 +3028,14 @@
   defaultStatement(Statement node) => _emitInvalidNode(node).toStatement();
 
   @override
-  visitExpressionStatement(ExpressionStatement node) =>
-      _visitAndMarkExpression(node.expression).toStatement();
+  visitExpressionStatement(ExpressionStatement node) {
+    var expr = node.expression;
+    if (_isInlineJSCall(expr)) {
+      var inlineJS = _emitInlineJSCode(expr);
+      return inlineJS is JS.Expression ? inlineJS.toStatement() : inlineJS;
+    }
+    return _visitAndMarkExpression(expr).toStatement();
+  }
 
   @override
   visitBlock(Block node) =>
@@ -3122,7 +3137,7 @@
     // target.
     var current = node.target;
     while (current is LabeledStatement) {
-      current = (current as LabeledStatement).body;
+      current = current.body;
     }
     if (identical(current, target)) {
       return new JS.Break(name);
@@ -3419,12 +3434,10 @@
   @override
   visitTryFinally(TryFinally node) {
     var body = _visitStatement(node.body);
-    var savedSuperAllowed = _superAllowed;
-    _superAllowed = false;
-    var finallyBlock = _visitStatement(node.finalizer).toBlock();
-    _superAllowed = savedSuperAllowed;
+    var finallyBlock =
+        _superDisallowed(() => _visitStatement(node.finalizer).toBlock());
 
-    if (body is JS.Try && (body as JS.Try).finallyPart == null) {
+    if (body is JS.Try && body.finallyPart == null) {
       // Kernel represents Dart try/catch/finally as try/catch nested inside of
       // try/finally.  Flatten that pattern in the output into JS try/catch/
       // finally.
@@ -4085,13 +4098,11 @@
 
   @override
   visitStaticInvocation(StaticInvocation node) {
-    var result = _emitForeignJS(node);
-    if (result != null) return result;
-    if (node.target.isFactory) {
-      return _emitFactoryInvocation(node);
-    }
     var target = node.target;
-    if (target?.name == 'extensionSymbol' &&
+    if (isInlineJS(target)) return _emitInlineJSCode(node);
+    if (target.isFactory) return _emitFactoryInvocation(node);
+
+    if (target.name.name == 'extensionSymbol' &&
         isSdkInternalRuntime(target.enclosingLibrary)) {
       var args = node.arguments;
       var firstArg = args.positional.length == 1 ? args.positional[0] : null;
@@ -4147,27 +4158,32 @@
   }
 
   /// Emits code for the `JS(...)` macro.
-  JS.Expression _emitForeignJS(StaticInvocation node) {
-    if (!isInlineJS(node.target)) return null;
+  JS.Node _emitInlineJSCode(StaticInvocation node) {
     var args = node.arguments.positional;
     // arg[0] is static return type, used in `RestrictedStaticTypeAnalyzer`
     var code = args[1];
     List<Expression> templateArgs;
     String source;
     if (code is StringConcatenation) {
-      if (args.length > 2) {
-        throw new ArgumentError(
-            "Can't mix template args and string interpolation in JS calls.");
-      }
-      templateArgs = <Expression>[];
-      source = code.expressions.map((expression) {
-        if (expression is StringLiteral) {
-          return expression.value;
-        } else {
-          templateArgs.add(expression);
-          return '#';
+      if (code.expressions.every((e) => e is StringLiteral)) {
+        templateArgs = args.skip(2).toList();
+        source = code.expressions.map((e) => (e as StringLiteral).value).join();
+      } else {
+        if (args.length > 2) {
+          throw new ArgumentError(
+              "Can't mix template args and string interpolation in JS calls: "
+              "`$node`");
         }
-      }).join();
+        templateArgs = <Expression>[];
+        source = code.expressions.map((expression) {
+          if (expression is StringLiteral) {
+            return expression.value;
+          } else {
+            templateArgs.add(expression);
+            return '#';
+          }
+        }).join();
+      }
     } else {
       templateArgs = args.skip(2).toList();
       source = (code as StringLiteral).value;
@@ -4198,7 +4214,7 @@
       if (arg is StaticInvocation) {
         var target = arg.target;
         var positional = arg.arguments.positional;
-        if (target.name == 'getGenericClass' &&
+        if (target.name.name == 'getGenericClass' &&
             isSdkInternalRuntime(target.enclosingLibrary) &&
             positional.length == 1) {
           var typeArg = positional[0];
@@ -4256,45 +4272,7 @@
   ///
   /// If [localIsNullable] is not supplied, this will use the known list of
   /// [_notNullLocals].
-  bool isNullable(Expression expr) {
-    // TODO(jmesserly): we do recursive calls in a few places. This could
-    // leads to O(depth) cost for calling this function. We could store the
-    // resulting value if that becomes an issue, so we maintain the invariant
-    // that each node is visited once.
-    if (expr is PropertyGet) {
-      var target = expr.interfaceTarget;
-      // tear-offs are not null, other accessors are nullable.
-      return target is Procedure && target.isAccessor;
-    }
-    if (expr is StaticGet) {
-      var target = expr.target;
-      // tear-offs are not null, other accessors are nullable.
-      return target is Field || (target is Procedure && target.isGetter);
-    }
-
-    if (expr is TypeLiteral) return false;
-    if (expr is BasicLiteral) return expr.value == null;
-    if (expr is IsExpression) return false;
-    if (expr is FunctionExpression) return false;
-    if (expr is ThisExpression) return false;
-    if (expr is ConditionalExpression) {
-      return isNullable(expr.then) || isNullable(expr.otherwise);
-    }
-    if (expr is ConstructorInvocation) return false;
-    if (expr is LogicalExpression) return false;
-    if (expr is Not) return false;
-    if (expr is StaticInvocation) {
-      return expr.target != coreTypes.identicalProcedure;
-    }
-    if (expr is DirectMethodInvocation) {
-      // TODO(jmesserly): this is to capture that our primitive classes
-      // (int, double, num, bool, String) do not return null from their
-      // operator methods.
-      return !isPrimitiveType(expr.target.enclosingClass.rawType);
-    }
-    // TODO(jmesserly): handle other cases.
-    return true;
-  }
+  bool isNullable(Expression expr) => _nullableInference.isNullable(expr);
 
   bool isPrimitiveType(DartType t) => _typeRep.isPrimitive(t);
 
@@ -4391,9 +4369,9 @@
         case 'Map':
         case 'HashMap':
         case 'LinkedHashMap':
-          if (ctor.name == '') {
+          if (ctor.name.name == '') {
             return js.call('new #.new()', _emitMapImplType(type));
-          } else if (ctor.name == 'identity') {
+          } else if (ctor.name.name == 'identity') {
             return js.call(
                 'new #.new()', _emitMapImplType(type, identity: true));
           }
@@ -4401,15 +4379,15 @@
         case 'Set':
         case 'HashSet':
         case 'LinkedHashSet':
-          if (ctor.name == '') {
+          if (ctor.name.name == '') {
             return js.call('new #.new()', _emitSetImplType(type));
-          } else if (ctor.name == 'identity') {
+          } else if (ctor.name.name == 'identity') {
             return js.call(
                 'new #.new()', _emitSetImplType(type, identity: true));
           }
           break;
         case 'List':
-          if (ctor.name == '' && type is InterfaceType) {
+          if (ctor.name.name == '' && type is InterfaceType) {
             return _emitList(type.typeArguments[0], []);
           }
           break;
@@ -4542,9 +4520,9 @@
   @override
   visitAsExpression(AsExpression node) {
     Expression fromExpr = node.operand;
-    var from = fromExpr.getStaticType(types);
     var to = node.type;
     var jsFrom = _visitAndMarkExpression(fromExpr);
+    var from = fromExpr.getStaticType(types);
 
     // If the check was put here by static analysis to ensure soundness, we
     // can't skip it. For example, one could implement covariant generic caller
@@ -4563,15 +4541,9 @@
     //        c.add('hi);
     //      }
     //
-    // NOTE: due to implementation details, we do not currently reify the the
-    // `C<T>.add` check in CoercionReifier, so it does not reach this point;
-    // rather we check for it explicitly when emitting methods and fields.
-    // However we do reify the `c.f` check, so we must not eliminate it.
     var isTypeError = node.isTypeError;
     if (!isTypeError && types.isSubtypeOf(from, to)) return jsFrom;
 
-    // TODO(jmesserly): implicit function type instantiation for kernel?
-
     // All Dart number types map to a JS double.
     if (_typeRep.isNumber(from) && _typeRep.isNumber(to)) {
       // Make sure to check when converting to int.
@@ -4773,7 +4745,10 @@
 
   @override
   visitInstantiation(Instantiation node) {
-    return defaultExpression(node);
+    return _callHelper('gbind(#, #)', [
+      _visitExpression(node.expression),
+      node.typeArguments.map(_emitType).toList()
+    ]);
   }
 
   @override
@@ -4891,13 +4866,12 @@
     if (statements.length != 1) return false;
     body = statements[0];
   }
-  if (body is ReturnStatement) {
-    var e = body.expression;
-    return e is MethodInvocation && isInlineJS(e.interfaceTarget);
-  }
-  return false;
+  return body is ReturnStatement && _isInlineJSCall(body.expression);
 }
 
+bool _isInlineJSCall(Expression expr) =>
+    expr is StaticInvocation && isInlineJS(expr.target);
+
 /// Return true if this is one of the methods/properties on all Dart Objects
 /// (toString, hashCode, noSuchMethod, runtimeType).
 ///
diff --git a/pkg/dev_compiler/lib/src/kernel/js_interop.dart b/pkg/dev_compiler/lib/src/kernel/js_interop.dart
index 6c1a551..7147be1 100644
--- a/pkg/dev_compiler/lib/src/kernel/js_interop.dart
+++ b/pkg/dev_compiler/lib/src/kernel/js_interop.dart
@@ -75,12 +75,6 @@
 bool isNativeAnnotation(Expression value) =>
     _isBuiltinAnnotation(value, '_js_helper', 'Native');
 
-bool isNotNullAnnotation(Expression value) =>
-    _isBuiltinAnnotation(value, '_js_helper', 'NotNull');
-
-bool isNullCheckAnnotation(Expression value) =>
-    _isBuiltinAnnotation(value, '_js_helper', 'NullCheck');
-
 bool isJSAnonymousType(Class namedClass) {
   return _isJSNative(namedClass) &&
       findAnnotation(namedClass, isJSAnonymousAnnotation) != null;
diff --git a/pkg/dev_compiler/lib/src/kernel/js_typerep.dart b/pkg/dev_compiler/lib/src/kernel/js_typerep.dart
index 8876cae..0f2a383 100644
--- a/pkg/dev_compiler/lib/src/kernel/js_typerep.dart
+++ b/pkg/dev_compiler/lib/src/kernel/js_typerep.dart
@@ -2,8 +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:kernel/kernel.dart';
 import 'package:kernel/core_types.dart';
+import 'package:kernel/kernel.dart';
+import 'package:kernel/library_index.dart';
 import 'package:kernel/type_environment.dart';
 
 /// An abstraction of the JS types
@@ -88,8 +89,17 @@
 class JSTypeRep {
   final TypeEnvironment types;
   final CoreTypes coreTypes;
+  final LibraryIndex sdk;
 
-  JSTypeRep(this.types, this.coreTypes);
+  final Class _jsBool;
+  final Class _jsNumber;
+
+  final Class _jsString;
+  JSTypeRep(this.types, this.sdk)
+      : coreTypes = types.coreTypes,
+        _jsBool = sdk.getClass('dart:_interceptors', 'JSBool'),
+        _jsNumber = sdk.getClass('dart:_interceptors', 'JSNumber'),
+        _jsString = sdk.getClass('dart:_interceptors', 'JSString');
 
   JSType typeFor(DartType type) {
     while (type is TypeParameterType) {
@@ -107,8 +117,8 @@
           c == coreTypes.doubleClass) {
         return JSType.jsNumber;
       }
-      if (c == coreTypes.boolClass.rawType) return JSType.jsBoolean;
-      if (c == coreTypes.stringClass.rawType) return JSType.jsString;
+      if (c == coreTypes.boolClass) return JSType.jsBoolean;
+      if (c == coreTypes.stringClass) return JSType.jsString;
       if (c == coreTypes.objectClass) return JSType.jsUnknown;
       if (c == coreTypes.futureOrClass) {
         var argumentRep = typeFor(type.typeArguments[0]);
@@ -124,6 +134,19 @@
     return JSType.jsObject;
   }
 
+  /// Given a Dart type return the known implementation type, if any.
+  /// Given `bool`, `String`, or `num`/`int`/`double`,
+  /// returns the corresponding class in `dart:_interceptors`:
+  /// `JSBool`, `JSString`, and `JSNumber` respectively, otherwise null.
+  Class getImplementationClass(DartType t) {
+    JSType rep = typeFor(t);
+    // Number, String, and Bool are final
+    if (rep == JSType.jsNumber) return _jsNumber;
+    if (rep == JSType.jsBoolean) return _jsBool;
+    if (rep == JSType.jsString) return _jsString;
+    return null;
+  }
+
   /// If the type [t] is [int] or [double], or a type parameter
   /// bounded by [int], [double] or [num] returns [num].
   /// Otherwise returns [t].
diff --git a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
index c555f21..7fc8071 100644
--- a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
+++ b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
@@ -248,5 +248,5 @@
 
 bool isInlineJS(Member e) =>
     e is Procedure &&
-    e.name == 'JS' &&
+    e.name.name == 'JS' &&
     e.enclosingLibrary.importUri.toString() == 'dart:_foreign_helper';
diff --git a/pkg/dev_compiler/lib/src/kernel/native_types.dart b/pkg/dev_compiler/lib/src/kernel/native_types.dart
index ccd2aa9..deaff11 100644
--- a/pkg/dev_compiler/lib/src/kernel/native_types.dart
+++ b/pkg/dev_compiler/lib/src/kernel/native_types.dart
@@ -3,8 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:collection';
-import 'package:kernel/kernel.dart';
 import 'package:kernel/core_types.dart';
+import 'package:kernel/kernel.dart';
+import 'package:kernel/library_index.dart';
 
 /// Contains information about native JS types (those types provided by the
 /// implementation) that are also provided by the Dart SDK.
@@ -24,8 +25,8 @@
 /// This will provide the [Iterable.first] property, without needing to add
 /// `first` to the `Array.prototype`.
 class NativeTypeSet {
-  final sdk = new Map<String, Library>();
   final CoreTypes coreTypes;
+  final LibraryIndex sdk;
 
   // Abstract types that may be implemented by both native and non-native
   // classes.
@@ -35,12 +36,9 @@
   final _nativeTypes = new HashSet<Class>.identity();
   final _pendingLibraries = new HashSet<Library>.identity();
 
-  NativeTypeSet(Program program, this.coreTypes) {
-    for (var l in program.libraries) {
-      var uri = l.importUri;
-      if (uri.scheme == 'dart') sdk[uri.toString()] = l;
-    }
-
+  NativeTypeSet(Program program)
+      : sdk = new LibraryIndex.coreLibraries(program),
+        coreTypes = new CoreTypes(program) {
     // First, core types:
     // TODO(vsm): If we're analyzing against the main SDK, those
     // types are not explicitly annotated.
@@ -49,25 +47,21 @@
     _addExtensionType(coreTypes.doubleClass, true);
     _addExtensionType(coreTypes.boolClass, true);
     _addExtensionType(coreTypes.stringClass, true);
-    _addExtensionTypes(sdk['dart:_interceptors']);
-    _addExtensionTypes(sdk['dart:_native_typed_data']);
+    _addExtensionTypes(sdk.getLibrary('dart:_interceptors'));
+    _addExtensionTypes(sdk.getLibrary('dart:_native_typed_data'));
 
     // These are used natively by dart:html but also not annotated.
-    _addExtensionTypesForLibrary(coreTypes.coreLibrary, ['Comparable', 'Map']);
-    _addExtensionTypesForLibrary(sdk['dart:collection'], ['ListMixin']);
-    _addExtensionTypesForLibrary(sdk['dart:math'], ['Rectangle']);
+    _addExtensionTypesForLibrary('dart:core', ['Comparable', 'Map']);
+    _addExtensionTypesForLibrary('dart:collection', ['ListMixin']);
+    _addExtensionTypesForLibrary('dart:math', ['Rectangle']);
 
     // Second, html types - these are only searched if we use dart:html, etc.:
-    _addPendingExtensionTypes(sdk['dart:html']);
-    _addPendingExtensionTypes(sdk['dart:indexed_db']);
-    _addPendingExtensionTypes(sdk['dart:svg']);
-    _addPendingExtensionTypes(sdk['dart:web_audio']);
-    _addPendingExtensionTypes(sdk['dart:web_gl']);
-    _addPendingExtensionTypes(sdk['dart:web_sql']);
-  }
-
-  Class getClass(String library, String name) {
-    return sdk[library].classes.firstWhere((c) => c.name == name);
+    _addPendingExtensionTypes(sdk.getLibrary('dart:html'));
+    _addPendingExtensionTypes(sdk.getLibrary('dart:indexed_db'));
+    _addPendingExtensionTypes(sdk.getLibrary('dart:svg'));
+    _addPendingExtensionTypes(sdk.getLibrary('dart:web_audio'));
+    _addPendingExtensionTypes(sdk.getLibrary('dart:web_gl'));
+    _addPendingExtensionTypes(sdk.getLibrary('dart:web_sql'));
   }
 
   bool _isNative(Class c) {
@@ -98,11 +92,9 @@
     }
   }
 
-  void _addExtensionTypesForLibrary(Library library, List<String> typeNames) {
-    for (var c in library.classes) {
-      if (typeNames.contains(c.name)) {
-        _addExtensionType(c, true);
-      }
+  void _addExtensionTypesForLibrary(String library, List<String> classNames) {
+    for (var className in classNames) {
+      _addExtensionType(sdk.getClass(library, className), true);
     }
   }
 
diff --git a/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart b/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
new file mode 100644
index 0000000..bdfd687
--- /dev/null
+++ b/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
@@ -0,0 +1,388 @@
+// 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:collection';
+import 'package:kernel/core_types.dart';
+import 'package:kernel/kernel.dart';
+import 'package:kernel/type_environment.dart';
+import 'js_typerep.dart';
+import 'kernel_helpers.dart';
+
+/// Determines whether a given expression [isNullable].
+///
+/// This class can also analyze the nullability of local variables, if
+/// [enterFunction] and [exitFunction] are used.
+class NullableInference extends ExpressionVisitor<bool> {
+  final TypeEnvironment types;
+  final JSTypeRep jsTypeRep;
+  final CoreTypes coreTypes;
+
+  /// Whether `@notNull` and `@nullCheck` declarations are honored.
+  ///
+  /// This is set when compiling the SDK and in tests. Even when set to `false`,
+  /// non-SDK code will still benefit from `@notNull` annotations declared on
+  /// SDK APIs.
+  ///
+  /// Since `@notNull` cannot be imported by user code, this flag is only
+  /// a performance optimization, so we don't spend time looking for
+  /// annotations that cannot exist in user code.
+  bool allowNotNullDeclarations = false;
+
+  /// Allows `@notNull` and `@nullCheck` to be declared in `package:meta`
+  /// instead of requiring a private SDK library.
+  ///
+  /// This is currently used by tests, in conjunction with
+  /// [allowNotNullDeclarations].
+  bool allowPackageMetaAnnotations = false;
+
+  final _variableInference = new _NullableVariableInference();
+
+  NullableInference(this.jsTypeRep)
+      : types = jsTypeRep.types,
+        coreTypes = jsTypeRep.coreTypes {
+    _variableInference._nullInference = this;
+  }
+
+  /// Call when entering a function to enable [isNullable] to recognize local
+  /// variables that cannot be null.
+  void enterFunction(FunctionNode fn) => _variableInference.enterFunction(fn);
+
+  /// Call when exiting a function to clear out the information recorded by
+  /// [enterFunction].
+  void exitFunction(FunctionNode fn) => _variableInference.exitFunction(fn);
+
+  /// Returns true if [expr] can be null.
+  bool isNullable(Expression expr) => expr != null ? expr.accept(this) : false;
+
+  @override
+  defaultExpression(Expression node) => true;
+
+  @override
+  defaultBasicLiteral(BasicLiteral node) => false;
+
+  @override
+  visitNullLiteral(NullLiteral node) => true;
+
+  @override
+  visitVariableGet(VariableGet node) {
+    return _variableInference.variableIsNullable(node.variable);
+  }
+
+  @override
+  visitVariableSet(VariableSet node) => isNullable(node.value);
+
+  @override
+  visitPropertyGet(PropertyGet node) => _getterIsNullable(node.interfaceTarget);
+
+  @override
+  visitPropertySet(PropertySet node) => isNullable(node.value);
+
+  @override
+  visitDirectPropertyGet(DirectPropertyGet node) =>
+      _getterIsNullable(node.target);
+
+  @override
+  visitDirectPropertySet(DirectPropertySet node) => isNullable(node.value);
+
+  @override
+  visitSuperPropertyGet(SuperPropertyGet node) =>
+      _getterIsNullable(node.interfaceTarget);
+
+  @override
+  visitSuperPropertySet(SuperPropertySet node) => isNullable(node.value);
+
+  @override
+  visitStaticGet(StaticGet node) => _getterIsNullable(node.target);
+
+  @override
+  visitStaticSet(StaticSet node) => isNullable(node.value);
+
+  @override
+  visitMethodInvocation(MethodInvocation node) =>
+      _invocationIsNullable(node.interfaceTarget, node.receiver);
+
+  @override
+  visitDirectMethodInvocation(DirectMethodInvocation node) =>
+      _invocationIsNullable(node.target, node.receiver);
+
+  @override
+  visitSuperMethodInvocation(SuperMethodInvocation node) =>
+      _invocationIsNullable(node.interfaceTarget);
+
+  bool _invocationIsNullable(Member target, [Expression receiver]) {
+    if (target == null) return true;
+    if (target.name.name == 'toString' &&
+        receiver != null &&
+        receiver.getStaticType(types) == coreTypes.stringClass.rawType) {
+      // TODO(jmesserly): `class String` in dart:core does not explicitly
+      // declare `toString`, which results in a target of `Object.toString` even
+      // when the reciever type is known to be `String`. So we work around it.
+      // (The Analyzer backend of DDC probably has the same issue.)
+      return false;
+    }
+    return _returnValueIsNullable(target);
+  }
+
+  bool _getterIsNullable(Member target) {
+    if (target == null) return true;
+    // tear-offs are not null
+    if (target is Procedure && !target.isAccessor) return false;
+    return _returnValueIsNullable(target);
+  }
+
+  bool _returnValueIsNullable(Member target) {
+    // TODO(jmesserly): this is not a valid assumption for user-defined equality
+    // but it is added to match the behavior of the Analyzer backend.
+    // https://github.com/dart-lang/sdk/issues/31854
+    if (target.name.name == '==') return false;
+
+    var targetClass = target.enclosingClass;
+    if (targetClass != null) {
+      // Convert `int` `double` `num` `String` and `bool` to their corresponding
+      // implementation class in dart:_interceptors, for example `JSString`.
+      //
+      // This allows us to find the `@notNull` annotation if it exists.
+      var implClass = jsTypeRep.getImplementationClass(targetClass.rawType);
+      if (implClass != null) {
+        var member = types.hierarchy.getDispatchTarget(implClass, target.name);
+        if (member != null) target = member;
+      }
+    }
+
+    // If the method or function is annotated as returning a non-null value
+    // then the result of the call is non-null.
+    var annotations = target.annotations;
+    if (annotations.isNotEmpty && annotations.any(isNotNullAnnotation)) {
+      return false;
+    }
+    return true;
+  }
+
+  @override
+  visitStaticInvocation(StaticInvocation node) {
+    var target = node.target;
+    if (target == types.coreTypes.identicalProcedure) return false;
+    if (isInlineJS(target)) {
+      var args = node.arguments.positional;
+      var first = args.isNotEmpty ? args.first : null;
+      if (first is StringLiteral) {
+        var types = first.value;
+        return types == '' ||
+            types == 'var' ||
+            types.split('|').contains('Null');
+      }
+    }
+    return _invocationIsNullable(target);
+  }
+
+  @override
+  visitConstructorInvocation(ConstructorInvocation node) => false;
+
+  @override
+  visitNot(Not node) => false;
+
+  @override
+  visitLogicalExpression(LogicalExpression node) => false;
+
+  @override
+  visitConditionalExpression(ConditionalExpression node) =>
+      isNullable(node.then) || isNullable(node.otherwise);
+
+  @override
+  visitStringConcatenation(StringConcatenation node) => false;
+
+  @override
+  visitIsExpression(IsExpression node) => false;
+
+  @override
+  visitAsExpression(AsExpression node) => isNullable(node.operand);
+
+  @override
+  visitSymbolLiteral(SymbolLiteral node) => false;
+
+  @override
+  visitTypeLiteral(TypeLiteral node) => false;
+
+  @override
+  visitThisExpression(ThisExpression node) => false;
+
+  @override
+  visitRethrow(Rethrow node) => false;
+
+  @override
+  visitThrow(Throw node) => false;
+
+  @override
+  visitListLiteral(ListLiteral node) => false;
+
+  @override
+  visitMapLiteral(MapLiteral node) => false;
+
+  @override
+  visitAwaitExpression(AwaitExpression node) => true;
+
+  @override
+  visitFunctionExpression(FunctionExpression node) => false;
+
+  @override
+  visitConstantExpression(ConstantExpression node) {
+    var c = node.constant;
+    return c is PrimitiveConstant && c.value == null;
+  }
+
+  @override
+  visitLet(Let node) => isNullable(node.body);
+
+  @override
+  visitInstantiation(Instantiation node) => false;
+
+  bool isNotNullAnnotation(Expression value) =>
+      _isInternalAnnotationField(value, 'notNull');
+
+  bool isNullCheckAnnotation(Expression value) =>
+      _isInternalAnnotationField(value, 'nullCheck');
+
+  bool _isInternalAnnotationField(Expression value, String name) {
+    if (value is StaticGet) {
+      var t = value.target;
+      if (t is Field && t.name.name == name) {
+        var uri = t.enclosingLibrary.importUri;
+        return uri.scheme == 'dart' && uri.pathSegments[0] == '_js_helper' ||
+            allowPackageMetaAnnotations &&
+                uri.scheme == 'package' &&
+                uri.pathSegments[0] == 'meta';
+      }
+    }
+    return false;
+  }
+}
+
+/// A visitor that determines which local variables cannot be null using
+/// flow-insensitive inference.
+///
+/// The entire body of a function (including any local functions) is visited
+/// recursively, and we collect variables that are tentatively believed to be
+/// not-null. If the assumption turns out to be incorrect (based on a later
+/// assignment of a nullable value), we remove it from the not-null set, along
+/// with any variable it was assigned to.
+///
+/// This does not track nullable locals, so we can avoid doing work on any
+/// variables that have already been determined to be nullable.
+///
+// TODO(jmesserly): Introduce flow analysis.
+class _NullableVariableInference extends RecursiveVisitor<void> {
+  NullableInference _nullInference;
+
+  /// Variables that are currently believed to be not-null.
+  final _notNullLocals = new HashSet<VariableDeclaration>.identity();
+
+  /// For each variable currently believed to be not-null ([_notNullLocals]),
+  /// this collects variables that it is assigned to, so we update them if we
+  /// later determine that the variable can be null.
+  final _assignedTo =
+      new HashMap<VariableDeclaration, List<VariableDeclaration>>.identity();
+
+  /// All functions that have been analyzed with [analyzeFunction].
+  ///
+  /// In practice this will include the outermost function (typically a
+  /// [Procedure]) as well as an local functions it contains.
+  final _functions = new HashSet<FunctionNode>.identity();
+
+  /// The current variable we are setting/initializing, so we can track if it
+  /// is [_assignedTo] from another variable.
+  VariableDeclaration _variableAssignedTo;
+
+  void enterFunction(FunctionNode node) {
+    if (_functions.contains(node)) return; // local function already analyzed.
+    visitFunctionNode(node);
+    _assignedTo.clear();
+  }
+
+  void exitFunction(FunctionNode node) {
+    var removed = _functions.remove(node);
+    assert(removed);
+    if (_functions.isEmpty) _notNullLocals.clear();
+  }
+
+  @override
+  visitFunctionDeclaration(FunctionDeclaration node) {
+    _notNullLocals.add(node.variable);
+    node.function?.accept(this);
+  }
+
+  @override
+  visitFunctionNode(FunctionNode node) {
+    _functions.add(node);
+    if (_nullInference.allowNotNullDeclarations) {
+      visitList(node.positionalParameters, this);
+      visitList(node.namedParameters, this);
+    }
+    node.body?.accept(this);
+  }
+
+  @override
+  visitCatch(Catch node) {
+    // The stack trace variable is not nullable, but the exception can be.
+    var stackTrace = node.stackTrace;
+    if (stackTrace != null) _notNullLocals.add(stackTrace);
+    super.visitCatch(node);
+  }
+
+  @override
+  visitVariableDeclaration(VariableDeclaration node) {
+    if (_nullInference.allowNotNullDeclarations) {
+      var annotations = node.annotations;
+      if (annotations.isNotEmpty &&
+          (annotations.any(_nullInference.isNotNullAnnotation) ||
+              annotations.any(_nullInference.isNullCheckAnnotation))) {
+        _notNullLocals.add(node);
+      }
+    }
+    var initializer = node.initializer;
+    if (initializer != null) {
+      var savedVariable = _variableAssignedTo;
+      _variableAssignedTo = node;
+
+      if (!_nullInference.isNullable(initializer)) _notNullLocals.add(node);
+
+      _variableAssignedTo = savedVariable;
+    }
+    initializer?.accept(this);
+  }
+
+  @override
+  visitVariableGet(VariableGet node) {}
+
+  @override
+  visitVariableSet(VariableSet node) {
+    var variable = node.variable;
+    var value = node.value;
+    if (_notNullLocals.contains(variable)) {
+      var savedVariable = _variableAssignedTo;
+      _variableAssignedTo = variable;
+
+      if (_nullInference.isNullable(node.value)) {
+        markNullable(VariableDeclaration v) {
+          _notNullLocals.remove(v);
+          _assignedTo.remove(v)?.forEach(markNullable);
+        }
+
+        markNullable(variable);
+      }
+
+      _variableAssignedTo = savedVariable;
+    }
+    value.accept(this);
+  }
+
+  bool variableIsNullable(VariableDeclaration variable) {
+    if (_notNullLocals.contains(variable)) {
+      if (_variableAssignedTo != null) {
+        _assignedTo.putIfAbsent(variable, () => []).add(_variableAssignedTo);
+      }
+      return false;
+    }
+    return true;
+  }
+}
diff --git a/pkg/dev_compiler/test/nullable_inference_test.dart b/pkg/dev_compiler/test/nullable_inference_test.dart
new file mode 100644
index 0000000..4324353
--- /dev/null
+++ b/pkg/dev_compiler/test/nullable_inference_test.dart
@@ -0,0 +1,581 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:io';
+import 'package:front_end/src/api_prototype/memory_file_system.dart';
+import 'package:front_end/src/api_unstable/ddc.dart' as fe;
+import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart';
+import 'package:kernel/core_types.dart';
+import 'package:kernel/kernel.dart';
+import 'package:kernel/library_index.dart';
+import 'package:kernel/class_hierarchy.dart';
+import 'package:test/test.dart';
+
+import 'package:dev_compiler/src/kernel/command.dart';
+import 'package:dev_compiler/src/kernel/nullable_inference.dart';
+import 'package:dev_compiler/src/kernel/js_typerep.dart';
+import 'package:dev_compiler/src/kernel/target.dart';
+
+void main() {
+  test('empty main', () async {
+    await expectNotNull('main() {}', '');
+  });
+
+  group('literal', () {
+    test('null', () async {
+      await expectNotNull('main() { print(null); }', '');
+    });
+    test('bool', () async {
+      await expectNotNull('main() { print(false); }', 'false');
+    });
+    test('int', () async {
+      await expectNotNull('main() { print(42); }', '42');
+    });
+    test('double', () async {
+      await expectNotNull('main() { print(123.0); }', '123.0');
+    });
+    test('String', () async {
+      await expectNotNull('main() { print("hi"); }', '"hi"');
+    });
+    test('List', () async {
+      await expectNotNull(
+          'main() { print([42, null]); }', '<dart.core::int>[42, null], 42');
+    });
+    test('Map', () async {
+      await expectNotNull('main() { print({"x": null}); }',
+          '<dart.core::String, dart.core::Null>{"x": null}, "x"');
+    });
+
+    test('Symbol', () async {
+      await expectNotNull('main() { print(#hi); }', '#hi');
+    });
+
+    test('Type', () async {
+      await expectNotNull('main() { print(Object); }', 'dart.core::Object');
+    });
+  });
+
+  test('this', () async {
+    await expectNotNull('class C { m() { return this; } }', 'this');
+  });
+
+  test('is', () async {
+    await expectNotNull('main() { 42 is int; null is int; }',
+        '42 is dart.core::int, 42, null is dart.core::int');
+  });
+
+  test('as', () async {
+    await expectNotNull(
+        'main() { 42 as int; null as int; }', '42 as dart.core::int, 42');
+  });
+
+  test('constructor', () async {
+    await expectNotNull(
+        'library a; class C {} main() { new C(); }', 'new a::C::•()');
+  });
+
+  group('operator', () {
+    test('==', () async {
+      // This is not a correct non-null assumption when user-defined operators,
+      // are present, see: https://github.com/dart-lang/sdk/issues/31854
+      await expectAllNotNull('main() { 1 == 1; }');
+    });
+    test('!', () async {
+      await expectAllNotNull('main() { !false; }');
+    });
+    test('!=', () async {
+      await expectAllNotNull('main() { 1 != 2; }');
+    });
+    test('&&', () async {
+      await expectAllNotNull('main() { true && true; }');
+    });
+    test('||', () async {
+      await expectAllNotNull('main() { true || true; }');
+    });
+    test('? :', () async {
+      await expectAllNotNull('main() { true ? true : false; }');
+    });
+  });
+
+  test('bool', () async {
+    await expectAllNotNull('main() { true.toString(); false.hashCode; }');
+  });
+
+  group('int', () {
+    test('arithmetic', () async {
+      await expectAllNotNull(
+          'main() { -0; 1 + 2; 3 - 4; 5 * 6; 7 / 8; 9 % 10; 11 ~/ 12; }');
+    });
+    test('bitwise', () async {
+      await expectAllNotNull(
+          'main() { 1 & 2; 3 | 4; 5 ^ 6; ~7; 8 << 9; 10 >> 11; }');
+    });
+    test('comparison', () async {
+      await expectAllNotNull('main() { 1 < 2; 3 > 4; 5 <= 6; 7 >= 8; }');
+    });
+    test('getters', () async {
+      await expectAllNotNull(
+          'main() { 1.isOdd; 1.isEven; 1.isNegative; 1.isNaN; 1.isInfinite; '
+          '1.isFinite; 1.sign; 1.bitLength; 1.hashCode; }');
+    });
+    test('methods', () async {
+      await expectAllNotNull(
+          'main() { 1.compareTo(2); 1.remainder(2); 1.abs(); 1.toInt(); '
+          '1.ceil(); 1.floor(); 1.truncate(); 1.round(); 1.ceilToDouble(); '
+          '1.floorToDouble(); 1.truncateToDouble(); 1.roundToDouble(); '
+          '1.toDouble(); 1.clamp(2); 1.toStringAsFixed(2); '
+          '1.toStringAsExponential(); 1.toStringAsPrecision(2); 1.toString(); '
+          '1.toRadixString(2); 1.toUnsigned(2); 1.toSigned(2); 1.modPow(2); '
+          '1.modInverse(2); 1.gcd(2); }');
+    });
+  });
+
+  group('double', () {
+    test('arithmetic', () async {
+      await expectAllNotNull(
+          'main() { -0.0; 1.0 + 2.0; 3.0 - 4.0; 5.0 * 6.0; 7.0 / 8.0; '
+          '9.0 % 10.0; 11.0 ~/ 12.0; }');
+    });
+    test('comparison', () async {
+      await expectAllNotNull(
+          'main() { 1.0 < 2.0; 3.0 > 4.0; 5.0 <= 6.0; 7.0 >= 8.0; }');
+    });
+    test('getters', () async {
+      await expectAllNotNull(
+          'main() { (1.0).isNegative; (1.0).isNaN; (1.0).isInfinite; '
+          '(1.0).isFinite; (1.0).sign; (1.0).hashCode; }');
+    });
+    test('methods', () async {
+      await expectAllNotNull(
+          'main() { (1.0).compareTo(2.0); (1.0).remainder(2.0); (1.0).abs(); '
+          '(1.0).toInt(); (1.0).ceil(); (1.0).floor(); (1.0).truncate(); '
+          '(1.0).round(); (1.0).ceilToDouble(); (1.0).floorToDouble(); '
+          '(1.0).truncateToDouble(); (1.0).roundToDouble(); (1.0).toDouble(); '
+          '(1.0).clamp(2.0); (1.0).toStringAsFixed(2); (1.0).toString(); '
+          '(1.0).toStringAsExponential(); (1.0).toStringAsPrecision(2); }');
+    });
+  });
+
+  group('num', () {
+    test('arithmetic', () async {
+      await expectAllNotNull(
+          'main() { num n = 1; -n; n + n; n - n; n * n; n / n; n % n; n % n; '
+          'n ~/ n; }');
+    });
+    test('comparison', () async {
+      await expectAllNotNull(
+          'main() { num n = 1; n < n; n > n; n <= n; n >= n; }');
+    });
+    test('getters', () async {
+      await expectAllNotNull(
+          'main() { num n = 1; n.isNegative; n.isNaN; n.isInfinite; '
+          'n.isFinite; n.sign; n.hashCode; }');
+    });
+    test('methods', () async {
+      await expectAllNotNull(
+          'main() { num n = 1; n.compareTo(n); n.remainder(n); n.abs(); '
+          'n.toInt(); n.ceil(); n.floor(); n.truncate(); '
+          'n.round(); n.ceilToDouble(); n.floorToDouble(); '
+          'n.truncateToDouble(); n.roundToDouble(); n.toDouble(); '
+          'n.clamp(n); n.toStringAsFixed(n); n.toString(); '
+          'n.toStringAsExponential(); n.toStringAsPrecision(n); }');
+    });
+  });
+
+  group('String', () {
+    test('concatenation', () async {
+      await expectAllNotNull('main() { "1" "2"; }');
+    });
+    test('interpolation', () async {
+      await expectAllNotNull('main() { "1${2}"; }');
+    });
+    test('getters', () async {
+      await expectAllNotNull(
+          'main() { "".codeUnits; "".hashCode; "".isEmpty; "".isNotEmpty; '
+          '"".length; "".runes; }');
+    });
+    test('operators', () async {
+      await expectAllNotNull('main() { "" + ""; "" * 2; "" == ""; "x"[0]; }');
+    });
+    test('methods', () async {
+      await expectAllNotNull('''main() {
+        String s = '';
+        s.codeUnitAt(0);
+        s.contains(s);
+        s.endsWith(s);
+        s.indexOf(s);
+        s.lastIndexOf(s);
+        s.padLeft(1);
+        s.padRight(1);
+        s.replaceAll(s, s);
+        s.replaceAllMapped(s, (_) => s);
+        s.replaceFirst(s, s);
+        s.replaceFirstMapped(s, (_) => s);
+        s.replaceRange(1, 2, s);
+        s.split(s);
+        s.splitMapJoin(s, (_) => s, (_) => s);
+        s.startsWith(s);
+        s.substring(1);
+        s.toLowerCase();
+        s.toUpperCase();
+        s.trim();
+        s.trimLeft();
+        s.trimRight();
+        s.compareTo(s);
+        s.toString();
+        // Pattern methods (allMatches, matchAsPrefix) are not recognized.
+      }''');
+    });
+  });
+
+  test('identical', () async {
+    await expectNotNull('main() { identical(null, null); }',
+        'dart.core::identical(null, null)');
+  });
+
+  test('throw', () async {
+    await expectNotNull('main() { print(throw null); }', 'throw null');
+  });
+
+  test('rethrow', () async {
+    await expectNotNull('main() { try {} catch (e) { rethrow; } }', 'rethrow');
+  });
+
+  test('function expression', () async {
+    await expectNotNull(
+        'main() { () => null; f() {}; f; }', '() → dart.core::Null => null, f');
+  });
+
+  test('cascades (kernel let)', () async {
+    // `null..toString()` evaluates to `null` so it is nullable.
+    await expectNotNull('main() { null..toString(); }', '');
+    await expectAllNotNull('main() { 1..toString(); }');
+  });
+
+  group('variable', () {
+    test('declaration not-null', () async {
+      await expectNotNull('main() { var x = 42; print(x); }', '42, x');
+    });
+    test('declaration null', () async {
+      await expectNotNull('main() { var x = null; print(x); }', '');
+    });
+    test('declaration without initializer', () async {
+      await expectNotNull('main() { var x; x = 1; print(x); }', 'x = 1, 1');
+    });
+    test('assignment non-null', () async {
+      await expectNotNull(
+          'main() { var x = 42; x = 1; print(x); }', '42, x = 1, 1, x');
+    });
+    test('assignment null', () async {
+      await expectNotNull('main() { var x = 42; x = null; print(x); }', '42');
+    });
+    test('flow insensitive', () async {
+      await expectNotNull('''main() {
+        var x = 1;
+        if (true) {
+          print(x);
+        } else {
+          x = null;
+          print(x);
+        }
+      }''', '1, true');
+    });
+
+    test('declaration from variable', () async {
+      await expectNotNull('''main() {
+        var x = 1;
+        var y = x;
+        print(y);
+        x = null;
+      }''', '1');
+    });
+    test('declaration from variable nested', () async {
+      await expectNotNull('''main() {
+        var x = 1;
+        var y = (x = null) == null;
+        print(x);
+        print(y);
+      }''', '1, (x = null).{dart.core::Object::==}(null), y');
+    });
+    test('declaration from variable transitive', () async {
+      await expectNotNull('''main() {
+        var x = 1;
+        var y = x;
+        var z = y;
+        print(z);
+        x = null;
+      }''', '1');
+    });
+    test('declaration between variable transitive nested', () async {
+      await expectNotNull('''main() {
+        var x = 1;
+        var y = 1;
+        var z = y = x;
+        print(z);
+        x = null;
+      }''', '1, 1');
+    });
+
+    test('for not-null', () async {
+      await expectAllNotNull('''main() {
+        for (var i = 0; i < 10; i++) {
+          i;
+        }
+      }''');
+    });
+    test('for nullable', () async {
+      await expectNotNull(
+          '''main() {
+        for (var i = 0; i < 10; i++) {
+          if (i >= 10) i = null;
+        }
+      }''',
+          // arithmetic operation results on `i` are themselves not null, even
+          // though `i` is nullable.
+          '0, i.{dart.core::num::<}(10), 10, i = i.{dart.core::num::+}(1), '
+          'i.{dart.core::num::+}(1), 1, i.{dart.core::num::>=}(10), 10');
+    });
+    test('for-in', () async {
+      await expectNotNull('''main() {
+        for (var i in []) {
+          print(i);
+        }
+      }''', '<dynamic>[]');
+    });
+
+    test('inner functions', () async {
+      await expectNotNull('''main() {
+        var y = 0;
+        f(x) {
+          var g = () => print('g');
+          g();
+          print(x);
+          print(y);
+          var z = 1;
+          print(z);
+        }
+        f(42);
+      }''', '0, () → void => dart.core::print("g"), "g", g, y, 1, z, f, 42');
+    });
+    test('assignment to closure variable', () async {
+      await expectNotNull('''main() {
+        var y = 0;
+        f(x) {
+          y = x;
+        }
+        f(42);
+        print(y);
+      }''', '0, f, 42');
+    });
+
+    test('declaration visits initializer', () async {
+      await expectAllNotNull('''main() {
+        var x = () { var y = 1; return y; };
+        x;
+      }''');
+    });
+    test('assignment visits value', () async {
+      await expectAllNotNull('''main() {
+        var x = () => 42;
+        x = () { var y = 1; return y; };
+      }''');
+    });
+    test('assignment visits value with closure variable set', () async {
+      await expectNotNull('''main() {
+        var x = () => 42;
+        var y = (() => x = null);
+      }''', '() → dart.core::int => 42, 42, () → dart.core::Null => x = null');
+    });
+    test('do not depend on unrelated variables', () async {
+      await expectNotNull('''main() {
+        var x;
+        var y = identical(x, null);
+        y; // this is still non-null even though `x` is nullable
+      }''', 'dart.core::identical(x, null), y');
+    });
+    test('do not depend on unrelated variables updated later', () async {
+      await expectNotNull('''main() {
+        var x = 1;
+        var y = identical(x, 1);
+        x = null;
+        y; // this is still non-null even though `x` is nullable
+      }''', '1, dart.core::identical(x, 1), 1, y');
+    });
+  });
+
+  group('notNull', () {
+    setUp(() {
+      useAnnotations = true;
+    });
+    tearDown(() {
+      useAnnotations = false;
+    });
+    var imports = "import 'package:meta/meta.dart';";
+    group('(kernel annotation bug)', () {
+      test('variable wihout initializer', () async {
+        await expectNotNull('$imports main() { @notNull var x; print(x); }',
+            ''); // should be: 'x'
+      });
+      test('variable with initializer', () async {
+        // TODO(jmesserly): this does not work in the Analyzer backend.
+        await expectNotNull(
+            '$imports main() { @notNull var x = null; print(x); }',
+            ''); // should be: 'x'
+      });
+      test('parameters', () async {
+        await expectNotNull(
+            '$imports f(@notNull x, [@notNull y, @notNull z = 42]) '
+            '{ x; y; z; }',
+            '42, z'); // should be: '42, x, y, z'
+      });
+      test('named parameters', () async {
+        await expectNotNull(
+            '$imports f({@notNull x, @notNull y: 42}) { x; y; }',
+            '42, y'); // should be: '42, x, y'
+      });
+    });
+
+    test('top-level field', () async {
+      await expectNotNull(
+          'library a; $imports @notNull int x; main() { x; }', 'a::x');
+    });
+
+    test('getter', () async {
+      await expectNotNull(
+          'library b; $imports @notNull get x => null; main() { x; }', 'b::x');
+    });
+
+    test('function', () async {
+      await expectNotNull(
+          'library a; $imports @notNull f() {} main() { f(); }', 'a::f()');
+    });
+
+    test('method', () async {
+      await expectNotNull(
+          'library b; $imports class C { @notNull m() {} } '
+          'main() { var c = new C(); c.m(); }',
+          'new b::C::•(), c.{b::C::m}(), c');
+    });
+  });
+}
+
+/// Given the Dart [code], expects the [expectedNotNull] kernel expression list
+/// to be produced in the set of expressions that cannot be null by DDC's null
+/// inference.
+Future expectNotNull(String code, String expectedNotNull) async {
+  var program = await kernelCompile(code);
+  var collector = new NotNullCollector();
+  program.accept(collector);
+  var actualNotNull =
+      collector.notNullExpressions.map((e) => e.toString()).join(', ');
+  expect(actualNotNull, equals(expectedNotNull));
+}
+
+/// Given the Dart [code], expects all the expressions inferred to be not-null.
+Future expectAllNotNull(String code) async {
+  (await kernelCompile(code)).accept(new ExpectAllNotNull());
+}
+
+bool useAnnotations = false;
+NullableInference inference;
+
+class _TestRecursiveVisitor extends RecursiveVisitor<void> {
+  int _functionNesting = 0;
+
+  @override
+  visitProgram(Program node) {
+    inference ??= new NullableInference(new JSTypeRep(
+        new TypeSchemaEnvironment(
+            new CoreTypes(node), new ClassHierarchy(node), true),
+        new LibraryIndex.coreLibraries(node)));
+
+    if (useAnnotations) {
+      inference.allowNotNullDeclarations = useAnnotations;
+      inference.allowPackageMetaAnnotations = useAnnotations;
+    }
+    super.visitProgram(node);
+  }
+
+  @override
+  visitLibrary(Library node) {
+    if (node.isExternal ||
+        node.importUri.scheme == 'package' &&
+            node.importUri.pathSegments[0] == 'meta') {
+      return;
+    }
+    super.visitLibrary(node);
+  }
+
+  @override
+  visitFunctionNode(FunctionNode node) {
+    _functionNesting++;
+    if (_functionNesting == 1) inference.enterFunction(node);
+    super.visitFunctionNode(node);
+    if (_functionNesting == 1) inference.exitFunction(node);
+    _functionNesting--;
+  }
+}
+
+class NotNullCollector extends _TestRecursiveVisitor {
+  final notNullExpressions = <Expression>[];
+
+  @override
+  defaultExpression(Expression node) {
+    if (!inference.isNullable(node)) {
+      notNullExpressions.add(node);
+    }
+    super.defaultExpression(node);
+  }
+}
+
+class ExpectAllNotNull extends _TestRecursiveVisitor {
+  @override
+  defaultExpression(Expression node) {
+    expect(inference.isNullable(node), false,
+        reason: 'expression `$node` should be inferred as not-null');
+    super.defaultExpression(node);
+  }
+}
+
+fe.InitializedCompilerState _compilerState;
+final _fileSystem = new MemoryFileSystem(new Uri.file('/memory/'));
+
+Future<Program> kernelCompile(String code) async {
+  var succeeded = true;
+  void errorHandler(fe.CompilationMessage error) {
+    if (error.severity == fe.Severity.error) {
+      succeeded = false;
+    }
+  }
+
+  var sdkUri = new Uri.file('/memory/dart_sdk.dill');
+  var sdkFile = _fileSystem.entityForUri(sdkUri);
+  if (!await sdkFile.exists()) {
+    sdkFile.writeAsBytesSync(new File(defaultSdkSummaryPath).readAsBytesSync());
+  }
+  var packagesUri = new Uri.file('/memory/.packages');
+  var packagesFile = _fileSystem.entityForUri(packagesUri);
+  if (!await packagesFile.exists()) {
+    packagesFile.writeAsStringSync('meta:/memory/meta/lib');
+    _fileSystem
+        .entityForUri(new Uri.file('/memory/meta/lib/meta.dart'))
+        .writeAsStringSync('''
+class _NotNull { const _NotNull(); }
+const notNull = const _NotNull();
+class _NullCheck { const _NullCheck(); }
+const nullCheck = const _NullCheck();
+    ''');
+  }
+
+  var mainUri = new Uri.file('/memory/test.dart');
+  _fileSystem.entityForUri(mainUri).writeAsStringSync(code);
+  _compilerState = await fe.initializeCompiler(
+      _compilerState, sdkUri, packagesUri, [], new DevCompilerTarget(),
+      fileSystem: _fileSystem);
+  fe.DdcResult result =
+      await fe.compile(_compilerState, [mainUri], errorHandler);
+  expect(succeeded, true);
+  return result.program;
+}
diff --git a/pkg/dev_compiler/test/sourcemap/ddc_common.dart b/pkg/dev_compiler/test/sourcemap/ddc_common.dart
index 78c653f..c609b5e 100644
--- a/pkg/dev_compiler/test/sourcemap/ddc_common.dart
+++ b/pkg/dev_compiler/test/sourcemap/ddc_common.dart
@@ -13,8 +13,8 @@
 
 import 'common.dart';
 
-abstract class DdcRunner {
-  Future<Null> runDDC(Uri inputFile, Uri outputFile, Uri outWrapperPath);
+abstract class CompilerRunner {
+  Future<Null> run(Uri inputFile, Uri outputFile, Uri outWrapperPath);
 }
 
 abstract class WithCompilerState {
@@ -22,9 +22,9 @@
 }
 
 class Compile extends Step<Data, Data, ChainContext> {
-  final DdcRunner ddcRunner;
+  final CompilerRunner runner;
 
-  const Compile(this.ddcRunner);
+  const Compile(this.runner);
 
   String get name => "compile";
 
@@ -42,18 +42,18 @@
     var outputFile = outDirUri.resolve(outputFilename);
     var outWrapperPath = outDirUri.resolve("wrapper.js");
 
-    await ddcRunner.runDDC(testFile, outputFile, outWrapperPath);
+    await runner.run(testFile, outputFile, outWrapperPath);
 
     return pass(data);
   }
 }
 
 class TestStackTrace extends Step<Data, Data, ChainContext> {
-  final DdcRunner ddcRunner;
+  final CompilerRunner runner;
   final String marker;
   final List<String> knownMarkers;
 
-  const TestStackTrace(this.ddcRunner, this.marker, this.knownMarkers);
+  const TestStackTrace(this.runner, this.marker, this.knownMarkers);
 
   String get name => "TestStackTrace";
 
@@ -71,8 +71,7 @@
 
   Future<bool> _compile(String input, String output) async {
     var outWrapperPath = _getWrapperPathFromDirectoryFile(new Uri.file(input));
-    await ddcRunner.runDDC(
-        new Uri.file(input), new Uri.file(output), outWrapperPath);
+    await runner.run(new Uri.file(input), new Uri.file(output), outWrapperPath);
     return true;
   }
 
diff --git a/pkg/dev_compiler/test/sourcemap/sourcemaps_ddc_suite.dart b/pkg/dev_compiler/test/sourcemap/sourcemaps_ddc_suite.dart
index 684aadc..29e48cf 100644
--- a/pkg/dev_compiler/test/sourcemap/sourcemaps_ddc_suite.dart
+++ b/pkg/dev_compiler/test/sourcemap/sourcemaps_ddc_suite.dart
@@ -21,24 +21,22 @@
 
   List<Step> _steps;
 
-  List<Step> get steps {
-    return _steps ??= <Step>[
-      const Setup(),
-      new Compile(new RunDdc(environment.containsKey("debug"))),
-      const StepWithD8(),
-      new CheckSteps(environment.containsKey("debug")),
-    ];
-  }
+  List<Step> get steps => _steps ??= <Step>[
+        const Setup(),
+        new Compile(new DevCompilerRunner(environment.containsKey("debug"))),
+        const StepWithD8(),
+        new CheckSteps(environment.containsKey("debug")),
+      ];
 
   bool debugging() => environment.containsKey("debug");
 }
 
-class RunDdc implements DdcRunner {
+class DevCompilerRunner implements CompilerRunner {
   final bool debugging;
 
-  const RunDdc([this.debugging = false]);
+  const DevCompilerRunner([this.debugging = false]);
 
-  Future<Null> runDDC(Uri inputFile, Uri outputFile, Uri outWrapperFile) async {
+  Future<Null> run(Uri inputFile, Uri outputFile, Uri outWrapperFile) async {
     Uri outDir = outputFile.resolve(".");
     String outputFilename = outputFile.pathSegments.last;
 
diff --git a/pkg/dev_compiler/test/sourcemap/sourcemaps_ddk_suite.dart b/pkg/dev_compiler/test/sourcemap/sourcemaps_ddk_suite.dart
index 1658cf7..d93083c 100644
--- a/pkg/dev_compiler/test/sourcemap/sourcemaps_ddk_suite.dart
+++ b/pkg/dev_compiler/test/sourcemap/sourcemaps_ddk_suite.dart
@@ -30,7 +30,7 @@
   List<Step> get steps {
     return _steps ??= <Step>[
       const Setup(),
-      new Compile(new RunDdc(this, debugging())),
+      new Compile(new DevCompilerRunner(this, debugging())),
       const StepWithD8(),
       new CheckSteps(debugging()),
     ];
@@ -39,13 +39,13 @@
   bool debugging() => environment.containsKey("debug");
 }
 
-class RunDdc implements DdcRunner {
+class DevCompilerRunner implements CompilerRunner {
   final WithCompilerState context;
   final bool debugging;
 
-  const RunDdc(this.context, [this.debugging = false]);
+  const DevCompilerRunner(this.context, [this.debugging = false]);
 
-  Future<Null> runDDC(Uri inputFile, Uri outputFile, Uri outWrapperFile) async {
+  Future<Null> run(Uri inputFile, Uri outputFile, Uri outWrapperFile) async {
     Uri outDir = outputFile.resolve(".");
     String outputFilename = outputFile.pathSegments.last;
 
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_ddc_suite.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_ddc_suite.dart
index d229473..d612c00 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_ddc_suite.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_ddc_suite.dart
@@ -14,7 +14,7 @@
     const Setup(),
     const SetCwdToSdkRoot(),
     const TestStackTrace(
-        const ddc.RunDdc(false), "ddc.", const ["ddc.", "ddk."]),
+        const ddc.DevCompilerRunner(false), "ddc.", const ["ddc.", "ddk."]),
   ];
 }
 
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_ddk_suite.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_ddk_suite.dart
index 5e5b50a..b300829 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_ddk_suite.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_ddk_suite.dart
@@ -20,8 +20,8 @@
     return _steps ??= <Step>[
       const Setup(),
       const SetCwdToSdkRoot(),
-      new TestStackTrace(
-          new ddk.RunDdc(this, false), "ddk.", const ["ddk.", "ddc."]),
+      new TestStackTrace(new ddk.DevCompilerRunner(this, false), "ddk.",
+          const ["ddk.", "ddc."]),
     ];
   }
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_is_and_as_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_is_and_as_test.dart
index 361e1f9..6dfaf13 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_is_and_as_test.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_is_and_as_test.dart
@@ -21,7 +21,7 @@
     /*bc:10*/ print("hex is int");
     // ignore: unnecessary_cast
     int x = hex /*bc:11*/ as int;
-    if (x. /*bc:12*/ isEven) {
+    /*bc:12*/ if (x.isEven) {
       /*bc:13*/ print("it's even even!");
     } else {
       print("but it's not even even!");
diff --git a/pkg/dev_compiler/tool/ddc b/pkg/dev_compiler/tool/ddc
index 1d30ae3..9fc08d7 100755
--- a/pkg/dev_compiler/tool/ddc
+++ b/pkg/dev_compiler/tool/ddc
@@ -30,7 +30,7 @@
 
 if [ "$KERNEL" = true ]; then
   dart -c $DDC_PATH/bin/dartdevk.dart --modules=node \
-      -o $BASENAME.js $*
+      -o $LIBROOT/$BASENAME.js $*
 else
   dart -c $DDC_PATH/bin/dartdevc.dart --modules=node --library-root=$LIBROOT \
       --dart-sdk-summary=$DDC_PATH/gen/sdk/ddc_sdk.sum \
diff --git a/pkg/dev_compiler/tool/input_sdk/private/annotations.dart b/pkg/dev_compiler/tool/input_sdk/private/annotations.dart
index 5e8f99a..87df639 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/annotations.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/annotations.dart
@@ -9,6 +9,10 @@
   const ForceInline();
 }
 
+class _NotNull {
+  const _NotNull();
+}
+
 /// Marks a variable or API to be non-nullable.
 /// ****CAUTION******
 /// This is currently unchecked, and hence should never be used
@@ -16,11 +20,7 @@
 /// or otherwise cause the contract to be violated.
 /// TODO(leafp): Consider adding static checking and exposing
 /// this to user code.
-class NotNull {
-  const NotNull();
-}
-
-const notNull = const NotNull();
+const notNull = const _NotNull();
 
 /// Marks a generic function or static method API to be not reified.
 /// ****CAUTION******
@@ -39,17 +39,17 @@
   const ReifyFunctionTypes(this.value);
 }
 
+class _NullCheck {
+  const _NullCheck();
+}
+
 /// Tells the development compiler to check a variable for null at its
 /// declaration point, and then to assume that the variable is non-null
 /// from that point forward.
 /// ****CAUTION******
 /// This is currently unchecked, and hence will not catch re-assignments
 /// of a variable with null
-class NullCheck {
-  const NullCheck();
-}
-
-const nullCheck = const NullCheck();
+const nullCheck = const _NullCheck();
 
 /// Tells the optimizing compiler that the annotated method cannot throw.
 /// Requires @NoInline() to function correctly.
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types.dart
index 41af78b..7e04491 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types.dart
@@ -577,7 +577,7 @@
     var typeBounds = instantiateTypeBounds(typeFormals);
     for (int i = 0, n = typeFormals.length; i < n; i++) {
       if (i != 0) s += ", ";
-      s += JS('String', '#[#].name', typeFormals, i);
+      s += JS<String>('!', '#[#].name', typeFormals, i);
       var typeBound = typeBounds[i];
       if (!identical(typeBound, _dynamic)) {
         s += " extends $typeBound";
diff --git a/pkg/dev_compiler/tool/input_sdk/private/foreign_helper.dart b/pkg/dev_compiler/tool/input_sdk/private/foreign_helper.dart
index e3e7213..c5e77b7 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/foreign_helper.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/foreign_helper.dart
@@ -106,7 +106,7 @@
  */
 // Add additional optional arguments if needed. The method is treated internally
 // as a variable argument method.
-JS(String typeDescription, String codeTemplate,
+T JS<T>(String typeDescription, String codeTemplate,
     [arg0,
     arg1,
     arg2,
diff --git a/pkg/dev_compiler/tool/input_sdk/private/interceptors.dart b/pkg/dev_compiler/tool/input_sdk/private/interceptors.dart
index 5f70732..7de9168 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/interceptors.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/interceptors.dart
@@ -34,10 +34,12 @@
   const JSBool();
 
   // Note: if you change this, also change the function [S].
+  @notNull
   String toString() => JS('String', r'String(#)', this);
 
   // The values here are SMIs, co-prime and differ about half of the bit
   // positions, including the low bit, so they are different mod 2^k.
+  @notNull
   int get hashCode => this ? (2 * 3 * 23 * 3761) : (269 * 811);
 
   Type get runtimeType => bool;
diff --git a/pkg/dev_compiler/tool/input_sdk/private/js_number.dart b/pkg/dev_compiler/tool/input_sdk/private/js_number.dart
index e55e404..fa8a5d8 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/js_number.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/js_number.dart
@@ -202,7 +202,7 @@
     int exponent = JS("int", "+#", match[3]);
     if (match[2] != null) {
       result = JS('String', '# + #', result, match[2]);
-      exponent -= JS('int', '#.length', match[2]);
+      exponent -= JS<int>('!', '#.length', match[2]);
     }
     return result + "0" * exponent;
   }
@@ -554,5 +554,6 @@
     return i;
   }
 
+  @notNull
   int operator ~() => JS('int', r'(~#) >>> 0', this);
 }
diff --git a/pkg/expect/lib/expect.dart b/pkg/expect/lib/expect.dart
index 020e409..c04b1ce 100644
--- a/pkg/expect/lib/expect.dart
+++ b/pkg/expect/lib/expect.dart
@@ -178,6 +178,55 @@
         "fails.");
   }
 
+  /**
+   * Checks whether the expected and actual values are *not* identical
+   * (using `identical`).
+   */
+  static void notIdentical(var unexpected, var actual, [String reason = null]) {
+    if (!_identical(unexpected, actual)) return;
+    String msg = _getMessage(reason);
+    _fail("Expect.notIdentical(expected and actual: <$actual>$msg) fails.");
+  }
+
+  /**
+   * Checks that no two [objects] are `identical`.
+   */
+  static void allDistinct(List<Object> objects, [String reason = null]) {
+    String msg = _getMessage(reason);
+    var equivalences = new List<List<int>>(objects.length);
+    bool hasEquivalence = false;
+    for (int i = 0; i < objects.length; i++) {
+      if (equivalences[i] != null) continue;
+      var o = objects[i];
+      for (int j = i + 1; j < objects.length; j++) {
+        if (equivalences[j] != null) continue;
+        if (_identical(o, objects[j])) {
+          equivalences[j] = (equivalences[i] ??= <int>[i])..add(j);
+          hasEquivalence = true;
+        }
+      }
+    }
+    if (!hasEquivalence) return;
+    var buffer = new StringBuffer("Expect.allDistinct([");
+    var separator = "";
+    for (int i = 0; i < objects.length; i++) {
+      buffer.write(separator);
+      separator = ",";
+      var equivalence = equivalences[i];
+      if (equivalence == null) {
+        buffer.write('_');
+      } else {
+        int first = equivalence[0];
+        buffer..write('#')..write(first);
+        if (first == i) {
+          buffer..write('=')..write(objects[i]);
+        }
+      }
+    }
+    buffer..write("]")..write(msg)..write(")");
+    _fail(buffer.toString());
+  }
+
   // Unconditional failure.
   static void fail(String msg) {
     _fail("Expect.fail('$msg')");
@@ -514,15 +563,16 @@
   }
 }
 
+/// Used in [Expect] because [Expect.identical] shadows the real [identical].
 bool _identical(a, b) => identical(a, b);
 
 typedef bool _CheckExceptionFn(exception);
 typedef _Nullary(); // Expect.throws argument must be this type.
 
 class ExpectException implements Exception {
+  final String message;
   ExpectException(this.message);
   String toString() => message;
-  String message;
 }
 
 /// Annotation class for testing of dart2js. Use this as metadata on method
diff --git a/pkg/expect/test/distinct_test.dart b/pkg/expect/test/distinct_test.dart
new file mode 100644
index 0000000..5750782
--- /dev/null
+++ b/pkg/expect/test/distinct_test.dart
@@ -0,0 +1,91 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+main() {
+  var o1 = new Object();
+  var o2 = new Object();
+  var o3 = new Object();
+  var c1 = new C(0);
+  var c2 = new C(0);
+
+  // Successful checks.
+  Expect.notIdentical(o1, o2, "msg");
+
+  Expect.equals(c1, c2);
+  Expect.notIdentical(c1, c2, "msg");
+
+  Expect.notIdentical([1], [1], "msg");
+
+  Expect.allDistinct([], "msg");
+  Expect.allDistinct([o1], "msg");
+  Expect.allDistinct([
+    o1,
+    o2,
+    c1,
+    c2,
+    [1]
+  ], "msg");
+  Expect.allDistinct(new List.generate(100, (_) => new Object()));
+
+  fails((msg) {
+    Expect.notIdentical(o1, o1, msg);
+  });
+
+  fails((msg) {
+    var list = [1];
+    Expect.notIdentical(list, list, msg);
+  });
+
+  fails((msg) {
+    Expect.allDistinct([o1, o1], msg);
+  });
+  fails((msg) {
+    Expect.allDistinct([o1, o1, o1, o1], msg);
+  });
+  fails((msg) {
+    Expect.allDistinct([o1, o1, o2, o3], msg);
+  });
+  fails((msg) {
+    Expect.allDistinct([o1, o2, o1, o3], msg);
+  });
+  fails((msg) {
+    Expect.allDistinct([o1, o2, o3, o1], msg);
+  });
+  fails((msg) {
+    Expect.allDistinct([o1, o2, o2, o3], msg);
+  });
+  fails((msg) {
+    Expect.allDistinct([o1, o2, o3, o2], msg);
+  });
+  fails((msg) {
+    Expect.allDistinct([o1, o2, o3, o3], msg);
+  });
+  fails((msg) {
+    var list = new List.generate(100, (_) => new Object());
+    list.add(list[0]);
+    Expect.allDistinct(list, msg);
+  });
+}
+
+class C {
+  final x;
+  const C(this.x);
+  int get hashCode => x.hashCode;
+  bool operator ==(Object other) => other is C && x == other.x;
+}
+
+int _ctr = 0;
+fails(test(msg)) {
+  var msg = "__#${_ctr++}#__"; // "Unique" name.
+  try {
+    test(msg);
+    throw "Did not throw!";
+  } on ExpectException catch (e) {
+    if (e.message.indexOf(msg) < 0) {
+      throw "Failure did not contain message: \"$msg\" not in ${e.message}";
+    }
+  }
+}
diff --git a/pkg/front_end/example/incremental_reload/compiler_with_invalidation.dart b/pkg/front_end/example/incremental_reload/compiler_with_invalidation.dart
deleted file mode 100644
index f164c52..0000000
--- a/pkg/front_end/example/incremental_reload/compiler_with_invalidation.dart
+++ /dev/null
@@ -1,170 +0,0 @@
-// 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.
-
-/// A wrapper on top of the [IncrementalKernelGenerator] that tracks
-/// file modifications between subsequent compilation requests and only
-/// invalidates those files that appear to be modified.
-library front_end.example.incremental_reload.compiler_with_invalidation;
-
-import 'dart:io';
-import 'dart:async';
-
-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/incremental_kernel_generator.dart';
-import 'package:kernel/ast.dart';
-import 'package:kernel/binary/limited_ast_to_binary.dart';
-import 'package:kernel/target/targets.dart';
-
-/// Create an instance of an [IncrementalCompiler] to compile a program whose
-/// main entry point file is [entry]. This uses some default options
-/// for the location of the sdk and temporary folder to save intermediate
-/// results.
-Future<IncrementalCompiler> createIncrementalCompiler(String entry,
-    {bool persistent: true, Uri sdkRoot, Target target}) {
-  var entryUri = Uri.base.resolve(entry);
-  var tmpDir = Directory.systemTemp.createTempSync('ikg_cache');
-  var options = new CompilerOptions()
-    ..sdkRoot = sdkRoot ?? Uri.base.resolve("sdk/")
-    ..packagesFileUri = Uri.base.resolve('.packages')
-    ..strongMode = false
-    ..target = target
-    // Note: we do not report error on the console because the incremental
-    // compiler is an ongoing background service that shouldn't polute stdout.
-    // TODO(sigmund): do something with the errors.
-    ..onError = (_) {}
-    ..byteStore =
-        persistent ? new FileByteStore(tmpDir.path) : new MemoryByteStore();
-  return IncrementalCompiler.create(options, entryUri);
-}
-
-/// An incremental compiler that monitors file modifications on disk and
-/// invalidates only files that have been modified since the previous time the
-/// compiler was invoked.
-class IncrementalCompiler {
-  /// Underlying incremental compiler implementation.
-  IncrementalKernelGenerator _generator;
-
-  /// Last modification for each tracked input file.
-  Map<Uri, DateTime> lastModified = {};
-
-  /// Create an instance of [IncrementalCompiler].
-  static Future<IncrementalCompiler> create(
-      CompilerOptions options, Uri entryUri) async {
-    var compiler = new IncrementalCompiler._internal();
-    compiler._generator = await IncrementalKernelGenerator
-        .newInstance(options, entryUri, watch: compiler._watch);
-    return compiler;
-  }
-
-  IncrementalCompiler._internal();
-
-  /// Callback for the [IncrementalKernelGenerator] to keep track of relevant
-  /// files.
-  Future _watch(Uri uri, bool used) {
-    if (used) {
-      lastModified[uri] ??= new File.fromUri(uri).lastModifiedSync();
-    } else {
-      lastModified.remove(uri);
-    }
-    return new Future.value(null);
-  }
-
-  /// How many files changed during the last call to [recompile].
-  int changed;
-
-  /// Time spent updating time-stamps from disk during the last call to
-  /// [recompile].
-  int invalidateTime;
-
-  /// Time actually spent compiling the code in the incremental compiler during
-  /// the last call to [recompile].
-  int compileTime;
-
-  /// Determine which files have been modified, and recompile the program
-  /// incrementally based on that information.
-  Future<Program> recompile() async {
-    changed = 0;
-    invalidateTime = 0;
-    compileTime = 0;
-
-    var invalidateTimer = new Stopwatch()..start();
-    for (var uri in lastModified.keys.toList()) {
-      var last = lastModified[uri];
-      var current = new File.fromUri(uri).lastModifiedSync();
-      if (last != current) {
-        lastModified[uri] = current;
-        _generator.invalidate(uri);
-        changed++;
-      }
-    }
-    invalidateTimer.stop();
-    invalidateTime = invalidateTimer.elapsedMilliseconds;
-    if (changed == 0 && lastModified.isNotEmpty) return null;
-
-    var compileTimer = new Stopwatch()..start();
-    var delta = await _generator.computeDelta();
-    _generator.acceptLastDelta();
-    compileTimer.stop();
-    compileTime = compileTimer.elapsedMilliseconds;
-    var program = delta.newProgram;
-    return program;
-  }
-}
-
-/// The result of an incremental compile and metrics collected during the
-/// the compilation.
-class CompilationResult {
-  /// How many files were modified by the time we invoked the compiler again.
-  int changed = 0;
-
-  /// How many files are currently being tracked for modifications.
-  int totalFiles = 0;
-
-  /// How long it took to invalidate files that have been modified.
-  int invalidateTime = 0;
-
-  /// How long it took to build the incremental program.
-  int compileTime = 0;
-
-  /// How long it took to do the hot-reload in the VM.
-  int reloadTime = 0;
-
-  /// Whether we saw errors during compilation or reload.
-  bool errorSeen = false;
-
-  /// Error message when [errorSeen] is true.
-  String errorDetails;
-
-  /// The program that was generated by the incremental compiler.
-  Program program;
-}
-
-/// Request a recompile and possibly a reload, and gather timing metrics.
-Future<CompilationResult> rebuild(
-    IncrementalCompiler compiler, Uri outputUri) async {
-  var result = new CompilationResult();
-  try {
-    var program = result.program = await compiler.recompile();
-    if (program != null && !program.libraries.isEmpty) {
-      var sink = new File.fromUri(outputUri).openWrite();
-      // TODO(sigmund): should the incremental generator always filter these
-      // libraries instead?
-      new LimitedBinaryPrinter(
-              sink, (library) => library.importUri.scheme != 'dart', false)
-          .writeProgramFile(program);
-      await sink.close();
-    }
-  } catch (e, t) {
-    result.errorDetails = 'compilation error: $e, $t';
-    result.errorSeen = true;
-  }
-
-  result.changed = compiler.changed;
-  result.totalFiles = compiler.lastModified.length;
-  result.invalidateTime = compiler.invalidateTime;
-  result.compileTime = compiler.compileTime;
-  result.reloadTime = 0;
-  return result;
-}
diff --git a/pkg/front_end/example/incremental_reload/run.dart b/pkg/front_end/example/incremental_reload/run.dart
deleted file mode 100644
index dace9a4..0000000
--- a/pkg/front_end/example/incremental_reload/run.dart
+++ /dev/null
@@ -1,311 +0,0 @@
-// 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.
-
-/// Example that illustrates how to use the incremental compiler and trigger a
-/// hot-reload on the VM after recompiling the application.
-///
-/// This example resembles the `run` command in flutter-tools. It creates an
-/// interactive command-line program that waits for the user to tap a key to
-/// trigger a recompile and reload.
-///
-/// The following instructions assume a linux checkout of the SDK:
-///   * Build the SDK
-///
-/// ```
-///    ./tools/build.py -m release
-/// ```
-///
-///   * On one terminal (terminal A), start this script and point it to an
-///   example program "foo.dart" and keep the job running. A good example
-///   program would do something periodically, so you can see the effect
-///   of a hot-reload while the app is running.
-///
-/// ```
-///    out/ReleaseX64/dart pkg/front_end/example/incremental_reload/run.dart foo.dart out.dill
-/// ```
-///
-///   * Trigger an initial compile of the program by hitting the "c" key in
-///   terminal A.
-///
-///   * On another terminal (terminal B), start the program on the VM, with the
-///   service-protocol enabled and provide the precompiled platform libraries:
-///
-/// TODO(ahe): This documentation is out of date.
-/// ```
-///    out/ReleaseX64/dart --enable-vm-service --platform=out/ReleaseX64/platform.dill out.dill
-/// ```
-///
-///   * Modify the orginal program
-///
-///   * In terminal A, hit the "r" key to trigger a recompile and hot reload.
-///
-///   * See the changed program in terminal B
-library front_end.example.incremental_reload.run;
-
-import 'dart:io';
-import 'dart:async';
-import 'dart:convert' show ASCII;
-
-import 'package:args/args.dart';
-import 'package:kernel/target/targets.dart';
-
-import '../../test/tool/reload.dart';
-
-import 'compiler_with_invalidation.dart';
-
-ArgParser argParser = new ArgParser(allowTrailingOptions: true)
-  ..addOption('sdk-root', help: 'Path to sdk for compilation')
-  ..addOption('output',
-      help: 'Output dill file', defaultsTo: 'out.dill', abbr: 'o')
-  ..addOption('target',
-      help: 'One of none, vm, vmcc, vmreify, flutter', defaultsTo: 'vm');
-
-String usage = '''
-Usage: dart [options] input.dart
-
-Runs console-driven incremental compiler.
-
-Options:
-${argParser.usage}
-''';
-
-RemoteVm remoteVm = new RemoteVm();
-AnsiTerminal terminal = new AnsiTerminal();
-
-main(List<String> args) async {
-  ArgResults options = argParser.parse(args);
-  if (options.rest.isEmpty) {
-    print('Need an input file');
-    print(usage);
-    exit(1);
-  }
-
-  var compiler = await createIncrementalCompiler(options.rest[0],
-      sdkRoot:
-          options['sdk-root'] != null ? Uri.parse(options['sdk-root']) : null,
-      target: targets[options['target']](new TargetFlags()));
-  var outputUri = Uri.base.resolve(options['output']);
-
-  showHeader();
-  listenOnKeyPress(compiler, outputUri)
-      .whenComplete(() => remoteVm.disconnect());
-}
-
-/// Implements the interactive UI by listening for input keys from the user.
-Future listenOnKeyPress(IncrementalCompiler compiler, Uri outputUri) {
-  var completer = new Completer();
-  terminal.singleCharMode = true;
-  StreamSubscription subscription;
-  subscription = terminal.onCharInput.listen((String char) async {
-    try {
-      CompilationResult compilationResult;
-      ReloadResult reloadResult;
-      switch (char.trim()) {
-        case 'r':
-          compilationResult = await rebuild(compiler, outputUri);
-          if (!compilationResult.errorSeen &&
-              compilationResult.program != null &&
-              compilationResult.program.libraries.isNotEmpty) {
-            reloadResult = await reload(outputUri);
-          }
-          break;
-        case 'c':
-          compilationResult = await rebuild(compiler, outputUri);
-          break;
-        case 'l':
-          reloadResult = await reload(outputUri);
-          break;
-        case 'q':
-          terminal.singleCharMode = false;
-          print('');
-          subscription.cancel();
-          completer.complete(null);
-          break;
-        default:
-          break;
-      }
-      if (compilationResult != null || reloadResult != null) {
-        reportStats(compilationResult, reloadResult, outputUri);
-      }
-    } catch (e) {
-      terminal.singleCharMode = false;
-      subscription.cancel();
-      completer.completeError(null);
-      rethrow;
-    }
-  }, onError: (e) {
-    terminal.singleCharMode = false;
-    subscription.cancel();
-    completer.completeError(null);
-  });
-
-  return completer.future;
-}
-
-/// Request a reload and gather timing metrics.
-Future<ReloadResult> reload(outputUri) async {
-  var result = new ReloadResult();
-  var reloadTimer = new Stopwatch()..start();
-  var reloadResult = await remoteVm.reload(outputUri);
-  reloadTimer.stop();
-  result.reloadTime = reloadTimer.elapsedMilliseconds;
-  result.errorSeen = false;
-  result.errorDetails;
-  if (!reloadResult['success']) {
-    result.errorSeen = true;
-    result.errorDetails = reloadResult['details']['notices'].first['message'];
-  }
-  return result;
-}
-
-/// Results from requesting a hot reload.
-class ReloadResult {
-  /// How long it took to do the hot-reload in the VM.
-  int reloadTime = 0;
-
-  /// Whether we saw errors during compilation or reload.
-  bool errorSeen = false;
-
-  /// Error message when [errorSeen] is true.
-  String errorDetails;
-}
-
-/// This script shows stats about each reload on the terminal in a table form.
-/// This function prints out the header of such table.
-showHeader() {
-  print(terminal.bolden('Press a key to trigger a command:'));
-  print(terminal.bolden('   r:  incremental compile + reload'));
-  print(terminal.bolden('   c:  incremental compile w/o reload'));
-  print(terminal.bolden('   l:  reload w/o recompile'));
-  print(terminal.bolden('   q:  quit'));
-  print(terminal.bolden(
-      '#    Files     Files %      ------- Time -------------------------  Binary\n'
-      '     Modified  Sent  Total      Check Compile   Reload    Total      Avg   Size  '));
-}
-
-/// Whether to show stats as a single line (override metrics on each request)
-const bool singleLine = false;
-
-var total = 0;
-var iter = 0;
-var timeSum = 0;
-var lastLine = 0;
-
-/// Show stats about a recompile and reload.
-reportStats(CompilationResult compilationResult, ReloadResult reloadResult,
-    Uri outputUri) {
-  compilationResult ??= new CompilationResult();
-  reloadResult ??= new ReloadResult();
-  int changed = compilationResult.changed;
-  int updated = compilationResult.program?.libraries?.length ?? 0;
-  int totalFiles = compilationResult.totalFiles;
-  int invalidateTime = compilationResult.invalidateTime;
-  int compileTime = compilationResult.compileTime;
-  int reloadTime = reloadResult.reloadTime;
-  bool errorSeen = compilationResult.errorSeen || reloadResult.errorSeen;
-  String errorDetails =
-      compilationResult.errorDetails ?? reloadResult.errorDetails;
-
-  var totalTime = invalidateTime + compileTime + reloadTime;
-  timeSum += totalTime;
-  total++;
-  iter++;
-  var avgTime = (timeSum / total).truncate();
-  var size = new File.fromUri(outputUri).statSync().size;
-
-  var percent = (100 * updated / totalFiles).toStringAsFixed(0);
-  var line = '${_padl(iter, 3)}: '
-      '${_padl(changed, 8)}  ${_padl(updated, 5)} ${_padl(percent, 4)}%  '
-      '${_padl(invalidateTime, 5)} ms '
-      '${_padl(compileTime, 5)} ms '
-      '${_padl(reloadTime, 5)} ms '
-      '${_padl(totalTime, 5)} ms '
-      '${_padl(avgTime, 5)} ms '
-      '${_padl(size, 5)}b';
-  var len = line.length;
-  if (singleLine) stdout.write('\r');
-  stdout.write((errorSeen) ? terminal.red(line) : terminal.green(line));
-  if (!singleLine) stdout.write('\n');
-  if (errorSeen) {
-    if (!singleLine) errorDetails = '  error: $errorDetails\n';
-    len += errorDetails.length;
-    stdout.write(errorDetails);
-  }
-  if (singleLine) {
-    var diff = " " * (lastLine - len);
-    stdout.write(diff);
-  }
-  lastLine = len;
-}
-
-_padl(x, n) {
-  var s = '$x';
-  return ' ' * (n - s.length) + s;
-}
-
-/// Helper to control an ANSI terminal (adapted from flutter_tools)
-class AnsiTerminal {
-  static const String _bold = '\u001B[1m';
-  static const String _green = '\u001B[32m';
-  static const String _red = '\u001B[31m';
-  static const String _reset = '\u001B[0m';
-  static const String _clear = '\u001B[2J\u001B[H';
-
-  static const int _ENXIO = 6;
-  static const int _ENOTTY = 25;
-  static const int _ENETRESET = 102;
-  static const int _INVALID_HANDLE = 6;
-
-  /// Setting the line mode can throw for some terminals (with "Operation not
-  /// supported on socket"), but the error can be safely ignored.
-  static const List<int> _lineModeIgnorableErrors = const <int>[
-    _ENXIO,
-    _ENOTTY,
-    _ENETRESET,
-    _INVALID_HANDLE,
-  ];
-
-  String bolden(String message) => wrap(message, _bold);
-
-  String green(String message) => wrap(message, _green);
-
-  String red(String message) => wrap(message, _red);
-
-  String wrap(String message, String escape) {
-    final StringBuffer buffer = new StringBuffer();
-    for (String line in message.split('\n'))
-      buffer.writeln('$escape$line$_reset');
-    final String result = buffer.toString();
-    // avoid introducing a new newline to the emboldened text
-    return (!message.endsWith('\n') && result.endsWith('\n'))
-        ? result.substring(0, result.length - 1)
-        : result;
-  }
-
-  String clearScreen() => _clear;
-
-  set singleCharMode(bool value) {
-    // TODO(goderbauer): instead of trying to set lineMode and then catching
-    // [_ENOTTY] or [_INVALID_HANDLE], we should check beforehand if stdin is
-    // connected to a terminal or not.
-    // (Requires https://github.com/dart-lang/sdk/issues/29083 to be resolved.)
-    try {
-      // The order of setting lineMode and echoMode is important on Windows.
-      if (value) {
-        stdin.echoMode = false;
-        stdin.lineMode = false;
-      } else {
-        stdin.lineMode = true;
-        stdin.echoMode = true;
-      }
-    } on StdinException catch (error) {
-      if (!_lineModeIgnorableErrors.contains(error.osError?.errorCode)) rethrow;
-    }
-  }
-
-  /// Return keystrokes from the console.
-  ///
-  /// Useful when the console is in [singleCharMode].
-  Stream<String> get onCharInput => stdin.transform(ASCII.decoder);
-}
diff --git a/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
index aae2ecf..e01387f 100644
--- a/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
@@ -2,171 +2,30 @@
 // for details. 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:async' show Future;
 
-import 'package:front_end/src/base/processed_options.dart';
-import 'package:front_end/src/fasta/compiler_context.dart';
-import 'package:front_end/src/incremental_kernel_generator_impl.dart';
-import 'package:front_end/src/minimal_incremental_kernel_generator.dart';
-import 'package:kernel/kernel.dart';
+import 'package:kernel/kernel.dart' show Program;
 
-import 'package:front_end/src/fasta/incremental_compiler.dart'
-    show IncrementalCompiler;
+import '../base/processed_options.dart' show ProcessedOptions;
 
-import 'compiler_options.dart';
+import '../fasta/compiler_context.dart' show CompilerContext;
 
-/// Force using the Fasta incremental compiler [IncrementalCompiler]. This is
-/// useful for uploading patches to golem (benchmark service).
-const bool _forceFasta = false;
+import '../fasta/incremental_compiler.dart' show IncrementalCompiler;
 
-/// When true, use the Fasta incremental compiler [IncrementalCompiler].
-const bool _useFasta =
-    const bool.fromEnvironment("ikg-use-fasta", defaultValue: _forceFasta);
+import 'compiler_options.dart' show CompilerOptions;
 
-/// The type of the function that clients can pass to track used files.
-///
-/// When a file is first used during compilation, this function is called with
-/// the [Uri] of that file and [used] == `true`. The content of the file is not
-/// read until the [Future] returned by the function completes. If, during a
-/// subsequent compilation, a file that was being used is no longer used, then
-/// the function is called with the [Uri] of that file and [used] == `false`.
-///
-/// Multiple invocations of may be running concurrently.
-///
-typedef Future<Null> WatchUsedFilesFn(Uri uri, bool used);
-
-/// Represents the difference between "old" and "new" states of a program.
-///
-/// Not intended to be implemented or extended by clients.
-class DeltaProgram {
-  /// The state of the program.
-  ///
-  /// It should be treated as opaque data by the clients. Its only purpose is
-  /// to be passed to [IncrementalKernelGeneratorImpl.setState].
-  final String state;
-
-  /// The new program.
-  ///
-  /// It includes full kernels for changed libraries and for libraries that
-  /// are affected by the transitive change of API in the changed libraries.
-  ///
-  /// For VM reload purposes we need to provide also full kernels for the
-  /// libraries that are transitively imported by the entry point and
-  /// transitively import a changed library.
-  ///
-  /// Also includes external references to other libraries that were not
-  /// modified or affected.
-  final Program newProgram;
-
-  DeltaProgram(this.state, this.newProgram);
-}
-
-/// Interface for generating an initial kernel representation of a program and
-/// keeping it up to date as incremental changes are made.
-///
-/// This class maintains an internal "current program state"; each time
-/// [computeDelta] is called, it computes the "last program state" and libraries
-/// that were affected relative to the "current program state".  When there are
-/// few changes, a call to [computeDelta] should be much faster than compiling
-/// the whole program from scratch.
-///
-/// Each invocation of [computeDelta] must be followed by invocation of either
-/// [acceptLastDelta] or [rejectLastDelta].  [acceptLastDelta] makes the
-/// "last program state" the "current program state".  [rejectLastDelta] simply
-/// discards the "last program state", so that the "current program state"
-/// stays the same.
-///
-/// This class also maintains a set of "valid sources", which is a (possibly
-/// empty) subset of the sources constituting the previous program state.  Files
-/// in this set are assumed to be unchanged since the last call to
-/// [computeDelta].
-///
-/// Behavior is undefined if the client does not obey the following concurrency
-/// restrictions:
-/// - no two invocations of [computeDelta] may be outstanding at any given time.
-/// - [invalidate] may not be called while an invocation of [computeDelta] is
-///   outstanding.
-///
-/// Not intended to be implemented or extended by clients.
 abstract class IncrementalKernelGenerator {
-  /// Notify the generator that the last [DeltaProgram] returned from the
-  /// [computeDelta] was accepted.  So, the "last program state" becomes the
-  /// "current program state", and the next invocation of [computeDelta] will
-  /// not include the libraries of the last delta, unless these libraries are
-  /// affected by [invalidate] since the last [computeDelta].
-  void acceptLastDelta();
+  factory IncrementalKernelGenerator(CompilerOptions options, Uri entryPoint) {
+    return new IncrementalCompiler(new CompilerContext(
+        new ProcessedOptions(options, false, [entryPoint])));
+  }
 
-  /// Generates a kernel representation of the changes to the program, assuming
-  /// that all valid sources are unchanged since the last call to
-  /// [computeDelta].
-  ///
-  /// Source files in the set of valid sources are guaranteed not to be re-read
-  /// from disk; they are assumed to be unchanged regardless of the state of the
-  /// filesystem.
-  ///
-  /// If the future completes successfully, the previous file state is updated
-  /// and the set of valid sources is set to the set of all sources in the
-  /// program.
-  ///
-  /// If the future completes with an error (due to errors in the compiled
-  /// source code), the caller may consider the previous file state and the set
-  /// of valid sources to be unchanged; this means that once the user fixes the
-  /// errors, it is safe to call [computeDelta] again.
-  ///
-  /// Each invocation of [computeDelta] must be followed by invocation of
-  /// either [acceptLastDelta] or [rejectLastDelta].
-  Future<DeltaProgram> computeDelta();
+  /// Returns a component (nee program) whose libraries are the recompiled
+  /// libraries.
+  Future<Program> computeDelta({Uri entryPoint});
 
   /// Remove the file associated with the given file [uri] from the set of
   /// valid files.  This guarantees that those files will be re-read on the
   /// next call to [computeDelta]).
   void invalidate(Uri uri);
-
-  /// Notify the generator that the last [DeltaProgram] returned from the
-  /// [computeDelta] was rejected.  The "last program state" is discarded and
-  /// the "current program state" is kept unchanged.
-  void rejectLastDelta();
-
-  /// Notify the generator that the client wants to reset the "current program
-  /// state" to nothing, so that the next invocation of [computeDelta] will
-  /// include all the program libraries.  Neither [acceptLastDelta] nor
-  /// [rejectLastDelta] are allowed after this method until the next
-  /// [computeDelta] invocation.
-  void reset();
-
-  /// Set the "current program state", so that the next invocation of
-  /// [computeDelta] will include only libraries changed since this [state].
-  ///
-  /// The [state] must be a value returned in [DeltaProgram.state].
-  void setState(String state);
-
-  /// Creates an [IncrementalKernelGenerator] which is prepared to generate
-  /// kernel representations of the program whose main library is in the given
-  /// [entryPoint].
-  ///
-  /// The initial "previous program state" is an empty program containing no
-  /// code, and the initial set of valid sources is empty.  To obtain a kernel
-  /// representation of the program, call [computeDelta].
-  static Future<IncrementalKernelGenerator> newInstance(
-      CompilerOptions options, Uri entryPoint,
-      {WatchUsedFilesFn watch, bool useMinimalGenerator: false}) async {
-    var processedOptions = new ProcessedOptions(options, false, [entryPoint]);
-    if (_useFasta) {
-      return new IncrementalCompiler(new CompilerContext(processedOptions));
-    }
-    return await CompilerContext.runWithOptions(processedOptions,
-        (compilerContext) async {
-      var uriTranslator = await processedOptions.getUriTranslator();
-      var sdkOutlineBytes = await processedOptions.loadSdkSummaryBytes();
-      if (useMinimalGenerator) {
-        return new MinimalIncrementalKernelGenerator(
-            processedOptions, uriTranslator, sdkOutlineBytes, entryPoint,
-            watch: watch);
-      } else {
-        return new IncrementalKernelGeneratorImpl(
-            processedOptions, uriTranslator, sdkOutlineBytes, entryPoint,
-            watch: watch);
-      }
-    });
-  }
 }
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 e9f701a..a858fa1a 100644
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
@@ -52,6 +52,8 @@
         exportScopeBuilder = new ScopeBuilder(exportScope),
         super(null, -1, fileUri);
 
+  bool get isPart => false;
+
   @override
   String get debugName => "LibraryBuilder";
 
diff --git a/pkg/front_end/lib/src/fasta/builder/load_library_builder.dart b/pkg/front_end/lib/src/fasta/builder/load_library_builder.dart
index c4bfb5f..85234f3 100644
--- a/pkg/front_end/lib/src/fasta/builder/load_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/load_library_builder.dart
@@ -10,7 +10,7 @@
         ProcedureKind,
         Name,
         FunctionNode,
-        ExpressionStatement,
+        ReturnStatement,
         LibraryDependency;
 
 import 'builder.dart' show Builder, LibraryBuilder;
@@ -39,10 +39,8 @@
     if (tearoff != null) return tearoff;
     LoadLibrary expression = createLoadLibrary(charOffset);
     String prefix = expression.import.name;
-    tearoff = new Procedure(
-        new Name('__loadLibrary_$prefix', parent.target),
-        ProcedureKind.Method,
-        new FunctionNode(new ExpressionStatement(expression)),
+    tearoff = new Procedure(new Name('__loadLibrary_$prefix', parent.target),
+        ProcedureKind.Method, new FunctionNode(new ReturnStatement(expression)),
         fileUri: parent.target.fileUri)
       ..fileOffset = charOffset;
     return tearoff;
diff --git a/pkg/front_end/lib/src/fasta/configuration.dart b/pkg/front_end/lib/src/fasta/configuration.dart
new file mode 100644
index 0000000..d12a43a
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/configuration.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.
+
+library fasta.configuration;
+
+class Configuration {
+  final int charOffset;
+  final String dottedName;
+  final String condition;
+  final String importUri;
+  Configuration(
+      this.charOffset, this.dottedName, this.condition, this.importUri);
+}
diff --git a/pkg/front_end/lib/src/fasta/import.dart b/pkg/front_end/lib/src/fasta/import.dart
index 6850699..09ababc 100644
--- a/pkg/front_end/lib/src/fasta/import.dart
+++ b/pkg/front_end/lib/src/fasta/import.dart
@@ -12,6 +12,8 @@
 
 import 'combinator.dart' show Combinator;
 
+import 'configuration.dart' show Configuration;
+
 typedef void AddToScope(String name, Builder member);
 
 class Import {
@@ -29,12 +31,21 @@
 
   final List<Combinator> combinators;
 
+  final List<Configuration> configurations;
+
   final int charOffset;
 
   final int prefixCharOffset;
 
-  Import(this.importer, this.imported, this.deferred, this.prefix,
-      this.combinators, this.charOffset, this.prefixCharOffset)
+  Import(
+      this.importer,
+      this.imported,
+      this.deferred,
+      this.prefix,
+      this.combinators,
+      this.configurations,
+      this.charOffset,
+      this.prefixCharOffset)
       : prefixBuilder = createPrefixBuilder(prefix, importer, imported,
             combinators, deferred, charOffset, prefixCharOffset);
 
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 0a3c742..2c8d581 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -10,7 +10,7 @@
     show Library, Program, Source, loadProgramFromBytes;
 
 import '../api_prototype/incremental_kernel_generator.dart'
-    show DeltaProgram, IncrementalKernelGenerator;
+    show IncrementalKernelGenerator;
 
 import 'builder/builder.dart' show LibraryBuilder;
 
@@ -24,44 +24,11 @@
 
 import 'compiler_context.dart' show CompilerContext;
 
-import 'problems.dart' show unsupported;
-
 import 'ticker.dart' show Ticker;
 
 import 'uri_translator.dart' show UriTranslator;
 
-abstract class DeprecatedIncrementalKernelGenerator
-    implements IncrementalKernelGenerator {
-  /// This does nothing. It will be deprecated.
-  @override
-  void acceptLastDelta() {}
-
-  /// Always throws an error. Will be deprecated.
-  @override
-  void rejectLastDelta() => unsupported("rejectLastDelta", -1, null);
-
-  /// Always throws an error. Will be deprecated.
-  @override
-  void reset() => unsupported("rejectLastDelta", -1, null);
-
-  /// Always throws an error. Will be deprecated.
-  @override
-  void setState(String state) => unsupported("setState", -1, null);
-}
-
-abstract class DeprecatedDeltaProgram implements DeltaProgram {
-  @override
-  String get state => unsupported("state", -1, null);
-}
-
-class FastaDelta extends DeprecatedDeltaProgram {
-  @override
-  final Program newProgram;
-
-  FastaDelta(this.newProgram);
-}
-
-class IncrementalCompiler extends DeprecatedIncrementalKernelGenerator {
+class IncrementalCompiler implements IncrementalKernelGenerator {
   final CompilerContext context;
 
   final Ticker ticker;
@@ -75,10 +42,10 @@
   IncrementalCompiler(this.context) : ticker = context.options.ticker;
 
   @override
-  Future<FastaDelta> computeDelta({Uri entryPoint}) async {
+  Future<Program> computeDelta({Uri entryPoint}) async {
     ticker.reset();
     entryPoint ??= context.options.inputs.single;
-    return context.runInContext<Future<FastaDelta>>((CompilerContext c) async {
+    return context.runInContext<Future<Program>>((CompilerContext c) async {
       if (platform == null) {
         UriTranslator uriTranslator = await c.options.getUriTranslator();
         ticker.logMs("Read packages file");
@@ -105,6 +72,9 @@
             " of ${userCode.loader.builders.length} libraries");
       }
 
+      platform.loader.builders.forEach((Uri uri, LibraryBuilder builder) {
+        reusedLibraries.add(builder);
+      });
       userCode = new KernelTarget(
           c.fileSystem, false, platform, platform.uriTranslator,
           uriToSource: c.uriToSource);
@@ -125,17 +95,15 @@
           await userCode.buildProgram(verify: c.options.verify);
 
       // This is the incremental program.
-      Program program = new Program(
-          nameRoot: programWithDill.root,
+      return new Program(
           libraries: new List<Library>.from(userCode.loader.libraries),
-          uriToSource: new Map<Uri, Source>.from(userCode.uriToSource));
-
-      return new FastaDelta(program);
+          uriToSource: new Map<Uri, Source>.from(userCode.uriToSource))
+        ..mainMethod = programWithDill?.mainMethod;
     });
   }
 
   List<LibraryBuilder> computeReusedLibraries(Iterable<Uri> invalidatedUris) {
-    if (userCode == null) return const <LibraryBuilder>[];
+    if (userCode == null) return <LibraryBuilder>[];
 
     // [invalidatedUris] converted to a set.
     Set<Uri> invalidatedFileUris = invalidatedUris.toSet();
@@ -148,17 +116,23 @@
     List<Uri> invalidatedImportUris = <Uri>[];
 
     // Compute [builders] and [invalidatedImportUris].
-    userCode.loader.builders.forEach((Uri uri, LibraryBuilder library) {
-      if (library.loader != platform.loader) {
-        assert(library is SourceLibraryBuilder);
+    addBuilderAndInvalidateUris(Uri uri, LibraryBuilder libraryBuilder) {
+      if (libraryBuilder.loader != platform.loader) {
+        assert(libraryBuilder is SourceLibraryBuilder);
+        SourceLibraryBuilder library = libraryBuilder;
         builders[uri] = library;
         if (invalidatedFileUris.contains(uri) ||
             (uri != library.fileUri &&
                 invalidatedFileUris.contains(library.fileUri))) {
           invalidatedImportUris.add(uri);
         }
+        for (var part in library.parts) {
+          addBuilderAndInvalidateUris(part.uri, part);
+        }
       }
-    });
+    }
+
+    userCode.loader.builders.forEach(addBuilderAndInvalidateUris);
 
     SourceGraph graph = new SourceGraph(builders);
 
@@ -188,7 +162,7 @@
       }
     }
 
-    return builders.values.toList();
+    return builders.values.where((builder) => !builder.isPart).toList();
   }
 
   @override
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 e2d9584..b2c9042 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1852,7 +1852,7 @@
       }
     }
     if (name is TypeDeclarationAccessor) {
-      push(name.buildType(arguments));
+      push(name.buildTypeWithBuiltArguments(arguments));
     } else if (name is FastaAccessor) {
       addProblem(fasta.templateNotAType.withArguments(beginToken.lexeme),
           beginToken.charOffset);
@@ -2222,16 +2222,15 @@
       if (optional("-", token)) {
         operator = "unary-";
 
-        var new_receiver = null;
         if (receiver is LargeIntAccessor) {
           int value =
               int.parse("-" + receiver.token.lexeme, onError: (_) => null);
           if (value != null) {
-            new_receiver = new ShadowIntLiteral(value)
-              ..fileOffset = offsetForToken(token);
+            push(new ShadowIntLiteral(value)
+              ..fileOffset = offsetForToken(token));
+            return;
           }
         }
-        if (new_receiver != null) receiver = new_receiver;
       }
       bool isSuper = false;
       Expression receiverValue;
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 e76982b..5f39fe4 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -47,11 +47,15 @@
         Builder,
         FunctionTypeAliasBuilder,
         KernelClassBuilder,
+        KernelFunctionTypeAliasBuilder,
         KernelInvalidTypeBuilder,
+        KernelLibraryBuilder,
+        KernelTypeVariableBuilder,
         LibraryBuilder,
         LoadLibraryBuilder,
         PrefixBuilder,
-        TypeDeclarationBuilder;
+        TypeDeclarationBuilder,
+        KernelTypeBuilder;
 
 import 'kernel_shadow_ast.dart'
     show
@@ -65,10 +69,10 @@
         ShadowTypeLiteral,
         ShadowVariableAssignment;
 
-import 'kernel_type_variable_builder.dart' show KernelTypeVariableBuilder;
-
 import 'utils.dart' show offsetForToken;
 
+import 'type_algorithms.dart' show calculateBoundsForDeclaration;
+
 abstract class BuilderHelper {
   LibraryBuilder get library;
 
@@ -1050,8 +1054,8 @@
               ..fileOffset = offsetForToken(token))
           ..fileOffset = offset;
       } else {
-        super.expression = new ShadowTypeLiteral(
-            prefix?.name, buildType(null, nonInstanceAccessIsError: true))
+        super.expression = new ShadowTypeLiteral(prefix?.name,
+            buildTypeWithBuiltArguments(null, nonInstanceAccessIsError: true))
           ..fileOffset = offsetForToken(token);
       }
     }
@@ -1111,7 +1115,7 @@
     }
   }
 
-  DartType buildType(List<DartType> arguments,
+  DartType buildTypeWithBuiltArguments(List<DartType> arguments,
       {bool nonInstanceAccessIsError: false}) {
     if (arguments != null) {
       int expected = 0;
@@ -1138,8 +1142,68 @@
         arguments = null;
       }
     }
-    DartType type =
-        declaration.buildTypesWithBuiltArguments(helper.library, arguments);
+
+    DartType type;
+    LibraryBuilder helperLibrary = helper.library;
+    if (arguments == null &&
+        helperLibrary is KernelLibraryBuilder &&
+        helperLibrary.loader.target.strongMode) {
+      TypeDeclarationBuilder typeDeclaration = declaration;
+      if (typeDeclaration is KernelClassBuilder) {
+        typeDeclaration.calculatedBounds ??= calculateBoundsForDeclaration(
+            typeDeclaration,
+            helperLibrary.loader.target.dynamicType,
+            helperLibrary.loader.coreLibrary["Object"]);
+        type = typeDeclaration.buildType(
+            helper.library, typeDeclaration.calculatedBounds);
+      } else if (typeDeclaration is KernelFunctionTypeAliasBuilder) {
+        typeDeclaration.calculatedBounds ??= calculateBoundsForDeclaration(
+            typeDeclaration,
+            helperLibrary.loader.target.dynamicType,
+            helperLibrary.loader.coreLibrary["Object"]);
+        type = typeDeclaration.buildType(
+            helper.library, typeDeclaration.calculatedBounds);
+      }
+    }
+    if (type == null) {
+      type =
+          declaration.buildTypesWithBuiltArguments(helper.library, arguments);
+    }
+    if (type is TypeParameterType) {
+      return helper.validatedTypeVariableUse(
+          type, offsetForToken(token), nonInstanceAccessIsError);
+    }
+    return type;
+  }
+
+  DartType buildType(List<KernelTypeBuilder> arguments,
+      {bool nonInstanceAccessIsError: false}) {
+    if (arguments != null) {
+      int expected = 0;
+      if (declaration is KernelClassBuilder) {
+        expected = declaration.target.typeParameters.length;
+      } else if (declaration is FunctionTypeAliasBuilder) {
+        expected = declaration.target.typeParameters.length;
+      } else if (declaration is KernelTypeVariableBuilder) {
+        // Type arguments on a type variable - error reported elsewhere.
+      } else {
+        return unhandled(
+            "${declaration.runtimeType}",
+            "TypeDeclarationAccessor.buildType",
+            offsetForToken(token),
+            helper.uri);
+      }
+      if (arguments.length != expected) {
+        helper.warnTypeArgumentsMismatch(
+            declaration.name, expected, offsetForToken(token));
+        // We ignore the provided arguments, which will in turn return the
+        // raw type below.
+        // TODO(sigmund): change to use an InvalidType and include the raw type
+        // as a recovery node once the IR can represent it (Issue #29840).
+        arguments = null;
+      }
+    }
+    DartType type = declaration.buildType(helper.library, arguments);
     if (type is TypeParameterType) {
       return helper.validatedTypeVariableUse(
           type, offsetForToken(token), nonInstanceAccessIsError);
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 b6c0c8d..3c0a807 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
@@ -327,7 +327,9 @@
       procedure.isConst = isConst;
       procedure.name = new Name(name, library.target);
     }
-    if (library.loader.target.strongMode && isSetter && returnType == null) {
+    if (library.loader.target.strongMode &&
+        (isSetter || (isOperator && name == '[]=')) &&
+        returnType == null) {
       procedure.function.returnType = const VoidType();
     }
     return procedure;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index beb24cf..74c1484 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -174,7 +174,7 @@
     }
     var inferredType =
         inferrer.inferExpression(operand, typeContext, typeNeeded);
-    inferredType = inferrer.typeSchemaEnvironment.flattenFutures(inferredType);
+    inferredType = inferrer.typeSchemaEnvironment.unfutureType(inferredType);
     inferrer.listener.awaitExpressionExit(this, inferredType);
     return inferredType;
   }
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 1495999..9ab59f7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -244,8 +244,8 @@
       if (metadataCollector != null) {
         program.addMetadataRepository(metadataCollector.repository);
       }
-      loader.computeHierarchy(program);
       computeCoreTypes();
+      loader.computeHierarchy();
       if (!loader.target.disableTypeInference) {
         loader.prepareTopLevelInference(myClasses);
         loader.performTopLevelInference(myClasses);
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
index 3a1ccb2..a53c0bd 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -9,7 +9,9 @@
         KernelNamedTypeBuilder,
         KernelTypeVariableBuilder,
         KernelClassBuilder,
-        KernelFunctionTypeAliasBuilder;
+        KernelFunctionTypeAliasBuilder,
+        NamedTypeBuilder,
+        TypeDeclarationBuilder;
 
 KernelTypeBuilder substituteRec(
     KernelTypeBuilder type,
@@ -75,3 +77,35 @@
   }
   return result;
 }
+
+List<KernelTypeBuilder> calculateBoundsForDeclaration(
+    TypeDeclarationBuilder typeDeclarationBuilder,
+    KernelTypeBuilder dynamicType,
+    KernelClassBuilder objectClass) {
+  List<TypeVariableBuilder> typeParameters;
+
+  if (typeDeclarationBuilder is KernelClassBuilder) {
+    typeParameters = typeDeclarationBuilder.typeVariables;
+  } else if (typeDeclarationBuilder is KernelFunctionTypeAliasBuilder) {
+    typeParameters = typeDeclarationBuilder.typeVariables;
+  }
+
+  if (typeParameters == null || typeParameters.length == 0) {
+    return null;
+  }
+
+  return calculateBounds(typeParameters, dynamicType, objectClass);
+}
+
+int instantiateToBoundInPlace(NamedTypeBuilder typeBuilder,
+    KernelTypeBuilder dynamicType, KernelClassBuilder objectClass) {
+  int count = 0;
+
+  if (typeBuilder.arguments == null) {
+    typeBuilder.arguments = calculateBoundsForDeclaration(
+        typeBuilder.builder, dynamicType, objectClass);
+    count = typeBuilder.arguments?.length ?? 0;
+  }
+
+  return count;
+}
diff --git a/pkg/front_end/lib/src/fasta/parser/modifier_context.dart b/pkg/front_end/lib/src/fasta/parser/modifier_context.dart
index ad8d6e5..062b01d 100644
--- a/pkg/front_end/lib/src/fasta/parser/modifier_context.dart
+++ b/pkg/front_end/lib/src/fasta/parser/modifier_context.dart
@@ -31,54 +31,67 @@
   return true;
 }
 
-/// Parse modifiers in the token stream, and return a context with information
-/// about what was parsed. [start] is the last token consumed by the parser
-/// prior to calling this method and [context.lastModifier] is the last token
-/// consumed by this method when this method returns. If no modifiers were
-/// parsed, then [context.lastModifier] will be the same as [start].
-///
-/// This method is used in most locations where modifiers can occur. However,
-/// it isn't used when parsing a class or when parsing the modifiers of a
-/// member function (non-local), but is used when parsing their formal
-/// parameters.
-///
-/// When parsing the formal parameters of any function, [parameterKind] is
-/// non-null.
+/// Parse modifiers in the token stream, and return a [ModifierContext]
+/// with information about what was parsed.
 ModifierContext parseModifiersOpt(
     Parser parser,
     Token start,
+    Token lastModifier,
     MemberKind memberKind,
     FormalParameterKind parameterKind,
     bool isVarAllowed,
-    TypeContinuation typeContiunation) {
-  ModifierContext context = new ModifierContext(
-      parser, memberKind, parameterKind, isVarAllowed, typeContiunation);
+    TypeContinuation typeContinuation) {
+  // Parse modifiers
+  ModifierContext context = new ModifierContext(parser, memberKind,
+      parameterKind, isVarAllowed, typeContinuation, lastModifier);
   Token token = context.parseOpt(start);
 
   // If the next token is a modifier,
   // then it's probably out of order and we need to recover from that.
-  if (isModifier(token.next)) {
+  if (token != lastModifier) {
     // Recovery
-    context = new ModifierRecoveryContext(
-        parser, memberKind, parameterKind, isVarAllowed, typeContiunation);
+    context = new ModifierRecoveryContext(parser, memberKind, parameterKind,
+        isVarAllowed, typeContinuation, lastModifier);
     token = context.parseOpt(start);
   }
 
   parser.listener.handleModifiers(context.modifierCount);
 
   context.typeContinuation ??=
-      (isVarAllowed || context.memberKind == MemberKind.GeneralizedFunctionType)
-          ? TypeContinuation.Required
-          : TypeContinuation.Optional;
-  context.lastModifier = token;
+      typeContinuationFromMemberKind(isVarAllowed, context.memberKind);
 
   return context;
 }
 
+/// Skip modifier tokens until the last modifier token is reached
+/// and return that token. If [token] is not a modifier, then return [token].
+Token skipToLastModifier(Token token) {
+  Token next = token.next;
+  while (isModifier(next)) {
+    token = next;
+    next = token.next;
+  }
+  return token;
+}
+
+TypeContinuation typeContinuationFromMemberKind(
+        bool isVarAllowed, MemberKind memberKind) =>
+    (isVarAllowed || memberKind == MemberKind.GeneralizedFunctionType)
+        ? TypeContinuation.Required
+        : TypeContinuation.Optional;
+
+/// This class is used to parse modifiers in most locations where modifiers
+/// can occur. However, it isn't used when parsing a class or when parsing
+/// the modifiers of a member function (non-local),
+/// but is used when parsing their formal parameters.
 class ModifierContext {
   final Parser parser;
   MemberKind memberKind;
+
+  /// When parsing the formal parameters of any function,
+  /// [parameterKind] is non-null.
   final FormalParameterKind parameterKind;
+
   final bool isVarAllowed;
   TypeContinuation typeContinuation;
   int modifierCount = 0;
@@ -89,37 +102,45 @@
   Token lastModifier;
 
   ModifierContext(this.parser, this.memberKind, this.parameterKind,
-      this.isVarAllowed, this.typeContinuation);
+      this.isVarAllowed, this.typeContinuation, this.lastModifier);
 
   bool get isCovariantFinalAllowed =>
       memberKind != MemberKind.StaticField &&
       memberKind != MemberKind.NonStaticField;
 
   Token parseOpt(Token token) {
-    if (optional('external', token.next)) {
-      token = parseExternalOpt(token);
-    }
-
-    if (optional('static', token.next)) {
-      token = parseStaticOpt(token);
-    } else if (optional('covariant', token.next)) {
-      token = parseCovariantOpt(token);
-      if (optional('final', token.next)) {
-        if (isCovariantFinalAllowed) {
-          token = parseFinal(token);
-        }
-      } else if (optional('var', token.next)) {
-        token = parseVar(token);
+    if (token != lastModifier) {
+      if (optional('external', token.next)) {
+        token = parseExternalOpt(token);
       }
-      return token;
-    }
 
-    if (optional('final', token.next)) {
-      token = parseFinal(token);
-    } else if (optional('var', token.next)) {
-      token = parseVar(token);
-    } else if (optional('const', token.next)) {
-      token = parseConst(token);
+      if (token != lastModifier) {
+        if (optional('static', token.next)) {
+          token = parseStaticOpt(token);
+        } else if (optional('covariant', token.next)) {
+          token = parseCovariantOpt(token);
+          if (token != lastModifier) {
+            if (optional('final', token.next)) {
+              if (isCovariantFinalAllowed) {
+                token = parseFinal(token);
+              }
+            } else if (optional('var', token.next)) {
+              token = parseVar(token);
+            }
+          }
+          return token;
+        }
+      }
+
+      if (token != lastModifier) {
+        if (optional('final', token.next)) {
+          token = parseFinal(token);
+        } else if (optional('var', token.next)) {
+          token = parseVar(token);
+        } else if (optional('const', token.next)) {
+          token = parseConst(token);
+        }
+      }
     }
     return token;
   }
@@ -284,9 +305,10 @@
       MemberKind memberKind,
       FormalParameterKind parameterKind,
       bool isVarAllowed,
-      TypeContinuation typeContinuation)
-      : super(
-            parser, memberKind, parameterKind, isVarAllowed, typeContinuation);
+      TypeContinuation typeContinuation,
+      Token lastModifier)
+      : super(parser, memberKind, parameterKind, isVarAllowed, typeContinuation,
+            lastModifier);
 
   @override
   Token parseOpt(Token token) {
@@ -298,7 +320,7 @@
     parser.listener = primaryListener;
 
     // Process invalid and out-of-order modifiers
-    while (isModifier(token.next)) {
+    while (token != lastModifier) {
       final value = token.next.stringValue;
       if (identical('abstract', value)) {
         token = parseAbstract(token);
@@ -433,8 +455,14 @@
 
   Token parseExtraneousModifier(Token token) {
     Token next = token.next;
-    parser.reportRecoverableErrorWithToken(
-        next, fasta.templateExtraneousModifier);
+    if (next.isModifier) {
+      parser.reportRecoverableErrorWithToken(
+          next, fasta.templateExtraneousModifier);
+    } else {
+      // TODO(danrubel): Provide more specific error messages.
+      parser.reportRecoverableErrorWithToken(
+          next, fasta.templateUnexpectedToken);
+    }
     return next;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index 35a452c..fd654fe 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -81,7 +81,9 @@
         ModifierContext,
         TopLevelMethodModifierContext,
         isModifier,
-        parseModifiersOpt;
+        parseModifiersOpt,
+        skipToLastModifier,
+        typeContinuationFromMemberKind;
 
 import 'recovery_listeners.dart'
     show ClassHeaderRecoveryListener, ImportRecoveryListener;
@@ -89,7 +91,7 @@
 import 'token_stream_rewriter.dart' show TokenStreamRewriter;
 
 import 'type_continuation.dart'
-    show TypeContinuation, typeContiunationFromFormalParameterKind;
+    show TypeContinuation, typeContinuationFromFormalParameterKind;
 
 import 'util.dart' show beforeCloseBraceTokenFor, closeBraceTokenFor, optional;
 
@@ -1151,18 +1153,28 @@
   Token parseFormalParameter(
       Token token, FormalParameterKind parameterKind, MemberKind memberKind) {
     token = parseMetadataStar(token);
-    listener.beginFormalParameter(token.next, memberKind);
-    ModifierContext modifierContext = parseModifiersOpt(
-        this,
-        token,
-        memberKind,
-        parameterKind,
-        false,
-        typeContiunationFromFormalParameterKind(parameterKind));
-    TypeContinuation typeContinuation = modifierContext.typeContinuation;
-    memberKind = modifierContext.memberKind;
-    token = modifierContext.lastModifier;
-    modifierContext = null;
+    Token next = token.next;
+    listener.beginFormalParameter(next, memberKind);
+
+    TypeContinuation typeContinuation =
+        typeContinuationFromFormalParameterKind(parameterKind);
+    if (isModifier(next)) {
+      ModifierContext modifierContext = parseModifiersOpt(
+          this,
+          token,
+          skipToLastModifier(token),
+          memberKind,
+          parameterKind,
+          false,
+          typeContinuation);
+      typeContinuation = modifierContext.typeContinuation;
+      memberKind = modifierContext.memberKind;
+      token = modifierContext.lastModifier;
+      modifierContext = null;
+    } else {
+      listener.handleModifiers(0);
+      typeContinuation ??= typeContinuationFromMemberKind(false, memberKind);
+    }
 
     return parseType(token, typeContinuation, null, memberKind);
   }
@@ -1272,8 +1284,10 @@
     int kind = token.kind;
     if (IDENTIFIER_TOKEN == kind) return true;
     if (KEYWORD_TOKEN == kind) {
-      String value = token.type.lexeme;
-      return token.type.isPseudo ||
+      TokenType type = token.type;
+      String value = type.lexeme;
+      return type.isPseudo ||
+          (type.isBuiltIn && optional('.', token.next)) ||
           (identical(value, 'dynamic')) ||
           (identical(value, 'void'));
     }
@@ -1506,6 +1520,7 @@
     if (!optional('{', token.next)) {
       // Recovery
       token = parseClassHeaderRecovery(start, begin, classKeyword);
+      ensureBlock(token, fasta.templateExpectedClassBody);
     }
     token = parseClassBody(token);
     listener.endClassDeclaration(begin, token);
@@ -2718,7 +2733,8 @@
         // but missing a variable name.
         insertSyntheticIdentifier(
             token, IdentifierContext.topLevelVariableDeclaration);
-        return parseFields(beforeStart, token, true);
+        return parseFields(
+            beforeStart, token.isModifier ? token : beforeStart, token, true);
       } else {
         return reportInvalidTopLevelDeclaration(token);
       }
@@ -2741,7 +2757,16 @@
     }
     Token beforeType;
     if (!identifiers.isEmpty) {
-      if (isValidTypeReference(identifiers.head.next)) {
+      Token maybeType = identifiers.head.next;
+      if (isValidTypeReference(maybeType)) {
+        beforeType = identifiers.head;
+        identifiers = identifiers.tail;
+      } else if (maybeType.type.isBuiltIn && optional('<', maybeType.next)) {
+        // Recovery
+        // It is an error when built-in keyword is being used
+        // as a type, as in `abstract<t> foo`.
+        // This error is reported by parseFields and parseTopLevelMethod
+        // via ensureIdentifier.
         beforeType = identifiers.head;
         identifiers = identifiers.tail;
       }
@@ -2776,22 +2801,24 @@
         if (identical(token.next.kind, EOF_TOKEN)) return token;
       }
     }
-    Token afterModifiers =
-        identifiers.isNotEmpty ? identifiers.head.next.next : beforeStart.next;
+    Token lastModifier =
+        identifiers.isNotEmpty ? identifiers.head.next : beforeStart;
     return isField
-        ? parseFields(beforeStart, beforeName, true)
+        ? parseFields(beforeStart, lastModifier, beforeName, true)
         : parseTopLevelMethod(
-            beforeStart, afterModifiers, beforeType, getOrSet, beforeName);
+            beforeStart, lastModifier, beforeType, getOrSet, beforeName);
   }
 
-  Token parseFields(Token start, Token beforeName, bool isTopLevel) {
+  Token parseFields(
+      Token start, Token lastModifier, Token beforeName, bool isTopLevel) {
     ModifierContext modifierContext = parseModifiersOpt(
         this,
         start,
+        lastModifier,
         isTopLevel ? MemberKind.TopLevelField : MemberKind.NonStaticField,
         null,
         true,
-        typeContiunationFromFormalParameterKind(null));
+        typeContinuationFromFormalParameterKind(null));
     TypeContinuation typeContinuation = modifierContext.typeContinuation;
     MemberKind memberKind = modifierContext.memberKind;
     Token varFinalOrConst = modifierContext.varFinalOrConst;
@@ -2828,8 +2855,9 @@
     return token;
   }
 
-  Token parseTopLevelMethod(Token start, Token afterModifiers, Token beforeType,
+  Token parseTopLevelMethod(Token start, Token lastModifier, Token beforeType,
       Token getOrSet, Token beforeName) {
+    Token afterModifiers = lastModifier.next;
     Token beforeToken = start;
     Token token = start = start.next;
     Token name = beforeName.next;
@@ -3030,7 +3058,7 @@
           }
         } else if (token.type.isBuiltIn) {
           // Handle the edge case where a built-in keyword is being used
-          // as the identifier, as in "abstract<T>() => 0;"
+          // as the identifier, as in "abstract<T>() => 0;".
           if (optional('<', token.next)) {
             Token beforeIdentifier = previous;
             Token identifier = token;
@@ -3413,20 +3441,16 @@
   /// ;
   /// ```
   Token parseClassBody(Token token) {
-    Token previousToken = token;
     Token begin = token = token.next;
+    assert(optional('{', token));
     listener.beginClassBody(token);
-    if (!optional('{', token)) {
-      token =
-          begin = ensureBlock(previousToken, fasta.templateExpectedClassBody);
-    }
     int count = 0;
     while (notEofOrValue('}', token.next)) {
       token = parseClassMember(token);
       ++count;
     }
     token = token.next;
-    expect('}', token);
+    assert(optional('}', token));
     listener.endClassBody(count, begin, token);
     return token;
   }
@@ -3504,7 +3528,16 @@
     }
     Token beforeType;
     if (!identifiers.isEmpty) {
-      if (isValidTypeReference(identifiers.head.next)) {
+      Token maybeType = identifiers.head.next;
+      if (isValidTypeReference(maybeType)) {
+        beforeType = identifiers.head;
+        identifiers = identifiers.tail;
+      } else if (maybeType.type.isBuiltIn && optional('<', maybeType.next)) {
+        // Recovery
+        // It is an error when built-in keyword is being used
+        // as a type, as in `abstract<t> foo`.
+        // This error is reported by parseFields and parseMethod
+        // via ensureIdentifier.
         beforeType = identifiers.head;
         identifiers = identifiers.tail;
       }
@@ -3550,7 +3583,7 @@
 
     Token lastModifier = identifiers.isNotEmpty ? identifiers.head.next : start;
     token = isField
-        ? parseFields(start, beforeName, false)
+        ? parseFields(start, lastModifier, beforeName, false)
         : parseMethod(start, lastModifier, beforeType, getOrSet, beforeName);
     listener.endMember();
     return token;
@@ -5327,12 +5360,20 @@
   Token parseVariablesDeclarationMaybeSemicolon(
       Token token, bool endWithSemicolon) {
     token = parseMetadataStar(token);
-    ModifierContext modifierContext =
-        parseModifiersOpt(this, token, MemberKind.Local, null, true, null);
-    token = modifierContext.lastModifier;
-    TypeContinuation typeContinuation = modifierContext.typeContinuation;
-    MemberKind memberKind = modifierContext.memberKind;
-    modifierContext = null;
+
+    MemberKind memberKind = MemberKind.Local;
+    TypeContinuation typeContinuation;
+    if (isModifier(token.next)) {
+      ModifierContext modifierContext = parseModifiersOpt(
+          this, token, skipToLastModifier(token), memberKind, null, true, null);
+      token = modifierContext.lastModifier;
+      typeContinuation = modifierContext.typeContinuation;
+      memberKind = modifierContext.memberKind;
+      modifierContext = null;
+    } else {
+      listener.handleModifiers(0);
+      typeContinuation = typeContinuationFromMemberKind(true, memberKind);
+    }
 
     token = parseType(token, typeContinuation, null, memberKind);
     return parseVariablesDeclarationMaybeSemicolonRest(token, endWithSemicolon);
@@ -5997,30 +6038,39 @@
       listener.endMember();
       return next;
     }
+
     // Skip modifiers
     while (isModifier(next)) {
       token = next;
       next = token.next;
     }
+    Token lastModifier = token;
+
     if (isValidTypeReference(next) || optional('var', next)) {
       if (isPostIdentifierForRecovery(
           next.next, IdentifierContext.fieldDeclaration)) {
         // Looks like a field declaration but missing a field name.
         insertSyntheticIdentifier(next, IdentifierContext.fieldDeclaration);
-        return parseFields(start, next, false);
+        token = parseFields(start, lastModifier, next, false);
+        listener.endMember();
+        return token;
       } else if (next.next.isKeywordOrIdentifier &&
           isPostIdentifierForRecovery(
               next.next.next, IdentifierContext.fieldDeclaration)) {
         // Looks like a field declaration but missing a semicolon
         // which parseFields will insert.
-        return parseFields(start, next, false);
+        token = parseFields(start, lastModifier, next, false);
+        listener.endMember();
+        return token;
       }
     } else if (token != start &&
         isPostIdentifierForRecovery(next, IdentifierContext.fieldDeclaration)) {
       // If there is at least one modifier, then
       // looks like the start of a field but missing field name.
       insertSyntheticIdentifier(token, IdentifierContext.fieldDeclaration);
-      return parseFields(start, token, false);
+      token = parseFields(start, lastModifier, token, false);
+      listener.endMember();
+      return token;
     }
     return reportUnrecoverableErrorWithToken(
         start, fasta.templateExpectedClassMember);
diff --git a/pkg/front_end/lib/src/fasta/parser/type_continuation.dart b/pkg/front_end/lib/src/fasta/parser/type_continuation.dart
index a622770..300d819 100644
--- a/pkg/front_end/lib/src/fasta/parser/type_continuation.dart
+++ b/pkg/front_end/lib/src/fasta/parser/type_continuation.dart
@@ -69,7 +69,7 @@
   NamedFormalParameterAfterVar,
 }
 
-TypeContinuation typeContiunationFromFormalParameterKind(
+TypeContinuation typeContinuationFromFormalParameterKind(
     FormalParameterKind type) {
   if (type != null) {
     switch (type) {
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 23c24c9..c96b248 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -44,7 +44,9 @@
 
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 
-import 'unhandled_listener.dart' show NullValue, Unhandled, UnhandledListener;
+import 'unhandled_listener.dart' show NullValue, UnhandledListener;
+
+import '../configuration.dart' show Configuration;
 
 enum MethodBody {
   Abstract,
@@ -143,7 +145,7 @@
   void endExport(Token exportKeyword, Token semicolon) {
     debugEvent("Export");
     List<Combinator> combinators = pop();
-    Unhandled conditionalUris = pop();
+    List<Configuration> conditionalUris = pop();
     int uriOffset = popCharOffset();
     String uri = pop();
     List<MetadataBuilder> metadata = pop();
@@ -171,16 +173,39 @@
     bool isDeferred = pop();
     int prefixOffset = pop();
     String prefix = pop(NullValue.Prefix);
-    Unhandled conditionalUris = pop();
+    List<Configuration> configurations = pop();
     int uriOffset = popCharOffset();
-    String uri = pop();
+    String uri = pop(); // For a conditional import, this is the default URI.
     List<MetadataBuilder> metadata = pop();
-    library.addImport(metadata, uri, conditionalUris, prefix, combinators,
+    library.addImport(metadata, uri, configurations, prefix, combinators,
         isDeferred, importKeyword.charOffset, prefixOffset, uriOffset);
     checkEmpty(importKeyword.charOffset);
   }
 
   @override
+  void endConditionalUris(int count) {
+    debugEvent("EndConditionalUris");
+    push(popList(count) ?? NullValue.ConditionalUris);
+  }
+
+  @override
+  void endConditionalUri(Token ifKeyword, Token leftParen, Token equalSign) {
+    debugEvent("EndConditionalUri");
+    int charOffset = popCharOffset();
+    String uri = pop();
+    if (equalSign != null) popCharOffset();
+    String condition = popIfNotNull(equalSign) ?? "true";
+    String dottedName = pop();
+    push(new Configuration(charOffset, dottedName, condition, uri));
+  }
+
+  @override
+  void handleDottedName(int count, Token firstIdentifier) {
+    debugEvent("DottedName");
+    push(popIdentifierList(count).join('.'));
+  }
+
+  @override
   void handleRecoverImport(Token semicolon) {
     debugEvent("RecoverImport");
     pop(); // combinators
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 a7765da..fac3d9b 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
@@ -30,7 +30,6 @@
         TypeBuilder,
         TypeDeclarationBuilder,
         TypeVariableBuilder,
-        Unhandled,
         UnresolvedType;
 
 import '../combinator.dart' show Combinator;
@@ -58,6 +57,8 @@
 
 import '../import.dart' show Import;
 
+import '../configuration.dart' show Configuration;
+
 import '../problems.dart' show unhandled;
 
 import 'source_loader.dart' show SourceLoader;
@@ -120,6 +121,7 @@
 
   Uri get uri;
 
+  @override
   bool get isPart => partOfName != null || partOfUri != null;
 
   List<UnresolvedType<T>> get types => libraryDeclaration.types;
@@ -191,7 +193,7 @@
   void addExport(
       List<MetadataBuilder> metadata,
       String uri,
-      Unhandled conditionalUris,
+      List<Configuration> conditionalUris,
       List<Combinator> combinators,
       int charOffset,
       int uriOffset) {
@@ -201,16 +203,37 @@
     exports.add(new Export(this, exportedLibrary, combinators, charOffset));
   }
 
+  String _lookupImportCondition(String dottedName) {
+    const String prefix = "dart.library.";
+    if (!dottedName.startsWith(prefix)) return "";
+    dottedName = dottedName.substring(prefix.length);
+
+    LibraryBuilder coreLibrary =
+        loader.read(resolve(this.uri, "dart:core", -1), -1);
+    LibraryBuilder imported = coreLibrary
+        .loader.builders[new Uri(scheme: 'dart', path: dottedName)];
+    return imported != null ? "true" : "";
+  }
+
   void addImport(
       List<MetadataBuilder> metadata,
       String uri,
-      Unhandled conditionalUris,
+      List<Configuration> configurations,
       String prefix,
       List<Combinator> combinators,
       bool deferred,
       int charOffset,
       int prefixCharOffset,
       int uriOffset) {
+    if (configurations != null) {
+      for (Configuration config in configurations) {
+        if (_lookupImportCondition(config.dottedName) == config.condition) {
+          uri = config.importUri;
+          break;
+        }
+      }
+    }
+
     imports.add(new Import(
         this,
         loader.read(resolve(this.uri, uri, uriOffset), charOffset,
@@ -218,6 +241,7 @@
         deferred,
         prefix,
         combinators,
+        configurations,
         charOffset,
         prefixCharOffset));
   }
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 0a200c4..9f8bf37 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -11,15 +11,12 @@
 import 'package:front_end/src/fasta/type_inference/interface_resolver.dart'
     show InterfaceResolver;
 
-import 'package:kernel/ast.dart' show Arguments, Expression, Program;
+import 'package:kernel/ast.dart' show Arguments, Expression, Library, Program;
 
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
 
 import 'package:kernel/core_types.dart' show CoreTypes;
 
-import 'package:kernel/src/incremental_class_hierarchy.dart'
-    show IncrementalClassHierarchy;
-
 import '../../api_prototype/file_system.dart';
 
 import '../../base/instrumentation.dart'
@@ -543,8 +540,18 @@
     ticker.logMs("Built program");
   }
 
-  void computeHierarchy(Program program) {
-    hierarchy = new IncrementalClassHierarchy();
+  Program computeFullProgram() {
+    List<Library> libraries = <Library>[];
+    builders.forEach((Uri uri, LibraryBuilder library) {
+      if (!library.isPart && !library.isPatch) {
+        libraries.add(library.target);
+      }
+    });
+    return new Program()..libraries.addAll(libraries);
+  }
+
+  void computeHierarchy() {
+    hierarchy = new ClassHierarchy.deprecated_incremental(computeFullProgram());
     ticker.logMs("Computed class hierarchy");
   }
 
@@ -627,8 +634,8 @@
     // target those forwarding stubs.
     // TODO(paulberry): could we make this unnecessary by not clearing class
     // inference info?
-    typeInferenceEngine.classHierarchy =
-        hierarchy = new IncrementalClassHierarchy();
+    typeInferenceEngine.classHierarchy = hierarchy =
+        new ClassHierarchy.deprecated_incremental(computeFullProgram());
     ticker.logMs("Performed top level inference");
   }
 
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 e9ff8ac..1c0c539 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
@@ -34,6 +34,7 @@
   Combinators,
   Comments,
   ConditionalUris,
+  ConditionallySelectedImport,
   ConstructorInitializerSeparator,
   ConstructorInitializers,
   ConstructorReferenceContinuationAfterTypeArguments,
diff --git a/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart b/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
index 7cd7cd6..78cf4a8 100644
--- a/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
+++ b/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
@@ -9,7 +9,7 @@
 
 import 'dart:async' show Future;
 
-import 'dart:io' show Directory, File, IOSink;
+import 'dart:io' show Directory, File, IOSink, Platform;
 
 import 'dart:typed_data' show Uint8List;
 
@@ -275,7 +275,17 @@
 }
 
 Future<String> runDiff(Uri expected, String actual) async {
-  // TODO(ahe): Implement this for Windows.
+  if (Platform.isWindows) {
+    // TODO(ahe): Implement this for Windows.
+    return """
+==> Expected ($expected) <==
+${new File.fromUri(expected).readAsStringSync()}
+
+==> Actual <==
+$actual
+
+""";
+  }
   StdioProcess process = await StdioProcess
       .run("diff", <String>["-u", expected.toFilePath(), "-"], input: actual);
   return process.output;
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 5cdc260..1105396 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
@@ -458,15 +458,18 @@
         requiredParameterCount: target.function.requiredParameterCount,
         returnType: substitution.substituteType(target.function.returnType));
     Member finalTarget;
-    if (target is ForwardingStub) {
-      finalTarget = ForwardingStub.getInterfaceTarget(target);
+    if (target is Procedure && target.isForwardingStub) {
+      finalTarget = target.forwardingStubInterfaceTarget.node;
     } else if (target is SyntheticAccessor) {
       finalTarget = target._field;
     } else {
       finalTarget = target;
     }
-    return new ForwardingStub(finalTarget, name, kind, function,
-        fileUri: enclosingClass.fileUri)
+    return new Procedure(name, kind, function,
+        isAbstract: true,
+        isForwardingStub: true,
+        fileUri: enclosingClass.fileUri,
+        forwardingStubInterfaceTarget: finalTarget.reference)
       ..fileOffset = enclosingClass.fileOffset
       ..parent = enclosingClass
       ..isGenericContravariant = target.isGenericContravariant;
@@ -650,30 +653,6 @@
   }
 }
 
-/// Represents a [Procedure] generated by the front end to serve as a forwarding
-/// stub.
-///
-/// This class exists to work around dartbug.com/31519.
-/// TODO(paulberry): remove when dartbug.com/31519 is fixed.
-class ForwardingStub extends Procedure {
-  /// The interface target that this forwarding stub replaces.
-  final Member _interfaceTarget;
-
-  ForwardingStub(this._interfaceTarget, Name name, ProcedureKind kind,
-      FunctionNode function, {Uri fileUri})
-      : super(name, kind, function,
-            isAbstract: true, isForwardingStub: true, fileUri: fileUri);
-
-  /// Retrieves the [_interfaceTarget] from a forwarding stub.
-  ///
-  /// This method exists so that we don't have to expose [_interfaceTarget] as
-  /// a public getter (which might confuse clients of the front end that aren't
-  /// expecting it).
-  static Member getInterfaceTarget(ForwardingStub stub) {
-    return stub._interfaceTarget;
-  }
-}
-
 /// An [InterfaceResolver] keeps track of the information necessary to resolve
 /// method calls, gets, and sets within a chunk of code being compiled, to
 /// infer covariance annotations, and to create forwarwding stubs when necessary
@@ -1089,7 +1068,12 @@
     }
     if (procedure.kind != ProcedureKind.Setter &&
         ShadowProcedure.hasImplicitReturnType(procedure)) {
-      return true;
+      // Inference of the return type of `[]=` is handled separately by
+      // KernelProcedureBuilder.build, since there are no dependencies.
+      if (procedure.kind != ProcedureKind.Operator ||
+          procedure.name.name != '[]=') {
+        return true;
+      }
     }
     var function = procedure.function;
     for (var parameter in function.positionalParameters) {
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 0af6595..42119d5 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
@@ -122,7 +122,7 @@
       }
     } else if (isAsync) {
       returnContext = inferrer.wrapFutureOrType(
-          inferrer.typeSchemaEnvironment.flattenFutures(returnContext));
+          inferrer.typeSchemaEnvironment.unfutureType(returnContext));
     }
     return new ClosureContext._(isAsync, isGenerator, returnContext,
         needToInferReturnType, needImplicitDowncasts);
@@ -136,26 +136,50 @@
   void handleReturn(TypeInferrerImpl inferrer, DartType type,
       Expression expression, int fileOffset) {
     if (isGenerator) return;
-    var unwrappedType = type;
-    if (isAsync) {
-      if (type is InterfaceType) {
-        if (identical(type.classNode, inferrer.coreTypes.futureClass)) {
-          unwrappedType = type.typeArguments[0];
-        } else if (identical(
-            type.classNode, inferrer.coreTypes.futureOrClass)) {
-          unwrappedType = type.typeArguments[0];
-        }
-      }
-    }
     _updateInferredReturnType(
-        inferrer, type, unwrappedType, expression, fileOffset, false);
+        inferrer, type, expression, fileOffset, true, false);
   }
 
   void handleYield(TypeInferrerImpl inferrer, bool isYieldStar, DartType type,
       Expression expression, int fileOffset) {
     if (!isGenerator) return;
+    _updateInferredReturnType(
+        inferrer, type, expression, fileOffset, false, isYieldStar);
+  }
+
+  DartType inferReturnType(TypeInferrerImpl inferrer) {
+    assert(_needToInferReturnType);
+    DartType inferredReturnType = _wrapAsyncOrGenerator(
+        inferrer, inferrer.inferReturnType(_inferredReturnType));
+    if (returnContext != null &&
+        !_analyzerSubtypeOf(inferrer, inferredReturnType, returnContext)) {
+      // If the inferred return type isn't a subtype of the context, we use the
+      // context.
+      return greatestClosure(inferrer.coreTypes, returnContext);
+    }
+
+    return inferredReturnType;
+  }
+
+  void _updateInferredReturnType(TypeInferrerImpl inferrer, DartType type,
+      Expression expression, int fileOffset, bool isReturn, bool isYieldStar) {
+    if (_needImplicitDowncasts) {
+      var expectedType = isYieldStar
+          ? _wrapAsyncOrGenerator(inferrer, returnContext)
+          : returnContext;
+      if (expectedType != null) {
+        expectedType = greatestClosure(inferrer.coreTypes, expectedType);
+        if (inferrer.checkAssignability(
+                expectedType, type, expression, fileOffset) !=
+            null) {
+          type = expectedType;
+        }
+      }
+    }
     var unwrappedType = type;
-    if (isYieldStar) {
+    if (isAsync && isReturn) {
+      unwrappedType = inferrer.typeSchemaEnvironment.unfutureType(type);
+    } else if (isYieldStar) {
       unwrappedType = inferrer.getDerivedTypeArgumentOf(
               type,
               isAsync
@@ -163,30 +187,6 @@
                   : inferrer.coreTypes.iterableClass) ??
           type;
     }
-    _updateInferredReturnType(
-        inferrer, type, unwrappedType, expression, fileOffset, isYieldStar);
-  }
-
-  DartType inferReturnType(TypeInferrerImpl inferrer) {
-    assert(_needToInferReturnType);
-    DartType inferredReturnType = inferrer.inferReturnType(_inferredReturnType);
-    if (returnContext != null &&
-        !_analyzerSubtypeOf(inferrer, inferredReturnType, returnContext)) {
-      // If the inferred return type isn't a subtype of the context, we use the
-      // context.
-      inferredReturnType = greatestClosure(inferrer.coreTypes, returnContext);
-    }
-
-    return _wrapAsyncOrGenerator(inferrer, inferredReturnType);
-  }
-
-  void _updateInferredReturnType(
-      TypeInferrerImpl inferrer,
-      DartType type,
-      DartType unwrappedType,
-      Expression expression,
-      int fileOffset,
-      bool isYieldStar) {
     if (_needToInferReturnType) {
       if (_inferredReturnType == null) {
         _inferredReturnType = unwrappedType;
@@ -195,18 +195,6 @@
             .getLeastUpperBound(_inferredReturnType, unwrappedType);
       }
     }
-    if (_needImplicitDowncasts) {
-      var expectedType = isYieldStar
-          ? _wrapAsyncOrGenerator(inferrer, returnContext)
-          : returnContext;
-      if (expectedType != null) {
-        inferrer.checkAssignability(
-            greatestClosure(inferrer.coreTypes, expectedType),
-            type,
-            expression,
-            fileOffset);
-      }
-    }
   }
 
   DartType _wrapAsyncOrGenerator(TypeInferrerImpl inferrer, DartType type) {
@@ -1431,12 +1419,8 @@
 
   DartType wrapFutureType(DartType type) {
     var typeWithoutFutureOr = type ?? const DynamicType();
-    if (type is InterfaceType &&
-        identical(type.classNode, coreTypes.futureOrClass)) {
-      typeWithoutFutureOr = type.typeArguments[0];
-    }
-    return new InterfaceType(coreTypes.futureClass,
-        <DartType>[typeSchemaEnvironment.flattenFutures(typeWithoutFutureOr)]);
+    return new InterfaceType(
+        coreTypes.futureClass, <DartType>[typeWithoutFutureOr]);
   }
 
   DartType wrapType(DartType type, Class class_) {
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart b/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
index dba0d52..6554d8e 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
@@ -84,28 +84,6 @@
     constraint.upper = getGreatestLowerBound(constraint.upper, upper);
   }
 
-  /// Implements the function "flatten" defined in the spec, where T is [type]:
-  ///
-  ///     If T = Future<S> then flatten(T) = flatten(S).
-  ///
-  ///     Otherwise if T <: Future then let S be a type such that T << Future<S>
-  ///     and for all R, if T << Future<R> then S << R.  Then flatten(T) = S.
-  ///
-  ///     In any other circumstance, flatten(T) = T.
-  DartType flattenFutures(DartType type) {
-    if (type is InterfaceType) {
-      if (identical(type.classNode, coreTypes.futureClass)) {
-        return flattenFutures(type.typeArguments[0]);
-      }
-      InterfaceType futureBase =
-          hierarchy.getTypeAsInstanceOf(type, coreTypes.futureClass);
-      if (futureBase != null) {
-        return futureBase.typeArguments[0];
-      }
-    }
-    return type;
-  }
-
   /// Computes the greatest lower bound of [type1] and [type2].
   DartType getGreatestLowerBound(DartType type1, DartType type2) {
     // The greatest lower bound relation is reflexive.  Note that we don't test
diff --git a/pkg/front_end/lib/src/incremental/combine.dart b/pkg/front_end/lib/src/incremental/combine.dart
deleted file mode 100644
index d1e4096..0000000
--- a/pkg/front_end/lib/src/incremental/combine.dart
+++ /dev/null
@@ -1,437 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:kernel/kernel.dart';
-
-/// Given the list of full and partial [outlines] of libraries, combine them
-/// into a new [Program].  Different outlines can define the same node multiple
-/// times, just one is kept, and all references to synonyms are replaced with
-/// the reference to the kept version.  Call [CombineResult.undo] after
-/// finishing using the combined [Program] to restore [outlines] into their
-/// original state.
-CombineResult combine(List<Program> outlines) {
-  var combiner = new _Combiner(outlines);
-  combiner.perform();
-  return combiner.result;
-}
-
-/// The result of outlines combining; call [undo] after using to restore
-/// partial outlines into their original state.
-class CombineResult {
-  final Program program;
-
-  final Map<Library, Program> _undoLibraryToProgram = {};
-
-  final Map<Class, Library> _undoClassToLibrary = {};
-  final Map<Field, Library> _undoFieldToLibrary = {};
-  final Map<Procedure, Library> _undoProcedureToLibrary = {};
-
-  final Map<Member, Class> _undoMemberToClass = {};
-
-  final Map<Library, int> _undoLibraryToClasses = {};
-  final Map<Library, int> _undoLibraryToFields = {};
-  final Map<Library, int> _undoLibraryToProcedures = {};
-  final List<Library> _undoLibrariesWithoutExports = <Library>[];
-
-  final Map<Class, int> _undoClassToConstructors = {};
-  final Map<Class, int> _undoClassToFields = {};
-  final Map<Class, int> _undoClassToProcedures = {};
-
-  final Map<Program, _ReplacementMap> _undoReplacementMap = {};
-
-  bool _undone = false;
-
-  CombineResult(this.program);
-
-  /// Undo changes applied to partial outlines by [combine].
-  void undo() {
-    if (_undone) {
-      throw new StateError('This result has already been undone.');
-    }
-    _undone = true;
-
-    _undoLibraryToProgram.forEach((library, program) {
-      program.root.adoptChild(library.canonicalName);
-      library.parent = program;
-    });
-
-    _undoClassToLibrary.forEach((child, parent) {
-      parent.canonicalName.adoptChild(child.canonicalName);
-      child.parent = parent;
-    });
-    _undoFieldToLibrary.forEach((child, parent) {
-      var parentName = parent.canonicalName.getChild('@fields');
-      parentName.adoptChild(child.canonicalName);
-      child.parent = parent;
-    });
-    _undoProcedureToLibrary.forEach((child, parent) {
-      var qualifier = CanonicalName.getMemberQualifier(child);
-      var parentName = parent.canonicalName.getChild(qualifier);
-      parentName.adoptChild(child.canonicalName);
-      child.parent = parent;
-    });
-
-    _undoMemberToClass.forEach((child, parent) {
-      var qualifier = CanonicalName.getMemberQualifier(child);
-      var parentName = parent.canonicalName.getChild(qualifier);
-      parentName.adoptChild(child.canonicalName);
-      child.parent = parent;
-    });
-
-    _undoLibraryToClasses.forEach((library, length) {
-      library.classes.length = length;
-    });
-    _undoLibraryToFields.forEach((library, length) {
-      library.fields.length = length;
-    });
-    _undoLibraryToProcedures.forEach((library, length) {
-      library.procedures.length = length;
-    });
-    for (var library in _undoLibrariesWithoutExports) {
-      library.additionalExports.clear();
-    }
-
-    _undoClassToConstructors.forEach((class_, length) {
-      class_.constructors.length = length;
-    });
-    _undoClassToFields.forEach((class_, length) {
-      class_.fields.length = length;
-    });
-    _undoClassToProcedures.forEach((class_, length) {
-      class_.procedures.length = length;
-    });
-
-    _undoReplacementMap.forEach((outline, map) {
-      outline.accept(new _ReplaceReferencesVisitor(map, null));
-    });
-  }
-}
-
-/// Keeps the state during combining and contains the result.
-class _Combiner {
-  final List<Program> outlines;
-  final CombineResult result = new CombineResult(new Program());
-
-  /// We record here during [_combineOutline], which keys should be replaced
-  /// with which values.
-  _ReplacementMap replacementMap;
-
-  _Combiner(this.outlines);
-
-  /// Combine the [outlines] into a new [Program].
-  void perform() {
-    for (var outline in outlines) {
-      _combineOutline(outline);
-    }
-  }
-
-  /// If the [target] does not have a child with the same name as the [source],
-  /// adopt the [source] and return `null`.  Otherwise return the existing
-  /// name.
-  CanonicalName _adoptMemberName(NamedNode target, Member source) {
-    String qualifier = CanonicalName.getMemberQualifier(source);
-    CanonicalName parentName = target.canonicalName.getChild(qualifier);
-    if (source.name.isPrivate) {
-      Uri libraryUri = source.name.library.importUri;
-      parentName = parentName.getChildFromUri(libraryUri);
-    }
-    String sourceName = source.canonicalName.name;
-    if (parentName.hasChild(sourceName)) {
-      return parentName.getChild(sourceName);
-    }
-    parentName.adoptChild(source.canonicalName);
-    return null;
-  }
-
-  /// If [source] is the first node with a particular name, we remember its
-  /// original parent into [CombineResult._undoClassToLibrary], and add it
-  /// into the [target].
-  ///
-  /// If [source] is not the first node with this name, we don't add it,
-  /// instead we remember that references to this node should be replaced
-  /// with the reference to the first node.
-  void _combineClass(Library target, Class source) {
-    String name = source.name;
-    if (target.canonicalName.hasChild(name)) {
-      var existingReference = target.canonicalName.getChild(name).reference;
-      replacementMap.references[source.reference] = existingReference;
-      Class existingNode = existingReference.node;
-
-      var numberOfTypeParameters = source.typeParameters.length;
-      assert(numberOfTypeParameters == existingNode.typeParameters.length);
-      for (var i = 0; i < numberOfTypeParameters; i++) {
-        replacementMap.typeParameters[source.typeParameters[i]] =
-            existingNode.typeParameters[i];
-      }
-
-      for (var constructor in source.constructors) {
-        _combineClassMember(existingNode, constructor);
-      }
-      for (var field in source.fields) {
-        _combineClassMember(existingNode, field);
-      }
-      for (var procedure in source.procedures) {
-        _combineClassMember(existingNode, procedure);
-      }
-    } else {
-      result._undoClassToLibrary[source] = source.parent;
-      _putUndoForClassMembers(source);
-      target.canonicalName.adoptChild(source.canonicalName);
-      target.addClass(source);
-    }
-  }
-
-  /// If [source] is the first node with a particular name, we remember its
-  /// original parent into [CombineResult._undoMemberToClass], and add it
-  /// into the [target].
-  ///
-  /// If [source] is not the first node with this name, we don't add it,
-  /// instead we remember that references to this node should be replaced
-  /// with the reference to the first node.
-  void _combineClassMember(Class target, Member source) {
-    CanonicalName existing = _adoptMemberName(target, source);
-    if (existing == null) {
-      result._undoMemberToClass[source] = source.parent;
-      target.addMember(source);
-    } else {
-      replacementMap.references[source.reference] = existing.reference;
-    }
-  }
-
-  /// If [source] is the first node with a particular name, we remember its
-  /// original parent into [CombineResult._undoFieldToLibrary], and add it
-  /// into the [target].
-  ///
-  /// If [source] is not the first node with this name, we don't add it,
-  /// instead we remember that references to this node should be replaced
-  /// with the reference to the first node.
-  void _combineField(Library target, Field source) {
-    CanonicalName existing = _adoptMemberName(target, source);
-    if (existing == null) {
-      result._undoFieldToLibrary[source] = source.parent;
-      target.addField(source);
-    } else {
-      replacementMap.references[source.reference] = existing.reference;
-    }
-  }
-
-  /// If [source] is the first node with a particular name, we remember its
-  /// original parent into [CombineResult._undoFieldToLibrary], and add it
-  /// into the [target].
-  ///
-  /// If [source] is not the first node with this name, we don't add it,
-  /// instead we remember that references to this node should be replaced
-  /// with the reference to the first node.  Then we continue merging children
-  /// of the node into the first node.
-  ///
-  /// The first nodes are updated by adding more children into them.  We
-  /// remember the original lengths of their [Library.classes],
-  /// [Library.fields], and [Library.procedures] lists.  So, to undo the
-  /// changes and get rid of added children it is enough to set their lengths.
-  void _combineLibrary(Program target, Library source) {
-    String name = source.importUri.toString();
-    if (target.root.hasChild(name)) {
-      var existingReference = target.root.getChild(name).reference;
-      replacementMap.references[source.reference] = existingReference;
-      Library existingNode = existingReference.node;
-      if (existingNode.additionalExports.isEmpty &&
-          source.additionalExports.isNotEmpty) {
-        existingNode.additionalExports.addAll(source.additionalExports);
-      }
-      for (var class_ in source.classes) {
-        _combineClass(existingNode, class_);
-      }
-      for (var field in source.fields) {
-        _combineField(existingNode, field);
-      }
-      for (var procedure in source.procedures) {
-        _combineProcedure(existingNode, procedure);
-      }
-    } else {
-      result._undoLibraryToProgram[source] = source.parent;
-      result._undoLibraryToClasses[source] = source.classes.length;
-      result._undoLibraryToFields[source] = source.fields.length;
-      result._undoLibraryToProcedures[source] = source.procedures.length;
-      if (source.additionalExports.isEmpty) {
-        result._undoLibrariesWithoutExports.add(source);
-      }
-      source.classes.forEach(_putUndoForClassMembers);
-      target.root.adoptChild(source.canonicalName);
-      source.parent = target;
-      target.libraries.add(source);
-    }
-  }
-
-  void _combineOutline(Program outline) {
-    replacementMap = new _ReplacementMap();
-    for (var library in outline.libraries) {
-      _combineLibrary(result.program, library);
-    }
-    var undoMap = new _ReplacementMap();
-    result._undoReplacementMap[outline] = undoMap;
-    outline.accept(new _ReplaceReferencesVisitor(replacementMap, undoMap));
-    replacementMap = null;
-  }
-
-  /// If [source] is the first node with a particular name, we remember its
-  /// original parent into [CombineResult._undoProcedureToLibrary], and add it
-  /// into the [target].
-  ///
-  /// If [source] is not the first node with this name, we don't add it,
-  /// instead we remember that references to this node should be replaced
-  /// with the reference to the first node.
-  void _combineProcedure(Library target, Procedure source) {
-    CanonicalName existing = _adoptMemberName(target, source);
-    if (existing == null) {
-      result._undoProcedureToLibrary[source] = source.parent;
-      target.addProcedure(source);
-    } else {
-      replacementMap.references[source.reference] = existing.reference;
-    }
-  }
-
-  void _putUndoForClassMembers(Class source) {
-    result._undoClassToConstructors[source] = source.constructors.length;
-    result._undoClassToFields[source] = source.fields.length;
-    result._undoClassToProcedures[source] = source.procedures.length;
-  }
-}
-
-/// [_Combiner] fills the maps with information which [Reference]s and
-/// [TypeParameter]s should be replaced.
-class _ReplacementMap {
-  Map<Reference, Reference> references = {};
-  Map<TypeParameter, TypeParameter> typeParameters = {};
-}
-
-class _ReplaceReferencesVisitor extends RecursiveVisitor {
-  final _ReplacementMap map;
-  final _ReplacementMap undoMap;
-
-  _ReplaceReferencesVisitor(this.map, this.undoMap);
-
-  @override
-  void visitConstructorInvocation(ConstructorInvocation node) {
-    node.targetReference = _newReferenceFor(node.targetReference);
-  }
-
-  @override
-  void visitDirectMethodInvocation(DirectMethodInvocation node) {
-    node.targetReference = _newReferenceFor(node.targetReference);
-  }
-
-  @override
-  void visitDirectPropertyGet(DirectPropertyGet node) {
-    node.targetReference = _newReferenceFor(node.targetReference);
-  }
-
-  @override
-  void visitDirectPropertySet(DirectPropertySet node) {
-    node.targetReference = _newReferenceFor(node.targetReference);
-  }
-
-  @override
-  void visitInterfaceType(InterfaceType node) {
-    node.className = _newReferenceFor(node.className);
-  }
-
-  @override
-  void visitLibrary(Library node) {
-    for (var i = 0; i < node.additionalExports.length; i++) {
-      node.additionalExports[i] = _newReferenceFor(node.additionalExports[i]);
-    }
-    super.visitLibrary(node);
-  }
-
-  @override
-  void visitLibraryDependency(LibraryDependency node) {
-    node.importedLibraryReference =
-        _newReferenceFor(node.importedLibraryReference);
-  }
-
-  @override
-  void visitMethodInvocation(MethodInvocation node) {
-    node.interfaceTargetReference =
-        _newReferenceFor(node.interfaceTargetReference);
-  }
-
-  @override
-  void visitPropertyGet(PropertyGet node) {
-    node.interfaceTargetReference =
-        _newReferenceFor(node.interfaceTargetReference);
-  }
-
-  @override
-  void visitPropertySet(PropertySet node) {
-    node.interfaceTargetReference =
-        _newReferenceFor(node.interfaceTargetReference);
-  }
-
-  @override
-  void visitRedirectingInitializer(RedirectingInitializer node) {
-    node.targetReference = _newReferenceFor(node.targetReference);
-  }
-
-  @override
-  void visitStaticGet(StaticGet node) {
-    node.targetReference = _newReferenceFor(node.targetReference);
-  }
-
-  @override
-  void visitStaticInvocation(StaticInvocation node) {
-    node.targetReference = _newReferenceFor(node.targetReference);
-  }
-
-  @override
-  void visitStaticSet(StaticSet node) {
-    node.targetReference = _newReferenceFor(node.targetReference);
-  }
-
-  @override
-  void visitSuperInitializer(SuperInitializer node) {
-    node.targetReference = _newReferenceFor(node.targetReference);
-  }
-
-  @override
-  void visitSuperMethodInvocation(SuperMethodInvocation node) {
-    node.interfaceTargetReference =
-        _newReferenceFor(node.interfaceTargetReference);
-  }
-
-  @override
-  void visitSuperPropertyGet(SuperPropertyGet node) {
-    node.interfaceTargetReference =
-        _newReferenceFor(node.interfaceTargetReference);
-  }
-
-  @override
-  void visitSuperPropertySet(SuperPropertySet node) {
-    node.interfaceTargetReference =
-        _newReferenceFor(node.interfaceTargetReference);
-  }
-
-  @override
-  void visitSupertype(Supertype node) {
-    node.className = _newReferenceFor(node.className);
-  }
-
-  @override
-  void visitTypeParameterType(TypeParameterType node) {
-    TypeParameter parameter = node.parameter;
-    TypeParameter newParameter = map.typeParameters[parameter];
-    if (newParameter != null) {
-      if (undoMap != null) {
-        undoMap.typeParameters[newParameter] = parameter;
-      }
-      node.parameter = newParameter;
-    }
-  }
-
-  Reference _newReferenceFor(Reference reference) {
-    var newReference = map.references[reference];
-    if (newReference == null) return reference;
-    if (undoMap != null) undoMap.references[newReference] = reference;
-    return newReference;
-  }
-}
diff --git a/pkg/front_end/lib/src/incremental/kernel_driver.dart b/pkg/front_end/lib/src/incremental/kernel_driver.dart
index 492ad53..3bbb34f 100644
--- a/pkg/front_end/lib/src/incremental/kernel_driver.dart
+++ b/pkg/front_end/lib/src/incremental/kernel_driver.dart
@@ -19,9 +19,9 @@
 import 'package:front_end/src/fasta/uri_translator.dart';
 import 'package:front_end/src/incremental/file_state.dart';
 import 'package:kernel/binary/ast_from_binary.dart';
+import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart';
-import 'package:kernel/src/incremental_class_hierarchy.dart';
 import 'package:kernel/type_environment.dart';
 import 'package:meta/meta.dart';
 
@@ -370,7 +370,7 @@
         results.first.libraryResults.map((l) => l.library).toList();
     var program = new Program(nameRoot: nameRoot, libraries: coreLibraries);
     return new TypeEnvironment(
-        new CoreTypes(program), new IncrementalClassHierarchy());
+        new CoreTypes(program), new ClassHierarchy(program));
   }
 
   /// Ensure that [dillTarget] includes the [cycle] libraries.  It already
diff --git a/pkg/front_end/lib/src/incremental/reference_index.dart b/pkg/front_end/lib/src/incremental/reference_index.dart
deleted file mode 100644
index e77929a..0000000
--- a/pkg/front_end/lib/src/incremental/reference_index.dart
+++ /dev/null
@@ -1,313 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:collection';
-
-import 'package:kernel/kernel.dart';
-
-/// Information about libraries and nodes that use references.
-///
-/// This allows us quickly replace one library with another, that has the
-/// same API, but provided by different nodes, so different references.
-class ReferenceIndex {
-  /// The nodes in a library pointing to each reference.
-  ///
-  /// A key is an indexed library.
-  /// Its value is a map.
-  ///   A key is a target reference used in the library.
-  ///   Its value is the list of nodes in the library that use the reference.
-  final Map<Library, Map<Reference, List<Node>>> _libraryReferences = {};
-
-  /// The nodes in the program pointing to each reference.
-  ///
-  /// A key in the map is a used reference.
-  /// Its value is a set of nodes that use this reference.
-  final Map<Reference, Set<Node>> _referenceToNodes = {};
-
-  /// Index any libraries of the [program] that are not indexed yet.
-  void indexNewLibraries(Program program) {
-    for (var library in program.libraries) {
-      if (!_libraryReferences.containsKey(library)) {
-        _indexLibrary(library);
-      }
-    }
-  }
-
-  /// Remove information about references used in given [library].
-  void removeLibrary(Library library) {
-    var referencedFromNodes = _libraryReferences.remove(library);
-    if (referencedFromNodes != null) {
-      referencedFromNodes.forEach((reference, nodes) {
-        _referenceToNodes[reference]?.removeAll(nodes);
-      });
-    }
-  }
-
-  /// Remove the [oldLibrary] from the index, index the [newLibrary].  Replace
-  /// references to [oldLibrary] node with references to the corresponding
-  /// nodes in the [newLibrary].
-  ///
-  /// Canonical name trees of the [oldLibrary] and [newLibrary] are expected to
-  /// be isomorphic.
-  void replaceLibrary(Library oldLibrary, Library newLibrary) {
-    removeLibrary(oldLibrary);
-    _indexLibrary(newLibrary);
-
-    /// Visit in parallel two isomorphic name trees, and replace references.
-    void visitNames(CanonicalName oldName, CanonicalName newName) {
-      var oldReference = oldName.reference;
-      var newReference = newName.reference;
-      if (oldReference != null && newReference != null) {
-        var nodes = _referenceToNodes.remove(oldReference);
-        if (nodes != null) {
-          _referenceToNodes[newReference] = nodes;
-          var visitor = new _ReplaceVisitor(oldReference, newReference);
-          for (var node in nodes) {
-            node.accept(visitor);
-          }
-        }
-      }
-
-      // Replace references to children.
-      var oldChildren = oldName.children.iterator;
-      var newChildren = newName.children.iterator;
-      while (oldChildren.moveNext() && newChildren.moveNext()) {
-        visitNames(oldChildren.current, newChildren.current);
-      }
-    }
-
-    visitNames(oldLibrary.canonicalName, newLibrary.canonicalName);
-  }
-
-  /// Index the given [library], which is not yet indexed.
-  void _indexLibrary(Library library) {
-    var referenceToNodes = <Reference, List<Node>>{};
-    _libraryReferences[library] = referenceToNodes;
-    var visitor = new _IndexVisitor(this, library, referenceToNodes);
-    library.accept(visitor);
-  }
-}
-
-/// Visitor visits a library and records nodes and references they use.
-class _IndexVisitor extends RecursiveVisitor {
-  final ReferenceIndex index;
-  final Library libraryBeingIndexed;
-  final Map<Reference, List<Node>> referenceToNodes;
-
-  _IndexVisitor(this.index, this.libraryBeingIndexed, this.referenceToNodes);
-
-  /// Add the given [node] that uses the [reference].
-  void addNode(Node node, Reference reference) {
-    if (reference == null) return;
-    (index._referenceToNodes[reference] ??= new HashSet<Node>()).add(node);
-  }
-
-  @override
-  void visitConstructorInvocation(ConstructorInvocation node) {
-    addNode(node, node.targetReference);
-  }
-
-  @override
-  void visitDirectMethodInvocation(DirectMethodInvocation node) {
-    addNode(node, node.targetReference);
-  }
-
-  @override
-  void visitDirectPropertyGet(DirectPropertyGet node) {
-    addNode(node, node.targetReference);
-  }
-
-  @override
-  void visitDirectPropertySet(DirectPropertySet node) {
-    addNode(node, node.targetReference);
-  }
-
-  @override
-  void visitInterfaceType(InterfaceType node) {
-    addNode(node, node.className);
-    super.visitInterfaceType(node);
-  }
-
-  @override
-  void visitLibrary(Library node) {
-    for (var i = 0; i < node.additionalExports.length; i++) {
-      addNode(node, node.additionalExports[i]);
-    }
-    super.visitLibrary(node);
-  }
-
-  @override
-  void visitLibraryDependency(LibraryDependency node) {
-    addNode(node, node.importedLibraryReference);
-  }
-
-  @override
-  void visitMethodInvocation(MethodInvocation node) {
-    addNode(node, node.interfaceTargetReference);
-  }
-
-  @override
-  void visitPropertyGet(PropertyGet node) {
-    addNode(node, node.interfaceTargetReference);
-  }
-
-  @override
-  void visitPropertySet(PropertySet node) {
-    addNode(node, node.interfaceTargetReference);
-  }
-
-  @override
-  void visitRedirectingInitializer(RedirectingInitializer node) {
-    addNode(node, node.targetReference);
-  }
-
-  @override
-  void visitStaticGet(StaticGet node) {
-    addNode(node, node.targetReference);
-  }
-
-  @override
-  void visitStaticInvocation(StaticInvocation node) {
-    addNode(node, node.targetReference);
-  }
-
-  @override
-  void visitStaticSet(StaticSet node) {
-    addNode(node, node.targetReference);
-  }
-
-  @override
-  void visitSuperInitializer(SuperInitializer node) {
-    addNode(node, node.targetReference);
-  }
-
-  @override
-  void visitSuperMethodInvocation(SuperMethodInvocation node) {
-    addNode(node, node.interfaceTargetReference);
-  }
-
-  @override
-  void visitSuperPropertyGet(SuperPropertyGet node) {
-    addNode(node, node.interfaceTargetReference);
-  }
-
-  @override
-  void visitSuperPropertySet(SuperPropertySet node) {
-    addNode(node, node.interfaceTargetReference);
-  }
-
-  @override
-  void visitSupertype(Supertype node) {
-    addNode(node, node.className);
-  }
-}
-
-/// [Visitor] that replaces the [oldReference] with the [newReference] in
-/// a single [Node].
-class _ReplaceVisitor extends Visitor {
-  final Reference oldReference;
-  final Reference newReference;
-
-  _ReplaceVisitor(this.oldReference, this.newReference);
-
-  @override
-  void visitConstructorInvocation(ConstructorInvocation node) {
-    node.targetReference = newReference;
-  }
-
-  @override
-  void visitDirectMethodInvocation(DirectMethodInvocation node) {
-    node.targetReference = newReference;
-  }
-
-  @override
-  void visitDirectPropertyGet(DirectPropertyGet node) {
-    node.targetReference = newReference;
-  }
-
-  @override
-  void visitDirectPropertySet(DirectPropertySet node) {
-    node.targetReference = newReference;
-  }
-
-  @override
-  void visitInterfaceType(InterfaceType node) {
-    node.className = newReference;
-  }
-
-  @override
-  void visitLibrary(Library node) {
-    for (var i = 0; i < node.additionalExports.length; i++) {
-      if (node.additionalExports[i] == oldReference) {
-        node.additionalExports[i] = newReference;
-        return;
-      }
-    }
-  }
-
-  @override
-  void visitLibraryDependency(LibraryDependency node) {
-    node.importedLibraryReference = newReference;
-  }
-
-  @override
-  void visitMethodInvocation(MethodInvocation node) {
-    node.interfaceTargetReference = newReference;
-  }
-
-  @override
-  void visitPropertyGet(PropertyGet node) {
-    node.interfaceTargetReference = newReference;
-  }
-
-  @override
-  void visitPropertySet(PropertySet node) {
-    node.interfaceTargetReference = newReference;
-  }
-
-  @override
-  void visitRedirectingInitializer(RedirectingInitializer node) {
-    node.targetReference = newReference;
-  }
-
-  @override
-  void visitStaticGet(StaticGet node) {
-    node.targetReference = newReference;
-  }
-
-  @override
-  void visitStaticInvocation(StaticInvocation node) {
-    node.targetReference = newReference;
-  }
-
-  @override
-  void visitStaticSet(StaticSet node) {
-    node.targetReference = newReference;
-  }
-
-  @override
-  void visitSuperInitializer(SuperInitializer node) {
-    node.targetReference = newReference;
-  }
-
-  @override
-  void visitSuperMethodInvocation(SuperMethodInvocation node) {
-    node.interfaceTargetReference = newReference;
-  }
-
-  @override
-  void visitSuperPropertyGet(SuperPropertyGet node) {
-    node.interfaceTargetReference = newReference;
-  }
-
-  @override
-  void visitSuperPropertySet(SuperPropertySet node) {
-    node.interfaceTargetReference = newReference;
-  }
-
-  @override
-  void visitSupertype(Supertype node) {
-    node.className = newReference;
-  }
-}
diff --git a/pkg/front_end/lib/src/incremental_kernel_generator_impl.dart b/pkg/front_end/lib/src/incremental_kernel_generator_impl.dart
deleted file mode 100644
index 8c5a5b6..0000000
--- a/pkg/front_end/lib/src/incremental_kernel_generator_impl.dart
+++ /dev/null
@@ -1,585 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:async';
-import 'dart:convert';
-
-import 'package:front_end/src/api_prototype/byte_store.dart';
-import 'package:front_end/src/api_prototype/file_system.dart';
-import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart';
-import 'package:front_end/src/base/api_signature.dart';
-import 'package:front_end/src/base/performance_logger.dart';
-import 'package:front_end/src/base/processed_options.dart';
-import 'package:front_end/src/fasta/compiler_context.dart';
-import 'package:front_end/src/fasta/dill/dill_target.dart';
-import 'package:front_end/src/fasta/kernel/kernel_target.dart';
-import 'package:front_end/src/fasta/ticker.dart';
-import 'package:front_end/src/fasta/uri_translator.dart';
-import 'package:front_end/src/incremental/file_state.dart';
-import 'package:front_end/src/incremental/reference_index.dart';
-import 'package:kernel/kernel.dart';
-import 'package:meta/meta.dart';
-
-/// Implementation of [IncrementalKernelGenerator].
-///
-/// The initial compilation of the entry point is performed not incrementally.
-///
-/// Each file that is transitively referenced from the entry point is read,
-/// its API signature is computed.  Then full compilation is performed, without
-/// any incrementality, to get the initial program.  When a file is invalidated,
-/// it is read again, and its API signature is recomputed.  If the API signature
-/// is the same as it was before, then only the library of the file is
-/// recompiled, and the current program is updated.  If the API signature of
-/// a file is different, all libraries that transitively use the changed file
-/// are removed from the current program, and recompiled using the remaining
-/// libraries.
-class IncrementalKernelGeneratorImpl implements IncrementalKernelGenerator {
-  static const MSG_PENDING_COMPUTE =
-      'A computeDelta() invocation is still executing.';
-
-  static const MSG_NO_LAST_DELTA =
-      'The last delta has been already accepted or rejected.';
-
-  static const MSG_HAS_LAST_DELTA =
-      'The last delta must be either accepted or rejected.';
-
-  /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 1;
-
-  /// Options used by the kernel compiler.
-  final ProcessedOptions options;
-
-  /// The optional SDK outline as a serialized program.
-  /// If provided, the driver will not attempt to read SDK files.
-  final List<int> _sdkOutlineBytes;
-
-  /// The [FileSystem] which should be used by the front end to access files.
-  final FileSystem _fileSystem;
-
-  /// The logger to report compilation progress.
-  final PerformanceLog _logger;
-
-  /// The [ByteStore] used to cache results.
-  final ByteStore _byteStore;
-
-  /// The object that knows how to resolve "package:" and "dart:" URIs.
-  final UriTranslator uriTranslator;
-
-  /// The URI of the program entry point.
-  final Uri _entryPoint;
-
-  /// The function to notify when files become used or unused, or `null`.
-  final WatchUsedFilesFn _watchFn;
-
-  /// The salt to mix into all hashes used as keys for serialized data.
-  List<int> _salt;
-
-  /// The current file system state.
-  FileSystemState _fsState;
-
-  /// The list of absolute file URIs that were reported through [invalidate]
-  /// and not checked for actual changes yet.
-  List<Uri> _invalidatedFiles = [];
-
-  /// The set of libraries for which the content of the library file, or
-  /// one of its parts, changed using [invalidate], and during
-  /// [_refreshInvalidatedFiles] it was found that that changes are only in
-  /// method bodies.
-  ///
-  /// If any library had an API change, this set will be empty.
-  final Set<FileState> _changedLibrariesWithSameApi = new Set<FileState>();
-
-  /// The [Program] with currently valid libraries. When a file is invalidated,
-  /// we remove the file, its library, and everything affected from [_program].
-  Program _program = new Program();
-
-  /// The [DillTarget] that represents the current [Program] state.
-  DillTarget _dillTarget;
-
-  /// Each key is the file system URI of a library.
-  /// Each value is the libraries that directly depend on the key library.
-  Map<Uri, Set<Uri>> _directLibraryDependencies = {};
-
-  /// Each key is the file system URI of a library.
-  /// Each value is the [Library] that is still in the [_program].
-  Map<Uri, Library> _uriToLibrary = {};
-
-  /// Each key is the file system URI of a part.
-  /// Each value is the file system URI of the library that sources the part.
-  Map<Uri, Uri> _partToLibrary = {};
-
-  /// The index that keeps track of references and nodes that use them,
-  /// and allows fast reference replacement on a single library compilation.
-  final ReferenceIndex _referenceIndex = new ReferenceIndex();
-
-  /// Whether [computeDelta] is executing.
-  bool _isComputeDeltaExecuting = false;
-
-  /// The current signatures for libraries.
-  final Map<Uri, String> _currentSignatures = {};
-
-  /// The signatures for libraries produced by the last [computeDelta], or
-  /// `null` if the last delta was either accepted or rejected.
-  Map<Uri, String> _lastSignatures;
-
-  /// The object that provides additional information for tests.
-  final _TestView _testView = new _TestView();
-
-  IncrementalKernelGeneratorImpl(this.options, this.uriTranslator,
-      List<int> sdkOutlineBytes, this._entryPoint,
-      {WatchUsedFilesFn watch})
-      : _sdkOutlineBytes = sdkOutlineBytes,
-        _fileSystem = options.fileSystem,
-        _logger = options.logger,
-        _byteStore = options.byteStore,
-        _watchFn = watch {
-    _computeSalt();
-
-    Future<Null> onFileAdded(Uri uri) {
-      if (_watchFn != null) {
-        return _watchFn(uri, true);
-      }
-      return new Future.value();
-    }
-
-    _fsState = new FileSystemState(_byteStore, _fileSystem, options.target,
-        uriTranslator, _salt, onFileAdded);
-
-    // Pre-populate the Program with SDK.
-    _loadSdkOutline();
-
-    _createDillTarget();
-  }
-
-  /// Return the object that provides additional information for tests.
-  @visibleForTesting
-  _TestView get test => _testView;
-
-  @override
-  void acceptLastDelta() {
-    _throwIfNoLastDelta();
-    _currentSignatures.addAll(_lastSignatures);
-    _lastSignatures = null;
-  }
-
-  @override
-  Future<DeltaProgram> computeDelta() {
-    if (_isComputeDeltaExecuting) {
-      throw new StateError(MSG_PENDING_COMPUTE);
-    }
-
-    if (_lastSignatures != null) {
-      throw new StateError(MSG_HAS_LAST_DELTA);
-    }
-    _lastSignatures = {};
-
-    _isComputeDeltaExecuting = true;
-
-    return _runWithFrontEndContext('Compute delta', () async {
-      try {
-        await _refreshInvalidatedFiles();
-        _testView.compiledUris.clear();
-
-        // Ensure that the graph starting at the entry point is ready.
-        await _logger.runAsync('Build graph of files', () async {
-          return await _fsState.getFile(_entryPoint);
-        });
-
-        // The file graph might have changed, perform GC.
-        await _gc();
-
-        // Compile just libraries with changes to function bodies, or
-        // compile multiple libraries because of API changes.
-        if (_changedLibrariesWithSameApi.isNotEmpty) {
-          await _logger.runAsync('Compile libraries with body changes',
-              () async {
-            await _compileLibrariesWithBodyChanges();
-          });
-        } else {
-          _createDillTarget();
-
-          // Append all libraries what we still have in the current program.
-          Set<Uri> validLibraries =
-              _program.libraries.map((library) => library.importUri).toSet();
-          var validDillCount = validLibraries.length;
-          await _logger.runAsync('Load $validDillCount dill libraries',
-              () async {
-            _dillTarget.loader.appendLibraries(_program);
-            await _dillTarget.buildOutlines();
-          });
-
-          // Configure KernelTarget to compile the entry point.
-          var kernelTarget =
-              new KernelTarget(_fileSystem, false, _dillTarget, uriTranslator);
-          kernelTarget.read(_entryPoint);
-
-          // Compile the entry point.
-          await _logger.runAsync('Compile', () async {
-            await kernelTarget.buildOutlines(nameRoot: _program.root);
-            _program = await kernelTarget.buildProgram() ?? _program;
-          });
-          _program.computeCanonicalNames();
-
-          _logger.run('Compute dependencies', _computeDependencies);
-
-          // Append new libraries to the DillTarget.
-          int newDillCount = _program.libraries.length - validDillCount;
-          await _logger.runAsync('Append $newDillCount dill libraries',
-              () async {
-            _dillTarget.loader.appendLibraries(_program,
-                filter: (uri) => !validLibraries.contains(uri));
-            await _dillTarget.buildOutlines();
-          });
-        }
-
-        _logger.run('Index references', () {
-          _referenceIndex.indexNewLibraries(_program);
-        });
-
-        // Prepare libraries that changed relatively to the current state.
-        var changedLibraries = new Set<Uri>();
-        for (var library in _program.libraries) {
-          var uri = library.importUri;
-          var file = _fsState.getFileOrNull(uri);
-          if (file != null && _currentSignatures[uri] != file.signatureStr) {
-            changedLibraries.add(library.fileUri);
-            _lastSignatures[uri] = file.signatureStr;
-            _testView.compiledUris.add(uri);
-          }
-        }
-
-        // The set of affected library cycles (have different signatures),
-        // or libraries that import or export affected libraries (so VM might
-        // have inlined some code from affected libraries into them).
-        final vmRequiredLibraries = new Set<Uri>();
-
-        void gatherVmRequiredLibraries(Uri libraryUri) {
-          if (vmRequiredLibraries.add(libraryUri)) {
-            var directUsers = _directLibraryDependencies[libraryUri];
-            directUsers?.forEach(gatherVmRequiredLibraries);
-          }
-        }
-
-        changedLibraries.forEach(gatherVmRequiredLibraries);
-
-        // Compose the resulting program with new libraries.
-        var program = new Program(nameRoot: _program.root);
-        for (var library in _program.libraries) {
-          if (_sdkOutlineBytes != null && library.importUri.isScheme('dart')) {
-            continue;
-          }
-          if (vmRequiredLibraries.contains(library.fileUri)) {
-            program.uriToSource[library.fileUri] =
-                _program.uriToSource[library.fileUri];
-            for (var part in library.parts) {
-              program.uriToSource[part.fileUri] =
-                  _program.uriToSource[part.fileUri];
-            }
-            program.libraries.add(library);
-            library.parent = program;
-          }
-        }
-        program.mainMethod = _program.mainMethod;
-        _logger.writeln('Returning ${program.libraries.length} libraries.');
-        _logger.writeln('There are ${_dillTarget.loader.libraries.length} '
-            'libraries in DillTarget.');
-
-        var stateString = _ExternalState.asString(_lastSignatures);
-        return new DeltaProgram(stateString, program);
-      } finally {
-        _isComputeDeltaExecuting = false;
-      }
-    });
-  }
-
-  @override
-  void invalidate(Uri uri) {
-    _invalidatedFiles.add(uri);
-  }
-
-  @override
-  void rejectLastDelta() {
-    _throwIfNoLastDelta();
-    _lastSignatures = null;
-  }
-
-  @override
-  void reset() {
-    _currentSignatures.clear();
-    _lastSignatures = null;
-  }
-
-  @override
-  void setState(String state) {
-    if (_isComputeDeltaExecuting) {
-      throw new StateError(MSG_PENDING_COMPUTE);
-    }
-    var signatures = _ExternalState.fromString(state);
-    _currentSignatures.clear();
-    _currentSignatures.addAll(signatures);
-  }
-
-  /// The [_program] is almost valid, there are [_changedLibrariesWithSameApi]
-  /// which should be recompiled, but all other libraries are fine.
-  ///
-  /// Compile the changed libraries and update referenced in other libraries.
-  Future<Null> _compileLibrariesWithBodyChanges() async {
-    if (_changedLibrariesWithSameApi.isNotEmpty) {
-      var kernelTarget =
-          new KernelTarget(_fileSystem, false, _dillTarget, uriTranslator);
-
-      // Schedule URIs of changed libraries for compilation.
-      for (var changedLibrary in _changedLibrariesWithSameApi) {
-        _testView.compiledUris.add(changedLibrary.uri);
-        // Detach the old library.
-        var oldLibrary = _uriToLibrary[changedLibrary.fileUri];
-        _program.root.removeChild(changedLibrary.uriStr);
-        _program.libraries.remove(oldLibrary);
-        _dillTarget.loader.builders.remove(changedLibrary.uri);
-        _dillTarget.loader.libraries.remove(oldLibrary);
-        _referenceIndex.removeLibrary(oldLibrary);
-        // Schedule the library for compilation.
-        kernelTarget.read(changedLibrary.uri);
-      }
-
-      var mainReference = _program.mainMethodName;
-      await _logger.runAsync('Compile', () async {
-        await kernelTarget.buildOutlines(nameRoot: _program.root);
-        await kernelTarget.buildProgram();
-      });
-
-      // Attach the new library and replace references.
-      _logger.run('Replace references', () {
-        var builders = kernelTarget.loader.builders;
-        for (var changedLibrary in _changedLibrariesWithSameApi) {
-          Library oldLibrary = _uriToLibrary[changedLibrary.fileUri];
-          Library newLibrary = builders[changedLibrary.uri].target;
-
-          _program.root
-              .getChildFromUri(newLibrary.importUri)
-              .bindTo(newLibrary.reference);
-          newLibrary.computeCanonicalNames();
-
-          _program.root.adoptChild(newLibrary.canonicalName);
-          _program.libraries.add(newLibrary);
-
-          _uriToLibrary[changedLibrary.fileUri] = newLibrary;
-          _referenceIndex.replaceLibrary(oldLibrary, newLibrary);
-
-          // Schedule the new outline for loading.
-          // TODO(scheglov): Add a more efficient API to add one library.
-          _dillTarget.loader.appendLibraries(_program,
-              filter: (uri) => uri == newLibrary.importUri);
-
-          // If main() was defined in the recompiled library, replace it.
-          if (mainReference?.asProcedure?.enclosingLibrary == oldLibrary) {
-            mainReference = newLibrary.procedures
-                .singleWhere((p) => p.name.name == 'main')
-                .reference;
-          }
-        }
-      });
-
-      // Load outlines of replaced libraries.
-      await _dillTarget.buildOutlines();
-
-      // Restore the main() procedure reference.
-      _program.mainMethodName = mainReference;
-    }
-  }
-
-  /// Recompute [_directLibraryDependencies] for the current [_program].
-  void _computeDependencies() {
-    _directLibraryDependencies.clear();
-    _uriToLibrary.clear();
-    _partToLibrary.clear();
-
-    var processedLibraries = new Set<Library>();
-
-    void processLibrary(Library library) {
-      if (!processedLibraries.add(library)) return;
-      _uriToLibrary[library.fileUri] = library;
-
-      // Remember libraries for parts.
-      for (var part in library.parts) {
-        _partToLibrary[part.fileUri] = library.fileUri;
-      }
-
-      // Record reverse dependencies.
-      for (LibraryDependency dependency in library.dependencies) {
-        Library targetLibrary = dependency.targetLibrary;
-        _directLibraryDependencies
-            .putIfAbsent(targetLibrary.fileUri, () => new Set<Uri>())
-            .add(library.fileUri);
-        processLibrary(targetLibrary);
-      }
-    }
-
-    var entryPointLibrary =
-        _program.libraries.singleWhere((lib) => lib.importUri == _entryPoint);
-    processLibrary(entryPointLibrary);
-  }
-
-  /// Compute salt and put into [_salt].
-  void _computeSalt() {
-    var saltBuilder = new ApiSignature();
-    saltBuilder.addInt(DATA_VERSION);
-    saltBuilder.addBool(options.strongMode);
-    if (_sdkOutlineBytes != null) {
-      saltBuilder.addBytes(_sdkOutlineBytes);
-    }
-    _salt = saltBuilder.toByteList();
-  }
-
-  /// Create a new, empty [_dillTarget].
-  void _createDillTarget() {
-    _dillTarget = new DillTarget(
-        new Ticker(isVerbose: false), uriTranslator, options.target);
-  }
-
-  /// Find files which are not referenced from the entry point and report
-  /// them to the watch function.
-  Future<Null> _gc() async {
-    List<FileState> removedFiles = _fsState.gc(_entryPoint);
-    if (removedFiles.isNotEmpty && _watchFn != null) {
-      for (var removedFile in removedFiles) {
-        // If a library, remove it from the program.
-        Library library = _uriToLibrary.remove(removedFile.fileUri);
-        if (library != null) {
-          _currentSignatures.remove(library.importUri);
-          _program.libraries.remove(library);
-          _program.root.removeChild(library.importUri.toString());
-          _program.uriToSource.remove(library.fileUri);
-          for (var part in library.parts) {
-            _program.uriToSource.remove(part.fileUri);
-          }
-        }
-        // Notify the client.
-        await _watchFn(removedFile.fileUri, false);
-      }
-    }
-  }
-
-  /// If SDK outline bytes are provided, load it and configure the file system
-  /// state to skip SDK library files.
-  void _loadSdkOutline() {
-    if (_sdkOutlineBytes != null) {
-      _logger.run('Load SDK outline from bytes', () {
-        loadProgramFromBytes(_sdkOutlineBytes, _program);
-        // Configure the file system state to skip the outline libraries.
-        for (var outlineLibrary in _program.libraries) {
-          _fsState.skipSdkLibraries.add(outlineLibrary.importUri);
-        }
-      });
-    }
-  }
-
-  /// Refresh all the invalidated files and update dependencies.
-  Future<Null> _refreshInvalidatedFiles() async {
-    await _logger.runAsync('Refresh invalidated files', () async {
-      // Replace the list to avoid concurrent modifications.
-      List<Uri> invalidatedFiles = _invalidatedFiles;
-      _invalidatedFiles = <Uri>[];
-
-      // Refresh the files.
-      _changedLibrariesWithSameApi.clear();
-      var filesWithDifferentApiSignature = <FileState>[];
-      for (var fileUri in invalidatedFiles) {
-        var file = _fsState.getFileByFileUri(fileUri);
-        if (file != null) {
-          _logger.writeln('Refresh $fileUri');
-          bool apiSignatureChanged = await file.refresh();
-          if (apiSignatureChanged) {
-            filesWithDifferentApiSignature.add(file);
-          } else {
-            FileState libraryFile = file;
-            Uri libraryFileUri = _partToLibrary[file.fileUri];
-            if (libraryFileUri != null) {
-              libraryFile = _fsState.getFileByFileUri(libraryFileUri);
-            }
-            _changedLibrariesWithSameApi.add(libraryFile);
-          }
-        }
-      }
-
-      if (filesWithDifferentApiSignature.isNotEmpty) {
-        _logger.writeln('API changed in $filesWithDifferentApiSignature.');
-        _changedLibrariesWithSameApi.clear();
-
-        /// Invalidate the library with the given [libraryUri],
-        /// and recursively all its clients.
-        void invalidateLibrary(Uri libraryUri) {
-          Library library = _uriToLibrary.remove(libraryUri);
-          if (library == null) return;
-
-          // Invalidate the library.
-          _program.libraries.remove(library);
-          _program.root.removeChild(library.importUri.toString());
-          _program.uriToSource.remove(libraryUri);
-          _currentSignatures.remove(library.importUri);
-          _referenceIndex.removeLibrary(library);
-
-          // Recursively invalidate clients.
-          Set<Uri> directDependencies =
-              _directLibraryDependencies.remove(libraryUri);
-          directDependencies?.forEach(invalidateLibrary);
-        }
-
-        // TODO(scheglov): Some changes still might be incremental.
-        for (var uri in invalidatedFiles) {
-          Uri libraryUri = _partToLibrary.remove(uri) ?? uri;
-          invalidateLibrary(libraryUri);
-        }
-      }
-    });
-  }
-
-  Future<T> _runWithFrontEndContext<T>(String msg, Future<T> f()) async {
-    return await CompilerContext.runWithOptions(options, (context) {
-      context.disableColors();
-      return _logger.runAsync(msg, f);
-    });
-  }
-
-  /// Throw [StateError] if [_lastSignatures] is `null`, i.e. there is no
-  /// last delta - it either has not been computed yet, or has been already
-  /// accepted or rejected.
-  void _throwIfNoLastDelta() {
-    if (_isComputeDeltaExecuting) {
-      throw new StateError(MSG_PENDING_COMPUTE);
-    }
-    if (_lastSignatures == null) {
-      throw new StateError(MSG_NO_LAST_DELTA);
-    }
-  }
-}
-
-class _ExternalState {
-  /// Return the JSON encoding of the [signatures].
-  static String asString(Map<Uri, String> signatures) {
-    var json = <String, String>{};
-    signatures.forEach((uri, signature) {
-      json[uri.toString()] = signature;
-    });
-    return JSON.encode(json);
-  }
-
-  /// Decode the given JSON [state] into the program state.
-  static Map<Uri, String> fromString(String state) {
-    var signatures = <Uri, String>{};
-    Map<String, String> json = JSON.decode(state);
-    json.forEach((uriStr, signature) {
-      var uri = Uri.parse(uriStr);
-      signatures[uri] = signature;
-    });
-    return signatures;
-  }
-}
-
-@visibleForTesting
-class _TestView {
-  /// The list of [Uri]s compiled for the last delta.
-  /// It does not include libraries which were reused from the last program.
-  final Set<Uri> compiledUris = new Set<Uri>();
-}
diff --git a/pkg/front_end/lib/src/minimal_incremental_kernel_generator.dart b/pkg/front_end/lib/src/minimal_incremental_kernel_generator.dart
deleted file mode 100644
index 3325ca9..0000000
--- a/pkg/front_end/lib/src/minimal_incremental_kernel_generator.dart
+++ /dev/null
@@ -1,384 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:async';
-
-import 'package:front_end/src/api_prototype/file_system.dart';
-import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart';
-import 'package:front_end/src/base/performance_logger.dart';
-import 'package:front_end/src/base/processed_options.dart';
-import 'package:front_end/src/fasta/compiler_context.dart';
-import 'package:front_end/src/fasta/dill/dill_target.dart';
-import 'package:front_end/src/fasta/kernel/kernel_target.dart';
-import 'package:front_end/src/fasta/uri_translator.dart';
-import 'package:kernel/kernel.dart';
-import 'package:meta/meta.dart';
-
-/// Implementation of [IncrementalKernelGenerator].
-///
-/// This implementation uses simplified approach to tracking dependencies.
-/// When a change happens to a file, we invalidate this file, its library,
-/// and then transitive closure of all libraries that reference it.
-class MinimalIncrementalKernelGenerator implements IncrementalKernelGenerator {
-  static const MSG_PENDING_COMPUTE =
-      'A computeDelta() invocation is still executing.';
-
-  static const MSG_NO_LAST_DELTA =
-      'The last delta has been already accepted or rejected.';
-
-  static const MSG_HAS_LAST_DELTA =
-      'The last delta must be either accepted or rejected.';
-
-  /// Options used by the kernel compiler.
-  final ProcessedOptions _options;
-
-  /// The object that knows how to resolve "package:" and "dart:" URIs.
-  final UriTranslator uriTranslator;
-
-  /// The logger to report compilation progress.
-  final PerformanceLog _logger;
-
-  /// The URI of the program entry point.
-  final Uri _entryPoint;
-
-  /// The function to notify when files become used or unused, or `null`.
-  final WatchUsedFilesFn _watchFn;
-
-  /// A [FileSystem] or [_WatchingFileSystem] instance.
-  final FileSystem _fileSystem;
-
-  /// The [Program] with currently valid libraries. When a file is invalidated,
-  /// we remove the file, its library, and everything affected from [_program].
-  Program _program = new Program();
-
-  /// Each key is the file system URI of a library.
-  /// Each value is the libraries that directly depend on the key library.
-  Map<Uri, Set<Uri>> _directLibraryDependencies = {};
-
-  /// Each key is the file system URI of a library.
-  /// Each value is the [Library] that is still in the [_program].
-  Map<Uri, Library> _uriToLibrary = {};
-
-  /// Each key is the file system URI of a part.
-  /// Each value is the file system URI of the library that sources the part.
-  Map<Uri, Uri> _partToLibrary = {};
-
-  /// Whether [computeDelta] is executing.
-  bool _isComputeDeltaExecuting = false;
-
-  /// The set of libraries (file system URIs) accepted by the client, and not
-  /// yet invalidated explicitly or implicitly via a transitive dependency.
-  ///
-  /// When we produce a new delta, we put newly compiled libraries into
-  /// the [_lastLibraries] field, so [_currentLibraries] and [_lastLibraries]
-  /// don't intersect.
-  final Set<Uri> _currentLibraries = new Set<Uri>();
-
-  /// The set of new libraries (file system URIs) returned to the client by the
-  /// last [computeDelta], or `null` if the last delta was either accepted or
-  /// rejected.
-  Set<Uri> _lastLibraries;
-
-  /// The object that provides additional information for tests.
-  _TestView _testView;
-
-  MinimalIncrementalKernelGenerator(this._options, this.uriTranslator,
-      List<int> sdkOutlineBytes, this._entryPoint,
-      {WatchUsedFilesFn watch})
-      : _logger = _options.logger,
-        _watchFn = watch,
-        _fileSystem = watch == null
-            ? _options.fileSystem
-            : new _WatchingFileSystem(_options.fileSystem, watch) {
-    _testView = new _TestView();
-
-    // Pre-populate the Program with SDK.
-    if (sdkOutlineBytes != null) {
-      loadProgramFromBytes(sdkOutlineBytes, _program);
-      for (var sdkLibrary in _program.libraries) {
-        _currentLibraries.add(sdkLibrary.fileUri);
-      }
-    }
-  }
-
-  /// Return the object that provides additional information for tests.
-  @visibleForTesting
-  _TestView get test => _testView;
-
-  @override
-  void acceptLastDelta() {
-    _throwIfNoLastDelta();
-    _currentLibraries.addAll(_lastLibraries);
-    _lastLibraries = null;
-  }
-
-  @override
-  Future<DeltaProgram> computeDelta() {
-    _options.ticker.reset();
-    if (_isComputeDeltaExecuting) {
-      throw new StateError(MSG_PENDING_COMPUTE);
-    }
-
-    if (_lastLibraries != null) {
-      throw new StateError(MSG_HAS_LAST_DELTA);
-    }
-    _lastLibraries = new Set<Uri>();
-
-    _isComputeDeltaExecuting = true;
-
-    return _runWithFrontEndContext('Compute delta', () async {
-      try {
-        var dillTarget =
-            new DillTarget(_options.ticker, uriTranslator, _options.target);
-
-        // Append all libraries what we still have in the current program.
-        await _logger.runAsync('Load dill libraries', () async {
-          dillTarget.loader.appendLibraries(_program);
-          await dillTarget.buildOutlines();
-        });
-
-        // Configure KernelTarget to compile the entry point.
-        var kernelTarget =
-            new KernelTarget(_fileSystem, false, dillTarget, uriTranslator);
-        kernelTarget.read(_entryPoint);
-
-        // Compile the entry point into the new program.
-        _program = await _logger.runAsync('Compile', () async {
-          await kernelTarget.buildOutlines(nameRoot: _program.root);
-          return await kernelTarget.buildProgram() ?? _program;
-        });
-
-        await _unwatchFiles();
-
-        _logger.run('Compute dependencies', _computeDependencies);
-
-        // Compose the resulting program with new libraries.
-        var program = new Program(nameRoot: _program.root);
-        _testView.compiledUris.clear();
-        for (var library in _program.libraries) {
-          Uri uri = library.fileUri;
-          if (_currentLibraries.contains(uri)) continue;
-
-          _lastLibraries.add(uri);
-          _testView.compiledUris.add(library.importUri);
-
-          program.uriToSource[uri] = _program.uriToSource[uri];
-          for (var part in library.parts) {
-            program.uriToSource[part.fileUri] =
-                _program.uriToSource[part.fileUri];
-          }
-
-          program.libraries.add(library);
-          library.parent = program;
-        }
-        program.mainMethod = _program.mainMethod;
-
-        return new DeltaProgram('', program);
-      } finally {
-        _isComputeDeltaExecuting = false;
-      }
-    });
-  }
-
-  @override
-  void invalidate(Uri uri) {
-    void invalidateLibrary(Uri libraryUri) {
-      Library library = _uriToLibrary.remove(libraryUri);
-      if (library == null) return;
-
-      // Invalidate the library.
-      _program.libraries.remove(library);
-      _program.root.removeChild("${library.importUri}");
-      _program.uriToSource.remove(libraryUri);
-      _currentLibraries.remove(libraryUri);
-
-      // Recursively invalidate dependencies.
-      Set<Uri> directDependencies =
-          _directLibraryDependencies.remove(libraryUri);
-      directDependencies?.forEach(invalidateLibrary);
-    }
-
-    Uri libraryUri = _partToLibrary.remove(uri) ?? uri;
-    invalidateLibrary(libraryUri);
-  }
-
-  @override
-  void rejectLastDelta() {
-    _throwIfNoLastDelta();
-    _lastLibraries = null;
-  }
-
-  @override
-  void reset() {
-    _currentLibraries.clear();
-    _lastLibraries = null;
-  }
-
-  @override
-  void setState(String state) {
-    // TODO(scheglov): Do we need this at all?
-    // If we don't know the previous state, we will give the client all
-    // libraries to reload. While this is suboptimal, this should not affect
-    // correctness.
-    // Note that even if we don't give the client all libraries, we will have
-    // to compile them all anyway, because this implementation does not use
-    // any persistent caching.
-  }
-
-  /// Recompute [_directLibraryDependencies] for the current [_program].
-  void _computeDependencies() {
-    _directLibraryDependencies.clear();
-    _uriToLibrary.clear();
-    _partToLibrary.clear();
-
-    var processedLibraries = new Set<Library>();
-
-    void processLibrary(Library library) {
-      if (!processedLibraries.add(library)) return;
-      _uriToLibrary[library.fileUri] = library;
-
-      // Remember libraries for parts.
-      for (var part in library.parts) {
-        _partToLibrary[part.fileUri] = library.fileUri;
-      }
-
-      // Record reverse dependencies.
-      for (LibraryDependency dependency in library.dependencies) {
-        Library targetLibrary = dependency.targetLibrary;
-        _directLibraryDependencies
-            .putIfAbsent(targetLibrary.fileUri, () => new Set<Uri>())
-            .add(library.fileUri);
-        processLibrary(targetLibrary);
-      }
-    }
-
-    var entryPointLibrary = _getEntryPointLibrary();
-    processLibrary(entryPointLibrary);
-  }
-
-  Library _getEntryPointLibrary() =>
-      _program.libraries.singleWhere((lib) => lib.importUri == _entryPoint);
-
-  Future<T> _runWithFrontEndContext<T>(String msg, Future<T> f()) async {
-    return await CompilerContext.runWithOptions(_options, (context) {
-      context.disableColors();
-      return _logger.runAsync(msg, f);
-    });
-  }
-
-  /// Throw [StateError] if [_lastLibraries] is `null`, i.e. there is no
-  /// last delta - it either has not been computed yet, or has been already
-  /// accepted or rejected.
-  void _throwIfNoLastDelta() {
-    if (_isComputeDeltaExecuting) {
-      throw new StateError(MSG_PENDING_COMPUTE);
-    }
-    if (_lastLibraries == null) {
-      throw new StateError(MSG_NO_LAST_DELTA);
-    }
-  }
-
-  /// Compute the set of of files transitively referenced from the entry point,
-  /// remove all other files from [_program], and call [_watchFn] to unwatch
-  /// known files that are not longer referenced.
-  Future<Null> _unwatchFiles() async {
-    var entryPointFiles = new Set<Uri>();
-
-    // Don't remove SDK libraries.
-    for (var library in _program.libraries) {
-      if (library.importUri.isScheme('dart')) {
-        entryPointFiles.add(library.fileUri);
-        for (var part in library.parts) {
-          entryPointFiles.add(part.fileUri);
-        }
-      }
-    }
-
-    void appendTransitiveFiles(Library library) {
-      if (entryPointFiles.add(library.fileUri)) {
-        for (var part in library.parts) {
-          entryPointFiles.add(part.fileUri);
-        }
-        for (var dependency in library.dependencies) {
-          appendTransitiveFiles(dependency.targetLibrary);
-        }
-      }
-    }
-
-    // Append files transitively referenced from the entry point.
-    var entryPointLibrary = _getEntryPointLibrary();
-    appendTransitiveFiles(entryPointLibrary);
-
-    // Remove not loaded files from the set of known files.
-    if (_fileSystem is _WatchingFileSystem) {
-      _WatchingFileSystem fileSystem = _fileSystem;
-      for (Uri knownUri in fileSystem.knownFiles.toList()) {
-        if (!entryPointFiles.contains(knownUri)) {
-          await _watchFn(knownUri, false);
-          fileSystem.knownFiles.remove(knownUri);
-          _program.uriToSource.remove(knownUri);
-        }
-      }
-    }
-
-    // Remove libraries that are no longer referenced.
-    _program.libraries
-        .removeWhere((library) => !entryPointFiles.contains(library.fileUri));
-  }
-}
-
-@visibleForTesting
-class _TestView {
-  /// The list of [Uri]s compiled for the last delta.
-  /// It does not include libraries which were reused from the last program.
-  final Set<Uri> compiledUris = new Set<Uri>();
-}
-
-/// [FileSystem] that notifies [WatchUsedFilesFn] about new files.
-class _WatchingFileSystem implements FileSystem {
-  final FileSystem fileSystem;
-  final WatchUsedFilesFn watchFn;
-  final Set<Uri> knownFiles = new Set<Uri>();
-
-  _WatchingFileSystem(this.fileSystem, this.watchFn);
-
-  @override
-  FileSystemEntity entityForUri(Uri uri) {
-    var entity = fileSystem.entityForUri(uri);
-    return new _WatchingFileSystemEntity(this, entity, watchFn);
-  }
-}
-
-/// [FileSystemEntity] that notifies the [WatchUsedFilesFn] about new files.
-class _WatchingFileSystemEntity implements FileSystemEntity {
-  final _WatchingFileSystem fileSystem;
-  final FileSystemEntity entity;
-  final WatchUsedFilesFn watchFn;
-
-  _WatchingFileSystemEntity(this.fileSystem, this.entity, this.watchFn);
-
-  @override
-  Uri get uri => entity.uri;
-
-  @override
-  Future<bool> exists() {
-    return entity.exists();
-  }
-
-  @override
-  Future<List<int>> readAsBytes() async {
-    if (fileSystem.knownFiles.add(uri)) {
-      await watchFn(uri, true);
-    }
-    return entity.readAsBytes();
-  }
-
-  @override
-  Future<String> readAsString() async {
-    if (fileSystem.knownFiles.add(uri)) {
-      await watchFn(uri, true);
-    }
-    return entity.readAsString();
-  }
-}
diff --git a/pkg/front_end/lib/src/testing/compiler_common.dart b/pkg/front_end/lib/src/testing/compiler_common.dart
index 81ac570..8e6a904 100644
--- a/pkg/front_end/lib/src/testing/compiler_common.dart
+++ b/pkg/front_end/lib/src/testing/compiler_common.dart
@@ -5,14 +5,19 @@
 /// Common compiler options and helper functions used for testing.
 library front_end.testing.compiler_options_common;
 
-import 'dart:async';
+import 'dart:async' show Future;
 
-import 'dart:io' show Platform;
+import 'package:kernel/ast.dart' show Library, Program;
 
-import 'package:front_end/src/api_prototype/front_end.dart';
-import 'package:front_end/src/api_prototype/memory_file_system.dart';
-import 'package:front_end/src/testing/hybrid_file_system.dart';
-import 'package:kernel/ast.dart';
+import '../api_prototype/front_end.dart'
+    show CompilerOptions, kernelForBuildUnit, kernelForProgram, summaryFor;
+
+import '../api_prototype/memory_file_system.dart' show MemoryFileSystem;
+
+import '../compute_platform_binaries_location.dart'
+    show computePlatformBinariesLocation;
+
+import '../testing/hybrid_file_system.dart' show HybridFileSystem;
 
 /// Generate kernel for a script.
 ///
@@ -99,8 +104,7 @@
     ..packagesFileUri = toTestUri('.packages');
 
   if (options.sdkSummary == null) {
-    options.sdkRoot =
-        Uri.base.resolve(Platform.resolvedExecutable).resolve("./");
+    options.sdkRoot = computePlatformBinariesLocation();
   }
 }
 
diff --git a/pkg/front_end/test/fasta/bootstrap_test.dart b/pkg/front_end/test/fasta/bootstrap_test.dart
index d731a21..7a57bfc 100644
--- a/pkg/front_end/test/fasta/bootstrap_test.dart
+++ b/pkg/front_end/test/fasta/bootstrap_test.dart
@@ -45,7 +45,7 @@
 }
 
 Future runCompiler(Uri compiler, Uri input, Uri output) async {
-  Uri dartVm = Uri.base.resolve(Platform.resolvedExecutable);
+  Uri dartVm = Uri.base.resolveUri(new Uri.file(Platform.resolvedExecutable));
   StdioProcess result = await StdioProcess.run(dartVm.toFilePath(), <String>[
     "-c",
     compiler.toFilePath(),
diff --git a/pkg/front_end/test/fasta/incremental_hello_test.dart b/pkg/front_end/test/fasta/incremental_hello_test.dart
index 97f02fc..1b13610 100644
--- a/pkg/front_end/test/fasta/incremental_hello_test.dart
+++ b/pkg/front_end/test/fasta/incremental_hello_test.dart
@@ -8,6 +8,8 @@
 
 import 'package:expect/expect.dart' show Expect;
 
+import 'package:kernel/ast.dart' show Program;
+
 import "package:front_end/src/api_prototype/compiler_options.dart"
     show CompilerOptions;
 
@@ -22,7 +24,7 @@
 import 'package:front_end/src/fasta/fasta_codes.dart' show LocatedMessage;
 
 import 'package:front_end/src/fasta/incremental_compiler.dart'
-    show FastaDelta, IncrementalCompiler;
+    show IncrementalCompiler;
 
 import 'package:front_end/src/fasta/severity.dart' show Severity;
 
@@ -53,25 +55,28 @@
   IncrementalCompiler compiler =
       new IncrementalCompiler(new CompilerContext(options));
 
-  FastaDelta delta = await compiler.computeDelta();
+  Program program = await compiler.computeDelta();
 
   if (sdkFromSource) {
     // Expect that the new program contains at least the following libraries:
     // dart:core, dart:async, and hello.dart.
-    Expect.isTrue(delta.newProgram.libraries.length > 2,
-        "${delta.newProgram.libraries.length} <= 2");
+    Expect.isTrue(
+        program.libraries.length > 2, "${program.libraries.length} <= 2");
   } else {
     // Expect that the new program contains exactly hello.dart.
-    Expect.isTrue(delta.newProgram.libraries.length == 1,
-        "${delta.newProgram.libraries.length} != 1");
+    Expect.isTrue(
+        program.libraries.length == 1, "${program.libraries.length} != 1");
   }
 
   compiler.invalidate(helloDart);
 
-  delta = await compiler.computeDelta(entryPoint: helloDart);
+  program = await compiler.computeDelta(entryPoint: helloDart);
   // Expect that the new program contains exactly hello.dart
-  Expect.isTrue(delta.newProgram.libraries.length == 1,
-      "${delta.newProgram.libraries.length} != 1");
+  Expect.isTrue(
+      program.libraries.length == 1, "${program.libraries.length} != 1");
+
+  program = await compiler.computeDelta(entryPoint: helloDart);
+  Expect.isTrue(program.libraries.isEmpty);
 }
 
 void main() {
diff --git a/pkg/front_end/test/fasta/incremental_test.dart b/pkg/front_end/test/fasta/incremental_test.dart
index 54c5e9f..d89f3a32 100644
--- a/pkg/front_end/test/fasta/incremental_test.dart
+++ b/pkg/front_end/test/fasta/incremental_test.dart
@@ -35,16 +35,8 @@
 import 'package:front_end/src/base/processed_options.dart'
     show ProcessedOptions;
 
-import 'package:front_end/src/incremental_kernel_generator_impl.dart'
-    show IncrementalKernelGeneratorImpl;
-
-import 'package:front_end/src/minimal_incremental_kernel_generator.dart'
-    show MinimalIncrementalKernelGenerator;
-
 import 'package:front_end/src/fasta/compiler_context.dart' show CompilerContext;
 
-import 'package:front_end/src/fasta/uri_translator.dart' show UriTranslator;
-
 import 'package:front_end/src/fasta/incremental_compiler.dart'
     show IncrementalCompiler;
 
@@ -59,42 +51,19 @@
 
 final Uri entryPoint = base.resolve("main.dart");
 
-enum Generator {
-  original,
-  minimal,
-  fasta,
-}
-
-Generator generatorFromString(String string) {
-  if (string == null) return Generator.fasta;
-  switch (string) {
-    case "original":
-      return Generator.original;
-    case "minimal":
-      return Generator.minimal;
-    case "fasta":
-      return Generator.fasta;
-    default:
-      throw "Unknown generator: '$string'";
-  }
-}
-
 class Context extends ChainContext {
   final CompilerContext compilerContext;
   final ExternalStateSnapshot snapshot;
   final List<CompilationMessage> errors;
-  final Generator requestedGenerator;
 
   final List<Step> steps = const <Step>[
     const ReadTest(),
-    const PrepareIncrementalKernelGenerator(),
     const RunCompilations(),
   ];
 
-  IncrementalKernelGenerator compiler;
+  final IncrementalKernelGenerator compiler;
 
-  Context(
-      this.compilerContext, this.snapshot, this.errors, this.requestedGenerator)
+  Context(this.compilerContext, this.snapshot, this.errors)
       : compiler = new IncrementalCompiler(compilerContext);
 
   ProcessedOptions get options => compilerContext.options;
@@ -150,32 +119,6 @@
   }
 }
 
-class PrepareIncrementalKernelGenerator
-    extends Step<TestCase, TestCase, Context> {
-  String get name => "prepare IKG";
-
-  const PrepareIncrementalKernelGenerator();
-
-  Future<Result<TestCase>> run(TestCase test, Context context) async {
-    if (Generator.fasta != context.requestedGenerator) {
-      context.compiler = await context
-          .runInContext<Future<IncrementalKernelGenerator>>(
-              (CompilerContext c) async {
-        UriTranslator uriTranslator = await c.options.getUriTranslator();
-        List<int> sdkOutlineBytes = await c.options.loadSdkSummaryBytes();
-        if (Generator.minimal == context.requestedGenerator) {
-          return new MinimalIncrementalKernelGenerator(c.options, uriTranslator,
-              sdkOutlineBytes, context.options.inputs.first);
-        } else {
-          return new IncrementalKernelGeneratorImpl(c.options, uriTranslator,
-              sdkOutlineBytes, context.options.inputs.first);
-        }
-      });
-    }
-    return pass(test);
-  }
-}
-
 class RunCompilations extends Step<TestCase, TestCase, Context> {
   const RunCompilations();
 
@@ -203,16 +146,18 @@
         return edits == 0 ? fail(test, "No sources found") : pass(test);
       }
       var compiler = context.compiler;
-      var delta = compiler is IncrementalCompiler
-          ? (await compiler.computeDelta(entryPoint: entryPoint))
-          : (await compiler.computeDelta());
-      // ignore: UNUSED_LOCAL_VARIABLE
-      Program program = delta.newProgram;
+      Program program = await compiler.computeDelta(entryPoint: entryPoint);
       List<CompilationMessage> errors = context.takeErrors();
-      if (errors.isNotEmpty && !test.expectations[edits].hasCompileTimeError) {
-        return fail(test, errors.join("\n"));
+      if (test.expectations[edits].hasCompileTimeError) {
+        if (errors.isEmpty) {
+          return fail(test, "Compile-time error expected, but none reported");
+        }
+      } else if (errors.isNotEmpty) {
+        return fail(
+            test, "Unexpected compile-time errors:\n  ${errors.join('\n  ')}");
+      } else if (program.libraries.length < 1) {
+        return fail(test, "The compiler detected no changes");
       }
-      context.compiler.acceptLastDelta();
     }
   }
 }
@@ -287,11 +232,7 @@
   final ExternalStateSnapshot snapshot =
       new ExternalStateSnapshot(await options.loadSdkSummary(null));
 
-  final Generator requestedGenerator =
-      generatorFromString(environment["generator"]);
-
-  return new Context(
-      new CompilerContext(options), snapshot, errors, requestedGenerator);
+  return new Context(new CompilerContext(options), snapshot, errors);
 }
 
 main([List<String> arguments = const []]) =>
diff --git a/pkg/front_end/test/fasta/testing/analyzer_loader.dart b/pkg/front_end/test/fasta/testing/analyzer_loader.dart
index d73819d..745cee4 100644
--- a/pkg/front_end/test/fasta/testing/analyzer_loader.dart
+++ b/pkg/front_end/test/fasta/testing/analyzer_loader.dart
@@ -4,39 +4,27 @@
 
 library fasta.analyzer_loader;
 
-import 'package:front_end/src/api_prototype/standard_file_system.dart';
-import 'package:kernel/ast.dart' show Program;
+import 'package:front_end/src/api_prototype/standard_file_system.dart'
+    show StandardFileSystem;
 
 import 'package:front_end/src/fasta/builder/builder.dart' show LibraryBuilder;
 
-import 'package:front_end/src/fasta/target_implementation.dart'
-    show TargetImplementation;
-
 import 'package:front_end/src/fasta/source/source_class_builder.dart'
     show SourceClassBuilder;
 
 import 'package:front_end/src/fasta/source/source_loader.dart'
     show SourceLoader;
 
-import 'analyzer_diet_listener.dart' show AnalyzerDietListener;
+import 'package:front_end/src/fasta/target_implementation.dart'
+    show TargetImplementation;
 
-import 'package:kernel/core_types.dart' show CoreTypes;
-import 'package:kernel/src/incremental_class_hierarchy.dart';
+import 'analyzer_diet_listener.dart' show AnalyzerDietListener;
 
 class AnalyzerLoader<L> extends SourceLoader<L> {
   AnalyzerLoader(TargetImplementation target)
       : super(StandardFileSystem.instance, false, target);
 
   @override
-  void computeHierarchy(Program program) {
-    ticker.logMs("Built analyzer element model.");
-    hierarchy = new IncrementalClassHierarchy();
-    ticker.logMs("Computed class hierarchy");
-    coreTypes = new CoreTypes(program);
-    ticker.logMs("Computed core types");
-  }
-
-  @override
   AnalyzerDietListener createDietListener(LibraryBuilder library) {
     return new AnalyzerDietListener(
         library, hierarchy, coreTypes, typeInferenceEngine);
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index 21ea7b3..00f49bf 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -189,7 +189,7 @@
   static Future<FastaContext> create(
       Chain suite, Map<String, String> environment) async {
     Uri sdk = Uri.base.resolve("sdk/");
-    Uri vm = Uri.base.resolve(Platform.resolvedExecutable);
+    Uri vm = Uri.base.resolveUri(new Uri.file(Platform.resolvedExecutable));
     Uri packages = Uri.base.resolve(".packages");
     var options = new ProcessedOptions(new CompilerOptions()
       ..sdkRoot = sdk
diff --git a/pkg/front_end/test/fasta/tool_test.dart b/pkg/front_end/test/fasta/tool_test.dart
index 070a301..494cde9 100644
--- a/pkg/front_end/test/fasta/tool_test.dart
+++ b/pkg/front_end/test/fasta/tool_test.dart
@@ -144,10 +144,17 @@
 
   for (String subtool in testedSubtools) {
     print("Testing $subtool");
-    ProcessResult result =
-        Process.runSync("/bin/bash", <String>[toolPath, subtool]);
+    ProcessResult result = Process.runSync(
+        "/bin/bash", <String>[toolPath, subtool],
+        environment: <String, String>{"DART_VM": Platform.resolvedExecutable});
     Map expectation = expectations.remove(subtool);
-    Expect.equals(expectation["exitCode"], result.exitCode);
+    String combinedOutput = """
+stdout:
+${result.stdout}
+stderr:
+${result.stderr}
+""";
+    Expect.equals(expectation["exitCode"], result.exitCode, combinedOutput);
 
     switch (subtool) {
       case "scanner":
diff --git a/pkg/front_end/test/fasta/type_inference/interface_resolver_test.dart b/pkg/front_end/test/fasta/type_inference/interface_resolver_test.dart
index ef4fd1a..eede59b 100644
--- a/pkg/front_end/test/fasta/type_inference/interface_resolver_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/interface_resolver_test.dart
@@ -8,7 +8,6 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
-import 'package:kernel/src/incremental_class_hierarchy.dart';
 import 'package:kernel/testing/mock_sdk_program.dart';
 import 'package:kernel/type_algebra.dart';
 import 'package:test/test.dart';
@@ -22,23 +21,38 @@
 
 @reflectiveTest
 class InterfaceResolverTest {
-  final testLib =
-      new Library(Uri.parse('org-dartlang:///test.dart'), name: 'lib');
+  final Library testLib;
 
-  Program program;
+  final Program program;
 
-  CoreTypes coreTypes;
+  final CoreTypes coreTypes;
 
-  ClassHierarchy classHierarchy;
+  ClassHierarchy cachedClassHierarchy;
 
-  TypeSchemaEnvironment typeEnvironment;
+  TypeSchemaEnvironment cachedTypeEnvironment;
 
-  InterfaceResolver interfaceResolver;
+  InterfaceResolver cachedInterfaceResolver;
 
-  InterfaceResolverTest() {
-    program = createMockSdkProgram();
-    program.libraries.add(testLib..parent = program);
-    resetInterfaceResolver();
+  InterfaceResolverTest()
+      : this._(new Library(Uri.parse('org-dartlang:///test.dart'), name: 'lib'),
+            createMockSdkProgram());
+
+  InterfaceResolverTest._(this.testLib, Program program)
+      : program = program..libraries.add(testLib..parent = program),
+        coreTypes = new CoreTypes(program);
+
+  ClassHierarchy get classHierarchy {
+    return cachedClassHierarchy ??= new ClassHierarchy(program);
+  }
+
+  TypeSchemaEnvironment get typeEnvironment {
+    return cachedTypeEnvironment ??=
+        new TypeSchemaEnvironment(coreTypes, classHierarchy, true);
+  }
+
+  InterfaceResolver get interfaceResolver {
+    return cachedInterfaceResolver ??=
+        new InterfaceResolver(null, typeEnvironment, null, true);
   }
 
   InterfaceType get intType => coreTypes.intClass.rawType;
@@ -70,8 +84,7 @@
       expect(interfaceMember, same(member));
     }
 
-    check(new ClosedWorldClassHierarchy(program));
-    check(new IncrementalClassHierarchy());
+    check(new ClassHierarchy(program));
   }
 
   Procedure getCandidate(Class class_, bool setter) {
@@ -125,6 +138,7 @@
       List<Supertype> implementedTypes,
       List<Procedure> procedures,
       List<Field> fields}) {
+    resetInterfaceResolver();
     var class_ = new ShadowClass(
         name: name ?? 'C',
         supertype: supertype ?? objectClass.asThisSupertype,
@@ -197,12 +211,9 @@
   }
 
   void resetInterfaceResolver() {
-    classHierarchy = new IncrementalClassHierarchy();
-    coreTypes = new CoreTypes(program);
-    typeEnvironment =
-        new TypeSchemaEnvironment(coreTypes, classHierarchy, true);
-    interfaceResolver =
-        new InterfaceResolver(null, typeEnvironment, null, true);
+    cachedClassHierarchy = null;
+    cachedTypeEnvironment = null;
+    cachedInterfaceResolver = null;
   }
 
   void test_candidate_for_field_getter() {
@@ -729,7 +740,7 @@
     expect(y.isGenericCovariantImpl, isFalse);
     expect(y.isGenericCovariantInterface, isFalse);
     expect(y.isCovariant, isTrue);
-    expect(ForwardingStub.getInterfaceTarget(stub), same(methodA));
+    expect(stub.forwardingStubInterfaceTarget.node, same(methodA));
     expect(getStubTarget(stub), same(methodA));
   }
 
@@ -777,7 +788,7 @@
     expect(y.isGenericCovariantImpl, isTrue);
     expect(y.isGenericCovariantInterface, isFalse);
     expect(y.isCovariant, isFalse);
-    expect(ForwardingStub.getInterfaceTarget(stub), same(methodA));
+    expect(stub.forwardingStubInterfaceTarget.node, same(methodA));
     expect(getStubTarget(stub), same(methodA));
   }
 
@@ -822,7 +833,7 @@
     ]);
     var nodeE = getForwardingNode(e, false);
     var stub = nodeE.finalize();
-    expect(ForwardingStub.getInterfaceTarget(stub), same(methodC));
+    expect(stub.forwardingStubInterfaceTarget.node, same(methodC));
     expect(getStubTarget(stub), same(methodC));
   }
 
@@ -855,7 +866,7 @@
         implementedTypes: [i2.asThisSupertype]);
     var nodeE = getForwardingNode(e, true);
     var stub = nodeE.finalize();
-    expect(ForwardingStub.getInterfaceTarget(stub), same(setterC));
+    expect(stub.forwardingStubInterfaceTarget.node, same(setterC));
     expect(getStubTarget(stub), same(setterC));
   }
 
@@ -870,7 +881,7 @@
         implementedTypes: [b.asThisSupertype]);
     var node = getForwardingNode(c, false);
     var stub = node.finalize();
-    expect(ForwardingStub.getInterfaceTarget(stub), same(fieldB));
+    expect(stub.forwardingStubInterfaceTarget.node, same(fieldB));
   }
 
   void test_merge_candidates_including_mixin() {
@@ -965,7 +976,7 @@
         name: 'C', implementedTypes: [a.asThisSupertype, b.asThisSupertype]);
     var node = getForwardingNode(c, false);
     var stub = node.finalize();
-    expect(ForwardingStub.getInterfaceTarget(stub), same(methodB));
+    expect(stub.forwardingStubInterfaceTarget.node, same(methodB));
     expect(getStubTarget(stub), isNull);
     expect(stub.function.returnType, intType);
   }
@@ -984,7 +995,7 @@
     ]);
     var node = getForwardingNode(d, true);
     var stub = node.finalize();
-    expect(ForwardingStub.getInterfaceTarget(stub), same(setterB));
+    expect(stub.forwardingStubInterfaceTarget.node, same(setterB));
     expect(getStubTarget(stub), isNull);
     expect(stub.function.positionalParameters[0].type, objectType);
   }
@@ -1017,11 +1028,11 @@
     var resolvedMethod = node.finalize();
     expect(resolvedMethod, same(methodC));
     expect(methodC.function.body, isNotNull);
-    expect(methodC, isNot(new isInstanceOf<ForwardingStub>()));
+    expect(methodC.forwardingStubInterfaceTarget, isNull);
     expect(getStubTarget(methodC), same(methodA));
   }
 
-  void test_resolve_with_subsitutions() {
+  void test_resolve_with_substitutions() {
     var typeParamA = new TypeParameter('T', objectType);
     var typeParamB = new TypeParameter('T', objectType);
     var typeParamC = new TypeParameter('T', objectType);
@@ -1046,7 +1057,7 @@
         ]);
     var node = getForwardingNode(d, false);
     var stub = node.finalize();
-    expect(ForwardingStub.getInterfaceTarget(stub), same(methodB));
+    expect(stub.forwardingStubInterfaceTarget.node, same(methodB));
     expect(getStubTarget(stub), isNull);
     expect(stub.function.returnType, intType);
   }
diff --git a/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_test.dart b/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_test.dart
index 4011bfc..d51d345 100644
--- a/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_test.dart
@@ -7,7 +7,7 @@
 import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/core_types.dart';
-import 'package:kernel/src/incremental_class_hierarchy.dart';
+import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/testing/mock_sdk_program.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -209,8 +209,8 @@
 
   void _checkConstraints(
       DartType a, DartType b, List<String> expectedConstraints) {
-    var typeSchemaEnvironment = new TypeSchemaEnvironment(
-        coreTypes, new IncrementalClassHierarchy(), true);
+    var typeSchemaEnvironment =
+        new TypeSchemaEnvironment(coreTypes, new ClassHierarchy(program), true);
     var typeConstraintGatherer = new TypeConstraintGatherer(
         typeSchemaEnvironment, [T1.parameter, T2.parameter]);
     var constraints = typeConstraintGatherer.trySubtypeMatch(a, b)
diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart
index 80eaee2..a8335b2 100644
--- a/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart
@@ -6,7 +6,7 @@
 import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/core_types.dart';
-import 'package:kernel/src/incremental_class_hierarchy.dart';
+import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/testing/mock_sdk_program.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -714,7 +714,7 @@
 
   TypeSchemaEnvironment _makeEnv() {
     return new TypeSchemaEnvironment(
-        coreTypes, new IncrementalClassHierarchy(), true);
+        coreTypes, new ClassHierarchy(program), true);
   }
 
   DartType _map(DartType key, DartType value) =>
diff --git a/pkg/front_end/test/incremental_kernel_generator_test.dart b/pkg/front_end/test/incremental_kernel_generator_test.dart
deleted file mode 100644
index 174b9d2..0000000
--- a/pkg/front_end/test/incremental_kernel_generator_test.dart
+++ /dev/null
@@ -1,1336 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:async';
-
-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/incremental_kernel_generator.dart';
-import 'package:front_end/src/api_prototype/memory_file_system.dart';
-import 'package:front_end/src/fasta/kernel/utils.dart';
-import 'package:front_end/src/incremental_kernel_generator_impl.dart';
-import 'package:front_end/src/api_prototype/summary_generator.dart';
-import 'package:kernel/ast.dart';
-import 'package:kernel/text/ast_to_text.dart';
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'src/incremental/mock_sdk.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(IncrementalKernelGeneratorTest);
-  });
-}
-
-@reflectiveTest
-class IncrementalKernelGeneratorTest {
-  /// Virtual filesystem for testing.
-  final fileSystem = new MemoryFileSystem(Uri.parse('org-dartlang-test:///'));
-
-  /// The used file watcher.
-  WatchUsedFilesFn watchFn = (uri, used) {};
-
-  /// The object under test.
-  IncrementalKernelGeneratorImpl generator;
-
-  /// Compute the initial [Program] for the given [entryPoint].
-  Future<DeltaProgram> getInitialState(Uri entryPoint,
-      {Uri sdkOutlineUri,
-      bool setPackages: true,
-      bool embedSourceText: true,
-      String initialState,
-      ByteStore byteStore}) async {
-    createSdkFiles(fileSystem);
-    // TODO(scheglov) Builder the SDK kernel and set it into the options.
-
-    var compilerOptions = new CompilerOptions()
-      ..fileSystem = fileSystem
-      ..byteStore = byteStore ?? new MemoryByteStore()
-//      ..logger = new PerformanceLog(stdout)
-      ..strongMode = true
-      ..chaseDependencies = true
-      ..librariesSpecificationUri =
-          Uri.parse('org-dartlang-test:///sdk/lib/libraries.json')
-      ..sdkSummary = sdkOutlineUri
-      ..embedSourceText = embedSourceText;
-
-    if (setPackages) {
-      compilerOptions.packagesFileUri =
-          Uri.parse('org-dartlang-test:///test/.packages');
-    }
-
-    generator = await IncrementalKernelGenerator
-        .newInstance(compilerOptions, entryPoint, watch: watchFn);
-
-    if (initialState != null) {
-      generator.setState(initialState);
-    }
-
-    return await generator.computeDelta();
-  }
-
-  test_acceptLastDelta() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String path = '/test/lib/test.dart';
-    Uri uri = writeFile(path, '');
-
-    await getInitialState(uri);
-    generator.acceptLastDelta();
-
-    // Attempt to accept the second time.
-    _assertStateError(() {
-      generator.acceptLastDelta();
-    }, IncrementalKernelGeneratorImpl.MSG_NO_LAST_DELTA);
-  }
-
-  test_computeDelta_chain() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    Uri aUri = writeFile(aPath, 'var a = 1;');
-    Uri bUri = writeFile(bPath, r'''
-import 'a.dart';
-var b = a;
-''');
-    Uri cUri = writeFile(cPath, r'''
-import 'a.dart';
-import 'b.dart';
-var c1 = a;
-var c2 = b;
-void main() {}
-''');
-
-    {
-      DeltaProgram delta = await getInitialState(cUri);
-      Program program = delta.newProgram;
-      generator.acceptLastDelta();
-      _assertLibraryUris(program,
-          includes: [aUri, bUri, cUri, Uri.parse('dart:core')]);
-      Library library = _getLibrary(program, cUri);
-      expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "dart:core" as core;
-import "./a.dart" as a;
-import "./b.dart" as b;
-
-static field core::int c1 = a::a;
-static field core::int c2 = b::b;
-static method main() → void {}
-''');
-      // The main method is set.
-      expect(program.mainMethod, isNotNull);
-      expect(program.mainMethod.enclosingLibrary.fileUri, cUri);
-    }
-
-    // Update b.dart and recompile c.dart
-    writeFile(bPath, r'''
-import 'a.dart';
-var b = 1.2;
-''');
-    generator.invalidate(bUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program,
-          includes: [bUri, cUri], excludes: [aUri, Uri.parse('dart:core')]);
-      Library library = _getLibrary(program, cUri);
-      expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "dart:core" as core;
-import "./a.dart" as a;
-import "./b.dart" as b;
-
-static field core::int c1 = a::a;
-static field core::double c2 = b::b;
-static method main() → void {}
-''');
-      // The main method is set even though not the entry point is updated.
-      expect(program.mainMethod, isNotNull);
-      expect(program.mainMethod.enclosingLibrary.fileUri, cUri);
-    }
-  }
-
-  test_computeDelta_cycle() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    Uri aUri = writeFile(aPath, 'var a = 1;');
-    Uri bUri = writeFile(bPath, r'''
-import 'c.dart';
-var b1 = c1;
-var b2 = c2;
-''');
-    Uri cUri = writeFile(cPath, r'''
-import 'a.dart';
-import 'b.dart';
-var c1 = a;
-var c2 = b1;
-''');
-
-    {
-      DeltaProgram delta = await getInitialState(cUri);
-      generator.acceptLastDelta();
-      Program program = delta.newProgram;
-      // b.dart and c.dart form a cycle.
-      _assertLibraryUris(program,
-          includes: [aUri, bUri, cUri, Uri.parse('dart:core')]);
-      Library library = _getLibrary(program, cUri);
-      expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "dart:core" as core;
-import "./a.dart" as a;
-import "./b.dart" as b;
-
-static field core::int c1 = a::a;
-static field core::int c2 = b::b1;
-''');
-    }
-
-    // Update a.dart and recompile c.dart
-    writeFile(aPath, r'''
-var a = 1.2;
-''');
-    generator.invalidate(aUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program,
-          includes: [aUri, bUri, cUri], excludes: [Uri.parse('dart:core')]);
-      Library library = _getLibrary(program, cUri);
-      expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "dart:core" as core;
-import "./a.dart" as a;
-import "./b.dart" as b;
-
-static field core::double c1 = a::a;
-static field core::double c2 = b::b1;
-''');
-    }
-  }
-
-  test_computeDelta_export() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    writeFile(aPath, 'class A {}');
-    Uri bUri = writeFile(bPath, 'export "a.dart";');
-    Uri cUri = writeFile(cPath, 'export "b.dart";');
-
-    DeltaProgram delta = await getInitialState(cUri);
-    generator.acceptLastDelta();
-    Program program = delta.newProgram;
-    expect(_getLibraryText(_getLibrary(program, bUri)), r'''
-library;
-import self as self;
-import "./a.dart" as a;
-additionalExports = (a::A)
-
-''');
-    expect(_getLibraryText(_getLibrary(program, cUri)), r'''
-library;
-import self as self;
-import "./a.dart" as a;
-additionalExports = (a::A)
-
-''');
-  }
-
-  test_computeDelta_export_cycle() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    writeFile(aPath, 'export "b.dart"; class A {}');
-    writeFile(bPath, 'export "a.dart"; class B {}');
-    Uri cUri = writeFile(cPath, r'''
-import 'b.dart';
-A a;
-B b;
-''');
-
-    {
-      DeltaProgram delta = await getInitialState(cUri);
-      generator.acceptLastDelta();
-      Program program = delta.newProgram;
-      Library library = _getLibrary(program, cUri);
-      expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "./a.dart" as a;
-import "./b.dart" as b;
-
-static field a::A a;
-static field b::B b;
-''');
-    }
-
-    // Update c.dart and compile.
-    writeFile(cPath, r'''
-import 'b.dart';
-A a;
-B b;
-int c;
-''');
-    generator.invalidate(cUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      Program program = delta.newProgram;
-      _assertCompiledUris([cUri]);
-      Library library = _getLibrary(program, cUri);
-      expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "./a.dart" as a;
-import "./b.dart" as b;
-import "dart:core" as core;
-
-static field a::A a;
-static field b::B b;
-static field core::int c;
-''');
-    }
-  }
-
-  test_computeDelta_hasAnotherRunning() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String path = '/test/lib/test.dart';
-    Uri uri = writeFile(path, '');
-
-    await getInitialState(uri);
-    generator.acceptLastDelta();
-
-    // Run, but don't wait.
-    var future = generator.computeDelta();
-
-    // acceptLastDelta() is failing while the future is pending.
-    _assertStateError(() {
-      generator.acceptLastDelta();
-    }, IncrementalKernelGeneratorImpl.MSG_PENDING_COMPUTE);
-
-    // rejectLastDelta() is failing while the future is pending.
-    _assertStateError(() {
-      generator.rejectLastDelta();
-    }, IncrementalKernelGeneratorImpl.MSG_PENDING_COMPUTE);
-
-    // Run another, this causes StateError.
-    _assertStateError(() {
-      generator.computeDelta();
-    }, IncrementalKernelGeneratorImpl.MSG_PENDING_COMPUTE);
-
-    // Wait for the pending future.
-    await future;
-  }
-
-  test_computeDelta_includePathToMain() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    String dPath = '/test/lib/d.dart';
-
-    // A --> B -> C
-    //   \-> D
-
-    Uri aUri = writeFile(aPath, r'''
-import 'b.dart';
-import 'd.dart';
-main() {
-  b();
-  d();
-}
-''');
-    Uri bUri = writeFile(bPath, r'''
-import 'c.dart';
-b() {
-  c();
-}
-''');
-    Uri cUri = writeFile(cPath, 'c() { print(0); }');
-    Uri dUri = writeFile(dPath, 'd() {}');
-
-    {
-      DeltaProgram delta = await getInitialState(aUri);
-      Program program = delta.newProgram;
-      generator.acceptLastDelta();
-      _assertLibraryUris(program,
-          includes: [aUri, bUri, cUri, dUri, Uri.parse('dart:core')]);
-    }
-
-    // Update c.dart and compute the delta.
-    // It should include the changed c.dart, plus b.dart and a.dart because VM
-    // requires this (because of possible inlining). But d.dart is not on the
-    // path from main() to the changed c.dart, so it is not included.
-    writeFile(cPath, 'c() { print(1); }');
-    generator.invalidate(cUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      generator.acceptLastDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program,
-          includes: [aUri, bUri, cUri],
-          excludes: [dUri, Uri.parse('dart:core')]);
-      // While a.dart and b.dart are is included (VM needs them), they were not
-      // recompiled, because the change to c.dart was in the function body.
-      _assertCompiledUris([cUri]);
-    }
-  }
-
-  test_computeDelta_parts() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    Uri aUri = writeFile(aPath, r'''
-library lib;
-part 'b.dart';
-''');
-    Uri bUri = writeFile(bPath, r'''
-part of lib;
-''');
-
-    DeltaProgram delta = await getInitialState(aUri);
-    Program program = delta.newProgram;
-
-    // Sources for library and its part must be present.
-    expect(program.uriToSource.keys, contains(aUri));
-    expect(program.uriToSource.keys, contains(bUri));
-  }
-
-  test_computeDelta_updateBody() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    Uri aUri = writeFile(aPath, r'''
-int foo() {
-  return 1;
-}
-''');
-    Uri bUri = writeFile(bPath, r'''
-import 'a.dart';
-var f = foo;
-main() {}
-''');
-
-    {
-      DeltaProgram delta = await getInitialState(bUri);
-      generator.acceptLastDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [aUri, bUri]);
-      Library aLibrary = _getLibrary(program, aUri);
-      Library bLibrary = _getLibrary(program, bUri);
-      expect(_getLibraryText(aLibrary), r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method foo() → core::int {
-  return 1;
-}
-''');
-      // b.dart uses references to a.dart nodes.
-      expect((bLibrary.fields[0].initializer as StaticGet).targetReference,
-          same(aLibrary.procedures[0].reference));
-      // main() is set
-      expect(program.mainMethod, isNotNull);
-      expect(program.mainMethod, _getMainProcedure(bLibrary));
-    }
-
-    // Update a.dart and recompile b.dart
-    writeFile(aPath, r'''
-int foo() {
-  return 2;
-}
-''');
-    generator.invalidate(aUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      generator.acceptLastDelta();
-      _assertCompiledUris([aUri]);
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [aUri, bUri]);
-      Library aLibrary = _getLibrary(program, aUri);
-      Library bLibrary = _getLibrary(program, bUri);
-      expect(_getLibraryText(aLibrary), r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method foo() → core::int {
-  return 2;
-}
-''');
-      // b.dart uses references to the new a.dart nodes.
-      expect((bLibrary.fields[0].initializer as StaticGet).targetReference,
-          same(aLibrary.procedures[0].reference));
-      // main() is set
-      expect(program.mainMethod, isNotNull);
-      expect(program.mainMethod, _getMainProcedure(bLibrary));
-    }
-
-    // Update a.dart and recompile b.dart
-    writeFile(aPath, r'''
-int foo() {
-  return 3;
-}
-''');
-    generator.invalidate(aUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      generator.acceptLastDelta();
-      _assertCompiledUris([aUri]);
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [aUri, bUri]);
-      Library aLibrary = _getLibrary(program, aUri);
-      Library bLibrary = _getLibrary(program, bUri);
-      expect(_getLibraryText(aLibrary), r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method foo() → core::int {
-  return 3;
-}
-''');
-      // b.dart uses references to the new a.dart nodes.
-      expect((bLibrary.fields[0].initializer as StaticGet).targetReference,
-          same(aLibrary.procedures[0].reference));
-    }
-  }
-
-  test_computeDelta_updateBody2() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    Uri aUri = writeFile(aPath, r'''
-int foo() {
-  return 1;
-}
-''');
-    Uri bUri = writeFile(bPath, r'''
-int bar() {
-  return 2;
-}
-''');
-    Uri cUri = writeFile(cPath, r'''
-import 'a.dart';
-import 'b.dart';
-var f1 = foo;
-var f2 = bar;
-''');
-
-    {
-      DeltaProgram delta = await getInitialState(cUri);
-      generator.acceptLastDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [aUri, bUri, cUri]);
-      Library aLibrary = _getLibrary(program, aUri);
-      Library bLibrary = _getLibrary(program, bUri);
-      Library cLibrary = _getLibrary(program, cUri);
-      expect(_getLibraryText(aLibrary), r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method foo() → core::int {
-  return 1;
-}
-''');
-      expect(_getLibraryText(bLibrary), r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method bar() → core::int {
-  return 2;
-}
-''');
-      // c.dart uses references to a.dart and b.dart nodes.
-      expect((cLibrary.fields[0].initializer as StaticGet).targetReference,
-          same(aLibrary.procedures[0].reference));
-      expect((cLibrary.fields[1].initializer as StaticGet).targetReference,
-          same(bLibrary.procedures[0].reference));
-    }
-
-    // Update a.dart and b.dart, and recompile c.dart
-    writeFile(aPath, r'''
-int foo() {
-  return 3;
-}
-''');
-    writeFile(bPath, r'''
-int bar() {
-  return 4;
-}
-''');
-    generator.invalidate(aUri);
-    generator.invalidate(bUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      _assertCompiledUris([aUri, bUri]);
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [aUri, bUri, cUri]);
-      Library aLibrary = _getLibrary(program, aUri);
-      Library bLibrary = _getLibrary(program, bUri);
-      Library cLibrary = _getLibrary(program, cUri);
-      expect(_getLibraryText(aLibrary), r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method foo() → core::int {
-  return 3;
-}
-''');
-      expect(_getLibraryText(bLibrary), r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method bar() → core::int {
-  return 4;
-}
-''');
-      // c.dart uses references to the new a.dart and b.dart nodes.
-      expect((cLibrary.fields[0].initializer as StaticGet).targetReference,
-          same(aLibrary.procedures[0].reference));
-      expect((cLibrary.fields[1].initializer as StaticGet).targetReference,
-          same(bLibrary.procedures[0].reference));
-    }
-  }
-
-  test_computeDelta_updateBody_exportCycle() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    Uri aUri = writeFile(aPath, r'''
-export 'b.dart';
-int foo() {
-  return 1;
-}
-''');
-    Uri bUri = writeFile(bPath, r'''
-export 'a.dart';
-int bar() {
-  return 1;
-}
-''');
-    Uri cUri = writeFile(cPath, r'''
-import 'a.dart';
-var f = foo;
-''');
-
-    {
-      DeltaProgram delta = await getInitialState(cUri);
-      generator.acceptLastDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [aUri, bUri, cUri]);
-      Library aLibrary = _getLibrary(program, aUri);
-      Library bLibrary = _getLibrary(program, bUri);
-      Library cLibrary = _getLibrary(program, cUri);
-      expect(_getLibraryText(aLibrary), r'''
-library;
-import self as self;
-import "dart:core" as core;
-import "./b.dart" as b;
-additionalExports = (b::bar)
-
-static method foo() → core::int {
-  return 1;
-}
-''');
-      // b.dart and c.dart reference "foo" from a.dart
-      var fooReference = aLibrary.procedures[0].reference;
-      expect(bLibrary.additionalExports, contains(fooReference));
-      expect((cLibrary.fields[0].initializer as StaticGet).targetReference,
-          same(fooReference));
-    }
-
-    // Update a.dart and recompile b.dart
-    writeFile(aPath, r'''
-export 'b.dart';
-int foo() {
-  return 2;
-}
-''');
-    generator.invalidate(aUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      _assertCompiledUris([aUri]);
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [aUri, bUri, cUri]);
-      Library aLibrary = _getLibrary(program, aUri);
-      Library bLibrary = _getLibrary(program, bUri);
-      Library cLibrary = _getLibrary(program, cUri);
-      expect(_getLibraryText(aLibrary), r'''
-library;
-import self as self;
-import "dart:core" as core;
-import "./b.dart" as b;
-additionalExports = (b::bar)
-
-static method foo() → core::int {
-  return 2;
-}
-''');
-      // b.dart and c.dart reference "foo" from a.dart
-      var fooReference = aLibrary.procedures[0].reference;
-      expect(bLibrary.additionalExports, contains(fooReference));
-      expect((cLibrary.fields[0].initializer as StaticGet).targetReference,
-          same(fooReference));
-    }
-  }
-
-  test_computeDelta_updateBody_hasMain() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    Uri aUri = writeFile(aPath, r'''
-int foo() {
-  return 1;
-}
-main() {}
-''');
-
-    {
-      DeltaProgram delta = await getInitialState(aUri);
-      generator.acceptLastDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [aUri, aUri]);
-      Library aLibrary = _getLibrary(program, aUri);
-      // main() is set
-      expect(program.mainMethod, isNotNull);
-      expect(program.mainMethod.enclosingLibrary, aLibrary);
-    }
-
-    // Recompile the library with main()
-    writeFile(aPath, r'''
-int foo() {
-  return 2;
-}
-main() {}
-''');
-    generator.invalidate(aUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      generator.acceptLastDelta();
-      _assertCompiledUris([aUri]);
-      Program program = delta.newProgram;
-      Library aLibrary = _getLibrary(program, aUri);
-      // main() is set
-      expect(program.mainMethod, isNotNull);
-      expect(program.mainMethod.enclosingLibrary, aLibrary);
-    }
-  }
-
-  test_computeDelta_updateBody_part() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    Uri aUri = writeFile(aPath, r'''
-library lib;
-part 'b.dart';
-int foo() {
-  return 1;
-}
-''');
-    Uri bUri = writeFile(bPath, r'''
-part of lib;
-int bar() {
-  return 2;
-}
-''');
-    Uri cUri = writeFile(cPath, r'''
-import 'a.dart';
-var f1 = foo;
-var f2 = bar;
-''');
-
-    {
-      DeltaProgram delta = await getInitialState(cUri);
-      generator.acceptLastDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [aUri, cUri]);
-      Library aLibrary = _getLibrary(program, aUri);
-      Library cLibrary = _getLibrary(program, cUri);
-      expect(_getLibraryText(aLibrary), r'''
-library lib;
-import self as self;
-import "dart:core" as core;
-
-static method foo() → core::int {
-  return 1;
-}
-static method /* from org-dartlang-test:///test/lib/b.dart */ bar() → core::int {
-  return 2;
-}
-''');
-      // b.dart uses references to a.dart nodes.
-      expect((cLibrary.fields[0].initializer as StaticGet).targetReference,
-          same(aLibrary.procedures[0].reference));
-      expect((cLibrary.fields[1].initializer as StaticGet).targetReference,
-          same(aLibrary.procedures[1].reference));
-    }
-
-    // Update b.dart and recompile.
-    writeFile(bPath, r'''
-part of lib;
-int bar() {
-  return 3;
-}
-''');
-    generator.invalidate(bUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      _assertCompiledUris([aUri]);
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [aUri, cUri]);
-      Library aLibrary = _getLibrary(program, aUri);
-      Library cLibrary = _getLibrary(program, cUri);
-      expect(_getLibraryText(aLibrary), r'''
-library lib;
-import self as self;
-import "dart:core" as core;
-
-static method foo() → core::int {
-  return 1;
-}
-static method /* from org-dartlang-test:///test/lib/b.dart */ bar() → core::int {
-  return 3;
-}
-''');
-      // b.dart uses references to the new a.dart nodes.
-      expect((cLibrary.fields[0].initializer as StaticGet).targetReference,
-          same(aLibrary.procedures[0].reference));
-      expect((cLibrary.fields[1].initializer as StaticGet).targetReference,
-          same(aLibrary.procedures[1].reference));
-    }
-  }
-
-  test_computeDelta_updateBody_updateApi() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    Uri aUri = writeFile(aPath, r'''
-int foo() {
-  return 1;
-}
-''');
-    Uri bUri = writeFile(bPath, r'''
-import 'a.dart';
-var f = foo;
-''');
-
-    {
-      DeltaProgram delta = await getInitialState(bUri);
-      generator.acceptLastDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [aUri, bUri]);
-      Library aLibrary = _getLibrary(program, aUri);
-      Library bLibrary = _getLibrary(program, bUri);
-      expect(_getLibraryText(aLibrary), r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method foo() → core::int {
-  return 1;
-}
-''');
-      // b.dart uses references to a.dart nodes.
-      expect((bLibrary.fields[0].initializer as StaticGet).targetReference,
-          same(aLibrary.procedures[0].reference));
-    }
-
-    // Update a body in a.dart and compile it.
-    writeFile(aPath, r'''
-int foo() {
-  return 2;
-}
-''');
-    generator.invalidate(aUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      generator.acceptLastDelta();
-      _assertCompiledUris([aUri]);
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [aUri, bUri]);
-      Library aLibrary = _getLibrary(program, aUri);
-      Library bLibrary = _getLibrary(program, bUri);
-      expect(_getLibraryText(aLibrary), r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method foo() → core::int {
-  return 2;
-}
-''');
-      // b.dart uses references to the new a.dart nodes.
-      expect((bLibrary.fields[0].initializer as StaticGet).targetReference,
-          same(aLibrary.procedures[0].reference));
-    }
-
-    // Compile a.dart and b.dart
-    writeFile(aPath, r'''
-int foo() {
-  return 2;
-}
-int bar() {
-  return 3;
-}
-''');
-    generator.invalidate(aUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      generator.acceptLastDelta();
-      _assertCompiledUris([aUri, bUri]);
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [aUri, bUri]);
-      Library aLibrary = _getLibrary(program, aUri);
-      Library bLibrary = _getLibrary(program, bUri);
-      expect(_getLibraryText(aLibrary), r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method foo() → core::int {
-  return 2;
-}
-static method bar() → core::int {
-  return 3;
-}
-''');
-      // b.dart uses references to the new a.dart nodes.
-      expect((bLibrary.fields[0].initializer as StaticGet).targetReference,
-          same(aLibrary.procedures[0].reference));
-    }
-  }
-
-  test_computeDelta_useSdkOutline() async {
-    createSdkFiles(fileSystem);
-    List<int> sdkOutlineBytes = await _computeSdkOutlineBytes();
-
-    Uri sdkOutlineUri = Uri.parse('org-dartlang-test:///sdk/outline.dill');
-    fileSystem.entityForUri(sdkOutlineUri).writeAsBytesSync(sdkOutlineBytes);
-
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    Uri aUri = writeFile(aPath, r'''
-int getValue() {
-  return 1;
-}
-''');
-    Uri bUri = writeFile(bPath, r'''
-import 'dart:async';
-import 'a.dart';
-
-var a = 1;
-Future<String> b;
-''');
-
-    DeltaProgram delta =
-        await getInitialState(bUri, sdkOutlineUri: sdkOutlineUri);
-    Program program = delta.newProgram;
-    generator.acceptLastDelta();
-    _assertLibraryUris(program,
-        includes: [bUri], excludes: [Uri.parse('dart:core')]);
-
-    Library library = _getLibrary(program, bUri);
-    expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-
-static field core::int a = 1;
-static field asy::Future<core::String> b;
-''');
-
-    // Update a.dart and recompile.
-    writeFile(aPath, r'''
-int getValue() {
-  return 2;
-}
-''');
-    generator.invalidate(aUri);
-    var deltaProgram = await generator.computeDelta();
-
-    // Check that the canonical names for SDK libraries are serializable.
-    serializeProgram(deltaProgram.newProgram,
-        filter: (library) => !library.importUri.isScheme('dart'));
-  }
-
-  test_embedSourceText_false() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String path = '/test/lib/test.dart';
-    Uri uri = writeFile(path, 'main() {}');
-
-    DeltaProgram delta = await getInitialState(uri, embedSourceText: false);
-    Program program = delta.newProgram;
-
-    // The Source object is present in the map, but is empty.
-    Source source = program.uriToSource[uri];
-    expect(source, isNotNull);
-    expect(source.source, isEmpty);
-  }
-
-  test_inferPackagesFile() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    writeFile(aPath, 'var a = 1;');
-    Uri bUri = writeFile(bPath, r'''
-import "package:test/a.dart";
-var b = a;
-''');
-
-    // Ensures that the `.packages` file can be discovered automatically
-    // from the entry point file.
-    DeltaProgram delta = await getInitialState(bUri, setPackages: false);
-    Program program = delta.newProgram;
-    Library library = _getLibrary(program, bUri);
-    expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "dart:core" as core;
-import "package:test/a.dart" as a;
-
-static field core::int b = a::a;
-''');
-  }
-
-  test_rejectLastDelta() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String path = '/test/lib/test.dart';
-    Uri uri = writeFile(path, 'var v = 1;');
-
-    // The first delta includes the library.
-    {
-      DeltaProgram delta = await getInitialState(uri);
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [uri]);
-      Library library = _getLibrary(program, uri);
-      expect(_getLibraryText(library), contains('core::int v = 1'));
-    }
-
-    // Reject the last delta, so the test library is included again.
-    generator.rejectLastDelta();
-    {
-      var delta = await generator.computeDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [uri]);
-    }
-
-    // Attempt to reject the last delta twice.
-    generator.rejectLastDelta();
-    _assertStateError(() {
-      generator.rejectLastDelta();
-    }, IncrementalKernelGeneratorImpl.MSG_NO_LAST_DELTA);
-  }
-
-  test_reset() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String path = '/test/lib/test.dart';
-    Uri uri = writeFile(path, 'var v = 1;');
-
-    // The first delta includes the the library.
-    {
-      DeltaProgram delta = await getInitialState(uri);
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [uri]);
-      Library library = _getLibrary(program, uri);
-      expect(_getLibraryText(library), contains('core::int v = 1'));
-    }
-
-    // Accept the last delta, the new delta is empty.
-    generator.acceptLastDelta();
-    {
-      var delta = await generator.computeDelta();
-      expect(delta.newProgram.libraries, isEmpty);
-    }
-
-    // Reset the generator, so it will resend the whole program.
-    generator.reset();
-    {
-      var delta = await generator.computeDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [uri]);
-    }
-  }
-
-  test_setState() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    Uri aUri = writeFile(aPath, 'var a = 1;');
-    Uri bUri = writeFile(bPath, r'''
-var b = 1;
-''');
-    Uri cUri = writeFile(cPath, r'''
-import 'a.dart';
-import 'b.dart';
-var c1 = a;
-var c2 = b;
-''');
-
-    String initialState;
-    {
-      DeltaProgram delta = await getInitialState(cUri);
-      Program program = delta.newProgram;
-      generator.acceptLastDelta();
-      _assertLibraryUris(program,
-          includes: [aUri, bUri, cUri, Uri.parse('dart:core')]);
-      initialState = delta.state;
-    }
-
-    // Update a.dart, don't notify the old generator - we throw it away.
-    writeFile(aPath, 'var a = 1.2');
-
-    // Create a new generator with the initial state.
-    var delta = await getInitialState(cUri, initialState: initialState);
-
-    // Only a.dart and c.dart are in the delta.
-    // The state of b.dart is the same as in the initial state.
-    _assertLibraryUris(delta.newProgram,
-        includes: [aUri, cUri], excludes: [bUri, Uri.parse('dart:core')]);
-  }
-
-  test_updateEntryPoint() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String path = '/test/lib/test.dart';
-    Uri uri = writeFile(path, r'''
-main() {
-  var v = 1;
-}
-''');
-
-    String initialText = r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method main() → dynamic {
-  core::int v = 1;
-}
-''';
-
-    // Compute the initial state.
-    {
-      DeltaProgram delta = await getInitialState(uri);
-      Program program = delta.newProgram;
-      generator.acceptLastDelta();
-      Library library = _getLibrary(program, uri);
-      expect(_getLibraryText(library), initialText);
-    }
-
-    // Update the entry point library.
-    writeFile(path, r'''
-main() {
-  var v = 2.3;
-}
-''');
-
-    // We have not invalidated the file, so the delta is empty.
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      generator.acceptLastDelta();
-      expect(delta.newProgram.libraries, isEmpty);
-    }
-
-    // Invalidate the file, so get the new text.
-    generator.invalidate(uri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      generator.acceptLastDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [uri]);
-      Library library = _getLibrary(program, uri);
-      expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method main() → dynamic {
-  core::double v = 2.3;
-}
-''');
-    }
-  }
-
-  test_watch() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    Uri aUri = writeFile(aPath, '');
-    Uri bUri = writeFile(bPath, '');
-    Uri cUri = writeFile(cPath, r'''
-import 'a.dart';
-''');
-
-    var usedFiles = <Uri>[];
-    var unusedFiles = <Uri>[];
-    watchFn = (Uri uri, bool used) {
-      if (used) {
-        usedFiles.add(uri);
-      } else {
-        unusedFiles.add(uri);
-      }
-      return new Future.value();
-    };
-
-    {
-      await getInitialState(cUri);
-      generator.acceptLastDelta();
-      // We use at least c.dart and a.dart now.
-      expect(usedFiles, contains(cUri));
-      expect(usedFiles, contains(aUri));
-      usedFiles.clear();
-      expect(unusedFiles, isEmpty);
-    }
-
-    // Update c.dart to reference also b.dart file.
-    writeFile(cPath, r'''
-import 'a.dart';
-import 'b.dart';
-''');
-    generator.invalidate(cUri);
-    {
-      await generator.computeDelta();
-      generator.acceptLastDelta();
-      // The only new file is b.dart now.
-      expect(usedFiles, [bUri]);
-      usedFiles.clear();
-      expect(unusedFiles, isEmpty);
-    }
-
-    // Update c.dart to stop referencing b.dart file.
-    writeFile(cPath, r'''
-import 'a.dart';
-''');
-    generator.invalidate(cUri);
-    {
-      await generator.computeDelta();
-      generator.acceptLastDelta();
-      // No new used files.
-      expect(usedFiles, isEmpty);
-      // The file b.dart is not used anymore.
-      expect(unusedFiles, [bUri]);
-      unusedFiles.clear();
-    }
-  }
-
-  test_watch_null() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    writeFile(aPath, "");
-    Uri bUri = writeFile(bPath, "");
-
-    // Set null, as if the watch function is not provided.
-    watchFn = null;
-
-    await getInitialState(bUri);
-    generator.acceptLastDelta();
-
-    // Update b.dart to import a.dart file.
-    writeFile(bPath, "import 'a.dart';");
-    generator.invalidate(bUri);
-    await generator.computeDelta();
-
-    // No exception even though the watcher function is null.
-  }
-
-  /// Write the given [text] of the file with the given [path] into the
-  /// virtual filesystem.  Return the URI of the file.
-  Uri writeFile(String path, String text) {
-    Uri uri = Uri.parse('org-dartlang-test://$path');
-    fileSystem.entityForUri(uri).writeAsStringSync(text);
-    return uri;
-  }
-
-  /// Write the given file contents to the virtual filesystem.
-  void writeFiles(Map<String, String> contents) {
-    contents.forEach(writeFile);
-  }
-
-  void _assertCompiledUris(Iterable<Uri> expected) {
-    Set<Uri> compiledUris = generator.test.compiledUris;
-    expect(compiledUris, unorderedEquals(expected));
-  }
-
-  void _assertLibraryUris(Program program,
-      {List<Uri> includes: const [], List<Uri> excludes: const []}) {
-    List<Uri> libraryUris =
-        program.libraries.map((library) => library.importUri).toList();
-    for (var shouldInclude in includes) {
-      expect(libraryUris, contains(shouldInclude));
-      var shouldIncludeFileUri = _resolveUriToFileUri(shouldInclude);
-      expect(program.uriToSource.keys, contains(shouldIncludeFileUri));
-    }
-    for (var shouldExclude in excludes) {
-      expect(libraryUris, isNot(contains(shouldExclude)));
-      var shouldExcludeFileUri = _resolveUriToFileUri(shouldExclude);
-      expect(program.uriToSource.keys, isNot(contains(shouldExcludeFileUri)));
-    }
-  }
-
-  /// Assert that invocation of [f] throws a [StateError] with the given [msg].
-  void _assertStateError(f(), String msg) {
-    try {
-      f();
-      fail('StateError expected.');
-    } on StateError catch (e) {
-      expect(e.message, msg);
-    }
-  }
-
-  Future<List<int>> _computeSdkOutlineBytes() async {
-    var options = new CompilerOptions()
-      ..fileSystem = fileSystem
-      ..sdkRoot = Uri.parse('org-dartlang-test:///sdk/')
-      ..compileSdk = true
-      ..chaseDependencies = true
-      ..strongMode = true;
-    var inputs = [Uri.parse('dart:core')];
-    return summaryFor(inputs, options);
-  }
-
-  Library _getLibrary(Program program, Uri uri) {
-    for (var library in program.libraries) {
-      if (library.importUri == uri) return library;
-    }
-    throw fail('No library found with URI "$uri"');
-  }
-
-  String _getLibraryText(Library library) {
-    StringBuffer buffer = new StringBuffer();
-    new Printer(buffer, syntheticNames: new NameSystem())
-        .writeLibraryFile(library);
-    return buffer.toString();
-  }
-
-  /// Resolve the given `dart` or `package` [inputUri] into the corresponding
-  /// file URI, or return the same URI if it is already a file URI.
-  Uri _resolveUriToFileUri(Uri inputUri) {
-    var translator = generator.uriTranslator;
-    var outputUri = translator.translate(inputUri) ?? inputUri;
-    return outputUri;
-  }
-
-  static Procedure _getMainProcedure(Library library) => library.procedures
-      .singleWhere((procedure) => procedure.name.name == 'main');
-}
diff --git a/pkg/front_end/test/kernel_generator_test.dart b/pkg/front_end/test/kernel_generator_test.dart
index f478b62..ee8b9a0 100644
--- a/pkg/front_end/test/kernel_generator_test.dart
+++ b/pkg/front_end/test/kernel_generator_test.dart
@@ -2,15 +2,41 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:front_end/src/api_prototype/front_end.dart';
-import 'package:front_end/src/fasta/fasta_codes.dart';
-import 'package:front_end/src/fasta/kernel/utils.dart';
+import 'package:kernel/ast.dart'
+    show EmptyStatement, Program, ReturnStatement, StaticInvocation;
+
+import 'package:test/test.dart'
+    show
+        contains,
+        expect,
+        greaterThan,
+        group,
+        isEmpty,
+        isFalse,
+        isNotEmpty,
+        isNotNull,
+        isNull,
+        isTrue,
+        same,
+        test;
+
+import 'package:front_end/src/api_prototype/front_end.dart'
+    show CompilerOptions;
+
 import 'package:front_end/src/fasta/deprecated_problems.dart'
     show deprecated_InputError;
-import 'package:front_end/src/testing/compiler_common.dart';
-import 'package:kernel/ast.dart';
 
-import 'package:test/test.dart';
+import 'package:front_end/src/fasta/fasta_codes.dart' show messageMissingMain;
+
+import 'package:front_end/src/fasta/kernel/utils.dart' show serializeProgram;
+
+import 'package:front_end/src/testing/compiler_common.dart'
+    show
+        compileScript,
+        compileUnit,
+        findLibrary,
+        invalidCoreLibsSpecUri,
+        isDartCoreLibrary;
 
 main() {
   group('kernelForProgram', () {
diff --git a/pkg/front_end/test/minimal_incremental_kernel_generator_test.dart b/pkg/front_end/test/minimal_incremental_kernel_generator_test.dart
deleted file mode 100644
index da533ed..0000000
--- a/pkg/front_end/test/minimal_incremental_kernel_generator_test.dart
+++ /dev/null
@@ -1,698 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:async';
-
-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/incremental_kernel_generator.dart';
-import 'package:front_end/src/api_prototype/memory_file_system.dart';
-import 'package:front_end/src/fasta/kernel/utils.dart';
-import 'package:front_end/src/incremental_kernel_generator_impl.dart';
-import 'package:front_end/src/minimal_incremental_kernel_generator.dart';
-import 'package:front_end/src/api_prototype/summary_generator.dart';
-import 'package:kernel/ast.dart';
-import 'package:kernel/text/ast_to_text.dart';
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'src/incremental/mock_sdk.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(IncrementalKernelGeneratorTest);
-  });
-}
-
-@reflectiveTest
-class IncrementalKernelGeneratorTest {
-  /// Virtual filesystem for testing.
-  final fileSystem = new MemoryFileSystem(Uri.parse('org-dartlang-test:///'));
-
-  /// The used file watcher.
-  WatchUsedFilesFn watchFn = (uri, used) {};
-
-  /// The object under test.
-  MinimalIncrementalKernelGenerator generator;
-
-  /// Compute the initial [Program] for the given [entryPoint].
-  Future<DeltaProgram> getInitialState(Uri entryPoint,
-      {Uri sdkOutlineUri,
-      bool setPackages: true,
-      bool embedSourceText: true,
-      String initialState,
-      ByteStore byteStore}) async {
-    createSdkFiles(fileSystem);
-
-    var compilerOptions = new CompilerOptions()
-      ..fileSystem = fileSystem
-      ..byteStore = byteStore ?? new MemoryByteStore()
-//      ..logger = new PerformanceLog(stdout)
-      ..strongMode = true
-      ..chaseDependencies = true
-      ..librariesSpecificationUri =
-          Uri.parse('org-dartlang-test:///sdk/lib/libraries.json')
-      ..sdkSummary = sdkOutlineUri
-      ..embedSourceText = embedSourceText;
-
-    if (setPackages) {
-      compilerOptions.packagesFileUri =
-          Uri.parse('org-dartlang-test:///test/.packages');
-    }
-
-    generator = await IncrementalKernelGenerator.newInstance(
-        compilerOptions, entryPoint,
-        watch: watchFn, useMinimalGenerator: true);
-
-    if (initialState != null) {
-      generator.setState(initialState);
-    }
-
-    return await generator.computeDelta();
-  }
-
-  test_acceptLastDelta() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String path = '/test/lib/test.dart';
-    Uri uri = writeFile(path, '');
-
-    await getInitialState(uri);
-    generator.acceptLastDelta();
-
-    // Attempt to accept the second time.
-    _assertStateError(() {
-      generator.acceptLastDelta();
-    }, IncrementalKernelGeneratorImpl.MSG_NO_LAST_DELTA);
-  }
-
-  test_compile_chain() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    Uri aUri = writeFile(aPath, 'var a = 1;');
-    Uri bUri = writeFile(bPath, r'''
-import 'a.dart';
-var b = a;
-''');
-    Uri cUri = writeFile(cPath, r'''
-import 'a.dart';
-import 'b.dart';
-var c1 = a;
-var c2 = b;
-void main() {}
-''');
-
-    {
-      DeltaProgram delta = await getInitialState(cUri);
-      Program program = delta.newProgram;
-      generator.acceptLastDelta();
-      _assertLibraryUris(program,
-          includes: [aUri, bUri, cUri, Uri.parse('dart:core')]);
-      Library library = _getLibrary(program, cUri);
-      expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "dart:core" as core;
-import "./a.dart" as a;
-import "./b.dart" as b;
-
-static field core::int c1 = a::a;
-static field core::int c2 = b::b;
-static method main() → void {}
-''');
-      // The main method is set.
-      expect(program.mainMethod, isNotNull);
-      expect(program.mainMethod.enclosingLibrary.fileUri, cUri);
-    }
-
-    // Update b.dart and recompile c.dart
-    writeFile(bPath, r'''
-import 'a.dart';
-var b = 1.2;
-''');
-    generator.invalidate(bUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program,
-          includes: [bUri, cUri], excludes: [aUri, Uri.parse('dart:core')]);
-      Library library = _getLibrary(program, cUri);
-      expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "dart:core" as core;
-import "./a.dart" as a;
-import "./b.dart" as b;
-
-static field core::int c1 = a::a;
-static field core::double c2 = b::b;
-static method main() → void {}
-''');
-      // The main method is set even though not the entry point is updated.
-      expect(program.mainMethod, isNotNull);
-      expect(program.mainMethod.enclosingLibrary.fileUri, cUri);
-    }
-  }
-
-  test_compile_includePathToMain() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    String dPath = '/test/lib/d.dart';
-
-    // A --> B -> C
-    //   \-> D
-
-    Uri aUri = writeFile(aPath, r'''
-import 'b.dart';
-import 'd.dart';
-main() {
-  b();
-  d();
-}
-''');
-    Uri bUri = writeFile(bPath, r'''
-import 'c.dart';
-b() {
-  c();
-}
-''');
-    Uri cUri = writeFile(cPath, 'c() { print(0); }');
-    Uri dUri = writeFile(dPath, 'd() {}');
-
-    {
-      DeltaProgram delta = await getInitialState(aUri);
-      Program program = delta.newProgram;
-      generator.acceptLastDelta();
-      _assertLibraryUris(program,
-          includes: [aUri, bUri, cUri, dUri, Uri.parse('dart:core')]);
-    }
-
-    // Update c.dart and compute the delta.
-    // It should include the changed c.dart, plus b.dart and a.dart because VM
-    // requires this (because of possible inlining). But d.dart is not on the
-    // path from main() to the changed c.dart, so it is not included.
-    writeFile(cPath, 'c() { print(1); }');
-    generator.invalidate(cUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      generator.acceptLastDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program,
-          includes: [aUri, bUri, cUri],
-          excludes: [dUri, Uri.parse('dart:core')]);
-      // This implementation of IKG invalidates all dirty files.
-      // So, when c.dart is invalidated, a.dart and b.dart also compiled.
-      _assertCompiledUris([aUri, bUri, cUri]);
-    }
-  }
-
-  test_compile_parts() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    Uri aUri = writeFile(aPath, r'''
-library lib;
-part 'b.dart';
-''');
-    Uri bUri = writeFile(bPath, r'''
-part of lib;
-''');
-
-    DeltaProgram delta = await getInitialState(aUri);
-    Program program = delta.newProgram;
-
-    // Sources for library and its part must be present.
-    expect(program.uriToSource.keys, contains(aUri));
-    expect(program.uriToSource.keys, contains(bUri));
-  }
-
-  test_compile_update_part() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    Uri aUri = writeFile(aPath, r'''
-library lib;
-part 'b.dart';
-''');
-    Uri bUri = writeFile(bPath, r'''
-part of lib;
-var b = 1;
-''');
-    Uri cUri = writeFile(cPath, r'''
-import 'a.dart';
-''');
-
-    {
-      DeltaProgram delta = await getInitialState(cUri);
-      generator.acceptLastDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program,
-          includes: [aUri, cUri, Uri.parse('dart:core')]);
-      expect(generator.test.compiledUris, contains(aUri));
-      expect(generator.test.compiledUris, contains(cUri));
-    }
-
-    // Update b.dart (which is a part) and recompile.
-    // Both libraries a.dart and c.dart are recompiled.
-    writeFile(bPath, r'''
-part of lib;
-var b = 1.2;
-''');
-    generator.invalidate(bUri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      _assertCompiledUris([aUri, cUri]);
-      Program program = delta.newProgram;
-      // a.dart and c.dart are included as libraries.
-      // b.dart is excluded because it is not a library.
-      // All a.dart, b.dart, and c.dart are included in sources.
-      _assertLibraryUris(program,
-          includes: [aUri, cUri],
-          includesSource: [aUri, bUri, cUri],
-          excludes: [bUri, Uri.parse('dart:core')],
-          excludesSource: [Uri.parse('dart:core')]);
-    }
-  }
-
-  test_compile_useSdkOutline() async {
-    createSdkFiles(fileSystem);
-    List<int> sdkOutlineBytes = await _computeSdkOutlineBytes();
-
-    Uri sdkOutlineUri = Uri.parse('org-dartlang-test:///sdk/outline.dill');
-    fileSystem.entityForUri(sdkOutlineUri).writeAsBytesSync(sdkOutlineBytes);
-
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    Uri aUri = writeFile(aPath, r'''
-int getValue() {
-  return 1;
-}
-''');
-    Uri bUri = writeFile(bPath, r'''
-import 'dart:async';
-import 'a.dart';
-
-var a = 1;
-Future<String> b;
-''');
-
-    DeltaProgram delta =
-        await getInitialState(bUri, sdkOutlineUri: sdkOutlineUri);
-    Program program = delta.newProgram;
-    generator.acceptLastDelta();
-    _assertLibraryUris(program,
-        includes: [bUri], excludes: [Uri.parse('dart:core')]);
-
-    Library library = _getLibrary(program, bUri);
-    expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-
-static field core::int a = 1;
-static field asy::Future<core::String> b;
-''');
-
-    // Update a.dart and recompile.
-    writeFile(aPath, r'''
-int getValue() {
-  return 2;
-}
-''');
-    generator.invalidate(aUri);
-    var deltaProgram = await generator.computeDelta();
-
-    // Check that the canonical names for SDK libraries are serializable.
-    serializeProgram(deltaProgram.newProgram,
-        filter: (library) => !library.importUri.isScheme('dart'));
-  }
-
-  test_computeDelta_hasAnotherRunning() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String path = '/test/lib/test.dart';
-    Uri uri = writeFile(path, '');
-
-    await getInitialState(uri);
-    generator.acceptLastDelta();
-
-    // Run, but don't wait.
-    var future = generator.computeDelta();
-
-    // acceptLastDelta() is failing while the future is pending.
-    _assertStateError(() {
-      generator.acceptLastDelta();
-    }, IncrementalKernelGeneratorImpl.MSG_PENDING_COMPUTE);
-
-    // rejectLastDelta() is failing while the future is pending.
-    _assertStateError(() {
-      generator.rejectLastDelta();
-    }, IncrementalKernelGeneratorImpl.MSG_PENDING_COMPUTE);
-
-    // Run another, this causes StateError.
-    _assertStateError(() {
-      generator.computeDelta();
-    }, IncrementalKernelGeneratorImpl.MSG_PENDING_COMPUTE);
-
-    // Wait for the pending future.
-    await future;
-  }
-
-  test_embedSourceText_false() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String path = '/test/lib/test.dart';
-    Uri uri = writeFile(path, 'main() {}');
-
-    DeltaProgram delta = await getInitialState(uri, embedSourceText: false);
-    Program program = delta.newProgram;
-
-    // The Source object is present in the map, but is empty.
-    Source source = program.uriToSource[uri];
-    expect(source, isNotNull);
-    expect(source.source, isEmpty);
-  }
-
-  test_inferPackagesFile() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    writeFile(aPath, 'var a = 1;');
-    Uri bUri = writeFile(bPath, r'''
-import "package:test/a.dart";
-var b = a;
-''');
-
-    // Ensures that the `.packages` file can be discovered automatically
-    // from the entry point file.
-    DeltaProgram delta = await getInitialState(bUri, setPackages: false);
-    Program program = delta.newProgram;
-    Library library = _getLibrary(program, bUri);
-    expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "dart:core" as core;
-import "package:test/a.dart" as a;
-
-static field core::int b = a::a;
-''');
-  }
-
-  test_rejectLastDelta() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String path = '/test/lib/test.dart';
-    Uri uri = writeFile(path, 'var v = 1;');
-
-    // The first delta includes the the library.
-    {
-      DeltaProgram delta = await getInitialState(uri);
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [uri]);
-      Library library = _getLibrary(program, uri);
-      expect(_getLibraryText(library), contains('core::int v = 1'));
-    }
-
-    // Reject the last delta, so the test library is included again.
-    generator.rejectLastDelta();
-    {
-      var delta = await generator.computeDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [uri]);
-    }
-
-    // Attempt to reject the last delta twice.
-    generator.rejectLastDelta();
-    _assertStateError(() {
-      generator.rejectLastDelta();
-    }, IncrementalKernelGeneratorImpl.MSG_NO_LAST_DELTA);
-  }
-
-  test_reset() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String path = '/test/lib/test.dart';
-    Uri uri = writeFile(path, 'var v = 1;');
-
-    // The first delta includes the the library.
-    {
-      DeltaProgram delta = await getInitialState(uri);
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [uri]);
-      Library library = _getLibrary(program, uri);
-      expect(_getLibraryText(library), contains('core::int v = 1'));
-    }
-
-    // Accept the last delta, the new delta is empty.
-    generator.acceptLastDelta();
-    {
-      var delta = await generator.computeDelta();
-      expect(delta.newProgram.libraries, isEmpty);
-    }
-
-    // Reset the generator, so it will resend the whole program.
-    generator.reset();
-    {
-      var delta = await generator.computeDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [uri]);
-    }
-  }
-
-  test_updateEntryPoint() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String path = '/test/lib/test.dart';
-    Uri uri = writeFile(path, r'''
-main() {
-  var v = 1;
-}
-''');
-
-    String initialText = r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method main() → dynamic {
-  core::int v = 1;
-}
-''';
-
-    // Compute the initial state.
-    {
-      DeltaProgram delta = await getInitialState(uri);
-      Program program = delta.newProgram;
-      generator.acceptLastDelta();
-      Library library = _getLibrary(program, uri);
-      expect(_getLibraryText(library), initialText);
-    }
-
-    // Update the entry point library.
-    writeFile(path, r'''
-main() {
-  var v = 2.3;
-}
-''');
-
-    // We have not invalidated the file, so the delta is empty.
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      generator.acceptLastDelta();
-      expect(delta.newProgram.libraries, isEmpty);
-    }
-
-    // Invalidate the file, so get the new text.
-    generator.invalidate(uri);
-    {
-      DeltaProgram delta = await generator.computeDelta();
-      generator.acceptLastDelta();
-      Program program = delta.newProgram;
-      _assertLibraryUris(program, includes: [uri]);
-      Library library = _getLibrary(program, uri);
-      expect(_getLibraryText(library), r'''
-library;
-import self as self;
-import "dart:core" as core;
-
-static method main() → dynamic {
-  core::double v = 2.3;
-}
-''');
-    }
-  }
-
-  test_watch() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    String cPath = '/test/lib/c.dart';
-    Uri aUri = writeFile(aPath, '');
-    Uri bUri = writeFile(bPath, '');
-    Uri cUri = writeFile(cPath, r'''
-import 'a.dart';
-''');
-
-    var usedFiles = <Uri>[];
-    var unusedFiles = <Uri>[];
-    watchFn = (Uri uri, bool used) {
-      if (used) {
-        usedFiles.add(uri);
-      } else {
-        unusedFiles.add(uri);
-      }
-      return new Future.value();
-    };
-
-    {
-      await getInitialState(cUri);
-      generator.acceptLastDelta();
-      // We use at least c.dart and a.dart now.
-      expect(usedFiles, contains(cUri));
-      expect(usedFiles, contains(aUri));
-      usedFiles.clear();
-      expect(unusedFiles, isEmpty);
-    }
-
-    // Update c.dart to reference also b.dart file.
-    writeFile(cPath, r'''
-import 'a.dart';
-import 'b.dart';
-''');
-    generator.invalidate(cUri);
-    {
-      await generator.computeDelta();
-      generator.acceptLastDelta();
-      // The only new file is b.dart now.
-      expect(usedFiles, [bUri]);
-      usedFiles.clear();
-      expect(unusedFiles, isEmpty);
-    }
-
-    // Update c.dart to stop referencing b.dart file.
-    writeFile(cPath, r'''
-import 'a.dart';
-''');
-    generator.invalidate(cUri);
-    {
-      await generator.computeDelta();
-      generator.acceptLastDelta();
-      // No new used files.
-      expect(usedFiles, isEmpty);
-      // The file b.dart is not used anymore.
-      expect(unusedFiles, [bUri]);
-      unusedFiles.clear();
-    }
-  }
-
-  test_watch_null() async {
-    writeFile('/test/.packages', 'test:lib/');
-    String aPath = '/test/lib/a.dart';
-    String bPath = '/test/lib/b.dart';
-    writeFile(aPath, "");
-    Uri bUri = writeFile(bPath, "");
-
-    // Set null, as if the watch function is not provided.
-    watchFn = null;
-
-    await getInitialState(bUri);
-    generator.acceptLastDelta();
-
-    // Update b.dart to import a.dart file.
-    writeFile(bPath, "import 'a.dart';");
-    generator.invalidate(bUri);
-    await generator.computeDelta();
-
-    // No exception even though the watcher function is null.
-  }
-
-  /// Write the given [text] of the file with the given [path] into the
-  /// virtual filesystem.  Return the URI of the file.
-  Uri writeFile(String path, String text) {
-    Uri uri = Uri.parse('org-dartlang-test://$path');
-    fileSystem.entityForUri(uri).writeAsStringSync(text);
-    return uri;
-  }
-
-  /// Write the given file contents to the virtual filesystem.
-  void writeFiles(Map<String, String> contents) {
-    contents.forEach(writeFile);
-  }
-
-  void _assertCompiledUris(Iterable<Uri> expected) {
-    Set<Uri> compiledUris = generator.test.compiledUris;
-    expect(compiledUris, unorderedEquals(expected));
-  }
-
-  void _assertLibraryUris(Program program,
-      {List<Uri> includes: const [],
-      List<Uri> includesSource,
-      List<Uri> excludes: const [],
-      List<Uri> excludesSource}) {
-    List<Uri> libraryUris =
-        program.libraries.map((library) => library.importUri).toList();
-
-    for (var shouldInclude in includes) {
-      expect(libraryUris, contains(shouldInclude));
-    }
-    includesSource ??= includes;
-    for (var shouldInclude in includes) {
-      var shouldIncludeFileUri = _resolveUriToFileUri(shouldInclude);
-      expect(program.uriToSource.keys, contains(shouldIncludeFileUri));
-    }
-
-    for (var shouldExclude in excludes) {
-      expect(libraryUris, isNot(contains(shouldExclude)));
-    }
-    excludesSource ??= excludes;
-    for (var shouldExclude in excludesSource) {
-      var shouldExcludeFileUri = _resolveUriToFileUri(shouldExclude);
-      expect(program.uriToSource.keys, isNot(contains(shouldExcludeFileUri)));
-    }
-  }
-
-  /// Assert that invocation of [f] throws a [StateError] with the given [msg].
-  void _assertStateError(f(), String msg) {
-    try {
-      f();
-      fail('StateError expected.');
-    } on StateError catch (e) {
-      expect(e.message, msg);
-    }
-  }
-
-  Future<List<int>> _computeSdkOutlineBytes() async {
-    var options = new CompilerOptions()
-      ..fileSystem = fileSystem
-      ..sdkRoot = Uri.parse('org-dartlang-test:///sdk/')
-      ..compileSdk = true
-      ..chaseDependencies = true
-      ..strongMode = true;
-    var inputs = [Uri.parse('dart:core')];
-    return summaryFor(inputs, options);
-  }
-
-  Library _getLibrary(Program program, Uri uri) {
-    for (var library in program.libraries) {
-      if (library.importUri == uri) return library;
-    }
-    throw fail('No library found with URI "$uri"');
-  }
-
-  String _getLibraryText(Library library) {
-    StringBuffer buffer = new StringBuffer();
-    new Printer(buffer, syntheticNames: new NameSystem())
-        .writeLibraryFile(library);
-    return buffer.toString();
-  }
-
-  /// Resolve the given `dart` or `package` [inputUri] into the corresponding
-  /// file URI, or return the same URI if it is already a file URI.
-  Uri _resolveUriToFileUri(Uri inputUri) {
-    var translator = generator.uriTranslator;
-    var outputUri = translator.translate(inputUri) ?? inputUri;
-    return outputUri;
-  }
-}
diff --git a/pkg/front_end/test/src/incremental/combine_test.dart b/pkg/front_end/test/src/incremental/combine_test.dart
deleted file mode 100644
index 9a9b19b..0000000
--- a/pkg/front_end/test/src/incremental/combine_test.dart
+++ /dev/null
@@ -1,1932 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:front_end/src/incremental/combine.dart';
-import 'package:kernel/ast.dart';
-import 'package:kernel/core_types.dart';
-import 'package:kernel/testing/mock_sdk_program.dart';
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(CombineTest);
-  });
-}
-
-@reflectiveTest
-class CombineTest {
-  Program sdk;
-  CoreTypes coreTypes;
-
-  Supertype get objectSuper => coreTypes.objectClass.asThisSupertype;
-
-  void setUp() {
-    sdk = createMockSdkProgram();
-    coreTypes = new CoreTypes(sdk);
-  }
-
-  void test_class_mergeLibrary_appendClass() {
-    var libraryA1 = _newLibrary('a');
-    libraryA1.addClass(new Class(name: 'A', supertype: objectSuper));
-
-    var libraryA2 = _newLibrary('a');
-    libraryA2.addClass(new Class(name: 'B', supertype: objectSuper));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-
-      var classA = _getClass(libraryA, 'A');
-      expect(classA.members, isEmpty);
-
-      var classB = _getClass(libraryA, 'B');
-      expect(classB.members, isEmpty);
-    });
-  }
-
-  /// We test two cases of class declarations:
-  ///   * When a class to merge is first time declared in the first library;
-  ///   * When a class to merge is first time declared in the second library.
-  ///
-  /// With two cases of constructor declarations:
-  ///   * Already defined, so references to it should be rewritten.
-  ///   * First defined in this outline, so references to it can be kept as is.
-  ///
-  /// For each case we validate [DirectMethodInvocation], [MethodInvocation],
-  /// and [SuperMethodInvocation].
-  void test_class_procedure_constructor() {
-    var nodeToName = <NamedNode, String>{};
-
-    var library1 = _newLibrary('test');
-    var constructorA11 = _newConstructor('a1');
-    var classA1 = new Class(
-        name: 'A', supertype: objectSuper, constructors: [constructorA11]);
-    library1.addClass(classA1);
-    nodeToName[classA1] = 'A1';
-    nodeToName[constructorA11] = 'A11';
-
-    var library2 = _newLibrary('test');
-    var constructorA12 = _newConstructor('a1');
-    var constructorA22 = _newConstructor('a2');
-    var constructorB11 = _newConstructor('b1');
-    var classA2 = new Class(
-        name: 'A',
-        supertype: objectSuper,
-        constructors: [constructorA12, constructorA22]);
-    library2.addClass(classA2);
-    var classB1 = new Class(
-        name: 'B', supertype: objectSuper, constructors: [constructorB11]);
-    library2.addClass(classB1);
-    // Use 'A.a1' and 'A.a2' to validate later how they are rewritten.
-    library2.addProcedure(_newExpressionsProcedure([
-      new ConstructorInvocation(constructorA12, new Arguments.empty()),
-      new ConstructorInvocation(constructorA22, new Arguments.empty()),
-    ], name: 'main2'));
-    library2.addClass(new Class(
-        name: 'S1',
-        supertype: classA2.asThisSupertype,
-        constructors: [
-          new Constructor(new FunctionNode(new EmptyStatement()),
-              name: new Name('c1'),
-              initializers: [
-                new SuperInitializer(constructorA12, new Arguments.empty()),
-                new SuperInitializer(constructorA22, new Arguments.empty()),
-              ]),
-          new Constructor(new FunctionNode(new EmptyStatement()),
-              name: new Name('c2'),
-              initializers: [
-                new RedirectingInitializer(
-                    constructorA12, new Arguments.empty()),
-                new RedirectingInitializer(
-                    constructorA22, new Arguments.empty()),
-              ]),
-        ]));
-    nodeToName[classA2] = 'A2';
-    nodeToName[constructorA12] = 'A12';
-    nodeToName[constructorA22] = 'A22';
-    nodeToName[constructorB11] = 'B11';
-    nodeToName[classB1] = 'B1';
-    nodeToName[constructorB11] = 'B11';
-
-    var library3 = _newLibrary('test');
-    var constructorB12 = _newConstructor('b1');
-    var constructorB22 = _newConstructor('b2');
-    var classB2 = new Class(
-        name: 'B',
-        supertype: objectSuper,
-        constructors: [constructorB12, constructorB22]);
-    library3.addClass(classB2);
-    library3.addProcedure(_newExpressionsProcedure([
-      new ConstructorInvocation(constructorB12, new Arguments.empty()),
-      new ConstructorInvocation(constructorB22, new Arguments.empty()),
-    ], name: 'main3'));
-    library3.addClass(new Class(
-        name: 'S2',
-        supertype: classB2.asThisSupertype,
-        constructors: [
-          new Constructor(new FunctionNode(new EmptyStatement()),
-              name: new Name('c1'),
-              initializers: [
-                new SuperInitializer(constructorB12, new Arguments.empty()),
-                new SuperInitializer(constructorB22, new Arguments.empty()),
-              ]),
-          new Constructor(new FunctionNode(new EmptyStatement()),
-              name: new Name('c2'),
-              initializers: [
-                new RedirectingInitializer(
-                    constructorB12, new Arguments.empty()),
-                new RedirectingInitializer(
-                    constructorB22, new Arguments.empty()),
-              ]),
-        ]));
-    nodeToName[classB2] = 'B2';
-    nodeToName[constructorB12] = 'B12';
-    nodeToName[constructorB22] = 'B22';
-
-    var outline1 = _newOutline([library1]);
-    var outline2 = _newOutline([library2]);
-    var outline3 = _newOutline([library3]);
-
-    expect(_getLibraryText(library1, nodeToName), r'''
-class A[A1] {
-  constructor a1[A11]();
-}
-''');
-    expect(_getLibraryText(library2, nodeToName), r'''
-class A[A2] {
-  constructor a1[A12]();
-  constructor a2[A22]();
-}
-class B[B1] {
-  constructor b1[B11]();
-}
-class S1 extends A[A2] {
-  constructor c1() :
-      super[A12](),
-      super[A22]();
-  constructor c2() :
-      redirect[A12](),
-      redirect[A22]();
-}
-main2() {
-  ConstructorInvocation[A12]();
-  ConstructorInvocation[A22]();
-}
-''');
-    expect(_getLibraryText(library3, nodeToName), r'''
-class B[B2] {
-  constructor b1[B12]();
-  constructor b2[B22]();
-}
-class S2 extends B[B2] {
-  constructor c1() :
-      super[B12](),
-      super[B22]();
-  constructor c2() :
-      redirect[B12](),
-      redirect[B22]();
-}
-main3() {
-  ConstructorInvocation[B12]();
-  ConstructorInvocation[B22]();
-}
-''');
-
-    _runCombineTest([outline1, outline2, outline3], (result) {
-      var library = _getLibrary(result.program, 'test');
-      expect(_getLibraryText(library, nodeToName), r'''
-class A[A1] {
-  constructor a1[A11]();
-  constructor a2[A22]();
-}
-class B[B1] {
-  constructor b1[B11]();
-  constructor b2[B22]();
-}
-class S1 extends A[A1] {
-  constructor c1() :
-      super[A11](),
-      super[A22]();
-  constructor c2() :
-      redirect[A11](),
-      redirect[A22]();
-}
-class S2 extends B[B1] {
-  constructor c1() :
-      super[B11](),
-      super[B22]();
-  constructor c2() :
-      redirect[B11](),
-      redirect[B22]();
-}
-main2() {
-  ConstructorInvocation[A11]();
-  ConstructorInvocation[A22]();
-}
-main3() {
-  ConstructorInvocation[B11]();
-  ConstructorInvocation[B22]();
-}
-''');
-    });
-  }
-
-  /// We test two cases of class declarations:
-  ///   * When a class to merge is first time declared in the first library;
-  ///   * When a class to merge is first time declared in the second library.
-  ///
-  /// With two cases of field declarations:
-  ///   * Already defined, so references to it should be rewritten.
-  ///   * First defined in this outline, so references to it can be kept as is.
-  ///
-  /// For each case we validate [DirectPropertyGet], [DirectPropertySet],
-  /// [PropertyGet], [PropertySet], [SuperPropertyGet], and [SuperPropertySet].
-  void test_class_procedure_field() {
-    var nodeToName = <NamedNode, String>{};
-
-    var library1 = _newLibrary('test');
-    var fieldA11 = _newField('a1');
-    var classA1 =
-        new Class(name: 'A', supertype: objectSuper, fields: [fieldA11]);
-    library1.addClass(classA1);
-    nodeToName[classA1] = 'A1';
-    nodeToName[fieldA11] = 'a11';
-
-    var library2 = _newLibrary('test');
-    var fieldA12 = _newField('a1');
-    var fieldA22 = _newField('a2');
-    var fieldB11 = _newField('b1');
-    var classA2 = new Class(
-        name: 'A', supertype: objectSuper, fields: [fieldA12, fieldA22]);
-    library2.addClass(classA2);
-    var classB1 =
-        new Class(name: 'B', supertype: objectSuper, fields: [fieldB11]);
-    library2.addClass(classB1);
-    // Use 'A.a1' and 'A.a2' to validate later how they are rewritten.
-    library2.addProcedure(_newExpressionsProcedure([
-      new DirectPropertyGet(null, fieldA12),
-      new PropertyGet(null, null, fieldA12),
-      new DirectPropertySet(null, fieldA12, null),
-      new PropertySet(null, null, null, fieldA12),
-      new DirectPropertyGet(null, fieldA22),
-      new PropertyGet(null, null, fieldA22),
-      new DirectPropertySet(null, fieldA22, null),
-      new PropertySet(null, null, null, fieldA22),
-    ], name: 'main2'));
-    library2.addClass(
-        new Class(name: 'S1', supertype: classA2.asThisSupertype, procedures: [
-      _newExpressionsProcedure([
-        new SuperPropertyGet(null, fieldA12),
-        new SuperPropertySet(null, null, fieldA12),
-        new SuperPropertyGet(null, fieldA22),
-        new SuperPropertySet(null, null, fieldA22),
-      ], name: 'foo')
-    ]));
-    nodeToName[classA2] = 'A2';
-    nodeToName[classB1] = 'B1';
-    nodeToName[fieldA12] = 'a12';
-    nodeToName[fieldA22] = 'a22';
-    nodeToName[fieldB11] = 'b11';
-
-    var library3 = _newLibrary('test');
-    var fieldB12 = _newField('b1');
-    var fieldB22 = _newField('b2');
-    var classB2 = new Class(
-        name: 'B', supertype: objectSuper, fields: [fieldB12, fieldB22]);
-    library3.addClass(classB2);
-    library3.addProcedure(_newExpressionsProcedure([
-      new DirectPropertyGet(null, fieldB12),
-      new PropertyGet(null, null, fieldB12),
-      new DirectPropertyGet(null, fieldB22),
-      new PropertyGet(null, null, fieldB22),
-    ], name: 'main3'));
-    library3.addClass(
-        new Class(name: 'S2', supertype: classB2.asThisSupertype, procedures: [
-      _newExpressionsProcedure([
-        new SuperPropertyGet(null, fieldB12),
-        new SuperPropertySet(null, null, fieldB12),
-        new SuperPropertyGet(null, fieldB22),
-        new SuperPropertySet(null, null, fieldB22),
-      ], name: 'foo')
-    ]));
-    nodeToName[classB2] = 'B2';
-    nodeToName[fieldB12] = 'b12';
-    nodeToName[fieldB22] = 'b22';
-
-    var outline1 = _newOutline([library1]);
-    var outline2 = _newOutline([library2]);
-    var outline3 = _newOutline([library3]);
-
-    expect(_getLibraryText(library1, nodeToName), r'''
-class A[A1] {
-  var a1[a11];
-}
-''');
-    expect(_getLibraryText(library2, nodeToName), r'''
-class A[A2] {
-  var a1[a12];
-  var a2[a22];
-}
-class B[B1] {
-  var b1[b11];
-}
-class S1 extends A[A2] {
-  foo() {
-    SuperPropertyGet[a12]();
-    SuperPropertySet[a12]();
-    SuperPropertyGet[a22]();
-    SuperPropertySet[a22]();
-  }
-}
-main2() {
-  DirectPropertyGet[a12]();
-  PropertyGet[a12]();
-  DirectPropertySet[a12]();
-  PropertySet[a12]();
-  DirectPropertyGet[a22]();
-  PropertyGet[a22]();
-  DirectPropertySet[a22]();
-  PropertySet[a22]();
-}
-''');
-    expect(_getLibraryText(library3, nodeToName), r'''
-class B[B2] {
-  var b1[b12];
-  var b2[b22];
-}
-class S2 extends B[B2] {
-  foo() {
-    SuperPropertyGet[b12]();
-    SuperPropertySet[b12]();
-    SuperPropertyGet[b22]();
-    SuperPropertySet[b22]();
-  }
-}
-main3() {
-  DirectPropertyGet[b12]();
-  PropertyGet[b12]();
-  DirectPropertyGet[b22]();
-  PropertyGet[b22]();
-}
-''');
-
-    _runCombineTest([outline1, outline2, outline3], (result) {
-      var library = _getLibrary(result.program, 'test');
-      expect(_getLibraryText(library, nodeToName), r'''
-class A[A1] {
-  var a1[a11];
-  var a2[a22];
-}
-class B[B1] {
-  var b1[b11];
-  var b2[b22];
-}
-class S1 extends A[A1] {
-  foo() {
-    SuperPropertyGet[a11]();
-    SuperPropertySet[a11]();
-    SuperPropertyGet[a22]();
-    SuperPropertySet[a22]();
-  }
-}
-class S2 extends B[B1] {
-  foo() {
-    SuperPropertyGet[b11]();
-    SuperPropertySet[b11]();
-    SuperPropertyGet[b22]();
-    SuperPropertySet[b22]();
-  }
-}
-main2() {
-  DirectPropertyGet[a11]();
-  PropertyGet[a11]();
-  DirectPropertySet[a11]();
-  PropertySet[a11]();
-  DirectPropertyGet[a22]();
-  PropertyGet[a22]();
-  DirectPropertySet[a22]();
-  PropertySet[a22]();
-}
-main3() {
-  DirectPropertyGet[b11]();
-  PropertyGet[b11]();
-  DirectPropertyGet[b22]();
-  PropertyGet[b22]();
-}
-''');
-    });
-  }
-
-  /// We test two cases of class declarations:
-  ///   * When a class to merge is first time declared in the first library;
-  ///   * When a class to merge is first time declared in the second library.
-  ///
-  /// With two cases of setter declarations:
-  ///   * Already defined, so references to it should be rewritten.
-  ///   * First defined in this outline, so references to it can be kept as is.
-  ///
-  /// For each case we validate [DirectPropertyGet], [PropertyGet],
-  /// and [SuperPropertyGet].
-  void test_class_procedure_getter() {
-    var nodeToName = <NamedNode, String>{};
-
-    var library1 = _newLibrary('test');
-    var procedureA11 = _newGetter('a1');
-    var classA1 = new Class(
-        name: 'A', supertype: objectSuper, procedures: [procedureA11]);
-    library1.addClass(classA1);
-    nodeToName[classA1] = 'A1';
-    nodeToName[procedureA11] = 'a11';
-
-    var library2 = _newLibrary('test');
-    var procedureA12 = _newGetter('a1');
-    var procedureA22 = _newGetter('a2');
-    var procedureB11 = _newGetter('b1');
-    var classA2 = new Class(
-        name: 'A',
-        supertype: objectSuper,
-        procedures: [procedureA12, procedureA22]);
-    library2.addClass(classA2);
-    var classB1 = new Class(
-        name: 'B', supertype: objectSuper, procedures: [procedureB11]);
-    library2.addClass(classB1);
-    // Use 'A.a1' and 'A.a2' to validate later how they are rewritten.
-    library2.addProcedure(_newExpressionsProcedure([
-      new DirectPropertyGet(null, procedureA12),
-      new PropertyGet(null, null, procedureA12),
-      new DirectPropertyGet(null, procedureA22),
-      new PropertyGet(null, null, procedureA22),
-    ], name: 'main2'));
-    library2.addClass(
-        new Class(name: 'S1', supertype: classA2.asThisSupertype, procedures: [
-      _newExpressionsProcedure([
-        new SuperPropertyGet(null, procedureA12),
-        new SuperPropertyGet(null, procedureA22),
-      ], name: 'foo')
-    ]));
-    nodeToName[classA2] = 'A2';
-    nodeToName[classB1] = 'B1';
-    nodeToName[procedureA12] = 'a12';
-    nodeToName[procedureA22] = 'a22';
-    nodeToName[procedureB11] = 'b11';
-
-    var library3 = _newLibrary('test');
-    var procedureB12 = _newGetter('b1');
-    var procedureB22 = _newGetter('b2');
-    var classB2 = new Class(
-        name: 'B',
-        supertype: objectSuper,
-        procedures: [procedureB12, procedureB22]);
-    library3.addClass(classB2);
-    library3.addProcedure(_newExpressionsProcedure([
-      new DirectPropertyGet(null, procedureB12),
-      new PropertyGet(null, null, procedureB12),
-    ], name: 'main3'));
-    library3.addClass(
-        new Class(name: 'S2', supertype: classB2.asThisSupertype, procedures: [
-      _newExpressionsProcedure([
-        new SuperPropertyGet(null, procedureB12),
-        new SuperPropertyGet(null, procedureB22),
-      ], name: 'foo')
-    ]));
-    nodeToName[classB2] = 'B2';
-    nodeToName[procedureB12] = 'b12';
-    nodeToName[procedureB22] = 'b22';
-
-    var outline1 = _newOutline([library1]);
-    var outline2 = _newOutline([library2]);
-    var outline3 = _newOutline([library3]);
-
-    expect(_getLibraryText(library1, nodeToName), r'''
-class A[A1] {
-  get a1[a11] => 0;
-}
-''');
-    expect(_getLibraryText(library2, nodeToName), r'''
-class A[A2] {
-  get a1[a12] => 0;
-  get a2[a22] => 0;
-}
-class B[B1] {
-  get b1[b11] => 0;
-}
-class S1 extends A[A2] {
-  foo() {
-    SuperPropertyGet[a12]();
-    SuperPropertyGet[a22]();
-  }
-}
-main2() {
-  DirectPropertyGet[a12]();
-  PropertyGet[a12]();
-  DirectPropertyGet[a22]();
-  PropertyGet[a22]();
-}
-''');
-    expect(_getLibraryText(library3, nodeToName), r'''
-class B[B2] {
-  get b1[b12] => 0;
-  get b2[b22] => 0;
-}
-class S2 extends B[B2] {
-  foo() {
-    SuperPropertyGet[b12]();
-    SuperPropertyGet[b22]();
-  }
-}
-main3() {
-  DirectPropertyGet[b12]();
-  PropertyGet[b12]();
-}
-''');
-
-    _runCombineTest([outline1, outline2, outline3], (result) {
-      var library = _getLibrary(result.program, 'test');
-      expect(_getLibraryText(library, nodeToName), r'''
-class A[A1] {
-  get a1[a11] => 0;
-  get a2[a22] => 0;
-}
-class B[B1] {
-  get b1[b11] => 0;
-  get b2[b22] => 0;
-}
-class S1 extends A[A1] {
-  foo() {
-    SuperPropertyGet[a11]();
-    SuperPropertyGet[a22]();
-  }
-}
-class S2 extends B[B1] {
-  foo() {
-    SuperPropertyGet[b11]();
-    SuperPropertyGet[b22]();
-  }
-}
-main2() {
-  DirectPropertyGet[a11]();
-  PropertyGet[a11]();
-  DirectPropertyGet[a22]();
-  PropertyGet[a22]();
-}
-main3() {
-  DirectPropertyGet[b11]();
-  PropertyGet[b11]();
-}
-''');
-    });
-  }
-
-  /// We test two cases of class declarations:
-  ///   * When a class to merge is first time declared in the first library;
-  ///   * When a class to merge is first time declared in the second library.
-  ///
-  /// With two cases of method declarations:
-  ///   * Already defined, so references to it should be rewritten.
-  ///   * First defined in this outline, so references to it can be kept as is.
-  ///
-  /// For each case we validate [DirectMethodInvocation], [MethodInvocation],
-  /// and [SuperMethodInvocation].
-  void test_class_procedure_method() {
-    var nodeToName = <NamedNode, String>{};
-
-    var library1 = _newLibrary('test');
-    var procedureA11 = _newMethod('a1');
-    var classA1 = new Class(
-        name: 'A', supertype: objectSuper, procedures: [procedureA11]);
-    library1.addClass(classA1);
-    nodeToName[classA1] = 'A1';
-    nodeToName[procedureA11] = 'a11';
-
-    var library2 = _newLibrary('test');
-    var procedureA12 = _newMethod('a1');
-    var procedureA22 = _newMethod('a2');
-    var procedureB11 = _newMethod('b1');
-    var classA2 = new Class(
-        name: 'A',
-        supertype: objectSuper,
-        procedures: [procedureA12, procedureA22]);
-    library2.addClass(classA2);
-    var classB1 = new Class(
-        name: 'B', supertype: objectSuper, procedures: [procedureB11]);
-    library2.addClass(classB1);
-    // Use 'A.a1' and 'A.a2' to validate later how they are rewritten.
-    library2.addProcedure(_newExpressionsProcedure([
-      new DirectMethodInvocation(null, procedureA12, new Arguments.empty()),
-      new MethodInvocation(null, null, new Arguments.empty(), procedureA12),
-      new DirectMethodInvocation(null, procedureA22, new Arguments.empty()),
-      new MethodInvocation(null, null, new Arguments.empty(), procedureA22),
-    ], name: 'main2'));
-    library2.addClass(
-        new Class(name: 'S1', supertype: classA2.asThisSupertype, procedures: [
-      _newExpressionsProcedure([
-        new SuperMethodInvocation(null, null, procedureA12),
-        new SuperMethodInvocation(null, null, procedureA22),
-      ], name: 'foo')
-    ]));
-    nodeToName[classA2] = 'A2';
-    nodeToName[classB1] = 'B1';
-    nodeToName[procedureA12] = 'a12';
-    nodeToName[procedureA22] = 'a22';
-    nodeToName[procedureB11] = 'b11';
-
-    var library3 = _newLibrary('test');
-    var procedureB12 = _newMethod('b1');
-    var procedureB22 = _newMethod('b2');
-    var classB2 = new Class(
-        name: 'B',
-        supertype: objectSuper,
-        procedures: [procedureB12, procedureB22]);
-    library3.addClass(classB2);
-    library3.addProcedure(_newExpressionsProcedure([
-      new DirectMethodInvocation(null, procedureB12, new Arguments.empty()),
-      new MethodInvocation(null, null, new Arguments.empty(), procedureB12),
-    ], name: 'main3'));
-    library3.addClass(
-        new Class(name: 'S2', supertype: classB2.asThisSupertype, procedures: [
-      _newExpressionsProcedure([
-        new SuperMethodInvocation(null, null, procedureB12),
-        new SuperMethodInvocation(null, null, procedureB22),
-      ], name: 'foo')
-    ]));
-    nodeToName[classB2] = 'B2';
-    nodeToName[procedureB12] = 'b12';
-    nodeToName[procedureB22] = 'b22';
-
-    var outline1 = _newOutline([library1]);
-    var outline2 = _newOutline([library2]);
-    var outline3 = _newOutline([library3]);
-
-    expect(_getLibraryText(library1, nodeToName), r'''
-class A[A1] {
-  a1[a11]();
-}
-''');
-    expect(_getLibraryText(library2, nodeToName), r'''
-class A[A2] {
-  a1[a12]();
-  a2[a22]();
-}
-class B[B1] {
-  b1[b11]();
-}
-class S1 extends A[A2] {
-  foo() {
-    SuperMethodInvocation[a12]();
-    SuperMethodInvocation[a22]();
-  }
-}
-main2() {
-  DirectMethodInvocation[a12]();
-  MethodInvocation[a12]();
-  DirectMethodInvocation[a22]();
-  MethodInvocation[a22]();
-}
-''');
-    expect(_getLibraryText(library3, nodeToName), r'''
-class B[B2] {
-  b1[b12]();
-  b2[b22]();
-}
-class S2 extends B[B2] {
-  foo() {
-    SuperMethodInvocation[b12]();
-    SuperMethodInvocation[b22]();
-  }
-}
-main3() {
-  DirectMethodInvocation[b12]();
-  MethodInvocation[b12]();
-}
-''');
-
-    _runCombineTest([outline1, outline2, outline3], (result) {
-      var library = _getLibrary(result.program, 'test');
-      expect(_getLibraryText(library, nodeToName), r'''
-class A[A1] {
-  a1[a11]();
-  a2[a22]();
-}
-class B[B1] {
-  b1[b11]();
-  b2[b22]();
-}
-class S1 extends A[A1] {
-  foo() {
-    SuperMethodInvocation[a11]();
-    SuperMethodInvocation[a22]();
-  }
-}
-class S2 extends B[B1] {
-  foo() {
-    SuperMethodInvocation[b11]();
-    SuperMethodInvocation[b22]();
-  }
-}
-main2() {
-  DirectMethodInvocation[a11]();
-  MethodInvocation[a11]();
-  DirectMethodInvocation[a22]();
-  MethodInvocation[a22]();
-}
-main3() {
-  DirectMethodInvocation[b11]();
-  MethodInvocation[b11]();
-}
-''');
-    });
-  }
-
-  /// We test two cases of class declarations:
-  ///   * When a class to merge is first time declared in the first library;
-  ///   * When a class to merge is first time declared in the second library.
-  ///
-  /// With two cases of setter declarations:
-  ///   * Already defined, so references to it should be rewritten.
-  ///   * First defined in this outline, so references to it can be kept as is.
-  ///
-  /// For each case we validate [DirectPropertySet], [PropertySet],
-  /// and [SuperPropertySet].
-  void test_class_procedure_setter() {
-    var nodeToName = <NamedNode, String>{};
-
-    var library1 = _newLibrary('test');
-    var procedureA11 = _newSetter('a1');
-    var classA1 = new Class(
-        name: 'A', supertype: objectSuper, procedures: [procedureA11]);
-    library1.addClass(classA1);
-    nodeToName[classA1] = 'A1';
-    nodeToName[procedureA11] = 'a11';
-
-    var library2 = _newLibrary('test');
-    var procedureA12 = _newSetter('a1');
-    var procedureA22 = _newSetter('a2');
-    var procedureB11 = _newSetter('b1');
-    var classA2 = new Class(
-        name: 'A',
-        supertype: objectSuper,
-        procedures: [procedureA12, procedureA22]);
-    library2.addClass(classA2);
-    var classB1 = new Class(
-        name: 'B', supertype: objectSuper, procedures: [procedureB11]);
-    library2.addClass(classB1);
-    // Use 'A.a1' and 'A.a2' to validate later how they are rewritten.
-    library2.addProcedure(_newExpressionsProcedure([
-      new DirectPropertySet(null, procedureA12, new IntLiteral(0)),
-      new PropertySet(null, null, new IntLiteral(0), procedureA12),
-      new DirectPropertySet(null, procedureA22, new IntLiteral(0)),
-      new PropertySet(null, null, new IntLiteral(0), procedureA22),
-    ], name: 'main2'));
-    library2.addClass(
-        new Class(name: 'S1', supertype: classA2.asThisSupertype, procedures: [
-      _newExpressionsProcedure([
-        new SuperPropertySet(null, new IntLiteral(0), procedureA12),
-        new SuperPropertySet(null, new IntLiteral(0), procedureA22),
-      ], name: 'foo')
-    ]));
-    nodeToName[classA2] = 'A2';
-    nodeToName[classB1] = 'B1';
-    nodeToName[procedureA12] = 'a12';
-    nodeToName[procedureA22] = 'a22';
-    nodeToName[procedureB11] = 'b11';
-
-    var library3 = _newLibrary('test');
-    var procedureB12 = _newSetter('b1');
-    var procedureB22 = _newSetter('b2');
-    var classB2 = new Class(
-        name: 'B',
-        supertype: objectSuper,
-        procedures: [procedureB12, procedureB22]);
-    library3.addClass(classB2);
-    library3.addProcedure(_newExpressionsProcedure([
-      new DirectPropertySet(null, procedureB12, new IntLiteral(0)),
-      new PropertySet(null, null, new IntLiteral(0), procedureB12),
-    ], name: 'main3'));
-    library3.addClass(
-        new Class(name: 'S2', supertype: classB2.asThisSupertype, procedures: [
-      _newExpressionsProcedure([
-        new SuperPropertySet(null, new IntLiteral(0), procedureB12),
-        new SuperPropertySet(null, new IntLiteral(0), procedureB22),
-      ], name: 'foo')
-    ]));
-    nodeToName[classB2] = 'B2';
-    nodeToName[procedureB12] = 'b12';
-    nodeToName[procedureB22] = 'b22';
-
-    var outline1 = _newOutline([library1]);
-    var outline2 = _newOutline([library2]);
-    var outline3 = _newOutline([library3]);
-
-    expect(_getLibraryText(library1, nodeToName), r'''
-class A[A1] {
-  set a1[a11]();
-}
-''');
-    expect(_getLibraryText(library2, nodeToName), r'''
-class A[A2] {
-  set a1[a12]();
-  set a2[a22]();
-}
-class B[B1] {
-  set b1[b11]();
-}
-class S1 extends A[A2] {
-  foo() {
-    SuperPropertySet[a12]();
-    SuperPropertySet[a22]();
-  }
-}
-main2() {
-  DirectPropertySet[a12]();
-  PropertySet[a12]();
-  DirectPropertySet[a22]();
-  PropertySet[a22]();
-}
-''');
-    expect(_getLibraryText(library3, nodeToName), r'''
-class B[B2] {
-  set b1[b12]();
-  set b2[b22]();
-}
-class S2 extends B[B2] {
-  foo() {
-    SuperPropertySet[b12]();
-    SuperPropertySet[b22]();
-  }
-}
-main3() {
-  DirectPropertySet[b12]();
-  PropertySet[b12]();
-}
-''');
-
-    _runCombineTest([outline1, outline2, outline3], (result) {
-      var library = _getLibrary(result.program, 'test');
-      expect(_getLibraryText(library, nodeToName), r'''
-class A[A1] {
-  set a1[a11]();
-  set a2[a22]();
-}
-class B[B1] {
-  set b1[b11]();
-  set b2[b22]();
-}
-class S1 extends A[A1] {
-  foo() {
-    SuperPropertySet[a11]();
-    SuperPropertySet[a22]();
-  }
-}
-class S2 extends B[B1] {
-  foo() {
-    SuperPropertySet[b11]();
-    SuperPropertySet[b22]();
-  }
-}
-main2() {
-  DirectPropertySet[a11]();
-  PropertySet[a11]();
-  DirectPropertySet[a22]();
-  PropertySet[a22]();
-}
-main3() {
-  DirectPropertySet[b11]();
-  PropertySet[b11]();
-}
-''');
-    });
-  }
-
-  void test_class_typeParameter_updateReference() {
-    var nodeToName = <TreeNode, String>{};
-
-    var library1 = _newLibrary('test');
-    var typeParameterT1 = _newTypeParameter('T');
-    var fieldA11 =
-        _newField('a1', type: new TypeParameterType(typeParameterT1));
-    var classA1 = new Class(
-        name: 'A',
-        typeParameters: [typeParameterT1],
-        supertype: objectSuper,
-        fields: [fieldA11]);
-    library1.addClass(classA1);
-    nodeToName[typeParameterT1] = 'T1';
-    nodeToName[classA1] = 'A1';
-    nodeToName[fieldA11] = 'a11';
-
-    var library2 = _newLibrary('test');
-    var typeParameterT2 = _newTypeParameter('T');
-    var fieldA12 =
-        _newField('a1', type: new TypeParameterType(typeParameterT2));
-    var fieldA22 =
-        _newField('a2', type: new TypeParameterType(typeParameterT2));
-    var classA2 = new Class(
-        name: 'A',
-        typeParameters: [typeParameterT2],
-        supertype: objectSuper,
-        fields: [fieldA12, fieldA22]);
-    nodeToName[typeParameterT2] = 'T2';
-    library2.addClass(classA2);
-    nodeToName[classA2] = 'A2';
-    nodeToName[fieldA12] = 'a12';
-    nodeToName[fieldA22] = 'a22';
-
-    var outline1 = _newOutline([library1]);
-    var outline2 = _newOutline([library2]);
-
-    expect(_getLibraryText(library1, nodeToName), r'''
-class A[A1]<T[T1]> {
-  T[T1] a1[a11];
-}
-''');
-    expect(_getLibraryText(library2, nodeToName), r'''
-class A[A2]<T[T2]> {
-  T[T2] a1[a12];
-  T[T2] a2[a22];
-}
-''');
-
-    _runCombineTest([outline1, outline2], (result) {
-      var library = _getLibrary(result.program, 'test');
-      expect(_getLibraryText(library, nodeToName), r'''
-class A[A1]<T[T1]> {
-  T[T1] a1[a11];
-  T[T1] a2[a22];
-}
-''');
-    });
-  }
-
-  void test_class_updateReferences() {
-    var nodeToName = <TreeNode, String>{};
-
-    var library1 = _newLibrary('test');
-    var classA1 = new Class(name: 'A', supertype: objectSuper);
-    library1.addClass(classA1);
-    nodeToName[classA1] = 'A1';
-
-    var library2 = _newLibrary('test');
-    var classA2 = new Class(name: 'A', supertype: objectSuper);
-    var classB1 = new Class(name: 'B1', supertype: new Supertype(classA2, []));
-    var classB2 = new Class(
-        name: 'B2',
-        supertype: objectSuper,
-        implementedTypes: [new Supertype(classA2, [])]);
-    var classB3 = new Class(
-        name: 'B3',
-        supertype: objectSuper,
-        mixedInType: new Supertype(classA2, []));
-    var typeParameterT1 = new TypeParameter('T', new InterfaceType(classA2));
-    var classB4 = new Class(
-        name: 'B4', supertype: objectSuper, typeParameters: [typeParameterT1]);
-    library2.addClass(classA2);
-    library2.addClass(classB1);
-    library2.addClass(classB2);
-    library2.addClass(classB3);
-    library2.addClass(classB4);
-    nodeToName[classA2] = 'A2';
-    nodeToName[classB1] = 'B1';
-    nodeToName[classB2] = 'B2';
-    nodeToName[classB3] = 'B3';
-    nodeToName[classB4] = 'B4';
-    nodeToName[typeParameterT1] = 'T';
-
-    var outline1 = _newOutline([library1]);
-    var outline2 = _newOutline([library2]);
-
-    expect(_getLibraryText(library1, nodeToName), r'''
-class A[A1] {}
-''');
-    expect(_getLibraryText(library2, nodeToName), r'''
-class A[A2] {}
-class B1[B1] extends A[A2] {}
-class B2[B2] implements A[A2] {}
-class B3[B3] with A[A2] {}
-class B4[B4]<T[T] extends A[A2]> {}
-''');
-
-    _runCombineTest([outline1, outline2], (result) {
-      var library = _getLibrary(result.program, 'test');
-      expect(_getLibraryText(library, nodeToName), r'''
-class A[A1] {}
-class B1[B1] extends A[A1] {}
-class B2[B2] implements A[A1] {}
-class B3[B3] with A[A1] {}
-class B4[B4]<T[T] extends A[A1]> {}
-''');
-    });
-  }
-
-  void test_field() {
-    var libraryA1 = _newLibrary('a');
-    libraryA1.addField(_newField('A'));
-
-    var libraryA2 = _newLibrary('a');
-    libraryA2.addField(_newField('B'));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      _getField(libraryA, 'A');
-      _getField(libraryA, 'B');
-    });
-  }
-
-  void test_field_skipDuplicate() {
-    var libraryA1 = _newLibrary('a');
-    libraryA1.addField(_newField('A'));
-    libraryA1.addField(_newField('B'));
-
-    var libraryA2 = _newLibrary('a');
-    libraryA2.addField(_newField('A'));
-    libraryA2.addField(_newField('C'));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      _getField(libraryA, 'A');
-      _getField(libraryA, 'B');
-      _getField(libraryA, 'C');
-    });
-  }
-
-  void test_field_updateReferences() {
-    var libraryA1 = _newLibrary('a');
-    var fieldA1A = _newField('A');
-    libraryA1.addField(fieldA1A);
-
-    var libraryA2 = _newLibrary('a');
-    var fieldA2A = _newField('A');
-    libraryA2.addField(fieldA2A);
-
-    var libraryB = _newLibrary('b');
-    libraryB.addProcedure(_newExpressionsProcedure([
-      new StaticGet(fieldA2A),
-      new StaticSet(fieldA2A, new IntLiteral(0)),
-    ]));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2, libraryB]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      _getField(libraryA, 'A');
-
-      var libraryB = _getLibrary(result.program, 'b');
-      var main = _getProcedure(libraryB, 'main', '@methods');
-      expect((_getProcedureExpression(main, 0) as StaticGet).targetReference,
-          same(fieldA1A.reference));
-      expect((_getProcedureExpression(main, 1) as StaticSet).targetReference,
-          same(fieldA1A.reference));
-    });
-  }
-
-  void test_library_additionalExports() {
-    Map<String, Reference> addLibraryDeclarations(Library library) {
-      var A = new Class(name: 'A');
-      var B = _newField('B');
-      var C = _newMethod('C');
-      var D = _newGetter('D');
-      var E = _newSetter('E');
-      library.addClass(A);
-      library.addField(B);
-      library.addProcedure(C);
-      library.addProcedure(D);
-      library.addProcedure(E);
-      return {
-        'A': A.reference,
-        'B': B.reference,
-        'C': C.reference,
-        'D': D.reference,
-        'E': E.reference
-      };
-    }
-
-    var libraryA1 = _newLibrary('a');
-    var declarations = addLibraryDeclarations(libraryA1);
-
-    var libraryA2 = _newLibrary('a');
-    var declarations2 = addLibraryDeclarations(libraryA2);
-
-    var libraryB = _newLibrary('b');
-    libraryB.additionalExports.addAll(declarations2.values);
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2, libraryB]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      var libraryB = _getLibrary(result.program, 'b');
-      expect(libraryB.additionalExports, hasLength(declarations.length));
-      for (var declaration in _getLibraryDeclarations(libraryA)) {
-        String name = declaration.canonicalName.name;
-        Reference reference = declaration.reference;
-        expect(declarations[name], same(reference));
-        expect(libraryB.additionalExports, contains(reference));
-      }
-    });
-  }
-
-  void test_library_additionalExports_externalVersionFirst() {
-    // As if outline for "a" uses "b" (which is external).
-    // And we first see the external "b", without addition exports.
-    var libraryA = _newLibrary('a');
-    var libraryB1 = _newLibrary('b');
-
-    // As if outline for "b" exports C1 and C2 from "c".
-    // So, we see "b" with exports only as the second library.
-    var libraryB2 = _newLibrary('b');
-    var libraryC = _newLibrary('c');
-    var C1 = new Class(name: 'C1');
-    var C2 = new Class(name: 'C2');
-    libraryC.addClass(C1);
-    libraryC.addClass(C2);
-    libraryB2.additionalExports.add(C1.reference);
-    libraryB2.additionalExports.add(C2.reference);
-
-    var outline1 = _newOutline([libraryA, libraryB1]);
-    var outline2 = _newOutline([libraryB2, libraryC]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryB = _getLibrary(result.program, 'b');
-      List<Reference> exports = libraryB.additionalExports;
-      expect(exports, unorderedEquals([C1.reference, C2.reference]));
-    });
-  }
-
-  void test_library_replaceReference() {
-    var libraryA1 = _newLibrary('a');
-
-    var libraryA2 = _newLibrary('a');
-
-    var libraryB = _newLibrary('b');
-    libraryB.dependencies.add(new LibraryDependency.import(libraryA2));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2, libraryB]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-
-      var libraryB = _getLibrary(result.program, 'b');
-      expect(libraryB.dependencies, hasLength(1));
-      expect(libraryB.dependencies[0].targetLibrary, libraryA);
-    });
-  }
-
-  void test_procedure_getter() {
-    var libraryA1 = _newLibrary('a');
-    libraryA1.addProcedure(_newGetter('A'));
-
-    var libraryA2 = _newLibrary('a');
-    libraryA2.addProcedure(_newGetter('B'));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      _getProcedure(libraryA, 'A', '@getters');
-      _getProcedure(libraryA, 'B', '@getters');
-    });
-  }
-
-  void test_procedure_getter_skipDuplicate() {
-    var libraryA1 = _newLibrary('a');
-    libraryA1.addProcedure(_newGetter('A'));
-    libraryA1.addProcedure(_newGetter('B'));
-
-    var libraryA2 = _newLibrary('a');
-    libraryA2.addProcedure(_newGetter('A'));
-    libraryA2.addProcedure(_newGetter('C'));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      _getProcedure(libraryA, 'A', '@getters');
-      _getProcedure(libraryA, 'B', '@getters');
-      _getProcedure(libraryA, 'C', '@getters');
-    });
-  }
-
-  void test_procedure_getter_updateReferences() {
-    var libraryA1 = _newLibrary('a');
-    var procedureA1A = _newGetter('A');
-    libraryA1.addProcedure(procedureA1A);
-
-    var libraryA2 = _newLibrary('a');
-    var procedureA2A = _newGetter('A');
-    libraryA2.addProcedure(procedureA2A);
-
-    var libraryB = _newLibrary('b');
-    libraryB.addProcedure(_newExpressionsProcedure([
-      new StaticGet(procedureA2A),
-    ]));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2, libraryB]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      _getProcedure(libraryA, 'A', '@getters');
-
-      var libraryB = _getLibrary(result.program, 'b');
-      var main = _getProcedure(libraryB, 'main', '@methods');
-      expect((_getProcedureExpression(main, 0) as StaticGet).targetReference,
-          same(procedureA1A.reference));
-    });
-  }
-
-  void test_procedure_method() {
-    var libraryA1 = _newLibrary('a');
-    libraryA1.addProcedure(_newMethod('A'));
-
-    var libraryA2 = _newLibrary('a');
-    libraryA2.addProcedure(_newMethod('B'));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      _getProcedure(libraryA, 'A', '@methods');
-      _getProcedure(libraryA, 'B', '@methods');
-    });
-  }
-
-  void test_procedure_method_private_updateReferences() {
-    var libraryA1 = _newLibrary('a');
-    var procedureA1A = _newMethod('_A', libraryForPrivate: libraryA1);
-    libraryA1.addProcedure(procedureA1A);
-
-    var libraryA2 = _newLibrary('a');
-    var procedureA2A = _newMethod('_A', libraryForPrivate: libraryA2);
-    libraryA2.addProcedure(procedureA2A);
-
-    var libraryB = _newLibrary('b');
-    libraryB.addProcedure(_newExpressionsProcedure([
-      new StaticInvocation(procedureA2A, new Arguments.empty()),
-    ]));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2, libraryB]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      _getProcedure(libraryA, '_A', '@methods');
-
-      var libraryB = _getLibrary(result.program, 'b');
-      var main = _getProcedure(libraryB, 'main', '@methods');
-      expect(
-          (_getProcedureExpression(main, 0) as StaticInvocation)
-              .targetReference,
-          same(procedureA1A.reference));
-    });
-  }
-
-  void test_procedure_method_skipDuplicate() {
-    var libraryA1 = _newLibrary('a');
-    libraryA1.addProcedure(_newMethod('A'));
-    libraryA1.addProcedure(_newMethod('B'));
-
-    var libraryA2 = _newLibrary('a');
-    libraryA2.addProcedure(_newMethod('A'));
-    libraryA2.addProcedure(_newMethod('C'));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      _getProcedure(libraryA, 'A', '@methods');
-      _getProcedure(libraryA, 'B', '@methods');
-      _getProcedure(libraryA, 'C', '@methods');
-    });
-  }
-
-  void test_procedure_method_updateReferences() {
-    var libraryA1 = _newLibrary('a');
-    var procedureA1A = _newMethod('A');
-    libraryA1.addProcedure(procedureA1A);
-
-    var libraryA2 = _newLibrary('a');
-    var procedureA2A = _newMethod('A');
-    libraryA2.addProcedure(procedureA2A);
-
-    var libraryB = _newLibrary('b');
-    libraryB.addProcedure(_newExpressionsProcedure([
-      new StaticInvocation(procedureA2A, new Arguments.empty()),
-    ]));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2, libraryB]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      _getProcedure(libraryA, 'A', '@methods');
-
-      var libraryB = _getLibrary(result.program, 'b');
-      var main = _getProcedure(libraryB, 'main', '@methods');
-      expect(
-          (_getProcedureExpression(main, 0) as StaticInvocation)
-              .targetReference,
-          same(procedureA1A.reference));
-    });
-  }
-
-  void test_procedure_setter() {
-    var libraryA1 = _newLibrary('a');
-    libraryA1.addProcedure(_newSetter('A'));
-
-    var libraryA2 = _newLibrary('a');
-    libraryA2.addProcedure(_newSetter('B'));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      _getProcedure(libraryA, 'A', '@setters');
-      _getProcedure(libraryA, 'B', '@setters');
-    });
-  }
-
-  void test_procedure_setter_skipDuplicate() {
-    var libraryA1 = _newLibrary('a');
-    libraryA1.addProcedure(_newSetter('A'));
-    libraryA1.addProcedure(_newSetter('B'));
-
-    var libraryA2 = _newLibrary('a');
-    libraryA2.addProcedure(_newSetter('A'));
-    libraryA2.addProcedure(_newSetter('C'));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      _getProcedure(libraryA, 'A', '@setters');
-      _getProcedure(libraryA, 'B', '@setters');
-      _getProcedure(libraryA, 'C', '@setters');
-    });
-  }
-
-  void test_procedure_setter_updateReferences() {
-    var libraryA1 = _newLibrary('a');
-    var procedureA1A = _newSetter('A');
-    libraryA1.addProcedure(procedureA1A);
-
-    var libraryA2 = _newLibrary('a');
-    var procedureA2A = _newSetter('A');
-    libraryA2.addProcedure(procedureA2A);
-
-    var libraryB = _newLibrary('b');
-    libraryB.addProcedure(_newExpressionsProcedure([
-      new StaticSet(procedureA2A, new IntLiteral(0)),
-    ]));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2, libraryB]);
-
-    _runCombineTest([outline1, outline2], (result) {
-      var libraryA = _getLibrary(result.program, 'a');
-      _getProcedure(libraryA, 'A', '@setters');
-
-      var libraryB = _getLibrary(result.program, 'b');
-      var main = _getProcedure(libraryB, 'main', '@methods');
-      expect((_getProcedureExpression(main, 0) as StaticSet).targetReference,
-          same(procedureA1A.reference));
-    });
-  }
-
-  void test_undo_twice() {
-    var libraryA1 = _newLibrary('a');
-    libraryA1.addField(_newField('A'));
-
-    var libraryA2 = _newLibrary('a');
-    libraryA2.addField(_newField('B'));
-
-    var outline1 = _newOutline([libraryA1]);
-    var outline2 = _newOutline([libraryA2]);
-
-    var result = combine([outline1, outline2]);
-    result.undo();
-    expect(() => result.undo(), throwsStateError);
-  }
-
-  /// Get a single [Class] with the given [name].
-  /// Throw if there is not exactly one.
-  Class _getClass(Library library, String name) {
-    var results = library.classes.where((class_) => class_.name == name);
-    expect(results, hasLength(1), reason: 'Expected only one: $name');
-    Class result = results.first;
-    expect(result.parent, library);
-    expect(result.canonicalName.parent, library.canonicalName);
-    return result;
-  }
-
-  /// Get a single [Field] with the given [name].
-  /// Throw if there is not exactly one.
-  Field _getField(NamedNode parent, String name) {
-    List<Field> fields;
-    if (parent is Library) {
-      fields = parent.fields;
-    } else if (parent is Class) {
-      fields = parent.fields;
-    } else {
-      throw new ArgumentError('Only Library or Class expected');
-    }
-
-    var results = fields.where((field) => field.name.name == name);
-    expect(results, hasLength(1), reason: 'Expected only one: $name');
-    Field result = results.first;
-    expect(result.parent, parent);
-    var parentName = parent.canonicalName.getChild('@fields');
-    expect(result.canonicalName.parent, parentName);
-    return result;
-  }
-
-  /// Get a single [Library] with the given [name].
-  /// Throw if there is not exactly one.
-  Library _getLibrary(Program program, String name) {
-    var results = program.libraries.where((library) => library.name == name);
-    expect(results, hasLength(1), reason: 'Expected only one: $name');
-    var result = results.first;
-    expect(result.parent, program);
-    expect(result.canonicalName.parent, program.root);
-    return result;
-  }
-
-  /// Get a single [Procedure] with the given [name].
-  /// Throw if there is not exactly one.
-  Procedure _getProcedure(NamedNode parent, String name, String prefixName) {
-    Library enclosingLibrary;
-    List<Procedure> procedures;
-    if (parent is Library) {
-      enclosingLibrary = parent;
-      procedures = parent.procedures;
-    } else if (parent is Class) {
-      enclosingLibrary = parent.enclosingLibrary;
-      procedures = parent.procedures;
-    } else {
-      throw new ArgumentError('Only Library or Class expected');
-    }
-
-    Iterable<Procedure> results =
-        procedures.where((procedure) => procedure.name.name == name);
-    expect(results, hasLength(1), reason: 'Expected only one: $name');
-    Procedure result = results.first;
-    expect(result.parent, parent);
-
-    var parentName = parent.canonicalName.getChild(prefixName);
-    if (name.startsWith('_')) {
-      parentName = parentName.getChildFromUri(enclosingLibrary.importUri);
-    }
-    expect(result.canonicalName.parent, parentName);
-
-    return result;
-  }
-
-  /// Return the [Expression] in the [index]th statement of the [procedure]'s
-  /// block body.
-  Expression _getProcedureExpression(Procedure procedure, int index) {
-    Block mainBlock = procedure.function.body;
-    ExpressionStatement statement = mainBlock.statements[index];
-    return statement.expression;
-  }
-
-  Constructor _newConstructor(String name, {Statement body}) {
-    body ??= new EmptyStatement();
-    return new Constructor(new FunctionNode(body), name: new Name(name));
-  }
-
-  Procedure _newExpressionsProcedure(List<Expression> expressions,
-      {String name: 'main'}) {
-    var statements =
-        expressions.map((e) => new ExpressionStatement(e)).toList();
-    return new Procedure(new Name(name), ProcedureKind.Method,
-        new FunctionNode(new Block(statements)));
-  }
-
-  Field _newField(String name, {DartType type}) {
-    type ??= const DynamicType();
-    return new Field(new Name(name), type: type);
-  }
-
-  Procedure _newGetter(String name) {
-    return new Procedure(new Name(name), ProcedureKind.Getter,
-        new FunctionNode(new ExpressionStatement(new IntLiteral((0)))));
-  }
-
-  Library _newLibrary(String name) {
-    var uri = Uri.parse('org-dartlang:///$name.dart');
-    return new Library(uri, name: name);
-  }
-
-  Procedure _newMethod(String name,
-      {Statement body, Library libraryForPrivate}) {
-    body ??= new EmptyStatement();
-    return new Procedure(new Name(name, libraryForPrivate),
-        ProcedureKind.Method, new FunctionNode(body));
-  }
-
-  Program _newOutline(List<Library> libraries) {
-    var outline = new Program(libraries: libraries);
-    outline.computeCanonicalNames();
-    return outline;
-  }
-
-  Procedure _newSetter(String name) {
-    return new Procedure(
-        new Name(name),
-        ProcedureKind.Setter,
-        new FunctionNode(new EmptyStatement(),
-            positionalParameters: [new VariableDeclaration('_')]));
-  }
-
-  TypeParameter _newTypeParameter(String name) {
-    var bound = new InterfaceType(coreTypes.objectClass);
-    return new TypeParameter(name, bound);
-  }
-
-  void _runCombineTest(
-      List<Program> outlines, void checkResult(CombineResult result)) {
-    // Store the original state.
-    var states = <Program, _OutlineState>{};
-    for (var outline in outlines) {
-      states[outline] = new _OutlineState(outline);
-    }
-
-    // Combine the outlines and check the result.
-    var result = combine(outlines);
-    checkResult(result);
-
-    // Undo and verify that the state is the same as the original.
-    result.undo();
-    states.forEach((outline, state) {
-      state.verifySame();
-    });
-  }
-
-  /// Produces all declarations of the [library].
-  static Iterable<NamedNode> _getLibraryDeclarations(Library library) sync* {
-    yield* library.classes;
-    yield* library.procedures;
-    yield* library.fields;
-  }
-
-  /// Return the text presentation of the [library] that is not a normal Kernel
-  /// AST text, but includes portions that we want to test - declarations
-  /// and references.  The map [nodeToName] must have entries for all
-  /// referenced nodes, other declarations are optional.
-  static String _getLibraryText(
-      Library library, Map<TreeNode, String> nodeToName) {
-    var buffer = new StringBuffer();
-
-    String getNodeName(TreeNode node, {bool required: false}) {
-      String name = nodeToName[node];
-      if (name != null) {
-        return '[$name]';
-      } else {
-        if (required) {
-          fail('The name is required for (${node.runtimeType}) $node');
-        }
-        return '';
-      }
-    }
-
-    void writeType(DartType type) {
-      if (type is InterfaceType) {
-        String name = getNodeName(type.classNode);
-        buffer.write('${type.classNode.name}$name');
-      } else if (type is TypeParameterType) {
-        String name = getNodeName(type.parameter);
-        buffer.write('${type.parameter.name}$name');
-      } else {
-        throw new UnimplementedError('(${type.runtimeType}) $type');
-      }
-    }
-
-    void writeStatement(Statement node, String indent) {
-      if (node is ExpressionStatement) {
-        Expression expression = node.expression;
-        String prefix = expression.runtimeType.toString();
-        Member target;
-        if (expression is ConstructorInvocation) {
-          target = expression.target;
-        } else if (expression is DirectMethodInvocation) {
-          target = expression.target;
-        } else if (expression is DirectPropertyGet) {
-          target = expression.target;
-        } else if (expression is DirectPropertySet) {
-          target = expression.target;
-        } else if (expression is MethodInvocation) {
-          target = expression.interfaceTarget;
-        } else if (expression is PropertyGet) {
-          target = expression.interfaceTarget;
-        } else if (expression is PropertySet) {
-          target = expression.interfaceTarget;
-        } else if (expression is SuperMethodInvocation) {
-          target = expression.interfaceTarget;
-        } else if (expression is SuperPropertyGet) {
-          target = expression.interfaceTarget;
-        } else if (expression is SuperPropertySet) {
-          target = expression.interfaceTarget;
-        } else {
-          var type = expression.runtimeType;
-          fail('Unsupported expression: $type');
-        }
-        String name = getNodeName(target, required: true);
-        buffer.writeln('$indent$prefix$name();');
-      } else {
-        fail('Unsupported statement: (${node.runtimeType}) $node');
-      }
-    }
-
-    void writeBody(Statement body, String indent) {
-      if (body is EmptyStatement) {
-        buffer.writeln(';');
-      } else if (body is Block) {
-        buffer.write(' {');
-        if (body.statements.isNotEmpty) {
-          buffer.writeln();
-          for (var statement in body.statements) {
-            writeStatement(statement, '$indent  ');
-          }
-          buffer.writeln('$indent}');
-        } else {
-          buffer.writeln('}');
-        }
-      } else if (body is ExpressionStatement) {
-        buffer.write(' => ');
-        Expression expression = body.expression;
-        if (expression is IntLiteral) {
-          buffer.write(expression);
-        } else {
-          fail('Not implemented ${expression.runtimeType}');
-        }
-        buffer.writeln(';');
-      } else {
-        fail('Not implemented ${body.runtimeType}');
-      }
-    }
-
-    void writeField(Field node, String indent) {
-      buffer.write(indent);
-      String name = getNodeName(node, required: true);
-      if (node.type is DynamicType) {
-        buffer.write('var');
-      } else {
-        writeType(node.type);
-      }
-      buffer.writeln(' ${node.name}$name;');
-    }
-
-    void writeInitializer(Initializer node, String indent) {
-      String kind;
-      Constructor target;
-      if (node is RedirectingInitializer) {
-        kind = 'redirect';
-        target = node.target;
-      } else if (node is SuperInitializer) {
-        kind = 'super';
-        target = node.target;
-      } else {
-        fail('Not implemented ${node.runtimeType}');
-      }
-      String name = getNodeName(target, required: true);
-      buffer.write('${indent}${kind}$name()');
-    }
-
-    void writeConstructor(Constructor node, String indent) {
-      String name = getNodeName(node);
-      buffer.write('${indent}constructor ${node.name}$name()');
-      List<Initializer> initializers = node.initializers;
-      if (initializers.isNotEmpty) {
-        buffer.writeln(' :');
-        for (int i = 0; i < initializers.length; i++) {
-          Initializer initializer = initializers[i];
-          writeInitializer(initializer, '      ');
-          if (i != initializers.length - 1) {
-            buffer.writeln(',');
-          }
-        }
-      }
-      writeBody(node.function.body, indent);
-    }
-
-    void writeProcedure(NamedNode parent, Procedure node, String indent) {
-      String prefixName;
-      String kindStr;
-      ProcedureKind kind = node.kind;
-      if (kind == ProcedureKind.Method) {
-        prefixName = '@methods';
-        kindStr = '';
-      } else if (kind == ProcedureKind.Getter) {
-        prefixName = '@getters';
-        kindStr = 'get ';
-      } else if (kind == ProcedureKind.Setter) {
-        prefixName = '@setters';
-        kindStr = 'set ';
-      } else {
-        fail('Unsupported kind: $kind');
-      }
-
-      // Verify canonical names linkage.
-      var parentName = parent.canonicalName.getChild(prefixName);
-      expect(node.canonicalName.parent, parentName);
-
-      String nodeName = getNodeName(node);
-      buffer.write('$indent$kindStr${node.name}$nodeName');
-      if (kind != ProcedureKind.Getter) {
-        buffer.write('()');
-      }
-      writeBody(node.function.body, indent);
-    }
-
-    void writeSupertype(Supertype supertype) {
-      expect(supertype.typeArguments, isEmpty);
-      var clazz = supertype.classNode;
-      String name = getNodeName(clazz, required: true);
-      buffer.write('${clazz.name}$name');
-    }
-
-    void writeClass(Class node) {
-      String nodeName = getNodeName(node);
-      buffer.write('class ${node.name}$nodeName');
-
-      if (node.typeParameters.isNotEmpty) {
-        buffer.write('<');
-        for (var i = 0; i < node.typeParameters.length; i++) {
-          if (i != 0) {
-            buffer.write(', ');
-          }
-          TypeParameter typeParameter = node.typeParameters[i];
-          String name = getNodeName(typeParameter, required: true);
-          buffer.write('${typeParameter.name}$name');
-          if (typeParameter.bound != null) {
-            var bound = typeParameter.bound as InterfaceType;
-            if (bound.classNode.name != 'Object') {
-              buffer.write(' extends ');
-              writeType(typeParameter.bound);
-            }
-          }
-        }
-        buffer.write('>');
-      }
-
-      {
-        var superType = node.supertype;
-        var superClassName = superType.classNode.name;
-        if (superClassName != 'Object') {
-          buffer.write(' extends ');
-          writeSupertype(superType);
-        }
-
-        if (node.implementedTypes.isNotEmpty) {
-          buffer.write(' implements ');
-          for (var i = 0; i < node.implementedTypes.length; i++) {
-            if (i != 0) {
-              buffer.write(', ');
-            }
-            writeSupertype(node.implementedTypes[i]);
-          }
-        }
-
-        Supertype mixedInType = node.mixedInType;
-        if (mixedInType != null) {
-          buffer.write(' with ');
-          writeSupertype(mixedInType);
-        }
-      }
-
-      buffer.write(' {');
-
-      if (!node.members.isEmpty) {
-        buffer.writeln();
-        for (var field in node.fields) {
-          writeField(field, '  ');
-        }
-        for (var constructor in node.constructors) {
-          writeConstructor(constructor, '  ');
-        }
-        for (var procedure in node.procedures) {
-          writeProcedure(node, procedure, '  ');
-        }
-      }
-      buffer.writeln('}');
-    }
-
-    for (var node in library.fields) {
-      writeField(node, '');
-    }
-
-    for (var node in library.classes) {
-      writeClass(node);
-    }
-
-    for (var node in library.procedures) {
-      writeProcedure(library, node, '');
-    }
-
-    return buffer.toString();
-  }
-}
-
-/// The original state of an outline, and code that validates that after some
-/// manipulations (e.g. combine and undo) the state stays the same.
-class _OutlineState {
-  final Program outline;
-  final initialCollector = new _StateCollector();
-
-  _OutlineState(this.outline) {
-    outline.accept(initialCollector);
-  }
-
-  void verifySame() {
-    var collector = new _StateCollector();
-    outline.accept(collector);
-    expect(collector.nodes, initialCollector.nodes);
-    expect(collector.references, initialCollector.references);
-    expect(collector.typeParameters, initialCollector.typeParameters);
-    initialCollector.libraryParents.forEach((library, outline) {
-      expect(library.canonicalName.parent, outline.root);
-      expect(library.parent, outline);
-    });
-    initialCollector.nodeParents.forEach((child, parent) {
-      expect(child.parent, parent);
-      if (child is Member) {
-        var qualifier = CanonicalName.getMemberQualifier(child);
-        var parentName = parent.canonicalName.getChild(qualifier);
-        if (child.name.isPrivate) {
-          var libraryUri = child.enclosingLibrary.importUri;
-          parentName = parentName.getChildFromUri(libraryUri);
-        }
-        expect(child.canonicalName.parent, parentName);
-      } else {
-        expect(child.canonicalName.parent, parent.canonicalName);
-      }
-    });
-  }
-}
-
-class _StateCollector extends RecursiveVisitor {
-  final List<Node> nodes = [];
-  final Map<NamedNode, NamedNode> nodeParents = {};
-  final Map<Library, Program> libraryParents = {};
-  final List<Reference> references = [];
-  final List<TypeParameter> typeParameters = [];
-
-  @override
-  void defaultMemberReference(Member node) {
-    references.add(node.reference);
-  }
-
-  @override
-  void defaultNode(Node node) {
-    nodes.add(node);
-    if (node is Library) {
-      libraryParents[node] = node.parent as Program;
-    } else if (node is NamedNode) {
-      nodeParents[node] = node.parent as NamedNode;
-    }
-    super.defaultNode(node);
-  }
-
-  @override
-  void visitClassReference(Class node) {
-    references.add(node.reference);
-  }
-
-  @override
-  visitLibrary(Library node) {
-    references.addAll(node.additionalExports);
-    super.visitLibrary(node);
-  }
-
-  @override
-  visitLibraryDependency(LibraryDependency node) {
-    references.add(node.importedLibraryReference);
-    super.visitLibraryDependency(node);
-  }
-
-  @override
-  void visitTypedefReference(Typedef node) {
-    references.add(node.reference);
-  }
-
-  @override
-  void visitTypeParameterType(TypeParameterType node) {
-    typeParameters.add(node.parameter);
-  }
-}
diff --git a/pkg/front_end/test/src/incremental/hot_reload_e2e_test.dart b/pkg/front_end/test/src/incremental/hot_reload_e2e_test.dart
index a9cbc0b..9b33737 100644
--- a/pkg/front_end/test/src/incremental/hot_reload_e2e_test.dart
+++ b/pkg/front_end/test/src/incremental/hot_reload_e2e_test.dart
@@ -7,23 +7,41 @@
 /// reload on the running program.
 library front_end.incremental.hot_reload_e2e_test;
 
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
+import 'dart:async' show Completer, Future;
 
-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/api_prototype/incremental_kernel_generator.dart';
-import 'package:front_end/src/api_prototype/memory_file_system.dart';
-import 'package:front_end/src/testing/hybrid_file_system.dart';
-import 'package:kernel/ast.dart';
-import 'package:kernel/binary/limited_ast_to_binary.dart';
-import 'package:test/test.dart';
+import 'dart:convert' show LineSplitter, UTF8;
 
-import '../../tool/reload.dart';
+import 'dart:io' show Directory, File, Platform, Process;
 
-main() {
+import 'package:async_helper/async_helper.dart' show asyncTest;
+
+import 'package:expect/expect.dart' show Expect;
+
+import 'package:kernel/ast.dart' show Program;
+
+import 'package:kernel/binary/limited_ast_to_binary.dart'
+    show LimitedBinaryPrinter;
+
+import 'package:front_end/src/api_prototype/compiler_options.dart'
+    show CompilerOptions;
+
+import 'package:front_end/src/api_prototype/file_system.dart' show FileSystem;
+
+import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart'
+    show IncrementalKernelGenerator;
+
+import 'package:front_end/src/api_prototype/memory_file_system.dart'
+    show MemoryFileSystem;
+
+import 'package:front_end/src/compute_platform_binaries_location.dart'
+    show computePlatformBinariesLocation;
+
+import 'package:front_end/src/testing/hybrid_file_system.dart'
+    show HybridFileSystem;
+
+import '../../tool/reload.dart' show RemoteVm;
+
+abstract class TestCase {
   IncrementalKernelGenerator compiler;
   MemoryFileSystem fs;
   Directory outDir;
@@ -31,7 +49,21 @@
   List<Future<String>> lines;
   Future programIsDone;
 
-  setUp(() async {
+  String get name;
+
+  Future run();
+
+  Future test() async {
+    await setUp();
+    try {
+      await run();
+      print("$name done");
+    } finally {
+      await tearDown();
+    }
+  }
+
+  setUp() async {
     outDir = Directory.systemTemp.createTempSync('hotreload_test');
     outputUri = outDir.uri.resolve('test.dill');
     var root = Uri.parse('org-dartlang-test:///');
@@ -40,20 +72,19 @@
     writeFile(fs, 'a.dart', sourceA);
     writeFile(fs, 'b.dart', sourceB);
     writeFile(fs, '.packages', '');
-    compiler = await createIncrementalCompiler(
+    compiler = createIncrementalCompiler(
         'org-dartlang-test:///a.dart', new HybridFileSystem(fs));
     await rebuild(compiler, outputUri); // this is a full compile.
-    compiler.acceptLastDelta();
-  });
+  }
 
-  tearDown(() async {
+  tearDown() async {
     outDir.deleteSync(recursive: true);
     lines = null;
-  });
+  }
 
   Future<int> computeVmPort() async {
     var portLine = await lines[0];
-    expect(observatoryPortRegExp.hasMatch(portLine), isTrue);
+    Expect.isTrue(observatoryPortRegExp.hasMatch(portLine));
     var match = observatoryPortRegExp.firstMatch(portLine);
     return int.parse(match.group(1));
   }
@@ -71,7 +102,7 @@
     var vmArgs = [
       '--enable-vm-service=0', // Note: use 0 to avoid port collisions.
       '--pause_isolates_on_start',
-      '--kernel-binaries=${dartVm.resolve(".").toFilePath()}',
+      '--kernel-binaries=${sdkRoot.toFilePath()}',
       outputUri.toFilePath()
     ];
     vmArgs.add('$reloadCount');
@@ -88,14 +119,14 @@
         new List.generate(expectedLines, (_) => new Completer<String>());
     lines = completers.map((c) => c.future).toList();
     vm.stdout.transform(UTF8.decoder).transform(splitter).listen((line) {
-      expect(i, lessThan(expectedLines));
+      Expect.isTrue(i < expectedLines);
       completers[i++].complete(line);
     }, onDone: () {
-      expect(i, expectedLines);
+      Expect.equals(expectedLines, i);
     });
 
     vm.stderr.transform(UTF8.decoder).transform(splitter).toList().then((err) {
-      expect(err, isEmpty, reason: err.join('\n'));
+      Expect.isTrue(err.isEmpty, err.join('\n'));
     });
 
     programIsDone = vm.exitCode;
@@ -107,89 +138,126 @@
     var port = await computeVmPort();
     var remoteVm = new RemoteVm(port);
     var reloadResult = await remoteVm.reload(outputUri);
-    expect(reloadResult['success'], isTrue);
-    compiler.acceptLastDelta();
+    Expect.isTrue(reloadResult['success']);
     await remoteVm.disconnect();
   }
+}
 
-  test('initial program is valid', () async {
+class InitialProgramIsValid extends TestCase {
+  @override
+  String get name => 'initial program is valid';
+
+  @override
+  Future run() async {
     await startProgram(0);
     await programIsDone;
-    expect(await lines[1], "part1 part2");
-  });
+    Expect.stringEquals("part1 part2", await lines[1]);
+  }
+}
 
-  test('reload after leaf library modification', () async {
+class ReloadAfterLeafLibraryModification extends TestCase {
+  @override
+  String get name => 'reload after leaf library modification';
+
+  @override
+  Future run() async {
     await startProgram(1);
-    expect(await lines[1], "part1 part2");
+    Expect.stringEquals("part1 part2", await lines[1]);
 
     writeFile(fs, 'b.dart', sourceB.replaceAll("part1", "part3"));
     await rebuild(compiler, outputUri);
     await hotReload();
     await programIsDone;
-    expect(await lines[2], "part3 part2");
-  });
+    Expect.stringEquals("part3 part2", await lines[2]);
+  }
+}
 
-  test('reload after non-leaf library modification', () async {
+class ReloadAfterNonLeafLibraryModification extends TestCase {
+  @override
+  String get name => "reload after non-leaf library modification";
+
+  @override
+  Future run() async {
     await startProgram(1);
-    expect(await lines[1], "part1 part2");
+    Expect.stringEquals("part1 part2", await lines[1]);
 
     writeFile(fs, 'a.dart', sourceA.replaceAll("part2", "part4"));
     await rebuild(compiler, outputUri);
     await hotReload();
     await programIsDone;
-    expect(await lines[2], "part1 part4");
-  });
+    Expect.stringEquals("part1 part4", await lines[2]);
+  }
+}
 
-  test('reload after whole program modification', () async {
+class ReloadAfterWholeProgramModification extends TestCase {
+  @override
+  String get name => "reload after whole program modification";
+
+  @override
+  Future run() async {
     await startProgram(1);
-    expect(await lines[1], "part1 part2");
+    Expect.stringEquals("part1 part2", await lines[1]);
 
     writeFile(fs, 'b.dart', sourceB.replaceAll("part1", "part5"));
     writeFile(fs, 'a.dart', sourceA.replaceAll("part2", "part6"));
     await rebuild(compiler, outputUri);
     await hotReload();
     await programIsDone;
-    expect(await lines[2], "part5 part6");
-  });
+    Expect.stringEquals("part5 part6", await lines[2]);
+  }
+}
 
-  test('reload twice', () async {
+class ReloadTwice extends TestCase {
+  @override
+  String get name => "reload twice";
+
+  @override
+  Future run() async {
     await startProgram(2);
-    expect(await lines[1], "part1 part2");
+    Expect.stringEquals("part1 part2", await lines[1]);
 
     writeFile(fs, 'b.dart', sourceB.replaceAll("part1", "part5"));
     writeFile(fs, 'a.dart', sourceA.replaceAll("part2", "part6"));
     await rebuild(compiler, outputUri);
     await hotReload();
-    expect(await lines[2], "part5 part6");
+    Expect.stringEquals("part5 part6", await lines[2]);
 
     writeFile(fs, 'b.dart', sourceB.replaceAll("part1", "part7"));
     writeFile(fs, 'a.dart', sourceA.replaceAll("part2", "part8"));
     await rebuild(compiler, outputUri);
     await hotReload();
     await programIsDone;
-    expect(await lines[3], "part7 part8");
+    Expect.stringEquals("part7 part8", await lines[3]);
+  }
+}
+
+main() {
+  asyncTest(() async {
+    await new InitialProgramIsValid().test();
+    await new ReloadAfterLeafLibraryModification().test();
+    await new ReloadAfterNonLeafLibraryModification().test();
+    await new ReloadAfterWholeProgramModification().test();
+    await new ReloadTwice().test();
   });
 }
 
-var dartVm = Uri.base.resolve(Platform.resolvedExecutable);
-var sdkRoot = dartVm.resolve("patched_sdk/");
+final Uri sdkRoot = computePlatformBinariesLocation();
 
-Future<IncrementalKernelGenerator> createIncrementalCompiler(
+IncrementalKernelGenerator createIncrementalCompiler(
     String entry, FileSystem fs) {
   var entryUri = Uri.base.resolve(entry);
   var options = new CompilerOptions()
     ..sdkRoot = sdkRoot
+    ..librariesSpecificationUri = Uri.base.resolve("sdk/lib/libraries.json")
     ..strongMode = false
-    ..compileSdk = true // the incremental generator requires the sdk sources
-    ..fileSystem = fs
-    ..byteStore = new MemoryByteStore();
-  return IncrementalKernelGenerator.newInstance(options, entryUri);
+    ..fileSystem = fs;
+  return new IncrementalKernelGenerator(options, entryUri);
 }
 
 Future<bool> rebuild(IncrementalKernelGenerator compiler, Uri outputUri) async {
   compiler.invalidate(Uri.parse("org-dartlang-test:///a.dart"));
   compiler.invalidate(Uri.parse("org-dartlang-test:///b.dart"));
-  var program = (await compiler.computeDelta()).newProgram;
+  var program = await compiler.computeDelta();
   if (program != null && !program.libraries.isEmpty) {
     await writeProgram(program, outputUri);
     return true;
diff --git a/pkg/front_end/test/src/incremental/test_all.dart b/pkg/front_end/test/src/incremental/test_all.dart
index 2c05067..3e611d9 100644
--- a/pkg/front_end/test/src/incremental/test_all.dart
+++ b/pkg/front_end/test/src/incremental/test_all.dart
@@ -4,7 +4,6 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import 'combine_test.dart' as combine_test;
 import 'file_state_test.dart' as file_state;
 import 'format_test.dart' as format;
 import 'kernel_driver_test.dart' as kernel_driver;
@@ -12,7 +11,6 @@
 /// Utility for manually running all tests.
 main() {
   defineReflectiveSuite(() {
-    combine_test.main();
     file_state.main();
     format.main();
     kernel_driver.main();
diff --git a/pkg/front_end/test/subpackage_relationships_test.dart b/pkg/front_end/test/subpackage_relationships_test.dart
index e8331ad..a0bc923 100644
--- a/pkg/front_end/test/subpackage_relationships_test.dart
+++ b/pkg/front_end/test/subpackage_relationships_test.dart
@@ -43,7 +43,6 @@
     "lib/src/fasta/dill",
     "lib/src/fasta/kernel",
     'lib/src/fasta/source',
-    'lib/src/incremental',
   ]),
   'lib/src/api_prototype': new SubpackageRules(allowedDependencies: [
     'lib/src',
@@ -161,6 +160,7 @@
     'lib/src/fasta/scanner',
   ]),
   'lib/src/testing': new SubpackageRules(allowedDependencies: [
+    'lib/src',
     'lib/src/api_prototype',
   ]),
 };
diff --git a/pkg/front_end/test/whole_program_test.dart b/pkg/front_end/test/whole_program_test.dart
index d75f25e..6261229 100644
--- a/pkg/front_end/test/whole_program_test.dart
+++ b/pkg/front_end/test/whole_program_test.dart
@@ -8,6 +8,9 @@
 import 'package:async_helper/async_helper.dart' show asyncEnd, asyncStart;
 import 'package:testing/testing.dart' show StdioProcess;
 
+import 'package:front_end/src/compute_platform_binaries_location.dart'
+    show computePlatformBinariesLocation;
+
 final Uri compiler = Uri.base.resolve('pkg/front_end/tool/_fasta/compile.dart');
 
 final Uri transform = Uri.base.resolve('pkg/kernel/bin/transform.dart');
@@ -15,7 +18,8 @@
 
 final Uri packagesFile = Uri.base.resolve('.packages');
 
-final Uri dartVm = Uri.base.resolve(Platform.resolvedExecutable);
+final Uri dartVm =
+    Uri.base.resolveUri(new Uri.file(Platform.resolvedExecutable));
 
 Future main() async {
   asyncStart();
@@ -47,14 +51,14 @@
 }
 
 Future runCompiler(Uri input, Uri output) async {
-  final buildDir = Uri.base.resolve(Platform.resolvedExecutable).resolve(".");
-  final platformDill = buildDir.resolve("vm_platform.dill").toFilePath();
+  final Uri platformDill =
+      computePlatformBinariesLocation().resolve("vm_platform.dill");
 
   final List<String> arguments = <String>[
     '--packages=${packagesFile.toFilePath()}',
     '-c',
     compiler.toFilePath(),
-    '--platform=$platformDill',
+    '--platform=${platformDill.toFilePath()}',
     '--output=${output.toFilePath()}',
     '--packages=${packagesFile.toFilePath()}',
     '--verify',
diff --git a/pkg/front_end/testcases/ast_builder.status b/pkg/front_end/testcases/ast_builder.status
index 8ce4a34..b86de60 100644
--- a/pkg/front_end/testcases/ast_builder.status
+++ b/pkg/front_end/testcases/ast_builder.status
@@ -145,3 +145,4 @@
 type_variable_as_super: Crash
 uninitialized_fields: Crash
 warn_unresolved_sends: Fail
+minimum_int: Crash
diff --git a/pkg/front_end/testcases/dartino/compile_time_error_004.incremental.yaml b/pkg/front_end/testcases/dartino/compile_time_error_004.incremental.yaml
index 679d2ad..704352a 100644
--- a/pkg/front_end/testcases/dartino/compile_time_error_004.incremental.yaml
+++ b/pkg/front_end/testcases/dartino/compile_time_error_004.incremental.yaml
@@ -6,7 +6,7 @@
   // Reproduce a crash when a class has a bad hierarchy
   <<<< {"messages":[],"hasCompileTimeError":1}
   typedef A(C c);
-  ==== {"messages":[],"hasCompileTimeError":1}
+  ==== []
   typedef A(Class c);
   >>>>
 
diff --git a/pkg/front_end/testcases/dartino/compile_time_error_field_becomes_removed_function.incremental.yaml b/pkg/front_end/testcases/dartino/compile_time_error_field_becomes_removed_function.incremental.yaml
index 455ddcc..59d245c 100644
--- a/pkg/front_end/testcases/dartino/compile_time_error_field_becomes_removed_function.incremental.yaml
+++ b/pkg/front_end/testcases/dartino/compile_time_error_field_becomes_removed_function.incremental.yaml
@@ -8,11 +8,9 @@
   class C {
   <<<< {"messages":[],"hasCompileTimeError":1}
     int sync*;
-  ==== {"messages":[],"hasCompileTimeError":1}
-    // TODO(ahe): Should just expect [], no compile-time error
+  ==== []
     sync();
-  ==== {"messages":[],"hasCompileTimeError":1}
-    // TODO(ahe): Should just expect [], no compile-time error
+  ==== []
   >>>>
   }
   main() {
diff --git a/pkg/front_end/testcases/dartino/fix_compile_time_error_in_field.incremental.yaml b/pkg/front_end/testcases/dartino/fix_compile_time_error_in_field.incremental.yaml
index 962e844..25bc1ad 100644
--- a/pkg/front_end/testcases/dartino/fix_compile_time_error_in_field.incremental.yaml
+++ b/pkg/front_end/testcases/dartino/fix_compile_time_error_in_field.incremental.yaml
@@ -9,8 +9,7 @@
   class C {
   <<<< {"messages":[],"hasCompileTimeError":1}
     int sync*;
-  ==== {"messages":[],"hasCompileTimeError":1}
-    // TODO(ahe): There's no compile-time error here
+  ==== []
     int sync;
   >>>>
   }
diff --git a/pkg/front_end/testcases/incremental.status b/pkg/front_end/testcases/incremental.status
index c572cda..f14d52e 100644
--- a/pkg/front_end/testcases/incremental.status
+++ b/pkg/front_end/testcases/incremental.status
@@ -4,4 +4,7 @@
 
 # Status file for the test suite ../test/fasta/incremental_test.dart.
 
-dartino/change_in_part.incremental: Crash # Parts aren't handled correctly
+dartino/override_field_with_method_conflict.incremental: Fail # These tests are the incremental version of tests like language_2/field_override* and language_2/override_field_method*
+dartino/override_getter_with_method_conflict.incremental: Fail # These tests are the incremental version of tests like language_2/field_override* and language_2/override_field_method*
+dartino/override_method_with_field_conflict.incremental: Fail # These tests are the incremental version of tests like language_2/field_override* and language_2/override_field_method*
+dartino/override_method_with_getter_conflict.incremental: Fail # These tests are the incremental version of tests like language_2/field_override* and language_2/override_field_method*
diff --git a/pkg/front_end/testcases/inference/async_await.dart b/pkg/front_end/testcases/inference/async_await.dart
new file mode 100644
index 0000000..4ebadb0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_await.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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+abstract class MyFuture implements Future<int> {}
+
+void test() async {
+  int x0;
+  Future<int> x1;
+  Future<Future<int>> x2;
+  Future<FutureOr<int>> x3;
+  Future<MyFuture> x4;
+  FutureOr<int> x5;
+  FutureOr<Future<int>> x6;
+  FutureOr<FutureOr<int>> x7;
+  FutureOr<MyFuture> x8;
+  MyFuture x9;
+
+  /*@returnType=Future<int>*/ test0() async => x0;
+  /*@returnType=Future<int>*/ test1() async => x1;
+  /*@returnType=Future<Future<int>>*/ test2() async => x2;
+  /*@returnType=Future<FutureOr<int>>*/ test3() async => x3;
+  /*@returnType=Future<MyFuture>*/ test4() async => x4;
+  /*@returnType=Future<int>*/ test5() async => x5;
+  /*@returnType=Future<Future<int>>*/ test6() async => x6;
+  /*@returnType=Future<FutureOr<int>>*/ test7() async => x7;
+  /*@returnType=Future<MyFuture>*/ test8() async => x8;
+  /*@returnType=Future<int>*/ test9() async => x9;
+
+  var /*@type=int*/ y0 = await x0;
+  var /*@type=int*/ y1 = await x1;
+  var /*@type=Future<int>*/ y2 = await x2;
+  var /*@type=FutureOr<int>*/ y3 = await x3;
+  var /*@type=MyFuture*/ y4 = await x4;
+  var /*@type=int*/ y5 = await x5;
+  var /*@type=Future<int>*/ y6 = await x6;
+  var /*@type=FutureOr<int>*/ y7 = await x7;
+  var /*@type=MyFuture*/ y8 = await x8;
+  var /*@type=int*/ y9 = await x9;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/async_await.dart.direct.expect b/pkg/front_end/testcases/inference/async_await.dart.direct.expect
new file mode 100644
index 0000000..5b1671c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_await.dart.direct.expect
@@ -0,0 +1,53 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+abstract class MyFuture extends core::Object implements asy::Future<core::int> {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method test() → void async {
+  core::int x0;
+  asy::Future<core::int> x1;
+  asy::Future<asy::Future<core::int>> x2;
+  asy::Future<asy::FutureOr<core::int>> x3;
+  asy::Future<self::MyFuture> x4;
+  asy::FutureOr<core::int> x5;
+  asy::FutureOr<asy::Future<core::int>> x6;
+  asy::FutureOr<asy::FutureOr<core::int>> x7;
+  asy::FutureOr<self::MyFuture> x8;
+  self::MyFuture x9;
+  function test0() → dynamic async 
+    return x0;
+  function test1() → dynamic async 
+    return x1;
+  function test2() → dynamic async 
+    return x2;
+  function test3() → dynamic async 
+    return x3;
+  function test4() → dynamic async 
+    return x4;
+  function test5() → dynamic async 
+    return x5;
+  function test6() → dynamic async 
+    return x6;
+  function test7() → dynamic async 
+    return x7;
+  function test8() → dynamic async 
+    return x8;
+  function test9() → dynamic async 
+    return x9;
+  dynamic y0 = await x0;
+  dynamic y1 = await x1;
+  dynamic y2 = await x2;
+  dynamic y3 = await x3;
+  dynamic y4 = await x4;
+  dynamic y5 = await x5;
+  dynamic y6 = await x6;
+  dynamic y7 = await x7;
+  dynamic y8 = await x8;
+  dynamic y9 = await x9;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/async_await.dart.outline.expect b/pkg/front_end/testcases/inference/async_await.dart.outline.expect
new file mode 100644
index 0000000..6da6f07
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_await.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+abstract class MyFuture extends core::Object implements asy::Future<core::int> {
+  default constructor •() → void
+    ;
+}
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/async_await.dart.strong.expect b/pkg/front_end/testcases/inference/async_await.dart.strong.expect
new file mode 100644
index 0000000..a9e76dd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_await.dart.strong.expect
@@ -0,0 +1,54 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+abstract class MyFuture extends core::Object implements asy::Future<core::int> {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method timeout(core::Duration timeLimit, {generic-covariant-impl () → asy::FutureOr<core::int> onTimeout}) → asy::Future<core::int>;
+}
+static method test() → void async {
+  core::int x0;
+  asy::Future<core::int> x1;
+  asy::Future<asy::Future<core::int>> x2;
+  asy::Future<asy::FutureOr<core::int>> x3;
+  asy::Future<self::MyFuture> x4;
+  asy::FutureOr<core::int> x5;
+  asy::FutureOr<asy::Future<core::int>> x6;
+  asy::FutureOr<asy::FutureOr<core::int>> x7;
+  asy::FutureOr<self::MyFuture> x8;
+  self::MyFuture x9;
+  function test0() → asy::Future<core::int> async 
+    return x0;
+  function test1() → asy::Future<core::int> async 
+    return x1;
+  function test2() → asy::Future<asy::Future<core::int>> async 
+    return x2;
+  function test3() → asy::Future<asy::FutureOr<core::int>> async 
+    return x3;
+  function test4() → asy::Future<self::MyFuture> async 
+    return x4;
+  function test5() → asy::Future<core::int> async 
+    return x5;
+  function test6() → asy::Future<asy::Future<core::int>> async 
+    return x6;
+  function test7() → asy::Future<asy::FutureOr<core::int>> async 
+    return x7;
+  function test8() → asy::Future<self::MyFuture> async 
+    return x8;
+  function test9() → asy::Future<core::int> async 
+    return x9;
+  core::int y0 = await x0;
+  core::int y1 = await x1;
+  asy::Future<core::int> y2 = await x2;
+  asy::FutureOr<core::int> y3 = await x3;
+  self::MyFuture y4 = await x4;
+  core::int y5 = await x5;
+  asy::Future<core::int> y6 = await x6;
+  asy::FutureOr<core::int> y7 = await x7;
+  self::MyFuture y8 = await x8;
+  core::int y9 = await x9;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.strong.expect
index 9360f52..2417d16 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.strong.expect
@@ -7,6 +7,6 @@
   return x;
 static method test() → dynamic async {
   asy::Future<core::String> f;
-  core::String s = await self::id<asy::FutureOr<core::String>>(f) as{TypeError} core::String;
+  core::String s = await self::id<asy::FutureOr<core::String>>(f);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart
new file mode 100644
index 0000000..6f16f85
--- /dev/null
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*@testedFeatures=inference,error*/
+library test;
+
+class C {
+  dynamic operator []=(dynamic index, dynamic value) {}
+}
+
+abstract class I {
+  void operator []=(dynamic index, dynamic value) {}
+}
+
+class D extends C implements I {
+  operator /*@topType=void*/ []=(dynamic index, dynamic value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.direct.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.direct.expect
new file mode 100644
index 0000000..0403a8c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.direct.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  operator []=(dynamic index, dynamic value) → dynamic {}
+}
+abstract class I extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  operator []=(dynamic index, dynamic value) → void {}
+}
+class D extends self::C implements self::I {
+  default constructor •() → void
+    : super self::C::•()
+    ;
+  operator []=(dynamic index, dynamic value) → dynamic {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.outline.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.outline.expect
new file mode 100644
index 0000000..f58b066
--- /dev/null
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.outline.expect
@@ -0,0 +1,24 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  default constructor •() → void
+    ;
+  operator []=(dynamic index, dynamic value) → dynamic
+    ;
+}
+abstract class I extends core::Object {
+  default constructor •() → void
+    ;
+  operator []=(dynamic index, dynamic value) → void
+    ;
+}
+class D extends self::C implements self::I {
+  default constructor •() → void
+    ;
+  operator []=(dynamic index, dynamic value) → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.strong.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.strong.expect
new file mode 100644
index 0000000..33a26ff
--- /dev/null
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.strong.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  operator []=(dynamic index, dynamic value) → dynamic {}
+}
+abstract class I extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  operator []=(dynamic index, dynamic value) → void {}
+}
+class D extends self::C implements self::I {
+  default constructor •() → void
+    : super self::C::•()
+    ;
+  operator []=(dynamic index, dynamic value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart
new file mode 100644
index 0000000..9ce7fd2
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart
@@ -0,0 +1,19 @@
+// 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 checks that instantiate to bound provides missing type arguments to
+// raw interface types found in bodies of methods in cases where those types
+// refer to classes imported from compiled dill files.
+
+import 'dart:collection';
+
+class A {
+  foo() {
+    LinkedListEntry bar;
+  }
+}
+
+main() {
+  LinkedListEntry bar;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.strong.expect
new file mode 100644
index 0000000..7d5f090
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.strong.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 {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    col::LinkedListEntry<col::LinkedListEntry<dynamic>> bar;
+  }
+}
+static method main() → dynamic {
+  col::LinkedListEntry<col::LinkedListEntry<dynamic>> bar;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart
new file mode 100644
index 0000000..a97c04f
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart
@@ -0,0 +1,19 @@
+// 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 checks that instantiate to bound provides type arguments to raw
+// interface types that are themselves used as type arguments of literal lists
+// found in method bodies.
+
+class A<T extends num> {}
+
+class B {
+  foo() {
+    var a = <A>[];
+  }
+}
+
+main() {
+  var a = <A>[];
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.expect
new file mode 100644
index 0000000..5ee4f7e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    core::List<self::A<core::num>> a = <self::A<core::num>>[];
+  }
+}
+static method main() → dynamic {
+  core::List<self::A<core::num>> a = <self::A<core::num>>[];
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart
new file mode 100644
index 0000000..9fd0356
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart
@@ -0,0 +1,19 @@
+// 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 checks that instantiate to bound leaves interface types that have
+// their type arguments defined by the programmer intact in cases when those
+// interface types are used as type arguments of literal lists that are found in
+// method bodies.
+
+class A<T> {}
+
+class B<U> {
+  fun() {
+    List<A<U>> foo = <A<U>>[];
+    List<A<num>> bar = <A<num>>[];
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.expect
new file mode 100644
index 0000000..e280168
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<U extends core::Object> extends core::Object {
+  default 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_map.dart b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart
new file mode 100644
index 0000000..eb85003
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart
@@ -0,0 +1,19 @@
+// 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 checks that instantiate to bound provides type arguments to raw
+// interface types that are themselves used as type arguments of literal maps
+// found in method bodies.
+
+class A<T extends num> {}
+
+class B {
+  foo() {
+    var a = <A, A>{};
+  }
+}
+
+main() {
+  var a = <A, A>{};
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.expect
new file mode 100644
index 0000000..f59f22b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    core::Map<self::A<core::num>, self::A<core::num>> a = <self::A<core::num>, self::A<core::num>>{};
+  }
+}
+static method main() → dynamic {
+  core::Map<self::A<core::num>, self::A<core::num>> a = <self::A<core::num>, self::A<core::num>>{};
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart
new file mode 100644
index 0000000..3044ab3
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.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.
+
+// This test checks that instantiate to bound provides `dynamic` as the type
+// argument for those positions in type argument lists of interface types that
+// have the bound omitted in the corresponding type parameter, regardless of
+// whether the classes that are referred to by the interface types are imported
+// from compiled dill libraries or are defined within the source files being
+// compiled.  Only those interface types are considered in this test case that
+// are found in type annotations in method bodies.
+
+import 'dart:collection';
+
+class A<T> {}
+
+class C {
+  fun() {
+    A a;
+    DoubleLinkedQueue c;
+  }
+}
+
+main() {
+  A a;
+  DoubleLinkedQueue c;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.expect
new file mode 100644
index 0000000..3cce7c5
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.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 {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  default 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_super_bounded_type.dart b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart
new file mode 100644
index 0000000..511a961
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart
@@ -0,0 +1,19 @@
+// 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 checks that instantiate to bound produces correct super-bounded
+// types from raw interface types that refer to F-bounded classes and are found
+// in method bodies.
+
+class A<T extends A<T>> {}
+
+class B {
+  foo() {
+    A a;
+  }
+}
+
+main() {
+  A a;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.expect
new file mode 100644
index 0000000..cd81801
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.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 {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    self::A<self::A<dynamic>> a;
+  }
+}
+static method main() → dynamic {
+  self::A<self::A<dynamic>> a;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart
new file mode 100644
index 0000000..77ea47d
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart
@@ -0,0 +1,19 @@
+// 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 checks that instantiate to bound provides type arguments to raw
+// typedef types that are themselves used as type arguments of literal lists and
+// are found in method bodies.
+
+typedef A<T extends num>(T p);
+
+class B {
+  foo() {
+    var a = <A>[];
+  }
+}
+
+main() {
+  var a = <A>[];
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.expect
new file mode 100644
index 0000000..e7f6898
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.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 {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    core::List<(core::num) → dynamic> a = <(core::num) → dynamic>[];
+  }
+}
+static method main() → dynamic {
+  core::List<(core::num) → dynamic> a = <(core::num) → dynamic>[];
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart
new file mode 100644
index 0000000..954d5e6
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This test checks that instantiate to bound leaves typedef types that have
+// their arguments defined by the programmer intact in cases when those typedef
+// types are used as type arguments of literal lists and are found in method
+// bodies.
+
+typedef A<T>(T p);
+
+class B<U> {
+  fun() {
+    List<A<U>> foo = <A<U>>[];
+    List<A<num>> bar = <A<num>>[];
+  }
+}
+
+main() {
+  List<A<num>> bar = <A<num>>[];
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.expect
new file mode 100644
index 0000000..16df436
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.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 {
+  default 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_map.dart b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart
new file mode 100644
index 0000000..506f564
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart
@@ -0,0 +1,19 @@
+// 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 checks that instantiate to bound provides type arguments to raw
+// typedef types that are themselves used as type arguments in literal maps
+// found in method bodies.
+
+typedef A<T extends num>(T p);
+
+class B {
+  foo() {
+    var a = <A, A>{};
+  }
+}
+
+main() {
+  var a = <A, A>{};
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.expect
new file mode 100644
index 0000000..85ce2a1
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.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 {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
+  }
+}
+static method main() → dynamic {
+  core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart
new file mode 100644
index 0000000..ab623d6
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This test checks that instantiate to bound provides `dynamic` as the type
+// argument for those positions in type argument lists of typedef types that
+// have the bound omitted in the corresponding type parameters.  Only those
+// typedef types are considered in the test that are found in method bodies.
+
+typedef A<T>(T p);
+
+class C {
+  foo() {
+    A a;
+  }
+}
+
+main() {
+  A a;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.expect
new file mode 100644
index 0000000..588b68c
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.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 {
+  default 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_super_bounded_type.dart b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart
new file mode 100644
index 0000000..36f36a9
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This test checks that instantiate to bound produces correct super-bounded
+// types from raw typedef types that refer to F-bounded typedefs and are found
+// in method bodies.
+
+typedef A<T>(T p);
+
+typedef B<U extends A<U>>(U p);
+
+class C {
+  foo() {
+    B b;
+  }
+}
+
+main() {
+  B b;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.strong.expect
new file mode 100644
index 0000000..24ce2c1
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.strong.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 {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    ((core::Null) → dynamic) → dynamic b;
+  }
+}
+static method main() → dynamic {
+  ((core::Null) → dynamic) → dynamic b;
+}
diff --git a/pkg/front_end/testcases/minimum_int.dart b/pkg/front_end/testcases/minimum_int.dart
new file mode 100644
index 0000000..4b5a61c
--- /dev/null
+++ b/pkg/front_end/testcases/minimum_int.dart
@@ -0,0 +1 @@
+main() => print(-9223372036854775808);
diff --git a/pkg/front_end/testcases/minimum_int.dart.direct.expect b/pkg/front_end/testcases/minimum_int.dart.direct.expect
new file mode 100644
index 0000000..20fea8a
--- /dev/null
+++ b/pkg/front_end/testcases/minimum_int.dart.direct.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+  return core::print(-9223372036854775808);
+
diff --git a/pkg/front_end/testcases/minimum_int.dart.outline.expect b/pkg/front_end/testcases/minimum_int.dart.outline.expect
new file mode 100644
index 0000000..e4f3929
--- /dev/null
+++ b/pkg/front_end/testcases/minimum_int.dart.outline.expect
@@ -0,0 +1,6 @@
+library;
+import self as self;
+
+static method main() → dynamic
+  ;
+
diff --git a/pkg/front_end/testcases/minimum_int.dart.strong.expect b/pkg/front_end/testcases/minimum_int.dart.strong.expect
new file mode 100644
index 0000000..20fea8a
--- /dev/null
+++ b/pkg/front_end/testcases/minimum_int.dart.strong.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+  return core::print(-9223372036854775808);
+
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index 6c33f11..8f24726 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -84,23 +84,14 @@
 inference/downwards_inference_on_function_of_t_using_the_t: Fail # Issue #29798
 inference/downwards_inference_on_list_literals_infer_downwards: RuntimeError
 inference/downwards_inference_yield_yield_star: TypeCheckError
-inference/future_then_2: TypeCheckError
-inference/future_then_4: TypeCheckError
-inference/future_then_5: TypeCheckError
-inference/future_then_conditional_2: TypeCheckError
-inference/future_then_conditional_4: TypeCheckError
-inference/future_then_conditional_5: TypeCheckError
 inference/future_then_explicit_future: Fail # Issue #30040
 inference/future_then_upwards: RuntimeError
 inference/future_then_upwards_2: RuntimeError
-inference/future_union_downwards_2: TypeCheckError
-inference/future_union_downwards_4: TypeCheckError
 inference/generic_functions_return_typedef: Fail # Issue #29798
 inference/generic_methods_correctly_recognize_generic_upper_bound: TypeCheckError
 inference/generic_methods_do_not_infer_invalid_override_of_generic_method: TypeCheckError
 inference/generic_methods_handle_override_of_non_generic_with_generic: TypeCheckError
 inference/generic_methods_infer_js_builtin: Fail # Issue #30029
-inference/generic_methods_nested_generic_instantiation: RuntimeError # Issue #31304
 inference/infer_field_override_multiple: TypeCheckError
 inference/infer_method_missing_params: TypeCheckError
 inference/infer_type_regardless_of_declaration_order_or_cycles: RuntimeError
@@ -119,9 +110,8 @@
 inference_new/infer_field_getter_setter_mismatch: TypeCheckError
 inference_new/infer_field_override_getter_overrides_setter: TypeCheckError
 
-instantiate_to_bound/typedef_literal_map: Fail
-instantiate_to_bound/typedef_literal_list: Fail
 instantiate_to_bound/typedef_super_bounded_type: Fail
+instantiate_to_bound/body_typedef_super_bounded_type: Fail
 
 rasta/abstract_constructor: Fail
 rasta/bad_constructor_redirection: Fail
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index baadc31..0771100 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -266,8 +266,7 @@
     },
 
     "exclude": [
-      "^pkg/analysis_server/lib/src/analysis_server\\.dart",
-      "^pkg/dev_compiler/"
+      "^pkg/analysis_server/lib/src/analysis_server\\.dart"
     ]
   }
 }
diff --git a/pkg/front_end/tool/_fasta/command_line.dart b/pkg/front_end/tool/_fasta/command_line.dart
index 141c10a..aeb2bb5 100644
--- a/pkg/front_end/tool/_fasta/command_line.dart
+++ b/pkg/front_end/tool/_fasta/command_line.dart
@@ -147,7 +147,7 @@
                       "but expected one of: 'true', 'false', 'yes', or 'no'.");
                 }
               } else if (valueSpecification == Uri) {
-                parsedValue = Uri.base.resolve(value);
+                parsedValue = Uri.base.resolveUri(new Uri.file(value));
               } else if (valueSpecification == String) {
                 parsedValue = value;
               } else if (valueSpecification is String) {
diff --git a/pkg/front_end/tool/fasta b/pkg/front_end/tool/fasta
index 9d655de..97a1833 100755
--- a/pkg/front_end/tool/fasta
+++ b/pkg/front_end/tool/fasta
@@ -10,7 +10,7 @@
 
 REPO_DIR="$(cd ${BASH_SOURCE%/*} && git rev-parse --show-toplevel)"
 
-DART_VM="${REPO_DIR}/sdk/bin/dart"
+DART_VM=${DART_VM-"${REPO_DIR}/sdk/bin/dart"}
 
 TOOL_DIR="${REPO_DIR}/pkg/front_end/tool/_fasta"
 
diff --git a/pkg/front_end/tool/fasta_perf.dart b/pkg/front_end/tool/fasta_perf.dart
index 892e5a1..eb0b2b5 100644
--- a/pkg/front_end/tool/fasta_perf.dart
+++ b/pkg/front_end/tool/fasta_perf.dart
@@ -79,7 +79,9 @@
   if (new Directory('runtime/lib/').existsSync()) {
     return Uri.base.resolve("sdk/");
   }
-  return Uri.base.resolve(Platform.resolvedExecutable).resolve('patched_sdk/');
+  return Uri.base
+      .resolveUri(new Uri.file(Platform.resolvedExecutable))
+      .resolve('patched_sdk/');
 }
 
 /// Translates `dart:*` and `package:*` URIs to resolved URIs.
diff --git a/pkg/front_end/tool/incremental_perf.dart b/pkg/front_end/tool/incremental_perf.dart
index dcb5c0b..d9cf2cc 100644
--- a/pkg/front_end/tool/incremental_perf.dart
+++ b/pkg/front_end/tool/incremental_perf.dart
@@ -132,17 +132,14 @@
   final UriTranslator uriTranslator = await processedOptions.getUriTranslator();
 
   collector.start("Initial compilation");
-  var generator = await IncrementalKernelGenerator.newInstance(
-      compilerOptions, entryUri,
-      useMinimalGenerator: useMinimalGenerator);
+  var generator = new IncrementalKernelGenerator(compilerOptions, entryUri);
 
-  var delta = await generator.computeDelta();
-  generator.acceptLastDelta();
+  var program = await generator.computeDelta();
   collector.stop("Initial compilation");
   if (verbose) {
-    print("Libraries changed: ${delta.newProgram.libraries.length}");
+    print("Libraries changed: ${program.libraries.length}");
   }
-  if (delta.newProgram.libraries.length < 1) {
+  if (program.libraries.length < 1) {
     throw "No libraries were changed";
   }
 
@@ -151,14 +148,13 @@
     await applyEdits(
         changeSet.edits, overlayFs, generator, uriTranslator, verbose);
     collector.start(name);
-    delta = await generator.computeDelta();
-    generator.acceptLastDelta();
+    program = await generator.computeDelta();
     collector.stop(name);
     if (verbose) {
       print("Change '${changeSet.name}' - "
-          "Libraries changed: ${delta.newProgram.libraries.length}");
+          "Libraries changed: ${program.libraries.length}");
     }
-    if (delta.newProgram.libraries.length < 1) {
+    if (program.libraries.length < 1) {
       throw "No libraries were changed";
     }
   }
diff --git a/pkg/kernel/bin/transform.dart b/pkg/kernel/bin/transform.dart
index 06fbbd8..399de1c 100755
--- a/pkg/kernel/bin/transform.dart
+++ b/pkg/kernel/bin/transform.dart
@@ -82,7 +82,7 @@
   var program = loadProgramFromBinary(input);
 
   final coreTypes = new CoreTypes(program);
-  final hierarchy = new ClosedWorldClassHierarchy(program);
+  final hierarchy = new ClassHierarchy(program);
   switch (options['transformation']) {
     case 'continuation':
       program = cont.transformProgram(coreTypes, program);
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index f307f05..519bd6d 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -356,6 +356,7 @@
   List<Expression> annotations;
   // Only present if the 'isForwardingStub' flag is set.
   Option<MemberReference> forwardingStubSuperTarget;
+  Option<MemberReference> forwardingStubInterfaceTarget;
   // Can only be absent if abstract, but tag is there anyway.
   Option<FunctionNode> function;
 }
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 89a1643..eb61c33 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -1491,6 +1491,7 @@
   Uri fileUri;
 
   Reference forwardingStubSuperTarget;
+  Reference forwardingStubInterfaceTarget;
 
   Procedure(Name name, this.kind, this.function,
       {bool isAbstract: false,
@@ -1502,7 +1503,8 @@
       int transformerFlags: 0,
       this.fileUri,
       Reference reference,
-      this.forwardingStubSuperTarget})
+      this.forwardingStubSuperTarget,
+      this.forwardingStubInterfaceTarget})
       : super(name, reference) {
     function?.parent = this;
     this.isAbstract = isAbstract;
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 83c5af1..d43b7ff 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -932,6 +932,8 @@
             _disableLazyReading;
     var forwardingStubSuperTarget =
         readAndCheckOptionTag() ? readMemberReference() : null;
+    var forwardingStubInterfaceTarget =
+        readAndCheckOptionTag() ? readMemberReference() : null;
     var function = readFunctionNodeOption(!readFunctionNodeNow, endOffset);
     var transformerFlags = getAndResetTransformerFlags();
     assert(((_) => true)(debugPath.removeLast()));
@@ -947,6 +949,7 @@
       function?.parent = node;
       node.setTransformerFlagsWithoutLazyLoading(transformerFlags);
       node.forwardingStubSuperTarget = forwardingStubSuperTarget;
+      node.forwardingStubInterfaceTarget = forwardingStubInterfaceTarget;
 
       assert((node.forwardingStubSuperTarget != null) ||
           !(node.isForwardingStub && node.function.body != null));
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 3d12707..ef1edea 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -766,6 +766,7 @@
     writeUriReference(node.fileUri);
     writeAnnotationList(node.annotations);
     writeOptionalReference(node.forwardingStubSuperTarget);
+    writeOptionalReference(node.forwardingStubInterfaceTarget);
     writeOptionalNode(node.function);
     _variableIndexer = null;
 
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index 36c3156..5eb3ab5 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -9,10 +9,27 @@
 import 'src/heap.dart';
 import 'type_algebra.dart';
 
+import 'src/incremental_class_hierarchy.dart' show IncrementalClassHierarchy;
+
 /// Interface for answering various subclassing queries.
 /// TODO(scheglov) Several methods are not used, or used only in tests.
 /// Check if these methods are not useful and should be removed .
 abstract class ClassHierarchy {
+  factory ClassHierarchy(Program program) {
+    int numberOfClasses = 0;
+    for (var library in program.libraries) {
+      numberOfClasses += library.classes.length;
+    }
+    return new ClosedWorldClassHierarchy._internal(program, numberOfClasses)
+      .._initialize();
+  }
+
+  /// Use [ClassHierarchy] factory instead.
+  @deprecated
+  factory ClassHierarchy.deprecated_incremental([Program program]) {
+    return new IncrementalClassHierarchy.deprecated();
+  }
+
   /// Given the [unordered] classes, return them in such order that classes
   /// occur after their superclasses.  If some superclasses are not in
   /// [unordered], they are not included.
@@ -264,8 +281,8 @@
 
   final Map<Class, _ClassInfo> _infoFor = <Class, _ClassInfo>{};
 
-  ClosedWorldClassHierarchy(Program program)
-      : this._internal(program, _countClasses(program));
+  ClosedWorldClassHierarchy._internal(this._program, int numberOfClasses)
+      : classes = new List<Class>(numberOfClasses);
 
   @override
   int getClassIndex(Class class_) => _infoFor[class_].topologicalIndex;
@@ -607,11 +624,10 @@
   @override
   ClassHierarchy applyChanges(Iterable<Class> classes) {
     if (classes.isEmpty) return this;
-    return new ClosedWorldClassHierarchy(_program);
+    return new ClassHierarchy(_program);
   }
 
-  ClosedWorldClassHierarchy._internal(this._program, int numberOfClasses)
-      : classes = new List<Class>(numberOfClasses) {
+  void _initialize() {
     // Build the class ordering based on a topological sort.
     for (var library in _program.libraries) {
       for (var classNode in library.classes) {
@@ -644,6 +660,20 @@
       _buildInterfaceMembers(class_, _infoFor[class_], setters: true);
       _buildInterfaceMembers(class_, _infoFor[class_], setters: false);
     }
+
+    for (int i = 0; i < classes.length; ++i) {
+      Class cls = classes[i];
+      if (cls == null) {
+        throw "No class at index $i.";
+      }
+      _ClassInfo info = _infoFor[cls];
+      if (info == null) {
+        throw "No info for ${cls.name} from ${cls.fileUri}.";
+      }
+      if (info.topologicalIndex != i) {
+        throw "Unexpected topologicalIndex (${info.topologicalIndex} != $i) for ${cls.name} from ${cls.fileUri}.";
+      }
+    }
   }
 
   /// Upwards traversal of the class hierarchy that orders classes so super
@@ -736,6 +766,9 @@
 
   List<Member> _buildInterfaceMembers(Class classNode, _ClassInfo info,
       {bool setters}) {
+    if (info == null) {
+      throw "${classNode.fileUri}: No class info for ${classNode.name}";
+    }
     List<Member> members =
         setters ? info.interfaceSetters : info.interfaceGettersAndCalls;
     if (members != null) return members;
@@ -918,14 +951,6 @@
     info.subtypeIntervalList = subtypeSetBuilder.buildIntervalList();
   }
 
-  static int _countClasses(Program program) {
-    int count = 0;
-    for (var library in program.libraries) {
-      count += library.classes.length;
-    }
-    return count;
-  }
-
   /// Creates a histogram such that index `N` contains the number of classes
   /// that have `N` intervals in its subclass or subtype set (whichever is
   /// larger).
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index e461650..1d0f38f 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -404,7 +404,8 @@
         isForwardingSemiStub: node.isForwardingSemiStub,
         transformerFlags: node.transformerFlags,
         fileUri: node.fileUri,
-        forwardingStubSuperTarget: node.forwardingStubSuperTarget)
+        forwardingStubSuperTarget: node.forwardingStubSuperTarget,
+        forwardingStubInterfaceTarget: node.forwardingStubInterfaceTarget)
       ..fileEndOffset = node.fileEndOffset
       ..isGenericContravariant = node.isGenericContravariant;
   }
diff --git a/pkg/kernel/lib/naive_type_checker.dart b/pkg/kernel/lib/naive_type_checker.dart
index c070852..c1716e4 100644
--- a/pkg/kernel/lib/naive_type_checker.dart
+++ b/pkg/kernel/lib/naive_type_checker.dart
@@ -19,8 +19,8 @@
 
   StrongModeTypeChecker(FailureListener failures, Program program,
       {bool ignoreSdk: false})
-      : this._(failures, new CoreTypes(program),
-            new ClosedWorldClassHierarchy(program), ignoreSdk);
+      : this._(failures, new CoreTypes(program), new ClassHierarchy(program),
+            ignoreSdk);
 
   StrongModeTypeChecker._(this.failures, CoreTypes coreTypes,
       ClassHierarchy hierarchy, bool ignoreSdk)
diff --git a/pkg/kernel/lib/src/incremental_class_hierarchy.dart b/pkg/kernel/lib/src/incremental_class_hierarchy.dart
index b5e8bd4..21f219e 100644
--- a/pkg/kernel/lib/src/incremental_class_hierarchy.dart
+++ b/pkg/kernel/lib/src/incremental_class_hierarchy.dart
@@ -11,8 +11,13 @@
 import 'package:kernel/src/heap.dart';
 import 'package:kernel/type_algebra.dart';
 
-/// Lazy and incremental implementation of [ClassHierarchy].
+/// Use [ClassHierarchy] instead.
+@deprecated
 class IncrementalClassHierarchy implements ClassHierarchy {
+  /// Use [ClassHierarchy] instead.
+  @deprecated
+  IncrementalClassHierarchy.deprecated();
+
   /// The next unique identifier for [_ClassInfo]s.
   int _nextId = 0;
 
@@ -24,7 +29,7 @@
   @override
   ClassHierarchy applyChanges(Iterable<Class> classes) {
     if (classes.isEmpty) return this;
-    return new IncrementalClassHierarchy();
+    return new IncrementalClassHierarchy.deprecated();
   }
 
   @override
diff --git a/pkg/kernel/lib/transformations/constants.dart b/pkg/kernel/lib/transformations/constants.dart
index aa5f0cf..9cb7a4d 100644
--- a/pkg/kernel/lib/transformations/constants.dart
+++ b/pkg/kernel/lib/transformations/constants.dart
@@ -33,7 +33,7 @@
     CoreTypes coreTypes,
     ClassHierarchy hierarchy}) {
   coreTypes ??= new CoreTypes(program);
-  hierarchy ??= new ClosedWorldClassHierarchy(program);
+  hierarchy ??= new ClassHierarchy(program);
 
   final typeEnvironment =
       new TypeEnvironment(coreTypes, hierarchy, strongMode: strongMode);
diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/kernel/lib/transformations/continuation.dart
index d9ebd0e..2b77554 100644
--- a/pkg/kernel/lib/transformations/continuation.dart
+++ b/pkg/kernel/lib/transformations/continuation.dart
@@ -760,17 +760,20 @@
   FunctionNode rewrite() {
     var statements = <Statement>[];
 
-    // _AsyncStarStreamController :controller;
+    final elementType = elementTypeFromReturnType(helper.streamClass);
+
+    // _AsyncStarStreamController<T> :controller;
     controllerVariable = new VariableDeclaration(":controller",
-        type: new InterfaceType(helper.asyncStarStreamControllerClass,
-            [elementTypeFromReturnType(helper.streamClass)]));
+        type: new InterfaceType(
+            helper.asyncStarStreamControllerClass, [elementType]));
     statements.add(controllerVariable);
 
     setupAsyncContinuations(statements);
 
-    // :controller = new _AsyncStarStreamController(:async_op);
-    var arguments =
-        new Arguments(<Expression>[new VariableGet(nestedClosureVariable)]);
+    // :controller = new _AsyncStarStreamController<T>(:async_op);
+    var arguments = new Arguments(
+        <Expression>[new VariableGet(nestedClosureVariable)],
+        types: [elementType]);
     var buildController = new ConstructorInvocation(
         helper.asyncStarStreamControllerConstructor, arguments)
       ..fileOffset = enclosingFunction.fileOffset;
diff --git a/pkg/kernel/lib/type_environment.dart b/pkg/kernel/lib/type_environment.dart
index 122c5e9..cb52ecc 100644
--- a/pkg/kernel/lib/type_environment.dart
+++ b/pkg/kernel/lib/type_environment.dart
@@ -61,11 +61,27 @@
     return new InterfaceType(coreTypes.futureClass, <DartType>[type]);
   }
 
-  /// Removes any number of `Future<>` types wrapping a type.
+  /// Removes a level of `Future<>` types wrapping a type.
+  ///
+  /// This implements the function `flatten` from the spec, which unwraps a
+  /// layer of Future or FutureOr from a type.
   DartType unfutureType(DartType type) {
-    return type is InterfaceType && type.classNode == coreTypes.futureClass
-        ? unfutureType(type.typeArguments[0])
-        : type;
+    if (type is InterfaceType) {
+      if (type.classNode == coreTypes.futureOrClass ||
+          type.classNode == coreTypes.futureClass) {
+        return type.typeArguments[0];
+      }
+      // It is a compile-time error to implement, extend, or mixin FutureOr so
+      // we aren't concerned with it.  If a class implements multiple
+      // instantiations of Future, getTypeAsInstanceOf is responsible for
+      // picking the least one in the sense required by the spec.
+      InterfaceType future =
+          hierarchy.getTypeAsInstanceOf(type, coreTypes.futureClass);
+      if (future != null) {
+        return future.typeArguments[0];
+      }
+    }
+    return type;
   }
 
   /// Called if the computation of a static type failed due to a type error.
diff --git a/pkg/kernel/test/class_hierarchy_bench.dart b/pkg/kernel/test/class_hierarchy_bench.dart
index 03060ab..02d6b0c 100644
--- a/pkg/kernel/test/class_hierarchy_bench.dart
+++ b/pkg/kernel/test/class_hierarchy_bench.dart
@@ -41,7 +41,7 @@
   ClassHierarchy buildHierarchy() {
     return options['basic']
         ? new BasicClassHierarchy(program)
-        : new ClosedWorldClassHierarchy(program);
+        : new ClassHierarchy(program);
   }
 
   var watch = new Stopwatch()..start();
diff --git a/pkg/kernel/test/class_hierarchy_membench.dart b/pkg/kernel/test/class_hierarchy_membench.dart
index 4909616..dcec19a 100644
--- a/pkg/kernel/test/class_hierarchy_membench.dart
+++ b/pkg/kernel/test/class_hierarchy_membench.dart
@@ -43,7 +43,7 @@
   ClassHierarchy buildHierarchy() {
     return options['basic']
         ? new BasicClassHierarchy(program)
-        : new ClosedWorldClassHierarchy(program);
+        : new ClassHierarchy(program);
   }
 
   List<ClosedWorldClassHierarchy> keepAlive = <ClosedWorldClassHierarchy>[];
diff --git a/pkg/kernel/test/class_hierarchy_self_check.dart b/pkg/kernel/test/class_hierarchy_self_check.dart
index 4fe7e3f..1c12454 100644
--- a/pkg/kernel/test/class_hierarchy_self_check.dart
+++ b/pkg/kernel/test/class_hierarchy_self_check.dart
@@ -18,8 +18,7 @@
 
 void testClassHierarchyOnProgram(Program program, {bool verbose: false}) {
   BasicClassHierarchy basic = new BasicClassHierarchy(program);
-  ClosedWorldClassHierarchy classHierarchy =
-      new ClosedWorldClassHierarchy(program);
+  ClosedWorldClassHierarchy classHierarchy = new ClassHierarchy(program);
   int total = classHierarchy.classes.length;
   int progress = 0;
   for (var class1 in classHierarchy.classes) {
diff --git a/pkg/kernel/test/class_hierarchy_test.dart b/pkg/kernel/test/class_hierarchy_test.dart
index 536d949..ee2e6c5 100644
--- a/pkg/kernel/test/class_hierarchy_test.dart
+++ b/pkg/kernel/test/class_hierarchy_test.dart
@@ -5,7 +5,6 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
-import 'package:kernel/src/incremental_class_hierarchy.dart';
 import 'package:kernel/testing/mock_sdk_program.dart';
 import 'package:kernel/text/ast_to_text.dart';
 import 'package:kernel/type_algebra.dart';
@@ -15,14 +14,13 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ClosedWorldClassHierarchyTest);
-    defineReflectiveTests(IncrementalClassHierarchyTest);
   });
 }
 
 @reflectiveTest
 class ClosedWorldClassHierarchyTest extends _ClassHierarchyTest {
   ClassHierarchy createClassHierarchy(Program program) {
-    return new ClosedWorldClassHierarchy(program);
+    return new ClassHierarchy(program);
   }
 
   void test_applyChanges() {
@@ -96,31 +94,6 @@
   }
 }
 
-@reflectiveTest
-class IncrementalClassHierarchyTest extends _ClassHierarchyTest {
-  ClassHierarchy createClassHierarchy(Program program) {
-    return new IncrementalClassHierarchy();
-  }
-
-  void test_applyChanges() {
-    var a = addClass(new Class(name: 'A', supertype: objectSuper));
-    addClass(new Class(name: 'B', supertype: a.asThisSupertype));
-
-    _assertTestLibraryText('''
-class A {}
-class B extends self::A {}
-''');
-
-    // No updated classes, the same hierarchy.
-    expect(hierarchy.applyChanges([]), same(hierarchy));
-
-    // Has updated classes, a new hierarchy.
-    var newHierarchy = hierarchy.applyChanges([a]);
-    expect(newHierarchy, isNot(same(hierarchy)));
-    expect(newHierarchy, new isInstanceOf<IncrementalClassHierarchy>());
-  }
-}
-
 abstract class _ClassHierarchyTest {
   Program program;
   CoreTypes coreTypes;
diff --git a/pkg/kernel/test/closures/suite.dart b/pkg/kernel/test/closures/suite.dart
index b9b8056..e29b394 100644
--- a/pkg/kernel/test/closures/suite.dart
+++ b/pkg/kernel/test/closures/suite.dart
@@ -98,7 +98,7 @@
   Future<Result<int>> run(Uri uri, ClosureConversionContext context) async {
     final File generated = new File.fromUri(uri);
     try {
-      Uri vm = Uri.base.resolve(Platform.resolvedExecutable);
+      Uri vm = Uri.base.resolveUri(new Uri.file(Platform.resolvedExecutable));
       final StdioProcess process = await StdioProcess.run(vm.toFilePath(), [
         "--reify",
         "--reify_generic_functions",
diff --git a/pkg/kernel/test/reify/suite.dart b/pkg/kernel/test/reify/suite.dart
index 4e5f7d2..0d7aca2 100644
--- a/pkg/kernel/test/reify/suite.dart
+++ b/pkg/kernel/test/reify/suite.dart
@@ -76,7 +76,7 @@
 
 Future<TestContext> createContext(
     Chain suite, Map<String, String> environment) async {
-  Uri vm = Uri.base.resolve(Platform.resolvedExecutable);
+  Uri vm = Uri.base.resolveUri(new Uri.file(Platform.resolvedExecutable));
   Uri platformBinaries = computePlatformBinariesLocation();
   Uri platform = platformBinaries.resolve("vm_platform.dill");
   bool updateExpectations = environment["updateExpectations"] == "true";
diff --git a/pkg/kernel/test/treeshaker_bench.dart b/pkg/kernel/test/treeshaker_bench.dart
index 9f9354c..07f660e 100644
--- a/pkg/kernel/test/treeshaker_bench.dart
+++ b/pkg/kernel/test/treeshaker_bench.dart
@@ -50,7 +50,7 @@
   ClassHierarchy buildClassHierarchy() {
     return options['basic']
         ? new BasicClassHierarchy(program)
-        : new ClosedWorldClassHierarchy(program);
+        : new ClassHierarchy(program);
   }
 
   CoreTypes coreTypes = new CoreTypes(program);
diff --git a/pkg/kernel/test/treeshaker_check.dart b/pkg/kernel/test/treeshaker_check.dart
index b7a9471..4d40d3d 100644
--- a/pkg/kernel/test/treeshaker_check.dart
+++ b/pkg/kernel/test/treeshaker_check.dart
@@ -23,7 +23,7 @@
   }
   var program = loadProgramFromBinary(args[0]);
   var coreTypes = new CoreTypes(program);
-  var hierarchy = new ClosedWorldClassHierarchy(program);
+  var hierarchy = new ClassHierarchy(program);
   var shaker = new TreeShaker(coreTypes, hierarchy, program);
   shaker.transform(program);
   new TreeShakingSanityCheck(shaker).visit(program);
diff --git a/pkg/kernel/test/treeshaker_dump.dart b/pkg/kernel/test/treeshaker_dump.dart
index 16c1c10..b373fbf 100644
--- a/pkg/kernel/test/treeshaker_dump.dart
+++ b/pkg/kernel/test/treeshaker_dump.dart
@@ -67,7 +67,7 @@
 
   Program program = loadProgramFromBinary(filename);
   CoreTypes coreTypes = new CoreTypes(program);
-  ClassHierarchy hierarchy = new ClosedWorldClassHierarchy(program);
+  ClassHierarchy hierarchy = new ClassHierarchy(program);
   TreeShaker shaker =
       new TreeShaker(coreTypes, hierarchy, program, strongMode: strong);
   int totalClasses = 0;
diff --git a/pkg/kernel/test/treeshaker_membench.dart b/pkg/kernel/test/treeshaker_membench.dart
index ee9e087..596ef87 100644
--- a/pkg/kernel/test/treeshaker_membench.dart
+++ b/pkg/kernel/test/treeshaker_membench.dart
@@ -39,7 +39,7 @@
   bool strongMode = options['strong'];
 
   Program program = loadProgramFromBinary(filename);
-  ClassHierarchy hierarchy = new ClosedWorldClassHierarchy(program);
+  ClassHierarchy hierarchy = new ClassHierarchy(program);
   CoreTypes coreTypes = new CoreTypes(program);
 
   int copyCount = int.parse(options['count']);
diff --git a/pkg/kernel/test/type_subtype_test.dart b/pkg/kernel/test/type_subtype_test.dart
index c75fa8a..1517b25 100644
--- a/pkg/kernel/test/type_subtype_test.dart
+++ b/pkg/kernel/test/type_subtype_test.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:kernel/src/incremental_class_hierarchy.dart';
 import 'package:test/test.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
@@ -223,7 +222,8 @@
       }
     }
   }
-  var hierarchy = new IncrementalClassHierarchy();
+  var program = new Program(libraries: [environment.dummyLibrary]);
+  var hierarchy = new ClassHierarchy(program);
   return new MockSubtypeTester(
       hierarchy,
       objectClass.rawType,
diff --git a/pkg/kernel/test/typecheck.dart b/pkg/kernel/test/typecheck.dart
index e5efb88..f8a054b 100644
--- a/pkg/kernel/test/typecheck.dart
+++ b/pkg/kernel/test/typecheck.dart
@@ -1,10 +1,10 @@
 // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 import 'package:kernel/kernel.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
-import 'package:kernel/src/incremental_class_hierarchy.dart';
 import 'package:kernel/type_checker.dart';
 import 'dart:io';
 
@@ -21,7 +21,7 @@
   }
   var program = loadProgramFromBinary(args[0]);
   var coreTypes = new CoreTypes(program);
-  var hierarchy = new IncrementalClassHierarchy();
+  var hierarchy = new ClassHierarchy(program);
   new TestTypeChecker(coreTypes, hierarchy).checkProgram(program);
 }
 
diff --git a/pkg/pkg.status b/pkg/pkg.status
index c39de25..21a7c83 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -1,21 +1,18 @@
 # Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
-
 # Don't run any test-like files that show up in packages directories. It
 # shouldn't be necessary to run "pub install" in these packages, but if you do
 # it shouldn't break the tests.
-*/packages/*/*: Skip
-*/*/packages/*/*: Skip
-*/*/*/packages/*/*: Skip
-*/*/*/*/packages/*/*: Skip
 */*/*/*/*/packages/*/*: Skip
-
-analysis_server/tool/spec/check_all_test: Skip  # Issue 29133
-analyzer_plugin/tool/spec/check_all_test: Skip  # Issue 29133
-
+*/*/*/*/packages/*/*: Skip
+*/*/*/packages/*/*: Skip
+*/*/packages/*/*: Skip
+*/packages/*/*: Skip
+analysis_server/tool/spec/check_all_test: Skip # Issue 29133
 analyzer/test/generated/compile_time_error_code_driver_test: Slow, Pass
 analyzer/test/generated/compile_time_error_code_kernel_test: Slow, Pass
+analyzer/test/generated/compile_time_error_code_test: Slow, Pass
 analyzer/test/generated/hint_code_kernel_test: Slow, Pass
 analyzer/test/generated/non_error_resolver_driver_test: Slow, Pass
 analyzer/test/generated/non_error_resolver_kernel_test: Slow, Pass
@@ -23,124 +20,42 @@
 analyzer/test/generated/static_warning_code_driver_test: Slow, Pass
 analyzer/test/generated/static_warning_code_kernel_test: Slow, Pass
 analyzer/test/generated/strong_mode_kernel_test: Slow, Pass
-analyzer/test/generated/compile_time_error_code_test: Slow, Pass
 analyzer/test/src/dart/analysis/driver_kernel_test: Slow, Pass
 analyzer/test/src/summary/resynthesize_kernel_test: Slow, Pass
 analyzer/test/src/task/strong/checker_test: Slow, Pass
+analyzer2dart/test/*: Skip # Analyzer2dart is not maintained anymore.
 analyzer_plugin/test/plugin/folding_mixin_test: Slow, Pass
-
-# Analyzer2dart is not maintained anymore.
-analyzer2dart/test/*: Skip
-
-dart_messages/test/dart_messages_test: Skip  # Requires a package root.
-
-# Skip dev_compiler codegen tests
-dev_compiler/test/codegen/*: Skip
-dev_compiler/test/codegen_test: Skip
-dev_compiler/test/options/*: Skip
-dev_compiler/test/sourcemap/*: SkipByDesign
-dev_compiler/test/sourcemap/testfiles/*: SkipByDesign
-dev_compiler/test/worker/*: Skip
-dev_compiler/gen/*: SkipByDesign
-
-# Anything in rasta is input to fasta unit tests and shouldn't be run as tests.
-front_end/test/fasta/rasta/*: SkipByDesign
-
-# sdk_test would take too long to complete, and should be run in a different
-# way.
-front_end/test/fasta/sdk_test: SkipByDesign
-
+analyzer_plugin/tool/spec/check_all_test: Skip # Issue 29133
+dart_messages/test/dart_messages_test: Skip # Requires a package root.
+dev_compiler/gen/*: SkipByDesign # Skip dev_compiler codegen tests
+dev_compiler/test/codegen/*: Skip # Skip dev_compiler codegen tests
+dev_compiler/test/codegen_test: Skip # Skip dev_compiler codegen tests
+dev_compiler/test/options/*: Skip # Skip dev_compiler codegen tests
+dev_compiler/test/sourcemap/*: SkipByDesign # Skip dev_compiler codegen tests
+dev_compiler/test/sourcemap/testfiles/*: SkipByDesign # Skip dev_compiler codegen tests
+dev_compiler/test/worker/*: Skip # Skip dev_compiler codegen tests
+front_end/test/fasta/analyze_test: Pass, Slow
+front_end/test/fasta/ast_builder_test: Pass, Slow
 front_end/test/fasta/bootstrap_test: Pass, Slow
 front_end/test/fasta/compile_test: Pass, Slow
-front_end/test/fasta/strong_test: Pass, Slow
 front_end/test/fasta/outline_test: Pass, Slow
-front_end/test/fasta/ast_builder_test: Pass, Slow
+front_end/test/fasta/rasta/*: SkipByDesign # Anything in rasta is input to fasta unit tests and shouldn't be run as tests.
+front_end/test/fasta/sdk_test: SkipByDesign # sdk_test would take too long to complete, and should be run in a different way.
+front_end/test/fasta/strong_test: Pass, Slow
 front_end/test/minimal_incremental_kernel_generator_test: Slow, Pass
 front_end/test/whole_program_test: Slow, Pass
-front_end/tool/incremental_perf_test: Slow, Pass
-
-# These are not tests but input for tests.
-kernel/testcases/*: Skip
-front_end/testcases/*: Skip
-
-front_end/test/fasta/analyze_test: Pass, Slow
-
-kernel/test/closures_test: Slow, Pass
-
+front_end/testcases/*: Skip # These are not tests but input for tests.
 front_end/tool/_fasta/compile_platform_test: Fail
+front_end/tool/incremental_perf_test: Slow, Pass
+kernel/test/closures_test: Slow, Pass
+kernel/testcases/*: Skip # These are not tests but input for tests.
 
-[ $use_sdk || $mode != release || $compiler != none || $runtime != vm || $arch != x64 ]
-front_end/test/whole_program_test: SkipByDesign
+[ $compiler == dart2analyzer ]
+dev_compiler/test/options/*: SkipByDesign
 
 [ $compiler != dart2analyzer ]
 analyzer/test/src/summary/summarize_fasta_test: RuntimeError, Slow
 
-[ $runtime != vm || $mode != release || $system == windows ]
-front_end/test/fasta/*: Skip
-front_end/tool/_fasta/*: Skip
-kernel/test/closures_test: Skip
-
-# Don't analyze tests in strong mode yet
-[ $compiler == dart2analyzer && $builder_tag == strong ]
-*: Skip # Issue 28649
-
-# Analyze dev_compiler but only run its tests on the vm
-[ $compiler != dart2analyzer && $runtime != vm ]
-dev_compiler/test/*: Skip
-
-[ $compiler == dart2analyzer || $runtime != vm ]
-dev_compiler/test/options/*: SkipByDesign
-
-[ $compiler == none && $runtime == drt ]
-mutation_observer: Skip # Issue 21149
-unittest/*: Skip # Issue 21949
-front_end/*: SkipByDesign
-
-[ $runtime == vm ]
-analysis_server/test/completion_test: Pass, Slow
-analysis_server/test/integration/completion: Pass, Slow
-analysis_server/test/integration/search/find_top_level_declarations_test: Pass, RuntimeError # 31571
-analysis_server/test/integration/edit/format_test: Pass, Slow
-analysis_server/test/integration/analysis/error_test: Pass, Slow
-analysis_server/test/integration/analysis/lint_test: Pass, Slow
-analysis_server/test/integration/edit/import_elements_test: Pass, Slow
-analysis_server/test/integration/edit/organize_directives_test: Pass, Slow
-
-[ $runtime == vm && $checked ]
-analysis_server/test/completion_test: Pass, Slow
-analysis_server/test/integration/edit/sort_members_test: Pass, Slow
-analysis_server/test/services/correction/fix_test: Pass, Slow
-analysis_server/test/socket_server_test: Skip # Pass, Slow
-analyzer/test/generated/non_error_resolver_kernel_test: Skip # Timing out even with Pass, Slow: Issue 30796
-analyzer/test/src/summary/resynthesize_ast_test: Pass, Slow
-analyzer/test/src/task/strong/front_end_inference_test: Pass, Slow
-
-[ $runtime == vm && $checked && $system == windows ]
-front_end/tool/perf_test: Slow, Pass
-
-[ $runtime == vm && $builder_tag == swarming ]
-front_end/test/src/incremental/hot_reload_e2e_test: Pass, RuntimeError # Please triage this failure
-
-[ $runtime == vm && $use_sdk ]
-front_end/test/fasta/*: Skip # Issue 28629
-front_end/tool/_fasta/*: Skip # Issue 28629
-compiler/tool/generate_kernel_test*: Skip # Issue 28629
-front_end/test/src/incremental/hot_reload_e2e_test: Skip # Issue 28629
-kernel/test/metadata_test: Skip # Issue 28629
-
-[ $runtime == vm && $use_sdk ]
-front_end/tool/fasta_perf_test: SkipByDesign # depends on patched_sdk which is not built into the sdk
-front_end/test/kernel_generator_test: SkipByDesign # depends on patched_sdk which is not built into the sdk
-front_end/test/summary_generator_test: SkipByDesign # depends on patched_sdk which is not built into the sdk
-front_end/test/mixin_export_test: SkipByDesign # depends on patched_sdk which is not built into the sdk
-
-[ $runtime == vm && $system == windows]
-analysis_server/*: Skip # Issue 27557
-analysis_server/test/analysis/get_errors_test: Skip # runtime error, Issue 22180
-analysis_server/test/integration/analysis/analysis_options_test: RuntimeError # Issue 24796
-analyzer/test/generated/non_error_resolver_kernel_test: RuntimeError # Issue 30785
-analyzer/tool/task_dependency_graph/check_test: Slow, Pass
-
 [ $compiler == dart2js ]
 analysis_server/test/integration: SkipByDesign # Analysis server integration tests don't make sense to run under dart2js, since the code under test always runs in the Dart vm as a subprocess.
 analyzer_cli/test/*: SkipByDesign # Only meant to run on vm
@@ -153,112 +68,162 @@
 collection/test/equality_test/05: Fail # Issue 1533
 collection/test/equality_test/none: Pass, Fail # Issue 14348
 compiler/tool/*: SkipByDesign # Only meant to run on vm
-front_end/tool/*: SkipByDesign # Only meant to run on vm
-telemetry/test/*: SkipByDesign # Only meant to run on vm
-typed_data/test/typed_buffers_test/01: Fail # Not supporting Int64List, Uint64List.
+front_end/test/dependency_grapher_test: SkipByDesign # Uses dart:io
 front_end/test/incremental_kernel_generator_test: SkipByDesign # Uses dart:io
 front_end/test/incremental_resolved_ast_generator_test: SkipByDesign # Uses dart:io
 front_end/test/memory_file_system_test: CompileTimeError # Issue 23773
-front_end/test/dependency_grapher_test: SkipByDesign # Uses dart:io
-front_end/test/standard_file_system_test: SkipByDesign # Uses dart:io
 front_end/test/src/base/file_repository_test: SkipByDesign # Uses dart:io
 front_end/test/src/base/libraries_reader_test: SkipByDesign # Uses dart:io
 front_end/test/src/base/processed_options_test: SkipByDesign # Uses dart:io
+front_end/test/standard_file_system_test: SkipByDesign # Uses dart:io
 front_end/test/subpackage_relationships_test: SkipByDesign # Uses dart:io
+front_end/tool/*: SkipByDesign # Only meant to run on vm
+telemetry/test/*: SkipByDesign # Only meant to run on vm
+typed_data/test/typed_buffers_test/01: Fail # Not supporting Int64List, Uint64List.
 
-[ $compiler == dart2js && $runtime != d8 ]
-front_end/test/mixin_export_test: RuntimeError # Issue 30576
+[ $compiler == none ]
+kernel/test/closures_test: Fail
 
-[ $compiler == dart2js && $fast_startup ]
-front_end/test/*: SkipByDesign # Tests written with dart:mirrors.
+[ $runtime == dart_precompiled ]
+*: SkipByDesign # The pkg test framework imports dart:mirrors.
 
-[ $compiler == dart2js && $builder_tag != dart2js_analyzer ]
-analyzer/test/*: Skip # Issue 26813
-analyzer/tool/*: Skip # Issue 26813
-analysis_server/test/*: Skip # Issue 26813
-
-[ $compiler == dart2js && $checked ]
-crypto/test/base64_test: Slow, Pass
+[ $runtime == flutter ]
+status_file/*: SkipByDesign # Only meant to run on the standalone VM.
 
 [ $runtime == jsshell ]
 async/test/stream_zip_test: RuntimeError, OK # Issue 26103. Timers are not supported.
 front_end/test/*: RuntimeError, OK, Pass # Issue 26103. Timers are not supported.
 kernel/test/*: RuntimeError, OK # Issue 26103. Timers are not supported.
 
-[ $compiler == dart2js && $runtime == d8 ]
-front_end/test/src/base/uri_resolver_test: SkipByDesign # Relies on access to file system
+[ $runtime == vm ]
+analysis_server/test/completion_test: Pass, Slow
+analysis_server/test/integration/analysis/error_test: Pass, Slow
+analysis_server/test/integration/analysis/lint_test: Pass, Slow
+analysis_server/test/integration/completion: Pass, Slow
+analysis_server/test/integration/edit/format_test: Pass, Slow
+analysis_server/test/integration/edit/import_elements_test: Pass, Slow
+analysis_server/test/integration/edit/organize_directives_test: Pass, Slow
+analysis_server/test/integration/search/find_top_level_declarations_test: Pass, RuntimeError # 31571
+analyzer/test/file_system/physical_resource_provider_test: Pass, Fail # Issue 25472
+analyzer/test/src/task/strong/inferred_type_test: Pass, Slow
+analyzer_cli/test/driver_test: Pass, Slow, Timeout
+mutation_observer: Skip # Skip tests on the VM if the package depends on dart:html
 
+[ $runtime != vm ]
+dev_compiler/test/options/*: SkipByDesign
+front_end/test/src/incremental/hot_reload_e2e_test: Skip
 
-[ $compiler == dart2js && $runtime == drt ]
-async/test/stream_zip_test: RuntimeError, Pass # Issue 18548
-
-[ $compiler == dart2js && ($runtime == chrome || $runtime == ff) ]
-collection/test/unmodifiable_collection_test: SkipSlow # Times out. Issue 22050
-async/test/stream_zip_test: SkipSlow # Times out. Issue 22050
-
-[ $runtime == safarimobilesim ]
-# Unexplained errors only occurring on Safari 6.1 and earlier.
-typed_data/test/typed_buffers_test: RuntimeError
-
-[ $compiler == dart2js && $csp ]
-# This test cannot run under CSP because it is injecting a JavaScript polyfill
-mutation_observer: Skip
-
-[ $compiler == dart2js && $browser ]
-crypto/test/sha256_test: Slow, Pass
-crypto/test/sha1_test: Slow, Pass
+[ $system == windows ]
+front_end/test/src/incremental/hot_reload_e2e_test: Skip # Issue 31901
 
 [ $browser ]
-analyzer_cli/*: SkipByDesign # Uses dart:io.
 */test/analyzer_test: SkipByDesign # No need to run analysis tests on browser bots
 analysis_server/test/*: SkipByDesign # Uses dart:io.
 analysis_server/tool/spec/check_all_test: SkipByDesign # Uses dart:io.
 analyzer/test/*: SkipByDesign # Uses dart:io.
-analyzer/tool/task_dependency_graph/check_test: SkipByDesign # Uses dart:io.
 analyzer/tool/summary/check_test: SkipByDesign # Uses dart:io.
+analyzer/tool/task_dependency_graph/check_test: SkipByDesign # Uses dart:io.
 analyzer2dart/*: SkipByDesign # Uses dart:io.
+analyzer_cli/*: SkipByDesign # Uses dart:io.
 compiler/tool/*: SkipByDesign # Only meant to run on vm
+dart_messages/test/dart_messages_test: Skip # Uses dart:io.
 front_end/tool/*: SkipByDesign # Only meant to run on vm
 http_server/test/*: Fail, OK # Uses dart:io.
+kernel/test/*: SkipByDesign # Uses dart:io and bigints.
 observe/test/transformer_test: Fail, OK # Uses dart:io.
-observe/test/unique_message_test: SkipByDesign  # Uses dart:io.
-dart_messages/test/dart_messages_test: Skip  # Uses dart:io.
+observe/test/unique_message_test: SkipByDesign # Uses dart:io.
+status_file/*: SkipByDesign # Only meant to run on the standalone VM.
+testing/test/analyze_test: SkipByDesign
 
-[ $browser || $jscl ]
+[ $jscl ]
 kernel/test/*: SkipByDesign # Uses dart:io and bigints.
 
-[ $runtime == vm && ($arch == simarm64 || $arch == simarm || $arch == simarmv6 || $arch == simarmv5te || $arch == armv6 || $arch == armv5te || $arch == simdbc64) ]
-# Timeout. These are not unit tests. They do not run efficiently on our
-# simulator or low-end devices.
-*: Skip
-
-[ $runtime == vm ]
-analyzer/test/file_system/physical_resource_provider_test: Pass, Fail # Issue 25472
+[ $arch == x64 && $runtime == vm && $system == windows && $checked ]
 analyzer/test/src/task/strong/inferred_type_test: Pass, Slow
-# Skip tests on the VM if the package depends on dart:html
-mutation_observer: Skip
+
+[ $builder_tag != dart2js_analyzer && $compiler == dart2js ]
+analysis_server/test/*: Skip # Issue 26813
+analyzer/test/*: Skip # Issue 26813
+analyzer/tool/*: Skip # Issue 26813
+
+# Don't analyze tests in strong mode yet
+[ $builder_tag == strong && $compiler == dart2analyzer ]
+*: Skip # Issue 28649
+
+# Analyze dev_compiler but only run its tests on the vm
+[ $compiler != dart2analyzer && $runtime != vm ]
+dev_compiler/test/*: Skip
 
 [ $compiler == dart2js && $runtime == chrome && $system == macos ]
 third_party/di_tests/di_test: Pass, Slow # Issue 22896
 
-[ $arch == x64 && $runtime == vm && $system == windows && $checked ]
-# See: https://build.chromium.org/p/client.dart/builders/analyzer-win7-release-be/builds/3113/steps/analyzer%20unit%20tests/logs/stdio
-analyzer/test/src/task/strong/inferred_type_test: Pass, Slow
+[ $compiler == dart2js && $runtime == d8 ]
+front_end/test/src/base/uri_resolver_test: SkipByDesign # Relies on access to file system
 
-[ $runtime == dart_precompiled ]
-*: SkipByDesign # The pkg test framework imports dart:mirrors.
+[ $compiler == dart2js && $runtime != d8 ]
+front_end/test/mixin_export_test: RuntimeError # Issue 30576
 
-[ $compiler == none ]
-kernel/test/closures_test: Fail
+[ $compiler == dart2js && $runtime == drt ]
+async/test/stream_zip_test: RuntimeError, Pass # Issue 18548
 
-[ $runtime == vm ]
-analyzer_cli/test/driver_test: Pass, Slow, Timeout
+[ $compiler == dart2js && $browser ]
+crypto/test/sha1_test: Slow, Pass
+crypto/test/sha256_test: Slow, Pass
+
+[ $compiler == dart2js && $checked ]
+crypto/test/base64_test: Slow, Pass
+
+[ $compiler == dart2js && $csp ]
+mutation_observer: Skip # This test cannot run under CSP because it is injecting a JavaScript polyfill
+
+[ $compiler == dart2js && $fast_startup ]
+front_end/test/*: SkipByDesign # Tests written with dart:mirrors.
+
+[ $compiler == dart2js && ($runtime == chrome || $runtime == ff) ]
+async/test/stream_zip_test: SkipSlow # Times out. Issue 22050
+collection/test/unmodifiable_collection_test: SkipSlow # Times out. Issue 22050
+
+[ $compiler == none && $runtime == drt ]
+front_end/*: SkipByDesign
+mutation_observer: Skip # Issue 21149
+unittest/*: Skip # Issue 21949
 
 [ $runtime == vm && $system == windows ]
+analysis_server/*: Skip # Issue 27557
+analysis_server/test/analysis/get_errors_test: Skip # runtime error, Issue 22180
+analysis_server/test/integration/analysis/analysis_options_test: RuntimeError # Issue 24796
+analyzer/test/generated/non_error_resolver_kernel_test: RuntimeError # Issue 30785
 analyzer/test/src/task/strong/checker_test: Pass, Slow
+analyzer/tool/task_dependency_graph/check_test: Slow, Pass
 
-[ $browser ]
-testing/test/analyze_test: SkipByDesign
+[ $runtime == vm && $system == windows && $checked ]
+front_end/tool/perf_test: Slow, Pass
 
-[ $browser || $runtime == flutter ]
-status_file/*: SkipByDesign # Only meant to run on the standalone VM.
+[ $runtime == vm && $checked ]
+analysis_server/test/completion_test: Pass, Slow
+analysis_server/test/integration/edit/sort_members_test: Pass, Slow
+analysis_server/test/services/correction/fix_test: Pass, Slow
+analysis_server/test/socket_server_test: Skip # Pass, Slow
+analyzer/test/generated/non_error_resolver_kernel_test: Skip # Timing out even with Pass, Slow: Issue 30796
+analyzer/test/src/summary/resynthesize_ast_test: Pass, Slow
+analyzer/test/src/task/strong/front_end_inference_test: Pass, Slow
+
+[ $runtime == vm && $use_sdk ]
+compiler/tool/generate_kernel_test*: Skip # Issue 31899
+kernel/test/metadata_test: Skip # Issue 31900
+
+# Timeout. These tests do not run efficiently on our simulator or low-end
+# devices.
+[ $runtime == vm && ($arch == armv5te || $arch == armv6 || $arch == simarm || $arch == simarm64 || $arch == simarmv5te || $arch == simarmv6 || $arch == simdbc64) ]
+*: Skip
+
+[ $arch != x64 || $compiler != none || $mode != release || $runtime != vm ]
+front_end/test/whole_program_test: SkipByDesign
+
+[ $mode != release || $runtime != vm ]
+front_end/test/fasta/*: Skip
+front_end/tool/_fasta/*: Skip
+
+[ $mode != release || $runtime != vm || $system == windows ]
+kernel/test/closures_test: Skip
+
diff --git a/pkg/sourcemap_testing/lib/src/stacktrace_helper.dart b/pkg/sourcemap_testing/lib/src/stacktrace_helper.dart
index f84ecbe..4a989c2 100644
--- a/pkg/sourcemap_testing/lib/src/stacktrace_helper.dart
+++ b/pkg/sourcemap_testing/lib/src/stacktrace_helper.dart
@@ -104,7 +104,8 @@
     List<LineException> afterExceptions: const <LineException>[],
     bool useJsMethodNamesOnAbsence: false,
     String Function(String name) jsNameConverter: identityConverter,
-    Directory forcedTmpDir: null}) async {
+    Directory forcedTmpDir: null,
+    int stackTraceLimit: 10}) async {
   Expect.isTrue(test.expectationMap.keys.contains(config),
       "No expectations found for '$config' in ${test.expectationMap.keys}");
 
@@ -132,6 +133,8 @@
   }
   print("Running d8 $output");
   List<String> d8Arguments = <String>[];
+  d8Arguments.add('--stack-trace-limit');
+  d8Arguments.add('$stackTraceLimit');
   d8Arguments.addAll(jsPreambles(input, output));
   d8Arguments.add(output);
   ProcessResult runResult = Process.runSync(d8executable, d8Arguments);
diff --git a/pkg/status_file/test/data/co19-dart2js.status b/pkg/status_file/test/data/co19-dart2js.status
index b7155e0..6f8403f 100644
--- a/pkg/status_file/test/data/co19-dart2js.status
+++ b/pkg/status_file/test/data/co19-dart2js.status
@@ -5264,1323 +5264,6 @@
 LayoutTests/fast/dom/icon-size-property_t01: Pass, RuntimeError # Issue 29632
 LayoutTests/fast/events/event-fire-order_t01: Pass, RuntimeError # Issue 29632
 
-[ $compiler == dart2js && $runtime == safarimobilesim ]
-LayoutTests/fast/alignment/parse-align-items_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/alignment/parse-align-self_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/alignment/parse-justify-self_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/backgrounds/background-repeat-computed-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/backgrounds/repeat/parsing-background-repeat_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/borders/border-image-width-numbers-computed-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/2d.composite.globalAlpha.fillPath_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/2d.fillText.gradient_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.gradient_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.negative_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.veryLarge_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.verySmall_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/alpha_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-alphaImageData-behavior_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-arc-negative-radius_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-arc-zero-lineto_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-before-css_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-bezier-same-endpoint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blend-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blend-solid_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-clipping_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-color-over-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-color-over-gradient_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-color-over-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-color-over-pattern_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-fill-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-global-alpha_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-gradient-over-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-gradient-over-gradient_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-gradient-over-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-gradient-over-pattern_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-image-over-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-image-over-gradient_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-image-over-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-image-over-pattern_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-pattern-over-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-pattern-over-gradient_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-pattern-over-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-pattern-over-pattern_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-transforms_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-composite-canvas_t01: Skip # Times out on Windows 8. Please triage this failure
-LayoutTests/fast/canvas/canvas-composite-stroke-alpha_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-composite-text-alpha_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-currentTransform_t01: RuntimeError # Feature is not implemented
-LayoutTests/fast/canvas/canvas-drawImage-scaled-copy-to-self_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-ellipse-360-winding_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-ellipse-negative-radius_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-ellipse-zero-lineto_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-ellipse_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-empty-image-pattern_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-fillStyle-no-quirks-parsing_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-font-consistency_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-getImageData-invalid_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-getImageData-large-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-getImageData-largeNonintegralDimensions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-imageSmoothingEnabled-repaint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-imageSmoothingEnabled_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-invalid-fillstyle_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-invalid-strokestyle_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-large-dimensions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-large-fills_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-lineDash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-lose-restore-googol-size_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-lose-restore-max-int-size_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-putImageData_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-quadratic-same-endpoint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-resetTransform_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-scale-shadowBlur_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-scale-strokePath-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-setTransform_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/draw-custom-focus-ring_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/drawImage-with-broken-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/drawImage-with-negative-source-destination_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/drawImage-with-valid-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/drawImageFromRect_withToDataURLAsSource_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/fillText-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/getPutImageDataPairTest_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/pointInPath_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/array-bounds-clamping_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/attrib-location-length-limits_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/bad-arguments-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/buffer-bind-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/buffer-data-array-buffer_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/canvas-2d-webgl-texture_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/canvas-resize-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/canvas-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/canvas-zero-size_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/compressed-tex-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias-t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/context-destroyed-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/context-lost-restored_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/context-lost_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/copy-tex-image-and-sub-image-2d_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/css-webkit-canvas-repaint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/css-webkit-canvas_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/draw-arrays-out-of-bounds_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/draw-elements-out-of-bounds_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/draw-webgl-to-canvas-2d_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/drawingbuffer-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/error-reporting_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/framebuffer-object-attachment_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/framebuffer-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/functions-returning-strings_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/get-active-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-bind-attrib-location-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-enable-enum-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-enum-tests_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-get-calls_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-getshadersource_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-getstring_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-object-get-calls_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-pixelstorei_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-teximage_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-uniformmatrix4fv_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-vertex-attrib-zero-issues_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-vertex-attrib_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-vertexattribpointer_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/glsl-conformance_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/index-validation-copies-indices_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/index-validation-crash-with-buffer-sub-data_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/index-validation-verifies-too-many-indices_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/index-validation-with-resized-buffer_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/index-validation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/invalid-UTF-16_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/invalid-passed-params_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/is-object_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/null-object-behaviour_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/null-uniform-location_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/object-deletion-behaviour_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/oes-element-index-uint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/oes-vertex-array-object_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/point-size_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/premultiplyalpha-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/program-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/read-pixels-pack-alignment_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/read-pixels-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/renderbuffer-initialization_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/renderer-and-vendor-strings_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/shader-precision-format_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgb565_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba4444_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba5551_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgb565_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba4444_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba5551_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgb565_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba4444_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba5551_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-uniform-binding-bugs_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-webgl_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-input-validation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-sub-image-2d-bad-args_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-sub-image-2d_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-sub-image-cube-maps_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texImage2DImageDataTest_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texImageTest_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texture-active-bind_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texture-bindings-uneffected-on-resize_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texture-color-profile_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texture-complete_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texture-npot_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texture-transparent-pixels-initialized_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/triangle_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/uniform-location-length-limits_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/uniform-location_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/uninitialized-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/viewport-unchanged-upon-resize_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-composite-modes-repaint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-composite-modes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-depth-texture_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-exceptions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-large-texture_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-layer-update_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-specific_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-texture-binding-preserved_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-unprefixed-context-id_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-viewport-parameters-preserved_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-generated-content/malformed-url_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-generated-content/pseudo-element-events_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/css-generated-content/pseudo-transition-event_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/css-generated-content/pseudo-transition_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/auto-content-resolution-rows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/breadth-size-resolution-grid_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/calc-resolution-grid-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/display-grid-set-get_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/flex-and-minmax-content-resolution-rows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/flex-content-resolution-columns_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/flex-content-resolution-rows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-auto-flow-get-set_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-auto-flow-update_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-container-change-explicit-grid-recompute-child_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-border-grid-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-border-padding-grid-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-empty-row-column_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-min-max-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-padding-grid-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-padding-margin_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-shrink-to-fit_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-area-get-set_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-bad-named-area-auto-placement_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-bad-resolution-double-span_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-change-order-auto-flow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-display_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-horiz-bt_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-vert-lr_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-vert-rl_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-margin-resolution_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-order-auto-flow-resolution_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-template-areas-get-set_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/implicit-rows-auto-resolution_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/justify-self-cell_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/minmax-fixed-logical-height-only_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/minmax-fixed-logical-width-only_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-update_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/percent-padding-margin-resolution-grid-item-update_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/percent-padding-margin-resolution-grid-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/percent-resolution-grid-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/place-cell-by-index_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-intrinsic-dimensions/height-property-value_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-intrinsic-dimensions/multicol_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/add-remove-stylesheets-at-once-minimal-recalc-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/background-position-serialize_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/background-serialize_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/border-image-style-length_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/button-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/checked-pseudo-selector_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/collapsed-whitespace-reattach-in-style-recalc_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/computed-offset-with-zoom_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/content/content-none_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/content/content-normal_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/content/content-quotes-05_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/css-escaped-identifier_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/css-properties-case-insensitive_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/css3-nth-tokens-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/csstext-of-content-string_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/cursor-parsing-quirks_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/deprecated-flexbox-auto-min-size_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/display-inline-block-scrollbar_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/draggable-region-parser_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/dynamic-class-backdrop-pseudo_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/first-child-display-change-inverse_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/focus-display-block-inline_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-face-cache-bug_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-face-unicode-range-load_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-shorthand-from-longhands_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/fontface-properties_t01: RuntimeError # Uses FontFace class not defined for this browser
-LayoutTests/fast/css/fontfaceset-download-error_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/fontfaceset-events_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/fontfaceset-loadingdone_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/getComputedStyle/computed-style-font_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/getComputedStyle/computed-style-with-zoom_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-border-radius-shorthand_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-borderRadius-2_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/html-attr-case-sensitivity_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/id-or-class-before-stylesheet_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/inherit-initial-shorthand-values_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalid-predefined-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalidation/detach-reattach-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalidation/shadow-host-toggle_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalidation/targeted-class-any-pseudo_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalidation/targeted-class-host-pseudo_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalidation/targeted-class-shadow-combinator_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalidation/toggle-style-inside-shadow-root_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/link-alternate-stylesheet-1_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/link-alternate-stylesheet-2_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/link-alternate-stylesheet-3_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/link-alternate-stylesheet-4_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/link-alternate-stylesheet-5_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/media-query-recovery_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/media-rule-no-whitespace_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/modify-ua-rules-from-javascript_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parse-color-int-or-percent-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-at-rule-recovery_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-expr-error-recovery_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-object-fit_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-object-position_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-page-rule_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-selector-error-recovery_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-unexpected-eof_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/pseudo-any_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/pseudo-target-indirect-sibling-001_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/css/pseudo-target-indirect-sibling-002_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/css/readonly-pseudoclass-opera-001_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/readonly-pseudoclass-opera-002_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/readonly-pseudoclass-opera-003_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/readonly-pseudoclass-opera-004_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/readonly-pseudoclass-opera-005_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/readwrite-contenteditable-recalc_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/shorthand-setProperty-important_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/sibling-selectors-dynamic_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/sticky/parsing-position-sticky_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-scoped/style-scoped-in-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-scoped/style-scoped-nested_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-scoped/style-scoped-scoping-nodes-different-order_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-scoped/style-scoped-shadow-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-scoped/style-scoped-with-dom-operation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-scoped/style-scoped-with-important-rule_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-sharing-type-and-readonly_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/stylesheet-enable-first-alternate-on-load-sheet_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/stylesheet-enable-second-alternate-link_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/webkit-keyframes-errors_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/word-break-user-modify-allowed-values_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last-inherited_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-line_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent-inherited_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-justify/getComputedStyle/getComputedStyle-text-justify_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/52776_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Attr/direction-attribute-set-and-cleared_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/DOMException/XPathException_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/DOMException/dispatch-event-exception_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/DOMImplementation/createDocument-namespace-err_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/basic_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-strict-mode-wtih-checkbox_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-user-select-none_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-with-first-letter-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/hittest-relative-to-viewport_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/clone-node_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/createElementNS-namespace-err_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/title-property-creates-title-element_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/title-property-set-multiple-times_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/title-with-multiple-children_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Element/attribute-uppercase_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Element/getBoundingClientRect-getClientRects-relative-to-viewport_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Element/getClientRects_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Element/setAttributeNS-namespace-err_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLAnchorElement/remove-href-from-focused-anchor_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-host_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-hostname_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-pathname_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-autofocus_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-close-event_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-enabled_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-open_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-scrolled-viewport_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-show-modal_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/inert-does-not-match-disabled-selector_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/inert-node-is-unfocusable_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/inert-node-is-unselectable_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/multiple-centered-dialogs_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/non-anchored-dialog-positioning_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/show-modal-focusing-steps_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/submit-dialog-close-event_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/synthetic-click-inert_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-relative_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-static_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDocument/active-element-gets-unforcusable_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLDocument/clone-node_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDocument/set-focus-on-valid-element_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLDocument/title-get_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDocument/title-set_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLElement/insertAdjacentHTML-errors_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLElement/set-inner-outer-optimization_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLElement/spellcheck_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLFormElement/move-option-between-documents_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLImageElement/image-alt-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLImageElement/parse-src_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLInputElement/input-image-alt-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test-nonexistent_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/link-beforeload-recursive_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/prefetch-onerror_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/prefetch_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/resolve-url-on-insertion_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLMeterElement/set-meter-properties_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLOptionElement/collection-setter-getter_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLOutputElement/dom-settable-token-list_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLScriptElement/async-false-inside-async-false-load_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLScriptElement/async-inline-script_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLScriptElement/defer-inline-script_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLScriptElement/defer-onbeforeload_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLScriptElement/script-set-src_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLSelectElement/selected-index-preserved-when-option-text-changes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/cloneNode_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/content-outlives-template-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/contentWrappers_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/custom-element-wrapper-gc_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/cycles-in-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/cycles_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/inertContents_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/innerHTML-inert_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/innerHTML_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/no-form-association_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/ownerDocumentXHTML_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/ownerDocument_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/xhtml-parsing-and-serialization_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/MutationObserver/observe-childList_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/MutationObserver/observe-options-attributes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/MutationObserver/observe-options-character-data_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/MutationObserver/weak-callback-gc-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Node/initial-values_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/NodeIterator/NodeIterator-basic_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Range/bug-19527_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Range/insertNode-empty-fragment-crash_t01: RuntimeError # Please triage this failure
-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-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
-LayoutTests/fast/dom/Range/range-insertNode-separate-endContainer_t01: RuntimeError # Please triage this failure
-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/surroundContents-for-detached-node_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/SelectorAPI/caseID-almost-strict_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/SelectorAPI/caseID_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/SelectorAPI/dumpNodeList-2_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/SelectorAPI/dumpNodeList-almost-strict_t01: RuntimeError # Dartium JSInterop failure
-LayoutTests/fast/dom/SelectorAPI/dumpNodeList_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/SelectorAPI/id-fastpath-almost-strict_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/SelectorAPI/id-fastpath-strict_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/StyleSheet/css-insert-import-rule-to-shadow-stylesheets_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/StyleSheet/css-medialist-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/StyleSheet/detached-shadow-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/StyleSheet/empty-shadow-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Text/next-element-sibling_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Text/previous-element-sibling_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/TreeWalker/TreeWalker-basic_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Window/atob-btoa_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Window/getMatchedCSSRules-nested-rules_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Window/getMatchedCSSRules-parent-stylesheets_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Window/window-resize-contents_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Window/window-resize_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Window/window-scroll-arguments_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/XMLSerializer-attribute-entities_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/XMLSerializer-attribute-namespaces_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/XMLSerializer-doctype2_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/XMLSerializer-double-xmlns_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/anchor-without-content_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/assertion-on-node-removal_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/attribute-namespaces-get-set_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/characterdata-api-arguments_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/client-width-height-quirks_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/comment-not-documentElement_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/createDocumentType-ownerDocument_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/createElementNS-namespace-errors_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/attribute-changed-callback_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/constructor-calls-created-synchronously_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/created-callback_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/document-register-basic_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/document-register-namespace_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/document-register-on-create-callback_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/document-register-svg-extends_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/document-register-type-extensions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/element-names_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/element-type_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/element-upgrade_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/lifecycle-created-createElement-recursion_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/type-extension-undo-assert_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/custom/type-extensions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/unresolved-pseudoclass_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/upgrade-candidate-remove-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/dataset-xhtml_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/dataset_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/document-set-title-mutations_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/document-set-title-no-child-on-empty_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/document-set-title-no-reuse_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/domparser-parsefromstring-mimetype-support_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/elementFromPoint-scaled-scrolled_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/getElementsByClassName/014_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/getElementsByClassName/dumpNodeList_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/horizontal-scrollbar-in-rtl-doesnt-fire-onscroll_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/horizontal-scrollbar-in-rtl_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/horizontal-scrollbar-when-dir-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/html-collections-named-getter-mandatory-arg_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-return-value_t01: RuntimeError # Dartium JSInterop failure
-LayoutTests/fast/dom/implementation-api-args_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/importNode-unsupported-node-type_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/jsDevicePixelRatio_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/location-hash_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/dom/navigatorcontentutils/is-protocol-handler-registered_t01: Skip # API not supported.
-LayoutTests/fast/dom/navigatorcontentutils/register-protocol-handler_t01: Skip # API not supported.
-LayoutTests/fast/dom/navigatorcontentutils/unregister-protocol-handler_t01: Skip # API not supported.
-LayoutTests/fast/dom/node-iterator-with-doctype-root_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/option-properties_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/partial-layout-non-overlay-scrollbars_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/set-innerHTML_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/access-document-of-detached-stylesheetlist-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/base-in-shadow-tree_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-element-api_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-element-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-element-includer_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-element-outside-shadow-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-pseudo-element-css-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-pseudo-element-dynamic-attribute-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-pseudo-element-overridden_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-pseudo-element-relative-selector-css-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-pseudo-element-with-host-pseudo-class_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-reprojection-fallback-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/custom-pseudo-in-selector-api_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/distribution-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/distribution-for-event-path_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/distribution-update-recalcs-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/elementfrompoint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/elements-in-frameless-document_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/event-path-not-in-document_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/event-path_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/form-in-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/get-distributed-nodes-orphan_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-mutation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/getComputedStyle-composed-parent-dirty_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/getelementbyid-in-orphan_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/getelementbyid-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/host-context-pseudo-class-css-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/host-pseudo-class-css-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/host-wrapper-reclaimed_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/insertion-point-list-menu-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/insertion-point-shadow-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/insertion-point-video-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/link-in-shadow-tree_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/nested-reprojection-inconsistent_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/no-renderers-for-light-children_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/offsetWidth-host-style-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/olderShadowRoot_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/pseudoclass-update-checked-option_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-optgroup_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-option_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/pseudoclass-update-enabled-optgroup_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/pseudoclass-update-enabled-option_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/reinsert-insertion-point_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/remove-and-insert-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/remove-styles-in-shadow-crash-2_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/remove-styles-in-shadow-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-aware-shadow-root_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-content-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-disable_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-element-inactive_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-element_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-hierarchy-exception_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-removechild-and-blur-event_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-root-append_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-root-js-api_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-root-node-list_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-root-text-child_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-ul-li_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowdom-dynamic-styling_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowdom-for-input-spellcheck_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowdom-for-input-type-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowdom-for-unknown-with-form_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowhost-keyframes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowroot-clonenode_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowroot-host_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowroot-keyframes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/sibling-rules-dynamic-changes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/stale-distribution-after-shadow-removal_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/style-insertion-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/style-of-distributed-node_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/style-sharing-sibling-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/style-sharing-styles-in-older-shadow-roots_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/suppress-mutation-events-in-shadow-characterdata_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/title-element-in-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/vertical-scrollbar-when-dir-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/xmlserializer-serialize-to-string-exception_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/crash-generated-counter_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/crash-generated-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/crash-generated-quote_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/crash-generated-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/insertAdjacentElement_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/insertAdjacentHTML_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/recursive-layout_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/add-event-without-document_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/clipboard-clearData_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/events/clipboard-dataTransferItemList_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/events/dispatch-event-being-dispatched_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/dispatch-event-no-document_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/events/document-elementFromPoint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/event-creation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/event-listener-html-non-html-confusion_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/event-on-created-document_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/event-on-xhr-document_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/event-trace_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/fire-scroll-event_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/events/initkeyboardevent-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/invalid-003_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/invalid-004_t01: RuntimeError # Please triage this failure
-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/scroll-event-does-not-bubble_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/scroll-event-phase_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/events/wheelevent-constructor_t01: RuntimeError # Safarimobilesim does not support WheelEvent
-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
-LayoutTests/fast/exclusions/parsing/parsing-wrap-through_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/blob-close-read_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/blob-close-revoke_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/blob-close_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/blob-constructor_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/blob-parts-slice-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/blob-slice-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/file-reader-abort-in-last-progress_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/file-reader-methods-illegal-arguments_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/file-reader-readystate_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/url-null_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/xhr-response-blob_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/async-operations_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/directory-entry-to-uri_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-entry-to-uri_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-from-file-entry_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-metadata-after-write_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-abort-continue_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-abort-depth_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-abort_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-empty-blob_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-events_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-gc-blob_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-truncate-extend_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-write-overlapped_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/filesystem-reference_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/filesystem-unserializable_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/filesystem-uri-origin_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/input-access-entries_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-copy_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-get-entry_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-get-metadata_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-get-parent_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-move_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-read-directory_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-remove_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-restricted-chars_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-restricted-names_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-restricted-unicode_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/read-directory-many_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/read-directory_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/simple-readonly-file-object_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/simple-readonly_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/simple-required-arguments-getdirectory_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/simple-required-arguments-getfile_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/simple-temporary_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/snapshot-file-with-gc_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/flexbox/vertical-box-form-controls_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/ValidityState-typeMismatch-email_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/autocomplete_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/autofocus-input-css-style-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/button-baseline-and-collapsing_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/button/button-disabled-blur_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/clone-input-with-dirty-value_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/color/color-setrangetext_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/color/input-value-sanitization-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/control-detach-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/datalist/datalist_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/datalist/input-list_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-change-layout-by-value_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/date/input-date-validation-message_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/date/input-valueasdate-date_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/date/input-valueasnumber-date_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-change-layout-by-value_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/datetimelocal/input-valueasdate-datetimelocal_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/datetimelocal/input-valueasnumber-datetimelocal_t01: RuntimeError # Dartium JSInterop failure
-LayoutTests/fast/forms/file/file-input-capture_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/focus-style-pending_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/forms/form-attribute_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/input-appearance-elementFromPoint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/input-inputmode_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/input-select-webkit-user-select-none_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/input-type-change3_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/input-value-sanitization_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/input-width-height-attributes-without-renderer-loaded-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/interactive-validation-assertion-by-validate-twice_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/forms/interactive-validation-attach-assertion_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/forms/interactive-validation-select-crash_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/forms/listbox-selection-2_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/menulist-disabled-selected-option_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/menulist-selection-reset_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/menulist-submit-without-selection_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/multiple-selected-options-innerHTML_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/option-change-single-selected_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/option-strip-unicode-spaces_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/plaintext-mode-1_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/search-popup-crasher_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/select-clientheight-large-size_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/select-clientheight-with-multiple-attr_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/selection-direction_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/selection-wrongtype_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/setrangetext_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/shadow-tree-exposure_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/textarea-maxlength_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/textarea-paste-newline_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/textarea-selection-preservation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/textarea-set-defaultvalue-after-value_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/html/hidden-attr_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/html/imports/import-element-removed-flag_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/html/imports/import-events_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/html/select-dropdown-consistent-background-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/boundingBox-with-continuation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/continuation-inlines-inserted-in-reverse-after-block_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/inline-position-top-align_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/inline-relative-offset-boundingbox_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/inline-with-empty-inline-children_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/out-of-flow-objects-and-whitespace-after-empty-inline_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/parent-inline-element-padding-contributes-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/positioned-element-padding-contributes-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/innerHTML/innerHTML-custom-tag_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/layers/normal-flow-hit-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/lists/list-style-position-inside_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/loader/about-blank-hash-change_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/loader/about-blank-hash-kept_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/loader/hashchange-event-properties_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/loader/onhashchange-attribute-listeners_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/loader/scroll-position-restored-on-back_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/loader/scroll-position-restored-on-reload-at-load-event_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/loader/stateobjects/replacestate-in-onunload_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/masking/parsing-clip-path-shape_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/masking/parsing-mask-source-type_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/masking/parsing-mask_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/media/matchmedium-query-api_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/media/media-query-list-syntax_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/media/media-query-list_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/media/mq-append-delete_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/media/mq-js-media-except_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/media/mq-js-media-except_t03: RuntimeError # Please triage this failure
-LayoutTests/fast/media/mq-parsing_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/mediastream/RTCIceCandidate_t01: Skip # Please triage this failure
-LayoutTests/fast/mediastream/RTCPeerConnection_t01: Skip #  Issue 23475
-LayoutTests/fast/mediastream/constructors_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/balance-short-trailing-empty-block_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/balance-trailing-border_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/balance-trailing-border_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/break-after-always-bottom-margin_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/break-properties_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/columns-shorthand-parsing_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/cssom-view_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/float-truncation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/hit-test-above-or-below_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/hit-test-end-of-column-with-line-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/hit-test-end-of-column_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/hit-test-float_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/hit-test-gap-between-pages-flipped_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/newmulticol/balance-maxheight_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/newmulticol/balance_t07: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/newmulticol/balance_t08: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/newmulticol/balance_t09: Skip # Times out. Please triage this failure
-LayoutTests/fast/multicol/newmulticol/balance_t10: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/vertical-lr/break-properties_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/vertical-lr/float-truncation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/vertical-rl/break-properties_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/vertical-rl/float-truncation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/widows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/widows_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/overflow/child-100percent-height-inside-fixed-container-with-overflow-auto_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/overflow/replaced-child-100percent-height-inside-fixed-container-with-overflow-auto_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/overflow/scrollbar-restored_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/parser/foster-parent-adopted_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/parser/fragment-parser-doctype_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/parser/innerhtml-with-prefixed-elements_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/parser/pre-first-line-break_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/available-height-for-content_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/container-width-zero_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-anonymous-table-cell_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/preferred-widths_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/table-percent-height-text-controls_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/table-percent-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/table-percent-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/ruby/ruby-line-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/scrolling/scroll-element-into-view_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/parsing/parsing-shape-image-threshold_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/parsing/parsing-shape-lengths_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/parsing/parsing-shape-margin_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/parsing/parsing-shape-outside-none_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/parsing/parsing-shape-outside_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/parsing/parsing-shape-property-aliases_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-big-box-border-radius_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-diamond-margin-polygon_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-margin-left_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-margin-right_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t02: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-left_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-right_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/speechsynthesis/speech-synthesis-boundary-events_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/speechsynthesis/speech-synthesis-cancel_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/speechsynthesis/speech-synthesis-pause-resume_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/speechsynthesis/speech-synthesis-speak_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/speechsynthesis/speech-synthesis-utterance-uses-voice_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/speechsynthesis/speech-synthesis-voices_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/storage/disallowed-storage_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/storage/storage-disallowed-in-data-url_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/sub-pixel/boundingclientrect-subpixel-margin_t01: Skip # Issue 747
-LayoutTests/fast/sub-pixel/computedstylemargin_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/sub-pixel/cssom-subpixel-precision_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/sub-pixel/float-list-inside_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/sub-pixel/inline-block-with-padding_t01: Skip # Issue 747
-LayoutTests/fast/sub-pixel/layout-boxes-with-zoom_t01: Pass, RuntimeError # Issue 747
-LayoutTests/fast/sub-pixel/shadows-computed-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/sub-pixel/size-of-span-with-different-positions_t01: Skip # Issue 747
-LayoutTests/fast/svg/getbbox_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/svg/tabindex-focus_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/svg/whitespace-angle_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/svg/whitespace-integer_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/svg/whitespace-length_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/svg/whitespace-number_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/absolute-table-percent-lengths_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/caption-orthogonal-writing-mode-sizing_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/css-table-max-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/css-table-max-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/css-table-width-with-border-padding_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/fixed-table-layout-width-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/hittest-tablecell-right-edge_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/hittest-tablecell-with-borders-right-edge_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/html-table-width-max-width-constrained_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/incorrect-colgroup-span-values_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/large-shrink-wrapped-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/margins-perpendicular-containing-block_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/min-width-css-block-table_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/table/min-width-css-inline-table_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/table/min-width-html-block-table_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/table/min-width-html-inline-table_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/table/nested-tables-with-div-offset_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/padding-height-and-override-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/switch-table-layout-dynamic-cells_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/switch-table-layout-multiple-section_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/switch-table-layout_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows-except-overlapped_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-cell-offset-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-colgroup-present-after-table-row_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-rowspan-cell-with-empty-cell_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-sections-border-spacing_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-with-content-width-exceeding-max-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/find-case-folding_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/find-russian_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/find-soft-hyphen_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/find-spaces_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/font-ligature-letter-spacing_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/text/font-ligatures-linebreak-word_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/font-ligatures-linebreak_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/glyph-reordering_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/international/cjk-segmentation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/international/iso-8859-8_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/international/listbox-width-rtl_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/international/thai-offsetForPosition-inside-character_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/ipa-tone-letters_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/line-break-after-question-mark_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/line-breaks-after-hyphen-before-number_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/remove-zero-length-run_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/sub-pixel/text-scaling-ltr_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/sub-pixel/text-scaling-pixel_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/sub-pixel/text-scaling-rtl_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/sub-pixel/text-scaling-vertical_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/sub-pixel/text-scaling-webfont_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/text-combine-shrink-to-fit_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/tokenizer/entities_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/tokenizer/entities_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/tokenizer/entities_t03: RuntimeError # Please triage this failure
-LayoutTests/fast/transforms/bounding-rect-zoom_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/transforms/hit-test-large-scale_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/anchor_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/file-http-base_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/file_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/host-lowercase-per-scheme_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/host_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/idna2003_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/idna2008_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/invalid-urls-utf8_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/ipv4_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/ipv6_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/path_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/port_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/query_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/relative-unix_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/relative-win_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/relative_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/safari-extension_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/segments-from-data-url_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/segments_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/standard-url_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/writing-mode/auto-sizing-orthogonal-flows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/writing-mode/table-hit-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/writing-mode/vertical-font-vmtx-units-per-em_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-get_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-arraybuffer_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-before-open-sync-request_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-sync-request_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-set-responsetype_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Borrowed/cz_20030217_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Borrowed/namespace-nodes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Core/test_core_functions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Core/test_core_functions_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Core/test_node_test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Core/test_node_test_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Core/test_parser_t01: RuntimeError # Dartium JSInterop failure
-LayoutTests/fast/xpath/ambiguous-operators_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/attr-namespace_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/ensure-null-namespace_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/implicit-node-args_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/invalid-resolver_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/node-name-case-sensitivity_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/node-name-case-sensitivity_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/position_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/py-dom-xpath/abbreviations_t01: RuntimeError # Dartium JSInterop failure
-LayoutTests/fast/xpath/py-dom-xpath/axes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/py-dom-xpath/data_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/py-dom-xpath/expressions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/py-dom-xpath/paths_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/reverse-axes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/xpath-template-element_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xsl/default-html_t01: RuntimeError # Please triage this failure
-LibTest/async/Future/doWhile_A05_t01: RuntimeError # Please triage this failure
-LibTest/async/Future/forEach_A04_t02: RuntimeError # Please triage this failure
-LibTest/async/Stream/timeout_A01_t01: Pass, RuntimeError # Please triage this failure
-LibTest/async/Stream/timeout_A03_t01: Pass, RuntimeError # Please triage this failure
-LibTest/async/Stream/timeout_A04_t01: Pass, RuntimeError # Please triage this failure
-LibTest/core/List/List_A02_t01: RuntimeError # Please triage this failure
-LibTest/core/List/List_A03_t01: RuntimeError # Please triage this failure
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: RuntimeError # Issue 22200
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: RuntimeError # Issue 22200
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: RuntimeError # Issue 22200
-LibTest/core/double/roundToDouble_A01_t01: RuntimeError # Please triage this failure
-LibTest/core/double/round_A01_t01: RuntimeError # Please triage this failure
-LibTest/core/int/compareTo_A01_t01: RuntimeError # Please triage this failure
-LibTest/core/int/operator_left_shift_A01_t01: RuntimeError # Please triage this failure
-LibTest/core/int/operator_remainder_A01_t03: RuntimeError # Please triage this failure
-LibTest/core/int/operator_truncating_division_A01_t02: RuntimeError # Please triage this failure
-LibTest/core/int/remainder_A01_t01: RuntimeError # Please triage this failure
-LibTest/core/int/remainder_A01_t03: RuntimeError # Please triage this failure
-LibTest/core/int/toRadixString_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t03: RuntimeError # Please triage this failure
-LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t06: RuntimeError # Please triage this failure
-LibTest/html/Document/childNodes_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Document/clone_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Document/clone_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Document/getElementsByTagName_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Document/securityPolicy_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/Element.tag_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/attributeChanged_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/borderEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/contentEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/dataset_A02_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/enteredView_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/getAttributeNS_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/getAttributeNS_A02_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/getBoundingClientRect_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Element/getClientRects_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Element/getNamespacedAttributes_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/isContentEditable_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/isContentEditable_A02_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/isTagSupported_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/isTagSupported_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Element/leftView_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/marginEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/mouseWheelEvent_A01_t01: Skip # Safari mobile sim does not support WheelEvent
-LibTest/html/Element/onMouseWheel_A01_t01: Skip # Safari mobile sim does not support WheelEvent
-LibTest/html/Element/onTransitionEnd_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/paddingEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/querySelectorAll_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Element/replaceWith_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Element/tagName_A01_t03: RuntimeError # Please triage this failure
-LibTest/html/Element/transitionEndEvent_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/getAllResponseHeaders_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/getResponseHeader_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/getString_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/onError_A01_t02: Skip # Times out. Please triage this failure
-LibTest/html/HttpRequest/request_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/responseText_A01_t02: Skip # Times out. Please triage this failure
-LibTest/html/HttpRequest/responseType_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/responseType_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/setRequestHeader_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/statusText_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/status_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequestUpload/onError_A01_t02: Skip # Times out. Please triage this failure
-LibTest/html/HttpRequestUpload/onLoadEnd_A01_t01: Skip # Times out. Please triage this failure
-LibTest/html/HttpRequestUpload/onLoadStart_A01_t01: Skip # Times out. Please triage this failure
-LibTest/html/HttpRequestUpload/onLoad_A01_t01: Skip # Times out. Please triage this failure
-LibTest/html/IFrameElement/IFrameElement.created_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/attributeChanged_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/attributes_setter_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/blur_A01_t01: Skip # Times out. Please triage this failure
-LibTest/html/IFrameElement/borderEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/clone_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/contentWindow_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/createFragment_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/createFragment_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/createFragment_A01_t03: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/createShadowRoot_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/getNamespacedAttributes_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/innerHtml_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/isContentEditable_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/leftView_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/marginEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/mouseWheelEvent_A01_t01: Skip # Safari mobile sim does not support WheelEvent
-LibTest/html/IFrameElement/onMouseWheel_A01_t01: Skip # Safari mobile sim does not support WheelEvent
-LibTest/html/IFrameElement/offsetTo_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/onTransitionEnd_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/outerHtml_setter_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/paddingEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/querySelector_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/setInnerHtml_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/tagName_A01_t03: RuntimeError # Please triage this failure
-LibTest/html/Node/append_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Node/nodes_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Node/nodes_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Node/parent_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Node/previousNode_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/close_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/document_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/find_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/find_A03_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/find_A06_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/moveBy_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/moveTo_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/moveTo_A02_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/open_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/postMessage_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/postMessage_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Window/requestFileSystem_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/requestFileSystem_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Window/requestFileSystem_A02_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/resizeBy_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/resizeTo_A01_t01: RuntimeError # Please triage this failure
-LibTest/typed_data/Float32x4List/Float32x4List.view_A06_t01: RuntimeError # Please triage this failure
-LibTest/typed_data/Int32x4/operator_OR_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/DOMEvents/approved/EventObject.after.dispatchEvenr_t01: RuntimeError # Please triage this failure
-WebPlatformTest/DOMEvents/approved/EventObject.multiple.dispatchEvent_t01: RuntimeError # Please triage this failure
-WebPlatformTest/DOMEvents/approved/ProcessingInstruction.DOMCharacterDataModified_t01: Skip # Times out. Please triage this failure
-WebPlatformTest/DOMEvents/approved/addEventListener.optional.useCapture_t01: RuntimeError # Please triage this failure
-WebPlatformTest/Utils/test/asyncTestFail_t01: RuntimeError # Please triage this failure
-WebPlatformTest/Utils/test/asyncTestFail_t02: RuntimeError # Please triage this failure
-WebPlatformTest/Utils/test/asyncTestTimeout_t01: Skip # Times out. Please triage this failure
-WebPlatformTest/custom-elements/concepts/type_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/concepts/type_A04_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/concepts/type_A05_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/concepts/type_A06_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/concepts/type_A07_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/concepts/type_A08_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A02_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A03_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A04_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A05_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A02_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A03_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A04_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A05_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t02: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/isAttribute_A02_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/isAttribute_A03_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/localName_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/namespace_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/EventTarget/dispatchEvent_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/EventTarget/dispatchEvent_A02_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/EventTarget/dispatchEvent_A03_t01: Skip # Times out. Please triage this failure
-WebPlatformTest/dom/events/type_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/DOMImplementation-createDocumentType_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/DOMImplementation-createDocument_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/DOMImplementation-hasFeature_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Document-adoptNode_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Document-createElementNS_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Document-getElementsByTagName_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Document-importNode_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Element-childElementCount_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Node-appendChild_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Node-appendChild_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Node-insertBefore_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Node-isEqualNode_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Node-replaceChild_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/attributes_A04_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/attributes_A05_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A05_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A06_t03: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t03: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A08_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A09_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A09_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttribute_A02_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttribute_A02_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttribute_A03_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/ranges/Range-attributes_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/ranges/Range-comparePoint_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/ranges/Range-comparePoint_t03: RuntimeError # Please triage this failure
-WebPlatformTest/dom/ranges/Range-detach_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-imports/link-import_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-imports/link-import_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html-imports/loading-import_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/additions-to-the-steps-to-clone-a-node/template-clone-children_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/additions-to-the-steps-to-clone-a-node/templates-copy-document-owner_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/definitions/template-contents-owner-document-type_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/definitions/template-contents-owner-test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/definitions/template-contents_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/innerhtml-on-templates/innerhtml_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-foster-parenting/template-is-a-foster-parent-element_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-foster-parenting/template-is-not-a-foster-parent-element_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-body-token_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-frameset-token_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-head-token_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-html-token_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/start-tag-body_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-table-insertion-mode/end-tag-table_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/appending-to-a-template/template-child-nodes_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-row-context_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/creating-an-element-for-the-token/template-owner-document_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/serializing-html-templates/outerhtml_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/content-attribute_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/node-document-changes_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01 : RuntimeError # In Safari mobile sim, setting innerHTML on a Frameset element does nothing.
-WebPlatformTest/html-templates/template-element/template-content-node-document_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/template-content_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-image_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-video_t01: Skip # Times out. Please triage this failure
-WebPlatformTest/html/browsers/browsing-the-web/read-text/load-text-plain_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.body-getter_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.body-setter_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-namespace_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t05: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t07: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/elements/global-attributes/dataset-delete_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/elements/global-attributes/dataset-get_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/elements/global-attributes/dataset-set_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/document-metadata/styling/LinkStyle_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/embedded-content/media-elements/error-codes/error_t01: Skip # Times out. Please triage this failure
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/mode_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/attributes-common-to-form-controls/formAction_document_address_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/attributes-common-to-form-controls/formaction_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/textfieldselection/selection_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setRangeText_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-button-element/button-validation_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-datalist-element/datalistelement_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-datalist-element/datalistoptions_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-fieldset-element/disabled_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-form-element/form-autocomplete_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-form-element/form-elements-matches_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-form-element/form-elements-nameditem_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/color_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/date_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/datetime-local_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/datetime_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/datetime_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/email_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/hidden_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/input-textselection_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/month_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/password_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/range_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/text_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/time_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/time_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/type-change-state_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/url_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/valueMode_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/week_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-meter-element/meter_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-option-element/option-text-recurse_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-option-element/option-text-spaces_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/grouping-content/the-blockquote-element/grouping-blockquote_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/interactive-elements/the-details-element/toggleEvent_t01: Skip # Times out. Please triage this failure
-WebPlatformTest/html/semantics/interactive-elements/the-dialog-element/dialog-close_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/interactive-elements/the-dialog-element/dialog-showModal_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/scripting-1/the-script-element/async_t11: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/scripting-1/the-script-element/script-text_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/checked_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/default_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/dir_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/disabled_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/enabled_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/focus_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/indeterminate_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/inrange-outofrange_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/valid-invalid_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/tabular-data/the-table-element/table-insertRow_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/tabular-data/the-table-element/table-rows_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/tabular-data/the-tr-element/rowIndex_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/syntax/parsing/Document.getElementsByTagName-foreign_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/syntax/serializing-html-fragments/outerHTML_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t01: Skip # Times out. Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t03: RuntimeError # Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t04: RuntimeError # Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t05: RuntimeError # Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t06: RuntimeError # Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol_t00: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-004_t02: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/elements-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-event-interface/event-path-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-007_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-008_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-009_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-010_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-011_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-012_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-013_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-007_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-010_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-004_t02: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-006_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-003_t02: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-dispatch/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-dispatch/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-dispatch/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-retargeting/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-retargeting/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-retargeting/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-retargeting/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-006_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-007_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-008_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-009_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t02: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t03: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t04: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t05: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t06: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/inert-html-elements/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/composition/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/custom-pseudo-elements/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/distribution-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/nested-shadow-trees/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/rendering-shadow-trees/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/reprojection/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-006_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-017_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/dom-tree-accessors-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/selectors-api-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/selectors-api-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/shadow-root-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-007_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-009_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-011_t01: RuntimeError # Please triage this failure
-WebPlatformTest/webstorage/event_constructor_t01: RuntimeError # Please triage this failure
-WebPlatformTest/webstorage/event_constructor_t02: RuntimeError # Please triage this failure
-WebPlatformTest/webstorage/event_local_key_t01: RuntimeError # Please triage this failure
-WebPlatformTest/webstorage/event_session_key_t01: RuntimeError # Please triage this failure
-
 [ $compiler == dart2js && $runtime == ie11 ]
 Language/Expressions/Conditional/type_t04: Skip # Times out. Please triage this failure
 Language/Expressions/Identifier_Reference/evaluation_function_t02: Skip # Times out. Please triage this failure
diff --git a/pkg/testing/lib/src/discover.dart b/pkg/testing/lib/src/discover.dart
index 2690ce9..edcbf03 100644
--- a/pkg/testing/lib/src/discover.dart
+++ b/pkg/testing/lib/src/discover.dart
@@ -69,7 +69,9 @@
   if (dartSdkPath != null) {
     return Uri.base.resolveUri(new Uri.file(dartSdkPath));
   } else {
-    return Uri.base.resolve(Platform.resolvedExecutable).resolve("../");
+    return Uri.base
+        .resolveUri(new Uri.file(Platform.resolvedExecutable))
+        .resolve("../");
   }
 }
 
diff --git a/pkg/vm/bin/gen_kernel.dart b/pkg/vm/bin/gen_kernel.dart
index 2fc8bf6..8a501f5 100644
--- a/pkg/vm/bin/gen_kernel.dart
+++ b/pkg/vm/bin/gen_kernel.dart
@@ -24,7 +24,10 @@
       help:
           'Produce kernel file for AOT compilation (enables global transformations).',
       defaultsTo: false)
-  ..addFlag('strong-mode', help: 'Enable strong mode', defaultsTo: true);
+  ..addFlag('strong-mode', help: 'Enable strong mode', defaultsTo: true)
+  ..addFlag('embed-sources',
+      help: 'Embed source files in the generated kernel program',
+      defaultsTo: true);
 
 final String _usage = '''
 Usage: dart pkg/vm/bin/gen_kernel.dart --platform vm_platform_strong.dill [options] input.dart
@@ -68,7 +71,8 @@
     ..linkedDependencies = <Uri>[Uri.base.resolve(platformKernel)]
     ..packagesFileUri = packages != null ? Uri.base.resolve(packages) : null
     ..reportMessages = true
-    ..onError = errorDetector;
+    ..onError = errorDetector
+    ..embedSourceText = options['embed-sources'];
 
   Program program = await compileToKernel(
       Uri.base.resolve(filename), compilerOptions,
diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart
index 46a4c7c..da72077 100644
--- a/pkg/vm/bin/kernel_service.dart
+++ b/pkg/vm/bin/kernel_service.dart
@@ -106,12 +106,9 @@
   @override
   Future<Program> compileInternal(Uri script) async {
     if (generator == null) {
-      generator = await IncrementalKernelGenerator.newInstance(options, script);
+      generator = new IncrementalKernelGenerator(options, script);
     }
-    DeltaProgram deltaProgram = await generator.computeDelta();
-    // TODO(aam): Accepting/rejecting should be done based on VM response.
-    generator.acceptLastDelta();
-    return deltaProgram.newProgram;
+    return await generator.computeDelta();
   }
 
   void invalidate(Uri uri) {
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index 7f7158b..281f67c 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -19,6 +19,11 @@
 
 import 'transformations/devirtualization.dart' as devirtualization
     show transformProgram;
+import 'transformations/type_flow/transformer.dart' as globalTypeFlow
+    show transformProgram;
+
+// Flag to enable global type flow analysis and related transformations.
+const kUseGlobalTypeFlow = const bool.fromEnvironment('use.global.type.flow');
 
 /// Generates a kernel representation of the program whose main library is in
 /// the given [source]. Intended for whole program (non-modular) compilation.
@@ -49,7 +54,11 @@
   if (strongMode) {
     final coreTypes = new CoreTypes(program);
 
-    devirtualization.transformProgram(coreTypes, program);
+    if (kUseGlobalTypeFlow) {
+      globalTypeFlow.transformProgram(coreTypes, program);
+    } else {
+      devirtualization.transformProgram(coreTypes, program);
+    }
   }
 }
 
diff --git a/pkg/vm/lib/transformations/devirtualization.dart b/pkg/vm/lib/transformations/devirtualization.dart
index 7cca514..550ece77 100644
--- a/pkg/vm/lib/transformations/devirtualization.dart
+++ b/pkg/vm/lib/transformations/devirtualization.dart
@@ -14,8 +14,7 @@
 /// Devirtualization of method invocations based on the class hierarchy
 /// analysis. Assumes strong mode and closed world.
 Program transformProgram(CoreTypes coreTypes, Program program) {
-  new CHADevirtualization(
-          coreTypes, program, new ClosedWorldClassHierarchy(program))
+  new CHADevirtualization(coreTypes, program, new ClassHierarchy(program))
       .visitProgram(program);
   return program;
 }
diff --git a/pkg/vm/lib/transformations/type_flow/analysis.dart b/pkg/vm/lib/transformations/type_flow/analysis.dart
new file mode 100644
index 0000000..871c63b
--- /dev/null
+++ b/pkg/vm/lib/transformations/type_flow/analysis.dart
@@ -0,0 +1,887 @@
+// 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.
+
+/// Global type flow analysis.
+library kernel.transformations.analysis;
+
+import 'dart:core' hide Type;
+
+import 'package:kernel/ast.dart' hide Statement, StatementVisitor;
+import 'package:kernel/class_hierarchy.dart' show ClosedWorldClassHierarchy;
+import 'package:kernel/library_index.dart' show LibraryIndex;
+import 'package:kernel/type_environment.dart';
+
+import 'calls.dart';
+import 'native_code.dart';
+import 'summary.dart';
+import 'summary_collector.dart';
+import 'types.dart';
+import 'utils.dart';
+
+// TODO(alexmarkov)
+// Unordered list of various improvements in type flow analysis,
+// organized in several categories:
+//
+// === Correctness ===
+// * Add unit tests!!!
+// * Support dynamic calls via getters & dynamic tear-offs.
+// * Re-evaluate field initializer if its dependency changes (avoid
+//   re-using cached value).
+// * Handle noSuchMethod invocations correctly (especially in case of dynamic
+//   calls).
+// * Verify incremental re-calculation by fresh analysis starting with known
+//   allocated classes.
+// * Auto-generate entry_points.json during build.
+// * Support FutureOr<T> properly.
+//
+// === Precision ===
+// * Handle '==' with null.
+// * Special type inference rules for binary int operators.
+// * Support function types, better handle closures.
+// * Support generic types: substitution, passing type arguments. Figure out
+//   when generic type should be approximated.
+// * Support named parameters (remove their approximation with static types).
+//
+// === Efficiency of the analysis ===
+// * Add benchmark to measure analysis time continuously.
+// * Figure out better strategy of processing an invocation if its result is
+//   not used. Consider creating summaries eagerly (to discover allocated
+//   classes early) but analyzing them lazily.
+//
+
+/// Maintains set of dependent invocations.
+class _DependencyTracker {
+  Set<_Invocation> _dependentInvocations;
+
+  void addDependentInvocation(_Invocation invocation) {
+    if (!identical(invocation, this)) {
+      _dependentInvocations ??= new Set<_Invocation>();
+      _dependentInvocations.add(invocation);
+    }
+  }
+
+  void invalidateDependentInvocations(_WorkList workList) {
+    if (_dependentInvocations != null) {
+      _dependentInvocations.forEach(workList.invalidateInvocation);
+    }
+  }
+}
+
+/// _Invocation class represents the in-flight invocation detached from a
+/// particular call site, e.g. it is a selector and arguments.
+/// This is the basic unit of processing in type flow analysis.
+/// Call sites calling the same method with the same argument types
+/// may reuse results of the analysis through the same _Invocation instance.
+class _Invocation extends _DependencyTracker {
+  final Selector selector;
+  final Args<Type> args;
+
+  Type result;
+
+  /// Result of the invocation calculated before invocation was invalidated.
+  /// Used to check if the re-analysis of the invocation yields the same
+  /// result or not (to avoid invalidation of callers if result hasn't changed).
+  Type invalidatedResult;
+
+  bool _isPolymorphic = false;
+  Set<Call> _callSites; // Populated only if non-direct and not polymorphic.
+  Member _monomorphicTarget;
+
+  _Invocation(this.selector, this.args);
+
+  // Only take selector and args into account as _Invocation objects
+  // are cached in _InvocationsCache using selector and args as a key.
+  @override
+  bool operator ==(other) =>
+      (other is _Invocation) &&
+      (this.selector == other.selector) &&
+      (this.args == other.args);
+
+  @override
+  int get hashCode => (selector.hashCode ^ args.hashCode + 31) & kHashMask;
+
+  @override
+  String toString() => "_Invocation $selector $args";
+
+  void setPolymorphic() {
+    if (!_isPolymorphic) {
+      _isPolymorphic = true;
+      _monomorphicTarget = null;
+
+      _notifyCallSites();
+
+      _callSites = null; // No longer needed.
+    }
+  }
+
+  void setMonomorphicTarget(Member target) {
+    assertx(!_isPolymorphic);
+    assertx((_monomorphicTarget == null) || (_monomorphicTarget == target));
+    _monomorphicTarget = target;
+
+    _notifyCallSites();
+  }
+
+  void addCallSite(Call callSite) {
+    if (selector is DirectSelector) {
+      return;
+    }
+
+    _notifyCallSite(callSite);
+
+    if (!callSite.isPolymorphic) {
+      assertx(!_isPolymorphic);
+      (_callSites ??= new Set<Call>()).add(callSite);
+    }
+  }
+
+  /// Notify call site about changes in polymorphism of this invocation.
+  void _notifyCallSite(Call callSite) {
+    assert(selector is! DirectSelector);
+
+    if (_isPolymorphic) {
+      callSite.setPolymorphic();
+    } else {
+      if (_monomorphicTarget != null) {
+        callSite.addTarget(_monomorphicTarget);
+      }
+    }
+  }
+
+  /// Notify call sites monitoring this invocation about changes in
+  /// polymorphism of this invocation.
+  void _notifyCallSites() {
+    if (_callSites != null) {
+      _callSites.forEach(_notifyCallSite);
+    }
+  }
+}
+
+class _InvocationsCache {
+  final Set<_Invocation> _invocations = new Set<_Invocation>();
+
+  _Invocation getInvocation(Selector selector, Args<Type> args) {
+    _Invocation invocation = new _Invocation(selector, args);
+    _Invocation result = _invocations.lookup(invocation);
+    if (result == null) {
+      bool added = _invocations.add(invocation);
+      assertx(added);
+      result = invocation;
+    }
+    return result;
+  }
+}
+
+/// Base class for handlers of invocations of a member.
+abstract class _MemberInvocationHandler extends _DependencyTracker {
+  final Member member;
+  Summary _summary;
+
+  _MemberInvocationHandler(this.member);
+
+  Summary getSummary(TypeFlowAnalysis typeFlowAnalysis) {
+    return _summary ??= typeFlowAnalysis.summaryCollector.createSummary(member);
+  }
+
+  Type handleInvocation(
+      _Invocation invocation, TypeFlowAnalysis typeFlowAnalysis);
+
+  @override
+  String toString() => "_M $member";
+}
+
+class _ProcedureInvocationHandler extends _MemberInvocationHandler {
+  _ProcedureInvocationHandler(Member member) : super(member);
+
+  @override
+  Type handleInvocation(
+      _Invocation invocation, TypeFlowAnalysis typeFlowAnalysis) {
+    if (invocation.selector.memberAgreesToCallKind(member)) {
+      if (_isLegalNumberOfArguments(invocation)) {
+        addDependentInvocation(typeFlowAnalysis.currentInvocation);
+        return getSummary(typeFlowAnalysis).apply(
+            invocation.args, typeFlowAnalysis.hierarchyCache, typeFlowAnalysis);
+      } else {
+        return new Type.empty();
+      }
+    } else {
+      if (invocation.selector.callKind == CallKind.PropertyGet) {
+        // Tear-off.
+        // TODO(alexmarkov): capture receiver type
+        assertx((member is Procedure) &&
+            !(member as Procedure).isGetter &&
+            !(member as Procedure).isSetter);
+        typeFlowAnalysis.addRawCall(new DirectSelector(member));
+        return new Type.fromStatic(const DynamicType());
+      } else {
+        // Call via getter.
+        // TODO(alexmarkov): capture receiver type
+        assertx((invocation.selector.callKind == CallKind.Method) &&
+            (member is Procedure) &&
+            (member as Procedure).isGetter);
+        typeFlowAnalysis.addRawCall(
+            new DirectSelector(member, callKind: CallKind.PropertyGet));
+        return new Type.fromStatic(const DynamicType());
+      }
+    }
+  }
+
+  bool _isLegalNumberOfArguments(_Invocation invocation) {
+    final function = member.function;
+    assertx(function != null);
+
+    final int positionalArguments = invocation.args.positionalCount;
+
+    final int firstParamIndex = hasReceiverArg(member) ? 1 : 0;
+    final int requiredParameters =
+        firstParamIndex + function.requiredParameterCount;
+    if (positionalArguments < requiredParameters) {
+      return false;
+    }
+
+    final int positionalParameters =
+        firstParamIndex + function.positionalParameters.length;
+    if (positionalArguments > positionalParameters) {
+      return false;
+    }
+
+    return true;
+  }
+}
+
+class _FieldGetterInvocationHandler extends _MemberInvocationHandler {
+  Type value;
+
+  _FieldGetterInvocationHandler(Field member) : super(member);
+
+  Field get field => member as Field;
+
+  int get receiverCount => field.isStatic ? 0 : 1;
+
+  void ensureInitialized(TypeFlowAnalysis typeFlowAnalysis) {
+    if (value == null) {
+      // Evaluate initializer
+      final args = new Args<Type>(const <Type>[]);
+      value = getSummary(typeFlowAnalysis)
+          .apply(args, typeFlowAnalysis.hierarchyCache, typeFlowAnalysis);
+
+      // TODO(alexmarkov): re-evaluate initializer on invalidations
+    }
+  }
+
+  @override
+  Type handleInvocation(
+      _Invocation invocation, TypeFlowAnalysis typeFlowAnalysis) {
+    ensureInitialized(typeFlowAnalysis);
+
+    if (invocation.selector.callKind == CallKind.PropertyGet) {
+      assertx(invocation.args.values.length == receiverCount);
+      assertx(invocation.args.names.isEmpty);
+      addDependentInvocation(typeFlowAnalysis.currentInvocation);
+      return value;
+    } else {
+      // Call via field.
+      assertx(invocation.selector.callKind == CallKind.Method);
+      return new Type.fromStatic(const DynamicType());
+    }
+  }
+
+  @override
+  String toString() => "_GetF $member {value: $value}";
+}
+
+class _FieldSetterInvocationHandler extends _MemberInvocationHandler {
+  final _FieldGetterInvocationHandler getter;
+
+  _FieldSetterInvocationHandler(this.getter) : super(getter.field);
+
+  Field get field => getter.field;
+  int get receiverCount => getter.receiverCount;
+
+  @override
+  Type handleInvocation(
+      _Invocation invocation, TypeFlowAnalysis typeFlowAnalysis) {
+    getter.ensureInitialized(typeFlowAnalysis);
+    assertx(invocation.selector.callKind == CallKind.PropertySet);
+
+    assertx(invocation.args.values.length == receiverCount + 1);
+    assertx(invocation.args.names.isEmpty);
+    final Type setterArg = invocation.args.values[receiverCount];
+
+    final Type newType =
+        getter.value.union(setterArg, typeFlowAnalysis.hierarchyCache);
+    if (newType != getter.value) {
+      getter.invalidateDependentInvocations(typeFlowAnalysis.workList);
+      getter.value = newType;
+    }
+    return new Type.empty();
+  }
+
+  @override
+  String toString() => "_SetF $member";
+}
+
+class _DynamicInvocationHandler extends _DependencyTracker {
+  final DynamicSelector selector;
+  final Set<Member> targets = new Set<Member>();
+
+  _DynamicInvocationHandler(this.selector);
+}
+
+class _ClassData extends _DependencyTracker {
+  final Class class_;
+  final Set<_ClassData> supertypes; // List of super-types including this.
+  final Set<_ClassData> allocatedSubtypes = new Set<_ClassData>();
+
+  _ClassData(this.class_, this.supertypes) {
+    supertypes.add(this);
+  }
+
+  @override
+  String toString() => "_C $class_";
+
+  String dump() => "$this {supers: $supertypes}";
+}
+
+class _ClassHierarchyCache implements TypeHierarchy {
+  final TypeFlowAnalysis _typeFlowAnalysis;
+  final ClosedWorldClassHierarchy hierarchy;
+  final Set<Class> allocatedClasses = new Set<Class>();
+  final Map<Class, _ClassData> classes = <Class, _ClassData>{};
+
+  final Map<Member, _ProcedureInvocationHandler> _procedureHandlers =
+      <Member, _ProcedureInvocationHandler>{};
+  final Map<Field, _FieldGetterInvocationHandler> _fieldGetterHandlers =
+      <Field, _FieldGetterInvocationHandler>{};
+  final Map<Field, _FieldSetterInvocationHandler> _fieldSetterHandlers =
+      <Field, _FieldSetterInvocationHandler>{};
+  final Map<DynamicSelector, _DynamicInvocationHandler> _dynamicHandlers =
+      <DynamicSelector, _DynamicInvocationHandler>{};
+
+  _ClassHierarchyCache(this._typeFlowAnalysis, this.hierarchy);
+
+  _ClassData getClassData(Class c) {
+    return classes[c] ??= _createClassData(c);
+  }
+
+  _ClassData _createClassData(Class c) {
+    final supertypes = new Set<_ClassData>();
+    for (var sup in c.supers) {
+      supertypes.addAll(getClassData(sup.classNode).supertypes);
+    }
+    return new _ClassData(c, supertypes);
+  }
+
+  void addAllocatedClass(Class cl) {
+    assertx(!cl.isAbstract);
+
+    if (allocatedClasses.add(cl)) {
+      final _ClassData classData = getClassData(cl);
+      classData.allocatedSubtypes.add(classData);
+      classData.invalidateDependentInvocations(_typeFlowAnalysis.workList);
+
+      for (var supertype in classData.supertypes) {
+        supertype.allocatedSubtypes.add(classData);
+        supertype.invalidateDependentInvocations(_typeFlowAnalysis.workList);
+      }
+
+      for (var handler in _dynamicHandlers.values) {
+        _addDynamicTarget(cl, handler);
+      }
+    }
+  }
+
+  @override
+  bool isSubtype(DartType subType, DartType superType) {
+    tracePrint(
+        "isSubtype for sub = $subType (${subType.runtimeType}), sup = $superType (${superType.runtimeType})");
+    if (subType == superType) {
+      return true;
+    }
+
+    // TODO(alexmarkov): handle function types properly
+    if (subType is FunctionType) {
+      subType = _typeFlowAnalysis.environment.rawFunctionType;
+    }
+    if (superType is FunctionType) {
+      superType = _typeFlowAnalysis.environment.rawFunctionType;
+    }
+    // TODO(alexmarkov): handle generic types properly.
+    if (subType is TypeParameterType) {
+      subType = (subType as TypeParameterType).bound;
+    }
+    if (superType is TypeParameterType) {
+      superType = (superType as TypeParameterType).bound;
+    }
+
+    assertx(subType is InterfaceType, details: subType); // TODO(alexmarkov)
+    assertx(superType is InterfaceType, details: superType); // TODO(alexmarkov)
+
+    Class subClass = (subType as InterfaceType).classNode;
+    Class superClass = (superType as InterfaceType).classNode;
+    if (subClass == superClass) {
+      return true;
+    }
+
+    _ClassData subClassData = getClassData(subClass);
+    _ClassData superClassData = getClassData(superClass);
+
+    return subClassData.supertypes.contains(superClassData);
+  }
+
+  @override
+  Type specializeTypeCone(DartType base) {
+    tracePrint("specializeTypeCone for $base");
+    Statistics.typeConeSpecializations++;
+
+    // TODO(alexmarkov): handle function types properly
+    if (base is FunctionType) {
+      base = _typeFlowAnalysis.environment.rawFunctionType;
+    }
+
+    if (base is TypeParameterType) {
+      base = (base as TypeParameterType).bound;
+    }
+
+    assertx(base is InterfaceType); // TODO(alexmarkov)
+
+    // TODO(alexmarkov): take type arguments into account.
+
+    // TODO(alexmarkov): consider approximating type if number of allocated
+    // subtypes is too large
+
+    if (base == const DynamicType() ||
+        base == _typeFlowAnalysis.environment.objectType) {
+      return const AnyType();
+    }
+
+    _ClassData classData = getClassData((base as InterfaceType).classNode);
+
+    final allocatedSubtypes = classData.allocatedSubtypes;
+    classData.addDependentInvocation(_typeFlowAnalysis.currentInvocation);
+
+    final int numSubTypes = allocatedSubtypes.length;
+
+    if (numSubTypes == 0) {
+      return new Type.empty();
+    } else if (numSubTypes == 1) {
+      return new Type.concrete(allocatedSubtypes.single.class_.rawType);
+    } else {
+      Set<ConcreteType> types = new Set<ConcreteType>();
+      for (var sub in allocatedSubtypes) {
+        types.add(new Type.concrete(sub.class_.rawType));
+      }
+      return new SetType(types);
+    }
+  }
+
+  _MemberInvocationHandler getMemberHandler(Member member, CallKind callKind) {
+    if (member is Field) {
+      if (callKind == CallKind.PropertySet) {
+        return _fieldSetterHandlers[member] ??=
+            new _FieldSetterInvocationHandler(
+                getMemberHandler(member, CallKind.PropertyGet));
+      } else {
+        return _fieldGetterHandlers[member] ??=
+            new _FieldGetterInvocationHandler(member);
+      }
+    } else {
+      return _procedureHandlers[member] ??=
+          new _ProcedureInvocationHandler(member);
+    }
+  }
+
+  bool isMemberUsed(Member member) {
+    if (member is Field) {
+      return _fieldGetterHandlers[member]?.value != null;
+    } else {
+      return _procedureHandlers[member]?._summary != null;
+    }
+  }
+
+  Iterable<Member> getDynamicTargets(DynamicSelector selector) {
+    final handler =
+        (_dynamicHandlers[selector] ??= _createDynamicHandler(selector));
+    return handler.targets;
+  }
+
+  _DynamicInvocationHandler _createDynamicHandler(DynamicSelector selector) {
+    final handler = new _DynamicInvocationHandler(selector);
+    for (Class c in allocatedClasses) {
+      _addDynamicTarget(c, handler);
+    }
+    return handler;
+  }
+
+  void _addDynamicTarget(Class c, _DynamicInvocationHandler handler) {
+    final selector = handler.selector;
+    final member = hierarchy.getDispatchTarget(c, selector.name,
+        setter: selector.isSetter);
+    if (member != null) {
+      if (selector.memberAgreesToCallKind(member)) {
+        if (handler.targets.add(member)) {
+          handler.invalidateDependentInvocations(_typeFlowAnalysis.workList);
+        }
+      } else {
+        if (selector.callKind == CallKind.Method) {
+          // Call via getter/field.
+          // TODO(alexmarkov)
+          // assertx(false);
+        } else {
+          assertx(selector.callKind == CallKind.PropertyGet);
+          // Tear-off.
+          // TODO(alexmarkov)
+          // assertx(false);
+        }
+      }
+    }
+  }
+
+  @override
+  String toString() {
+    StringBuffer buf = new StringBuffer();
+    buf.write("_ClassHierarchyCache {\n");
+    buf.write("  allocated classes:\n");
+    allocatedClasses.forEach((c) {
+      buf.write("    $c\n");
+    });
+    buf.write("  classes:\n");
+    classes.values.forEach((c) {
+      buf.write("    ${c.dump()}\n");
+    });
+    buf.write("  handlers:\n");
+    _procedureHandlers.values.forEach((handler) {
+      buf.write("    $handler\n");
+    });
+    _fieldGetterHandlers.values.forEach((handler) {
+      buf.write("    $handler\n");
+    });
+    _fieldSetterHandlers.values.forEach((handler) {
+      buf.write("    $handler\n");
+    });
+    buf.write("}\n");
+    return buf.toString();
+  }
+}
+
+class _InvocationAnalyzer {
+  final TypeFlowAnalysis _typeFlowAnalysis;
+
+  _InvocationAnalyzer(this._typeFlowAnalysis);
+
+  Type processInvocation(_Invocation invocation) {
+    final Selector selector = invocation.selector;
+    Type result = null;
+
+    if (selector is DirectSelector) {
+      result = _processDirectInvocation(selector, invocation);
+    } else {
+      result = _processMultipleTargets(selector, invocation);
+    }
+
+    assertx(result != null);
+    invocation.result = result;
+
+    if (invocation.invalidatedResult != null) {
+      if (invocation.invalidatedResult != result) {
+        invocation.invalidateDependentInvocations(_typeFlowAnalysis.workList);
+      }
+      invocation.invalidatedResult = null;
+    }
+
+    return result;
+  }
+
+  Type _processDirectInvocation(
+      DirectSelector selector, _Invocation invocation) {
+    final handler = _typeFlowAnalysis.hierarchyCache
+        .getMemberHandler(selector.member, selector.callKind);
+    return handler.handleInvocation(invocation, _typeFlowAnalysis);
+  }
+
+  Type _processMultipleTargets(Selector selector, _Invocation invocation) {
+    Iterable<_MemberInvocationHandler> targets = _collectTargets(invocation);
+    Type result = new Type.empty();
+
+    if (targets.isEmpty) {
+      tracePrint("No targets...");
+    } else {
+      if (targets.length == 1) {
+        invocation.setMonomorphicTarget(targets.single.member);
+      } else {
+        invocation.setPolymorphic();
+      }
+      for (var handler in targets) {
+        Type type = handler.handleInvocation(invocation, _typeFlowAnalysis);
+        result = result.union(type, _typeFlowAnalysis.hierarchyCache);
+      }
+    }
+
+    // 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());
+    }
+
+    return result;
+  }
+
+  Iterable<_MemberInvocationHandler> _collectTargets(_Invocation invocation) {
+    assertx(invocation.selector is! DirectSelector);
+
+    Type receiver = invocation.args.receiver;
+    assertx(receiver != const EmptyType()); // should be filtered earlier
+
+    Set<Member> targets = new Set<Member>();
+    _collectForReceiverType(receiver, invocation.selector, targets);
+
+    return targets.map((Member member) => _typeFlowAnalysis.hierarchyCache
+        .getMemberHandler(member, invocation.selector.callKind));
+  }
+
+  void _collectForReceiverType(
+      Type receiver, Selector selector, Set<Member> targets) {
+    if (receiver is NullableType) {
+      _collectForConcreteType(
+          _typeFlowAnalysis.environment.nullType, selector, targets);
+      receiver = (receiver as NullableType).baseType;
+      assertx(receiver is! NullableType);
+    }
+
+    if (selector is InterfaceSelector) {
+      final staticReceiverType =
+          new Type.fromStatic(selector.member.enclosingClass.rawType);
+      receiver = receiver.intersection(
+          staticReceiverType, _typeFlowAnalysis.hierarchyCache);
+      assertx(receiver is! NullableType);
+
+      tracePrint("Narrowed down receiver type: $receiver");
+    }
+
+    if (receiver is ConeType) {
+      receiver = _typeFlowAnalysis.hierarchyCache
+          .specializeTypeCone((receiver as ConeType).dartType);
+    }
+
+    if (receiver is ConcreteType) {
+      _collectForConcreteType(receiver.dartType, selector, targets);
+    } else if (receiver is SetType) {
+      for (var type in receiver.types) {
+        _collectForConcreteType(type.dartType, selector, targets);
+      }
+    } else if (receiver is AnyType) {
+      _collectForSelector(selector, targets);
+    } else {
+      assertx(receiver is EmptyType);
+    }
+  }
+
+  void _collectForConcreteType(
+      DartType receiver, Selector selector, Set<Member> targets) {
+    if (receiver is FunctionType) {
+      assertx((selector is DynamicSelector) && (selector.name.name == "call"));
+      return;
+    }
+
+    assertx(receiver is InterfaceType); // TODO(alexmarkov)
+
+    Class class_ = (receiver as InterfaceType).classNode;
+
+    Member target = _typeFlowAnalysis.hierarchyCache.hierarchy
+        .getDispatchTarget(class_, selector.name, setter: selector.isSetter);
+
+    if (target != null) {
+      tracePrint("Found $target for concrete receiver type $receiver");
+      targets.add(target);
+    } else {
+      tracePrint("Target is not found for concrete receiver type $receiver");
+    }
+  }
+
+  void _collectForSelector(Selector selector, Set<Member> targets) {
+    if (selector is InterfaceSelector) {
+      // TODO(alexmarkov): support generic types and make sure inferred types
+      // are always same or better than static types.
+//      assertx(selector.member.enclosingClass ==
+//          _typeFlowAnalysis.environment.coreTypes.objectClass, details: selector);
+      selector = new DynamicSelector(selector.callKind, selector.name);
+    }
+
+    targets.addAll(_typeFlowAnalysis.hierarchyCache
+        .getDynamicTargets(selector as DynamicSelector));
+  }
+}
+
+class _WorkList {
+  final TypeFlowAnalysis _typeFlowAnalysis;
+  final Set<_Invocation> pending = new Set<_Invocation>();
+  final Set<_Invocation> processing = new Set<_Invocation>();
+  final List<_Invocation> callStack = <_Invocation>[];
+
+  _WorkList(this._typeFlowAnalysis);
+
+  void enqueueInvocation(_Invocation invocation) {
+    assertx(invocation.result == null);
+    if (!pending.add(invocation)) {
+      // Re-add the invocation to the tail of the pending queue.
+      pending.remove(invocation);
+      pending.add(invocation);
+    }
+  }
+
+  void invalidateInvocation(_Invocation invocation) {
+    Statistics.invocationsInvalidated++;
+    if (invocation.result != null) {
+      invocation.invalidatedResult = invocation.result;
+      invocation.result = null;
+    }
+    enqueueInvocation(invocation);
+  }
+
+  void process() {
+    while (pending.isNotEmpty) {
+      assertx(callStack.isEmpty && processing.isEmpty);
+      _Invocation invocation = pending.first;
+
+      // Remove from pending before processing, as the invocation
+      // could be invalidated and re-added to pending while processing.
+      pending.remove(invocation);
+
+      processInvocation(invocation);
+      assertx(invocation.result != null);
+    }
+  }
+
+  Type processInvocation(_Invocation invocation) {
+    if (invocation.result != null) {
+      // Already processed.
+      Statistics.usedCachedResultsOfInvocations++;
+      return invocation.result;
+    }
+
+    // Test if tracing is enabled to avoid expensive message formatting.
+    if (kPrintTrace) {
+      tracePrint('PROCESSING $invocation');
+    }
+
+    if (processing.add(invocation)) {
+      callStack.add(invocation);
+
+      final Type result =
+          _typeFlowAnalysis.invocationAnalyzer.processInvocation(invocation);
+
+      final last = callStack.removeLast();
+      assertx(identical(last, invocation));
+
+      processing.remove(invocation);
+
+      Statistics.invocationsProcessed++;
+      return result;
+    } else {
+      // Recursive invocation, approximate with static type.
+      Statistics.recursiveInvocationsApproximated++;
+      return new Type.fromStatic(invocation.selector.staticReturnType);
+    }
+  }
+}
+
+class TypeFlowAnalysis implements EntryPointsListener, CallHandler {
+  final TypeEnvironment environment;
+  final LibraryIndex libraryIndex;
+  final NativeCodeOracle nativeCodeOracle;
+  _ClassHierarchyCache hierarchyCache;
+  SummaryCollector summaryCollector;
+  _InvocationsCache _invocationsCache = new _InvocationsCache();
+  _InvocationAnalyzer invocationAnalyzer;
+  _WorkList workList;
+
+  TypeFlowAnalysis(
+      ClosedWorldClassHierarchy hierarchy, this.environment, this.libraryIndex,
+      {List<String> entryPointsJSONFiles})
+      : nativeCodeOracle = new NativeCodeOracle(libraryIndex) {
+    hierarchyCache = new _ClassHierarchyCache(this, hierarchy);
+    summaryCollector =
+        new SummaryCollector(environment, this, nativeCodeOracle);
+    invocationAnalyzer = new _InvocationAnalyzer(this);
+    workList = new _WorkList(this);
+
+    if (entryPointsJSONFiles != null) {
+      nativeCodeOracle.processEntryPointsJSONFiles(entryPointsJSONFiles, this);
+    }
+  }
+
+  _Invocation get currentInvocation => workList.callStack.last;
+
+  void process() {
+    workList.process();
+  }
+
+  bool isMemberUsed(Member member) => hierarchyCache.isMemberUsed(member);
+
+  Call callSite(TreeNode node) => summaryCollector.callSites[node];
+
+  /// ---- Implementation of [CallHandler] interface. ----
+
+  @override
+  Type applyCall(
+      Call callSite, Selector selector, Args<Type> args, bool isResultUsed,
+      {bool processImmediately: true}) {
+    _Invocation invocation = _invocationsCache.getInvocation(selector, args);
+
+    // Test if tracing is enabled to avoid expensive message formatting.
+    if (kPrintTrace) {
+      tracePrint("APPLY $invocation");
+    }
+
+    if (callSite != null) {
+      invocation.addCallSite(callSite);
+    }
+
+    // TODO(alexmarkov): Figure out better strategy of processing
+    // an invocation if its result is not used.
+    // Enqueueing such invocations regresses the analysis time considerably.
+
+    if (processImmediately) {
+      if (isResultUsed) {
+        invocation.addDependentInvocation(currentInvocation);
+      }
+
+      return workList.processInvocation(invocation);
+    } else {
+      assertx(!isResultUsed);
+
+      if (invocation.result == null) {
+        workList.enqueueInvocation(invocation);
+      }
+
+      return null;
+    }
+  }
+
+  /// ---- Implementation of [EntryPointsListener] interface. ----
+
+  @override
+  void addRawCall(Selector selector) {
+    debugPrint("ADD RAW CALL: $selector");
+    assertx(selector is! DynamicSelector); // TODO(alexmarkov)
+
+    applyCall(null, selector, summaryCollector.rawArguments(selector), false,
+        processImmediately: false);
+  }
+
+  @override
+  void 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);
+  }
+}
diff --git a/pkg/vm/lib/transformations/type_flow/calls.dart b/pkg/vm/lib/transformations/type_flow/calls.dart
new file mode 100644
index 0000000..3fb41129
--- /dev/null
+++ b/pkg/vm/lib/transformations/type_flow/calls.dart
@@ -0,0 +1,222 @@
+// 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.
+
+/// Declares classes which describe a call: selectors and arguments.
+library vm.transformations.type_flow.calls;
+
+import 'dart:core' hide Type;
+
+import 'package:kernel/ast.dart';
+
+import 'types.dart';
+import 'utils.dart';
+
+enum CallKind {
+  Method, // x.foo(..) or foo()
+  PropertyGet, // ... x.foo ...
+  PropertySet, // x.foo = ...
+}
+
+/// [Selector] encapsulates the way of calling (at the call site).
+abstract class Selector {
+  /// Call kind: how call is performed?
+  final CallKind callKind;
+
+  Selector(this.callKind);
+
+  /// Interface or concrete target, may be null.
+  Member get member;
+
+  /// Selector name.
+  Name get name => member.name;
+
+  bool get isSetter => (callKind == CallKind.PropertySet);
+
+  @override
+  int get hashCode => callKind.hashCode;
+
+  @override
+  bool operator ==(other) => other is Selector && other.callKind == callKind;
+
+  /// Static approximation of Dart return type.
+  DartType get staticReturnType {
+    if (member == null) {
+      return const DynamicType();
+    }
+    switch (callKind) {
+      case CallKind.Method:
+        return (member is Procedure)
+            ? member.function.returnType
+            : const BottomType();
+      case CallKind.PropertyGet:
+        return member.getterType;
+      case CallKind.PropertySet:
+        return const BottomType();
+    }
+    return null;
+  }
+
+  bool memberAgreesToCallKind(Member member) {
+    switch (callKind) {
+      case CallKind.Method:
+        return ((member is Procedure) &&
+                !member.isGetter &&
+                !member.isSetter) ||
+            (member is Constructor);
+      case CallKind.PropertyGet:
+        return (member is Field) || ((member is Procedure) && member.isGetter);
+      case CallKind.PropertySet:
+        return (member is Field) || ((member is Procedure) && member.isSetter);
+    }
+    return false;
+  }
+
+  String get _callKindPrefix {
+    switch (callKind) {
+      case CallKind.Method:
+        return '';
+      case CallKind.PropertyGet:
+        return 'get ';
+      case CallKind.PropertySet:
+        return 'set ';
+    }
+    return '';
+  }
+}
+
+/// Direct call to [member].
+class DirectSelector extends Selector {
+  final Member member;
+
+  DirectSelector(this.member, {CallKind callKind = CallKind.Method})
+      : super(callKind) {
+    assertx(memberAgreesToCallKind(member), details: member);
+  }
+
+  @override
+  int get hashCode => (super.hashCode ^ member.hashCode) & kHashMask;
+
+  @override
+  bool operator ==(other) =>
+      other is DirectSelector && super == (other) && other.member == member;
+
+  @override
+  String toString() => 'direct ${_callKindPrefix}[$member]';
+}
+
+/// Interface call via known interface target [member].
+class InterfaceSelector extends Selector {
+  final Member member;
+
+  InterfaceSelector(this.member, {CallKind callKind = CallKind.Method})
+      : super(callKind) {
+    assertx(memberAgreesToCallKind(member));
+  }
+
+  @override
+  int get hashCode => (super.hashCode ^ member.hashCode + 31) & kHashMask;
+
+  @override
+  bool operator ==(other) =>
+      other is InterfaceSelector && super == (other) && other.member == member;
+
+  @override
+  String toString() => '${_callKindPrefix}[$member]';
+}
+
+/// Dynamic call.
+class DynamicSelector extends Selector {
+  @override
+  final Name name;
+
+  DynamicSelector(CallKind callKind, this.name) : super(callKind);
+
+  @override
+  Member get member => null;
+
+  @override
+  int get hashCode => (super.hashCode ^ name.hashCode + 37) & kHashMask;
+
+  @override
+  bool operator ==(other) =>
+      other is DynamicSelector && super == (other) && other.name == name;
+
+  @override
+  String toString() => 'dynamic ${_callKindPrefix}[$name]';
+}
+
+/// Arguments passed to a call, including implicit receiver argument.
+// TODO(alexmarkov): use this class instead of List<Type> / List<TypeExpr>.
+// TODO(alexmarkov): take type arguments into account
+// TODO(alexmarkov): keep names sorted
+class Args<T extends TypeExpr> {
+  final List<T> values;
+  final List<String> names;
+  int _hashCode;
+
+  Args(this.values, {this.names = const <String>[]});
+
+  int get positionalCount => values.length - names.length;
+
+  // TODO(alexmarkov): get rid of this method
+  List<T> get positional => values.sublist(0, positionalCount);
+
+  T get receiver => values[0];
+
+  @override
+  int get hashCode => _hashCode ??= _computeHashCode();
+
+  int _computeHashCode() {
+    int hash = 1231;
+    for (var v in values) {
+      hash = (((hash * 31) & kHashMask) + v.hashCode) & kHashMask;
+    }
+    for (var n in names) {
+      hash = (((hash * 31) & kHashMask) + n.hashCode) & kHashMask;
+    }
+    return hash;
+  }
+
+  @override
+  bool operator ==(other) {
+    if (other is Args<T> &&
+        (this.values.length == other.values.length) &&
+        (this.names.length == other.names.length)) {
+      for (int i = 0; i < values.length; i++) {
+        if (values[i] != other.values[i]) {
+          return false;
+        }
+      }
+      for (int i = 0; i < names.length; i++) {
+        if (names[i] != other.names[i]) {
+          return false;
+        }
+      }
+      return true;
+    }
+    return false;
+  }
+
+  @override
+  String toString() {
+    StringBuffer buf = new StringBuffer();
+    buf.write("(");
+    for (int i = 0; i < positionalCount; i++) {
+      if (i != 0) {
+        buf.write(", ");
+      }
+      buf.write(values[i]);
+    }
+    for (int i = 0; i < names.length; i++) {
+      if (positionalCount + i != 0) {
+        buf.write(", ");
+      }
+      buf.write(names[i]);
+      buf.write(': ');
+      buf.write(values[positionalCount + i]);
+    }
+    buf.write(")");
+    return buf.toString();
+  }
+}
diff --git a/pkg/vm/lib/transformations/type_flow/entry_points.json b/pkg/vm/lib/transformations/type_flow/entry_points.json
new file mode 100644
index 0000000..17b472c
--- /dev/null
+++ b/pkg/vm/lib/transformations/type_flow/entry_points.json
@@ -0,0 +1,2128 @@
+{
+  "roots": [
+    {
+      "library": "dart:core",
+      "class": "Object",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_LibraryPrefix",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_Type",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_TypeRef",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_TypeParameter",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_BoundedType",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_MixinAppType",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_Closure",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_Smi",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_Mint",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_Bigint",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_Double",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "bool",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_GrowableList",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Float32x4",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Int32x4",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Float64x2",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:isolate",
+      "class": "_CapabilityImpl",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:isolate",
+      "class": "_RawReceivePortImpl",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:isolate",
+      "class": "_SendPortImpl",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_StackTrace",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_RegExp",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_WeakProperty",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:mirrors",
+      "class": "_MirrorReference",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:collection",
+      "class": "_InternalLinkedHashMap",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:developer",
+      "class": "_UserTag",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_ImmutableList",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_OneByteString",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_TwoByteString",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_ExternalOneByteString",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_ExternalTwoByteString",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Int8List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Uint8List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Uint8ClampedList",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Int16List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Uint16List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Int32List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Uint32List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Int64List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Uint64List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Float32List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Float64List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Float32x4List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Int32x4List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Float64x2List",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Int8ArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Uint8ArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Uint8ClampedArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Int16ArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Uint16ArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Int32ArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Uint32ArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Int64ArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Uint64ArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Float32ArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Float64ArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Float32x4ArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Int32x4ArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_Float64x2ArrayView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ByteDataView",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalInt8Array",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalUint8Array",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalUint8ClampedArray",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalInt16Array",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalUint16Array",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalInt32Array",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalUint32Array",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalInt64Array",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalUint64Array",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalFloat32Array",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalFloat64Array",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalFloat32x4Array",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalInt32x4Array",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ExternalFloat64x2Array",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ByteBuffer",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "Null",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "AbstractClassInstantiationError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "ArgumentError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "ArgumentError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "CyclicInitializationError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "FallThroughError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "FormatException",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "NoSuchMethodError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "NullThrownError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "OutOfMemoryError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "RangeError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "RangeError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "StackOverflowError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "UnsupportedError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_AssertionError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_CastError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_InternalError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_TypeError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:isolate",
+      "class": "IsolateSpawnException",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:io",
+      "class": "CertificateException",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:io",
+      "class": "FileSystemException",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:io",
+      "class": "HandshakeException",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:io",
+      "class": "OSError",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:io",
+      "class": "TlsException",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "name": "_completeDeferredLoads",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "name": "identityHashCode",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "AbstractClassInstantiationError",
+      "name": "AbstractClassInstantiationError._create",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "ArgumentError",
+      "name": "ArgumentError",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "ArgumentError",
+      "name": "ArgumentError.value",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "CyclicInitializationError",
+      "name": "CyclicInitializationError",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "FallThroughError",
+      "name": "FallThroughError._create",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "FormatException",
+      "name": "FormatException",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "NoSuchMethodError",
+      "name": "NoSuchMethodError._withType",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "NullThrownError",
+      "name": "NullThrownError",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "OutOfMemoryError",
+      "name": "OutOfMemoryError",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "RangeError",
+      "name": "RangeError",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "RangeError",
+      "name": "RangeError.range",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "StackOverflowError",
+      "name": "StackOverflowError",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "UnsupportedError",
+      "name": "UnsupportedError",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "_AssertionError",
+      "name": "_AssertionError._create",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "_CastError",
+      "name": "_CastError._create",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "_InternalError",
+      "name": "_InternalError",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "_InvocationMirror",
+      "name": "_allocateInvocationMirror",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "_TypeError",
+      "name": "_TypeError._create",
+      "action": "call"
+    },
+    {
+      "library": "dart:collection",
+      "name": "_rehashObjects",
+      "action": "call"
+    },
+    {
+      "library": "dart:isolate",
+      "class": "IsolateSpawnException",
+      "name": "IsolateSpawnException",
+      "action": "call"
+    },
+    {
+      "library": "dart:isolate",
+      "name": "_startIsolate",
+      "action": "call"
+    },
+    {
+      "library": "dart:isolate",
+      "class": "_RawReceivePortImpl",
+      "name": "_handleMessage",
+      "action": "call"
+    },
+    {
+      "library": "dart:isolate",
+      "class": "_RawReceivePortImpl",
+      "name": "_lookupHandler",
+      "action": "call"
+    },
+    {
+      "library": "dart:isolate",
+      "class": "_SendPortImpl",
+      "name": "send",
+      "action": "call"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "ByteData",
+      "name": "ByteData",
+      "action": "call"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "ByteData",
+      "name": "ByteData._view",
+      "action": "call"
+    },
+    {
+      "library": "dart:typed_data",
+      "class": "_ByteBuffer",
+      "name": "_ByteBuffer._New",
+      "action": "call"
+    },
+    {
+      "library": "dart:_vmservice",
+      "name": "boot",
+      "action": "call"
+    },
+    {
+      "library": "dart:_vmservice",
+      "name": "_registerIsolate",
+      "action": "call"
+    },
+    {
+      "library": "dart:developer",
+      "class": "Metrics",
+      "name": "_printMetrics",
+      "action": "call"
+    },
+    {
+      "library": "dart:developer",
+      "name": "_runExtension",
+      "action": "call"
+    },
+    {
+      "library": "dart:isolate",
+      "name": "_runPendingImmediateCallback",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "Error",
+      "name": "_stackTrace",
+      "action": "get"
+    },
+    {
+      "library": "dart:core",
+      "class": "Error",
+      "name": "_stackTrace",
+      "action": "set"
+    },
+    {
+      "library": "dart:core",
+      "name": "_uriBaseClosure",
+      "action": "get"
+    },
+    {
+      "library": "dart:core",
+      "name": "_uriBaseClosure",
+      "action": "set"
+    },
+    {
+      "library": "dart:math",
+      "class": "_Random",
+      "name": "_state",
+      "action": "get"
+    },
+    {
+      "library": "dart:math",
+      "class": "_Random",
+      "name": "_state",
+      "action": "set"
+    },
+    {
+      "library": "dart:_builtin",
+      "name": "_getPrintClosure",
+      "action": "call"
+    },
+    {
+      "library": "dart:_builtin",
+      "name": "_libraryFilePath",
+      "action": "call"
+    },
+    {
+      "library": "dart:_builtin",
+      "name": "_resolveInWorkingDirectory",
+      "action": "call"
+    },
+    {
+      "library": "dart:_builtin",
+      "name": "_setPackageRoot",
+      "action": "call"
+    },
+    {
+      "library": "dart:_builtin",
+      "name": "_setPackagesMap",
+      "action": "call"
+    },
+    {
+      "library": "dart:_builtin",
+      "name": "_setWorkingDirectory",
+      "action": "call"
+    },
+    {
+      "library": "dart:async",
+      "name": "_setScheduleImmediateClosure",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "name": "_getUriBaseClosure",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "name": "_getWatchSignalInternal",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "name": "_makeDatagram",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "name": "_makeUint8ListView",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "name": "_setupHooks",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "class": "_EmbedderConfig",
+      "name": "_mayExit",
+      "action": "get"
+    },
+    {
+      "library": "dart:io",
+      "class": "_EmbedderConfig",
+      "name": "_mayExit",
+      "action": "set"
+    },
+    {
+      "library": "dart:io",
+      "class": "_ExternalBuffer",
+      "name": "end",
+      "action": "get"
+    },
+    {
+      "library": "dart:io",
+      "class": "_ExternalBuffer",
+      "name": "start",
+      "action": "get"
+    },
+    {
+      "library": "dart:io",
+      "class": "_ExternalBuffer",
+      "name": "data",
+      "action": "set"
+    },
+    {
+      "library": "dart:io",
+      "class": "_ExternalBuffer",
+      "name": "end",
+      "action": "set"
+    },
+    {
+      "library": "dart:io",
+      "class": "_ExternalBuffer",
+      "name": "start",
+      "action": "set"
+    },
+    {
+      "library": "dart:io",
+      "class": "_Namespace",
+      "name": "_setupNamespace",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "class": "_Platform",
+      "name": "_nativeScript",
+      "action": "set"
+    },
+    {
+      "library": "dart:io",
+      "class": "_ProcessStartStatus",
+      "name": "_errorCode",
+      "action": "set"
+    },
+    {
+      "library": "dart:io",
+      "class": "_ProcessStartStatus",
+      "name": "_errorMessage",
+      "action": "set"
+    },
+    {
+      "library": "dart:io",
+      "class": "_SecureFilterImpl",
+      "name": "buffers",
+      "action": "get"
+    },
+    {
+      "library": "dart:io",
+      "class": "_SecureFilterImpl",
+      "name": "ENCRYPTED_SIZE",
+      "action": "get"
+    },
+    {
+      "library": "dart:io",
+      "class": "_SecureFilterImpl",
+      "name": "SIZE",
+      "action": "get"
+    },
+    {
+      "library": "dart:io",
+      "class": "CertificateException",
+      "name": "CertificateException",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "class": "Directory",
+      "name": "Directory",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "class": "File",
+      "name": "File",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "class": "FileSystemException",
+      "name": "FileSystemException",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "class": "HandshakeException",
+      "name": "HandshakeException",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "class": "Link",
+      "name": "Link",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "class": "OSError",
+      "name": "OSError",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "class": "TlsException",
+      "name": "TlsException",
+      "action": "call"
+    },
+    {
+      "library": "dart:io",
+      "class": "X509Certificate",
+      "name": "X509Certificate._",
+      "action": "call"
+    },
+    {
+      "library": "dart:isolate",
+      "name": "_getIsolateScheduleImmediateClosure",
+      "action": "call"
+    },
+    {
+      "library": "dart:isolate",
+      "name": "_setupHooks",
+      "action": "call"
+    },
+    {
+      "library": "dart:isolate",
+      "name": "_startMainIsolate",
+      "action": "call"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "main",
+      "action": "call"
+    },
+    {
+      "library": "dart:_builtin",
+      "name": "_isolateId",
+      "action": "get"
+    },
+    {
+      "library": "dart:_builtin",
+      "name": "_isolateId",
+      "action": "set"
+    },
+    {
+      "library": "dart:_builtin",
+      "name": "_loadPort",
+      "action": "get"
+    },
+    {
+      "library": "dart:_builtin",
+      "name": "_loadPort",
+      "action": "set"
+    },
+    {
+      "library": "dart:_internal",
+      "name": "_printClosure",
+      "action": "get"
+    },
+    {
+      "library": "dart:_internal",
+      "name": "_printClosure",
+      "action": "set"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_autoStart",
+      "action": "get"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_autoStart",
+      "action": "set"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_ip",
+      "action": "get"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_ip",
+      "action": "set"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_isFuchsia",
+      "action": "get"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_isFuchsia",
+      "action": "set"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_isWindows",
+      "action": "get"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_isWindows",
+      "action": "set"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_originCheckDisabled",
+      "action": "get"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_originCheckDisabled",
+      "action": "set"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_port",
+      "action": "get"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_port",
+      "action": "set"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_signalWatch",
+      "action": "get"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_signalWatch",
+      "action": "set"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_traceLoading",
+      "action": "get"
+    },
+    {
+      "library": "dart:vmservice_io",
+      "name": "_traceLoading",
+      "action": "set"
+    }
+  ],
+  "native-methods": {
+    "Identical_comparison": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "bool",
+        "nullable": false
+      }
+    ],
+    "ClassID_getID": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "List_allocate": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_List",
+        "nullable": false
+      }
+    ],
+    "TypedData_GetInt8": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "TypedData_GetUint8": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "TypedData_GetInt16": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "TypedData_GetUint16": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "TypedData_GetFloat32": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "TypedData_GetFloat64": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "TypedData_GetFloat32x4": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "TypedData_GetInt32x4": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Double_add": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Double_sub": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Double_mul": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Double_div": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Float32x4_fromDoubles": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_zero": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_splat": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_fromInt32x4Bits": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_fromFloat64x2": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_shuffle": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_shuffleMix": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_cmpequal": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_cmpgt": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_cmpgte": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_cmplt": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_cmplte": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_cmpnequal": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_min": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_max": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_scale": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_sqrt": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_reciprocalSqrt": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_reciprocal": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_negate": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_abs": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_clamp": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_setX": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_setY": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_setZ": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_setW": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float64x2_fromDoubles": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64x2",
+        "nullable": false
+      }
+    ],
+    "Float64x2_zero": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64x2",
+        "nullable": false
+      }
+    ],
+    "Float64x2_splat": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64x2",
+        "nullable": false
+      }
+    ],
+    "Float64x2_fromFloat32x4": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64x2",
+        "nullable": false
+      }
+    ],
+    "Float64x2_getX": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Float64x2_getY": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Float64x2_negate": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64x2",
+        "nullable": false
+      }
+    ],
+    "Float64x2_abs": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64x2",
+        "nullable": false
+      }
+    ],
+    "Float64x2_sqrt": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64x2",
+        "nullable": false
+      }
+    ],
+    "Float64x2_scale": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64x2",
+        "nullable": false
+      }
+    ],
+    "Float64x2_setX": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64x2",
+        "nullable": false
+      }
+    ],
+    "Float64x2_setY": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64x2",
+        "nullable": false
+      }
+    ],
+    "Float64x2_min": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64x2",
+        "nullable": false
+      }
+    ],
+    "Float64x2_max": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64x2",
+        "nullable": false
+      }
+    ],
+    "Int32x4_fromInts": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Int32x4_fromBools": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Int32x4_fromFloat32x4Bits": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Int32x4_getFlagX": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "bool",
+        "nullable": false
+      }
+    ],
+    "Int32x4_getFlagY": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "bool",
+        "nullable": false
+      }
+    ],
+    "Int32x4_getFlagZ": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "bool",
+        "nullable": false
+      }
+    ],
+    "Int32x4_getFlagW": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "bool",
+        "nullable": false
+      }
+    ],
+    "Int32x4_shuffle": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Int32x4_shuffleMix": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Int32x4_select": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Int32x4_setFlagX": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Int32x4_setFlagY": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Int32x4_setFlagZ": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Int32x4_setFlagW": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4",
+        "nullable": false
+      }
+    ],
+    "Bigint_getNeg": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "bool",
+        "nullable": false
+      }
+    ],
+    "Bigint_getUsed": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "Bigint_getDigits": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Uint32List",
+        "nullable": false
+      }
+    ],
+    "LinkedHashMap_getIndex": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Uint32List",
+        "nullable": false
+      }
+    ],
+    "LinkedHashMap_getData": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_List",
+        "nullable": false
+      }
+    ],
+    "LinkedHashMap_getUsedData": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "LinkedHashMap_getHashMask": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "LinkedHashMap_getDeletedKeys": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "Smi_bitNegate": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "Smi_bitLength": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "Smi_bitAndFromSmi": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "Double_getIsNaN": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "bool",
+        "nullable": false
+      }
+    ],
+    "Double_getIsInfinite": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "bool",
+        "nullable": false
+      }
+    ],
+    "Double_getIsNegative": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "bool",
+        "nullable": false
+      }
+    ],
+    "Double_doubleFromInteger": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "GrowableList_allocate": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_GrowableList",
+        "nullable": false
+      }
+    ],
+    "Object_equals": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "bool",
+        "nullable": false
+      }
+    ],
+    "Object_runtimeType": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Type",
+        "nullable": false
+      }
+    ],
+    "Object_haveSameRuntimeType": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "bool",
+        "nullable": false
+      }
+    ],
+    "String_getHashCode": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "String_getHashCode": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "OneByteString_substringUnchecked": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_OneByteString",
+        "nullable": false
+      }
+    ],
+    "OneByteString_allocate": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_OneByteString",
+        "nullable": false
+      }
+    ],
+    "Type_getHashCode": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "Object_getHash": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "TypedData_Int8Array_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int8List",
+        "nullable": false
+      }
+    ],
+    "TypedData_Uint8Array_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Uint8List",
+        "nullable": false
+      }
+    ],
+    "TypedData_Uint8ClampedArray_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Uint8ClampedList",
+        "nullable": false
+      }
+    ],
+    "TypedData_Int16Array_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int16List",
+        "nullable": false
+      }
+    ],
+    "TypedData_Uint16Array_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Uint16List",
+        "nullable": false
+      }
+    ],
+    "TypedData_Int32Array_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32List",
+        "nullable": false
+      }
+    ],
+    "TypedData_Uint32Array_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Uint32List",
+        "nullable": false
+      }
+    ],
+    "TypedData_Int64Array_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int64List",
+        "nullable": false
+      }
+    ],
+    "TypedData_Uint64Array_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Uint64List",
+        "nullable": false
+      }
+    ],
+    "TypedData_Float32Array_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32List",
+        "nullable": false
+      }
+    ],
+    "TypedData_Float64Array_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64List",
+        "nullable": false
+      }
+    ],
+    "TypedData_Float32x4Array_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4List",
+        "nullable": false
+      }
+    ],
+    "TypedData_Int32x4Array_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Int32x4List",
+        "nullable": false
+      }
+    ],
+    "TypedData_Float64x2Array_new": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float64x2List",
+        "nullable": false
+      }
+    ],
+    "Integer_greaterThanFromInteger": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "bool",
+        "nullable": false
+      }
+    ],
+    "Integer_equalToInteger": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "bool",
+        "nullable": false
+      }
+    ],
+    "List_getLength": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "List_getLength": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "GrowableList_getLength": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "GrowableList_getCapacity": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "String_getLength": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "String_codeUnitAt": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "String_codeUnitAt": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "String_codeUnitAt": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "String_codeUnitAt": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "Double_flipSignBit": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Double_truncate": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Double_round": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Double_floor": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Double_ceil": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Double_modulo": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "TypedData_length": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Smi",
+        "nullable": false
+      }
+    ],
+    "Float32x4_getX": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Float32x4_getY": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Float32x4_getZ": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Float32x4_getW": [
+      {
+        "action": "return",
+        "library": "dart:core",
+        "class": "_Double",
+        "nullable": false
+      }
+    ],
+    "Float32x4_mul": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_sub": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ],
+    "Float32x4_add": [
+      {
+        "action": "return",
+        "library": "dart:typed_data",
+        "class": "_Float32x4",
+        "nullable": false
+      }
+    ]
+  }
+}
diff --git a/pkg/vm/lib/transformations/type_flow/entry_points_extra.json b/pkg/vm/lib/transformations/type_flow/entry_points_extra.json
new file mode 100644
index 0000000..dc3849b
--- /dev/null
+++ b/pkg/vm/lib/transformations/type_flow/entry_points_extra.json
@@ -0,0 +1,76 @@
+{
+  "roots": [
+    {
+      "library": "dart:core",
+      "class": "Object",
+      "name": "noSuchMethod",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "List",
+      "name": "_fromLiteral",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "Map",
+      "name": "_fromLiteral",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "_ImmutableList",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_ImmutableMap",
+      "action": "create-instance"
+    },
+    {
+      "library": "dart:core",
+      "class": "_StringBase",
+      "name": "_interpolate",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "_StringBase",
+      "name": "_interpolateSingle",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "name": "_classRangeAssert",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "name": "_classIdEqualsAssert",
+      "action": "call"
+    },
+    {
+      "library": "dart:_internal",
+      "name": "_classRangeCheck",
+      "action": "call"
+    },
+    {
+      "library": "dart:core",
+      "class": "_AssertionError",
+      "name": "_evaluateAssertion",
+      "action": "call"
+    },
+    {
+      "library": "dart:_builtin",
+      "name": "_resolveScriptUri",
+      "action": "call"
+    },
+    {
+      "library": "dart:math",
+      "class": "_Random",
+      "name": "_A",
+      "action": "get"
+    }
+  ]
+}
diff --git a/pkg/vm/lib/transformations/type_flow/native_code.dart b/pkg/vm/lib/transformations/type_flow/native_code.dart
new file mode 100644
index 0000000..bd07402
--- /dev/null
+++ b/pkg/vm/lib/transformations/type_flow/native_code.dart
@@ -0,0 +1,219 @@
+// 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.
+
+/// Handling of native code and entry points.
+library vm.transformations.type_flow.native_code;
+
+import 'dart:convert' show JSON;
+import 'dart:core' hide Type;
+import 'dart:io' show File;
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/library_index.dart' show LibraryIndex;
+
+// TODO(alexmarkov): Move findNativeName out of treeshaker and avoid dependency
+// on unrelated transformation.
+import 'package:kernel/transformations/treeshaker.dart' show findNativeName;
+
+import 'calls.dart';
+import 'types.dart';
+import 'utils.dart';
+
+class EntryPointsListener {
+  /// Add call by the given selector with arbitrary ('raw') arguments.
+  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) {}
+}
+
+/// Provides insights into the behavior of native code.
+class NativeCodeOracle {
+  final Map<String, List<Map<String, dynamic>>> _nativeMethods =
+      <String, List<Map<String, dynamic>>>{};
+  final LibraryIndex _libraryIndex;
+
+  NativeCodeOracle(this._libraryIndex);
+
+  /// Simulate the execution of a native method by adding its entry points
+  /// using [entryPointsListener]. Returns result type of the native method.
+  Type handleNativeProcedure(
+      Member member, EntryPointsListener entryPointsListener) {
+    final String nativeName = findNativeName(member);
+    Type returnType = null;
+
+    final nativeActions = _nativeMethods[nativeName];
+
+    if (nativeActions != null) {
+      for (var action in nativeActions) {
+        if (action['action'] == 'return') {
+          final c = _libraryIndex.getClass(action['library'], action['class']);
+
+          entryPointsListener.addAllocatedClass(c);
+
+          final nullable = action['nullable'];
+          if (nullable == false) {
+            returnType = new Type.concrete(c.rawType);
+          } else if ((nullable == true) || (nullable == null)) {
+            returnType = new Type.nullable(new Type.concrete(c.rawType));
+          } else {
+            throw 'Bad entry point: unexpected nullable: "$nullable" in $action';
+          }
+        } else {
+          _addRoot(action, entryPointsListener);
+        }
+      }
+    }
+
+    if (returnType != null) {
+      return returnType;
+    } else {
+      return new Type.fromStatic(member.function.returnType);
+    }
+  }
+
+  void _addRoot(
+      Map<String, String> rootDesc, EntryPointsListener entryPointsListener) {
+    final String library = rootDesc['library'];
+    final String class_ = rootDesc['class'];
+    final String name = rootDesc['name'];
+    final String action = rootDesc['action'];
+
+    final libraryIndex = _libraryIndex;
+
+    if ((action == 'create-instance') || ((action == null) && (name == null))) {
+      if (name != null) {
+        throw 'Bad entry point: unexpected "name" element in $rootDesc';
+      }
+
+      final Class cls = libraryIndex.getClass(library, class_);
+      if (cls.isAbstract) {
+        throw 'Bad entry point: abstract class listed in $rootDesc';
+      }
+
+      entryPointsListener.addAllocatedClass(cls);
+    } else if ((action == 'call') ||
+        (action == 'get') ||
+        (action == 'set') ||
+        ((action == null) && (name != null))) {
+      if (name == null) {
+        throw 'Bad entry point: expected "name" element in $rootDesc';
+      }
+
+      final String prefix = {
+            'get': LibraryIndex.getterPrefix,
+            'set': LibraryIndex.setterPrefix
+          }[action] ??
+          '';
+
+      Member member;
+
+      if (class_ != null) {
+        final classDotPrefix = class_ + '.';
+        if ((name == class_) || name.startsWith(classDotPrefix)) {
+          // constructor
+          if (action != 'call' && action != null) {
+            throw 'Bad entry point: action "$action" is not applicable to'
+                ' constructor in $rootDesc';
+          }
+
+          final constructorName =
+              (name == class_) ? '' : name.substring(classDotPrefix.length);
+
+          member = libraryIndex.getMember(library, class_, constructorName);
+        } else {
+          member = libraryIndex.tryGetMember(library, class_, prefix + name);
+          if (member == null) {
+            member = libraryIndex.getMember(library, class_, name);
+          }
+        }
+      } else {
+        member = libraryIndex.tryGetTopLevelMember(
+            library, /* unused */ null, prefix + name);
+        if (member == null) {
+          member = libraryIndex.getTopLevelMember(library, name);
+        }
+      }
+
+      assertx(member != null);
+
+      CallKind callKind;
+
+      if (action == null) {
+        if ((member is Field) || ((member is Procedure) && member.isGetter)) {
+          callKind = CallKind.PropertyGet;
+        } else if ((member is Procedure) && member.isSetter) {
+          callKind = CallKind.PropertySet;
+        } else {
+          callKind = CallKind.Method;
+        }
+      } else {
+        callKind = const {
+          'get': CallKind.PropertyGet,
+          'set': CallKind.PropertySet,
+          'call': CallKind.Method
+        }[action];
+      }
+
+      assertx(callKind != null);
+
+      final Selector selector = member.isInstanceMember
+          ? new InterfaceSelector(member, callKind: callKind)
+          : new DirectSelector(member, callKind: callKind);
+
+      entryPointsListener.addRawCall(selector);
+
+      if ((action == null) && (member is Field) && !member.isFinal) {
+        Selector selector = member.isInstanceMember
+            ? new InterfaceSelector(member, callKind: CallKind.PropertySet)
+            : new DirectSelector(member, callKind: CallKind.PropertySet);
+
+        entryPointsListener.addRawCall(selector);
+      }
+    } else {
+      throw 'Bad entry point: unrecognized action "$action" in $rootDesc';
+    }
+  }
+
+  /// Reads JSON describing entry points and native methods from [jsonString].
+  /// Adds all global entry points using [entryPointsListener].
+  ///
+  /// The format of the JSON descriptor is described in
+  /// 'runtime/vm/compiler/aot/entry_points_json.md'.
+  void processEntryPointsJSON(
+      String jsonString, EntryPointsListener entryPointsListener) {
+    final json = JSON.decode(jsonString);
+
+    final roots = json['roots'];
+    if (roots != null) {
+      for (var root in roots) {
+        _addRoot(new Map<String, String>.from(root), entryPointsListener);
+      }
+    }
+
+    final nativeMethods = json['native-methods'];
+    if (nativeMethods != null) {
+      nativeMethods.forEach((name, actions) {
+        _nativeMethods[name] = new List<Map<String, dynamic>>.from(
+            actions.map((action) => new Map<String, dynamic>.from(action)));
+      });
+    }
+  }
+
+  /// Reads JSON files [jsonFiles] describing entry points and native methods.
+  /// Adds all global entry points using [entryPointsListener].
+  ///
+  /// The format of the JSON descriptor is described in
+  /// 'runtime/vm/compiler/aot/entry_points_json.md'.
+  void processEntryPointsJSONFiles(
+      List<String> jsonFiles, EntryPointsListener entryPointsListener) {
+    for (var file in jsonFiles) {
+      processEntryPointsJSON(
+          new File(file).readAsStringSync(), entryPointsListener);
+    }
+  }
+}
diff --git a/pkg/vm/lib/transformations/type_flow/summary.dart b/pkg/vm/lib/transformations/type_flow/summary.dart
new file mode 100644
index 0000000..cb5aca1
--- /dev/null
+++ b/pkg/vm/lib/transformations/type_flow/summary.dart
@@ -0,0 +1,301 @@
+// 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.
+
+/// Type flow summary of a member, function or initializer.
+library vm.transformations.type_flow.summary;
+
+import 'dart:core' hide Type;
+
+import 'package:kernel/ast.dart' hide Statement, StatementVisitor;
+
+import 'calls.dart';
+import 'types.dart';
+import 'utils.dart';
+
+abstract class CallHandler {
+  Type applyCall(
+      Call callSite, Selector selector, Args<Type> args, bool isResultUsed);
+}
+
+/// Base class for all statements in a summary.
+abstract class Statement extends TypeExpr {
+  /// Index of this statement in the [Summary].
+  int index = -1;
+
+  @override
+  Type getComputedType(List<Type> types) {
+    final type = types[index];
+    assertx(type != null);
+    return type;
+  }
+
+  String get name => "t$index";
+
+  @override
+  String toString() => name;
+
+  /// Prints body of this statement.
+  String dump();
+
+  /// Visit this statement by calling a corresponding [visitor] method.
+  void accept(StatementVisitor visitor);
+
+  /// Execute this statement and compute its resulting type.
+  Type apply(List<Type> computedTypes, TypeHierarchy typeHierarchy,
+      CallHandler callHandler);
+}
+
+/// Statement visitor.
+class StatementVisitor {
+  void visitDefault(TypeExpr expr) {}
+
+  void visitParameter(Parameter expr) => visitDefault(expr);
+  void visitNarrow(Narrow expr) => visitDefault(expr);
+  void visitJoin(Join expr) => visitDefault(expr);
+  void visitCall(Call expr) => visitDefault(expr);
+}
+
+/// Input parameter of the summary.
+class Parameter extends Statement {
+  final String _name;
+  final DartType staticType;
+  Type defaultValue;
+
+  Parameter(this._name, this.staticType);
+
+  String get name => _name != null ? "%$_name" : super.name;
+
+  @override
+  void accept(StatementVisitor visitor) => visitor.visitParameter(this);
+
+  @override
+  String dump() => "$name = _Parameter #$index [$staticType]";
+
+  @override
+  Type apply(List<Type> computedTypes, TypeHierarchy typeHierarchy,
+          CallHandler callHandler) =>
+      throw 'Unable to apply _Parameter';
+}
+
+/// Narrows down [arg] to [type].
+class Narrow extends Statement {
+  TypeExpr arg;
+  Type type;
+
+  Narrow(this.arg, this.type);
+
+  @override
+  DartType get staticType => type.staticType;
+
+  @override
+  void accept(StatementVisitor visitor) => visitor.visitNarrow(this);
+
+  @override
+  String dump() => "$name = _Narrow ($arg to $type)";
+
+  @override
+  Type apply(List<Type> computedTypes, TypeHierarchy typeHierarchy,
+          CallHandler callHandler) =>
+      arg.getComputedType(computedTypes).intersection(type, typeHierarchy);
+}
+
+/// Joins values from multiple sources. Its type is a union of [values].
+class Join extends Statement {
+  final String _name;
+  final DartType staticType;
+  final List<TypeExpr> values = <TypeExpr>[]; // TODO(alexmarkov): Set
+
+  Join(this._name, this.staticType);
+
+  String get name => _name ?? super.name;
+
+  @override
+  void accept(StatementVisitor visitor) => visitor.visitJoin(this);
+
+  @override
+  String dump() => "$name = _Join [$staticType] (${values.join(", ")})";
+
+  @override
+  Type apply(List<Type> computedTypes, TypeHierarchy typeHierarchy,
+      CallHandler callHandler) {
+    Type type = null;
+    assertx(values.isNotEmpty);
+    for (var value in values) {
+      final valueType = value.getComputedType(computedTypes);
+      type = type != null ? type.union(valueType, typeHierarchy) : valueType;
+    }
+    return type;
+  }
+}
+
+/// Call site.
+class Call extends Statement {
+  final Selector selector;
+  final Args<TypeExpr> args;
+  final DartType staticType;
+
+  Call(this.selector, this.args, this.staticType);
+
+  @override
+  void accept(StatementVisitor visitor) => visitor.visitCall(this);
+
+  @override
+  String dump() => "$name${isResultUsed ? '*' : ''} = _Call $selector $args";
+
+  @override
+  Type apply(List<Type> computedTypes, TypeHierarchy typeHierarchy,
+      CallHandler callHandler) {
+    final List<Type> argTypes = new List<Type>(args.values.length);
+    for (int i = 0; i < args.values.length; i++) {
+      final Type type = args.values[i].getComputedType(computedTypes);
+      if (type == const EmptyType()) {
+        debugPrint("Optimized call with empty arg");
+        return const EmptyType();
+      }
+      argTypes[i] = type;
+    }
+    if (selector is! DirectSelector) {
+      _observeReceiverType(argTypes[0]);
+    }
+    final Type result = callHandler.applyCall(this, selector,
+        new Args<Type>(argTypes, names: args.names), isResultUsed);
+    if (isResultUsed) {
+      _observeResultType(result);
+    }
+    return result;
+  }
+
+  // --- Inferred call site information. ---
+
+  int _flags = 0;
+
+  static const int kMonomorphic = (1 << 0);
+  static const int kPolymorphic = (1 << 1);
+  static const int kNullableReceiver = (1 << 2);
+  static const int kResultUsed = (1 << 3);
+  static const int kNullableResult = (1 << 4);
+
+  Member _monomorphicTarget;
+
+  Member get monomorphicTarget => _monomorphicTarget;
+
+  bool get isMonomorphic => (_flags & kMonomorphic) != 0;
+
+  bool get isPolymorphic => (_flags & kPolymorphic) != 0;
+
+  bool get isNullableReceiver => (_flags & kNullableReceiver) != 0;
+
+  bool get isResultUsed => (_flags & kResultUsed) != 0;
+
+  bool get isNullableResult => (_flags & kNullableResult) != 0;
+
+  void setResultUsed() {
+    _flags |= kResultUsed;
+  }
+
+  void setPolymorphic() {
+    _flags = (_flags & ~kMonomorphic) | kPolymorphic;
+    _monomorphicTarget = null;
+  }
+
+  void addTarget(Member target) {
+    if (!isPolymorphic) {
+      if (isMonomorphic) {
+        if (_monomorphicTarget != target) {
+          setPolymorphic();
+        }
+      } else {
+        _flags |= kMonomorphic;
+        _monomorphicTarget = target;
+      }
+    }
+  }
+
+  void _observeReceiverType(Type receiver) {
+    if (receiver is NullableType) {
+      _flags |= kNullableReceiver;
+    }
+  }
+
+  void _observeResultType(Type result) {
+    if (result is NullableType) {
+      _flags |= kNullableResult;
+    }
+    // TODO(alexmarkov): Record result types.
+  }
+}
+
+/// Summary is a linear sequence of statements representing a type flow in
+/// one member, function or initializer.
+class Summary {
+  final int parameterCount;
+  final int requiredParameterCount;
+
+  List<Statement> _statements = <Statement>[];
+  TypeExpr result = null;
+
+  Summary({this.parameterCount: 0, this.requiredParameterCount: 0});
+
+  List<Statement> get statements => _statements;
+
+  Statement add(Statement op) {
+    op.index = _statements.length;
+    _statements.add(op);
+    return op;
+  }
+
+  void reset() {
+    _statements = <Statement>[];
+  }
+
+  @override
+  String toString() {
+    return _statements.map((op) => op.dump()).join("\n") +
+        "\n" +
+        "RESULT: ${result}";
+  }
+
+  /// Apply this summary to the given arguments and return the resulting type.
+  Type apply(Args<Type> arguments, TypeHierarchy typeHierarchy,
+      CallHandler callHandler) {
+    // TODO(alexmarkov): take named parameters into account
+    final args = arguments.positional;
+
+    assertx(args.length >= requiredParameterCount);
+    assertx(args.length <= parameterCount);
+
+    // Interpret statements sequentially, calculating the result type
+    // of each statement and putting it into the 'types' list parallel
+    // to `_statements`.
+    //
+    // After normalization, statements can only reference preceding statements
+    // (they can't have forward references or loops).
+    //
+    // The first `parameterCount` statements are Parameters.
+
+    List<Type> types = new List<Type>(_statements.length);
+
+    types.setAll(0, args);
+
+    for (int i = args.length; i < parameterCount; i++) {
+      types[i] = (_statements[i] as Parameter).defaultValue;
+      assertx(types[i] != null);
+    }
+
+    for (int i = parameterCount; i < _statements.length; i++) {
+      // Test if tracing is enabled to avoid expensive message formatting.
+      if (kPrintTrace) {
+        tracePrint("EVAL ${_statements[i].dump()}");
+      }
+      types[i] = _statements[i].apply(types, typeHierarchy, callHandler);
+      if (kPrintTrace) {
+        tracePrint("RESULT ${types[i]}");
+      }
+    }
+
+    Statistics.summariesAnalyzed++;
+
+    return result.getComputedType(types);
+  }
+}
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
new file mode 100644
index 0000000..911d7dd
--- /dev/null
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -0,0 +1,1053 @@
+// 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.
+
+/// Creation of type flow summaries out of kernel AST.
+library vm.transformations.type_flow.summary_collector;
+
+import 'dart:core' hide Type;
+
+import 'package:kernel/ast.dart' hide Statement, StatementVisitor;
+import 'package:kernel/type_environment.dart' show TypeEnvironment;
+
+import 'calls.dart';
+import 'native_code.dart';
+import 'summary.dart';
+import 'types.dart';
+import 'utils.dart';
+
+/// Summary collector relies on either full or partial mixin resolution.
+/// Currently VmTarget.performModularTransformationsOnLibraries performs
+/// partial mixin resolution.
+const bool kPartialMixinResolution = true;
+
+/// Normalizes and optimizes summary after it is created.
+/// More specifically:
+/// * Breaks loops between statements.
+/// * Removes unused statements (except parameters and calls).
+/// * Eliminates joins with a single input.
+class _SummaryNormalizer extends StatementVisitor {
+  final Summary _summary;
+  Set<Statement> _processed = new Set<Statement>();
+  Set<Statement> _pending = new Set<Statement>();
+  bool _inLoop = false;
+
+  _SummaryNormalizer(this._summary);
+
+  void normalize() {
+    var statements = _summary.statements;
+    _summary.reset();
+
+    for (int i = 0; i < _summary.parameterCount; i++) {
+      _processed.add(statements[i]);
+      _summary.add(statements[i]);
+    }
+
+    for (Statement st in statements) {
+      if (st is Call) {
+        _normalizeExpr(st, false);
+      }
+    }
+
+    _summary.result = _normalizeExpr(_summary.result, true);
+  }
+
+  TypeExpr _normalizeExpr(TypeExpr st, bool isResultUsed) {
+    assertx(!_inLoop);
+    if (st is Statement) {
+      if (isResultUsed && (st is Call)) {
+        st.setResultUsed();
+      }
+      if (_processed.contains(st)) {
+        return st;
+      }
+      if (_pending.add(st)) {
+        st.accept(this);
+        _pending.remove(st);
+
+        if (_inLoop) {
+          return _handleLoop(st);
+        }
+
+        if (st is Join) {
+          if (st.values.length == 1) {
+            return st.values.single;
+          }
+        }
+
+        _processed.add(st);
+        _summary.add(st);
+        return st;
+      } else {
+        // Cyclic expression.
+        return _handleLoop(st);
+      }
+    } else {
+      assertx(st is Type);
+      return st;
+    }
+  }
+
+  TypeExpr _handleLoop(Statement st) {
+    if (st is Join) {
+      // Approximate Join with static type.
+      _inLoop = false;
+      debugPrint("Approximated ${st} with ${st.staticType}");
+      Statistics.joinsApproximatedToBreakLoops++;
+      return new Type.fromStatic(st.staticType);
+    } else {
+      // Step back until Join is found.
+      _inLoop = true;
+      return st;
+    }
+  }
+
+  @override
+  void visitNarrow(Narrow expr) {
+    expr.arg = _normalizeExpr(expr.arg, true);
+  }
+
+  @override
+  void visitJoin(Join expr) {
+    for (int i = 0; i < expr.values.length; i++) {
+      expr.values[i] = _normalizeExpr(expr.values[i], true);
+
+      if (_inLoop) {
+        return;
+      }
+    }
+  }
+
+  @override
+  void visitCall(Call expr) {
+    for (int i = 0; i < expr.args.values.length; i++) {
+      expr.args.values[i] = _normalizeExpr(expr.args.values[i], true);
+
+      if (_inLoop) {
+        return;
+      }
+    }
+  }
+}
+
+/// Create a type flow summary for a member from the kernel AST.
+class SummaryCollector extends RecursiveVisitor<TypeExpr> {
+  final TypeEnvironment _environment;
+  final EntryPointsListener _entryPointsListener;
+  final NativeCodeOracle _nativeCodeOracle;
+
+  final Map<TreeNode, Call> callSites = <TreeNode, Call>{};
+
+  Summary _summary;
+  Map<VariableDeclaration, Join> _variables;
+  Join _returnValue;
+  Parameter _receiver;
+
+  SummaryCollector(
+      this._environment, this._entryPointsListener, this._nativeCodeOracle);
+
+  Summary createSummary(Member member) {
+    debugPrint("===== ${member} =====");
+    assertx(!member.isAbstract);
+
+    _variables = <VariableDeclaration, Join>{};
+    _returnValue = null;
+    _receiver = null;
+
+    if (member is Field) {
+      _summary = new Summary();
+
+      if (member.initializer != null) {
+        _summary.result = _visit(member.initializer);
+      } else {
+        if (_isDefaultValueOfFieldObservable(member)) {
+          _summary.result = new Type.nullable(new Type.empty());
+        } else {
+          _summary.result = new Type.empty();
+        }
+      }
+    } else {
+      FunctionNode function = member.function;
+
+      final hasReceiver = hasReceiverArg(member);
+      final firstParamIndex = hasReceiver ? 1 : 0;
+
+      _summary = new Summary(
+          parameterCount:
+              firstParamIndex + function.positionalParameters.length,
+          requiredParameterCount:
+              firstParamIndex + function.requiredParameterCount);
+
+      if (hasReceiver) {
+        // TODO(alexmarkov): subclass cone
+        _receiver = _declareParameter(
+            "this", new InterfaceType(member.enclosingClass), null);
+        _environment.thisType = member.enclosingClass?.thisType;
+      }
+
+      for (VariableDeclaration param in function.positionalParameters) {
+        _declareParameter(param.name, param.type, param.initializer);
+      }
+
+      int count = 0;
+      for (VariableDeclaration param in function.positionalParameters) {
+        Join v = _declareVariable(param);
+        v.values.add(_summary.statements[firstParamIndex + count]);
+        ++count;
+      }
+
+      // TODO(alexmarkov): take named parameters into account
+      function.namedParameters.forEach(_declareVariableWithStaticType);
+
+      _returnValue = new Join("%result", function.returnType);
+      _summary.add(_returnValue);
+
+      if (member is Constructor) {
+        // Make sure instance field initializers are visited.
+        for (var f in member.enclosingClass.members) {
+          if ((f is Field) && (!f.isStatic) && (f.initializer != null)) {
+            // Implicitly evaluates and includes field initializer.
+            // TODO(alexmarkov): Consider including field initializer code into constructors.
+            _entryPointsListener.addRawCall(
+                new DirectSelector(f, callKind: CallKind.PropertyGet));
+          }
+        }
+        member.initializers.forEach(_visit);
+      }
+
+      if (function.body == null) {
+        Type type = _nativeCodeOracle.handleNativeProcedure(
+            member, _entryPointsListener);
+        if (_returnValue != null) {
+          _returnValue.values.add(type);
+        }
+      } else {
+        _visit(function.body);
+      }
+
+      if (_returnValue.values.isEmpty) {
+        _returnValue.values.add(_nullType);
+      }
+      _summary.result = _returnValue;
+      _environment.thisType = null;
+    }
+
+    debugPrint("------------ SUMMARY ------------");
+    debugPrint(_summary);
+    debugPrint("---------------------------------");
+
+    new _SummaryNormalizer(_summary).normalize();
+
+    debugPrint("---------- NORM SUMMARY ---------");
+    debugPrint(_summary);
+    debugPrint("---------------------------------");
+
+    Statistics.summariesCreated++;
+
+    return _summary;
+  }
+
+  Args<Type> rawArguments(Selector selector) {
+    final member = selector.member;
+    assertx(member != null);
+
+    List<Type> args = <Type>[];
+
+    if (hasReceiverArg(member)) {
+      assertx(member.enclosingClass != null);
+      Type receiver = new Type.cone(member.enclosingClass.rawType);
+      args.add(receiver);
+    }
+
+    switch (selector.callKind) {
+      case CallKind.Method:
+        if (member is! Field) {
+          final function = member.function;
+          assertx(function != null);
+
+          for (var decl in function.positionalParameters) {
+            args.add(new Type.fromStatic(decl.type));
+          }
+
+          // TODO(alexmarkov): take named parameters into account
+        }
+        break;
+
+      case CallKind.PropertyGet:
+        break;
+
+      case CallKind.PropertySet:
+        args.add(new Type.fromStatic(member.setterType));
+        break;
+    }
+
+    return new Args<Type>(args);
+  }
+
+  bool _isDefaultValueOfFieldObservable(Field field) {
+    if (field.isStatic) {
+      return true;
+    }
+
+    final enclosingClass = field.enclosingClass;
+    assertx(enclosingClass != null);
+
+    // Default value is not ebservable if every generative constructor
+    // is redirecting or initializes the field.
+    return !enclosingClass.constructors.every((Constructor constr) {
+      for (var initializer in constr.initializers) {
+        if ((initializer is RedirectingInitializer) ||
+            ((initializer is FieldInitializer) &&
+                (initializer.field == field))) {
+          return true;
+        }
+      }
+      return false;
+    });
+  }
+
+  TypeExpr _visit(TreeNode node) => node.accept(this);
+
+  Args<TypeExpr> _visitArguments(TypeExpr receiver, Arguments arguments) {
+    var args = <TypeExpr>[];
+    if (receiver != null) {
+      args.add(receiver);
+    }
+    for (Expression arg in arguments.positional) {
+      args.add(_visit(arg));
+    }
+    // TODO(alexmarkov): take named arguments into account
+    for (NamedExpression arg in arguments.named) {
+      _visit(arg.value);
+    }
+    return new Args<TypeExpr>(args);
+  }
+
+  Parameter _declareParameter(
+      String name, DartType type, Expression initializer) {
+    final param = new Parameter(name, type);
+    _summary.add(param);
+    assertx(param.index < _summary.parameterCount);
+    if (param.index >= _summary.requiredParameterCount) {
+      // TODO(alexmarkov): get actual type of constant initializer
+      param.defaultValue = (initializer != null)
+          ? new Type.fromStatic(initializer.getStaticType(_environment))
+          : _nullType;
+    } else {
+      assertx(initializer == null);
+    }
+    return param;
+  }
+
+  Join _declareVariable(VariableDeclaration decl) {
+    Join v = new Join(decl.name, decl.type);
+    _summary.add(v);
+    _variables[decl] = v;
+    if (decl.initializer != null) {
+      v.values.add(_visit(decl.initializer));
+    }
+    return v;
+  }
+
+  void _declareVariableWithStaticType(VariableDeclaration decl) {
+    Join v = _declareVariable(decl);
+    v.values.add(new Type.fromStatic(v.staticType));
+  }
+
+  Call _makeCall(TreeNode node, Selector selector, Args<TypeExpr> args) {
+    DartType staticType =
+        (node is Expression) ? node.getStaticType(_environment) : null;
+    Call call = new Call(selector, args, staticType);
+    _summary.add(call);
+    callSites[node] = call;
+    return call;
+  }
+
+  TypeExpr _makeNarrow(TypeExpr arg, Type type) {
+    if (arg is Type) {
+      // TODO(alexmarkov): more constant folding
+      if ((arg is NullableType) && (arg.baseType == const AnyType())) {
+        debugPrint("Optimized _Narrow of dynamic");
+        return type;
+      }
+    }
+    Narrow narrow = new Narrow(arg, type);
+    _summary.add(narrow);
+    return narrow;
+  }
+
+  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);
+
+  Type _cachedDoubleType;
+  Type get _doubleType =>
+      _cachedDoubleType ??= new Type.cone(_environment.doubleType);
+
+  Type _cachedIntType;
+  Type get _intType => _cachedIntType ??= new Type.cone(_environment.intType);
+
+  Type _cachedStringType;
+  Type get _stringType =>
+      _cachedStringType ??= new Type.cone(_environment.stringType);
+
+  Type _cachedNullType;
+  Type get _nullType => _cachedNullType ??= new Type.nullable(new Type.empty());
+
+  Class get _superclass => _environment.thisType.classNode.superclass;
+
+  void _handleNestedFunctionNode(FunctionNode node) {
+    var oldReturn = _returnValue;
+    var oldVariables = _variables;
+    _returnValue = null;
+    _variables = <VariableDeclaration, Join>{};
+    _variables.addAll(oldVariables);
+
+    // Approximate parameters of nested functions with static types.
+    node.positionalParameters.forEach(_declareVariableWithStaticType);
+    node.namedParameters.forEach(_declareVariableWithStaticType);
+
+    _visit(node.body);
+
+    _returnValue = oldReturn;
+    _variables = oldVariables;
+  }
+
+  @override
+  defaultTreeNode(TreeNode node) =>
+      throw 'Unexpected node ${node.runtimeType}: $node at ${node.location}';
+
+  @override
+  TypeExpr visitAsExpression(AsExpression node) {
+    TypeExpr operand = _visit(node.operand);
+    Type type = new Type.fromStatic(node.type);
+    return _makeNarrow(operand, type);
+  }
+
+  @override
+  TypeExpr visitBoolLiteral(BoolLiteral node) {
+    return _boolType;
+  }
+
+  @override
+  TypeExpr visitIntLiteral(IntLiteral node) {
+    return _intType;
+  }
+
+  @override
+  TypeExpr visitDoubleLiteral(DoubleLiteral node) {
+    return _doubleType;
+  }
+
+  @override
+  TypeExpr visitConditionalExpression(ConditionalExpression node) {
+    _visit(node.condition);
+
+    Join v = new Join(null, node.getStaticType(_environment));
+    _summary.add(v);
+    v.values.add(_visit(node.then));
+    v.values.add(_visit(node.otherwise));
+    return _makeNarrow(v, _staticType(node));
+  }
+
+  @override
+  TypeExpr visitConstructorInvocation(ConstructorInvocation node) {
+    final receiver = _concreteType(node.constructedType);
+
+    _entryPointsListener.addAllocatedType(node.constructedType);
+
+    final args = _visitArguments(receiver, node.arguments);
+    _makeCall(node, new DirectSelector(node.target), args);
+    return receiver;
+  }
+
+  @override
+  TypeExpr visitDirectMethodInvocation(DirectMethodInvocation node) {
+    final receiver = _visit(node.receiver);
+    final args = _visitArguments(receiver, node.arguments);
+    assertx(node.target is! Field);
+    assertx(!node.target.isGetter && !node.target.isSetter);
+    return _makeCall(node, new DirectSelector(node.target), args);
+  }
+
+  @override
+  TypeExpr visitDirectPropertyGet(DirectPropertyGet node) {
+    final receiver = _visit(node.receiver);
+    final args = new Args<TypeExpr>([receiver]);
+    final target = node.target;
+    if ((target is Field) || ((target is Procedure) && target.isGetter)) {
+      return _makeCall(node,
+          new DirectSelector(target, callKind: CallKind.PropertyGet), args);
+    } else {
+      // Tear-off.
+      // TODO(alexmarkov): capture receiver type
+      _entryPointsListener.addRawCall(new DirectSelector(target));
+      return _staticType(node);
+    }
+  }
+
+  @override
+  TypeExpr visitDirectPropertySet(DirectPropertySet node) {
+    final receiver = _visit(node.receiver);
+    final value = _visit(node.value);
+    final args = new Args<TypeExpr>([receiver, value]);
+    final target = node.target;
+    assertx((target is Field) || ((target is Procedure) && target.isSetter));
+    _makeCall(
+        node, new DirectSelector(target, callKind: CallKind.PropertySet), args);
+    return value;
+  }
+
+  @override
+  TypeExpr visitFunctionExpression(FunctionExpression node) {
+    _handleNestedFunctionNode(node.function);
+    // TODO(alexmarkov): support function types.
+    // return _concreteType(node.function.functionType);
+    return _staticType(node);
+  }
+
+  @override
+  visitInstantiation(Instantiation node) {
+    _visit(node.expression);
+    // TODO(alexmarkov): support generic & function types.
+    return _staticType(node);
+  }
+
+  @override
+  TypeExpr visitInvalidExpression(InvalidExpression node) {
+    return new Type.empty();
+  }
+
+  @override
+  TypeExpr visitIsExpression(IsExpression node) {
+    _visit(node.operand);
+    return _boolType;
+  }
+
+  @override
+  TypeExpr visitLet(Let node) {
+    _declareVariable(node.variable);
+    return _visit(node.body);
+  }
+
+  @override
+  TypeExpr visitListLiteral(ListLiteral node) {
+    node.expressions.forEach(_visit);
+    // TODO(alexmarkov): concrete type
+    return _staticType(node);
+  }
+
+  @override
+  TypeExpr visitLogicalExpression(LogicalExpression node) {
+    _visit(node.left);
+    _visit(node.right);
+    return _boolType;
+  }
+
+  @override
+  TypeExpr visitMapLiteral(MapLiteral node) {
+    for (var entry in node.entries) {
+      _visit(entry.key);
+      _visit(entry.value);
+    }
+    // TODO(alexmarkov): concrete type
+    return _staticType(node);
+  }
+
+  @override
+  TypeExpr visitMethodInvocation(MethodInvocation node) {
+    final receiver = _visit(node.receiver);
+    final args = _visitArguments(receiver, node.arguments);
+    final target = node.interfaceTarget;
+    if (target == null) {
+      if (node.name.name == '==') {
+        assertx(args.values.length == 2);
+        if ((args.values[0] == _nullType) || (args.values[1] == _nullType)) {
+          return _boolType;
+        }
+        _makeCall(node, new DynamicSelector(CallKind.Method, node.name), args);
+        return new Type.nullable(_boolType);
+      }
+      if (node.name.name == 'call') {
+        final recvType = node.receiver.getStaticType(_environment);
+        if ((recvType is FunctionType) ||
+            (recvType == _environment.rawFunctionType)) {
+          // Call to a Function.
+          return _staticType(node);
+        }
+      }
+      return _makeCall(
+          node, new DynamicSelector(CallKind.Method, node.name), args);
+    }
+    if ((target is Field) || ((target is Procedure) && target.isGetter)) {
+      // Call via field.
+      _makeCall(
+          node,
+          new InterfaceSelector(target, callKind: CallKind.PropertyGet),
+          new Args<TypeExpr>([receiver]));
+      return _staticType(node);
+    } else {
+      // TODO(alexmarkov): overloaded arithmetic operators
+      return _makeCall(node, new InterfaceSelector(target), args);
+    }
+  }
+
+  @override
+  TypeExpr visitPropertyGet(PropertyGet node) {
+    var receiver = _visit(node.receiver);
+    var args = new Args<TypeExpr>([receiver]);
+    final target = node.interfaceTarget;
+    if (target == null) {
+      return _makeCall(
+          node, new DynamicSelector(CallKind.PropertyGet, node.name), args);
+    }
+    if ((target is Field) || ((target is Procedure) && target.isGetter)) {
+      return _makeCall(node,
+          new InterfaceSelector(target, callKind: CallKind.PropertyGet), args);
+    } else {
+      // Tear-off.
+      // TODO(alexmarkov): capture receiver type
+      _entryPointsListener.addRawCall(new InterfaceSelector(target));
+      return _staticType(node);
+    }
+  }
+
+  @override
+  TypeExpr visitPropertySet(PropertySet node) {
+    var receiver = _visit(node.receiver);
+    var value = _visit(node.value);
+    var args = new Args<TypeExpr>([receiver, value]);
+    final target = node.interfaceTarget;
+    if (target == null) {
+      _makeCall(
+          node, new DynamicSelector(CallKind.PropertySet, node.name), args);
+    } else {
+      assertx((target is Field) || ((target is Procedure) && target.isSetter));
+      _makeCall(node,
+          new InterfaceSelector(target, callKind: CallKind.PropertySet), args);
+    }
+    return value;
+  }
+
+  @override
+  TypeExpr visitSuperMethodInvocation(SuperMethodInvocation node) {
+    assertx(kPartialMixinResolution);
+    assertx(_receiver != null, details: node);
+    final args = _visitArguments(_receiver, node.arguments);
+    // Re-resolve target due to partial mixin resolution.
+    final target =
+        _environment.hierarchy.getDispatchTarget(_superclass, node.name);
+    if (target == null) {
+      return new Type.empty();
+    } else {
+      if ((target is Field) || ((target is Procedure) && target.isGetter)) {
+        // Call via field.
+        _makeCall(
+            node,
+            new DirectSelector(target, callKind: CallKind.PropertyGet),
+            new Args<TypeExpr>([_receiver]));
+        return _staticType(node);
+      } else {
+        return _makeCall(node, new DirectSelector(target), args);
+      }
+    }
+  }
+
+  @override
+  TypeExpr visitSuperPropertyGet(SuperPropertyGet node) {
+    assertx(kPartialMixinResolution);
+    assertx(_receiver != null, details: node);
+    final args = new Args<TypeExpr>([_receiver]);
+    // Re-resolve target due to partial mixin resolution.
+    final target =
+        _environment.hierarchy.getDispatchTarget(_superclass, node.name);
+    if (target == null) {
+      return new Type.empty();
+    } else {
+      if ((target is Field) || ((target is Procedure) && target.isGetter)) {
+        return _makeCall(node,
+            new DirectSelector(target, callKind: CallKind.PropertyGet), args);
+      } else {
+        // Tear-off.
+        // TODO(alexmarkov): capture receiver type
+        _entryPointsListener.addRawCall(new DirectSelector(target));
+        return _staticType(node);
+      }
+    }
+  }
+
+  @override
+  TypeExpr visitSuperPropertySet(SuperPropertySet node) {
+    assertx(kPartialMixinResolution);
+    assertx(_receiver != null, details: node);
+    final value = _visit(node.value);
+    final args = new Args<TypeExpr>([_receiver, value]);
+    // Re-resolve target due to partial mixin resolution.
+    final target = _environment.hierarchy
+        .getDispatchTarget(_superclass, node.name, setter: true);
+    if (target != null) {
+      assertx((target is Field) || ((target is Procedure) && target.isSetter));
+      return _makeCall(node,
+          new DirectSelector(target, callKind: CallKind.PropertySet), args);
+    }
+    return value;
+  }
+
+  @override
+  TypeExpr visitNot(Not node) {
+    _visit(node.operand);
+    return _boolType;
+  }
+
+  @override
+  TypeExpr visitNullLiteral(NullLiteral node) {
+    return _nullType;
+  }
+
+  @override
+  TypeExpr visitRethrow(Rethrow node) {
+    return new Type.empty();
+  }
+
+  @override
+  TypeExpr visitStaticGet(StaticGet node) {
+    final args = new Args<TypeExpr>(const <TypeExpr>[]);
+    final target = node.target;
+    if ((target is Field) || (target is Procedure) && target.isGetter) {
+      return _makeCall(node,
+          new DirectSelector(target, callKind: CallKind.PropertyGet), args);
+    } else {
+      // Tear-off.
+      _entryPointsListener.addRawCall(new DirectSelector(target));
+      return _staticType(node);
+    }
+  }
+
+  @override
+  TypeExpr visitStaticInvocation(StaticInvocation node) {
+    final args = _visitArguments(null, node.arguments);
+    final target = node.target;
+    assertx((target is! Field) && !target.isGetter && !target.isSetter);
+    return _makeCall(node, new DirectSelector(target), args);
+  }
+
+  @override
+  TypeExpr visitStaticSet(StaticSet node) {
+    final value = _visit(node.value);
+    final args = new Args<TypeExpr>([value]);
+    final target = node.target;
+    assertx((target is Field) || (target is Procedure) && target.isSetter);
+    _makeCall(
+        node, new DirectSelector(target, callKind: CallKind.PropertySet), args);
+    return value;
+  }
+
+  @override
+  TypeExpr visitStringConcatenation(StringConcatenation node) {
+    node.expressions.forEach(_visit);
+    return _stringType;
+  }
+
+  @override
+  TypeExpr visitStringLiteral(StringLiteral node) {
+    return _stringType;
+  }
+
+  @override
+  TypeExpr visitSymbolLiteral(SymbolLiteral node) {
+    return _staticType(node);
+  }
+
+  @override
+  TypeExpr visitThisExpression(ThisExpression node) {
+    assertx(_receiver != null, details: node);
+    return _receiver;
+  }
+
+  @override
+  TypeExpr visitThrow(Throw node) {
+    _visit(node.expression);
+    return new Type.empty();
+  }
+
+  @override
+  TypeExpr visitTypeLiteral(TypeLiteral node) {
+    return new Type.cone(_environment.typeType);
+  }
+
+  @override
+  TypeExpr visitVariableGet(VariableGet node) {
+    Join v = _variables[node.variable];
+    if (v == null) {
+      throw 'Unable to find variable ${node.variable}';
+    }
+
+    if ((node.promotedType != null) &&
+        (node.promotedType != const DynamicType())) {
+      return _makeNarrow(v, new Type.cone(node.promotedType));
+    }
+
+    return v;
+  }
+
+  @override
+  TypeExpr visitVariableSet(VariableSet node) {
+    Join v = _variables[node.variable];
+    assertx(v != null, details: node);
+
+    TypeExpr value = _visit(node.value);
+    v.values.add(value);
+    return value;
+  }
+
+  @override
+  TypeExpr visitLoadLibrary(LoadLibrary node) {
+    return _staticType(node);
+  }
+
+  @override
+  TypeExpr visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
+    return _staticType(node);
+  }
+
+  @override
+  TypeExpr visitVectorCreation(VectorCreation node) {
+    // TODO(alexmarkov): List<_Context>?
+    return _staticType(node);
+  }
+
+  @override
+  TypeExpr visitVectorGet(VectorGet node) {
+    _visit(node.vectorExpression);
+    return _staticType(node);
+  }
+
+  @override
+  TypeExpr visitVectorSet(VectorSet node) {
+    _visit(node.vectorExpression);
+    return _visit(node.value);
+  }
+
+  @override
+  TypeExpr visitVectorCopy(VectorCopy node) {
+    _visit(node.vectorExpression);
+    return _staticType(node);
+  }
+
+  @override
+  TypeExpr visitClosureCreation(ClosureCreation node) {
+    _visit(node.contextVector);
+    return _staticType(node);
+  }
+
+  @override
+  TypeExpr visitAssertStatement(AssertStatement node) {
+    _visit(node.condition);
+    if (node.message != null) {
+      _visit(node.message);
+    }
+    return null;
+  }
+
+  @override
+  TypeExpr visitBlock(Block node) {
+    node.statements.forEach(_visit);
+    return null;
+  }
+
+  @override
+  TypeExpr visitBreakStatement(BreakStatement node) => null;
+
+  @override
+  TypeExpr visitContinueSwitchStatement(ContinueSwitchStatement node) => null;
+
+  @override
+  TypeExpr visitDoStatement(DoStatement node) {
+    _visit(node.body);
+    _visit(node.condition);
+    return null;
+  }
+
+  @override
+  TypeExpr visitEmptyStatement(EmptyStatement node) => null;
+
+  @override
+  TypeExpr visitExpressionStatement(ExpressionStatement node) {
+    _visit(node.expression);
+    return null;
+  }
+
+  @override
+  TypeExpr visitForInStatement(ForInStatement node) {
+    _visit(node.iterable);
+    // TODO(alexmarkov): try to infer more precise type from 'iterable'
+    _declareVariableWithStaticType(node.variable);
+    _visit(node.body);
+    return null;
+  }
+
+  @override
+  TypeExpr visitForStatement(ForStatement node) {
+    node.variables.forEach(visitVariableDeclaration);
+    if (node.condition != null) {
+      _visit(node.condition);
+    }
+    node.updates.forEach(_visit);
+    _visit(node.body);
+    return null;
+  }
+
+  @override
+  TypeExpr visitFunctionDeclaration(FunctionDeclaration node) {
+    Join v = _declareVariable(node.variable);
+    // TODO(alexmarkov): support function types.
+    // v.values.add(_concreteType(node.function.functionType));
+    v.values.add(new Type.fromStatic(v.staticType));
+    _handleNestedFunctionNode(node.function);
+    return null;
+  }
+
+  @override
+  TypeExpr visitIfStatement(IfStatement node) {
+    _visit(node.condition);
+    _visit(node.then);
+    if (node.otherwise != null) {
+      _visit(node.otherwise);
+    }
+    return null;
+  }
+
+  @override
+  TypeExpr visitLabeledStatement(LabeledStatement node) {
+    _visit(node.body);
+    return null;
+  }
+
+  @override
+  TypeExpr visitReturnStatement(ReturnStatement node) {
+    if (node.expression != null) {
+      TypeExpr ret = _visit(node.expression);
+      if (_returnValue != null) {
+        _returnValue.values.add(ret);
+      }
+    }
+    return null;
+  }
+
+  @override
+  visitSwitchStatement(SwitchStatement node) {
+    _visit(node.expression);
+    for (var switchCase in node.cases) {
+      switchCase.expressions.forEach(_visit);
+      _visit(switchCase.body);
+    }
+  }
+
+  @override
+  visitTryCatch(TryCatch node) {
+    _visit(node.body);
+    for (var catchClause in node.catches) {
+      if (catchClause.exception != null) {
+        _declareVariableWithStaticType(catchClause.exception);
+      }
+      if (catchClause.stackTrace != null) {
+        _declareVariableWithStaticType(catchClause.stackTrace);
+      }
+      _visit(catchClause.body);
+    }
+  }
+
+  @override
+  visitTryFinally(TryFinally node) {
+    _visit(node.body);
+    _visit(node.finalizer);
+  }
+
+  @override
+  visitVariableDeclaration(VariableDeclaration node) {
+    final v = _declareVariable(node);
+    if (node.initializer == null) {
+      v.values.add(_nullType);
+    }
+  }
+
+  @override
+  visitWhileStatement(WhileStatement node) {
+    _visit(node.condition);
+    _visit(node.body);
+  }
+
+  @override
+  visitYieldStatement(YieldStatement node) {
+    _visit(node.expression);
+  }
+
+  @override
+  visitFieldInitializer(FieldInitializer node) {
+    final value = _visit(node.value);
+    final args = new Args<TypeExpr>([_receiver, value]);
+    _makeCall(node,
+        new DirectSelector(node.field, callKind: CallKind.PropertySet), args);
+  }
+
+  @override
+  visitRedirectingInitializer(RedirectingInitializer node) {
+    final args = _visitArguments(_receiver, node.arguments);
+    _makeCall(node, new DirectSelector(node.target), args);
+  }
+
+  @override
+  visitSuperInitializer(SuperInitializer node) {
+    final args = _visitArguments(_receiver, node.arguments);
+
+    Constructor target = null;
+    if (kPartialMixinResolution) {
+      // Re-resolve target due to partial mixin resolution.
+      for (var replacement in _superclass.constructors) {
+        if (node.target.name == replacement.name) {
+          target = replacement;
+          break;
+        }
+      }
+    } else {
+      target = node.target;
+    }
+    assertx(target != null);
+    _makeCall(node, new DirectSelector(target), args);
+  }
+
+  @override
+  visitLocalInitializer(LocalInitializer node) {
+    visitVariableDeclaration(node.variable);
+  }
+
+  @override
+  visitAssertInitializer(AssertInitializer node) {
+    _visit(node.statement);
+  }
+
+  @override
+  visitInvalidInitializer(InvalidInitializer node) {}
+}
+
+class CreateAllSummariesVisitor extends RecursiveVisitor<Null> {
+  final TypeEnvironment _environment;
+  final SummaryCollector _summaryColector;
+
+  CreateAllSummariesVisitor(this._environment)
+      : _summaryColector = new SummaryCollector(_environment,
+            new EntryPointsListener(), new NativeCodeOracle(null));
+
+  @override
+  defaultMember(Member m) {
+    if (!m.isAbstract) {
+      _summaryColector.createSummary(m);
+    }
+  }
+}
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
new file mode 100644
index 0000000..2947b68
--- /dev/null
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -0,0 +1,119 @@
+// 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.
+
+/// Transformations based on type flow analysis.
+library vm.transformations.type_flow.transformer;
+
+import 'dart:core' hide Type;
+
+import 'package:kernel/ast.dart' hide Statement, StatementVisitor;
+import 'package:kernel/core_types.dart' show CoreTypes;
+import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
+import 'package:kernel/library_index.dart' show LibraryIndex;
+import 'package:kernel/type_environment.dart';
+
+import 'analysis.dart';
+import 'calls.dart';
+import 'summary_collector.dart';
+import 'utils.dart';
+import '../devirtualization.dart' show Devirtualization;
+import '../../metadata/direct_call.dart';
+
+const bool kDumpAllSummaries =
+    const bool.fromEnvironment('global.type.flow.dump.all.summaries');
+
+/// Whole-program type flow analysis and transformation.
+/// Assumes strong mode and closed world.
+Program transformProgram(CoreTypes coreTypes, Program program) {
+  final hierarchy = new ClassHierarchy(program);
+  final types = new TypeEnvironment(coreTypes, hierarchy, strongMode: true);
+  final libraryIndex = new LibraryIndex.all(program);
+
+  if (kDumpAllSummaries) {
+    Statistics.reset();
+    new CreateAllSummariesVisitor(types).visitProgram(program);
+    Statistics.print("All summaries statistics");
+  }
+
+  Statistics.reset();
+  final analysisStopWatch = new Stopwatch()..start();
+
+  final typeFlowAnalysis = new TypeFlowAnalysis(hierarchy, types, libraryIndex,
+      // TODO(alexmarkov): Pass entry points descriptors from command line.
+      entryPointsJSONFiles: [
+        'pkg/vm/lib/transformations/type_flow/entry_points.json',
+        'pkg/vm/lib/transformations/type_flow/entry_points_extra.json',
+      ]);
+
+  Procedure main = program.mainMethod;
+  final Selector mainSelector = new DirectSelector(main);
+  typeFlowAnalysis.addRawCall(mainSelector);
+  typeFlowAnalysis.process();
+
+  analysisStopWatch.stop();
+
+  final transformsStopWatch = new Stopwatch()..start();
+
+  new DropMethodBodiesVisitor(typeFlowAnalysis).visitProgram(program);
+
+  new TFADevirtualization(program, typeFlowAnalysis).visitProgram(program);
+
+  transformsStopWatch.stop();
+
+  statPrint("TF analysis took ${analysisStopWatch.elapsedMilliseconds}ms");
+  statPrint("TF transforms took ${transformsStopWatch.elapsedMilliseconds}ms");
+
+  Statistics.print("TFA statistics");
+
+  return program;
+}
+
+/// Devirtualization based on results of type flow analysis.
+class TFADevirtualization extends Devirtualization {
+  final TypeFlowAnalysis _typeFlowAnalysis;
+
+  TFADevirtualization(Program program, this._typeFlowAnalysis)
+      : super(_typeFlowAnalysis.environment.coreTypes, program,
+            _typeFlowAnalysis.environment.hierarchy);
+
+  @override
+  DirectCallMetadata getDirectCall(TreeNode node, Member target,
+      {bool setter = false}) {
+    final callSite = _typeFlowAnalysis.callSite(node);
+    if (callSite != null) {
+      final Member singleTarget = callSite.monomorphicTarget;
+      if (singleTarget != null) {
+        return new DirectCallMetadata(
+            singleTarget, callSite.isNullableReceiver);
+      }
+    }
+    return null;
+  }
+}
+
+/// Drop method bodies using results of type flow analysis.
+class DropMethodBodiesVisitor extends RecursiveVisitor<Null> {
+  final TypeFlowAnalysis _typeFlowAnalysis;
+
+  DropMethodBodiesVisitor(this._typeFlowAnalysis);
+
+  @override
+  defaultMember(Member m) {
+    if (!m.isAbstract && !_typeFlowAnalysis.isMemberUsed(m)) {
+      if (m.function != null && m.function.body != null) {
+        m.function.body = new ExpressionStatement(
+            new Throw(new StringLiteral("TFA Error: $m")))
+          ..parent = m.function;
+        debugPrint("Dropped $m");
+      } else if ((m is Field) &&
+          (m.initializer != null) &&
+          (m.initializer is! NullLiteral)) {
+        m.isConst = false;
+        m.initializer = new Throw(new StringLiteral("TFA Error: $m"))
+          ..parent = m;
+        debugPrint("Dropped $m");
+      }
+    }
+  }
+}
diff --git a/pkg/vm/lib/transformations/type_flow/types.dart b/pkg/vm/lib/transformations/type_flow/types.dart
new file mode 100644
index 0000000..a73bdd6
--- /dev/null
+++ b/pkg/vm/lib/transformations/type_flow/types.dart
@@ -0,0 +1,463 @@
+// 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.
+
+/// Declares the type system used by global type flow analysis.
+library vm.transformations.type_flow.types;
+
+import 'dart:core' hide Type;
+
+import 'package:kernel/ast.dart';
+
+import 'utils.dart';
+
+/// Abstract interface to type hierarchy information used by types.
+abstract class TypeHierarchy {
+  /// Test if [subType] is a subtype of [superType].
+  bool isSubtype(DartType subType, DartType superType);
+
+  /// Return a more specific type for the type cone with [base] root.
+  /// May return EmptyType, AnyType, ConcreteType or a SetType.
+  Type specializeTypeCone(DartType base);
+}
+
+/// Basic normalization of Dart types.
+/// Currently used to approximate generic and function types.
+DartType _normalizeDartType(DartType type) {
+  if (type is InterfaceType) {
+    // TODO(alexmarkov): take generic type arguments into account
+    return type.classNode.rawType;
+  } else if (type is FunctionType) {
+    // TODO(alexmarkov): support function types
+    return const DynamicType();
+  } else if (type is TypeParameterType) {
+    // TODO(alexmarkov): instantiate type parameters if possible
+    return _normalizeDartType(type.bound);
+  }
+  return type;
+}
+
+/// Base class for type expressions.
+/// Type expression is either a [Type] or a statement in a summary.
+abstract class TypeExpr {
+  const TypeExpr();
+
+  /// Static [DartType] approximation.
+  /// May not be available for certain inferred types (such as [EmptyType] and
+  /// [SetType]) as they don't have corresponding Dart types.
+  DartType get staticType;
+
+  /// Returns computed type of this type expression.
+  /// [types] is the list of types computed for the statements in the summary.
+  Type getComputedType(List<Type> types);
+}
+
+/// Base class for types inferred by the type flow analysis.
+/// [Type] describes a specific set of values (Dart instances) and does not
+/// directly correspond to a Dart type.
+abstract class Type extends TypeExpr {
+  const Type();
+
+  /// Create an empty type.
+  factory Type.empty() => const EmptyType();
+
+  /// Create a non-nullable type representing a subtype cone. It contains
+  /// instances of all Dart types which extend, mix-in or implement [dartType].
+  factory Type.cone(DartType dartType) {
+    dartType = _normalizeDartType(dartType);
+    if (dartType == const DynamicType()) {
+      return const AnyType();
+    } else {
+      return new ConeType(dartType);
+    }
+  }
+
+  /// 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 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()) {
+      return new Type.nullable(const AnyType());
+    } else if (dartType == const BottomType()) {
+      return new Type.nullable(new Type.empty());
+    }
+    return new Type.nullable(new ConeType(dartType));
+  }
+
+  @override
+  DartType get staticType;
+
+  @override
+  Type getComputedType(List<Type> types) => this;
+
+  /// Order of precedence for evaluation of union/intersection.
+  int get order;
+
+  /// Calculate union of this and [other] types.
+  Type union(Type other, TypeHierarchy typeHierarchy);
+
+  /// Calculate intersection of this and [other] types.
+  Type intersection(Type other, TypeHierarchy typeHierarchy);
+}
+
+/// Order of precedence between types for evaluation of union/intersection.
+enum TypeOrder {
+  Empty,
+  Nullable,
+  Any,
+  Set,
+  Cone,
+  Concrete,
+}
+
+/// Type representing the empty set of instances.
+class EmptyType extends Type {
+  const EmptyType();
+
+  @override
+  DartType get staticType => throw 'Unable to get static type of empty type';
+
+  @override
+  int get hashCode => 997;
+
+  @override
+  bool operator ==(other) => (other is EmptyType);
+
+  @override
+  String toString() => "_T {}";
+
+  @override
+  int get order => TypeOrder.Empty.index;
+
+  @override
+  Type union(Type other, TypeHierarchy typeHierarchy) => other;
+
+  @override
+  Type intersection(Type other, TypeHierarchy typeHierarchy) => this;
+}
+
+/// Nullable type represents a union of a (non-nullable) type and the `null`
+/// object. Other kinds of types do not contain `null` object (even AnyType).
+class NullableType extends Type {
+  final Type baseType;
+
+  NullableType(this.baseType) {
+    assertx(baseType != null);
+    assertx(baseType is! NullableType);
+  }
+
+  @override
+  DartType get staticType =>
+      (baseType is EmptyType) ? const BottomType() : baseType.staticType;
+
+  @override
+  int get hashCode => (baseType.hashCode + 31) & kHashMask;
+
+  @override
+  bool operator ==(other) =>
+      (other is NullableType) && (this.baseType == other.baseType);
+
+  @override
+  String toString() => "${baseType}?";
+
+  @override
+  int get order => TypeOrder.Nullable.index;
+
+  @override
+  Type union(Type other, TypeHierarchy typeHierarchy) {
+    if (other.order < this.order) {
+      return other.union(this, typeHierarchy);
+    }
+    if (other is NullableType) {
+      return new NullableType(baseType.union(other.baseType, typeHierarchy));
+    } else {
+      return new NullableType(baseType.union(other, typeHierarchy));
+    }
+  }
+
+  @override
+  Type intersection(Type other, TypeHierarchy typeHierarchy) {
+    if (other.order < this.order) {
+      return other.intersection(this, typeHierarchy);
+    }
+    if (other is NullableType) {
+      return new NullableType(
+          baseType.intersection(other.baseType, typeHierarchy));
+    } else {
+      return baseType.intersection(other, typeHierarchy);
+    }
+  }
+}
+
+/// Type representing any instance except `null`.
+/// Semantically equivalent to ConeType of Object, but more efficient.
+class AnyType extends Type {
+  const AnyType();
+
+  @override
+  DartType get staticType => const DynamicType();
+
+  @override
+  int get hashCode => 991;
+
+  @override
+  bool operator ==(other) => (other is AnyType);
+
+  @override
+  String toString() => "_T ANY";
+
+  @override
+  int get order => TypeOrder.Any.index;
+
+  @override
+  Type union(Type other, TypeHierarchy typeHierarchy) {
+    if (other.order < this.order) {
+      return other.union(this, typeHierarchy);
+    }
+    return this;
+  }
+
+  @override
+  Type intersection(Type other, TypeHierarchy typeHierarchy) {
+    if (other.order < this.order) {
+      return other.intersection(this, typeHierarchy);
+    }
+    return other;
+  }
+}
+
+/// 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;
+  int _hashCode;
+
+  SetType(this.types) {
+    assertx(types.length >= 2);
+  }
+
+  @override
+  DartType get staticType => throw 'Unable to get static type of set type';
+
+  @override
+  int get hashCode => _hashCode ??= _computeHashCode();
+
+  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;
+    }
+    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);
+
+  @override
+  String toString() => "_T ${types}";
+
+  @override
+  int get order => TypeOrder.Set.index;
+
+  @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));
+    } else if (other is ConcreteType) {
+      return types.contains(other)
+          ? this
+          : new SetType(new Set.from(this.types)..add(other));
+    } else if (other is ConeType) {
+      return typeHierarchy
+          .specializeTypeCone(other.dartType)
+          .union(this, typeHierarchy);
+    } else {
+      throw 'Unexpected type $other';
+    }
+  }
+
+  @override
+  Type intersection(Type other, TypeHierarchy typeHierarchy) {
+    if (other.order < this.order) {
+      return other.intersection(this, typeHierarchy);
+    }
+    if (other is SetType) {
+      Set<ConcreteType> set = this.types.intersection(other.types);
+      final size = set.length;
+      if (size == 0) {
+        return const EmptyType();
+      } else if (size == 1) {
+        return set.single;
+      } else {
+        return new SetType(set);
+      }
+    } else if (other is ConcreteType) {
+      return types.contains(other) ? other : const EmptyType();
+    } else if (other is ConeType) {
+      return typeHierarchy
+          .specializeTypeCone(other.dartType)
+          .intersection(this, typeHierarchy);
+    } else {
+      throw 'Unexpected type $other';
+    }
+  }
+}
+
+/// Type representing a subtype cone. It contains instances of all
+/// Dart types which extend, mix-in or implement [dartType].
+/// TODO(alexmarkov): Introduce cones of types which extend but not implement.
+class ConeType extends Type {
+  final DartType dartType;
+
+  ConeType(this.dartType) {
+    assertx(dartType != null);
+  }
+
+  @override
+  DartType get staticType => dartType;
+
+  @override
+  int get hashCode => (dartType.hashCode + 37) & kHashMask;
+
+  @override
+  bool operator ==(other) =>
+      (other is ConeType) && (this.dartType == other.dartType);
+
+  @override
+  String toString() => "_T (${dartType})+";
+
+  @override
+  int get order => TypeOrder.Cone.index;
+
+  @override
+  Type union(Type other, TypeHierarchy typeHierarchy) {
+    if (other.order < this.order) {
+      return other.union(this, typeHierarchy);
+    }
+    if (other is ConeType) {
+      if (this == other) {
+        return this;
+      }
+      if (typeHierarchy.isSubtype(other.dartType, this.dartType)) {
+        return this;
+      }
+      if (typeHierarchy.isSubtype(this.dartType, other.dartType)) {
+        return other;
+      }
+    }
+    return typeHierarchy
+        .specializeTypeCone(dartType)
+        .union(other, typeHierarchy);
+  }
+
+  @override
+  Type intersection(Type other, TypeHierarchy typeHierarchy) {
+    if (other.order < this.order) {
+      return other.intersection(this, typeHierarchy);
+    }
+    if (other is ConeType) {
+      if (this == other) {
+        return this;
+      }
+      if (typeHierarchy.isSubtype(other.dartType, this.dartType)) {
+        return other;
+      }
+      if (typeHierarchy.isSubtype(this.dartType, other.dartType)) {
+        return this;
+      }
+    } else if (other is ConcreteType) {
+      if (typeHierarchy.isSubtype(other.dartType, this.dartType)) {
+        return other;
+      } else {
+        return const EmptyType();
+      }
+    }
+    return typeHierarchy
+        .specializeTypeCone(dartType)
+        .intersection(other, typeHierarchy);
+  }
+}
+
+/// Type representing a set of instances of a specific Dart class (no subtypes
+/// or `null` object).
+class ConcreteType extends Type {
+  final DartType dartType;
+
+  ConcreteType(this.dartType) {
+    assertx((dartType is FunctionType) ||
+        ((dartType is InterfaceType) &&
+            !(dartType as InterfaceType).classNode.isAbstract));
+  }
+
+  @override
+  DartType get staticType => dartType;
+
+  @override
+  int get hashCode => (dartType.hashCode ^ 0x1234) & kHashMask;
+
+  @override
+  bool operator ==(other) =>
+      (other is ConcreteType) && (this.dartType == other.dartType);
+
+  @override
+  String toString() => "_T (${dartType})";
+
+  @override
+  int get order => TypeOrder.Concrete.index;
+
+  @override
+  Type union(Type other, TypeHierarchy typeHierarchy) {
+    if (other.order < this.order) {
+      return other.union(this, typeHierarchy);
+    }
+    if (other is ConcreteType) {
+      if (this == other) {
+        return this;
+      } else {
+        final Set<ConcreteType> types = new Set<ConcreteType>();
+        types.add(this);
+        types.add(other);
+        return new SetType(types);
+      }
+    } else {
+      throw 'Unexpected type $other';
+    }
+  }
+
+  @override
+  Type intersection(Type other, TypeHierarchy typeHierarchy) {
+    if (other.order < this.order) {
+      return other.intersection(this, typeHierarchy);
+    }
+    if (other is ConcreteType) {
+      if (this == other) {
+        return this;
+      } else {
+        return const EmptyType();
+      }
+    } else {
+      throw 'Unexpected type $other';
+    }
+  }
+}
diff --git a/pkg/vm/lib/transformations/type_flow/utils.dart b/pkg/vm/lib/transformations/type_flow/utils.dart
new file mode 100644
index 0000000..865907e
--- /dev/null
+++ b/pkg/vm/lib/transformations/type_flow/utils.dart
@@ -0,0 +1,84 @@
+// 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.
+
+/// Declares miscellaneous utility functions and constants for type flow
+/// analysis.
+library vm.transformations.type_flow.utils;
+
+import 'package:kernel/ast.dart' show Member, Constructor;
+
+const bool kPrintTrace =
+    const bool.fromEnvironment('global.type.flow.print.trace');
+
+const bool kPrintDebug =
+    const bool.fromEnvironment('global.type.flow.print.debug');
+
+const bool kPrintStats =
+    const bool.fromEnvironment('global.type.flow.print.stats');
+
+/// Extended 'assert': always checks condition.
+assertx(bool cond, {details}) {
+  if (!cond) {
+    throw 'Assertion failed.' + (details != null ? ' Details: $details' : '');
+  }
+}
+
+tracePrint(Object message) {
+  if (kPrintTrace) {
+    print(message);
+  }
+}
+
+debugPrint(Object message) {
+  if (kPrintDebug) {
+    print(message);
+  }
+}
+
+statPrint(Object message) {
+  if (kPrintStats) {
+    print(message);
+  }
+}
+
+const int kHashMask = 0x3fffffff;
+
+bool hasReceiverArg(Member member) =>
+    member.isInstanceMember || (member is Constructor);
+
+/// Holds various statistic counters for type flow analysis.
+class Statistics {
+  static int summariesCreated = 0;
+  static int summariesAnalyzed = 0;
+  static int joinsApproximatedToBreakLoops = 0;
+  static int invocationsProcessed = 0;
+  static int usedCachedResultsOfInvocations = 0;
+  static int invocationsInvalidated = 0;
+  static int recursiveInvocationsApproximated = 0;
+  static int typeConeSpecializations = 0;
+
+  /// Resets statistic counters.
+  static void reset() {
+    summariesCreated = 0;
+    summariesAnalyzed = 0;
+    joinsApproximatedToBreakLoops = 0;
+    invocationsProcessed = 0;
+    usedCachedResultsOfInvocations = 0;
+    invocationsInvalidated = 0;
+    recursiveInvocationsApproximated = 0;
+  }
+
+  static void print(String caption) {
+    statPrint("""${caption}:
+    ${summariesCreated} summaries created
+    ${summariesAnalyzed} summaries analyzed
+    ${joinsApproximatedToBreakLoops} joins are approximated to break loops
+    ${invocationsProcessed} invocations processed
+    ${usedCachedResultsOfInvocations} times cached result of invocation is used
+    ${invocationsInvalidated} invocations invalidated
+    ${recursiveInvocationsApproximated} recursive invocations approximated
+    ${typeConeSpecializations} type cones specialized
+    """);
+  }
+}
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 33b06b9..6afa317 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -648,14 +648,36 @@
   executable = true
 }
 
+action("kernel_service_dill_cc") {
+  deps = [
+    "../../utils/kernel-service:kernel_service_dill",
+  ]
+  script = "../tools/dill_to_data_cc.py"
+  inputs = [
+    "../tools/dill_to_data_cc.py",
+    "$root_gen_dir/kernel_service.dill",
+  ]
+  outputs = [
+    "$root_gen_dir/kernel_service.dill.cc",
+  ]
+  args = [
+    "--dill_file=" + rebase_path("$root_gen_dir/kernel_service.dill"),
+    "--data_symbol=kKernelServiceDill",
+    "--size_symbol=kKernelServiceDillSize",
+    "--output=" + rebase_path("$root_gen_dir/kernel_service.dill.cc"),
+  ]
+}
+
 source_set("dart_snapshot_cc") {
   deps = [
     ":isolate_snapshot_data_assembly",
     ":isolate_snapshot_instructions_assembly",
+    ":kernel_service_dill_cc",
     ":vm_snapshot_data_assembly",
     ":vm_snapshot_instructions_assembly",
   ]
   sources = [
+    "$root_gen_dir/kernel_service.dill.cc",
     "$target_gen_dir/isolate_snapshot_data.S",
     "$target_gen_dir/isolate_snapshot_instructions.S",
     "$target_gen_dir/vm_snapshot_data.S",
diff --git a/runtime/bin/builtin.dart b/runtime/bin/builtin.dart
index e9f85168..9cffabf 100644
--- a/runtime/bin/builtin.dart
+++ b/runtime/bin/builtin.dart
@@ -135,7 +135,7 @@
 
 // Embedder Entrypoint:
 // The embedder calls this method with the current working directory.
-void _setWorkingDirectory(cwd) {
+void _setWorkingDirectory(String cwd) {
   if (!_setupCompleted) {
     _setupHooks();
   }
diff --git a/runtime/bin/dfe.cc b/runtime/bin/dfe.cc
index b1141b2..3329221 100644
--- a/runtime/bin/dfe.cc
+++ b/runtime/bin/dfe.cc
@@ -4,19 +4,59 @@
 
 #include "bin/dfe.h"
 #include "bin/dartutils.h"
+#include "bin/directory.h"
 #include "bin/error_exit.h"
 #include "bin/file.h"
+#include "bin/platform.h"
+#include "bin/utils.h"
 
 #include "vm/kernel.h"
 
+extern "C" {
+extern const uint8_t kKernelServiceDill[];
+extern intptr_t kKernelServiceDillSize;
+}
+
 namespace dart {
 namespace bin {
 
+#if defined(DART_NO_SNAPSHOT) || defined(DART_PRECOMPILER)
+const uint8_t* kernel_service_dill = NULL;
+const intptr_t kernel_service_dill_size = 0;
+#else
+const uint8_t* kernel_service_dill = kKernelServiceDill;
+const intptr_t kernel_service_dill_size = kKernelServiceDillSize;
+#endif
+
+const char kKernelServiceSnapshot[] = "kernel-service.dart.snapshot";
+const char kSnapshotsDirectory[] = "snapshots";
 const char kPlatformBinaryName[] = "vm_platform.dill";
 const char kPlatformStrongBinaryName[] = "vm_platform_strong.dill";
 
+void* DFE::kKernelServiceProgram = NULL;
+
+static char* GetDirectoryPrefixFromExeName() {
+  const char* name = Platform::GetExecutableName();
+  const char* sep = File::PathSeparator();
+  // Locate the last occurance of |sep| in |name|.
+  intptr_t i;
+  for (i = strlen(name) - 1; i >= 0; --i) {
+    const char* str = name + i;
+    if (strstr(str, sep) == str) {
+      break;
+    }
+  }
+
+  if (i < 0) {
+    return strdup("");
+  }
+
+  return StringUtils::StrNDup(name, i + 1);
+}
+
 DFE::DFE()
-    : frontend_filename_(NULL),
+    : use_dfe_(false),
+      frontend_filename_(NULL),
       kernel_binaries_path_(NULL),
       platform_binary_filename_(NULL),
       kernel_platform_(NULL),
@@ -24,6 +64,9 @@
       kernel_file_specified_(false) {}
 
 DFE::~DFE() {
+  if (frontend_filename_ != NULL) {
+    free(frontend_filename_);
+  }
   frontend_filename_ = NULL;
 
   free(kernel_binaries_path_);
@@ -39,6 +82,46 @@
   application_kernel_binary_ = NULL;
 }
 
+char* DFE::FrontendFilename() {
+  if (frontend_filename_ == NULL) {
+    // Look for the frontend snapshot next to the executable.
+    char* dir_prefix = GetDirectoryPrefixFromExeName();
+    // |dir_prefix| includes the last path seperator.
+    frontend_filename_ =
+        OS::SCreate(NULL, "%s%s", dir_prefix, kKernelServiceSnapshot);
+
+    if (!File::Exists(NULL, frontend_filename_)) {
+      // If the frontend snapshot is not found next to the executable,
+      // then look for it in the "snapshots" directory.
+      free(frontend_filename_);
+      // |dir_prefix| includes the last path seperator.
+      frontend_filename_ =
+          OS::SCreate(NULL, "%s%s%s%s", dir_prefix, kSnapshotsDirectory,
+                      File::PathSeparator(), kKernelServiceSnapshot);
+    }
+
+    free(dir_prefix);
+    if (!File::Exists(NULL, frontend_filename_)) {
+      free(frontend_filename_);
+      frontend_filename_ = NULL;
+    }
+  }
+  return frontend_filename_;
+}
+
+static void NoopRelease(uint8_t* buffer) {}
+
+void* DFE::KernelServiceProgram() {
+  if (kernel_service_dill == NULL) {
+    return NULL;
+  }
+  if (kKernelServiceProgram == NULL) {
+    kKernelServiceProgram = Dart_ReadKernelBinary(
+        kernel_service_dill, kernel_service_dill_size, NoopRelease);
+  }
+  return kKernelServiceProgram;
+}
+
 void DFE::SetKernelBinaries(const char* name) {
   kernel_binaries_path_ = strdup(name);
 }
@@ -171,6 +254,10 @@
 bool DFE::TryReadKernelFile(const char* script_uri,
                             const uint8_t** kernel_ir,
                             intptr_t* kernel_ir_size) const {
+  if (strlen(script_uri) >= 8 && strncmp(script_uri, "file:///", 8) == 0) {
+    script_uri = script_uri + 7;
+  }
+
   *kernel_ir = NULL;
   *kernel_ir_size = -1;
   void* script_file = DartUtils::OpenFile(script_uri, false);
diff --git a/runtime/bin/dfe.h b/runtime/bin/dfe.h
index d644b19..ead2c75 100644
--- a/runtime/bin/dfe.h
+++ b/runtime/bin/dfe.h
@@ -18,9 +18,16 @@
   DFE();
   ~DFE();
 
-  const char* frontend_filename() const { return frontend_filename_; }
-  void set_frontend_filename(const char* name) { frontend_filename_ = name; }
-  bool UseDartFrontend() const { return frontend_filename_ != NULL; }
+  char* FrontendFilename();
+  void set_frontend_filename(const char* name) {
+    if (frontend_filename_ != NULL) {
+      free(frontend_filename_);
+    }
+    frontend_filename_ = strdup(name);
+    set_use_dfe();
+  }
+  void set_use_dfe() { use_dfe_ = true; }
+  bool UseDartFrontend() const { return use_dfe_; }
 
   const char* GetPlatformBinaryFilename();
 
@@ -64,6 +71,8 @@
   // valid kernel file, false otherwise.
   void* ReadScript(const char* script_uri) const;
 
+  static void* KernelServiceProgram();
+
  private:
   // Tries to read [script_uri] as a Kernel IR file.
   // Returns `true` if successful and sets [kernel_file] and [kernel_length]
@@ -74,7 +83,8 @@
                          const uint8_t** kernel_ir,
                          intptr_t* kernel_ir_size) const;
 
-  const char* frontend_filename_;
+  bool use_dfe_;
+  char* frontend_filename_;
   char* kernel_binaries_path_;
   char* platform_binary_filename_;
   void* kernel_platform_;
@@ -85,6 +95,8 @@
 
   bool kernel_file_specified_;  // Kernel file was specified on the cmd line.
 
+  static void* kKernelServiceProgram;
+
   DISALLOW_COPY_AND_ASSIGN(DFE);
 };
 
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index f5e48a8..82ab90e 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -1392,8 +1392,13 @@
     isolate_data->set_dependencies(new MallocGrowableArray<char*>());
   }
 
+  Dart_IsolateFlags isolate_flags;
+  Dart_IsolateFlagsInitialize(&isolate_flags);
+  // 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;
   Dart_Isolate isolate = Dart_CreateIsolateFromKernel(
-      NULL, NULL, kernel_program, NULL, isolate_data, &error);
+      NULL, NULL, kernel_program, &isolate_flags, isolate_data, &error);
   if (isolate == NULL) {
     delete isolate_data;
     Log::PrintErr("%s\n", error);
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index f50e9ccd..892417f 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -299,51 +299,60 @@
 #if !defined(DART_PRECOMPILED_RUNTIME)
 // Returns newly created Kernel Isolate on success, NULL on failure.
 // For now we only support the kernel isolate coming up from an
-// application snapshot or from sources which are compiled by the
-// VM parser.
-static Dart_Isolate CreateAndSetupKernelIsolate(const char* main,
+// application snapshot or from a .dill file.
+static Dart_Isolate CreateAndSetupKernelIsolate(const char* script_uri,
+                                                const char* main,
                                                 const char* package_root,
                                                 const char* packages_config,
                                                 Dart_IsolateFlags* flags,
                                                 char** error,
                                                 int* exit_code) {
-  if (!dfe.UseDartFrontend()) {
-    *error = strdup("Kernel isolate not supported.");
-    return NULL;
-  }
-  const char* script_uri = dfe.frontend_filename();
+  const char* kernel_snapshot_uri = dfe.FrontendFilename();
+  const char* uri =
+      kernel_snapshot_uri != NULL ? kernel_snapshot_uri : script_uri;
+
   if (packages_config == NULL) {
     packages_config = Options::packages_file();
   }
 
-  // Kernel isolate uses an app snapshot or the core libraries snapshot.
+  Dart_Isolate isolate;
+  IsolateData* isolate_data = NULL;
   bool isolate_run_app_snapshot = false;
-  const uint8_t* isolate_snapshot_data = core_isolate_snapshot_data;
-  const uint8_t* isolate_snapshot_instructions =
-      core_isolate_snapshot_instructions;
-  AppSnapshot* app_snapshot = Snapshot::TryReadAppSnapshot(script_uri);
-  if (app_snapshot != NULL) {
-    isolate_run_app_snapshot = true;
-    const uint8_t* ignore_vm_snapshot_data;
-    const uint8_t* ignore_vm_snapshot_instructions;
-    app_snapshot->SetBuffers(
-        &ignore_vm_snapshot_data, &ignore_vm_snapshot_instructions,
-        &isolate_snapshot_data, &isolate_snapshot_instructions);
+  if (kernel_snapshot_uri != NULL) {
+    // Kernel isolate uses an app snapshot or the core libraries snapshot.
+    const uint8_t* isolate_snapshot_data = core_isolate_snapshot_data;
+    const uint8_t* isolate_snapshot_instructions =
+        core_isolate_snapshot_instructions;
+    AppSnapshot* app_snapshot = Snapshot::TryReadAppSnapshot(uri);
+    if (app_snapshot != NULL) {
+      isolate_run_app_snapshot = true;
+      const uint8_t* ignore_vm_snapshot_data;
+      const uint8_t* ignore_vm_snapshot_instructions;
+      app_snapshot->SetBuffers(
+          &ignore_vm_snapshot_data, &ignore_vm_snapshot_instructions,
+          &isolate_snapshot_data, &isolate_snapshot_instructions);
+    }
+    IsolateData* isolate_data =
+        new IsolateData(uri, package_root, packages_config, app_snapshot);
+    isolate = Dart_CreateIsolate(
+        DART_KERNEL_ISOLATE_NAME, main, isolate_snapshot_data,
+        isolate_snapshot_instructions, flags, isolate_data, error);
+  } else {
+    void* kernel_service_program = DFE::KernelServiceProgram();
+    IsolateData* isolate_data =
+        new IsolateData(uri, package_root, packages_config, NULL);
+    isolate_data->kernel_program = kernel_service_program;
+    isolate = Dart_CreateIsolateFromKernel(uri, main, kernel_service_program,
+                                           flags, isolate_data, error);
   }
 
-  IsolateData* isolate_data =
-      new IsolateData(script_uri, package_root, packages_config, app_snapshot);
-  Dart_Isolate isolate = Dart_CreateIsolate(
-      DART_KERNEL_ISOLATE_NAME, main, isolate_snapshot_data,
-      isolate_snapshot_instructions, flags, isolate_data, error);
   if (isolate == NULL) {
     delete isolate_data;
     return NULL;
   }
 
-  return IsolateSetupHelper(isolate, false, script_uri, package_root,
-                            packages_config, isolate_snapshot_data,
-                            isolate_run_app_snapshot, error, exit_code);
+  return IsolateSetupHelper(isolate, false, uri, package_root, packages_config,
+                            true, isolate_run_app_snapshot, error, exit_code);
 }
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
 
@@ -381,6 +390,11 @@
                                isolate_snapshot_instructions, flags,
                                isolate_data, error);
 #else
+  // Set the flag to load the vmservice library. If not set, the kernel
+  // loader might skip loading it. This is flag is not relevant for the
+  // non-kernel flow.
+  ASSERT(flags != NULL);
+  flags->load_vmservice_library = true;
   if (dfe.UsePlatformBinary()) {
     isolate = Dart_CreateIsolateFromKernel(
         script_uri, NULL, dfe.kernel_platform(), flags, isolate_data, error);
@@ -537,8 +551,9 @@
   int exit_code = 0;
 #if !defined(DART_PRECOMPILED_RUNTIME)
   if (strcmp(script_uri, DART_KERNEL_ISOLATE_NAME) == 0) {
-    return CreateAndSetupKernelIsolate(main, package_root, package_config,
-                                       flags, error, &exit_code);
+    return CreateAndSetupKernelIsolate(script_uri, main, package_root,
+                                       package_config, flags, error,
+                                       &exit_code);
   }
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
   if (strcmp(script_uri, DART_VM_SERVICE_ISOLATE_NAME) == 0) {
@@ -600,7 +615,7 @@
 }
 
 static bool FileModifiedCallback(const char* url, int64_t since) {
-  if (strncmp(url, "file:///", 8) == 0) {
+  if (strncmp(url, "file:///", 8) != 0) {
     // If it isn't a file on local disk, we don't know if it has been
     // modified.
     return true;
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index 24a2bb8..03b348f 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -66,6 +66,8 @@
 #if !defined(DART_PRECOMPILED_RUNTIME)
 DFE* Options::dfe_ = NULL;
 
+DEFINE_BOOL_OPTION_CB(preview_dart_2, { Options::dfe()->set_use_dfe(); });
+
 DEFINE_STRING_OPTION_CB(dfe, { Options::dfe()->set_frontend_filename(value); });
 
 DEFINE_STRING_OPTION_CB(kernel_binaries,
diff --git a/runtime/bin/socket_patch.dart b/runtime/bin/socket_patch.dart
index 2db739a..1aec6f8 100644
--- a/runtime/bin/socket_patch.dart
+++ b/runtime/bin/socket_patch.dart
@@ -1720,7 +1720,8 @@
   }
 }
 
-class _RawDatagramSocket extends Stream implements RawDatagramSocket {
+class _RawDatagramSocket extends Stream<RawSocketEvent>
+    implements RawDatagramSocket {
   _NativeSocket _socket;
   StreamController<RawSocketEvent> _controller;
   bool _readEventsEnabled = true;
@@ -1728,7 +1729,7 @@
 
   _RawDatagramSocket(this._socket) {
     var zone = Zone.current;
-    _controller = new StreamController(
+    _controller = new StreamController<RawSocketEvent>(
         sync: true,
         onListen: _onSubscriptionStateChange,
         onCancel: _onSubscriptionStateChange,
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 5cc3992..ce36ebc 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -562,6 +562,7 @@
   Dart_QualifiedFunctionName* entry_points;
   bool reify_generic_functions;
   bool strong;
+  bool load_vmservice_library;
 } Dart_IsolateFlags;
 
 /**
diff --git a/runtime/lib/internal_patch.dart b/runtime/lib/internal_patch.dart
index b9fb751..dc6b038 100644
--- a/runtime/lib/internal_patch.dart
+++ b/runtime/lib/internal_patch.dart
@@ -25,13 +25,8 @@
     native "Internal_makeFixedListUnmodifiable";
 
 @patch
-Object extractTypeArguments<T>(T instance, Function extract) {
-  // TODO(31371): Implement this correctly for Dart 2.0.
-  // In Dart 1.0, instantiating the generic with dynamic (which this does),
-  // gives you an object that can be used anywhere a more specific type is
-  // expected, so this works for now.
-  return extract();
-}
+Object extractTypeArguments<T>(T instance, Function extract)
+    native "Internal_extractTypeArguments";
 
 class VMLibraryHooks {
   // Example: "dart:isolate _Timer._factory"
diff --git a/runtime/lib/object.cc b/runtime/lib/object.cc
index 7b83079..5f3e449 100644
--- a/runtime/lib/object.cc
+++ b/runtime/lib/object.cc
@@ -311,6 +311,144 @@
 #endif  // defined(ARCH_IS_64_BIT)
 }
 
+static bool ExtractInterfaceTypeArgs(Zone* zone,
+                                     const Class& instance_cls,
+                                     const TypeArguments& instance_type_args,
+                                     const Class& interface_cls,
+                                     TypeArguments* interface_type_args) {
+  Class& cur_cls = Class::Handle(zone, instance_cls.raw());
+  // The following code is a specialization of Class::TypeTestNonRecursive().
+  Array& interfaces = Array::Handle(zone);
+  AbstractType& interface = AbstractType::Handle(zone);
+  Class& cur_interface_cls = Class::Handle(zone);
+  TypeArguments& cur_interface_type_args = TypeArguments::Handle(zone);
+  Error& error = Error::Handle(zone);
+  while (true) {
+    // Additional subtyping rules related to 'FutureOr' are not applied.
+    if (cur_cls.raw() == interface_cls.raw()) {
+      *interface_type_args = instance_type_args.raw();
+      return true;
+    }
+    interfaces = cur_cls.interfaces();
+    for (intptr_t i = 0; i < interfaces.Length(); i++) {
+      interface ^= interfaces.At(i);
+      ASSERT(interface.IsFinalized() && !interface.IsMalbounded());
+      cur_interface_cls = interface.type_class();
+      cur_interface_type_args = interface.arguments();
+      if (!cur_interface_type_args.IsNull() &&
+          !cur_interface_type_args.IsInstantiated()) {
+        error = Error::null();
+        cur_interface_type_args = cur_interface_type_args.InstantiateFrom(
+            instance_type_args, Object::null_type_arguments(), kNoneFree,
+            &error, NULL, NULL, Heap::kNew);
+        if (!error.IsNull()) {
+          continue;  // Another interface may work better.
+        }
+      }
+      if (ExtractInterfaceTypeArgs(zone, cur_interface_cls,
+                                   cur_interface_type_args, interface_cls,
+                                   interface_type_args)) {
+        return true;
+      }
+    }
+    cur_cls = cur_cls.SuperClass();
+    if (cur_cls.IsNull()) {
+      return false;
+    }
+  }
+}
+
+DEFINE_NATIVE_ENTRY(Internal_extractTypeArguments, 2) {
+  const Instance& instance =
+      Instance::CheckedHandle(zone, arguments->NativeArgAt(0));
+  const Instance& extract =
+      Instance::CheckedHandle(zone, arguments->NativeArgAt(1));
+
+  Class& interface_cls = Class::Handle(zone);
+  intptr_t num_type_args = 0;  // Remains 0 when executing Dart 1.0 code.
+  // TODO(regis): Check for strong mode too?
+  if (Isolate::Current()->reify_generic_functions()) {
+    const TypeArguments& function_type_args =
+        TypeArguments::Handle(zone, arguments->NativeTypeArgs());
+    if (function_type_args.Length() == 1) {
+      const AbstractType& function_type_arg =
+          AbstractType::Handle(zone, function_type_args.TypeAt(0));
+      if (function_type_arg.IsType() &&
+          (function_type_arg.arguments() == TypeArguments::null())) {
+        interface_cls = function_type_arg.type_class();
+        num_type_args = interface_cls.NumTypeParameters();
+      }
+    }
+    if (num_type_args == 0) {
+      Exceptions::ThrowArgumentError(String::Handle(
+          zone,
+          String::New(
+              "single function type argument must specify a generic class")));
+    }
+  }
+  if (instance.IsNull()) {
+    Exceptions::ThrowArgumentError(instance);
+  }
+  // Function 'extract' must be generic and accept the same number of type args,
+  // unless we execute Dart 1.0 code.
+  if (extract.IsNull() || !extract.IsClosure() ||
+      ((num_type_args > 0) &&  // Dart 1.0 if num_type_args == 0.
+       (Function::Handle(zone, Closure::Cast(extract).function())
+            .NumTypeParameters() != num_type_args))) {
+    Exceptions::ThrowArgumentError(String::Handle(
+        zone,
+        String::New("argument 'extract' is not a generic function or not one "
+                    "accepting the correct number of type arguments")));
+  }
+  TypeArguments& extracted_type_args = TypeArguments::Handle(zone);
+  if (num_type_args > 0) {
+    // The passed instance must implement interface_cls.
+    TypeArguments& interface_type_args = TypeArguments::Handle(zone);
+    interface_type_args = TypeArguments::New(num_type_args);
+    Class& instance_cls = Class::Handle(zone, instance.clazz());
+    TypeArguments& instance_type_args = TypeArguments::Handle(zone);
+    if (instance_cls.NumTypeArguments() > 0) {
+      instance_type_args = instance.GetTypeArguments();
+    }
+    if (!ExtractInterfaceTypeArgs(zone, instance_cls, instance_type_args,
+                                  interface_cls, &interface_type_args)) {
+      Exceptions::ThrowArgumentError(String::Handle(
+          zone, String::New("type of argument 'instance' is not a subtype of "
+                            "the function type argument")));
+    }
+    if (!interface_type_args.IsNull()) {
+      extracted_type_args = TypeArguments::New(num_type_args);
+      const intptr_t offset = interface_cls.NumTypeArguments() - num_type_args;
+      AbstractType& type_arg = AbstractType::Handle(zone);
+      for (intptr_t i = 0; i < num_type_args; i++) {
+        type_arg = interface_type_args.TypeAt(offset + i);
+        extracted_type_args.SetTypeAt(i, type_arg);
+      }
+      extracted_type_args = extracted_type_args.Canonicalize();  // Can be null.
+    }
+  }
+  // Call the closure 'extract'.
+  Array& args_desc = Array::Handle(zone);
+  Array& args = Array::Handle(zone);
+  if (extracted_type_args.IsNull()) {
+    args_desc = ArgumentsDescriptor::New(0, 1);
+    args = Array::New(1);
+    args.SetAt(0, extract);
+  } else {
+    args_desc = ArgumentsDescriptor::New(num_type_args, 1);
+    args = Array::New(2);
+    args.SetAt(0, extracted_type_args);
+    args.SetAt(1, extract);
+  }
+  const Object& result =
+      Object::Handle(zone, DartEntry::InvokeClosure(args, args_desc));
+  if (result.IsError()) {
+    Exceptions::PropagateError(Error::Cast(result));
+    UNREACHABLE();
+  }
+  return result.raw();
+}
+
 DEFINE_NATIVE_ENTRY(Internal_prependTypeArguments, 3) {
   const TypeArguments& function_type_arguments =
       TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(0));
diff --git a/runtime/observatory/lib/src/cli/command.dart b/runtime/observatory/lib/src/cli/command.dart
index a0d8fa1..b2a1ab7 100644
--- a/runtime/observatory/lib/src/cli/command.dart
+++ b/runtime/observatory/lib/src/cli/command.dart
@@ -9,7 +9,7 @@
 // line from the pieces.
 List<String> _splitLine(String line) {
   line = line.trimLeft();
-  var args = [];
+  var args = <String>[];
   int pos = 0;
   while (pos < line.length) {
     int startPos = pos;
@@ -44,7 +44,7 @@
   }
 
   // A command may optionally have sub-commands.
-  List<Command> _children = [];
+  List<Command> _children = <Command>[];
 
   _CommandBase _parent;
   int get _depth => (_parent == null ? 0 : _parent._depth + 1);
@@ -53,7 +53,8 @@
   //
   // Given a list of arguments to this command, provide a list of
   // possible completions for those arguments.
-  Future<List<String>> complete(List<String> args) => new Future.value([]);
+  Future<List<String>> complete(List<String> args) =>
+      new Future.value(<String>[]);
 
   // Override in subclasses to provide command-specific execution.
   Future run(List<String> args);
@@ -77,12 +78,12 @@
   // arguments.
   List<Command> _match(List<String> args, bool preferExact) {
     if (args.isEmpty) {
-      return [];
+      return <Command>[];
     }
     bool lastArg = (args.length == 1);
     var matches = _matchLocal(args[0], !lastArg || preferExact);
     if (matches.isEmpty) {
-      return [];
+      return <Command>[];
     } else if (matches.length == 1) {
       var childMatches = matches[0]._match(args.sublist(1), preferExact);
       if (childMatches.isEmpty) {
@@ -104,7 +105,7 @@
           args[args.length - 1] == '') {
         // Special case allowance for an empty particle at the end of
         // the command.
-        completions = [''];
+        completions = <String>[''];
       }
       var prefix = _concatArgs(args, _depth);
       return completions.map((str) => '${prefix}${str}').toList();
@@ -134,7 +135,7 @@
     var commands = _match(args, false);
     if (commands.isEmpty) {
       // No matching commands.
-      return new Future.value([]);
+      return new Future.value(<String>[]);
     }
     int matchLen = commands[0]._depth;
     if (matchLen < args.length) {
@@ -147,7 +148,7 @@
       } else {
         // An ambiguous prefix match leaves us nowhere.  The user is
         // typing a bunch of stuff that we don't know how to complete.
-        return new Future.value([]);
+        return new Future.value(<String>[]);
       }
     }
 
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index 1b9159b..4189138 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -458,6 +458,8 @@
 abstract class Location implements M.Location {
   Script get script;
   int get tokenPos;
+  Future<int> getLine();
+  Future<int> getColumn();
 }
 
 /// A [SourceLocation] represents a location or range in the source code.
@@ -1362,7 +1364,7 @@
   static const kPossibleBreakpointsReport = 'PossibleBreakpoints';
   static const kProfileReport = '_Profile';
 
-  Future<ServiceMap> getSourceReport(List<String> report_kinds,
+  Future<ServiceObject> getSourceReport(List<String> report_kinds,
       [Script script, int startPos, int endPos]) {
     var params = <String, dynamic>{'reports': report_kinds};
     if (script != null) {
@@ -2448,7 +2450,8 @@
     functions.sort(ServiceObject.LexicalSortName);
   }
 
-  Future<ServiceObject> evaluate(String expression, {Map scope}) {
+  Future<ServiceObject> evaluate(String expression,
+      {Map<String, ServiceObject> scope}) {
     return isolate.eval(this, expression, scope: scope);
   }
 
@@ -2626,7 +2629,8 @@
     subclasses.sort(ServiceObject.LexicalSortName);
   }
 
-  Future<ServiceObject> evaluate(String expression, {Map scope}) {
+  Future<ServiceObject> evaluate(String expression,
+      {Map<String, ServiceObject> scope}) {
     return isolate.eval(this, expression, scope: scope);
   }
 
@@ -2991,7 +2995,8 @@
     return 'a ${clazz.name}';
   }
 
-  Future<ServiceObject> evaluate(String expression, {Map scope}) {
+  Future<ServiceObject> evaluate(String expression,
+      {Map<String, ServiceObject> scope}) {
     return isolate.eval(this, expression, scope: scope);
   }
 
@@ -3588,7 +3593,7 @@
     library = map['library'];
   }
 
-  void _parseTokenPosTable(List<List<int>> table) {
+  void _parseTokenPosTable(List/*<List<int>>*/ table) {
     if (table == null) {
       return;
     }
@@ -4398,7 +4403,7 @@
     }
   }
 
-  void _processDescriptors(List<Map> descriptors) {
+  void _processDescriptors(List/*<Map>*/ descriptors) {
     for (Map descriptor in descriptors) {
       var pcOffset = int.parse(descriptor['pcOffset'], radix: 16);
       var address = startAddress + pcOffset;
@@ -4558,7 +4563,7 @@
   String toString() => "ServiceMetric($_id)";
 }
 
-Future<Null> printFrames(List<Frame> frames) async {
+Future<Null> printFrames(List/*<Frame>*/ frames) async {
   for (int i = 0; i < frames.length; i++) {
     final Frame frame = frames[i];
     String frameText = await frame.toUserString();
diff --git a/runtime/observatory/tests/service/add_breakpoint_rpc_kernel_test.dart b/runtime/observatory/tests/service/add_breakpoint_rpc_kernel_test.dart
index 5c645b5..318afa2 100644
--- a/runtime/observatory/tests/service/add_breakpoint_rpc_kernel_test.dart
+++ b/runtime/observatory/tests/service/add_breakpoint_rpc_kernel_test.dart
@@ -62,13 +62,15 @@
     expect(await futureBpt2.location.getColumn(), equals(3));
 
     // The first breakpoint hits before value is modified.
-    expect((await rootLib.evaluate('value')).valueAsString, equals('0'));
+    Instance result = await rootLib.evaluate('value');
+    expect(result.valueAsString, equals('0'));
 
     isolate.resume();
     await hasStoppedAtBreakpoint(isolate);
 
     // The second breakpoint hits after value has been modified once.
-    expect((await rootLib.evaluate('value')).valueAsString, equals('1'));
+    result = await rootLib.evaluate('value');
+    expect(result.valueAsString, equals('1'));
 
     // Remove the breakpoints.
     expect(
diff --git a/runtime/observatory/tests/service/address_mapper_test.dart b/runtime/observatory/tests/service/address_mapper_test.dart
index 05fbf36..6cc023e 100644
--- a/runtime/observatory/tests/service/address_mapper_test.dart
+++ b/runtime/observatory/tests/service/address_mapper_test.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// VMOptions=--compile_all --error_on_bad_type --error_on_bad_override
+// VMOptions=--error_on_bad_type --error_on_bad_override
 
 import 'package:observatory/object_graph.dart';
 import 'package:unittest/unittest.dart';
diff --git a/runtime/observatory/tests/service/async_generator_breakpoint_test.dart b/runtime/observatory/tests/service/async_generator_breakpoint_test.dart
index 00c1268..6781af7 100644
--- a/runtime/observatory/tests/service/async_generator_breakpoint_test.dart
+++ b/runtime/observatory/tests/service/async_generator_breakpoint_test.dart
@@ -4,24 +4,25 @@
 // VMOptions=--error_on_bad_type --error_on_bad_override --verbose-debug
 // VMOptions=--error_on_bad_type --error_on_bad_override --verbose-debug --stacktrace-every=55 --stress-async-stacks
 
+import 'dart:async';
 import 'package:observatory/service_io.dart';
 import 'package:unittest/unittest.dart';
 import 'test_helper.dart';
 
 printSync() {
-  print('sync'); // Line 11
+  print('sync'); // Line 12
 }
 
 printAsync() async {
-  print('async'); // Line 15
+  print('async'); // Line 16
 }
 
 printAsyncStar() async* {
-  print('async*'); // Line 19
+  print('async*'); // Line 20
 }
 
 printSyncStar() sync* {
-  print('sync*'); // Line 23
+  print('sync*'); // Line 24
 }
 
 var testerReady = false;
@@ -38,38 +39,38 @@
   var stream = printAsyncStar();
   var iterator = printSyncStar();
 
-  print('middle'); // Line 41
+  print('middle'); // Line 42
 
   future.then((v) => print(v));
   stream.toList();
   iterator.toList();
 }
 
-testAsync(Isolate isolate) async {
+Future testAsync(Isolate isolate) async {
   await isolate.rootLibrary.load();
   var script = isolate.rootLibrary.scripts[0];
 
-  var bp1 = await isolate.addBreakpoint(script, 11);
+  var bp1 = await isolate.addBreakpoint(script, 12);
   expect(bp1, isNotNull);
   expect(bp1 is Breakpoint, isTrue);
-  var bp2 = await isolate.addBreakpoint(script, 15);
+  var bp2 = await isolate.addBreakpoint(script, 16);
   expect(bp2, isNotNull);
   expect(bp2 is Breakpoint, isTrue);
-  var bp3 = await isolate.addBreakpoint(script, 19);
+  var bp3 = await isolate.addBreakpoint(script, 20);
   expect(bp3, isNotNull);
   expect(bp3 is Breakpoint, isTrue);
-  var bp4 = await isolate.addBreakpoint(script, 23);
+  var bp4 = await isolate.addBreakpoint(script, 24);
   expect(bp4, isNotNull);
   expect(bp4 is Breakpoint, isTrue);
-  var bp5 = await isolate.addBreakpoint(script, 41);
+  var bp5 = await isolate.addBreakpoint(script, 42);
   print("BP5 - $bp5");
   expect(bp5, isNotNull);
   expect(bp5 is Breakpoint, isTrue);
 
   var hits = [];
 
-  isolate.rootLibrary.evaluate('testerReady = true;').then((Instance result) {
-    expect(result.valueAsString, equals('true'));
+  isolate.rootLibrary.evaluate('testerReady = true;').then((result) {
+    expect((result as Instance).valueAsString, equals('true'));
   });
 
   var stream = await isolate.vm.getEventStream(VM.kDebugStream);
diff --git a/runtime/observatory/tests/service/bad_reload_test.dart b/runtime/observatory/tests/service/bad_reload_test.dart
index 00665f7..b099a56 100644
--- a/runtime/observatory/tests/service/bad_reload_test.dart
+++ b/runtime/observatory/tests/service/bad_reload_test.dart
@@ -66,9 +66,9 @@
     );
     // Observe that it failed.
     expect(response['success'], isFalse);
-    List<Map<String, dynamic>> notices = response['details']['notices'];
+    List/*<Map<String, dynamic>>*/ notices = response['details']['notices'];
     expect(notices.length, equals(1));
-    Map<String, dynamic> reasonForCancelling = notices[0];
+    Map/*<String, dynamic>*/ reasonForCancelling = notices[0];
     expect(reasonForCancelling['type'], equals('ReasonForCancelling'));
     expect(reasonForCancelling['message'], contains('library_isnt_here_man'));
 
diff --git a/runtime/observatory/tests/service/bad_web_socket_address_test.dart b/runtime/observatory/tests/service/bad_web_socket_address_test.dart
index 3a4843c..2f63d9f 100644
--- a/runtime/observatory/tests/service/bad_web_socket_address_test.dart
+++ b/runtime/observatory/tests/service/bad_web_socket_address_test.dart
@@ -9,7 +9,7 @@
 
 void testBadWebSocket() {
   var vm = new WebSocketVM(new WebSocketVMTarget('ws://karatekid/ws'));
-  vm.load().catchError(expectAsync((error) {
+  vm.load().then<dynamic>((_) => null).catchError(expectAsync((error) {
     expect(error, new isInstanceOf<NetworkRpcException>());
   }));
 }
diff --git a/runtime/observatory/tests/service/capture_stdio_test.dart b/runtime/observatory/tests/service/capture_stdio_test.dart
index 102b1e8..449d9dd 100644
--- a/runtime/observatory/tests/service/capture_stdio_test.dart
+++ b/runtime/observatory/tests/service/capture_stdio_test.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// VMOptions=--compile_all --error_on_bad_type --error_on_bad_override
+// VMOptions=--error_on_bad_type --error_on_bad_override
 
 import 'dart:async';
 import 'dart:developer';
diff --git a/runtime/observatory/tests/service/command_test.dart b/runtime/observatory/tests/service/command_test.dart
index bf90f07..a463443 100644
--- a/runtime/observatory/tests/service/command_test.dart
+++ b/runtime/observatory/tests/service/command_test.dart
@@ -36,18 +36,18 @@
 
 void testCommandComplete() {
   RootCommand cmd = new RootCommand([
-    new TestCommand(null, 'alpha', []),
-    new TestCommand(null, 'game', [
-      new TestCommand(null, 'checkers', []),
-      new TestCommand(null, 'chess', [])
+    new TestCommand(null, 'alpha', <Command>[]),
+    new TestCommand(null, 'game', <Command>[
+      new TestCommand(null, 'checkers', <Command>[]),
+      new TestCommand(null, 'chess', <Command>[])
     ]),
-    new TestCommand(null, 'gamera', [
-      new TestCommand(null, 'london', []),
-      new TestCommand(null, 'tokyo', []),
-      new TestCommand(null, 'topeka', [])
+    new TestCommand(null, 'gamera', <Command>[
+      new TestCommand(null, 'london', <Command>[]),
+      new TestCommand(null, 'tokyo', <Command>[]),
+      new TestCommand(null, 'topeka', <Command>[])
     ]),
     new TestCompleteCommand(
-        null, 'count', [new TestCommand(null, 'chocula', [])])
+        null, 'count', <Command>[new TestCommand(null, 'chocula', <Command>[])])
   ]);
 
   // Show all commands.
@@ -147,7 +147,8 @@
 void testCommandRunSimple() {
   // Run a simple command.
   StringBuffer out = new StringBuffer();
-  RootCommand cmd = new RootCommand([new TestCommand(out, 'alpha', [])]);
+  RootCommand cmd =
+      new RootCommand([new TestCommand(out, 'alpha', <Command>[])]);
 
   // Full name dispatch works.  Argument passing works.
   cmd.runCommand('alpha dog').then(expectAsync((_) {
@@ -164,8 +165,10 @@
   // Run a simple command.
   StringBuffer out = new StringBuffer();
   RootCommand cmd = new RootCommand([
-    new TestCommand(out, 'alpha',
-        [new TestCommand(out, 'beta', []), new TestCommand(out, 'gamma', [])])
+    new TestCommand(out, 'alpha', [
+      new TestCommand(out, 'beta', <Command>[]),
+      new TestCommand(out, 'gamma', <Command>[])
+    ])
   ]);
 
   cmd.runCommand('a b').then(expectAsync((_) {
@@ -180,7 +183,8 @@
 void testCommandRunNotFound() {
   // Run a simple command.
   StringBuffer out = new StringBuffer();
-  RootCommand cmd = new RootCommand([new TestCommand(out, 'alpha', [])]);
+  RootCommand cmd =
+      new RootCommand([new TestCommand(out, 'alpha', <Command>[])]);
 
   cmd.runCommand('goose').catchError(expectAsync((e) {
     expect(e.toString(), equals("No such command: 'goose'"));
@@ -190,8 +194,10 @@
 void testCommandRunAmbiguous() {
   // Run a simple command.
   StringBuffer out = new StringBuffer();
-  RootCommand cmd = new RootCommand(
-      [new TestCommand(out, 'alpha', []), new TestCommand(out, 'ankle', [])]);
+  RootCommand cmd = new RootCommand([
+    new TestCommand(out, 'alpha', <Command>[]),
+    new TestCommand(out, 'ankle', <Command>[])
+  ]);
 
   cmd.runCommand('a 55').catchError(expectAsync((e) {
     expect(e.toString(), equals("Command 'a 55' is ambiguous: [alpha, ankle]"));
@@ -205,10 +211,10 @@
 void testCommandRunAlias() {
   // Run a simple command.
   StringBuffer out = new StringBuffer();
-  var aliasCmd = new TestCommand(out, 'alpha', []);
+  var aliasCmd = new TestCommand(out, 'alpha', <Command>[]);
   aliasCmd.alias = 'a';
   RootCommand cmd =
-      new RootCommand([aliasCmd, new TestCommand(out, 'ankle', [])]);
+      new RootCommand([aliasCmd, new TestCommand(out, 'ankle', <Command>[])]);
 
   cmd.runCommand('a 55').then(expectAsync((_) {
     expect(out.toString(), equals('executing alpha([55])\n'));
diff --git a/runtime/observatory/tests/service/dev_fs_spawn_test.dart b/runtime/observatory/tests/service/dev_fs_spawn_test.dart
index 79f2ba5..1ed42cf 100644
--- a/runtime/observatory/tests/service/dev_fs_spawn_test.dart
+++ b/runtime/observatory/tests/service/dev_fs_spawn_test.dart
@@ -156,7 +156,7 @@
     result = await vm.invokeRpcNoUpgrade('_spawnUri', {
       'token': 'mySpawnToken1',
       'uri': '${fsUri}${filePaths[1]}',
-      'args': ['one', 'two', 'three']
+      'args': <String>['one', 'two', 'three']
     });
     expect(result['type'], equals('Success'));
     spawnedIsolate = await completer.future;
diff --git a/runtime/observatory/tests/service/eval_internal_class_test.dart b/runtime/observatory/tests/service/eval_internal_class_test.dart
index fc0b2b8..3027965 100644
--- a/runtime/observatory/tests/service/eval_internal_class_test.dart
+++ b/runtime/observatory/tests/service/eval_internal_class_test.dart
@@ -12,7 +12,7 @@
 
     Class classLibrary = await root.clazz.load();
     print(classLibrary);
-    var result = await classLibrary.evaluate('3 + 4');
+    dynamic result = await classLibrary.evaluate('3 + 4');
     print(result);
     expect(result is DartError, isTrue);
     expect(result.message, contains('Cannot evaluate'));
@@ -24,7 +24,7 @@
     expect(result is DartError, isTrue);
     expect(result.message, contains('Cannot evaluate'));
 
-    var someArray = await root.evaluate("new List(2)");
+    Instance someArray = await root.evaluate("new List(2)");
     print(someArray);
     expect(someArray is Instance, isTrue);
     Class classArray = await someArray.clazz.load();
diff --git a/runtime/observatory/tests/service/evaluate_activation_in_method_class_test.dart b/runtime/observatory/tests/service/evaluate_activation_in_method_class_test.dart
index 6f1f727..c74c4be 100644
--- a/runtime/observatory/tests/service/evaluate_activation_in_method_class_test.dart
+++ b/runtime/observatory/tests/service/evaluate_activation_in_method_class_test.dart
@@ -6,6 +6,7 @@
 // Tests that expressions evaluated in a frame see the same scope as the
 // frame's method.
 
+import 'dart:async';
 import 'package:observatory/service_io.dart';
 import 'package:unittest/unittest.dart';
 import 'test_helper.dart';
@@ -28,7 +29,7 @@
   obj.test();
 }
 
-testerDo(Isolate isolate) async {
+Future testerDo(Isolate isolate) async {
   await hasStoppedAtBreakpoint(isolate);
 
   // Make sure we are in the right place.
@@ -39,7 +40,7 @@
   expect(stack['frames'][topFrame].function.dartOwner.name,
       equals('Superclass&Klass'));
 
-  var result;
+  Instance result;
 
   result = await isolate.evalFrame(topFrame, '_local');
   print(result);
diff --git a/runtime/observatory/tests/service/evaluate_activation_test.dart b/runtime/observatory/tests/service/evaluate_activation_test.dart
index c326cea..fc87190 100644
--- a/runtime/observatory/tests/service/evaluate_activation_test.dart
+++ b/runtime/observatory/tests/service/evaluate_activation_test.dart
@@ -7,6 +7,7 @@
 import 'package:unittest/unittest.dart';
 import 'test_helper.dart';
 
+import 'dart:async';
 import 'dart:math' as math;
 
 breakHere() {}
@@ -67,7 +68,7 @@
   }
 }
 
-testMethod(Isolate isolate) async {
+Future testMethod(Isolate isolate) async {
   // silence analyzer.
   expect(math.sqrt(4), equals(2));
   Library rootLib = await isolate.rootLibrary.load();
@@ -118,7 +119,7 @@
   expect(hitBreakpoint, isTrue);
 }
 
-testMethod2(Isolate isolate) async {
+Future testMethod2(Isolate isolate) async {
   Library rootLib = await isolate.rootLibrary.load();
   ServiceFunction function =
       rootLib.functions.singleWhere((f) => f.name == 'breakHere');
@@ -167,7 +168,7 @@
   expect(hitBreakpoint, isTrue);
 }
 
-testMethod3(Isolate isolate) async {
+Future testMethod3(Isolate isolate) async {
   Library rootLib = await isolate.rootLibrary.load();
   ServiceFunction function =
       rootLib.functions.singleWhere((f) => f.name == 'breakHere');
@@ -209,7 +210,7 @@
 }
 
 
-testMethod4(Isolate isolate) async {
+Future testMethod4(Isolate isolate) async {
   Library rootLib = await isolate.rootLibrary.load();
   ServiceFunction function =
       rootLib.functions.singleWhere((f) => f.name == 'breakHere');
diff --git a/runtime/observatory/tests/service/evaluate_in_async_activation_test.dart b/runtime/observatory/tests/service/evaluate_in_async_activation_test.dart
index dcf1002..0e021dc 100644
--- a/runtime/observatory/tests/service/evaluate_in_async_activation_test.dart
+++ b/runtime/observatory/tests/service/evaluate_in_async_activation_test.dart
@@ -27,7 +27,7 @@
     expect(stack.type, equals('Stack'));
     expect(await stack['frames'][topFrame].location.getLine(), 16);
 
-    var result = await isolate.evalFrame(topFrame, "x");
+    Instance result = await isolate.evalFrame(topFrame, "x");
     print(result);
     expect(result.valueAsString, equals("3"));
   },
@@ -40,7 +40,7 @@
     expect(stack.type, equals('Stack'));
     expect(await stack['frames'][topFrame].location.getLine(), 18);
 
-    var result = await isolate.evalFrame(topFrame, "z");
+    Instance result = await isolate.evalFrame(topFrame, "z");
     print(result);
     expect(result.valueAsString, equals("7"));
   },
diff --git a/runtime/observatory/tests/service/evaluate_in_async_star_activation_test.dart b/runtime/observatory/tests/service/evaluate_in_async_star_activation_test.dart
index 0c76684..34c4358 100644
--- a/runtime/observatory/tests/service/evaluate_in_async_star_activation_test.dart
+++ b/runtime/observatory/tests/service/evaluate_in_async_star_activation_test.dart
@@ -31,7 +31,7 @@
     expect(stack.type, equals('Stack'));
     expect(await stack['frames'][topFrame].location.getLine(), 15);
 
-    var result = await isolate.evalFrame(topFrame, "x");
+    Instance result = await isolate.evalFrame(topFrame, "x");
     print(result);
     expect(result.valueAsString, equals("3"));
   },
@@ -44,7 +44,7 @@
     expect(stack.type, equals('Stack'));
     expect(await stack['frames'][topFrame].location.getLine(), 18);
 
-    var result = await isolate.evalFrame(topFrame, "z");
+    Instance result = await isolate.evalFrame(topFrame, "z");
     print(result);
     expect(result.valueAsString, equals("7"));
   },
diff --git a/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart b/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart
index 4c7e9b0..bb8cd78 100644
--- a/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart
+++ b/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart
@@ -45,25 +45,26 @@
     var thing2 = thing2Field.staticValue;
     print(thing2);
 
-    var result = await isolate
-        .evalFrame(0, "x + y + a + b", scope: {"a": thing1, "b": thing2});
+    Instance result = await isolate.evalFrame(0, "x + y + a + b",
+        scope: <String, ServiceObject>{"a": thing1, "b": thing2});
     print(result);
     expect(result.valueAsString, equals('2033'));
 
-    result = await isolate
-        .evalFrame(0, "local + a + b", scope: {"a": thing1, "b": thing2});
+    result = await isolate.evalFrame(0, "local + a + b",
+        scope: <String, ServiceObject>{"a": thing1, "b": thing2});
     print(result);
     expect(result.valueAsString, equals('2033'));
 
     // Note the eval's scope is shadowing the locals' scope.
-    result =
-        await isolate.evalFrame(0, "x + y", scope: {"x": thing1, "y": thing2});
+    result = await isolate.evalFrame(0, "x + y",
+        scope: <String, ServiceObject>{"x": thing1, "y": thing2});
     print(result);
     expect(result.valueAsString, equals('7'));
 
     bool didThrow = false;
     try {
-      await lib.evaluate("x + y", scope: {"x": lib, "y": lib});
+      await lib.evaluate("x + y",
+          scope: <String, ServiceObject>{"x": lib, "y": lib});
     } catch (e) {
       didThrow = true;
       expect(e.toString(),
@@ -73,8 +74,8 @@
 
     didThrow = false;
     try {
-      result =
-          await lib.evaluate("x + y", scope: {"not&an&identifier": thing1});
+      result = await lib.evaluate("x + y",
+          scope: <String, ServiceObject>{"not&an&identifier": thing1});
       print(result);
     } catch (e) {
       didThrow = true;
diff --git a/runtime/observatory/tests/service/evaluate_in_sync_star_activation_test.dart b/runtime/observatory/tests/service/evaluate_in_sync_star_activation_test.dart
index 04c3385..c29a44c 100644
--- a/runtime/observatory/tests/service/evaluate_in_sync_star_activation_test.dart
+++ b/runtime/observatory/tests/service/evaluate_in_sync_star_activation_test.dart
@@ -31,7 +31,7 @@
     expect(stack.type, equals('Stack'));
     expect(await stack['frames'][topFrame].location.getLine(), 15);
 
-    var result = await isolate.evalFrame(topFrame, "x");
+    Instance result = await isolate.evalFrame(topFrame, "x");
     print(result);
     expect(result.valueAsString, equals("3"));
   },
@@ -44,7 +44,7 @@
     expect(stack.type, equals('Stack'));
     expect(await stack['frames'][topFrame].location.getLine(), 18);
 
-    var result = await isolate.evalFrame(topFrame, "z");
+    Instance result = await isolate.evalFrame(topFrame, "z");
     print(result);
     expect(result.valueAsString, equals("7"));
   },
diff --git a/runtime/observatory/tests/service/evaluate_with_scope_test.dart b/runtime/observatory/tests/service/evaluate_with_scope_test.dart
index c2d8aff..c779326 100644
--- a/runtime/observatory/tests/service/evaluate_with_scope_test.dart
+++ b/runtime/observatory/tests/service/evaluate_with_scope_test.dart
@@ -27,12 +27,14 @@
     var thing2 = thing2Field.staticValue;
     print(thing2);
 
-    var result = await lib.evaluate("x + y", scope: {"x": thing1, "y": thing2});
+    Instance result = await lib.evaluate("x + y",
+        scope: <String, ServiceObject>{"x": thing1, "y": thing2});
     expect(result.valueAsString, equals('7'));
 
     bool didThrow = false;
     try {
-      result = await lib.evaluate("x + y", scope: {"x": lib, "y": lib});
+      result = await lib.evaluate("x + y",
+          scope: <String, ServiceObject>{"x": lib, "y": lib});
       print(result);
     } catch (e) {
       didThrow = true;
@@ -43,8 +45,8 @@
 
     didThrow = false;
     try {
-      result =
-          await lib.evaluate("x + y", scope: {"not&an&identifier": thing1});
+      result = await lib.evaluate("x + y",
+          scope: <String, ServiceObject>{"not&an&identifier": thing1});
       print(result);
     } catch (e) {
       didThrow = true;
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index b7b125ce..e00fe7a 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -38,9 +38,6 @@
 evaluate_activation_in_method_class_test: CompileTimeError # Issue 24478
 get_isolate_after_language_error_test: SkipByDesign
 
-[ $compiler == dartk ]
-next_through_simple_async_test: Pass, Fail # Issue 29145
-
 # Kernel version of tests
 [ $compiler != dartk ]
 add_breakpoint_rpc_kernel_test: SkipByDesign # kernel specific version of add_breakpoint_rpc_test
@@ -79,13 +76,12 @@
 # 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) ]
+bad_reload_test: RuntimeError # Please triage.
 coverage_leaf_function_test: RuntimeError # Please triage.
 coverage_optimized_function_test: RuntimeError # Please triage.
 dev_fs_spawn_test: RuntimeError # Please triage.
-developer_service_get_isolate_id_test: RuntimeError # Please triage.
 get_object_rpc_test: RuntimeError # Please triage.
 get_source_report_test: RuntimeError # Please triage.
-issue_30555_test: RuntimeError # Please triage.
 library_dependency_test: RuntimeError # Please triage.
 reload_sources_test: Timeout, Skip # Please triage.
 set_name_rpc_test: RuntimeError # Please triage.
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index 903a5a5..75bbb40 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -5,28 +5,25 @@
 # Kernel works slightly different. There are kernel specific versions.
 # These are the non-kernel specific versions so skip tests and allow errors.
 [ $compiler == dartk ]
-*_reload_*: Skip # no reload support for now
 add_breakpoint_rpc_test: SkipByDesign # non-kernel specific version of add_breakpoint_rpc_kernel_test.
-address_mapper_test: CompileTimeError # These 3 tests fail with 'dart:vmservice_io': error: [...] native function 'VMServiceIO_Shutdown' (0 arguments) cannot be found because of '--compile_all'
-address_mapper_test: Crash
-async_generator_breakpoint_test: Skip # Issue 29158, Async debugging
 async_single_step_out_test: RuntimeError # Issue 29158, Async debugging
 async_star_single_step_into_test: RuntimeError # Issue 29158, Async debugging
 async_star_step_out_test: RuntimeError # Issue 29158, Async debugging
 async_step_out_test: RuntimeError # Issue 29158, Async debugging
 awaiter_async_stack_contents_test: RuntimeError # Issue 29158, Async debugging
-capture_stdio_test: CompileTimeError # These 3 tests fail with 'dart:vmservice_io': error: [...] native function 'VMServiceIO_Shutdown' (0 arguments) cannot be found because of '--compile_all'
-capture_stdio_test: Crash
+complex_reload_test: RuntimeError
 developer_extension_test: CompileTimeError
-eval_internal_class_test: Skip # no evaluation test for now
-evaluate_*: Skip # no evaluation test for now
+eval_internal_class_test: RuntimeError
+evaluate_activation_in_method_class_test: RuntimeError
+evaluate_activation_test/instance: RuntimeError
+evaluate_activation_test/scope: RuntimeError
+evaluate_in_sync_star_activation_test: RuntimeError
 get_isolate_after_language_error_test: CompileTimeError
-isolate_lifecycle_test: Pass, RuntimeError # Inherited from service.status
 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
-vm_restart_test: Crash
+unused_changes_in_last_reload_test: RuntimeError
 
 [ $compiler == dartkp ]
 *: Skip # Non-kernel also skips precompiled mode.
@@ -42,84 +39,43 @@
 [ $compiler == dartk && $mode == debug && $strong ]
 external_service_disappear_test: Crash # Issue 31587
 
-# Issue 31587
-[ $compiler == dartk && $strong ]
-add_breakpoint_rpc_kernel_test: CompileTimeError
-async_next_test: RuntimeError
-async_scope_test: RuntimeError
-async_single_step_exception_test: RuntimeError
-async_single_step_into_test: RuntimeError
-awaiter_async_stack_contents_test: RuntimeError
-bad_web_socket_address_test: CompileTimeError
-break_on_function_test: RuntimeError
-breakpoint_in_parts_class_test: RuntimeError
-breakpoint_two_args_checked_test: CompileTimeError
-caching_test: RuntimeError
-causal_async_stack_contents_test: RuntimeError
-causal_async_stack_presence_test: RuntimeError
-causal_async_star_stack_contents_test: RuntimeError
-causal_async_star_stack_presence_test: RuntimeError
+[ $compiler == dartk && $system == windows ]
+coverage_leaf_function_test: RuntimeError
+coverage_optimized_function_test: Skip # Timeout
+get_source_report_test: RuntimeError
+step_test: Pass, Slow
+step_through_constructor_test: Pass, Slow
+
+[ $compiler == dartk && $system == windows && $strong ]
+add_breakpoint_rpc_kernel_test: Skip # Timeout
+issue_30555_test: Skip # Timeout
+next_through_implicit_call_test: Skip # Timeout
+next_through_operator_bracket_on_super_test: Skip # Timeout
+next_through_operator_bracket_on_this_test: Skip # Timeout
+next_through_operator_bracket_test: Skip # Timeout
+next_through_simple_async_test: Skip # Timeout
+step_through_constructor_calls_test: Skip # Timeout
+step_through_property_set_test: Skip # Timeout
+
+[ $compiler == dartk && $system == windows && !$strong ]
 code_test: RuntimeError
-command_test: CompileTimeError
-debugger_location_second_test: RuntimeError
-debugger_location_test: RuntimeError
-debugging_inlined_finally_test: RuntimeError
-debugging_test: RuntimeError
-dev_fs_spawn_test: RuntimeError
-developer_service_get_isolate_id_test: RuntimeError
-external_service_asynchronous_invocation_test: CompileTimeError
-external_service_disappear_test: CompileTimeError
-external_service_notification_invocation_test: CompileTimeError
-external_service_registration_test: CompileTimeError
-external_service_registration_via_notification_test: CompileTimeError
-external_service_synchronous_invocation_test: CompileTimeError
+field_script_test: Skip # Timeout
 get_object_rpc_test: RuntimeError
-get_object_store_rpc_test: RuntimeError
 get_stack_rpc_test: RuntimeError
-issue_25465_test: CompileTimeError
-issue_27238_test: RuntimeError
-issue_27287_test: RuntimeError
-local_variable_declaration_test: RuntimeError
-mixin_break_test: RuntimeError
-next_through_assign_call_test: RuntimeError
-next_through_assign_int_test: RuntimeError
-next_through_call_on_field_in_class_test: RuntimeError
-next_through_call_on_field_test: RuntimeError
-next_through_call_on_static_field_in_class_test: RuntimeError
-next_through_catch_test: RuntimeError
-next_through_closure_test: RuntimeError
-next_through_create_list_and_map_test: RuntimeError
-next_through_for_each_loop_test: RuntimeError
-next_through_for_loop_with_break_and_continue_test: RuntimeError
-next_through_function_expression_test: RuntimeError
-next_through_implicit_call_test: RuntimeError
-next_through_is_and_as_test: RuntimeError
-next_through_multi_catch_test: RuntimeError
-next_through_new_test: RuntimeError
-next_through_operator_bracket_on_super_test: RuntimeError
-next_through_operator_bracket_on_this_test: RuntimeError
-next_through_operator_bracket_test: RuntimeError
-next_through_simple_async_with_returns_test: RuntimeError
-next_through_simple_linear_2_test: RuntimeError
-next_through_simple_linear_test: RuntimeError
-parameters_in_scope_at_entry_test: RuntimeError
-positive_token_pos_test: RuntimeError
-regress_28443_test: RuntimeError
-regress_28980_test: RuntimeError
-rewind_optimized_out_test: RuntimeError
-rewind_test: RuntimeError
-set_library_debuggable_test: RuntimeError
-steal_breakpoint_test: RuntimeError
-step_into_async_no_await_test: RuntimeError
-step_over_await_test: RuntimeError
+next_through_catch_test: Skip # Timeout
+next_through_for_loop_with_break_and_continue_test: Skip # Timeout
+next_through_simple_async_test: Skip # Timeout
+step_test: Skip # Timeout
+step_through_constructor_test: Skip # Timeout
+
+[ $compiler == dartk && $strong ]
+awaiter_async_stack_contents_test: RuntimeError
+external_service_asynchronous_invocation_test: CompileTimeError # Issue 31696
+external_service_disappear_test: CompileTimeError # Issue 31696
+external_service_notification_invocation_test: CompileTimeError # Issue 31696
+external_service_registration_test: CompileTimeError # Issue 31696
+external_service_registration_via_notification_test: CompileTimeError # Issue 31696
+external_service_synchronous_invocation_test: CompileTimeError # Issue 31696
+get_object_rpc_test: RuntimeError
 step_through_arithmetic_test: RuntimeError
-step_through_constructor_calls_test: RuntimeError
-step_through_constructor_test: RuntimeError
-step_through_function_2_test: RuntimeError
-step_through_function_test: RuntimeError
-step_through_getter_test: RuntimeError
-step_through_property_get_test: RuntimeError
-step_through_property_set_test: RuntimeError
-step_through_setter_test: RuntimeError
-step_through_switch_test: RuntimeError
-step_through_switch_with_continue_test: RuntimeError
+
diff --git a/runtime/tests/vm/dart/data_uri_spawn_test.dart b/runtime/tests/vm/dart/data_uri_spawn_test.dart
index 25a18c1..4d2d023 100644
--- a/runtime/tests/vm/dart/data_uri_spawn_test.dart
+++ b/runtime/tests/vm/dart/data_uri_spawn_test.dart
@@ -20,7 +20,7 @@
 """;
 
     RawReceivePort receivePort;
-    receivePort = new RawReceivePort(expectAsync((int message) {
+    receivePort = new RawReceivePort(expectAsync((message) {
       expect(message, equals(42));
       receivePort.close();
     }));
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index d2ec7b8..4390d0f 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -186,14 +186,12 @@
 cc/DartAPI_LookupLibrary: Crash
 cc/DartAPI_NativeFieldAccess: Fail
 cc/DartAPI_NegativeNativeFieldInIsolateMessage: Crash
-cc/DartAPI_New: Crash
 cc/DartAPI_ParsePatchLibrary: Crash
 cc/DartAPI_PropagateError: Fail
 cc/DartAPI_StackOverflowStackTraceInfoArrowFunction: Fail
 cc/DartAPI_StackOverflowStackTraceInfoBraceFunction1: Fail
 cc/DartAPI_StackOverflowStackTraceInfoBraceFunction2: Fail
 cc/DartAPI_TestNativeFieldsAccess: Crash
-cc/DartAPI_TypeGetParameterizedTypes: Crash
 cc/DebuggerAPI_BreakpointStubPatching: Fail
 cc/DebuggerAPI_GetClosureInfo: Fail
 cc/DebuggerAPI_InterruptIsolate: SkipSlow
@@ -211,8 +209,6 @@
 cc/IsolateReload_ChangeInstanceFormat8: Skip
 cc/IsolateReload_ClassFieldAdded: Skip # Crash, Timeout
 cc/IsolateReload_ClassFieldAdded2: Skip # Crash, Timeout
-cc/IsolateReload_DanglingGetter_Class: Fail
-cc/IsolateReload_DanglingGetter_Instance: Fail
 cc/IsolateReload_DanglingGetter_Library: Fail
 cc/IsolateReload_DanglingSetter_Class: Fail
 cc/IsolateReload_DanglingSetter_Instance: Fail
@@ -226,7 +222,6 @@
 cc/IsolateReload_ImportedLibModified: Crash
 cc/IsolateReload_ImportedMixinFunction: Crash
 cc/IsolateReload_LibraryHide: Crash
-cc/IsolateReload_LibraryLookup: Fail
 cc/IsolateReload_LibraryShow: Crash
 cc/IsolateReload_LiveStack: Fail
 cc/IsolateReload_MainLibModified: Crash
@@ -243,16 +238,7 @@
 cc/IsolateReload_RunNewFieldInitializersWithConsts: Skip
 cc/IsolateReload_ShapeChangeRetainsHash: Skip
 cc/IsolateReload_SmiFastPathStubs: Fail
-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_TopLevelParseError: Fail
-cc/IsolateReload_TypeIdentity: Fail
-cc/IsolateReload_TypeIdentityGeneric: Fail
-cc/IsolateReload_TypeIdentityParameter: Fail
 cc/IsolateReload_TypedefToNotTypedef: Fail
 cc/Parser_AllocateVariables_CaptureLoopVar: Fail
 cc/Parser_AllocateVariables_CapturedVar: Fail
@@ -296,9 +282,7 @@
 cc/SourceReport_PossibleBreakpoints_Simple: Fail
 cc/StackTraceFormat: Fail
 cc/UseDartApi: Fail
-dart/data_uri_import_test/utf16: MissingRuntimeError # UTF-16 data URIs work in dartk
-dart/redirection_type_shuffling_test/00: Crash
-dart/redirection_type_shuffling_test/none: Crash
+dart/data_uri_import_test/utf16: MissingRuntimeError
 dart/spawn_shutdown_test: SkipSlow
 
 [ $compiler == dartk && $runtime == vm && $system == macos ]
@@ -325,21 +309,61 @@
 cc/Parser_AllocateVariables_NestedCapturedVar: Crash
 cc/Parser_AllocateVariables_TwoChains: Crash
 
+[ $compiler == dartk && $system == linux ]
+cc/IsolateReload_DanglingGetter_Class: Fail
+cc/IsolateReload_DanglingGetter_Instance: Fail
+cc/IsolateReload_LibraryLookup: Fail
+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/DartAPI_New: Fail
+cc/DartAPI_TypeGetParameterizedTypes: Fail
+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
+cc/Profiler_CodeTicks: Fail
+cc/Profiler_FunctionTicks: Fail
+cc/Profiler_ToggleRecordAllocation: Fail
+cc/Profiler_TrivialRecordAllocation: Fail
+cc/Service_Address: Fail
+cc/Service_Code: Fail
+dart/redirection_type_shuffling_test/00: Fail
+dart/redirection_type_shuffling_test/none: Fail
+
+[ $compiler == dartk && $system != windows ]
+cc/DartAPI_New: Crash
+cc/DartAPI_TypeGetParameterizedTypes: Crash
+dart/redirection_type_shuffling_test/00: Crash
+dart/redirection_type_shuffling_test/none: Crash
+
 [ $compiler == dartk && $strong ]
-dart/data_uri_spawn_test: CompileTimeError # Issue 31586
 dart/optimized_stacktrace_line_and_column_test: CompileTimeError # Issue 31586
 dart/optimized_stacktrace_line_test: CompileTimeError # Issue 31586
 
-[ $compiler == dartk && $strong && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) ]
-dart/spawn_infinite_loop_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
 # batch mode.
 [ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) ]
 dart/data_uri_spawn_test: Skip # Please triage.
 dart/snapshot_version_test: RuntimeError # Please triage.
-dart/spawn_infinite_loop_test: Crash
 
 [ $compiler == dartkp && !$strong ]
 dart/truncating_ints_test: Skip # This test cannot be run in dartkp/legacy mode (gen_kernel does not pass --limit-ints-to-64-bits in legacy mode).
diff --git a/runtime/tools/dill_to_data_cc.py b/runtime/tools/dill_to_data_cc.py
new file mode 100755
index 0000000..b3b1211
--- /dev/null
+++ b/runtime/tools/dill_to_data_cc.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+#
+# 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.
+
+# Script to create a cc file with uint8 array of bytes corresponding to the
+# content of given a dill file.
+
+import optparse
+import sys
+
+# Option => Help mapping.
+OPTION_MAP = {
+  'dill_file': 'Path to the input dill file.',
+  'data_symbol': 'The C name for the data array.',
+  'size_symbol': 'The C name for the data size variable.',
+  'output': 'Path to the generated cc file.',
+}
+
+
+def BuildOptionParser():
+  parser = optparse.OptionParser()
+  for opt, help_text in OPTION_MAP.iteritems():
+    parser.add_option('--%s' % opt, type='string', help=help_text)
+  return parser
+
+
+def ValidateOptions(options):
+  for opt in OPTION_MAP.keys():
+    if getattr(options, opt) is None:
+      sys.stderr.write('--%s option not specified.\n' % opt)
+      return False
+  return True
+
+
+def WriteData(input_filename, data_symbol, output_file):
+  output_file.write('uint8_t %s[] = {\n' % data_symbol)
+  with open(input_filename, 'rb') as f:
+    first = True
+    size = 0
+    for byte in f.read():
+      if first:
+        output_file.write('  %d' % ord(byte))
+        first = False
+      else:
+        output_file.write(',\n  %d' % ord(byte))
+      size += 1
+  output_file.write('\n};\n')
+  return size
+
+
+def WriteSize(size_symbol, size, output_file):
+  output_file.write('intptr_t %s = %d;\n' % (size_symbol, size))
+
+
+def Main():
+  opt_parser = BuildOptionParser()
+  (options, args) = opt_parser.parse_args()
+  if not ValidateOptions(options):
+    opt_parser.print_help()
+    return 1
+  if args:
+    sys.stderr.write('Unknown args: "%s"\n' % str(args))
+    parser.print_help()
+    return 1
+
+  with open(options.output, 'w') as output_file:
+    output_file.write('#include <stdint.h>\n')
+    output_file.write('extern "C" {\n')
+    size = WriteData(options.dill_file, options.data_symbol, output_file)
+    WriteSize(options.size_symbol, size, output_file)
+    output_file.write("}")
+
+
+if __name__ == '__main__':
+  sys.exit(Main())
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 2bc5b48..f3eeafe 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -314,6 +314,7 @@
   V(Internal_makeListFixedLength, 1)                                           \
   V(Internal_makeFixedListUnmodifiable, 1)                                     \
   V(Internal_inquireIs64Bit, 0)                                                \
+  V(Internal_extractTypeArguments, 2)                                          \
   V(Internal_prependTypeArguments, 3)                                          \
   V(InvocationMirror_decodePositionalCountEntry, 1)                            \
   V(InvocationMirror_decodeTypeArgsLenEntry, 1)                                \
diff --git a/runtime/vm/compiler/aot/aot_call_specializer.cc b/runtime/vm/compiler/aot/aot_call_specializer.cc
index 13190f9..e2b8ec5 100644
--- a/runtime/vm/compiler/aot/aot_call_specializer.cc
+++ b/runtime/vm/compiler/aot/aot_call_specializer.cc
@@ -251,6 +251,20 @@
   return false;
 }
 
+bool AotCallSpecializer::TryInlineFieldAccess(StaticCallInstr* call) {
+  if (call->function().IsImplicitGetterFunction()) {
+    Field& field =
+        Field::ZoneHandle(call->function().LookupImplicitGetterSetterField());
+    if (should_clone_fields_) {
+      field = field.CloneFromOriginal();
+    }
+    InlineImplicitInstanceGetter(call, field);
+    return true;
+  }
+
+  return false;
+}
+
 Value* AotCallSpecializer::PrepareStaticOpInput(Value* input,
                                                 intptr_t cid,
                                                 Instruction* call) {
@@ -403,7 +417,7 @@
           } else {
             left_value = PrepareStaticOpInput(left_value, kMintCid, instr);
             right_value = PrepareStaticOpInput(right_value, kMintCid, instr);
-            replacement = new BinaryInt64OpInstr(
+            replacement = new (Z) BinaryInt64OpInstr(
                 op_kind, left_value, right_value, Thread::kNoDeoptId,
                 Instruction::kNotSpeculative);
           }
@@ -437,7 +451,7 @@
       break;
   }
 
-  if (replacement != NULL) {
+  if (replacement != NULL && !replacement->ComputeCanDeoptimize()) {
     if (FLAG_trace_strong_mode_types) {
       THR_Print("[Strong mode] Optimization: replacing %s with %s\n",
                 instr->ToCString(), replacement->ToCString());
@@ -825,6 +839,13 @@
   }
 }
 
+void AotCallSpecializer::VisitStaticCall(StaticCallInstr* instr) {
+  if (TryInlineFieldAccess(instr)) {
+    return;
+  }
+  CallSpecializer::VisitStaticCall(instr);
+}
+
 bool AotCallSpecializer::TryExpandCallThroughGetter(const Class& receiver_class,
                                                     InstanceCallInstr* call) {
   // If it's an accessor call it can't be a call through getter.
diff --git a/runtime/vm/compiler/aot/aot_call_specializer.h b/runtime/vm/compiler/aot/aot_call_specializer.h
index aba4766..68705f7 100644
--- a/runtime/vm/compiler/aot/aot_call_specializer.h
+++ b/runtime/vm/compiler/aot/aot_call_specializer.h
@@ -26,6 +26,7 @@
   void ReplaceArrayBoundChecks();
 
   virtual void VisitInstanceCall(InstanceCallInstr* instr);
+  virtual void VisitStaticCall(StaticCallInstr* instr);
   virtual void VisitPolymorphicInstanceCall(
       PolymorphicInstanceCallInstr* instr);
 
@@ -44,6 +45,7 @@
   bool TryReplaceWithHaveSameRuntimeType(InstanceCallInstr* call);
 
   bool TryInlineFieldAccess(InstanceCallInstr* call);
+  bool TryInlineFieldAccess(StaticCallInstr* call);
 
   Value* PrepareStaticOpInput(Value* input, intptr_t cid, Instruction* call);
 
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index e7efe16..bdb87e3 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -777,7 +777,7 @@
         Class::Handle(Isolate::Current()->class_table()->At(result_cid));
     DescribeClass(&writer, result_cls);
 
-    writer.PrintProperty("nullable", "false");
+    writer.PrintPropertyBool("nullable", false);
 
     writer.CloseObject();
     writer.CloseArray();
diff --git a/runtime/vm/compiler/assembler/assembler_arm.cc b/runtime/vm/compiler/assembler/assembler_arm.cc
index 0e3de9c..139069e 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm.cc
@@ -2474,7 +2474,7 @@
   const ARMVersion version = TargetCPUFeatures::arm_version();
   if ((version == ARMv5TE) || (version == ARMv6)) {
     if (constant_pool_allowed()) {
-      const int32_t offset = Array::element_offset(FindImmediate(value));
+      const int32_t offset = ObjectPool::element_offset(FindImmediate(value));
       LoadWordFromPoolOffset(rd, offset - kHeapObjectTag, PP, cond);
     } else {
       LoadPatchableImmediate(rd, value, cond);
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index 94bd1ae..94e3379 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -984,12 +984,16 @@
 
 // Returns 'true' if regular code generation should be skipped.
 bool FlowGraphCompiler::TryIntrinsify() {
-  // Intrinsification skips arguments checks, therefore disable if in checked
-  // mode or strong mode.
-  if (FLAG_intrinsify && !isolate()->argument_type_checks()) {
+  if (FLAG_intrinsify) {
     const Class& owner = Class::Handle(parsed_function().function().Owner());
     String& name = String::Handle(parsed_function().function().name());
 
+    // Intrinsification skips arguments checks, therefore disable if in checked
+    // mode or strong mode.
+    //
+    // Though for implicit getters, which have only the receiver as parameter,
+    // there are no checks necessary in any case and we can therefore intrinsify
+    // them even in checked mode and strong mode.
     if (parsed_function().function().kind() == RawFunction::kImplicitGetter) {
       // TODO(27590) Store Field object inside RawFunction::data_ if possible.
       name = Field::NameFromGetter(name);
@@ -1004,19 +1008,21 @@
         return !isolate()->use_field_guards();
       }
       return false;
-    }
-    if (parsed_function().function().kind() == RawFunction::kImplicitSetter) {
-      // TODO(27590) Store Field object inside RawFunction::data_ if possible.
-      name = Field::NameFromSetter(name);
-      const Field& field = Field::Handle(owner.LookupFieldAllowPrivate(name));
-      ASSERT(!field.IsNull());
+    } else if (parsed_function().function().kind() ==
+               RawFunction::kImplicitSetter) {
+      if (!isolate()->argument_type_checks()) {
+        // TODO(27590) Store Field object inside RawFunction::data_ if possible.
+        name = Field::NameFromSetter(name);
+        const Field& field = Field::Handle(owner.LookupFieldAllowPrivate(name));
+        ASSERT(!field.IsNull());
 
-      if (field.is_instance() &&
-          (FLAG_precompiled_mode || field.guarded_cid() == kDynamicCid)) {
-        GenerateInlinedSetter(field.Offset());
-        return !isolate()->use_field_guards();
+        if (field.is_instance() &&
+            (FLAG_precompiled_mode || field.guarded_cid() == kDynamicCid)) {
+          GenerateInlinedSetter(field.Offset());
+          return !isolate()->use_field_guards();
+        }
+        return false;
       }
-      return false;
     }
   }
 
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index b9de1f8..08f36a7 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -188,7 +188,15 @@
   __ Bind(&fall_through);
 }
 
-// Clobbers RCX.
+// Call stub to perform subtype test using a cache (see
+// stub_code_x64.cc:GenerateSubtypeNTestCacheStub)
+//
+// Inputs:
+//   - RAX : instance to test against.
+//   - RDX : instantiator type arguments (if necessary).
+//   - RCX : function type arguments (if necessary).
+//
+// Preserves RAX/RCX/RDX.
 RawSubtypeTestCache* FlowGraphCompiler::GenerateCallSubtypeTestStub(
     TypeTestStubKind test_kind,
     Register instance_reg,
@@ -197,37 +205,27 @@
     Register temp_reg,
     Label* is_instance_lbl,
     Label* is_not_instance_lbl) {
+  ASSERT(temp_reg == kNoRegister);
   const SubtypeTestCache& type_test_cache =
       SubtypeTestCache::ZoneHandle(zone(), SubtypeTestCache::New());
-  __ LoadUniqueObject(temp_reg, type_test_cache);
-  __ pushq(temp_reg);      // Subtype test cache.
-  __ pushq(instance_reg);  // Instance.
+  __ LoadUniqueObject(R9, type_test_cache);
   if (test_kind == kTestTypeOneArg) {
     ASSERT(instantiator_type_arguments_reg == kNoRegister);
     ASSERT(function_type_arguments_reg == kNoRegister);
-    __ PushObject(Object::null_object());  // Unused instantiator type args.
-    __ PushObject(Object::null_object());  // Unused function type args.
     __ Call(*StubCode::Subtype1TestCache_entry());
   } else if (test_kind == kTestTypeTwoArgs) {
     ASSERT(instantiator_type_arguments_reg == kNoRegister);
     ASSERT(function_type_arguments_reg == kNoRegister);
-    __ PushObject(Object::null_object());  // Unused instantiator type args.
-    __ PushObject(Object::null_object());  // Unused function type args.
     __ Call(*StubCode::Subtype2TestCache_entry());
   } else if (test_kind == kTestTypeFourArgs) {
-    __ pushq(instantiator_type_arguments_reg);
-    __ pushq(function_type_arguments_reg);
+    ASSERT(RDX == instantiator_type_arguments_reg);
+    ASSERT(RCX == function_type_arguments_reg);
     __ Call(*StubCode::Subtype4TestCache_entry());
   } else {
     UNREACHABLE();
   }
-  // Result is in RCX: null -> not found, otherwise Bool::True or Bool::False.
-  ASSERT(instance_reg != RCX);
-  ASSERT(temp_reg != RCX);
-  __ Drop(2);
-  __ popq(instance_reg);  // Restore receiver.
-  __ popq(temp_reg);      // Discard.
-  GenerateBoolToJump(RCX, is_instance_lbl, is_not_instance_lbl);
+  // Result is in R8: null -> not found, otherwise Bool::True or Bool::False.
+  GenerateBoolToJump(R8, is_instance_lbl, is_not_instance_lbl);
   return type_test_cache.raw();
 }
 
@@ -301,7 +299,7 @@
   // Regular subtype test cache involving instance's type arguments.
   const Register kInstantiatorTypeArgumentsReg = kNoRegister;
   const Register kFunctionTypeArgumentsReg = kNoRegister;
-  const Register kTempReg = R10;
+  const Register kTempReg = kNoRegister;
   return GenerateCallSubtypeTestStub(kTestTypeTwoArgs, kInstanceReg,
                                      kInstantiatorTypeArgumentsReg,
                                      kFunctionTypeArgumentsReg, kTempReg,
@@ -320,9 +318,13 @@
 }
 
 // Testing against an instantiated type with no arguments, without
-// SubtypeTestCache.
-// RAX: instance to test against (preserved).
-// Clobbers R10, R13.
+// SubtypeTestCache
+//
+// Inputs:
+//   - RAX : instance to test against
+//
+// Preserves RAX/RCX/RDX.
+//
 // Returns true if there is a fallthrough.
 bool FlowGraphCompiler::GenerateInstantiatedTypeNoArgumentsTest(
     TokenPosition token_pos,
@@ -387,9 +389,13 @@
 }
 
 // Uses SubtypeTestCache to store instance class and result.
-// RAX: instance to test.
-// Clobbers R10, R13.
 // Immediate class test already done.
+//
+// Inputs:
+//   RAX : instance to test against.
+//
+// Preserves RAX/RCX/RDX.
+//
 // TODO(srdjan): Implement a quicker subtype check, as type test
 // arrays can grow too high, but they may be useful when optimizing
 // code (type-feedback).
@@ -410,7 +416,7 @@
 
   const Register kInstantiatorTypeArgumentsReg = kNoRegister;
   const Register kFunctionTypeArgumentsReg = kNoRegister;
-  const Register kTempReg = R10;
+  const Register kTempReg = kNoRegister;
   return GenerateCallSubtypeTestStub(kTestTypeOneArg, kInstanceReg,
                                      kInstantiatorTypeArgumentsReg,
                                      kFunctionTypeArgumentsReg, kTempReg,
@@ -418,20 +424,27 @@
 }
 
 // Generates inlined check if 'type' is a type parameter or type itself
-// RAX: instance (preserved).
-// Clobbers RDI, RDX, R10.
+//
+// Inputs:
+//   - RAX : instance to test against.
+//   - RDX : instantiator type arguments (if necessary).
+//   - RCX : function type arguments (if necessary).
+//
+// Preserves RAX/RCX/RDX.
 RawSubtypeTestCache* FlowGraphCompiler::GenerateUninstantiatedTypeTest(
     TokenPosition token_pos,
     const AbstractType& type,
     Label* is_instance_lbl,
     Label* is_not_instance_lbl) {
+  const Register kInstanceReg = RAX;
+  const Register kInstantiatorTypeArgumentsReg = RDX;
+  const Register kFunctionTypeArgumentsReg = RCX;
+  const Register kTempReg = kNoRegister;
   __ Comment("UninstantiatedTypeTest");
   ASSERT(!type.IsInstantiated());
   // Skip check if destination is a dynamic type.
   if (type.IsTypeParameter()) {
     const TypeParameter& type_param = TypeParameter::Cast(type);
-    __ movq(RDX, Address(RSP, 1 * kWordSize));  // Get instantiator type args.
-    __ movq(RCX, Address(RSP, 0 * kWordSize));  // Get function type args.
     // RDX: instantiator type arguments.
     // RCX: function type arguments.
     const Register kTypeArgumentsReg =
@@ -463,13 +476,6 @@
     __ jmp(&fall_through);
 
     __ Bind(&not_smi);
-    // RAX: instance.
-    // RDX: instantiator type arguments.
-    // RCX: function type arguments.
-    const Register kInstanceReg = RAX;
-    const Register kInstantiatorTypeArgumentsReg = RDX;
-    const Register kFunctionTypeArgumentsReg = RCX;
-    const Register kTempReg = R10;
     const SubtypeTestCache& type_test_cache = SubtypeTestCache::ZoneHandle(
         zone(), GenerateCallSubtypeTestStub(
                     kTestTypeFourArgs, kInstanceReg,
@@ -479,16 +485,10 @@
     return type_test_cache.raw();
   }
   if (type.IsType()) {
-    const Register kInstanceReg = RAX;
-    const Register kInstantiatorTypeArgumentsReg = RDX;
-    const Register kFunctionTypeArgumentsReg = RCX;
     __ testq(kInstanceReg, Immediate(kSmiTagMask));  // Is instance Smi?
     __ j(ZERO, is_not_instance_lbl);
-    __ movq(kInstantiatorTypeArgumentsReg, Address(RSP, 1 * kWordSize));
-    __ movq(kFunctionTypeArgumentsReg, Address(RSP, 0 * kWordSize));
     // Uninstantiated type class is known at compile time, but the type
     // arguments are determined at runtime by the instantiator(s).
-    const Register kTempReg = R10;
     return GenerateCallSubtypeTestStub(kTestTypeFourArgs, kInstanceReg,
                                        kInstantiatorTypeArgumentsReg,
                                        kFunctionTypeArgumentsReg, kTempReg,
@@ -498,13 +498,12 @@
 }
 
 // Inputs:
-// - RAX: instance to test against (preserved).
-// - RDX: optional instantiator type arguments (preserved).
-// - RCX: optional function type arguments (preserved).
-// Clobbers R10, R13.
-// Returns:
-// - preserved instance in RAX, optional instantiator type arguments in RDX, and
-//   optional function type arguments in RCX.
+//   - RAX : instance to test against.
+//   - RDX : instantiator type arguments.
+//   - RCX : function type arguments.
+//
+// Preserves RAX/RCX/RDX.
+//
 // Note that this inlined code must be followed by the runtime_call code, as it
 // may fall through to it. Otherwise, this inline code will jump to the label
 // is_instance or to the label is_not_instance.
@@ -557,9 +556,6 @@
   ASSERT(type.IsFinalized() && !type.IsMalformedOrMalbounded());
   ASSERT(!type.IsObjectType() && !type.IsDynamicType() && !type.IsVoidType());
 
-  __ pushq(RDX);  // Store instantiator type arguments.
-  __ pushq(RCX);  // Store function type arguments.
-
   Label is_instance, is_not_instance;
   // If type is instantiated and non-parameterized, we can inline code
   // checking whether the tested instance is a Smi.
@@ -577,6 +573,7 @@
 
   // Generate inline instanceof test.
   SubtypeTestCache& test_cache = SubtypeTestCache::ZoneHandle(zone());
+  // The registers RAX, RCX, RDX are preserved across the call.
   test_cache =
       GenerateInlineInstanceof(token_pos, type, &is_instance, &is_not_instance);
 
@@ -584,8 +581,6 @@
   Label done;
   if (!test_cache.IsNull()) {
     // Generate runtime call.
-    __ movq(RDX, Address(RSP, 1 * kWordSize));  // Get instantiator type args.
-    __ movq(RCX, Address(RSP, 0 * kWordSize));  // Get function type args.
     __ PushObject(Object::null_object());       // Make room for the result.
     __ pushq(RAX);                              // Push the instance.
     __ PushObject(type);                        // Push the type.
@@ -607,8 +602,6 @@
   __ Bind(&is_instance);
   __ LoadObject(RAX, Bool::Get(true));
   __ Bind(&done);
-  __ popq(RCX);  // Remove pushed function type arguments.
-  __ popq(RDX);  // Remove pushed instantiator type arguments.
 }
 
 // Optimize assignable type check by adding inlined tests for:
@@ -635,8 +628,6 @@
   ASSERT(dst_type.IsMalformedOrMalbounded() ||
          (!dst_type.IsDynamicType() && !dst_type.IsObjectType() &&
           !dst_type.IsVoidType()));
-  __ pushq(RDX);  // Store instantiator type arguments.
-  __ pushq(RCX);  // Store function type arguments.
   // A null object is always assignable and is returned as result.
   Label is_assignable, runtime_call;
   __ CompareObject(RAX, Object::null_object());
@@ -654,19 +645,16 @@
     __ int3();
 
     __ Bind(&is_assignable);  // For a null object.
-    __ popq(RCX);             // Remove pushed function type arguments.
-    __ popq(RDX);             // Remove pushed instantiator type arguments.
     return;
   }
 
   // Generate inline type check, linking to runtime call if not assignable.
   SubtypeTestCache& test_cache = SubtypeTestCache::ZoneHandle(zone());
+  // The registers RAX, RCX, RDX are preserved across the call.
   test_cache = GenerateInlineInstanceof(token_pos, dst_type, &is_assignable,
                                         &runtime_call);
 
   __ Bind(&runtime_call);
-  __ movq(RDX, Address(RSP, 1 * kWordSize));  // Get instantiator type args.
-  __ movq(RCX, Address(RSP, 0 * kWordSize));  // Get function type args.
   __ PushObject(Object::null_object());       // Make room for the result.
   __ pushq(RAX);                              // Push the source object.
   __ PushObject(dst_type);  // Push the type of the destination.
@@ -682,8 +670,6 @@
   __ popq(RAX);
 
   __ Bind(&is_assignable);
-  __ popq(RCX);  // Remove pushed function type arguments.
-  __ popq(RDX);  // Remove pushed instantiator type arguments.
 }
 
 void FlowGraphCompiler::EmitInstructionEpilogue(Instruction* instr) {
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 09a1915..3f48338 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -880,7 +880,11 @@
   const Register result = locs()->out(0).reg();
 
   // All arguments are already @SP due to preceding PushArgument()s.
-  ASSERT(ArgumentCount() == function().NumParameters());
+  ASSERT(ArgumentCount() == function().NumParameters() +
+                                (function().IsGeneric() &&
+                                 Isolate::Current()->reify_generic_functions())
+             ? 1
+             : 0);
 
   // Push the result place holder initialized to NULL.
   __ PushObject(Object::null_object());
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index fa52fc8..2826114 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -769,7 +769,11 @@
   const Register result = locs()->out(0).reg();
 
   // All arguments are already @SP due to preceding PushArgument()s.
-  ASSERT(ArgumentCount() == function().NumParameters());
+  ASSERT(ArgumentCount() == function().NumParameters() +
+                                (function().IsGeneric() &&
+                                 Isolate::Current()->reify_generic_functions())
+             ? 1
+             : 0);
 
   // Push the result place holder initialized to NULL.
   __ PushObject(Object::null_object());
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index cb56455..da721b8 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -818,7 +818,11 @@
   const intptr_t argc_tag = NativeArguments::ComputeArgcTag(function());
 
   // All arguments are already @ESP due to preceding PushArgument()s.
-  ASSERT(ArgumentCount() == function().NumParameters());
+  ASSERT(ArgumentCount() == function().NumParameters() +
+                                (function().IsGeneric() &&
+                                 Isolate::Current()->reify_generic_functions())
+             ? 1
+             : 0);
 
   // Push the result place holder initialized to NULL.
   __ PushObject(Object::null_object());
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index 5fcdd8e..31bf621 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -784,7 +784,11 @@
   const intptr_t argc_tag = NativeArguments::ComputeArgcTag(function());
 
   // All arguments are already @RSP due to preceding PushArgument()s.
-  ASSERT(ArgumentCount() == function().NumParameters());
+  ASSERT(ArgumentCount() == function().NumParameters() +
+                                (function().IsGeneric() &&
+                                 Isolate::Current()->reify_generic_functions())
+             ? 1
+             : 0);
 
   // Push the result place holder initialized to NULL.
   __ PushObject(Object::null_object());
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 5b2837a..5fa342f 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -1069,6 +1069,8 @@
             // before 'SelectRepresentations' which inserts conversion nodes.
             callee_graph->TryOptimizePatterns();
             DEBUG_ASSERT(callee_graph->VerifyUseLists());
+
+            callee_graph->Canonicalize();
 #else
             UNREACHABLE();
 #endif  // DART_PRECOMPILER
diff --git a/runtime/vm/compiler/call_specializer.cc b/runtime/vm/compiler/call_specializer.cc
index 89d05fc..3d85d3a 100644
--- a/runtime/vm/compiler/call_specializer.cc
+++ b/runtime/vm/compiler/call_specializer.cc
@@ -878,6 +878,12 @@
 
     AddReceiverCheck(call);
   }
+  InlineImplicitInstanceGetter(call, field);
+  return true;
+}
+
+void CallSpecializer::InlineImplicitInstanceGetter(Definition* call,
+                                                   const Field& field) {
   LoadFieldInstr* load = new (Z) LoadFieldInstr(
       new (Z) Value(call->ArgumentAt(0)), &field,
       AbstractType::ZoneHandle(Z, field.type()), call->token_pos(),
@@ -895,7 +901,6 @@
       it.Current()->SetReachingType(NULL);
     }
   }
-  return true;
 }
 
 bool CallSpecializer::TryInlineInstanceSetter(InstanceCallInstr* instr,
diff --git a/runtime/vm/compiler/call_specializer.h b/runtime/vm/compiler/call_specializer.h
index aa53961..d74784e 100644
--- a/runtime/vm/compiler/call_specializer.h
+++ b/runtime/vm/compiler/call_specializer.h
@@ -34,8 +34,8 @@
                   bool should_clone_fields)
       : FlowGraphVisitor(flow_graph->reverse_postorder()),
         speculative_policy_(speculative_policy),
-        flow_graph_(flow_graph),
-        should_clone_fields_(should_clone_fields) {}
+        should_clone_fields_(should_clone_fields),
+        flow_graph_(flow_graph) {}
 
   virtual ~CallSpecializer() {}
 
@@ -111,7 +111,10 @@
   virtual bool TryOptimizeStaticCallUsingStaticTypes(StaticCallInstr* call) = 0;
 
  protected:
+  void InlineImplicitInstanceGetter(Definition* call, const Field& field);
+
   SpeculativeInliningPolicy* speculative_policy_;
+  const bool should_clone_fields_;
 
  private:
   bool TypeCheckAsClassEquality(const AbstractType& type);
@@ -169,7 +172,6 @@
       const AbstractType& type);
 
   FlowGraph* flow_graph_;
-  const bool should_clone_fields_;
 };
 
 }  // namespace dart
diff --git a/runtime/vm/compiler/frontend/flow_graph_builder.cc b/runtime/vm/compiler/frontend/flow_graph_builder.cc
index 0b92e55..1e12eda 100644
--- a/runtime/vm/compiler/frontend/flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/flow_graph_builder.cc
@@ -3318,15 +3318,24 @@
 
   const ParsedFunction& pf = owner_->parsed_function();
   const String& name = String::ZoneHandle(Z, function.native_name());
-  ZoneGrowableArray<PushArgumentInstr*>& args =
-      *new (Z) ZoneGrowableArray<PushArgumentInstr*>(function.NumParameters());
+  const intptr_t num_params = function.NumParameters();
+  ZoneGrowableArray<PushArgumentInstr*>* args = NULL;
+  if (function.IsGeneric() && owner()->isolate()->reify_generic_functions()) {
+    args = new (Z) ZoneGrowableArray<PushArgumentInstr*>(1 + num_params);
+    LocalVariable* type_args = pf.RawTypeArgumentsVariable();
+    ASSERT(type_args != NULL);
+    Value* value = Bind(new (Z) LoadLocalInstr(*type_args, node->token_pos()));
+    args->Add(PushArgument(value));
+  } else {
+    args = new (Z) ZoneGrowableArray<PushArgumentInstr*>(num_params);
+  }
   for (intptr_t i = 0; i < function.NumParameters(); ++i) {
     LocalVariable* parameter = pf.RawParameterVariable(i);
     Value* value = Bind(new (Z) LoadLocalInstr(*parameter, node->token_pos()));
-    args.Add(PushArgument(value));
+    args->Add(PushArgument(value));
   }
   NativeCallInstr* native_call = new (Z) NativeCallInstr(
-      &name, &function, FLAG_link_natives_lazily, node->token_pos(), &args);
+      &name, &function, FLAG_link_natives_lazily, node->token_pos(), args);
   ReturnDefinition(native_call);
 }
 
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 13adddf..9cf6b55 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/frontend/prologue_builder.h"
 #include "vm/compiler/jit/compiler.h"
 #include "vm/longjump.h"
 #include "vm/object_store.h"
@@ -231,6 +232,11 @@
         forwarding_stub_super_target_ = builder_->ReadCanonicalNameReference();
       }
       if (++next_read_ == field) return;
+    case kForwardingStubInterfaceTarget:
+      if (builder_->ReadTag() == kSomething) {
+        builder_->ReadCanonicalNameReference();
+      }
+      if (++next_read_ == field) return;
     case kFunction:
       if (builder_->ReadTag() == kSomething)
         builder_->SkipFunctionNode();  // read function node.
@@ -1422,6 +1428,15 @@
       builder_->SkipConstantReference();
       return;
     }
+    case kInstantiation: {
+      VisitExpression();
+      const intptr_t list_length =
+          builder_->ReadListLength();  // read list length.
+      for (intptr_t i = 0; i < list_length; ++i) {
+        VisitDartType();  // read ith type.
+      }
+      return;
+    }
     default:
       H.ReportError("Unsupported tag at this point: %d.", tag);
       UNREACHABLE();
@@ -3442,7 +3457,8 @@
   }
 }
 
-void StreamingFlowGraphBuilder::ReadUntilFunctionNode(ParsedFunction* set_forwarding_stub) {
+void StreamingFlowGraphBuilder::ReadUntilFunctionNode(
+    ParsedFunction* set_forwarding_stub) {
   const Tag tag = PeekTag();
   if (tag == kProcedure) {
     ProcedureHelper procedure_helper(this);
@@ -3451,8 +3467,8 @@
       // Running a procedure without a function node doesn't make sense.
       UNREACHABLE();
     }
-    if (set_forwarding_stub != NULL && flow_graph_builder_ && procedure_helper.IsForwardingStub() &&
-        !procedure_helper.IsAbstract()) {
+    if (set_forwarding_stub != NULL && flow_graph_builder_ &&
+        procedure_helper.IsForwardingStub() && !procedure_helper.IsAbstract()) {
       ASSERT(procedure_helper.forwarding_stub_super_target_ != -1);
       set_forwarding_stub->MarkForwardingStub(
           procedure_helper.forwarding_stub_super_target_);
@@ -3874,14 +3890,80 @@
   Fragment body(instruction_cursor);
   body += flow_graph_builder_->CheckStackOverflowInPrologue();
 
+  // Forwarding the type parameters is complicated by our approach to
+  // implementing the partial tearoff instantiation.
+  //
+  // When a tearoff is partially applied to a set of type arguments, the type
+  // arguments are saved in the closure's "function_type_arguments" field. The
+  // partial type application operator is guaranteed to provide arguments for
+  // all of a generic tearoff's type parameters, so we will only have to forward
+  // type arguments from the caller or from the closure object. In other words,
+  // if there are type arguments saved on the tearoff, we must throw
+  // NoSuchMethod.
   intptr_t type_args_len = 0;
   if (I->reify_generic_functions() && function.IsGeneric()) {
-    type_args_len = target.NumTypeParameters();
     ASSERT(parsed_function()->function_type_arguments() != NULL);
+    type_args_len = target.NumTypeParameters();
+
+    Fragment copy_type_args;
+
+    LocalVariable* closure =
+        parsed_function()->node_sequence()->scope()->VariableAt(0);
+    copy_type_args += LoadLocal(closure);
+    copy_type_args += LoadField(Closure::function_type_arguments_offset());
+
+    TargetEntryInstr *is_instantiated, *is_not_instantiated;
+    copy_type_args +=
+        BranchIfNull(&is_not_instantiated, &is_instantiated, /*negate=*/false);
+    JoinEntryInstr* join = BuildJoinEntry();
+
+    // We found type arguments saved on the tearoff to be provided to the
+    // function.
+
+    Fragment copy_instantiated_args(is_instantiated);
+
+    copy_instantiated_args +=
+        LoadLocal(parsed_function()->function_type_arguments());
+
+    TargetEntryInstr *no_type_args, *passed_type_args;
+    copy_instantiated_args +=
+        BranchIfNull(&no_type_args, &passed_type_args, /*negate=*/false);
+
+    Fragment use_instantiated_args(no_type_args);
+    use_instantiated_args += LoadLocal(closure);
+    use_instantiated_args +=
+        LoadField(Closure::function_type_arguments_offset());
+    use_instantiated_args += StoreLocal(
+        TokenPosition::kNoSource, parsed_function()->function_type_arguments());
+    use_instantiated_args += Drop();
+    use_instantiated_args += Goto(join);
+
+    Fragment goto_nsm(passed_type_args);
+    goto_nsm += Goto(flow_graph_builder_->BuildThrowNoSuchMethod());
+
+    // The tearoff was not partially applied, so we forward type arguments from
+    // the caller.
+    Fragment forward_caller_args(is_not_instantiated);
+    forward_caller_args += Goto(join);
+
+    body += Fragment(copy_type_args.entry, join);
     body += LoadLocal(parsed_function()->function_type_arguments());
     body += PushArgument();
   }
 
+  FunctionNodeHelper function_node_helper(this);
+  function_node_helper.ReadUntilExcluding(FunctionNodeHelper::kTypeParameters);
+
+  // Tearoffs of static methods needs to perform arguments checks since static
+  // methods they forward to don't do it themselves.
+  if (I->argument_type_checks() && !target.NeedsArgumentTypeChecks(I)) {
+    AlternativeReadingScope _(reader_);
+    body += BuildArgumentTypeChecks();
+  }
+
+  function_node_helper.ReadUntilExcluding(
+      FunctionNodeHelper::kPositionalParameters);
+
   // Load all the arguments.
   if (!target.is_static()) {
     // The context has a fixed shape: a single variable which is the
@@ -3891,10 +3973,6 @@
     body += PushArgument();
   }
 
-  FunctionNodeHelper function_node_helper(this);
-  function_node_helper.ReadUntilExcluding(
-      FunctionNodeHelper::kPositionalParameters);
-
   // Positional.
   intptr_t positional_argument_count = ReadListLength();
   for (intptr_t i = 0; i < positional_argument_count; ++i) {
@@ -3936,6 +4014,105 @@
                 flow_graph_builder_->last_used_block_id_, prologue_info);
 }
 
+Fragment StreamingFlowGraphBuilder::BuildArgumentTypeChecks() {
+  FunctionNodeHelper function_node_helper(this);
+  function_node_helper.SetNext(FunctionNodeHelper::kTypeParameters);
+  const Function& dart_function = parsed_function()->function();
+
+  Fragment body;
+
+  const Function* forwarding_target = NULL;
+  if (parsed_function()->is_forwarding_stub()) {
+    NameIndex target_name = parsed_function()->forwarding_stub_super_target();
+    const String& name = dart_function.IsSetterFunction()
+                             ? H.DartSetterName(target_name)
+                             : H.DartProcedureName(target_name);
+    forwarding_target =
+        &Function::ZoneHandle(Z, LookupMethodByMember(target_name, name));
+    ASSERT(!forwarding_target->IsNull());
+  }
+
+  // Type parameters
+  intptr_t list_length = ReadListLength();
+  TypeArguments& forwarding_params = TypeArguments::Handle(Z);
+  if (forwarding_target != NULL) {
+    forwarding_params = forwarding_target->type_parameters();
+    ASSERT(forwarding_params.Length() == list_length);
+  }
+  TypeParameter& forwarding_param = TypeParameter::Handle(Z);
+  for (intptr_t i = 0; i < list_length; ++i) {
+    ReadFlags();                                         // skip flags
+    SkipListOfExpressions();                             // skip annotations
+    String& name = H.DartSymbol(ReadStringReference());  // read name
+    AbstractType& bound = T.BuildType();                 // read bound
+
+    if (forwarding_target != NULL) {
+      forwarding_param ^= forwarding_params.TypeAt(i);
+      bound = forwarding_param.bound();
+    }
+
+    if (I->strong() && !bound.IsObjectType() &&
+        (I->reify_generic_functions() || dart_function.IsFactory())) {
+      ASSERT(!bound.IsDynamicType());
+      TypeParameter& param = TypeParameter::Handle(Z);
+      if (dart_function.IsFactory()) {
+        param ^= TypeArguments::Handle(
+                     Class::Handle(dart_function.Owner()).type_parameters())
+                     .TypeAt(i);
+      } else {
+        param ^=
+            TypeArguments::Handle(dart_function.type_parameters()).TypeAt(i);
+      }
+      ASSERT(param.IsFinalized());
+      body += CheckTypeArgumentBound(param, bound, name);
+    }
+  }
+
+  function_node_helper.SetJustRead(FunctionNodeHelper::kTypeParameters);
+  function_node_helper.ReadUntilExcluding(
+      FunctionNodeHelper::kPositionalParameters);
+
+  // Positional.
+  list_length = ReadListLength();
+  const intptr_t positional_length = list_length;
+  const intptr_t kFirstParameterOffset = 1;
+  for (intptr_t i = 0; i < list_length; ++i) {
+    // ith variable offset.
+    const intptr_t offset = ReaderOffset();
+    LocalVariable* param = LookupVariable(offset + data_program_offset_);
+    const AbstractType* target_type = &param->type();
+    if (forwarding_target != NULL) {
+      // We add 1 to the parameter index to account for the receiver.
+      target_type = &AbstractType::ZoneHandle(
+          Z, forwarding_target->ParameterTypeAt(kFirstParameterOffset + i));
+    }
+    body += LoadLocal(param);
+    body += CheckArgumentType(param, *target_type);
+    body += Drop();
+    SkipVariableDeclaration();  // read ith variable.
+  }
+
+  // Named.
+  list_length = ReadListLength();
+  for (intptr_t i = 0; i < list_length; ++i) {
+    // ith variable offset.
+    LocalVariable* param =
+        LookupVariable(ReaderOffset() + data_program_offset_);
+    body += LoadLocal(param);
+    const AbstractType* target_type = &param->type();
+    if (forwarding_target != NULL) {
+      // We add 1 to the parameter index to account for the receiver.
+      target_type = &AbstractType::ZoneHandle(
+          Z, forwarding_target->ParameterTypeAt(positional_length + i + 1));
+    }
+    body += CheckArgumentType(param, *target_type);
+    body += Drop();
+    SkipVariableDeclaration();  // read ith variable.
+  }
+
+  return body;
+}
+
 FlowGraph* StreamingFlowGraphBuilder::BuildGraphOfFunction(bool constructor) {
   // The prologue builder needs the default parameter values.
   SetupDefaultParameterValues();
@@ -4100,100 +4277,10 @@
 
   // If we run in checked mode or strong mode, we have to check the type of the
   // passed arguments.
-  if (I->argument_type_checks()) {
+  if (dart_function.NeedsArgumentTypeChecks(I)) {
     AlternativeReadingScope _(reader_);
     SetOffset(type_parameters_offset);
-
-    const Function* forwarding_target = NULL;
-    if (parsed_function()->is_forwarding_stub()) {
-      NameIndex target_name = parsed_function()->forwarding_stub_super_target();
-      const String& name = dart_function.IsSetterFunction()
-                               ? H.DartSetterName(target_name)
-                               : H.DartProcedureName(target_name);
-      forwarding_target =
-          &Function::ZoneHandle(Z, LookupMethodByMember(target_name, name));
-      ASSERT(!forwarding_target->IsNull());
-    }
-
-    // Type parameters
-    intptr_t list_length = ReadListLength();
-    TypeArguments& forwarding_params = TypeArguments::Handle(Z);
-    if (forwarding_target != NULL) {
-        forwarding_params = forwarding_target->type_parameters();
-        ASSERT(forwarding_params.Length() == list_length);
-    }
-    TypeParameter& forwarding_param = TypeParameter::Handle(Z);
-    for (intptr_t i = 0; i < list_length; ++i) {
-      ReadFlags();                                         // skip flags
-      SkipListOfExpressions();                             // skip annotations
-      String& name = H.DartSymbol(ReadStringReference());  // read name
-      AbstractType& bound = T.BuildType();                 // read bound
-
-      if (forwarding_target != NULL) {
-        forwarding_param ^= forwarding_params.TypeAt(i);
-        bound = forwarding_param.bound();
-      }
-
-      if (I->strong() && !bound.IsObjectType() &&
-          (I->reify_generic_functions() || dart_function.IsFactory())) {
-        ASSERT(!bound.IsDynamicType());
-        TypeParameter& param = TypeParameter::Handle(Z);
-        if (dart_function.IsFactory()) {
-          param ^= TypeArguments::Handle(
-                       Class::Handle(dart_function.Owner()).type_parameters())
-                       .TypeAt(i);
-        } else {
-          param ^=
-              TypeArguments::Handle(dart_function.type_parameters()).TypeAt(i);
-        }
-        ASSERT(param.IsFinalized());
-        body += CheckTypeArgumentBound(param, bound, name);
-      }
-    }
-
-    function_node_helper.SetJustRead(FunctionNodeHelper::kTypeParameters);
-    function_node_helper.ReadUntilExcluding(
-        FunctionNodeHelper::kPositionalParameters);
-
-    // Positional.
-    list_length = ReadListLength();
-    const intptr_t positional_length = list_length;
-    const intptr_t kFirstParameterOffset = 1;
-    for (intptr_t i = 0; i < list_length; ++i) {
-      // ith variable offset.
-      const intptr_t offset = ReaderOffset();
-      LocalVariable* param = LookupVariable(offset + data_program_offset_);
-      const AbstractType* target_type = &param->type();
-      if (forwarding_target != NULL) {
-        // We add 1 to the parameter index to account for the receiver.
-        target_type = &AbstractType::ZoneHandle(Z,
-            forwarding_target->ParameterTypeAt(kFirstParameterOffset + i));
-      }
-      body += LoadLocal(param);
-      body += CheckArgumentType(param, *target_type);
-      body += Drop();
-      SkipVariableDeclaration();  // read ith variable.
-    }
-
-    // Named.
-    list_length = ReadListLength();
-    for (intptr_t i = 0; i < list_length; ++i) {
-      // ith variable offset.
-      LocalVariable* param =
-          LookupVariable(ReaderOffset() + data_program_offset_);
-      body += LoadLocal(param);
-      const AbstractType* target_type = &param->type();
-      if (forwarding_target != NULL) {
-        // We add 1 to the parameter index to account for the receiver.
-        target_type = &AbstractType::ZoneHandle(Z,
-            forwarding_target->ParameterTypeAt(positional_length + i + 1));
-      }
-      body += CheckArgumentType(param, *target_type);
-      body += Drop();
-      SkipVariableDeclaration();  // read ith variable.
-    }
-
-    function_node_helper.SetNext(FunctionNodeHelper::kPositionalParameters);
+    body += BuildArgumentTypeChecks();
   }
 
   function_node_helper.ReadUntilExcluding(FunctionNodeHelper::kBody);
@@ -4536,6 +4623,8 @@
       return BuildClosureCreation(position);
     case kConstantExpression:
       return BuildConstantExpression(position);
+    case kInstantiation:
+      return BuildPartialTearoffInstantiation(position);
     default:
       H.ReportError("Unsupported tag at this point: %d.", tag);
       UNREACHABLE();
@@ -5037,6 +5126,10 @@
       SkipVariableDeclaration();  // read variable declaration.
       SkipExpression();           // read expression.
       return;
+    case kInstantiation:
+      SkipExpression();       // read expression.
+      SkipListOfDartTypes();  // read type arguments.
+      return;
     case kVectorCreation:
       ReadUInt();  // read value.
       return;
@@ -7875,6 +7968,67 @@
   return Constant(Object::ZoneHandle(Z, H.constants().At(constant_index)));
 }
 
+Fragment StreamingFlowGraphBuilder::BuildPartialTearoffInstantiation(
+    TokenPosition* position) {
+  if (position != NULL) *position = TokenPosition::kNoSource;
+
+  // Create a copy of the closure.
+
+  Fragment instructions = BuildExpression();
+  LocalVariable* original_closure = MakeTemporary();
+
+  instructions += AllocateObject(
+      TokenPosition::kNoSource,
+      Class::ZoneHandle(Z, I->object_store()->closure_class()), 0);
+  LocalVariable* new_closure = MakeTemporary();
+
+  instructions += LoadLocal(new_closure);
+
+  intptr_t num_type_args = 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()));
+    }
+  }
+  instructions += TranslateInstantiatedTypeArguments(*type_args);
+  instructions += StoreInstanceField(TokenPosition::kNoSource,
+                                     Closure::function_type_arguments_offset());
+
+  // Copy over the target function.
+  instructions += LoadLocal(new_closure);
+  instructions += LoadLocal(original_closure);
+  instructions += LoadField(Closure::function_offset());
+  instructions +=
+      StoreInstanceField(TokenPosition::kNoSource, Closure::function_offset());
+
+  // Copy over the instantiator type arguments.
+  instructions += LoadLocal(new_closure);
+  instructions += LoadLocal(original_closure);
+  instructions += LoadField(Closure::instantiator_type_arguments_offset());
+  instructions += StoreInstanceField(
+      TokenPosition::kNoSource, Closure::instantiator_type_arguments_offset());
+
+  // Copy over the context.
+  instructions += LoadLocal(new_closure);
+  instructions += LoadLocal(original_closure);
+  instructions += LoadField(Closure::context_offset());
+  instructions +=
+      StoreInstanceField(TokenPosition::kNoSource, Closure::context_offset());
+
+  instructions += DropTempsPreserveTop(1);  // drop old closure
+
+  return instructions;
+}
+
 Fragment StreamingFlowGraphBuilder::BuildExpressionStatement() {
   Fragment instructions = BuildExpression();  // read expression.
   instructions += Drop();
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index 96d73be..638f638 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -246,6 +246,7 @@
     kSourceUriIndex,
     kAnnotations,
     kForwardingStubSuperTarget,
+    kForwardingStubInterfaceTarget,
     kFunction,
     kEnd,
   };
@@ -1101,6 +1102,7 @@
                         const Function& interface_target,
                         intptr_t argument_check_bits = 0,
                         intptr_t type_argument_check_bits = 0);
+  Fragment BuildArgumentTypeChecks();
   Fragment ThrowException(TokenPosition position);
   Fragment BooleanNegate();
   Fragment TranslateInstantiatedTypeArguments(
@@ -1228,6 +1230,7 @@
   Fragment BuildVectorCopy(TokenPosition* position);
   Fragment BuildClosureCreation(TokenPosition* position);
   Fragment BuildConstantExpression(TokenPosition* position);
+  Fragment BuildPartialTearoffInstantiation(TokenPosition* position);
 
   Fragment BuildExpressionStatement();
   Fragment BuildBlock();
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 9e776f9..cc5a679 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -1397,7 +1397,12 @@
 Fragment FlowGraphBuilder::NativeCall(const String* name,
                                       const Function* function) {
   InlineBailout("kernel::FlowGraphBuilder::NativeCall");
-  ArgumentArray arguments = GetArguments(function->NumParameters());
+  const intptr_t num_args =
+      function->NumParameters() +
+      ((function->IsGeneric() && Isolate::Current()->reify_generic_functions())
+           ? 1
+           : 0);
+  ArgumentArray arguments = GetArguments(num_args);
   NativeCallInstr* call =
       new (Z) NativeCallInstr(name, function, FLAG_link_natives_lazily,
                               TokenPosition::kNoSource, arguments);
@@ -2015,6 +2020,11 @@
       break;
     default: {
       String& name = String::ZoneHandle(Z, function.native_name());
+      if (function.IsGeneric() &&
+          Isolate::Current()->reify_generic_functions()) {
+        body += LoadLocal(parsed_function_->RawTypeArgumentsVariable());
+        body += PushArgument();
+      }
       for (intptr_t i = 0; i < function.NumParameters(); ++i) {
         body += LoadLocal(parsed_function_->RawParameterVariable(i));
         body += PushArgument();
@@ -2544,6 +2554,18 @@
   return Fragment(instr);
 }
 
+JoinEntryInstr* BaseFlowGraphBuilder::BuildThrowNoSuchMethod() {
+  JoinEntryInstr* nsm = BuildJoinEntry();
+
+  Fragment failing(nsm);
+  const Code& nsm_handler =
+      Code::ZoneHandle(StubCode::CallClosureNoSuchMethod_entry()->code());
+  failing += LoadArgDescriptor();
+  failing += TailCall(nsm_handler);
+
+  return nsm;
+}
+
 RawObject* EvaluateMetadata(const Field& metadata_field) {
   LongJumpScope jump;
   if (setjmp(*jump.Set()) == 0) {
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.h b/runtime/vm/compiler/frontend/kernel_to_il.h
index 10d4733..167e13b 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.h
+++ b/runtime/vm/compiler/frontend/kernel_to_il.h
@@ -598,6 +598,13 @@
 
   intptr_t AllocateTryIndex() { return next_used_try_index_++; }
 
+  Fragment LoadArgDescriptor() {
+    ASSERT(parsed_function_->has_arg_desc_var());
+    return LoadLocal(parsed_function_->arg_desc_var());
+  }
+
+  JoinEntryInstr* BuildThrowNoSuchMethod();
+
  protected:
   intptr_t AllocateBlockId() { return ++last_used_block_id_; }
   intptr_t CurrentTryIndex();
diff --git a/runtime/vm/compiler/frontend/prologue_builder.cc b/runtime/vm/compiler/frontend/prologue_builder.cc
index b467adf..3fa4854 100644
--- a/runtime/vm/compiler/frontend/prologue_builder.cc
+++ b/runtime/vm/compiler/frontend/prologue_builder.cc
@@ -78,18 +78,6 @@
   }
 }
 
-JoinEntryInstr* PrologueBuilder::BuildThrowNoSuchMethod() {
-  JoinEntryInstr* nsm = BuildJoinEntry();
-
-  Fragment failing(nsm);
-  const Code& nsm_handler =
-      Code::ZoneHandle(StubCode::CallClosureNoSuchMethod_entry()->code());
-  failing += LoadArgDescriptor();
-  failing += TailCall(nsm_handler);
-
-  return nsm;
-}
-
 Fragment PrologueBuilder::BuildTypeArgumentsLengthCheck(bool strong,
                                                         JoinEntryInstr* nsm,
                                                         bool expect_type_args) {
diff --git a/runtime/vm/compiler/frontend/prologue_builder.h b/runtime/vm/compiler/frontend/prologue_builder.h
index a77767e..5e89638 100644
--- a/runtime/vm/compiler/frontend/prologue_builder.h
+++ b/runtime/vm/compiler/frontend/prologue_builder.h
@@ -50,8 +50,6 @@
   intptr_t last_used_block_id() const { return last_used_block_id_; }
 
  private:
-  JoinEntryInstr* BuildThrowNoSuchMethod();
-
   Fragment BuildTypeArgumentsLengthCheck(bool strong,
                                          JoinEntryInstr* nsm,
                                          bool expect_type_args);
@@ -68,11 +66,6 @@
     return parsed_function_->RawParameterVariable(index);
   }
 
-  Fragment LoadArgDescriptor() {
-    ASSERT(parsed_function_->has_arg_desc_var());
-    return LoadLocal(parsed_function_->arg_desc_var());
-  }
-
   const Instance& DefaultParameterValueAt(intptr_t i) {
     if (parsed_function_->default_parameter_values() != NULL) {
       return parsed_function_->DefaultParameterValueAt(i);
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 7043b36..2fde805 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -9079,17 +9079,18 @@
   EXPECT(Dart_IsError(result));
 }
 
-void NotifyIdleNative(Dart_NativeArguments args) {
+void NotifyIdleShortNative(Dart_NativeArguments args) {
   Dart_NotifyIdle(Dart_TimelineGetMicros() + 10 * kMicrosecondsPerMillisecond);
 }
 
-static Dart_NativeFunction NotifyIdle_native_lookup(Dart_Handle name,
-                                                    int argument_count,
-                                                    bool* auto_setup_scope) {
-  return reinterpret_cast<Dart_NativeFunction>(&NotifyIdleNative);
+static Dart_NativeFunction NotifyIdleShort_native_lookup(
+    Dart_Handle name,
+    int argument_count,
+    bool* auto_setup_scope) {
+  return reinterpret_cast<Dart_NativeFunction>(&NotifyIdleShortNative);
 }
 
-TEST_CASE(DartAPI_NotifyIdle) {
+TEST_CASE(DartAPI_NotifyIdleShort) {
   const char* kScriptChars =
       "void notifyIdle() native 'Test_nativeFunc';\n"
       "void main() {\n"
@@ -9104,7 +9105,38 @@
       "  }\n"
       "}\n";
   Dart_Handle lib =
-      TestCase::LoadTestScript(kScriptChars, &NotifyIdle_native_lookup);
+      TestCase::LoadTestScript(kScriptChars, &NotifyIdleShort_native_lookup);
+  Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
+  EXPECT_VALID(result);
+}
+
+void NotifyIdleLongNative(Dart_NativeArguments args) {
+  Dart_NotifyIdle(Dart_TimelineGetMicros() + 100 * kMicrosecondsPerMillisecond);
+}
+
+static Dart_NativeFunction NotifyIdleLong_native_lookup(
+    Dart_Handle name,
+    int argument_count,
+    bool* auto_setup_scope) {
+  return reinterpret_cast<Dart_NativeFunction>(&NotifyIdleLongNative);
+}
+
+TEST_CASE(DartAPI_NotifyIdleLong) {
+  const char* kScriptChars =
+      "void notifyIdle() native 'Test_nativeFunc';\n"
+      "void main() {\n"
+      "  var v;\n"
+      "  for (var i = 0; i < 100; i++) {\n"
+      "    var t = new List();\n"
+      "    for (var j = 0; j < 10000; j++) {\n"
+      "      t.add(new List(100));\n"
+      "    }\n"
+      "    v = t;\n"
+      "    notifyIdle();\n"
+      "  }\n"
+      "}\n";
+  Dart_Handle lib =
+      TestCase::LoadTestScript(kScriptChars, &NotifyIdleLong_native_lookup);
   Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
   EXPECT_VALID(result);
 }
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index 5fab765..6129213 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -112,11 +112,6 @@
   Zone* zone = thread->zone();
   ASSERT(thread->IsMutatorThread());
   ScopedIsolateStackLimits stack_limit(thread, current_sp);
-  if (ArgumentsDescriptor(arguments_descriptor).TypeArgsLen() > 0) {
-    const String& message = String::Handle(String::New(
-        "Unsupported invocation of Dart generic function with type arguments"));
-    return ApiError::New(message);
-  }
   if (!function.HasCode()) {
     const Object& result =
         Object::Handle(zone, Compiler::CompileFunction(thread, function));
diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
index 5fe75f3..7299746 100644
--- a/runtime/vm/heap.cc
+++ b/runtime/vm/heap.cc
@@ -359,7 +359,10 @@
   // Because we use a deadline instead of a timeout, we automatically take any
   // time used up by a scavenge into account when deciding if we can complete
   // a mark-sweep on time.
-  if (old_space_.ShouldPerformIdleMarkSweep(deadline)) {
+  if (old_space_.ShouldPerformIdleMarkCompact(deadline)) {
+    TIMELINE_FUNCTION_GC_DURATION(thread, "IdleGC");
+    CollectOldSpaceGarbage(thread, kCompaction);
+  } else if (old_space_.ShouldPerformIdleMarkSweep(deadline)) {
     TIMELINE_FUNCTION_GC_DURATION(thread, "IdleGC");
     CollectOldSpaceGarbage(thread, kIdle);
   }
@@ -628,7 +631,7 @@
     case kOldSpace:
       return "old space";
     case kCompaction:
-      return "compaction";
+      return "compact";
     case kFull:
       return "full";
     case kIdle:
diff --git a/runtime/vm/instructions_arm64.cc b/runtime/vm/instructions_arm64.cc
index 8ac564f..bfa0a76 100644
--- a/runtime/vm/instructions_arm64.cc
+++ b/runtime/vm/instructions_arm64.cc
@@ -69,10 +69,6 @@
                              reinterpret_cast<uword>(func));
 }
 
-intptr_t InstructionPattern::OffsetFromPPIndex(intptr_t index) {
-  return Array::element_offset(index);
-}
-
 // Decodes a load sequence ending at 'end' (the last instruction of the load
 // sequence is the instruction before the one at end).  Returns a pointer to
 // the first instruction in the sequence.  Returns the register being loaded
diff --git a/runtime/vm/instructions_arm64.h b/runtime/vm/instructions_arm64.h
index f352e88..10c74f5 100644
--- a/runtime/vm/instructions_arm64.h
+++ b/runtime/vm/instructions_arm64.h
@@ -50,8 +50,6 @@
   // instruction load from the pool pointer in PP using the destination
   // register reg as a temporary for the base address.
   static void EncodeLoadWordFromPoolFixed(uword end, int32_t offset);
-
-  static intptr_t OffsetFromPPIndex(intptr_t index);
 };
 
 class CallPattern : public ValueObject {
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 42dffff..b755770 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -788,6 +788,7 @@
 #undef INIT_FROM_FLAG
   api_flags->use_dart_frontend = false;
   api_flags->entry_points = NULL;
+  api_flags->load_vmservice_library = false;
 }
 
 void Isolate::FlagsCopyTo(Dart_IsolateFlags* api_flags) const {
@@ -798,6 +799,7 @@
 #undef INIT_FROM_FIELD
   api_flags->use_dart_frontend = use_dart_frontend();
   api_flags->entry_points = NULL;
+  api_flags->load_vmservice_library = should_load_vmservice();
 }
 
 void Isolate::FlagsCopyFrom(const Dart_IsolateFlags& api_flags) {
@@ -824,6 +826,7 @@
 #undef SET_FROM_FLAG
 
   set_use_dart_frontend(api_flags.use_dart_frontend);
+  set_should_load_vmservice(api_flags.load_vmservice_library);
 
   // Copy entry points list.
   ASSERT(embedder_entry_points_ == NULL);
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 4016ff9..6a569bc 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -680,6 +680,13 @@
     isolate_flags_ = IsServiceIsolateBit::update(value, isolate_flags_);
   }
 
+  bool should_load_vmservice() const {
+    return ShouldLoadVmServiceBit::decode(isolate_flags_);
+  }
+  void set_should_load_vmservice(bool value) {
+    isolate_flags_ = ShouldLoadVmServiceBit::update(value, isolate_flags_);
+  }
+
   Dart_QualifiedFunctionName* embedder_entry_points() const {
     return embedder_entry_points_;
   }
@@ -841,7 +848,8 @@
   V(UseFieldGuards)                                                            \
   V(UseOsr)                                                                    \
   V(Obfuscate)                                                                 \
-  V(CompactionInProgress)
+  V(CompactionInProgress)                                                      \
+  V(ShouldLoadVmService)
 
   // Isolate specific flags.
   enum FlagBits {
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 5ebbd9e..1375924 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -532,9 +532,11 @@
   const String& root_lib_url =
       (root_script_url == NULL) ? old_root_lib_url
                                 : String::Handle(String::New(root_script_url));
+  bool root_lib_modified = false;
 
   // Check to see if the base url of the loaded libraries has moved.
   if (!old_root_lib_url.Equals(root_lib_url)) {
+    root_lib_modified = true;
     const char* old_root_library_url_c = old_root_lib_url.ToCString();
     const char* root_library_url_c = root_lib_url.ToCString();
     const intptr_t common_suffix_length =
@@ -595,7 +597,7 @@
     TIR_Print("---- EXITED TAG HANDLER\n");
   } else {
     // Check to see which libraries have been modified.
-    modified_libs_ = FindModifiedLibraries(force_reload);
+    modified_libs_ = FindModifiedLibraries(force_reload, root_lib_modified);
   }
   if (!modified_libs_->Contains(old_root_lib.index())) {
     ASSERT(modified_libs_->IsEmpty());
@@ -928,7 +930,8 @@
   }
 }
 
-BitVector* IsolateReloadContext::FindModifiedLibraries(bool force_reload) {
+BitVector* IsolateReloadContext::FindModifiedLibraries(bool force_reload,
+                                                       bool root_lib_modified) {
   Thread* thread = Thread::Current();
   int64_t last_reload = I->last_reload_timestamp();
 
@@ -1001,6 +1004,13 @@
 
   BitVector* modified_libs = new (Z) BitVector(Z, num_libs);
 
+  if (root_lib_modified) {
+    // The root library was either moved or replaced. Mark it as modified to
+    // force a reload of the potential root library replacement.
+    lib ^= object_store()->root_library();
+    modified_libs->Add(lib.index());
+  }
+
   for (intptr_t lib_idx = 0; lib_idx < num_libs; lib_idx++) {
     lib ^= libs.At(lib_idx);
     if (lib.is_dart_scheme() || modified_libs->Contains(lib_idx)) {
diff --git a/runtime/vm/isolate_reload.h b/runtime/vm/isolate_reload.h
index b2180ea..a8e860d 100644
--- a/runtime/vm/isolate_reload.h
+++ b/runtime/vm/isolate_reload.h
@@ -231,7 +231,7 @@
   void CheckpointClasses();
 
   bool ScriptModifiedSince(const Script& script, int64_t since);
-  BitVector* FindModifiedLibraries(bool force_reload);
+  BitVector* FindModifiedLibraries(bool force_reload, bool root_lib_modified);
 
   void CheckpointLibraries();
 
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 5d8388c..10c8a24 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -163,7 +163,6 @@
       thread_(Thread::Current()),
       zone_(thread_->zone()),
       isolate_(thread_->isolate()),
-      is_service_isolate_(ServiceIsolate::NameEquals(I->name())),
       patch_classes_(Array::ZoneHandle(zone_)),
       library_kernel_offset_(-1),  // Set to the correct value in LoadLibrary
       correction_offset_(-1),      // Set to the correct value in LoadLibrary
@@ -582,7 +581,7 @@
 
   LibraryHelper library_helper(&builder_);
   library_helper.ReadUntilIncluding(LibraryHelper::kCanonicalName);
-  if (!is_service_isolate_ && !FLAG_precompiled_mode) {
+  if (!FLAG_precompiled_mode && !I->should_load_vmservice()) {
     StringIndex lib_name_index =
         H.CanonicalNameString(library_helper.canonical_name_);
     if (H.StringEquals(lib_name_index, kVMServiceIOLibraryUri)) {
diff --git a/runtime/vm/kernel_loader.h b/runtime/vm/kernel_loader.h
index d49b2d9..5acf8fd 100644
--- a/runtime/vm/kernel_loader.h
+++ b/runtime/vm/kernel_loader.h
@@ -257,7 +257,6 @@
   Thread* thread_;
   Zone* zone_;
   Isolate* isolate_;
-  bool is_service_isolate_;
   Array& patch_classes_;
   ActiveClass active_class_;
   // This is the offset of the current library within
diff --git a/runtime/vm/native_arguments.h b/runtime/vm/native_arguments.h
index a083201..f7151e3 100644
--- a/runtime/vm/native_arguments.h
+++ b/runtime/vm/native_arguments.h
@@ -77,8 +77,11 @@
 // following signature:
 //   void function_name(NativeArguments arguments);
 // Inside the function, arguments are accessed as follows:
-//   const Instance& arg0 = Instance::CheckedHandle(arguments.ArgAt(0));
-//   const Smi& arg1 = Smi::CheckedHandle(arguments.ArgAt(1));
+//   const Instance& arg0 = Instance::CheckedHandle(arguments.NativeArgAt(0));
+//   const Smi& arg1 = Smi::CheckedHandle(arguments.NativeArgAt(1));
+// If the function is generic, type arguments are accessed as follows:
+//   const TypeArguments& type_args =
+//       TypeArguments::Handle(arguments.NativeTypeArgs());
 // The return value is set as follows:
 //   arguments.SetReturn(result);
 // NOTE: Since we pass 'this' as a pass-by-value argument in the stubs we don't
@@ -87,6 +90,8 @@
 class NativeArguments {
  public:
   Thread* thread() const { return thread_; }
+
+  // Includes type arguments vector.
   int ArgCount() const { return ArgcBits::decode(argc_tag_); }
 
   RawObject* ArgAt(int index) const {
@@ -103,6 +108,7 @@
     return *arg_ptr;
   }
 
+  // Does not include hidden type arguments vector.
   int NativeArgCount() const {
     int function_bits = FunctionBits::decode(argc_tag_);
     return ArgCount() - NumHiddenArgs(function_bits);
@@ -110,9 +116,11 @@
 
   RawObject* NativeArg0() const {
     int function_bits = FunctionBits::decode(argc_tag_);
-    if (function_bits == (kClosureFunctionBit | kInstanceFunctionBit)) {
+    if ((function_bits & (kClosureFunctionBit | kInstanceFunctionBit)) ==
+        (kClosureFunctionBit | kInstanceFunctionBit)) {
       // Retrieve the receiver from the context.
-      const Object& closure = Object::Handle(ArgAt(0));
+      const int closure_index = (function_bits & kGenericFunctionBit) ? 1 : 0;
+      const Object& closure = Object::Handle(ArgAt(closure_index));
       const Context& context =
           Context::Handle(Closure::Cast(closure).context());
       return context.At(0);
@@ -130,6 +138,11 @@
     return ArgAt(actual_index);
   }
 
+  RawTypeArguments* NativeTypeArgs() {
+    ASSERT(ToGenericFunction());
+    return TypeArguments::RawCast(ArgAt(0));
+  }
+
   void SetReturn(const Object& value) const { *retval_ = value.raw(); }
 
   RawObject* ReturnValue() const {
@@ -166,7 +179,7 @@
   static int ComputeArgcTag(const Function& function) {
     ASSERT(function.is_native());
     ASSERT(!function.IsGenerativeConstructor());  // Not supported.
-    int tag = ArgcBits::encode(function.NumParameters());
+    int argc = function.NumParameters();
     int function_bits = 0;
     if (!function.is_static()) {
       function_bits |= kInstanceFunctionBit;
@@ -174,6 +187,11 @@
     if (function.IsClosureFunction()) {
       function_bits |= kClosureFunctionBit;
     }
+    if (function.IsGeneric() && Isolate::Current()->reify_generic_functions()) {
+      function_bits |= kGenericFunctionBit;
+      argc++;
+    }
+    int tag = ArgcBits::encode(argc);
     tag = FunctionBits::update(function_bits, tag);
     return tag;
   }
@@ -182,12 +200,13 @@
   enum {
     kInstanceFunctionBit = 1,
     kClosureFunctionBit = 2,
+    kGenericFunctionBit = 4,
   };
   enum ArgcTagBits {
     kArgcBit = 0,
     kArgcSize = 24,
     kFunctionBit = 24,
-    kFunctionSize = 2,
+    kFunctionSize = 3,
   };
   class ArgcBits : public BitField<intptr_t, int32_t, kArgcBit, kArgcSize> {};
   class FunctionBits
@@ -221,15 +240,24 @@
     return (FunctionBits::decode(argc_tag_) & kClosureFunctionBit);
   }
 
+  // Returns true if the arguments are those of a generic function call.
+  bool ToGenericFunction() const {
+    return (FunctionBits::decode(argc_tag_) & kGenericFunctionBit);
+  }
+
   int NumHiddenArgs(int function_bits) const {
+    int num_hidden_args = 0;
     // For static closure functions, the closure at index 0 is hidden.
     // In the instance closure function case, the receiver is accessed from
     // the context and the closure at index 0 is hidden, so the apparent
     // argument count remains unchanged.
-    if (function_bits == kClosureFunctionBit) {
-      return 1;
+    if ((function_bits & kClosureFunctionBit) == kClosureFunctionBit) {
+      num_hidden_args++;
     }
-    return 0;
+    if ((function_bits & kGenericFunctionBit) == kGenericFunctionBit) {
+      num_hidden_args++;
+    }
+    return num_hidden_args;
   }
 
   Thread* thread_;      // Current thread pointer.
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index c8344d0..3264ed9 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -5585,22 +5585,24 @@
 }
 
 RawField* Function::LookupImplicitGetterSetterField() const {
-  ASSERT((kind() == RawFunction::kImplicitGetter) ||
-         (kind() == RawFunction::kImplicitSetter) ||
-         (kind() == RawFunction::kImplicitStaticFinalGetter));
-  const Class& owner = Class::Handle(Owner());
-  ASSERT(!owner.IsNull());
-  const Array& fields = Array::Handle(owner.fields());
-  ASSERT(!fields.IsNull());
-  Field& field = Field::Handle();
-  for (intptr_t i = 0; i < fields.Length(); i++) {
-    field ^= fields.At(i);
-    ASSERT(!field.IsNull());
-    if (field.token_pos() == token_pos()) {
-      return field.raw();
-    }
+  // TODO(27590) Store Field object inside RawFunction::data_ if possible.
+  Zone* Z = Thread::Current()->zone();
+  String& field_name = String::Handle(Z, name());
+  switch (kind()) {
+    case RawFunction::kImplicitGetter:
+    case RawFunction::kImplicitStaticFinalGetter:
+      field_name = Field::NameFromGetter(field_name);
+      break;
+    case RawFunction::kImplicitSetter:
+      field_name = Field::NameFromSetter(field_name);
+      break;
+    default:
+      UNREACHABLE();
   }
-  return Field::null();
+  ASSERT(field_name.IsSymbol());
+  const Class& owner = Class::Handle(Z, Owner());
+  ASSERT(!owner.IsNull());
+  return owner.LookupField(field_name);
 }
 
 RawFunction* Function::parent_function() const {
@@ -6531,25 +6533,34 @@
   // Note that parent pointers in newly instantiated signatures still points to
   // the original uninstantiated parent signatures. That is not a problem.
   const Function& parent = Function::Handle(zone, parent_function());
-  ASSERT(!HasInstantiatedSignature(kAny, num_free_fun_type_params));
 
-  // A generic typedef may declare a non-generic function type and get
-  // instantiated with unrelated function type parameters. In that case, its
-  // signature is still uninstantiated, because these type parameters are
-  // free (they are not declared by the typedef).
-  // For that reason, we only adjust num_free_fun_type_params if this
-  // signature is generic or has a generic parent.
-  if (IsGeneric() || HasGenericParent()) {
-    // We only consider the function type parameters declared by the parents
-    // of this signature function as free.
-    const int num_parent_type_params = NumParentTypeParameters();
-    if (num_parent_type_params < num_free_fun_type_params) {
-      num_free_fun_type_params = num_parent_type_params;
+  // See the comment on kCurrentAndEnclosingFree to understand why we don't
+  // adjust 'num_free_fun_type_params' downward in this case.
+  bool delete_type_parameters = false;
+  if (num_free_fun_type_params == kCurrentAndEnclosingFree) {
+    num_free_fun_type_params = kAllFree;
+    delete_type_parameters = true;
+  } else {
+    ASSERT(!HasInstantiatedSignature(kAny, num_free_fun_type_params));
+
+    // A generic typedef may declare a non-generic function type and get
+    // instantiated with unrelated function type parameters. In that case, its
+    // signature is still uninstantiated, because these type parameters are
+    // free (they are not declared by the typedef).
+    // For that reason, we only adjust num_free_fun_type_params if this
+    // signature is generic or has a generic parent.
+    if (IsGeneric() || HasGenericParent()) {
+      // We only consider the function type parameters declared by the parents
+      // of this signature function as free.
+      const int num_parent_type_params = NumParentTypeParameters();
+      if (num_parent_type_params < num_free_fun_type_params) {
+        num_free_fun_type_params = num_parent_type_params;
+      }
     }
   }
 
   Function& sig = Function::Handle(zone, Function::null());
-  if (IsConvertedClosureFunction()) {
+  if (IsConvertedClosureFunction() && !delete_type_parameters) {
     sig = Function::NewConvertedClosureFunction(
         String::Handle(zone, name()), parent, TokenPosition::kNoSource);
     // TODO(30455): Kernel generic methods undone. Handle type parameters
@@ -6560,7 +6571,9 @@
   } else {
     sig = Function::NewSignatureFunction(owner, parent,
                                          TokenPosition::kNoSource, space);
-    sig.set_type_parameters(TypeArguments::Handle(zone, type_parameters()));
+    if (!delete_type_parameters) {
+      sig.set_type_parameters(TypeArguments::Handle(zone, type_parameters()));
+    }
   }
 
   AbstractType& type = AbstractType::Handle(zone, result_type());
@@ -6585,6 +6598,10 @@
     sig.SetParameterTypeAt(i, type);
   }
   sig.set_parameter_names(Array::Handle(zone, parameter_names()));
+
+  if (delete_type_parameters) {
+    ASSERT(sig.HasInstantiatedSignature(kFunctions));
+  }
   return sig.raw();
 }
 
@@ -7474,7 +7491,9 @@
     return genericity == kCurrentClass || NumTypeParameters() == 0;
   }
 
-  if (genericity != kCurrentClass) {
+  if (num_free_fun_type_params == kCurrentAndEnclosingFree) {
+    num_free_fun_type_params = kAllFree;
+  } else if (genericity != kCurrentClass) {
     // A generic typedef may declare a non-generic function type and get
     // instantiated with unrelated function type parameters. In that case, its
     // signature is still uninstantiated, because these type parameters are
@@ -15699,18 +15718,12 @@
   }
   const Class& cls = Class::Handle(clazz());
   if (cls.IsClosureClass()) {
-    const Function& signature =
-        Function::Handle(Closure::Cast(*this).function());
+    Function& signature =
+        Function::Handle(Closure::Cast(*this).GetInstantiatedSignature(
+            Thread::Current()->zone()));
     Type& type = Type::Handle(signature.SignatureType());
-    if (!type.IsInstantiated()) {
-      const TypeArguments& instantiator_type_arguments = TypeArguments::Handle(
-          Closure::Cast(*this).instantiator_type_arguments());
-      const TypeArguments& function_type_arguments =
-          TypeArguments::Handle(Closure::Cast(*this).function_type_arguments());
-      // No bound error possible, since the instance exists.
-      type ^= type.InstantiateFrom(instantiator_type_arguments,
-                                   function_type_arguments, kAllFree, NULL,
-                                   NULL, NULL, space);
+    if (!type.IsFinalized()) {
+      type.SetIsFinalized();
     }
     type ^= type.Canonicalize();
     return type.raw();
@@ -15797,16 +15810,8 @@
     }
     Function& other_signature =
         Function::Handle(zone, Type::Cast(instantiated_other).signature());
-    Function& sig_fun = Function::Handle(zone, Closure::Cast(*this).function());
-    if (!sig_fun.HasInstantiatedSignature()) {
-      const TypeArguments& instantiator_type_arguments = TypeArguments::Handle(
-          zone, Closure::Cast(*this).instantiator_type_arguments());
-      const TypeArguments& function_type_arguments = TypeArguments::Handle(
-          zone, Closure::Cast(*this).function_type_arguments());
-      sig_fun = sig_fun.InstantiateSignatureFrom(instantiator_type_arguments,
-                                                 function_type_arguments,
-                                                 kAllFree, Heap::kOld);
-    }
+    const Function& sig_fun =
+        Function::Handle(Closure::Cast(*this).GetInstantiatedSignature(zone));
     return sig_fun.IsSubtypeOf(other_signature, bound_error, NULL, Heap::kOld);
   }
   TypeArguments& type_arguments = TypeArguments::Handle(zone);
@@ -22435,6 +22440,26 @@
   return reinterpret_cast<RawClosure*>(raw);
 }
 
+RawFunction* Closure::GetInstantiatedSignature(Zone* zone) const {
+  Function& sig_fun = Function::Handle(zone, function());
+  const TypeArguments& fn_type_args =
+      TypeArguments::Handle(zone, function_type_arguments());
+  const TypeArguments& inst_type_args =
+      TypeArguments::Handle(zone, instantiator_type_arguments());
+  // We detect the case of a partial tearoff type application and substitute the
+  // type arguments for the type parameters of the function.
+  intptr_t num_free_params =
+      sig_fun.IsImplicitClosureFunction() && !fn_type_args.IsNull()
+          ? kCurrentAndEnclosingFree
+          : kAllFree;
+  if (num_free_params == kCurrentAndEnclosingFree ||
+      !sig_fun.HasInstantiatedSignature(kAny)) {
+    return sig_fun.InstantiateSignatureFrom(inst_type_args, fn_type_args,
+                                            num_free_params, Heap::kOld);
+  }
+  return sig_fun.raw();
+}
+
 intptr_t StackTrace::Length() const {
   const Array& code_array = Array::Handle(raw_ptr()->code_array_);
   return code_array.Length();
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 235b297..32d073e 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -2053,6 +2053,19 @@
 // Often used constants for number of free function type parameters.
 enum {
   kNoneFree = 0,
+
+  // 'kCurrentAndEnclosingFree' is used when partially applying a signature
+  // function to a set of type arguments. It indicates that the set of type
+  // parameters declared by the current function and enclosing functions should
+  // be considered free, and the current function type parameters should be
+  // substituted as well.
+  //
+  // For instance, if the signature "<T>(T, R) => T" is instantiated with
+  // function type arguments [int, String] and kCurrentAndEnclosingFree is
+  // supplied, the result of the instantiation will be "(String, int) => int".
+  kCurrentAndEnclosingFree = kMaxInt32 - 1,
+
+  // Only parameters declared by enclosing functions are free.
   kAllFree = kMaxInt32,
 };
 
@@ -2375,6 +2388,12 @@
   }
   bool IsInFactoryScope() const;
 
+  bool NeedsArgumentTypeChecks(Isolate* I) const {
+    return (I->strong() &&
+            (!is_static() || kind() == RawFunction::kConstructor)) ||
+           I->type_checks();
+  }
+
   TokenPosition token_pos() const {
 #if defined(DART_PRECOMPILED_RUNTIME)
     return TokenPosition();
@@ -8646,6 +8665,8 @@
                          const Context& context,
                          Heap::Space space = Heap::kNew);
 
+  RawFunction* GetInstantiatedSignature(Zone* zone) const;
+
  private:
   static RawClosure* New();
 
diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc
index 4fce257..62e072a 100644
--- a/runtime/vm/pages.cc
+++ b/runtime/vm/pages.cc
@@ -163,7 +163,7 @@
 // before / mark-sweep time). This is a conservative value observed running
 // Flutter on a Nexus 4. After the first mark-sweep, we instead use a value
 // based on the device's actual speed.
-static const intptr_t kConservativeInitialMarkSweepSpeed = 20;
+static const intptr_t kConservativeInitialMarkSpeed = 20;
 
 PageSpace::PageSpace(Heap* heap,
                      intptr_t max_capacity_in_words,
@@ -192,7 +192,7 @@
                              FLAG_old_gen_growth_time_ratio),
       gc_time_micros_(0),
       collections_(0),
-      mark_sweep_words_per_micro_(kConservativeInitialMarkSweepSpeed) {
+      mark_words_per_micro_(kConservativeInitialMarkSpeed) {
   // We aren't holding the lock but no one can reference us yet.
   UpdateMaxCapacityLocked();
   UpdateMaxUsed();
@@ -839,7 +839,7 @@
 }
 
 bool PageSpace::ShouldPerformIdleMarkSweep(int64_t deadline) {
-  // To make a consistent decision, we should not yeild for a safepoint in the
+  // To make a consistent decision, we should not yield for a safepoint in the
   // middle of deciding whether to perform an idle GC.
   NoSafepointScope no_safepoint;
 
@@ -852,17 +852,56 @@
     if (tasks() > 0) {
       // A concurrent sweeper is running. If we start a mark sweep now
       // we'll have to wait for it, and this wait time is not included in
-      // mark_sweep_words_per_micro_.
+      // mark_words_per_micro_.
       return false;
     }
   }
 
   int64_t estimated_mark_completion =
-      OS::GetCurrentMonotonicMicros() +
-      UsedInWords() / mark_sweep_words_per_micro_;
+      OS::GetCurrentMonotonicMicros() + UsedInWords() / mark_words_per_micro_;
   return estimated_mark_completion <= deadline;
 }
 
+bool PageSpace::ShouldPerformIdleMarkCompact(int64_t deadline) {
+  // To make a consistent decision, we should not yield for a safepoint in the
+  // middle of deciding whether to perform an idle GC.
+  NoSafepointScope no_safepoint;
+
+  // Discount two pages to account for the newest data and code pages, whose
+  // partial use doesn't indicate fragmentation.
+  const intptr_t excess_in_words =
+      usage_.capacity_in_words - usage_.used_in_words - 2 * kPageSizeInWords;
+  const double excess_ratio = static_cast<double>(excess_in_words) /
+                              static_cast<double>(usage_.capacity_in_words);
+  const bool fragmented = excess_ratio > 0.05;
+
+  if (!fragmented &&
+      !page_space_controller_.NeedsIdleGarbageCollection(usage_)) {
+    return false;
+  }
+
+  {
+    MonitorLocker locker(tasks_lock());
+    if (tasks() > 0) {
+      // A concurrent sweeper is running. If we start a mark sweep now
+      // we'll have to wait for it, and this wait time is not included in
+      // mark_words_per_micro_.
+      return false;
+    }
+  }
+
+  // Assuming compaction takes as long as marking.
+  intptr_t mark_compact_words_per_micro = mark_words_per_micro_ / 2;
+  if (mark_compact_words_per_micro == 0) {
+    mark_compact_words_per_micro = 1;  // Prevent division by zero.
+  }
+
+  int64_t estimated_mark_compact_completion =
+      OS::GetCurrentMonotonicMicros() +
+      UsedInWords() / mark_compact_words_per_micro;
+  return estimated_mark_compact_completion <= deadline;
+}
+
 void PageSpace::CollectGarbage(bool compact) {
   Thread* thread = Thread::Current();
   Isolate* isolate = heap_->isolate();
@@ -1001,14 +1040,13 @@
     page_space_controller_.EvaluateGarbageCollection(
         usage_before, GetCurrentUsage(), start, end);
 
-    int64_t mark_sweep_micros = end - start;
-    if (mark_sweep_micros == 0) {
-      mark_sweep_micros = 1;
+    int64_t mark_micros = mid3 - start;
+    if (mark_micros == 0) {
+      mark_micros = 1;  // Prevent division by zero.
     }
-    mark_sweep_words_per_micro_ =
-        usage_before.used_in_words / mark_sweep_micros;
-    if (mark_sweep_words_per_micro_ == 0) {
-      mark_sweep_words_per_micro_ = 1;
+    mark_words_per_micro_ = usage_before.used_in_words / mark_micros;
+    if (mark_words_per_micro_ == 0) {
+      mark_words_per_micro_ = 1;  // Prevent division by zero.
     }
 
     heap_->RecordTime(kConcurrentSweep, pre_safe_point - pre_wait_for_sweepers);
diff --git a/runtime/vm/pages.h b/runtime/vm/pages.h
index d7a76a5..e83f354 100644
--- a/runtime/vm/pages.h
+++ b/runtime/vm/pages.h
@@ -301,6 +301,7 @@
   void WriteProtectCode(bool read_only);
 
   bool ShouldPerformIdleMarkSweep(int64_t deadline);
+  bool ShouldPerformIdleMarkCompact(int64_t deadline);
 
   void AddGCTime(int64_t micros) { gc_time_micros_ += micros; }
 
@@ -442,7 +443,7 @@
 
   int64_t gc_time_micros_;
   intptr_t collections_;
-  intptr_t mark_sweep_words_per_micro_;
+  intptr_t mark_words_per_micro_;
 
   friend class ExclusivePageIterator;
   friend class ExclusiveCodePageIterator;
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index fe0b255..e80abb7 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -8359,9 +8359,6 @@
       nesting_level -= 2;
     } else if (ct == Token::kVOID) {
       ConsumeToken();
-      if (!IsFunctionTypeSymbol()) {
-        return false;
-      }
       continue;
     } else if (ct == Token::kIDENT) {
       if (IsFunctionTypeSymbol()) {
diff --git a/runtime/vm/scavenger.cc b/runtime/vm/scavenger.cc
index f918b24..87b3b3c 100644
--- a/runtime/vm/scavenger.cc
+++ b/runtime/vm/scavenger.cc
@@ -513,7 +513,7 @@
 }
 
 bool Scavenger::ShouldPerformIdleScavenge(int64_t deadline) {
-  // To make a consistent decision, we should not yeild for a safepoint in the
+  // To make a consistent decision, we should not yield for a safepoint in the
   // middle of deciding whether to perform an idle GC.
   NoSafepointScope no_safepoint;
 
diff --git a/runtime/vm/simulator_dbc.cc b/runtime/vm/simulator_dbc.cc
index 6776065..876f645 100644
--- a/runtime/vm/simulator_dbc.cc
+++ b/runtime/vm/simulator_dbc.cc
@@ -1324,7 +1324,6 @@
 
   // Load argument descriptor.
   argdesc_ = arguments_descriptor.raw();
-  ASSERT(ArgumentsDescriptor(arguments_descriptor).TypeArgsLen() == 0);
 
   // Ready to start executing bytecode. Load entry point and corresponding
   // object pool.
@@ -3952,6 +3951,8 @@
     const bool has_dart_caller = (reinterpret_cast<uword>(pc) & 2) == 0;
     const intptr_t argc = has_dart_caller ? Bytecode::DecodeArgc(pc[-1])
                                           : (reinterpret_cast<uword>(pc) >> 2);
+    const bool has_function_type_args =
+        has_dart_caller && SimulatorHelpers::ArgDescTypeArgsLen(argdesc_) > 0;
 
     SP = FrameArguments(FP, 0);
     RawObject** args = SP - argc;
@@ -3961,7 +3962,7 @@
     }
 
     *++SP = null_value;
-    *++SP = args[0];  // Closure object.
+    *++SP = args[has_function_type_args ? 1 : 0];  // Closure object.
     *++SP = argdesc_;
     *++SP = null_value;  // Array of arguments (will be filled).
 
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
index 4ded309..9b9ca0b 100644
--- a/runtime/vm/stub_code_arm.cc
+++ b/runtime/vm/stub_code_arm.cc
@@ -822,9 +822,11 @@
   // Load arguments descriptor array into R4, which is passed to Dart code.
   __ ldr(R4, Address(R1, VMHandles::kOffsetOfRawPtrInHandle));
 
-  // No need to check for type args, disallowed by DartEntry::InvokeFunction.
-  // Load number of arguments into R9.
+  // Load number of arguments into R9 and adjust count for type arguments.
+  __ ldr(R3, FieldAddress(R4, ArgumentsDescriptor::type_args_len_offset()));
   __ ldr(R9, FieldAddress(R4, ArgumentsDescriptor::count_offset()));
+  __ cmp(R3, Operand(0));
+  __ AddImmediate(R9, R9, Smi::RawValue(1), NE);  // Include the type arguments.
   __ SmiUntag(R9);
 
   // Compute address of 'arguments array' data area into R2.
diff --git a/runtime/vm/stub_code_arm64.cc b/runtime/vm/stub_code_arm64.cc
index a071130..e23bb90 100644
--- a/runtime/vm/stub_code_arm64.cc
+++ b/runtime/vm/stub_code_arm64.cc
@@ -868,9 +868,12 @@
   // Load arguments descriptor array into R4, which is passed to Dart code.
   __ LoadFromOffset(R4, R1, VMHandles::kOffsetOfRawPtrInHandle);
 
-  // No need to check for type args, disallowed by DartEntry::InvokeFunction.
-  // Load number of arguments into S5.
+  // Load number of arguments into R5 and adjust count for type arguments.
   __ LoadFieldFromOffset(R5, R4, ArgumentsDescriptor::count_offset());
+  __ LoadFieldFromOffset(R3, R4, ArgumentsDescriptor::type_args_len_offset());
+  __ AddImmediate(TMP, R5, 1);  // Include the type arguments.
+  __ cmp(R3, Operand(0));
+  __ csinc(R5, R5, TMP, EQ);  // R5 <- (R3 == 0) ? R5 : TMP + 1 (R5 : R5 + 2).
   __ SmiUntag(R5);
 
   // Compute address of 'arguments array' data area into R2.
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 2707fc7..9ef1116 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -739,9 +739,16 @@
   __ movl(EDX, Address(EBP, kArgumentsDescOffset));
   __ movl(EDX, Address(EDX, VMHandles::kOffsetOfRawPtrInHandle));
 
-  // No need to check for type args, disallowed by DartEntry::InvokeFunction.
-  // Load number of arguments into EBX.
+  // Load number of arguments into EBX and adjust count for type arguments.
   __ movl(EBX, FieldAddress(EDX, ArgumentsDescriptor::count_offset()));
+  __ cmpl(FieldAddress(EDX, ArgumentsDescriptor::type_args_len_offset()),
+          Immediate(0));
+  Label args_count_ok;
+  __ j(EQUAL, &args_count_ok, Assembler::kNearJump);
+  __ addl(EBX, Immediate(Smi::RawValue(1)));  // Include the type arguments.
+  __ Bind(&args_count_ok);
+  // Save number of arguments as Smi on stack, replacing ArgumentsDesc.
+  __ movl(Address(EBP, kArgumentsDescOffset), EBX);
   __ SmiUntag(EBX);
 
   // Set up arguments for the dart call.
@@ -769,11 +776,8 @@
   __ movl(EAX, Address(EAX, VMHandles::kOffsetOfRawPtrInHandle));
   __ call(FieldAddress(EAX, Code::entry_point_offset()));
 
-  // Reread the arguments descriptor array to obtain the number of passed
-  // arguments.
+  // Read the saved number of passed arguments as Smi.
   __ movl(EDX, Address(EBP, kArgumentsDescOffset));
-  __ movl(EDX, Address(EDX, VMHandles::kOffsetOfRawPtrInHandle));
-  __ movl(EDX, FieldAddress(EDX, ArgumentsDescriptor::count_offset()));
   // Get rid of arguments pushed on the stack.
   __ leal(ESP, Address(ESP, EDX, TIMES_2, 0));  // EDX is a Smi.
 
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc
index 0363b27..5183d28 100644
--- a/runtime/vm/stub_code_x64.cc
+++ b/runtime/vm/stub_code_x64.cc
@@ -756,7 +756,7 @@
   // | saved PC (return to DartEntry::InvokeFunction) |
 
   const intptr_t kInitialOffset = 2;
-  // Save arguments descriptor array.
+  // Save arguments descriptor array, later replaced by Smi argument count.
   const intptr_t kArgumentsDescOffset = -(kInitialOffset)*kWordSize;
   __ pushq(kArgDescReg);
 
@@ -807,9 +807,16 @@
   // Push arguments. At this point we only need to preserve kTargetCodeReg.
   ASSERT(kTargetCodeReg != RDX);
 
-  // No need to check for type args, disallowed by DartEntry::InvokeFunction.
-  // Load number of arguments into RBX.
+  // Load number of arguments into RBX and adjust count for type arguments.
   __ movq(RBX, FieldAddress(R10, ArgumentsDescriptor::count_offset()));
+  __ cmpq(FieldAddress(R10, ArgumentsDescriptor::type_args_len_offset()),
+          Immediate(0));
+  Label args_count_ok;
+  __ j(EQUAL, &args_count_ok, Assembler::kNearJump);
+  __ addq(RBX, Immediate(Smi::RawValue(1)));  // Include the type arguments.
+  __ Bind(&args_count_ok);
+  // Save number of arguments as Smi on stack, replacing saved ArgumentsDesc.
+  __ movq(Address(RBP, kArgumentsDescOffset), RBX);
   __ SmiUntag(RBX);
 
   // Compute address of 'arguments array' data area into RDX.
@@ -835,11 +842,9 @@
   __ movq(kTargetCodeReg, FieldAddress(CODE_REG, Code::entry_point_offset()));
   __ call(kTargetCodeReg);  // R10 is the arguments descriptor array.
 
-  // Read the saved arguments descriptor array to obtain the number of passed
-  // arguments.
-  __ movq(kArgDescReg, Address(RBP, kArgumentsDescOffset));
-  __ movq(R10, Address(kArgDescReg, VMHandles::kOffsetOfRawPtrInHandle));
-  __ movq(RDX, FieldAddress(R10, ArgumentsDescriptor::count_offset()));
+  // Read the saved number of passed arguments as Smi.
+  __ movq(RDX, Address(RBP, kArgumentsDescOffset));
+
   // Get rid of arguments pushed on the stack.
   __ leaq(RSP, Address(RSP, RDX, TIMES_4, 0));  // RDX is a Smi.
 
@@ -1702,59 +1707,67 @@
   __ jmp(&done_stepping, Assembler::kNearJump);
 }
 
-// Used to check class and type arguments. Arguments passed on stack:
-// TOS + 0: return address.
-// TOS + 1: function type arguments (only if n == 4, can be raw_null).
-// TOS + 2: instantiator type arguments (only if n == 4, can be raw_null).
-// TOS + 3: instance.
-// TOS + 4: SubtypeTestCache.
-// Result in RCX: null -> not found, otherwise result (true or false).
+// Used to check class and type arguments. Arguments passed in registers:
+//
+// Inputs:
+//   - R9  : RawSubtypeTestCache
+//   - RAX : instance to test against.
+//   - RDX : instantiator type arguments (for n=4).
+//   - RCX : function type arguments (for n=4).
+//
+//   - TOS + 0: return address.
+//
+// Preserves R9/RAX/RCX/RDX.
+//
+// Result in R8: null -> not found, otherwise result (true or false).
 static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) {
   ASSERT((n == 1) || (n == 2) || (n == 4));
-  const intptr_t kFunctionTypeArgumentsInBytes = 1 * kWordSize;
-  const intptr_t kInstantiatorTypeArgumentsInBytes = 2 * kWordSize;
-  const intptr_t kInstanceOffsetInBytes = 3 * kWordSize;
-  const intptr_t kCacheOffsetInBytes = 4 * kWordSize;
-  __ movq(RAX, Address(RSP, kInstanceOffsetInBytes));
-  __ LoadObject(R9, Object::null_object());
+
+  const Register kCacheReg = R9;
+  const Register kInstanceReg = RAX;
+  const Register kInstantiatorTypeArgumentsReg = RDX;
+  const Register kFunctionTypeArgumentsReg = RCX;
+
+  __ LoadObject(R8, Object::null_object());
   if (n > 1) {
-    __ LoadClass(R10, RAX);
+    __ LoadClass(R10, kInstanceReg);
     // Compute instance type arguments into R13.
     Label has_no_type_arguments;
-    __ movq(R13, R9);
+    __ movq(R13, R8);
     __ movl(RDI,
             FieldAddress(R10,
                          Class::type_arguments_field_offset_in_words_offset()));
     __ cmpl(RDI, Immediate(Class::kNoTypeArguments));
     __ j(EQUAL, &has_no_type_arguments, Assembler::kNearJump);
-    __ movq(R13, FieldAddress(RAX, RDI, TIMES_8, 0));
+    __ movq(R13, FieldAddress(kInstanceReg, RDI, TIMES_8, 0));
     __ Bind(&has_no_type_arguments);
   }
-  __ LoadClassId(R10, RAX);
+  __ LoadClassId(R10, kInstanceReg);
   // RAX: instance, R10: instance class id.
   // R13: instance type arguments or null, used only if n > 1.
-  __ movq(RDX, Address(RSP, kCacheOffsetInBytes));
-  // RDX: SubtypeTestCache.
-  __ movq(RDX, FieldAddress(RDX, SubtypeTestCache::cache_offset()));
-  __ addq(RDX, Immediate(Array::data_offset() - kHeapObjectTag));
-  // RDX: Entry start.
+  __ movq(RSI, kCacheReg);
+  // RSI: SubtypeTestCache.
+  __ movq(RSI, FieldAddress(RSI, SubtypeTestCache::cache_offset()));
+  __ addq(RSI, Immediate(Array::data_offset() - kHeapObjectTag));
+  // RSI: Entry start.
   // R10: instance class id.
   // R13: instance type arguments (still null if closure).
   Label loop, found, not_found, next_iteration;
   __ SmiTag(R10);
   __ cmpq(R10, Immediate(Smi::RawValue(kClosureCid)));
   __ j(NOT_EQUAL, &loop, Assembler::kNearJump);
-  __ movq(R13, FieldAddress(RAX, Closure::function_type_arguments_offset()));
-  __ cmpq(R13, R9);  // Cache cannot be used for generic closures.
+  __ movq(R13, FieldAddress(kInstanceReg,
+                            Closure::function_type_arguments_offset()));
+  __ cmpq(R13, R8);  // Cache cannot be used for generic closures.
   __ j(NOT_EQUAL, &not_found, Assembler::kNearJump);
-  __ movq(R13,
-          FieldAddress(RAX, Closure::instantiator_type_arguments_offset()));
-  __ movq(R10, FieldAddress(RAX, Closure::function_offset()));
+  __ movq(R13, FieldAddress(kInstanceReg,
+                            Closure::instantiator_type_arguments_offset()));
+  __ movq(R10, FieldAddress(kInstanceReg, Closure::function_offset()));
   // R10: instance class id as Smi or function.
   __ Bind(&loop);
-  __ movq(RDI, Address(RDX, kWordSize *
+  __ movq(RDI, Address(RSI, kWordSize *
                                 SubtypeTestCache::kInstanceClassIdOrFunction));
-  __ cmpq(RDI, R9);
+  __ cmpq(RDI, R8);
   __ j(EQUAL, &not_found, Assembler::kNearJump);
   __ cmpq(RDI, R10);
   if (n == 1) {
@@ -1762,34 +1775,33 @@
   } else {
     __ j(NOT_EQUAL, &next_iteration, Assembler::kNearJump);
     __ movq(RDI,
-            Address(RDX, kWordSize * SubtypeTestCache::kInstanceTypeArguments));
+            Address(RSI, kWordSize * SubtypeTestCache::kInstanceTypeArguments));
     __ cmpq(RDI, R13);
     if (n == 2) {
       __ j(EQUAL, &found, Assembler::kNearJump);
     } else {
       __ j(NOT_EQUAL, &next_iteration, Assembler::kNearJump);
       __ movq(RDI,
-              Address(RDX, kWordSize *
+              Address(RSI, kWordSize *
                                SubtypeTestCache::kInstantiatorTypeArguments));
-      __ cmpq(RDI, Address(RSP, kInstantiatorTypeArgumentsInBytes));
+      __ cmpq(RDI, kInstantiatorTypeArgumentsReg);
       __ j(NOT_EQUAL, &next_iteration, Assembler::kNearJump);
-      __ movq(RDI, Address(RDX, kWordSize *
+      __ movq(RDI, Address(RSI, kWordSize *
                                     SubtypeTestCache::kFunctionTypeArguments));
-      __ cmpq(RDI, Address(RSP, kFunctionTypeArgumentsInBytes));
+      __ cmpq(RDI, kFunctionTypeArgumentsReg);
       __ j(EQUAL, &found, Assembler::kNearJump);
     }
   }
 
   __ Bind(&next_iteration);
-  __ addq(RDX, Immediate(kWordSize * SubtypeTestCache::kTestEntryLength));
+  __ addq(RSI, Immediate(kWordSize * SubtypeTestCache::kTestEntryLength));
   __ jmp(&loop, Assembler::kNearJump);
   // Fall through to not found.
   __ Bind(&not_found);
-  __ movq(RCX, R9);
   __ ret();
 
   __ Bind(&found);
-  __ movq(RCX, Address(RDX, kWordSize * SubtypeTestCache::kTestResult));
+  __ movq(R8, Address(RSI, kWordSize * SubtypeTestCache::kTestResult));
   __ ret();
 }
 
@@ -1799,7 +1811,8 @@
 // TOS + 2: raw_null.
 // TOS + 3: instance.
 // TOS + 4: SubtypeTestCache.
-// Result in RCX: null -> not found, otherwise result (true or false).
+// Result in R8: null -> not found, otherwise result (true or false).
+// Preserves RCX/RDX.
 void StubCode::GenerateSubtype1TestCacheStub(Assembler* assembler) {
   GenerateSubtypeNTestCacheStub(assembler, 1);
 }
@@ -1810,7 +1823,8 @@
 // TOS + 2: raw_null.
 // TOS + 3: instance.
 // TOS + 4: SubtypeTestCache.
-// Result in RCX: null -> not found, otherwise result (true or false).
+// Result in R8: null -> not found, otherwise result (true or false).
+// Preserves RCX/RDX.
 void StubCode::GenerateSubtype2TestCacheStub(Assembler* assembler) {
   GenerateSubtypeNTestCacheStub(assembler, 2);
 }
@@ -1821,7 +1835,8 @@
 // TOS + 2: instantiator type arguments (can be raw_null).
 // TOS + 3: instance.
 // TOS + 4: SubtypeTestCache.
-// Result in RCX: null -> not found, otherwise result (true or false).
+// Result in R8: null -> not found, otherwise result (true or false).
+// Preserves RCX/RDX.
 void StubCode::GenerateSubtype4TestCacheStub(Assembler* assembler) {
   GenerateSubtypeNTestCacheStub(assembler, 4);
 }
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 665d4bd..41adf01 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -46,7 +46,6 @@
 # ........dartdevk.dart.snapshot
 # ........kernel_summary_worker.dart.snapshot
 # ........pub.dart.snapshot
-# ........utils_wrapper.dart.snapshot
 #.........resources/
 #...........dartdoc/
 #..............packages
@@ -171,8 +170,8 @@
     "../utils/pub",
   ],
   [
-    "utils_wrapper",
-    "../utils/compiler:utils_wrapper",
+    "kernel-service",
+    "../utils/kernel-service",
   ],
 ]
 
@@ -565,9 +564,9 @@
   ]
   gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk", "target_gen_dir")
   sources = [
-    "$gen_dir/kernel/ddc_sdk.dill",
     # TODO(vsm): Remove post CFE.
     "$gen_dir/ddc_sdk.sum",
+    "$gen_dir/kernel/ddc_sdk.dill",
   ]
   outputs = [
     "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}",
@@ -650,7 +649,8 @@
   deps = [
     "../utils/dartdevc:dartdevc_sdk_kernel_summary",
   ]
-  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk_kernel_summary", "target_gen_dir")
+  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk_kernel_summary",
+                           "target_gen_dir")
   sources = [
     "$gen_dir/kernel/amd/dart_sdk.js",
     "$gen_dir/kernel/amd/dart_sdk.js.map",
@@ -667,7 +667,8 @@
   deps = [
     "../utils/dartdevc:dartdevc_sdk_kernel_summary",
   ]
-  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk_kernel_summary", "target_gen_dir")
+  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk_kernel_summary",
+                           "target_gen_dir")
   sources = [
     "$gen_dir/kernel/common/dart_sdk.js",
     "$gen_dir/kernel/common/dart_sdk.js.map",
@@ -684,7 +685,8 @@
   deps = [
     "../utils/dartdevc:dartdevc_sdk_kernel_summary",
   ]
-  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk_kernel_summary", "target_gen_dir")
+  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk_kernel_summary",
+                           "target_gen_dir")
   sources = [
     "$gen_dir/kernel/es6/dart_sdk.js",
     "$gen_dir/kernel/es6/dart_sdk.js.map",
@@ -700,7 +702,8 @@
   deps = [
     "../utils/dartdevc:dartdevc_sdk_kernel_summary",
   ]
-  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk_kernel_summary", "target_gen_dir")
+  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk_kernel_summary",
+                           "target_gen_dir")
   sources = [
     "$gen_dir/kernel/legacy/dart_sdk.js",
     "$gen_dir/kernel/legacy/dart_sdk.js.map",
@@ -719,12 +722,12 @@
   ]
   deps = [
     ":copy_dev_compiler_js_amd",
-    ":copy_dev_compiler_js_common",
-    ":copy_dev_compiler_js_es6",
-    ":copy_dev_compiler_js_legacy",
     ":copy_dev_compiler_js_amd_kernel",
+    ":copy_dev_compiler_js_common",
     ":copy_dev_compiler_js_common_kernel",
+    ":copy_dev_compiler_js_es6",
     ":copy_dev_compiler_js_es6_kernel",
+    ":copy_dev_compiler_js_legacy",
     ":copy_dev_compiler_js_legacy_kernel",
   ]
 }
diff --git a/sdk/bin/dart2js b/sdk/bin/dart2js
index d2e9833..124d295 100755
--- a/sdk/bin/dart2js
+++ b/sdk/bin/dart2js
@@ -41,6 +41,7 @@
     EXTRA_VM_OPTIONS+=('--checked')
     ;;
 esac
+EXTRA_VM_OPTIONS+=('--no_limit_ints_to_64_bits')
 
 # We allow extra vm options to be passed in through an environment variable.
 if [[ $DART_VM_OPTIONS ]]; then
diff --git a/sdk/bin/dart2js.bat b/sdk/bin/dart2js.bat
index c078660..92058d5 100644
--- a/sdk/bin/dart2js.bat
+++ b/sdk/bin/dart2js.bat
@@ -20,7 +20,7 @@
 set DART=%BIN_DIR%\dart
 
 set EXTRA_OPTIONS=
-set EXTRA_VM_OPTIONS=
+set EXTRA_VM_OPTIONS=--no_limit_ints_to_64_bits
 
 if _%DART2JS_DEVELOPER_MODE%_ == _1_ (
   set EXTRA_VM_OPTIONS=%EXTRA_VM_OPTIONS% --checked
diff --git a/sdk/bin/dart2js_sdk b/sdk/bin/dart2js_sdk
index 286859a..89155dc 100755
--- a/sdk/bin/dart2js_sdk
+++ b/sdk/bin/dart2js_sdk
@@ -48,6 +48,7 @@
     EXTRA_VM_OPTIONS+=('--checked')
     ;;
 esac
+EXTRA_VM_OPTIONS+=('--no_limit_ints_to_64_bits')
 
 # We allow extra vm options to be passed in through an environment variable.
 if [[ $DART_VM_OPTIONS ]]; then
diff --git a/sdk/bin/dart2js_sdk.bat b/sdk/bin/dart2js_sdk.bat
index 9f01c0f..b581cb3 100755
--- a/sdk/bin/dart2js_sdk.bat
+++ b/sdk/bin/dart2js_sdk.bat
@@ -21,7 +21,7 @@
 set SNAPSHOT=%BIN_DIR%\snapshots\dart2js.dart.snapshot
 
 set EXTRA_OPTIONS=
-set EXTRA_VM_OPTIONS=
+set EXTRA_VM_OPTIONS=--no_limit_ints_to_64_bits
 
 if _%DART2JS_DEVELOPER_MODE%_ == _1_ (
   set EXTRA_VM_OPTIONS=%EXTRA_VM_OPTIONS% --checked
diff --git a/sdk/lib/async/future.dart b/sdk/lib/async/future.dart
index bd015af..bcd1f22 100644
--- a/sdk/lib/async/future.dart
+++ b/sdk/lib/async/future.dart
@@ -34,7 +34,7 @@
 /// means that `FutureOr<Object>` is equivalent to `Object`.
 ///
 /// As a corollary, `FutureOr<Object>` is equivalent to
-/// `FutureOr<FutureOr<Object>>`, `FutureOr<Future<Object>> is equivalent to
+/// `FutureOr<FutureOr<Object>>`, `FutureOr<Future<Object>>` is equivalent to
 /// `Future<Object>`.
 abstract class FutureOr<T> {
   // Private generative constructor, so that it is not subclassable, mixable, or
diff --git a/sdk/lib/collection/queue.dart b/sdk/lib/collection/queue.dart
index d60f50b..2999bc0 100644
--- a/sdk/lib/collection/queue.dart
+++ b/sdk/lib/collection/queue.dart
@@ -32,6 +32,23 @@
   factory Queue.from(Iterable elements) = ListQueue<E>.from;
 
   /**
+   * Adapts [source] to be a `Queue<T>`.
+   *
+   * Any time the queue would produce an element that is not a [T],
+   * the element access will throw.
+   *
+   * Any time a [T] value is attempted stored into the adapted queue,
+   * the store will throw unless the value is also an instance of [S].
+   *
+   * If all accessed elements of [source] are actually instances of [T],
+   * and if all elements stored into the returned queue are actually instance
+   * of [S],
+   * then the returned queue can be used as a `Queue<T>`.
+   */
+  static Queue<T> castFrom<S, T>(Queue<S> source) =>
+      new CastQueue<S, T>(source);
+
+  /**
    * Removes and returns the first element of this queue.
    *
    * The queue must not be empty when this method is called.
diff --git a/sdk/lib/core/iterable.dart b/sdk/lib/core/iterable.dart
index e91b3a8..e140f01 100644
--- a/sdk/lib/core/iterable.dart
+++ b/sdk/lib/core/iterable.dart
@@ -118,7 +118,7 @@
    * instances of [T], or if only elements that are actually instances of [T]
    * are accessed, then the resulting iterable can be used as an `Iterable<T>`.
    */
-  static Iterable<T> castTo<S, T>(Iterable<S> source) =>
+  static Iterable<T> castFrom<S, T>(Iterable<S> source) =>
       new CastIterable<S, T>(source);
 
   /**
diff --git a/sdk/lib/core/list.dart b/sdk/lib/core/list.dart
index 3f3f381..c64809c 100644
--- a/sdk/lib/core/list.dart
+++ b/sdk/lib/core/list.dart
@@ -169,7 +169,7 @@
    * of [S],
    * then the returned list can be used as a `List<T>`.
    */
-  static List<T> castTo<S, T>(List<S> source) => new CastList<S, T>(source);
+  static List<T> castFrom<S, T>(List<S> source) => new CastList<S, T>(source);
 
   /**
    * Returns the object at the given [index] in the list
diff --git a/sdk/lib/core/map.dart b/sdk/lib/core/map.dart
index 316febb..b7929f6 100644
--- a/sdk/lib/core/map.dart
+++ b/sdk/lib/core/map.dart
@@ -156,7 +156,7 @@
    * and if all entries added to the returned map have [K] keys and [V]] values,
    * then the returned map can be used as a `Map<K2, V2>`.
    */
-  static Map<K2, V2> castTo<K, V, K2, V2>(Map<K, V> source) =>
+  static Map<K2, V2> castFrom<K, V, K2, V2>(Map<K, V> source) =>
       new CastMap<K, V, K2, V2>(source);
 
   /**
diff --git a/sdk/lib/core/set.dart b/sdk/lib/core/set.dart
index 1813fc7..aec8be6 100644
--- a/sdk/lib/core/set.dart
+++ b/sdk/lib/core/set.dart
@@ -98,7 +98,7 @@
    * of [S],
    * then the returned set can be used as a `Set<T>`.
    */
-  static Set<T> castTo<S, T>(Set<S> source, {Set<R> Function<R>() newSet}) =>
+  static Set<T> castFrom<S, T>(Set<S> source, {Set<R> Function<R>() newSet}) =>
       new CastSet<S, T>(source, newSet);
 
   /**
diff --git a/sdk/lib/vmservice/vmservice.dart b/sdk/lib/vmservice/vmservice.dart
index b0fe86d..a59e7ca 100644
--- a/sdk/lib/vmservice/vmservice.dart
+++ b/sdk/lib/vmservice/vmservice.dart
@@ -511,12 +511,21 @@
       return encodeInvalidParamError(message, 'uri');
     }
     var args = message.params['args'];
-    if (args != null && args is! List<String>) {
-      return encodeInvalidParamError(message, 'args');
+    var argsOfString = new List<String>();
+    if (args != null) {
+      if (args is! List) {
+        return encodeInvalidParamError(message, 'args');
+      }
+      for (var arg in args) {
+        if (arg is! String) {
+          return encodeInvalidParamError(message, 'args');
+        }
+        argsOfString.add(arg);
+      }
     }
     var msg = message.params['message'];
 
-    Isolate.spawnUri(Uri.parse(uri), args, msg).then((isolate) {
+    Isolate.spawnUri(Uri.parse(uri), argsOfString, msg).then((isolate) {
       _spawnUriNotify(isolate.controlPort, token);
     }).catchError((e) {
       _spawnUriNotify(e.toString(), token);
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 9c6b0b9..d81a4d4 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -32,12 +32,8 @@
 Language/Expressions/Await_Expressions/evaluation_throws_t04: RuntimeError # Please triage this failure
 Language/Expressions/Await_Expressions/evaluation_throws_t06: RuntimeError # Please triage this failure
 Language/Expressions/Await_Expressions/evaluation_throws_t07: RuntimeError # Please triage this failure
-Language/Expressions/Constants/exception_t02: Crash # Issue 31762
 Language/Expressions/Constants/identifier_denotes_a_constant_t06: MissingCompileTimeError # Issue 26580
 Language/Expressions/Constants/identifier_denotes_a_constant_t07: MissingCompileTimeError # Issue 26580
-Language/Expressions/Constants/literal_number_t01: Crash # Issue 31762
-Language/Expressions/Constants/math_operators_t01: Crash # Issue 31762
-Language/Expressions/Constants/math_operators_t06: Crash # Issue 31762
 Language/Expressions/Function_Invocation/async_cleanup_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
 Language/Expressions/Function_Invocation/async_cleanup_t03: Skip # https://github.com/dart-lang/sdk/issues/28873
 Language/Expressions/Function_Invocation/async_cleanup_t05: Skip # https://github.com/dart-lang/sdk/issues/28873
@@ -54,12 +50,8 @@
 Language/Expressions/Maps/static_type_dynamic_t01: CompileTimeError # Maybe ok. Issue 17207
 Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t01: MissingCompileTimeError # Issue 25496
 Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t02: MissingCompileTimeError # Issue 25496
-Language/Expressions/Numbers/static_type_of_int_t01: Crash # Issue 31762
-Language/Expressions/Numbers/syntax_t06: Crash # Issue 31762
 Language/Expressions/Numbers/syntax_t06: Fail # Issue 21098
-Language/Expressions/Numbers/syntax_t09: Crash # Issue 31762
 Language/Expressions/Numbers/syntax_t09: Fail # Issue 21098
-Language/Expressions/Numbers/syntax_t10: Crash # Issue 31762
 Language/Expressions/Object_Identity/Object_Identity/constant_objects_t01: Fail # Issue 11551, also related to issue 563, 18738
 Language/Expressions/Object_Identity/Object_Identity/double_t02: Fail # Issue 11551, also related to issue 563, 18738
 Language/Expressions/Object_Identity/constant_objects_t01: RuntimeError # Please triage this failure
@@ -191,64 +183,19 @@
 LibTest/core/RegExp/Pattern_semantics/splitQueryString_A02_t01: Pass, RuntimeError # https://github.com/dart-lang/sdk/issues/29814
 LibTest/core/double/INFINITY_A01_t04: RuntimeError # Expected to fail because double.INFINITY is int.
 LibTest/core/double/NEGATIVE_INFINITY_A01_t04: RuntimeError # Expected to fail because double.NEGATIVE_INFINITY is int.
-LibTest/core/double/isInfinite_A01_t03: Crash # Issue 31762
-LibTest/core/double/operator_GE_A01_t02: Crash # Issue 31762
-LibTest/core/double/operator_GT_A01_t02: Crash # Issue 31762
-LibTest/core/double/operator_LE_A01_t02: Crash # Issue 31762
-LibTest/core/double/operator_LT_A01_t02: Crash # Issue 31762
-LibTest/core/int/abs_A01_t01: Crash # Issue 31762
-LibTest/core/int/ceilToDouble_A01_t01: Crash # Issue 31762
-LibTest/core/int/ceil_A01_t01: Crash # Issue 31762
-LibTest/core/int/compareTo_A01_t01: Crash # Issue 31762
-LibTest/core/int/floorToDouble_A01_t01: Crash # Issue 31762
-LibTest/core/int/floor_A01_t01: Crash # Issue 31762
-LibTest/core/int/hashCode_A01_t01: Crash # Issue 31762
 LibTest/core/int/hashCode_A01_t01: RuntimeError, OK # co19 issue 308
 LibTest/core/int/isEven_A01_t01: RuntimeError, OK # co19 issue 277
-LibTest/core/int/isEven_A01_t01: Crash # Issue 31762
-LibTest/core/int/isInfinite_A01_t01: Crash # Issue 31762
-LibTest/core/int/isNaN_A01_t01: Crash # Issue 31762
-LibTest/core/int/isNegative_A01_t01: Crash # Issue 31762
 LibTest/core/int/isOdd_A01_t01: RuntimeError, OK # co19 issue 277
-LibTest/core/int/isOdd_A01_t01: Crash # Issue 31762
 LibTest/core/int/operator_AND_A01_t01: RuntimeError, OK # Requires bigints.
-LibTest/core/int/operator_AND_A01_t01: Crash # Issue 31762
-LibTest/core/int/operator_GE_A01_t01: Crash # Issue 31762
 LibTest/core/int/operator_GT_A01_t01: RuntimeError, OK # co19 issue 200
-LibTest/core/int/operator_GT_A01_t01: Crash # Issue 31762
-LibTest/core/int/operator_LE_A01_t01: Crash # Issue 31762
 LibTest/core/int/operator_LT_A01_t01: RuntimeError, OK # co19 issue 200
-LibTest/core/int/operator_LT_A01_t01: Crash # Issue 31762
-LibTest/core/int/operator_NOT_A01_t01: Crash # Issue 31762
 LibTest/core/int/operator_NOT_A01_t01: RuntimeError, OK # Expects negative result from bit-operation.
 LibTest/core/int/operator_OR_A01_t01: RuntimeError, OK # Requires bigints.
-LibTest/core/int/operator_OR_A01_t01: Crash # Issue 31762
 LibTest/core/int/operator_XOR_A01_t01: RuntimeError, OK # Requires bigints.
-LibTest/core/int/operator_XOR_A01_t01: Crash # Issue 31762
 LibTest/core/int/operator_addition_A01_t01: RuntimeError, OK # co19 issue 200
-LibTest/core/int/operator_addition_A01_t01: Crash # Issue 31762
-LibTest/core/int/operator_division_A01_t01: Crash # Issue 31762
-LibTest/core/int/operator_left_shift_A01_t01: Crash # Issue 31762
-LibTest/core/int/operator_multiplication_A01_t01: Crash # Issue 31762
-LibTest/core/int/operator_remainder_A01_t01: Crash # Issue 31762
 LibTest/core/int/operator_remainder_A01_t01: RuntimeError, OK # Requires bigints.
-LibTest/core/int/operator_remainder_A01_t02: Crash # Issue 31762
 LibTest/core/int/operator_right_shift_A01_t01: RuntimeError, OK # Expects negative result from bit-operation.
-LibTest/core/int/operator_right_shift_A01_t01: Crash # Issue 31762
-LibTest/core/int/operator_subtraction_A01_t01: Crash # Issue 31762
-LibTest/core/int/operator_truncating_division_A01_t01: Crash # Issue 31762
-LibTest/core/int/operator_truncating_division_A01_t02: Crash # Issue 31762
-LibTest/core/int/operator_unary_minus_A01_t01: Crash # Issue 31762
-LibTest/core/int/parse_A01_t01: Crash # Issue 31762
-LibTest/core/int/remainder_A01_t01: Crash # Issue 31762
-LibTest/core/int/remainder_A01_t02: Crash # Issue 31762
-LibTest/core/int/roundToDouble_A01_t01: Crash # Issue 31762
-LibTest/core/int/round_A01_t01: Crash # Issue 31762
-LibTest/core/int/toDouble_A01_t01: Crash # Issue 31762
 LibTest/core/int/toDouble_A01_t01: RuntimeError, OK # co19 issue 200
-LibTest/core/int/toInt_A01_t01: Crash # Issue 31762
-LibTest/core/int/truncateToDouble_A01_t01: Crash # Issue 31762
-LibTest/core/int/truncate_A01_t01: Crash # Issue 31762
 LibTest/html/Element/addEventListener_A01_t04: Skip # https://github.com/dart-lang/sdk/issues/28873
 LibTest/html/HttpRequest/responseType_A01_t03: CompileTimeError # co19-roll r706: Please triage this failure
 LibTest/html/IFrameElement/addEventListener_A01_t04: Skip # https://github.com/dart-lang/sdk/issues/28873
@@ -271,8 +218,6 @@
 LibTest/math/MutableRectangle/boundingBox_A01_t01: RuntimeError, Pass # co19-roll r706: Please triage this failure.
 LibTest/math/Rectangle/boundingBox_A01_t01: RuntimeError, Pass # co19-roll r706: Please triage this failure.
 LibTest/math/pow_A04_t01: Fail # co19-roll r587: Please triage this failure
-LibTest/math/pow_A09_t01: Crash # Issue 31762
-LibTest/math/pow_A10_t01: Crash # Issue 31762
 LibTest/math/pow_A14_t01: Fail # co19-roll r587: Please triage this failure
 LibTest/math/pow_A16_t01: Fail # co19-roll r587: Please triage this failure
 LibTest/typed_data/ByteData/*Int64*: Fail # co19-roll r569: Please triage this failure
@@ -293,7 +238,6 @@
 LibTest/typed_data/ByteData/getInt16_A02_t02: Fail # co19-roll r569: Please triage this failure
 LibTest/typed_data/ByteData/getInt32_A02_t01: Fail # Issue 12989
 LibTest/typed_data/ByteData/getInt32_A02_t02: Fail # co19-roll r569: Please triage this failure
-LibTest/typed_data/ByteData/getInt64_A01_t01: Crash # Issue 31762
 LibTest/typed_data/ByteData/getInt64_A02_t02: Fail # co19-roll r569: Please triage this failure
 LibTest/typed_data/ByteData/getInt8_A02_t01: Fail # Issue 12989
 LibTest/typed_data/ByteData/getInt8_A02_t02: Fail # Issue 12989
@@ -301,7 +245,6 @@
 LibTest/typed_data/ByteData/getUint16_A02_t02: Fail # co19-roll r569: Please triage this failure
 LibTest/typed_data/ByteData/getUint32_A02_t01: Fail # Issue 12989
 LibTest/typed_data/ByteData/getUint32_A02_t02: Fail # co19-roll r569: Please triage this failure
-LibTest/typed_data/ByteData/getUint64_A01_t01: Crash # Issue 31762
 LibTest/typed_data/ByteData/getUint64_A02_t02: Fail # co19-roll r569: Please triage this failure
 LibTest/typed_data/ByteData/getUint8_A02_t01: Fail # Issue 12989
 LibTest/typed_data/ByteData/getUint8_A02_t02: Fail # Issue 12989
@@ -313,7 +256,6 @@
 LibTest/typed_data/ByteData/setInt16_A02_t02: Fail # co19-roll r569: Please triage this failure
 LibTest/typed_data/ByteData/setInt32_A02_t01: Fail # Issue 12989
 LibTest/typed_data/ByteData/setInt32_A02_t02: Fail # co19-roll r569: Please triage this failure
-LibTest/typed_data/ByteData/setInt64_A01_t01: Crash # Issue 31762
 LibTest/typed_data/ByteData/setInt64_A02_t02: Fail # co19-roll r569: Please triage this failure
 LibTest/typed_data/ByteData/setInt8_A02_t01: Fail # Issue 12989
 LibTest/typed_data/ByteData/setInt8_A02_t02: Fail # Issue 12989
@@ -321,7 +263,6 @@
 LibTest/typed_data/ByteData/setUint16_A02_t02: Fail # co19-roll r569: Please triage this failure
 LibTest/typed_data/ByteData/setUint32_A02_t01: Fail # Issue 12989
 LibTest/typed_data/ByteData/setUint32_A02_t02: Fail # co19-roll r569: Please triage this failure
-LibTest/typed_data/ByteData/setUint64_A01_t01: Crash # Issue 31762
 LibTest/typed_data/ByteData/setUint64_A02_t02: Fail # co19-roll r569: Please triage this failure
 LibTest/typed_data/ByteData/setUint8_A02_t01: Fail # Issue 12989
 LibTest/typed_data/ByteData/setUint8_A02_t02: Fail # Issue 12989
@@ -361,10 +302,6 @@
 LibTest/typed_data/Int32List/Int32List.view_A05_t03: RuntimeError # co19-roll r559: Please triage this failure
 LibTest/typed_data/Int32List/Int32List_A02_t01: Fail # co19-roll r576: Please triage this failure
 LibTest/typed_data/Int64List/*: Fail # co19-roll r559: Please triage this failure
-LibTest/typed_data/Int64List/Int64List.fromList_A01_t01: Crash # Issue 31762
-LibTest/typed_data/Int64List/Int64List.fromList_A01_t02: Crash # Issue 31762
-LibTest/typed_data/Int64List/Int64List.view_A01_t01: Crash # Issue 31762
-LibTest/typed_data/Int64List/Int64List.view_A01_t02: Crash # Issue 31762
 LibTest/typed_data/Int64List/Int64List_A02_t01: Pass # co19-roll r559: Please triage this failure
 LibTest/typed_data/Int8List/Int8List.view_A05_t01: RuntimeError # co19-roll r559: Please triage this failure
 LibTest/typed_data/Int8List/Int8List.view_A05_t02: RuntimeError # co19-roll r559: Please triage this failure
@@ -379,10 +316,6 @@
 LibTest/typed_data/Uint32List/Uint32List.view_A05_t03: RuntimeError # co19-roll r559: Please triage this failure
 LibTest/typed_data/Uint32List/Uint32List_A02_t01: Fail # co19-roll r576: Please triage this failure
 LibTest/typed_data/Uint64List/*: Fail # co19-roll r559: Please triage this failure
-LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t01: Crash # Issue 31762
-LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t02: Crash # Issue 31762
-LibTest/typed_data/Uint64List/Uint64List.view_A01_t01: Crash # Issue 31762
-LibTest/typed_data/Uint64List/Uint64List.view_A01_t02: Crash # Issue 31762
 LibTest/typed_data/Uint64List/Uint64List_A02_t01: Pass # co19-roll r559: Please triage this failure
 LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A05_t01: RuntimeError # co19-roll r559: Please triage this failure
 LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A05_t02: RuntimeError # co19-roll r559: Please triage this failure
@@ -1604,8 +1537,8 @@
 LayoutTests/fast/canvas/webgl/draw-webgl-to-canvas-2d_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/drawingbuffer-test_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/drawingbuffer-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/error-reporting_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/error-reporting_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/error-reporting_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/framebuffer-object-attachment_t01: Pass, RuntimeError # Issue 29634
@@ -6919,1323 +6852,6 @@
 WebPlatformTest/webstorage/event_session_storagearea_t01: Pass, RuntimeError # Fails on 7.1. Please triage this failure
 WebPlatformTest/webstorage/event_session_url_t01: Skip # Times out. Please triage this failure
 
-[ $compiler == dart2js && $runtime == safarimobilesim ]
-LayoutTests/fast/alignment/parse-align-items_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/alignment/parse-align-self_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/alignment/parse-justify-self_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/backgrounds/background-repeat-computed-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/backgrounds/repeat/parsing-background-repeat_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/borders/border-image-width-numbers-computed-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/2d.composite.globalAlpha.fillPath_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/2d.fillText.gradient_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.gradient_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.negative_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.veryLarge_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.verySmall_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/alpha_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-alphaImageData-behavior_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-arc-negative-radius_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-arc-zero-lineto_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-before-css_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-bezier-same-endpoint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blend-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blend-solid_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-clipping_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-color-over-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-color-over-gradient_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-color-over-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-color-over-pattern_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-fill-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-global-alpha_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-gradient-over-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-gradient-over-gradient_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-gradient-over-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-gradient-over-pattern_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-image-over-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-image-over-gradient_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-image-over-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-image-over-pattern_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-pattern-over-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-pattern-over-gradient_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-pattern-over-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-pattern-over-pattern_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-blending-transforms_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-composite-canvas_t01: Skip # Times out on Windows 8. Please triage this failure
-LayoutTests/fast/canvas/canvas-composite-stroke-alpha_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-composite-text-alpha_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-currentTransform_t01: RuntimeError # Feature is not implemented
-LayoutTests/fast/canvas/canvas-drawImage-scaled-copy-to-self_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-ellipse-360-winding_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-ellipse-negative-radius_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-ellipse-zero-lineto_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-ellipse_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-empty-image-pattern_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-fillStyle-no-quirks-parsing_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-font-consistency_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-getImageData-invalid_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-getImageData-large-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-getImageData-largeNonintegralDimensions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-imageSmoothingEnabled-repaint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-imageSmoothingEnabled_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-invalid-fillstyle_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-invalid-strokestyle_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-large-dimensions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-large-fills_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-lineDash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-lose-restore-googol-size_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-lose-restore-max-int-size_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-putImageData_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-quadratic-same-endpoint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-resetTransform_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-scale-shadowBlur_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-scale-strokePath-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-setTransform_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/draw-custom-focus-ring_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/drawImage-with-broken-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/drawImage-with-negative-source-destination_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/drawImage-with-valid-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/drawImageFromRect_withToDataURLAsSource_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/fillText-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/getPutImageDataPairTest_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/pointInPath_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/array-bounds-clamping_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/attrib-location-length-limits_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/bad-arguments-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/buffer-bind-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/buffer-data-array-buffer_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/canvas-2d-webgl-texture_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/canvas-resize-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/canvas-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/canvas-zero-size_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/compressed-tex-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias-t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/context-destroyed-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/context-lost-restored_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/context-lost_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/copy-tex-image-and-sub-image-2d_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/css-webkit-canvas-repaint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/css-webkit-canvas_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/draw-arrays-out-of-bounds_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/draw-elements-out-of-bounds_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/draw-webgl-to-canvas-2d_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/drawingbuffer-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/error-reporting_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/framebuffer-object-attachment_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/framebuffer-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/functions-returning-strings_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/get-active-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-bind-attrib-location-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-enable-enum-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-enum-tests_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-get-calls_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-getshadersource_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-getstring_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-object-get-calls_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-pixelstorei_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-teximage_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-uniformmatrix4fv_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-vertex-attrib-zero-issues_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-vertex-attrib_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/gl-vertexattribpointer_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/glsl-conformance_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/index-validation-copies-indices_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/index-validation-crash-with-buffer-sub-data_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/index-validation-verifies-too-many-indices_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/index-validation-with-resized-buffer_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/index-validation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/invalid-UTF-16_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/invalid-passed-params_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/is-object_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/null-object-behaviour_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/null-uniform-location_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/object-deletion-behaviour_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/oes-element-index-uint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/oes-vertex-array-object_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/point-size_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/premultiplyalpha-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/program-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/read-pixels-pack-alignment_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/read-pixels-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/renderbuffer-initialization_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/renderer-and-vendor-strings_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/shader-precision-format_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgb565_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba4444_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba5551_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgb565_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba4444_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba5551_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgb565_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba4444_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba5551_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-uniform-binding-bugs_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-webgl_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-input-validation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-sub-image-2d-bad-args_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-sub-image-2d_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-sub-image-cube-maps_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texImage2DImageDataTest_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texImageTest_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texture-active-bind_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texture-bindings-uneffected-on-resize_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texture-color-profile_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texture-complete_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texture-npot_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texture-transparent-pixels-initialized_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/triangle_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/uniform-location-length-limits_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/uniform-location_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/uninitialized-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/viewport-unchanged-upon-resize_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-composite-modes-repaint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-composite-modes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-depth-texture_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-exceptions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-large-texture_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-layer-update_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-specific_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-texture-binding-preserved_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-unprefixed-context-id_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-viewport-parameters-preserved_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-generated-content/malformed-url_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-generated-content/pseudo-element-events_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/css-generated-content/pseudo-transition-event_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/css-generated-content/pseudo-transition_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/auto-content-resolution-rows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/breadth-size-resolution-grid_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/calc-resolution-grid-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/display-grid-set-get_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/flex-and-minmax-content-resolution-rows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/flex-content-resolution-columns_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/flex-content-resolution-rows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-auto-flow-get-set_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-auto-flow-update_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-container-change-explicit-grid-recompute-child_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-border-grid-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-border-padding-grid-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-empty-row-column_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-min-max-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-padding-grid-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-padding-margin_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-element-shrink-to-fit_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-area-get-set_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-bad-named-area-auto-placement_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-bad-resolution-double-span_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-change-order-auto-flow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-display_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-horiz-bt_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-vert-lr_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-vert-rl_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-margin-resolution_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-item-order-auto-flow-resolution_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/grid-template-areas-get-set_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/implicit-rows-auto-resolution_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/justify-self-cell_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/minmax-fixed-logical-height-only_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/minmax-fixed-logical-width-only_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-update_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/percent-padding-margin-resolution-grid-item-update_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/percent-padding-margin-resolution-grid-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/percent-resolution-grid-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-grid-layout/place-cell-by-index_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-intrinsic-dimensions/height-property-value_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css-intrinsic-dimensions/multicol_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/add-remove-stylesheets-at-once-minimal-recalc-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/background-position-serialize_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/background-serialize_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/border-image-style-length_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/button-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/checked-pseudo-selector_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/collapsed-whitespace-reattach-in-style-recalc_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/computed-offset-with-zoom_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/content/content-none_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/content/content-normal_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/content/content-quotes-05_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/css-escaped-identifier_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/css-properties-case-insensitive_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/css3-nth-tokens-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/csstext-of-content-string_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/cursor-parsing-quirks_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/deprecated-flexbox-auto-min-size_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/display-inline-block-scrollbar_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/draggable-region-parser_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/dynamic-class-backdrop-pseudo_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/first-child-display-change-inverse_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/focus-display-block-inline_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-face-cache-bug_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-face-unicode-range-load_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-shorthand-from-longhands_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/fontface-properties_t01: RuntimeError # Uses FontFace class not defined for this browser
-LayoutTests/fast/css/fontfaceset-download-error_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/fontfaceset-events_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/fontfaceset-loadingdone_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/getComputedStyle/computed-style-font_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/getComputedStyle/computed-style-with-zoom_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-border-radius-shorthand_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-borderRadius-2_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/html-attr-case-sensitivity_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/id-or-class-before-stylesheet_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/inherit-initial-shorthand-values_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalid-predefined-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalidation/detach-reattach-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalidation/shadow-host-toggle_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalidation/targeted-class-any-pseudo_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalidation/targeted-class-host-pseudo_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalidation/targeted-class-shadow-combinator_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/invalidation/toggle-style-inside-shadow-root_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/link-alternate-stylesheet-1_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/link-alternate-stylesheet-2_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/link-alternate-stylesheet-3_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/link-alternate-stylesheet-4_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/link-alternate-stylesheet-5_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/media-query-recovery_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/media-rule-no-whitespace_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/modify-ua-rules-from-javascript_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parse-color-int-or-percent-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-at-rule-recovery_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-expr-error-recovery_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-object-fit_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-object-position_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-page-rule_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-selector-error-recovery_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-unexpected-eof_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/pseudo-any_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/pseudo-target-indirect-sibling-001_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/css/pseudo-target-indirect-sibling-002_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/css/readonly-pseudoclass-opera-001_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/readonly-pseudoclass-opera-002_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/readonly-pseudoclass-opera-003_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/readonly-pseudoclass-opera-004_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/readonly-pseudoclass-opera-005_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/readwrite-contenteditable-recalc_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/shorthand-setProperty-important_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/sibling-selectors-dynamic_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/sticky/parsing-position-sticky_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-scoped/style-scoped-in-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-scoped/style-scoped-nested_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-scoped/style-scoped-scoping-nodes-different-order_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-scoped/style-scoped-shadow-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-scoped/style-scoped-with-dom-operation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-scoped/style-scoped-with-important-rule_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/style-sharing-type-and-readonly_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/stylesheet-enable-first-alternate-on-load-sheet_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/stylesheet-enable-second-alternate-link_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/webkit-keyframes-errors_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/word-break-user-modify-allowed-values_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last-inherited_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-line_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent-inherited_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-justify/getComputedStyle/getComputedStyle-text-justify_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/52776_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Attr/direction-attribute-set-and-cleared_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/DOMException/XPathException_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/DOMException/dispatch-event-exception_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/DOMImplementation/createDocument-namespace-err_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/basic_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-strict-mode-wtih-checkbox_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-user-select-none_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-with-first-letter-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/hittest-relative-to-viewport_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/clone-node_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/createElementNS-namespace-err_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/title-property-creates-title-element_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/title-property-set-multiple-times_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Document/title-with-multiple-children_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Element/attribute-uppercase_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Element/getBoundingClientRect-getClientRects-relative-to-viewport_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Element/getClientRects_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Element/setAttributeNS-namespace-err_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLAnchorElement/remove-href-from-focused-anchor_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-host_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-hostname_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-pathname_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-autofocus_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-close-event_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-enabled_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-open_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-return-value_t01: RuntimeError # Dartium JSInterop failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-scrolled-viewport_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/dialog-show-modal_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/inert-does-not-match-disabled-selector_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/inert-node-is-unfocusable_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/inert-node-is-unselectable_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/multiple-centered-dialogs_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/non-anchored-dialog-positioning_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/show-modal-focusing-steps_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/submit-dialog-close-event_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/synthetic-click-inert_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-relative_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-static_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDocument/active-element-gets-unforcusable_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLDocument/clone-node_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDocument/set-focus-on-valid-element_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLDocument/title-get_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLDocument/title-set_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLElement/insertAdjacentHTML-errors_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLElement/set-inner-outer-optimization_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLElement/spellcheck_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLFormElement/move-option-between-documents_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLImageElement/image-alt-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLImageElement/parse-src_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLInputElement/input-image-alt-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test-nonexistent_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/link-beforeload-recursive_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/prefetch-onerror_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/prefetch_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/HTMLLinkElement/resolve-url-on-insertion_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLMeterElement/set-meter-properties_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLOptionElement/collection-setter-getter_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLOutputElement/dom-settable-token-list_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLScriptElement/async-false-inside-async-false-load_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLScriptElement/async-inline-script_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLScriptElement/defer-inline-script_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLScriptElement/defer-onbeforeload_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLScriptElement/script-set-src_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLSelectElement/selected-index-preserved-when-option-text-changes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/cloneNode_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/content-outlives-template-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/contentWrappers_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/custom-element-wrapper-gc_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/cycles-in-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/cycles_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/inertContents_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/innerHTML-inert_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/innerHTML_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/no-form-association_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/ownerDocumentXHTML_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/ownerDocument_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/HTMLTemplateElement/xhtml-parsing-and-serialization_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/MutationObserver/observe-childList_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/MutationObserver/observe-options-attributes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/MutationObserver/observe-options-character-data_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/MutationObserver/weak-callback-gc-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Node/initial-values_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/NodeIterator/NodeIterator-basic_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Range/bug-19527_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Range/insertNode-empty-fragment-crash_t01: RuntimeError # Please triage this failure
-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-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
-LayoutTests/fast/dom/Range/range-insertNode-separate-endContainer_t01: RuntimeError # Please triage this failure
-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/surroundContents-for-detached-node_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/SelectorAPI/caseID-almost-strict_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/SelectorAPI/caseID_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/SelectorAPI/dumpNodeList-2_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/SelectorAPI/dumpNodeList-almost-strict_t01: RuntimeError # Dartium JSInterop failure
-LayoutTests/fast/dom/SelectorAPI/dumpNodeList_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/SelectorAPI/id-fastpath-almost-strict_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/SelectorAPI/id-fastpath-strict_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/StyleSheet/css-insert-import-rule-to-shadow-stylesheets_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/StyleSheet/css-medialist-item_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/StyleSheet/detached-shadow-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/StyleSheet/empty-shadow-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Text/next-element-sibling_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Text/previous-element-sibling_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/TreeWalker/TreeWalker-basic_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Window/atob-btoa_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Window/getMatchedCSSRules-nested-rules_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Window/getMatchedCSSRules-parent-stylesheets_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Window/window-resize-contents_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Window/window-resize_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/Window/window-scroll-arguments_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/XMLSerializer-attribute-entities_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/XMLSerializer-attribute-namespaces_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/XMLSerializer-doctype2_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/XMLSerializer-double-xmlns_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/anchor-without-content_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/assertion-on-node-removal_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/attribute-namespaces-get-set_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/characterdata-api-arguments_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/client-width-height-quirks_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/comment-not-documentElement_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/createDocumentType-ownerDocument_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/createElementNS-namespace-errors_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/attribute-changed-callback_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/constructor-calls-created-synchronously_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/created-callback_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/document-register-basic_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/document-register-namespace_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/document-register-on-create-callback_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/document-register-svg-extends_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/document-register-type-extensions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/element-names_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/element-type_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/element-upgrade_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/lifecycle-created-createElement-recursion_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/type-extension-undo-assert_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/dom/custom/type-extensions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/unresolved-pseudoclass_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/custom/upgrade-candidate-remove-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/dataset-xhtml_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/dataset_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/document-set-title-mutations_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/document-set-title-no-child-on-empty_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/document-set-title-no-reuse_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/domparser-parsefromstring-mimetype-support_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/elementFromPoint-scaled-scrolled_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/getElementsByClassName/014_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/getElementsByClassName/dumpNodeList_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/horizontal-scrollbar-in-rtl-doesnt-fire-onscroll_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/horizontal-scrollbar-in-rtl_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/horizontal-scrollbar-when-dir-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/html-collections-named-getter-mandatory-arg_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/implementation-api-args_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/importNode-unsupported-node-type_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/jsDevicePixelRatio_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/location-hash_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/dom/navigatorcontentutils/is-protocol-handler-registered_t01: Skip # API not supported.
-LayoutTests/fast/dom/navigatorcontentutils/register-protocol-handler_t01: Skip # API not supported.
-LayoutTests/fast/dom/navigatorcontentutils/unregister-protocol-handler_t01: Skip # API not supported.
-LayoutTests/fast/dom/node-iterator-with-doctype-root_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/option-properties_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/partial-layout-non-overlay-scrollbars_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/set-innerHTML_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/access-document-of-detached-stylesheetlist-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/base-in-shadow-tree_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-element-api_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-element-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-element-includer_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-element-outside-shadow-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-pseudo-element-css-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-pseudo-element-dynamic-attribute-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-pseudo-element-overridden_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-pseudo-element-relative-selector-css-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-pseudo-element-with-host-pseudo-class_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/content-reprojection-fallback-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/custom-pseudo-in-selector-api_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/distribution-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/distribution-for-event-path_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/distribution-update-recalcs-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/elementfrompoint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/elements-in-frameless-document_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/event-path-not-in-document_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/event-path_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/form-in-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/get-distributed-nodes-orphan_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-mutation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/getComputedStyle-composed-parent-dirty_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/getelementbyid-in-orphan_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/getelementbyid-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/host-context-pseudo-class-css-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/host-pseudo-class-css-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/host-wrapper-reclaimed_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/insertion-point-list-menu-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/insertion-point-shadow-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/insertion-point-video-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/link-in-shadow-tree_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/nested-reprojection-inconsistent_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/no-renderers-for-light-children_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/offsetWidth-host-style-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/olderShadowRoot_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/pseudoclass-update-checked-option_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-optgroup_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-option_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/pseudoclass-update-enabled-optgroup_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/pseudoclass-update-enabled-option_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/reinsert-insertion-point_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/remove-and-insert-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/remove-styles-in-shadow-crash-2_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/remove-styles-in-shadow-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-aware-shadow-root_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-content-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-disable_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-element-inactive_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-element_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-hierarchy-exception_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-removechild-and-blur-event_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-root-append_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-root-js-api_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-root-node-list_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-root-text-child_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadow-ul-li_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowdom-dynamic-styling_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowdom-for-input-spellcheck_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowdom-for-input-type-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowdom-for-unknown-with-form_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowhost-keyframes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowroot-clonenode_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowroot-host_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/shadowroot-keyframes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/sibling-rules-dynamic-changes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/stale-distribution-after-shadow-removal_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/style-insertion-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/style-of-distributed-node_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/style-sharing-sibling-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/style-sharing-styles-in-older-shadow-roots_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/suppress-mutation-events-in-shadow-characterdata_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/shadow/title-element-in-shadow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/vertical-scrollbar-when-dir-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/xmlserializer-serialize-to-string-exception_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/crash-generated-counter_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/crash-generated-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/crash-generated-quote_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/crash-generated-text_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/insertAdjacentElement_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/insertAdjacentHTML_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dynamic/recursive-layout_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/add-event-without-document_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/clipboard-clearData_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/events/clipboard-dataTransferItemList_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/events/dispatch-event-being-dispatched_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/dispatch-event-no-document_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/events/document-elementFromPoint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/event-creation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/event-listener-html-non-html-confusion_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/event-on-created-document_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/event-on-xhr-document_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/event-trace_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/fire-scroll-event_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/events/initkeyboardevent-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/invalid-003_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/invalid-004_t01: RuntimeError # Please triage this failure
-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/scroll-event-does-not-bubble_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/scroll-event-phase_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/events/tabindex-removal-from-focused-element_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/wheelevent-constructor_t01: RuntimeError # Safarimobilesim does not support WheelEvent
-LayoutTests/fast/exclusions/parsing/parsing-wrap-flow_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/exclusions/parsing/parsing-wrap-through_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/blob-close-read_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/blob-close-revoke_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/blob-close_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/blob-constructor_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/blob-parts-slice-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/blob-slice-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/file-reader-abort-in-last-progress_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/file-reader-methods-illegal-arguments_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/file-reader-readystate_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/url-null_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/files/xhr-response-blob_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/async-operations_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/directory-entry-to-uri_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-entry-to-uri_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-from-file-entry_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-metadata-after-write_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-abort-continue_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-abort-depth_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-abort_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-empty-blob_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-events_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-gc-blob_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-truncate-extend_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/file-writer-write-overlapped_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/filesystem-reference_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/filesystem-unserializable_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/filesystem-uri-origin_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/input-access-entries_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-copy_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-get-entry_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-get-metadata_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-get-parent_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-move_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-read-directory_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-remove_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-restricted-chars_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-restricted-names_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/op-restricted-unicode_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/read-directory-many_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/read-directory_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/simple-readonly-file-object_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/simple-readonly_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/simple-required-arguments-getdirectory_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/simple-required-arguments-getfile_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/simple-temporary_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/filesystem/snapshot-file-with-gc_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/flexbox/vertical-box-form-controls_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/ValidityState-typeMismatch-email_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/autocomplete_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/autofocus-input-css-style-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/button-baseline-and-collapsing_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/button/button-disabled-blur_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/clone-input-with-dirty-value_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/color/color-setrangetext_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/color/input-value-sanitization-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/control-detach-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/datalist/datalist_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/datalist/input-list_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-change-layout-by-value_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/date/input-date-validation-message_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/date/input-valueasdate-date_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/date/input-valueasnumber-date_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-change-layout-by-value_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/datetimelocal/input-valueasdate-datetimelocal_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/datetimelocal/input-valueasnumber-datetimelocal_t01: RuntimeError # Dartium JSInterop failure
-LayoutTests/fast/forms/file/file-input-capture_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/focus-style-pending_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/forms/form-attribute_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/input-appearance-elementFromPoint_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/input-inputmode_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/input-select-webkit-user-select-none_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/input-type-change3_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/input-value-sanitization_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/input-width-height-attributes-without-renderer-loaded-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/interactive-validation-assertion-by-validate-twice_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/forms/interactive-validation-attach-assertion_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/forms/interactive-validation-select-crash_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/forms/listbox-selection-2_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/menulist-disabled-selected-option_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/menulist-selection-reset_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/menulist-submit-without-selection_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/multiple-selected-options-innerHTML_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/option-change-single-selected_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/option-strip-unicode-spaces_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/plaintext-mode-1_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/search-popup-crasher_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/select-clientheight-large-size_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/select-clientheight-with-multiple-attr_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/selection-direction_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/selection-wrongtype_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/setrangetext_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/shadow-tree-exposure_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/textarea-maxlength_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/textarea-paste-newline_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/textarea-selection-preservation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/forms/textarea-set-defaultvalue-after-value_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/html/hidden-attr_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/html/imports/import-element-removed-flag_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/html/imports/import-events_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/html/select-dropdown-consistent-background-color_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/boundingBox-with-continuation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/continuation-inlines-inserted-in-reverse-after-block_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/inline-position-top-align_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/inline-relative-offset-boundingbox_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/inline-with-empty-inline-children_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/out-of-flow-objects-and-whitespace-after-empty-inline_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/parent-inline-element-padding-contributes-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/inline/positioned-element-padding-contributes-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/innerHTML/innerHTML-custom-tag_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/layers/normal-flow-hit-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/lists/list-style-position-inside_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/loader/about-blank-hash-change_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/loader/about-blank-hash-kept_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/loader/hashchange-event-properties_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/loader/onhashchange-attribute-listeners_t01: Skip # Times out. Please triage this failure
-LayoutTests/fast/loader/scroll-position-restored-on-back_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/loader/scroll-position-restored-on-reload-at-load-event_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/loader/stateobjects/replacestate-in-onunload_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/masking/parsing-clip-path-shape_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/masking/parsing-mask-source-type_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/masking/parsing-mask_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/media/matchmedium-query-api_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/media/media-query-list-syntax_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/media/media-query-list_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/media/mq-append-delete_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/media/mq-js-media-except_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/media/mq-js-media-except_t03: RuntimeError # Please triage this failure
-LayoutTests/fast/media/mq-parsing_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/mediastream/RTCIceCandidate_t01: Skip # Please triage this failure
-LayoutTests/fast/mediastream/RTCPeerConnection_t01: Skip #  Issue 23475
-LayoutTests/fast/mediastream/constructors_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/balance-short-trailing-empty-block_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/balance-trailing-border_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/balance-trailing-border_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/break-after-always-bottom-margin_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/break-properties_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/columns-shorthand-parsing_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/cssom-view_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/float-truncation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/hit-test-above-or-below_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/hit-test-end-of-column-with-line-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/hit-test-end-of-column_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/hit-test-float_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/hit-test-gap-between-pages-flipped_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/newmulticol/balance-maxheight_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/newmulticol/balance_t07: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/newmulticol/balance_t08: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/newmulticol/balance_t09: Skip # Times out. Please triage this failure
-LayoutTests/fast/multicol/newmulticol/balance_t10: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/vertical-lr/break-properties_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/vertical-lr/float-truncation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/vertical-rl/break-properties_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/vertical-rl/float-truncation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/widows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/widows_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/overflow/child-100percent-height-inside-fixed-container-with-overflow-auto_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/overflow/replaced-child-100percent-height-inside-fixed-container-with-overflow-auto_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/overflow/scrollbar-restored_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/parser/foster-parent-adopted_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/parser/fragment-parser-doctype_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/parser/innerhtml-with-prefixed-elements_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/parser/pre-first-line-break_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/available-height-for-content_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/container-width-zero_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-anonymous-table-cell_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/preferred-widths_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/table-percent-height-text-controls_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/table-percent-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/replaced/table-percent-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/ruby/ruby-line-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/scrolling/scroll-element-into-view_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/parsing/parsing-shape-image-threshold_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/parsing/parsing-shape-lengths_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/parsing/parsing-shape-margin_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/parsing/parsing-shape-outside-none_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/parsing/parsing-shape-outside_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/parsing/parsing-shape-property-aliases_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-big-box-border-radius_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-diamond-margin-polygon_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-margin-left_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-margin-right_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t02: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-left_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-right_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/speechsynthesis/speech-synthesis-boundary-events_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/speechsynthesis/speech-synthesis-cancel_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/speechsynthesis/speech-synthesis-pause-resume_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/speechsynthesis/speech-synthesis-speak_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/speechsynthesis/speech-synthesis-utterance-uses-voice_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/speechsynthesis/speech-synthesis-voices_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/storage/disallowed-storage_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/storage/storage-disallowed-in-data-url_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/sub-pixel/boundingclientrect-subpixel-margin_t01: Skip # Issue 747
-LayoutTests/fast/sub-pixel/computedstylemargin_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/sub-pixel/cssom-subpixel-precision_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/sub-pixel/float-list-inside_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/sub-pixel/inline-block-with-padding_t01: Skip # Issue 747
-LayoutTests/fast/sub-pixel/layout-boxes-with-zoom_t01: Pass, RuntimeError # Issue 747
-LayoutTests/fast/sub-pixel/shadows-computed-style_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/sub-pixel/size-of-span-with-different-positions_t01: Skip # Issue 747
-LayoutTests/fast/svg/getbbox_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/svg/tabindex-focus_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/svg/whitespace-angle_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/svg/whitespace-integer_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/svg/whitespace-length_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/svg/whitespace-number_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/absolute-table-percent-lengths_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/caption-orthogonal-writing-mode-sizing_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/css-table-max-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/css-table-max-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/css-table-width-with-border-padding_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/fixed-table-layout-width-change_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/hittest-tablecell-right-edge_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/hittest-tablecell-with-borders-right-edge_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/html-table-width-max-width-constrained_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/incorrect-colgroup-span-values_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/large-shrink-wrapped-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/margins-perpendicular-containing-block_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/min-width-css-block-table_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/table/min-width-css-inline-table_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/table/min-width-html-block-table_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/table/min-width-html-inline-table_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/table/nested-tables-with-div-offset_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/padding-height-and-override-height_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/switch-table-layout-dynamic-cells_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/switch-table-layout-multiple-section_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/switch-table-layout_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows-except-overlapped_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-cell-offset-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-colgroup-present-after-table-row_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-rowspan-cell-with-empty-cell_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-sections-border-spacing_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/table-with-content-width-exceeding-max-width_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/find-case-folding_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/find-russian_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/find-soft-hyphen_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/find-spaces_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/font-ligature-letter-spacing_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/text/font-ligatures-linebreak-word_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/font-ligatures-linebreak_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/glyph-reordering_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/international/cjk-segmentation_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/international/iso-8859-8_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/international/listbox-width-rtl_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/international/thai-offsetForPosition-inside-character_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/ipa-tone-letters_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/line-break-after-question-mark_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/line-breaks-after-hyphen-before-number_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/remove-zero-length-run_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/sub-pixel/text-scaling-ltr_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/sub-pixel/text-scaling-pixel_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/sub-pixel/text-scaling-rtl_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/sub-pixel/text-scaling-vertical_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/sub-pixel/text-scaling-webfont_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/text-combine-shrink-to-fit_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/tokenizer/entities_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/tokenizer/entities_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/tokenizer/entities_t03: RuntimeError # Please triage this failure
-LayoutTests/fast/transforms/bounding-rect-zoom_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/transforms/hit-test-large-scale_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/anchor_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/file-http-base_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/file_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/host-lowercase-per-scheme_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/host_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/idna2003_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/idna2008_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/invalid-urls-utf8_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/ipv4_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/ipv6_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/path_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/port_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/query_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/relative-unix_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/relative-win_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/relative_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/safari-extension_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/segments-from-data-url_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/segments_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/url/standard-url_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/writing-mode/auto-sizing-orthogonal-flows_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/writing-mode/table-hit-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/writing-mode/vertical-font-vmtx-units-per-em_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-get_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-arraybuffer_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-before-open-sync-request_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-sync-request_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-set-responsetype_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Borrowed/cz_20030217_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Borrowed/namespace-nodes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Core/test_core_functions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Core/test_core_functions_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Core/test_node_test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Core/test_node_test_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/4XPath/Core/test_parser_t01: RuntimeError # Dartium JSInterop failure
-LayoutTests/fast/xpath/ambiguous-operators_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/attr-namespace_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/ensure-null-namespace_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/implicit-node-args_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/invalid-resolver_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/node-name-case-sensitivity_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/node-name-case-sensitivity_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/position_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/py-dom-xpath/abbreviations_t01: RuntimeError # Dartium JSInterop failure
-LayoutTests/fast/xpath/py-dom-xpath/axes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/py-dom-xpath/data_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/py-dom-xpath/expressions_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/py-dom-xpath/paths_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/reverse-axes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xpath/xpath-template-element_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xsl/default-html_t01: RuntimeError # Please triage this failure
-LibTest/async/Future/doWhile_A05_t01: RuntimeError # Please triage this failure
-LibTest/async/Future/forEach_A04_t02: RuntimeError # Please triage this failure
-LibTest/async/Stream/timeout_A01_t01: Pass, RuntimeError # Please triage this failure
-LibTest/async/Stream/timeout_A03_t01: Pass, RuntimeError # Please triage this failure
-LibTest/async/Stream/timeout_A04_t01: Pass, RuntimeError # Please triage this failure
-LibTest/core/List/List_A02_t01: RuntimeError # Please triage this failure
-LibTest/core/List/List_A03_t01: RuntimeError # Please triage this failure
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: RuntimeError # Issue 22200
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: RuntimeError # Issue 22200
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: RuntimeError # Issue 22200
-LibTest/core/double/roundToDouble_A01_t01: RuntimeError # Please triage this failure
-LibTest/core/double/round_A01_t01: RuntimeError # Please triage this failure
-LibTest/core/int/compareTo_A01_t01: RuntimeError # Please triage this failure
-LibTest/core/int/operator_left_shift_A01_t01: RuntimeError # Please triage this failure
-LibTest/core/int/operator_remainder_A01_t03: RuntimeError # Please triage this failure
-LibTest/core/int/operator_truncating_division_A01_t02: RuntimeError # Please triage this failure
-LibTest/core/int/remainder_A01_t01: RuntimeError # Please triage this failure
-LibTest/core/int/remainder_A01_t03: RuntimeError # Please triage this failure
-LibTest/core/int/toRadixString_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t03: RuntimeError # Please triage this failure
-LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t06: RuntimeError # Please triage this failure
-LibTest/html/Document/childNodes_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Document/clone_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Document/clone_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Document/getElementsByTagName_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Document/securityPolicy_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/Element.tag_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/attributeChanged_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/borderEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/contentEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/dataset_A02_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/enteredView_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/getAttributeNS_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/getAttributeNS_A02_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/getBoundingClientRect_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Element/getClientRects_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Element/getNamespacedAttributes_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/isContentEditable_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/isContentEditable_A02_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/isTagSupported_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/isTagSupported_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Element/leftView_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/marginEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/mouseWheelEvent_A01_t01: Skip # Safari mobile sim does not support WheelEvent
-LibTest/html/Element/onMouseWheel_A01_t01: Skip # Safari mobile sim does not support WheelEvent
-LibTest/html/Element/onTransitionEnd_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/paddingEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Element/querySelectorAll_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Element/replaceWith_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Element/tagName_A01_t03: RuntimeError # Please triage this failure
-LibTest/html/Element/transitionEndEvent_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/getAllResponseHeaders_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/getResponseHeader_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/getString_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/onError_A01_t02: Skip # Times out. Please triage this failure
-LibTest/html/HttpRequest/request_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/responseText_A01_t02: Skip # Times out. Please triage this failure
-LibTest/html/HttpRequest/responseType_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/responseType_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/setRequestHeader_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/statusText_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequest/status_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/HttpRequestUpload/onError_A01_t02: Skip # Times out. Please triage this failure
-LibTest/html/HttpRequestUpload/onLoadEnd_A01_t01: Skip # Times out. Please triage this failure
-LibTest/html/HttpRequestUpload/onLoadStart_A01_t01: Skip # Times out. Please triage this failure
-LibTest/html/HttpRequestUpload/onLoad_A01_t01: Skip # Times out. Please triage this failure
-LibTest/html/IFrameElement/IFrameElement.created_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/attributeChanged_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/attributes_setter_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/blur_A01_t01: Skip # Times out. Please triage this failure
-LibTest/html/IFrameElement/borderEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/clone_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/contentWindow_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/createFragment_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/createFragment_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/createFragment_A01_t03: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/createShadowRoot_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/getNamespacedAttributes_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/innerHtml_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/isContentEditable_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/leftView_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/marginEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/mouseWheelEvent_A01_t01: Skip # Safari mobile sim does not support WheelEvent
-LibTest/html/IFrameElement/offsetTo_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/onMouseWheel_A01_t01: Skip # Safari mobile sim does not support WheelEvent
-LibTest/html/IFrameElement/onTransitionEnd_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/outerHtml_setter_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/paddingEdge_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/querySelector_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/setInnerHtml_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/IFrameElement/tagName_A01_t03: RuntimeError # Please triage this failure
-LibTest/html/Node/append_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Node/nodes_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Node/nodes_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Node/parent_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Node/previousNode_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/close_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/document_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/find_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/find_A03_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/find_A06_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/moveBy_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/moveTo_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/moveTo_A02_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/open_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/postMessage_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/postMessage_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Window/requestFileSystem_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/requestFileSystem_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Window/requestFileSystem_A02_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/resizeBy_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/resizeTo_A01_t01: RuntimeError # Please triage this failure
-LibTest/typed_data/Float32x4List/Float32x4List.view_A06_t01: RuntimeError # Please triage this failure
-LibTest/typed_data/Int32x4/operator_OR_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/DOMEvents/approved/EventObject.after.dispatchEvenr_t01: RuntimeError # Please triage this failure
-WebPlatformTest/DOMEvents/approved/EventObject.multiple.dispatchEvent_t01: RuntimeError # Please triage this failure
-WebPlatformTest/DOMEvents/approved/ProcessingInstruction.DOMCharacterDataModified_t01: Skip # Times out. Please triage this failure
-WebPlatformTest/DOMEvents/approved/addEventListener.optional.useCapture_t01: RuntimeError # Please triage this failure
-WebPlatformTest/Utils/test/asyncTestFail_t01: RuntimeError # Please triage this failure
-WebPlatformTest/Utils/test/asyncTestFail_t02: RuntimeError # Please triage this failure
-WebPlatformTest/Utils/test/asyncTestTimeout_t01: Skip # Times out. Please triage this failure
-WebPlatformTest/custom-elements/concepts/type_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/concepts/type_A04_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/concepts/type_A05_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/concepts/type_A06_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/concepts/type_A07_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/concepts/type_A08_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A02_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A03_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A04_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElementNS_A05_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A02_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A03_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A04_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/createElement_A05_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t02: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/isAttribute_A02_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/isAttribute_A03_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/localName_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/custom-elements/instantiating/namespace_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/EventTarget/dispatchEvent_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/EventTarget/dispatchEvent_A02_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/EventTarget/dispatchEvent_A03_t01: Skip # Times out. Please triage this failure
-WebPlatformTest/dom/events/type_A01_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/DOMImplementation-createDocumentType_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/DOMImplementation-createDocument_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/DOMImplementation-hasFeature_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Document-adoptNode_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Document-createElementNS_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Document-getElementsByTagName_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Document-importNode_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Element-childElementCount_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Node-appendChild_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Node-appendChild_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Node-insertBefore_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Node-isEqualNode_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/Node-replaceChild_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/attributes_A04_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/attributes_A05_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A05_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A06_t03: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t03: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A08_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A09_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A09_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttribute_A02_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttribute_A02_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/nodes/attributes/setAttribute_A03_t01: RuntimeError # Please triage this failure
-WebPlatformTest/dom/ranges/Range-attributes_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/ranges/Range-comparePoint_t02: RuntimeError # Please triage this failure
-WebPlatformTest/dom/ranges/Range-comparePoint_t03: RuntimeError # Please triage this failure
-WebPlatformTest/dom/ranges/Range-detach_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-imports/link-import_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-imports/link-import_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html-imports/loading-import_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/additions-to-the-steps-to-clone-a-node/template-clone-children_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/additions-to-the-steps-to-clone-a-node/templates-copy-document-owner_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/definitions/template-contents-owner-document-type_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/definitions/template-contents-owner-test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/definitions/template-contents_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/innerhtml-on-templates/innerhtml_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-foster-parenting/template-is-a-foster-parent-element_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-foster-parenting/template-is-not-a-foster-parent-element_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-body-token_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-frameset-token_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-head-token_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-html-token_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/start-tag-body_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-table-insertion-mode/end-tag-table_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/appending-to-a-template/template-child-nodes_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-row-context_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/creating-an-element-for-the-token/template-owner-document_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/serializing-html-templates/outerhtml_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/content-attribute_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/node-document-changes_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: RuntimeError # In Safari mobile sim, setting innerHTML on a Frameset element does nothing.
-WebPlatformTest/html-templates/template-element/template-content-node-document_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/template-content_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-image_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-video_t01: Skip # Times out. Please triage this failure
-WebPlatformTest/html/browsers/browsing-the-web/read-text/load-text-plain_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.body-getter_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.body-setter_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-namespace_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t05: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t07: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/elements/global-attributes/dataset-delete_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/elements/global-attributes/dataset-get_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/dom/elements/global-attributes/dataset-set_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/document-metadata/styling/LinkStyle_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/embedded-content/media-elements/error-codes/error_t01: Skip # Times out. Please triage this failure
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/mode_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/attributes-common-to-form-controls/formAction_document_address_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/attributes-common-to-form-controls/formaction_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/textfieldselection/selection_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setRangeText_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-button-element/button-validation_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-datalist-element/datalistelement_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-datalist-element/datalistoptions_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-fieldset-element/disabled_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-form-element/form-autocomplete_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-form-element/form-elements-matches_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-form-element/form-elements-nameditem_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/color_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/date_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/datetime-local_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/datetime_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/datetime_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/email_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/hidden_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/input-textselection_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/month_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/password_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/range_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/text_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/time_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/time_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/type-change-state_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/url_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/valueMode_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-input-element/week_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-meter-element/meter_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-option-element/option-text-recurse_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/forms/the-option-element/option-text-spaces_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/grouping-content/the-blockquote-element/grouping-blockquote_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/interactive-elements/the-details-element/toggleEvent_t01: Skip # Times out. Please triage this failure
-WebPlatformTest/html/semantics/interactive-elements/the-dialog-element/dialog-close_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/interactive-elements/the-dialog-element/dialog-showModal_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/scripting-1/the-script-element/async_t11: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/scripting-1/the-script-element/script-text_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/checked_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/default_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/dir_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/disabled_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/enabled_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/focus_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/indeterminate_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/inrange-outofrange_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/selectors/pseudo-classes/valid-invalid_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/tabular-data/the-table-element/table-insertRow_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/tabular-data/the-table-element/table-rows_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/semantics/tabular-data/the-tr-element/rowIndex_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/syntax/parsing/Document.getElementsByTagName-foreign_t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/syntax/serializing-html-fragments/outerHTML_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t01: Skip # Times out. Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t02: RuntimeError # Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t03: RuntimeError # Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t04: RuntimeError # Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t05: RuntimeError # Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t06: RuntimeError # Please triage this failure
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol_t00: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-004_t02: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/elements-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-event-interface/event-path-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-007_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-008_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-009_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-010_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-011_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-012_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-013_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-007_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-010_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-004_t02: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-006_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-003_t02: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-dispatch/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-dispatch/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-dispatch/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-retargeting/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-retargeting/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-retargeting/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/event-retargeting/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-006_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-007_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-008_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-009_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t02: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t03: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t04: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t05: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t06: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/inert-html-elements/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/composition/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/custom-pseudo-elements/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/distribution-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/nested-shadow-trees/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/rendering-shadow-trees/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/reprojection/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-003_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-004_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-006_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-017_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/dom-tree-accessors-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/selectors-api-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/selectors-api-002_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/shadow-root-001_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-005_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-007_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-009_t01: RuntimeError # Please triage this failure
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-011_t01: RuntimeError # Please triage this failure
-WebPlatformTest/webstorage/event_constructor_t01: RuntimeError # Please triage this failure
-WebPlatformTest/webstorage/event_constructor_t02: RuntimeError # Please triage this failure
-WebPlatformTest/webstorage/event_local_key_t01: RuntimeError # Please triage this failure
-WebPlatformTest/webstorage/event_session_key_t01: RuntimeError # Please triage this failure
-
 [ $compiler == dart2js && $browser ]
 LayoutTests/fast/css-generated-content/bug91547_t01: Skip # Test reloads itself. Issue 18558.
 LayoutTests/fast/dom/HTMLButtonElement/change-type_t01: Skip # Test reloads itself. Issue 18558.
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index 1ba9697..fdc9c63 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -2,15 +2,14 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-# dartk: JIT failures
 [ $compiler == dartk ]
+Language/Expressions/Constants/depending_on_itself_t03: Crash
 Language/Expressions/Instance_Creation/Const/canonicalized_t05: RuntimeError
 Language/Expressions/Object_Identity/string_t01: RuntimeError
 Language/Expressions/Strings/adjacent_strings_t02: RuntimeError
 Language/Metadata/before_type_param_t01: RuntimeError
 LibTest/isolate/Isolate/spawnUri_A01_t03: Pass, Timeout
 
-# dartk: precompilation failures
 [ $compiler == dartkp ]
 Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t02: Pass
 Language/Classes/Superinterfaces/more_than_once_t01: MissingCompileTimeError # New entries after going from kernel-service to batch-mode compilation. Please investigate.
@@ -20,6 +19,7 @@
 Language/Expressions/Constants/depending_on_itself_t01: Crash # New entries after going from kernel-service to batch-mode compilation. Please investigate.
 Language/Expressions/Constants/depending_on_itself_t02: MissingCompileTimeError
 Language/Expressions/Constants/depending_on_itself_t02: Crash # New entries after going from kernel-service to batch-mode compilation. Please investigate.
+Language/Expressions/Constants/depending_on_itself_t03: Crash
 Language/Expressions/Null/extend_or_implement_t02: MissingCompileTimeError # New entries after going from kernel-service to batch-mode compilation. Please investigate.
 Language/Expressions/Null/extend_or_implement_t03: MissingCompileTimeError # New entries after going from kernel-service to batch-mode compilation. Please investigate.
 Language/Expressions/Null/extend_or_implement_t04: MissingCompileTimeError # New entries after going from kernel-service to batch-mode compilation. Please investigate.
@@ -38,7 +38,6 @@
 LibTest/core/DateTime/parse_A01_t03: Crash # Please triage.
 LibTest/core/DateTime/parse_A03_t01: Crash # Please triage.
 
-# dartk: JIT failures (debug)
 [ $compiler == dartk && $mode == debug ]
 LibTest/isolate/Isolate/spawnUri_A01_t04: Pass, Slow, Timeout
 
@@ -60,7 +59,6 @@
 Language/Mixins/Mixin_Application/syntax_t16: RuntimeError # Please triaage.
 LibTest/isolate/*/*: Skip
 
-# dartk: precompilation failures (debug)
 [ $compiler == dartkp && $mode == debug ]
 Language/Functions/External_Functions/not_connected_to_a_body_t01: Crash
 
@@ -71,7 +69,6 @@
 Language/Classes/Constructors/Generative_Constructors/execution_t04: Crash
 Language/Classes/Instance_Variables/constant_t01: Crash
 
-# dartk: checked mode failures
 [ $checked && ($compiler == dartk || $compiler == dartkp) ]
 Language/Classes/Constructors/Factories/arguments_type_t01: RuntimeError
 Language/Classes/Constructors/Factories/function_type_t02: Fail # dartbug.com/30527
@@ -127,7 +124,6 @@
 Language/Expressions/Constants/bitwise_operators_t03: Crash
 Language/Expressions/Constants/bitwise_operators_t04: Crash
 Language/Expressions/Constants/bitwise_operators_t06: Crash
-Language/Expressions/Constants/depending_on_itself_t03: Crash
 Language/Expressions/Constants/equals_expression_t03: MissingCompileTimeError
 Language/Expressions/Constants/exception_t04: MissingCompileTimeError
 Language/Expressions/Constants/literal_string_t02: MissingCompileTimeError
@@ -204,6 +200,7 @@
 Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t03: MissingCompileTimeError # Issue 25495
 Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t05: MissingCompileTimeError # Issue 25495
 Language/Types/Static_Types/deferred_type_t01: RuntimeError # Kernel Issue 28335 (deferred libraries)
+Language/Types/Type_Void/syntax_t01: Pass # Issue 30470
 Language/Variables/final_or_static_initialization_t02: MissingCompileTimeError
 Language/Variables/final_or_static_initialization_t03: MissingCompileTimeError
 LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: Skip # No support for deferred libraries.
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 88395aa..0f5f5bf 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -292,6 +292,7 @@
 Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t09: RuntimeError # Issue 25748
 Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t10: RuntimeError # Issue 25748
 Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_sync_t05: RuntimeError # Issue 25662,25634
+Language/Types/Type_Void/syntax_t01: MissingCompileTimeError # Issue co19/30264
 LayoutTests/fast/*: SkipByDesign # DOM not supported on VM.
 LibTest/collection/ListBase/ListBase_class_A01_t01: RuntimeError # Large integers
 LibTest/collection/ListMixin/ListMixin_class_A01_t01: RuntimeError # Large integers
diff --git a/tests/compiler/dart2js/closure/closure_test.dart b/tests/compiler/dart2js/closure/closure_test.dart
index d8143a3..0e8f954 100644
--- a/tests/compiler/dart2js/closure/closure_test.dart
+++ b/tests/compiler/dart2js/closure/closure_test.dart
@@ -5,7 +5,6 @@
 import 'dart:io' hide Link;
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/closure.dart';
-import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
@@ -28,13 +27,7 @@
   asyncTest(() async {
     Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
     await checkTests(dataDir, computeClosureData, computeKernelClosureData,
-        skipForKernel: skipForKernel,
-        options: [
-          Flags.disableTypeInference,
-          // TODO(redemption): Enable inlining.
-          Flags.disableInlining
-        ],
-        args: args);
+        skipForKernel: skipForKernel, args: args);
   });
 }
 
diff --git a/tests/compiler/dart2js/closure/data/generic_strong.dart b/tests/compiler/dart2js/closure/data/generic_strong.dart
new file mode 100644
index 0000000..1fbe9ca
--- /dev/null
+++ b/tests/compiler/dart2js/closure/data/generic_strong.dart
@@ -0,0 +1,140 @@
+// 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 Class1<T> {
+  /*element: Class1.field:hasThis*/
+  var field = /*fields=[T],free=[T],hasThis*/ () => T;
+
+  /*element: Class1.funcField:hasThis*/
+  Function funcField;
+
+  /*element: Class1.:hasThis*/
+  Class1() {
+    field = /*fields=[T],free=[T],hasThis*/ () => T;
+  }
+
+  /*element: Class1.setFunc:hasThis*/
+  Class1.setFunc(this.funcField);
+
+  /*element: Class1.fact:*/
+  factory Class1.fact() => new Class1<T>();
+
+  /*element: Class1.fact2:*/
+  factory Class1.fact2() =>
+      new Class1.setFunc(/*fields=[T],free=[T]*/ () => new Set<T>());
+
+  /*element: Class1.method1:hasThis*/
+  method1() => T;
+
+  /*element: Class1.method2:hasThis*/
+  method2() {
+    return /*fields=[this],free=[this],hasThis*/ () => T;
+  }
+
+  /*element: Class1.method3:hasThis*/
+  method3<S>() => S;
+
+  /*element: Class1.method4:hasThis*/
+  method4<S>() {
+    return /*fields=[S],free=[S],hasThis*/ () => S;
+  }
+
+  /*element: Class1.method5:hasThis*/
+  method5() {
+    /*hasThis*/ local<S>() {
+      return /*fields=[S],free=[S],hasThis*/ () => S;
+    }
+
+    return local<double>();
+  }
+
+  /*element: Class1.method6:hasThis*/
+  method6<S>() {
+    /*fields=[S],free=[S],hasThis*/ local<U>() {
+      return /*fields=[S,U],free=[S,U],hasThis*/ () => '$S$U';
+    }
+
+    var local2 = /*fields=[S,this],free=[S,this],hasThis*/ (o) {
+      return /*fields=[S,this],free=[S,this],hasThis*/ () => new Map<T, S>();
+    };
+    return local2(local<double>());
+  }
+
+  /*element: Class1.staticMethod1:*/
+  static staticMethod1<S>() => S;
+
+  /*element: Class1.staticMethod2:*/
+  static staticMethod2<S>() {
+    return /*fields=[S],free=[S]*/ () => S;
+  }
+
+  /*element: Class1.staticMethod3:*/
+  static staticMethod3() {
+    local<S>() {
+      return /*fields=[S],free=[S]*/ () => S;
+    }
+
+    return local<double>();
+  }
+
+  /*element: Class1.staticMethod4:*/
+  static staticMethod4<S>() {
+    /*fields=[S],free=[S]*/ local<U>() {
+      return /*fields=[S,U],free=[S,U]*/ () => '$S$U';
+    }
+
+    var local2 = /*fields=[S],free=[S]*/ (o) {
+      return /*fields=[S],free=[S]*/ () => new Set<S>();
+    };
+    return local2(local<double>());
+  }
+}
+
+/*element: topLevelMethod1:*/
+topLevelMethod1<S>() => S;
+
+/*element: topLevelMethod2:*/
+topLevelMethod2<S>() {
+  return /*fields=[S],free=[S]*/ () => S;
+}
+
+/*element: topLevelMethod3:*/
+topLevelMethod3() {
+  local<S>() {
+    return /*fields=[S],free=[S]*/ () => S;
+  }
+
+  return local<double>();
+}
+
+/*element: topLevelMethod4:*/
+topLevelMethod4<S>() {
+  /*fields=[S],free=[S]*/ local<U>() {
+    return /*fields=[S,U],free=[S,U]*/ () => '$S$U';
+  }
+
+  var local2 = /*fields=[S],free=[S]*/ (o) {
+    return /*fields=[S],free=[S]*/ () => new Set<S>();
+  };
+  return local2(local<double>());
+}
+
+/*element: main:*/
+main() {
+  new Class1<int>().method1();
+  new Class1<int>.fact().method2();
+  new Class1<int>.fact2().funcField() is Set;
+  new Class1<int>().method3<double>();
+  new Class1<int>().method4<double>();
+  new Class1<int>().method5();
+  new Class1<int>().method6<double>();
+  Class1.staticMethod1<double>();
+  Class1.staticMethod2<double>();
+  Class1.staticMethod3();
+  Class1.staticMethod4<double>();
+  topLevelMethod1<double>();
+  topLevelMethod2<double>();
+  topLevelMethod3();
+  topLevelMethod4<double>();
+}
diff --git a/tests/compiler/dart2js/inference/list_tracer_length_test.dart b/tests/compiler/dart2js/codegen/list_tracer_length_test.dart
similarity index 94%
rename from tests/compiler/dart2js/inference/list_tracer_length_test.dart
rename to tests/compiler/dart2js/codegen/list_tracer_length_test.dart
index 5ad3506..d5e8d72 100644
--- a/tests/compiler/dart2js/inference/list_tracer_length_test.dart
+++ b/tests/compiler/dart2js/codegen/list_tracer_length_test.dart
@@ -2,7 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/// TODO(johnniwinther): Currently this only works with the mock compiler.
+/// TODO(johnniwinther): Move this to the codegen folder. Currently this only
+/// works with the mock compiler.
 
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
diff --git a/tests/compiler/dart2js/inference/list_tracer_node_type_test.dart b/tests/compiler/dart2js/codegen/list_tracer_node_type_test.dart
similarity index 95%
rename from tests/compiler/dart2js/inference/list_tracer_node_type_test.dart
rename to tests/compiler/dart2js/codegen/list_tracer_node_type_test.dart
index b1d315f..03ae59c 100644
--- a/tests/compiler/dart2js/inference/list_tracer_node_type_test.dart
+++ b/tests/compiler/dart2js/codegen/list_tracer_node_type_test.dart
@@ -2,7 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/// TODO(johnniwinther): Currently this only works with the mock compiler.
+/// TODO(johnniwinther): Move this to the codegen folder. Currently this only
+/// works with the mock compiler.
 
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
diff --git a/tests/compiler/dart2js/codegen/number_output_test.dart b/tests/compiler/dart2js/codegen/number_output_test.dart
index 81bc5bc..e755932 100644
--- a/tests/compiler/dart2js/codegen/number_output_test.dart
+++ b/tests/compiler/dart2js/codegen/number_output_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.
 
+// VMOptions= --no_limit_ints_to_64_bits
 import 'dart:async';
 import 'package:expect/expect.dart';
 import 'package:compiler/compiler_new.dart';
diff --git a/tests/compiler/dart2js/inference/type_inference8_test.dart b/tests/compiler/dart2js/codegen/type_inference8_test.dart
similarity index 100%
rename from tests/compiler/dart2js/inference/type_inference8_test.dart
rename to tests/compiler/dart2js/codegen/type_inference8_test.dart
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index dcf56c9..f9c5d2d 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -9,17 +9,16 @@
 codegen/gvn_dynamic_field_get_test: Fail # Issue 18519
 codegen/load_elimination_test: Pass, Slow
 codegen/logical_expression_test: Fail # Issue 17027
-codegen/number_output_test: RuntimeError # Issue 31762
 codegen/simple_function_subtype_test: Fail # simple_function_subtype_test is temporarily(?) disabled due to new method for building function type tests.
 deferred_loading/deferred_loading_test: Slow, Pass
 equivalence/id_equivalence_test: Pass, Slow
-inference/inference_test: Slow, Pass
+inference/inference0_test: Slow, Pass
+inference/inference1_test: Slow, Pass
 inference/simple_inferrer_const_closure2_test: Fail # Issue 16507
 inference/simple_inferrer_const_closure_test: Fail # Issue 16507
 inference/simple_inferrer_global_field_closure_test: Fail # Issue 16507
 inference/swarm_test: Slow, Pass
 inlining/inlining_test: Slow, Pass
-js/js_parser_test: RuntimeError # Issue 31762
 kernel/*: Slow, Pass
 kernel/compile_from_dill_fast_startup_test: RuntimeError # Test must be updated to support FE with patching.
 kernel/compile_from_dill_test: RuntimeError # Test must be updated to support FE with patching.
@@ -47,18 +46,13 @@
 serialization/compilation4_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
 serialization/compilation5_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
 serialization/compilation_1_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
-serialization/equivalence_test: RuntimeError # Issue 31762
-serialization/impact_test: RuntimeError # Issue 31762
 serialization/library_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
-serialization/model0_test: RuntimeError # Issue 31762
 serialization/model1_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
 serialization/model3_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
 serialization/model4_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
 serialization/model5_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
 serialization/model_1_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
 serialization/native_data_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
-serialization/reserialization_test: RuntimeError # Issue 31762
-serialization/resolved_ast_test: RuntimeError # Issue 31762
 sourcemaps/source_mapping_invokes_test: Pass, Slow
 sourcemaps/source_mapping_operators_test: Pass, Slow
 sourcemaps/source_mapping_test: Pass, Slow
diff --git a/tests/compiler/dart2js/data/deferred_helper.dart b/tests/compiler/dart2js/deferred/data/deferred_helper.dart
similarity index 100%
rename from tests/compiler/dart2js/data/deferred_helper.dart
rename to tests/compiler/dart2js/deferred/data/deferred_helper.dart
diff --git a/tests/compiler/dart2js/data/deferred_lib.dart b/tests/compiler/dart2js/deferred/data/deferred_lib.dart
similarity index 100%
rename from tests/compiler/dart2js/data/deferred_lib.dart
rename to tests/compiler/dart2js/deferred/data/deferred_lib.dart
diff --git a/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart b/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
index 59b43ee..c4f9e1a 100644
--- a/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
+++ b/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
@@ -18,9 +18,7 @@
 
 import 'package:kernel/ast.dart' as ir;
 
-const List<String> skipForKernel = const <String>[
-  'dont_inline_deferred_constants.dart',
-];
+const List<String> skipForKernel = const <String>[];
 
 ///  Add in options to pass to the compiler like
 /// `Flags.disableTypeInference` or `Flags.disableInlining`
@@ -97,6 +95,7 @@
   if (member is FieldElement && member.isConst) {
     var node = member.initializer;
     var constant = compiler.constants.getConstantValue(member.constant);
+    if (constant.isPrimitive) return;
     _registerValue(
         new NodeId(node.getBeginToken().charOffset, IdKind.node),
         outputUnitString(data.outputUnitForConstant(constant)),
@@ -136,6 +135,7 @@
   if (memberNode is ir.Field && memberNode.isConst) {
     ir.Expression node = memberNode.initializer;
     ConstantValue constant = elementMap.getConstantValue(node);
+    if (constant.isPrimitive) return;
     SourceSpan span = computeSourceSpanFromTreeNode(node);
     if (node is ir.ConstructorInvocation ||
         node is ir.ListLiteral ||
diff --git a/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib3.dart b/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib3.dart
index a3a279d..1cb567c9 100644
--- a/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib3.dart
+++ b/tests/compiler/dart2js/deferred_loading/libs/deferred_constant1_lib3.dart
@@ -48,7 +48,7 @@
 /// ---------------------------------------------------------------------------
 
 /*element: C6:OutputUnit(1, {lib2})*/
-const C6 = /*OutputUnit(1, {lib2})*/ "string6";
+const C6 = "string6";
 
 /*element: C7:OutputUnit(1, {lib2})*/
 const C7 = /*OutputUnit(1, {lib2})*/ const C(const C(7));
diff --git a/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib1.dart b/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib1.dart
index 5f3267e..1fefeae 100644
--- a/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib1.dart
@@ -6,18 +6,27 @@
 import "dont_inline_deferred_constants_main.dart" as main;
 
 /*element: C1:OutputUnit(1, {lib1})*/
-const C1 = /*OutputUnit(1, {lib1})*/ "string1";
+const C1 = "string1";
+
+/*element: C1b:OutputUnit(1, {lib1})*/
+const C1b = /*OutputUnit(1, {lib1})*/ const C("string1");
 
 /*element: C2:OutputUnit(1, {lib1})*/
-const C2 = /*OutputUnit(1, {lib1})*/ 1010;
+const C2 = 1010;
+
+/*element: C2b:OutputUnit(1, {lib1})*/
+const C2b = /*OutputUnit(1, {lib1})*/ const C(1010);
 
 class D {
   /*element: D.C3:OutputUnit(1, {lib1})*/
-  static const C3 = /*OutputUnit(1, {lib1})*/ "string2";
+  static const C3 = "string2";
+
+  /*element: D.C3b:OutputUnit(1, {lib1})*/
+  static const C3b = /*OutputUnit(1, {lib1})*/ const C("string2");
 }
 
 /*element: C4:OutputUnit(1, {lib1})*/
-const C4 = /*OutputUnit(main, {})*/ "string4";
+const C4 = "string4";
 
 /*element: C5:OutputUnit(1, {lib1})*/
 const C5 = /*OutputUnit(main, {})*/ const C(1);
diff --git a/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib2.dart b/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib2.dart
index c53f32a..c1d65c5 100644
--- a/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_lib2.dart
@@ -6,7 +6,7 @@
 import "dont_inline_deferred_constants_main.dart" as main;
 
 /*element: C4:OutputUnit(3, {lib2})*/
-const C4 = /*OutputUnit(main, {})*/ "string4";
+const C4 = "string4";
 
 /*element: C5:OutputUnit(3, {lib2})*/
 const C5 = /*OutputUnit(main, {})*/ const C(1);
diff --git a/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_main.dart b/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_main.dart
index 4e781f5..a68724a 100644
--- a/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_main.dart
+++ b/tests/compiler/dart2js/deferred_loading/libs/dont_inline_deferred_constants_main.dart
@@ -6,7 +6,7 @@
 import 'dont_inline_deferred_constants_lib2.dart' deferred as lib2;
 
 /*element: c:OutputUnit(main, {})*/
-const c = /*OutputUnit(main, {})*/ "string3";
+const c = "string3";
 
 class C {
   /*element: C.p:OutputUnit(main, {})*/
@@ -26,8 +26,11 @@
       lib1.foo();
       lib2.foo();
       print(lib1.C1);
+      print(lib1.C1b);
       print(lib1.C2);
+      print(lib1.C2b);
       print(lib1.D.C3);
+      print(lib1.D.C3b);
       print(c);
       print(lib1.C4);
       print(lib2.C4);
diff --git a/tests/compiler/dart2js/end_to_end/dart2js_batch2_test.dart b/tests/compiler/dart2js/end_to_end/dart2js_batch2_test.dart
index 76d0448..96717ad 100644
--- a/tests/compiler/dart2js/end_to_end/dart2js_batch2_test.dart
+++ b/tests/compiler/dart2js/end_to_end/dart2js_batch2_test.dart
@@ -39,7 +39,7 @@
     tmpDir = directory;
     String newPath = path.join(directory.path, "dart2js_batch2_run.dart");
     File source = new File.fromUri(
-        Platform.script.resolve("../data/dart2js_batch2_run.dart"));
+        Platform.script.resolve("data/dart2js_batch2_run.dart"));
     source.copySync(newPath);
   });
 }
diff --git a/tests/compiler/dart2js/data/dart2js_batch2_run.dart b/tests/compiler/dart2js/end_to_end/data/dart2js_batch2_run.dart
similarity index 100%
rename from tests/compiler/dart2js/data/dart2js_batch2_run.dart
rename to tests/compiler/dart2js/end_to_end/data/dart2js_batch2_run.dart
diff --git a/tests/compiler/dart2js/data/exit_code_helper.dart b/tests/compiler/dart2js/end_to_end/data/exit_code_helper.dart
similarity index 100%
rename from tests/compiler/dart2js/data/exit_code_helper.dart
rename to tests/compiler/dart2js/end_to_end/data/exit_code_helper.dart
diff --git a/tests/compiler/dart2js/end_to_end/exit_code_test.dart b/tests/compiler/dart2js/end_to_end/exit_code_test.dart
index 9898b8b..cd70154 100644
--- a/tests/compiler/dart2js/end_to_end/exit_code_test.dart
+++ b/tests/compiler/dart2js/end_to_end/exit_code_test.dart
@@ -242,7 +242,7 @@
 
     List<String> args = new List<String>.from(options)
       ..add("--library-root=${Uri.base.resolve('sdk/')}")
-      ..add("tests/compiler/dart2js/data/exit_code_helper.dart");
+      ..add("tests/compiler/dart2js/end_to_end/data/exit_code_helper.dart");
     Future result = entry.internalMain(args);
     return result.catchError((e, s) {
       // Capture crashes.
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
index 24f265c..2d85a02 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
@@ -363,19 +363,33 @@
     bool forUserLibrariesOnly: true,
     Callback setUpFunction,
     ComputeClassDataFunction computeClassDataFromAst,
-    ComputeClassDataFunction computeClassDataFromKernel}) async {
+    ComputeClassDataFunction computeClassDataFromKernel,
+    int shards: 1,
+    int shardIndex: 0}) async {
   args = args.toList();
   bool verbose = args.remove('-v');
+  bool shouldContinue = args.remove('-c');
+  bool continued = false;
 
   var relativeDir = dataDir.uri.path.replaceAll(Uri.base.path, '');
   print('Data dir: ${relativeDir}');
-  await for (FileSystemEntity entity in dataDir.list()) {
+  List<FileSystemEntity> entities = dataDir.listSync();
+  if (shards > 1) {
+    int start = entities.length * shardIndex ~/ shards;
+    int end = entities.length * (shardIndex + 1) ~/ shards;
+    entities = entities.sublist(start, end);
+  }
+  for (FileSystemEntity entity in entities) {
     String name = entity.uri.pathSegments.last;
-    if (args.isNotEmpty && !args.contains(name)) continue;
+    if (args.isNotEmpty && !args.contains(name) && !continued) continue;
+    if (shouldContinue) continued = true;
     List<String> testOptions = options.toList();
     if (name.endsWith('_ea.dart')) {
       testOptions.add(Flags.enableAsserts);
+    } else if (name.endsWith('_strong.dart')) {
+      testOptions.add(Flags.strongMode);
     }
+
     print('----------------------------------------------------------------');
     print('Test: $name');
     // Pretend this is a dart2js_native test to allow use of 'native' keyword
@@ -420,7 +434,7 @@
 
     if (setUpFunction != null) setUpFunction();
 
-    if (skipForAst.contains(name)) {
+    if (skipForAst.contains(name) || testOptions.contains(Flags.strongMode)) {
       print('--skipped for ast-----------------------------------------------');
     } else {
       print('--from ast------------------------------------------------------');
@@ -531,6 +545,12 @@
   if (id is NodeId) {
     return new SourceSpan(mainUri, id.value, id.value + 1);
   } else if (id is ElementId) {
+    String memberName = id.memberName;
+    bool isSetter = false;
+    if (memberName != '[]=' && memberName.endsWith('=')) {
+      isSetter = true;
+      memberName = memberName.substring(0, memberName.length - 1);
+    }
     LibraryEntity library = elementEnvironment.lookupLibrary(mainUri);
     if (id.className != null) {
       ClassEntity cls =
@@ -538,23 +558,22 @@
       if (cls == null) {
         throw new ArgumentError("No class '${id.className}' in $mainUri.");
       }
-      MemberEntity member =
-          elementEnvironment.lookupClassMember(cls, id.memberName);
+      MemberEntity member = elementEnvironment
+          .lookupClassMember(cls, memberName, setter: isSetter);
       if (member == null) {
         ConstructorEntity constructor =
-            elementEnvironment.lookupConstructor(cls, id.memberName);
+            elementEnvironment.lookupConstructor(cls, memberName);
         if (constructor == null) {
-          throw new ArgumentError(
-              "No class member '${id.memberName}' in $cls.");
+          throw new ArgumentError("No class member '${memberName}' in $cls.");
         }
         return constructor;
       }
       return member;
     } else {
-      MemberEntity member =
-          elementEnvironment.lookupLibraryMember(library, id.memberName);
+      MemberEntity member = elementEnvironment
+          .lookupLibraryMember(library, memberName, setter: isSetter);
       if (member == null) {
-        throw new ArgumentError("No member '${id.memberName}' in $mainUri.");
+        throw new ArgumentError("No member '${memberName}' in $mainUri.");
       }
       return member;
     }
diff --git a/tests/compiler/dart2js/equivalence/show_helper.dart b/tests/compiler/dart2js/equivalence/show_helper.dart
index d37f502..bb72432 100644
--- a/tests/compiler/dart2js/equivalence/show_helper.dart
+++ b/tests/compiler/dart2js/equivalence/show_helper.dart
@@ -8,37 +8,40 @@
 import 'package:args/args.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/filenames.dart';
-import 'package:compiler/src/inferrer/inferrer_engine.dart';
 import 'package:compiler/src/io/source_file.dart';
 import 'package:compiler/src/source_file_provider.dart';
 import '../kernel/test_helpers.dart';
 import 'id_equivalence_helper.dart';
 
-show(List<String> args, ComputeMemberDataFunction computeAstData,
-    ComputeMemberDataFunction computeKernelData) async {
+ArgParser createArgParser() {
   ArgParser argParser = new ArgParser(allowTrailingOptions: true);
   argParser.addFlag('verbose', negatable: true, defaultsTo: false);
   argParser.addFlag('colors', negatable: true);
   argParser.addFlag('all', negatable: false, defaultsTo: false);
   argParser.addFlag('use-kernel', negatable: false, defaultsTo: false);
-  ArgResults argResults = argParser.parse(args);
+  return argParser;
+}
+
+show(ArgResults argResults, ComputeMemberDataFunction computeAstData,
+    ComputeMemberDataFunction computeKernelData) async {
   if (argResults.wasParsed('colors')) {
     useColors = argResults['colors'];
   }
   bool verbose = argResults['verbose'];
   bool useKernel = argResults['use-kernel'];
 
-  InferrerEngineImpl.useSorterForTesting = true;
   String file = argResults.rest.first;
   Uri entryPoint = Uri.base.resolve(nativeToUriPath(file));
   List<String> show;
-  if (argResults.rest.length > 1) {
+  if (argResults['all']) {
+    show = null;
+  } else if (argResults.rest.length > 1) {
     show = argResults.rest.skip(1).toList();
   } else {
     show = [entryPoint.pathSegments.last];
   }
 
-  List<String> options = <String>[];
+  List<String> options = <String>[stopAfterTypeInference];
   if (useKernel) {
     options.add(Flags.useKernel);
   }
diff --git a/tests/compiler/dart2js/generic_methods/generic_method_test.dart b/tests/compiler/dart2js/generic_methods/generic_method_test.dart
index ce8349f..4065293 100644
--- a/tests/compiler/dart2js/generic_methods/generic_method_test.dart
+++ b/tests/compiler/dart2js/generic_methods/generic_method_test.dart
@@ -15,13 +15,8 @@
 const String SOURCE = r'''
 import 'package:meta/dart2js.dart';
 
-// TODO(johnniwinther): Remove these when the needed RTI is correctly computed
-// for function type variables.
-test(o) => o is double || o is String || o is int;
-
 @noInline
 method1<T>(T t) {
-  test(t);
   print('method1:');
   print('$t is $T = ${t is T}');
   print('"foo" is $T = ${"foo" is T}');
@@ -30,8 +25,6 @@
 
 @noInline
 method2<T, S>(S s, T t) {
-  test(t);
-  test(s);
   print('method2:');
   print('$t is $T = ${t is T}');
   print('$s is $T = ${s is T}');
@@ -42,8 +35,6 @@
 
 @tryInline
 method3<T, S>(T t, S s) {
-  test(t);
-  test(s);
   print('method3:');
   print('$t is $T = ${t is T}');
   print('$s is $T = ${s is T}');
@@ -76,7 +67,6 @@
 class Class2 {
   @tryInline
   method5<T>(T t) {
-    test(t);
     print('Class2.method5:');
     print('$t is $T = ${t is T}');
     print('"foo" is $T = ${"foo" is T}');
@@ -95,7 +85,6 @@
 class Class3 {
   @noInline
   method6<T>(T t) {
-    test(t);
     print('Class3.method6:');
     print('$t is $T = ${t is T}');
     print('"foo" is $T = ${"foo" is T}');
@@ -168,11 +157,13 @@
 
 main(List<String> args) {
   asyncTest(() async {
-    Compiler compiler = await runWithD8(
-        memorySourceFiles: {'main.dart': SOURCE},
-        options: [Flags.useKernel, Flags.strongMode],
-        expectedOutput: OUTPUT,
-        printJs: args.contains('-v'));
+    Compiler compiler = await runWithD8(memorySourceFiles: {
+      'main.dart': SOURCE
+    }, options: [
+      Flags.useKernel,
+      Flags.strongMode,
+      Flags.disableRtiOptimization
+    ], expectedOutput: OUTPUT, printJs: args.contains('-v'));
     ClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
     ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
 
diff --git a/tests/compiler/dart2js/inference/call_site_simple_type_inferer_test.dart b/tests/compiler/dart2js/inference/call_site_simple_type_inferer_test.dart
deleted file mode 100644
index 4047641..0000000
--- a/tests/compiler/dart2js/inference/call_site_simple_type_inferer_test.dart
+++ /dev/null
@@ -1,297 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-/// Currently it only works with the mock compiler.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/elements/elements.dart';
-import 'package:compiler/src/types/masks.dart';
-import 'package:expect/expect.dart';
-
-import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
-
-void compileAndFind(String code, String className, String memberName,
-    bool disableInlining, check(compiler, element)) {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(code, uri, disableInlining: disableInlining);
-  asyncTest(() => compiler.run(uri).then((_) {
-        ClassElement cls = findElement(compiler, className);
-        var member = cls.lookupLocalMember(memberName);
-        return check(compiler, member);
-      }));
-}
-
-const String TEST_1 = r"""
-  class A {
-    x(p) => p;
-  }
-  main() { new A().x("s"); }
-""";
-
-const String TEST_2 = r"""
-  class A {
-    x(p) => p;
-  }
-  main() { new A().x(1); }
-""";
-
-const String TEST_3 = r"""
-  class A {
-    x(p) => x(p - 1);
-  }
-  main() { new A().x(1); }
-""";
-
-const String TEST_4 = r"""
-  class A {
-    x(p) => x(p - 1);
-  }
-  main() { new A().x(1.5); }
-""";
-
-const String TEST_5 = r"""
-  class A {
-    x(p) => p;
-  }
-  main() {
-    new A().x(1);
-    new A().x(1.5);
-  }
-""";
-
-const String TEST_6 = r"""
-  class A {
-    x(p) => p;
-  }
-  main() {
-    new A().x(1.5);
-    new A().x(1);
-  }
-""";
-
-const String TEST_7a = r"""
-  class A {
-    x(p) => x("x");
-  }
-  main() {
-    new A().x(1);
-  }
-""";
-
-const String TEST_7b = r"""
-  class A {
-    x(p) => x("x");
-  }
-  main() {
-    new A().x({});
-  }
-""";
-
-const String TEST_8 = r"""
-  class A {
-    x(p1, p2, p3) => x(p1, "x", {});
-  }
-  main() {
-    new A().x(1, 2, 3);
-  }
-""";
-
-const String TEST_9 = r"""
-  class A {
-    x(p1, p2) => x(p1, p2);
-  }
-  main() {
-    new A().x(1, 2);
-  }
-""";
-
-const String TEST_10 = r"""
-  class A {
-    x(p1, p2) => x(p1, p2);
-  }
-  void f(p) {
-    p.x("x", "y");
-  }
-  main() {
-    f(null);
-    new A().x(1, 2);
-  }
-""";
-
-const String TEST_11 = r"""
-  class A {
-    x(p1, p2) => x(1, 2);
-  }
-  main() {
-    new A().x("x", "y");
-  }
-""";
-
-const String TEST_12 = r"""
-  class A {
-    x(p1, [p2 = 1]) => 1;
-  }
-  main() {
-    new A().x("x", 1);
-    new A().x("x");
-  }
-""";
-
-const String TEST_13 = r"""
-  class A {
-    x(p) => 1;
-  }
-  f(p) => p.x(2.2);
-  main() {
-    new A().x(1);
-    f(new A());
-  }
-""";
-
-const String TEST_14 = r"""
-  class A {
-    x(p1, [p2 = "s"]) => 1;
-  }
-  main() {
-    new A().x(1);
-  }
-""";
-
-const String TEST_15 = r"""
-  class A {
-    x(p1, [p2 = true]) => 1;
-  }
-  f(p) => p.a("x");
-  main() {
-    new A().x("x");
-    new A().x("x", false);
-    f(null);
-  }
-""";
-
-const String TEST_16 = r"""
-  class A {
-    x(p1, [p2 = 1, p3 = "s"]) => 1;
-  }
-  main() {
-    new A().x(1);
-    new A().x(1, 2);
-    new A().x(1, 2, "x");
-    new A().x(1, p2: 2);
-    new A().x(1, p3: "x");
-    new A().x(1, p3: "x", p2: 2);
-    new A().x(1, p2: 2, p3: "x");
-  }
-""";
-
-const String TEST_17 = r"""
-  class A {
-    x(p1, [p2 = 1, p3 = "s"]) => 1;
-  }
-  main() {
-    new A().x(1, true, 1.1);
-    new A().x(1, false, 2.2);
-    new A().x(1, p3: 3.3, p2: true);
-    new A().x(1, p2: false, p3: 4.4);
-  }
-""";
-
-const String TEST_18 = r"""
-  class A {
-    x(p1, p2) => x(p1, p2);
-  }
-  class B extends A {
-  }
-  main() {
-    new B().x("a", "b");
-    new A().x(1, 2);
-  }
-""";
-
-typedef List<TypeMask> TestCallback(CommonMasks masks);
-
-void doTest(String test, bool enableInlining, TestCallback f) {
-  compileAndFind(test, 'A', 'x', enableInlining, (compiler, element) {
-    var inferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = inferrer.closedWorld;
-    var expectedTypes = f(closedWorld.commonMasks);
-    var signature = element.functionSignature;
-    int index = 0;
-    signature.forEachParameter((Element element) {
-      Expect.equals(expectedTypes[index++],
-          simplify(inferrer.getTypeOfParameter(element), closedWorld), test);
-    });
-    Expect.equals(index, expectedTypes.length);
-  });
-}
-
-void runTest(String test, TestCallback f) {
-  doTest(test, false, f);
-  doTest(test, true, f);
-}
-
-void test() {
-  runTest(TEST_1, (commonMasks) => [commonMasks.stringType]);
-  runTest(TEST_2, (commonMasks) => [commonMasks.uint31Type]);
-  runTest(TEST_3, (commonMasks) => [commonMasks.intType]);
-  runTest(TEST_4, (commonMasks) => [commonMasks.numType]);
-  runTest(TEST_5, (commonMasks) => [commonMasks.numType]);
-  runTest(TEST_6, (commonMasks) => [commonMasks.numType]);
-  runTest(TEST_7a, (commonMasks) => [commonMasks.interceptorType]);
-  runTest(TEST_7b, (commonMasks) => [commonMasks.dynamicType.nonNullable()]);
-
-  runTest(
-      TEST_8,
-      (commonMasks) => [
-            commonMasks.uint31Type,
-            commonMasks.interceptorType,
-            commonMasks.dynamicType.nonNullable()
-          ]);
-  runTest(TEST_9,
-      (commonMasks) => [commonMasks.uint31Type, commonMasks.uint31Type]);
-  runTest(TEST_10,
-      (commonMasks) => [commonMasks.uint31Type, commonMasks.uint31Type]);
-  runTest(
-      TEST_11,
-      (commonMasks) =>
-          [commonMasks.interceptorType, commonMasks.interceptorType]);
-
-  runTest(TEST_12,
-      (commonMasks) => [commonMasks.stringType, commonMasks.uint31Type]);
-
-  runTest(TEST_13, (commonMasks) => [commonMasks.numType]);
-
-  runTest(TEST_14,
-      (commonMasks) => [commonMasks.uint31Type, commonMasks.stringType]);
-
-  runTest(
-      TEST_15, (commonMasks) => [commonMasks.stringType, commonMasks.boolType]);
-
-  runTest(
-      TEST_16,
-      (commonMasks) => [
-            commonMasks.uint31Type,
-            commonMasks.uint31Type,
-            commonMasks.stringType
-          ]);
-
-  runTest(
-      TEST_17,
-      (commonMasks) => [
-            commonMasks.uint31Type,
-            commonMasks.boolType,
-            commonMasks.doubleType
-          ]);
-
-  runTest(
-      TEST_18,
-      (commonMasks) =>
-          [commonMasks.interceptorType, commonMasks.interceptorType]);
-}
-
-void main() {
-  test();
-}
diff --git a/tests/compiler/dart2js/inference/callers/field_access.dart b/tests/compiler/dart2js/inference/callers/field_access.dart
new file mode 100644
index 0000000..71699e9
--- /dev/null
+++ b/tests/compiler/dart2js/inference/callers/field_access.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: B.:[main]*/
+class A {
+  /*element: A.field:[main]*/
+  var field;
+}
+
+/*element: A.:[main]*/
+class B {
+  /*element: B.field:[main]*/
+  var field;
+}
+
+main() {
+  new A().field;
+  new B().field;
+}
diff --git a/tests/compiler/dart2js/inference/callers_test.dart b/tests/compiler/dart2js/inference/callers_test.dart
new file mode 100644
index 0000000..b88f07f
--- /dev/null
+++ b/tests/compiler/dart2js/inference/callers_test.dart
@@ -0,0 +1,145 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/closure.dart';
+import 'package:compiler/src/common.dart';
+import 'package:compiler/src/compiler.dart';
+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/inferrer/inferrer_engine.dart';
+import 'package:compiler/src/inferrer/type_graph_inferrer.dart';
+import 'package:compiler/src/kernel/element_map.dart';
+import 'package:compiler/src/kernel/kernel_backend_strategy.dart';
+import 'package:compiler/src/tree/nodes.dart' as ast;
+import 'package:kernel/ast.dart' as ir;
+import '../equivalence/id_equivalence.dart';
+import '../equivalence/id_equivalence_helper.dart';
+
+main(List<String> args) {
+  InferrerEngineImpl.retainDataForTesting = true;
+  asyncTest(() async {
+    Directory dataDir =
+        new Directory.fromUri(Platform.script.resolve('callers'));
+    await checkTests(dataDir, computeMemberAstCallers, computeMemberIrCallers,
+        args: args, options: [stopAfterTypeInference]);
+  });
+}
+
+/// Compute callers data for [_member] as a [MemberElement].
+///
+/// Fills [actualMap] with the data.
+void computeMemberAstCallers(
+    Compiler compiler, MemberEntity _member, Map<Id, ActualData> actualMap,
+    {bool verbose: false}) {
+  MemberElement member = _member;
+  ResolvedAst resolvedAst = member.resolvedAst;
+  compiler.reporter.withCurrentElement(member.implementation, () {
+    new CallersAstComputer(compiler.reporter, actualMap, resolvedAst,
+            compiler.globalInference.typesInferrerInternal)
+        .run();
+  });
+}
+
+abstract class ComputeValueMixin<T> {
+  TypeGraphInferrer get inferrer;
+
+  String getMemberValue(MemberEntity member) {
+    Iterable<MemberEntity> callers = inferrer.getCallersOfForTesting(member);
+    if (callers != null) {
+      List<String> names = callers.map((MemberEntity member) {
+        StringBuffer sb = new StringBuffer();
+        if (member.enclosingClass != null) {
+          sb.write(member.enclosingClass.name);
+          sb.write('.');
+        }
+        sb.write(member.name);
+        if (member.isSetter) {
+          sb.write('=');
+        }
+        return sb.toString();
+      }).toList()
+        ..sort();
+      return '[${names.join(',')}]';
+    }
+    return null;
+  }
+}
+
+/// AST visitor for computing side effects data for a member.
+class CallersAstComputer extends AstDataExtractor
+    with ComputeValueMixin<ast.Node> {
+  final TypeGraphInferrer inferrer;
+
+  CallersAstComputer(DiagnosticReporter reporter, Map<Id, ActualData> actualMap,
+      ResolvedAst resolvedAst, this.inferrer)
+      : super(reporter, actualMap, resolvedAst);
+
+  @override
+  String computeElementValue(Id id, AstElement element) {
+    if (element.isParameter) {
+      return null;
+    } else if (element.isLocal && element.isFunction) {
+      LocalFunctionElement localFunction = element;
+      return getMemberValue(localFunction.callMethod);
+    } else {
+      MemberElement member = element.declaration;
+      return getMemberValue(member);
+    }
+  }
+
+  @override
+  String computeNodeValue(Id id, ast.Node node, [AstElement element]) {
+    if (element != null && element.isLocal && element.isFunction) {
+      return computeElementValue(id, element);
+    }
+    return null;
+  }
+}
+
+/// Compute callers data for [member] from kernel based inference.
+///
+/// Fills [actualMap] with the data.
+void computeMemberIrCallers(
+    Compiler compiler, MemberEntity member, Map<Id, ActualData> actualMap,
+    {bool verbose: false}) {
+  KernelBackendStrategy backendStrategy = compiler.backendStrategy;
+  KernelToElementMapForBuilding elementMap = backendStrategy.elementMap;
+  MemberDefinition definition = elementMap.getMemberDefinition(member);
+  new CallersIrComputer(
+          compiler.reporter,
+          actualMap,
+          elementMap,
+          compiler.globalInference.typesInferrerInternal,
+          backendStrategy.closureDataLookup as ClosureDataLookup<ir.Node>)
+      .run(definition.node);
+}
+
+/// AST visitor for computing side effects data for a member.
+class CallersIrComputer extends IrDataExtractor
+    with ComputeValueMixin<ir.Node> {
+  final TypeGraphInferrer inferrer;
+  final KernelToElementMapForBuilding _elementMap;
+  final ClosureDataLookup<ir.Node> _closureDataLookup;
+
+  CallersIrComputer(DiagnosticReporter reporter, Map<Id, ActualData> actualMap,
+      this._elementMap, this.inferrer, this._closureDataLookup)
+      : super(reporter, actualMap);
+
+  @override
+  String computeMemberValue(Id id, ir.Member node) {
+    return getMemberValue(_elementMap.getMember(node));
+  }
+
+  @override
+  String computeNodeValue(Id id, ir.TreeNode node) {
+    if (node is ir.FunctionExpression || node is ir.FunctionDeclaration) {
+      ClosureRepresentationInfo info = _closureDataLookup.getClosureInfo(node);
+      return getMemberValue(info.callMethod);
+    }
+    return null;
+  }
+}
diff --git a/tests/compiler/dart2js/inference/concrete_type_inference_test.dart b/tests/compiler/dart2js/inference/concrete_type_inference_test.dart
deleted file mode 100644
index 4b1b6b5..0000000
--- a/tests/compiler/dart2js/inference/concrete_type_inference_test.dart
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'dart:async';
-import 'package:expect/expect.dart';
-import 'package:async_helper/async_helper.dart';
-import '../compiler_helper.dart';
-
-Future compileAndFind(String code, String name, check(compiler, element)) {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(code, uri);
-  return compiler.run(uri).then((_) {
-    var element = findElement(compiler, name);
-    check(compiler, element);
-  });
-}
-
-void checkPrintType(String expression, checkType(closedWorld, type)) {
-  asyncTest(() => compileAndFind('main() { print($expression); }', 'print',
-          (compiler, printElement) {
-        var parameter = printElement.functionSignature.requiredParameters.first;
-        checkType(compiler.resolutionWorldBuilder.closedWorldForTesting,
-            _typeOf(compiler, parameter));
-      }));
-
-  asyncTest(() =>
-      compileAndFind('main() { var x = print; print($expression); }', 'print',
-          (compiler, printElement) {
-        var parameter = printElement.functionSignature.requiredParameters.first;
-        checkType(compiler.resolutionWorldBuilder.closedWorldForTesting,
-            _typeOf(compiler, parameter));
-      }));
-
-  asyncTest(() => compileAndFind(
-          'main() { print($expression); print($expression); }', 'print',
-          (compiler, printElement) {
-        var parameter = printElement.functionSignature.requiredParameters.first;
-        checkType(compiler.resolutionWorldBuilder.closedWorldForTesting,
-            _typeOf(compiler, parameter));
-      }));
-}
-
-void testBasicTypes() {
-  checkPrintType('true', (closedWorld, type) {
-    if (type.isForwarding) type = type.forwardTo;
-    Expect.identical(closedWorld.commonMasks.boolType, type);
-  });
-  checkPrintType('1.5', (closedWorld, type) {
-    Expect.identical(closedWorld.commonMasks.doubleType, type);
-  });
-  checkPrintType('1', (closedWorld, type) {
-    Expect.identical(closedWorld.commonMasks.uint31Type, type);
-  });
-  checkPrintType('[]', (closedWorld, type) {
-    if (type.isForwarding) type = type.forwardTo;
-    Expect.identical(closedWorld.commonMasks.growableListType, type);
-  });
-  checkPrintType('null', (closedWorld, type) {
-    Expect.identical(closedWorld.commonMasks.nullType, type);
-  });
-  checkPrintType('"foo"', (closedWorld, type) {
-    Expect.isTrue(
-        closedWorld.commonMasks.stringType.containsOnlyString(closedWorld));
-  });
-}
-
-void testOptionalParameters() {
-  compileAndFind('fisk(a, [b, c]) {} main() { fisk(1); }', 'fisk',
-      (compiler, fiskElement) {
-    var firstParameter = fiskElement.functionSignature.requiredParameters[0];
-    var secondParameter = fiskElement.functionSignature.optionalParameters[0];
-    var thirdParameter = fiskElement.functionSignature.optionalParameters[1];
-    var commonMasks =
-        compiler.resolutionWorldBuilder.closedWorldForTesting.commonMasks;
-    Expect.identical(commonMasks.uint31Type, _typeOf(compiler, firstParameter));
-    Expect.identical(commonMasks.nullType, _typeOf(compiler, secondParameter));
-    Expect.identical(commonMasks.nullType, _typeOf(compiler, thirdParameter));
-  });
-}
-
-void main() {
-  testBasicTypes();
-  testOptionalParameters();
-}
-
-_typeOf(compiler, parameter) =>
-    compiler.globalInference.results.resultOfParameter(parameter).type;
diff --git a/tests/compiler/dart2js/inference/data/call_site.dart b/tests/compiler/dart2js/inference/data/call_site.dart
new file mode 100644
index 0000000..e9bcd9f
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/call_site.dart
@@ -0,0 +1,309 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: main:[null]*/
+main() {
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+  test7();
+  test8();
+  test9();
+  test10();
+  test11();
+  test12();
+  test13();
+  test14();
+  test15();
+  test16();
+  test17();
+  test18();
+  test19();
+}
+
+/*element: A1.:[exact=A1]*/
+class A1 {
+  /*element: A1.x1:Value([exact=JSString], value: "s")*/
+  x1(
+          /*Value([exact=JSString], value: "s")*/ p) =>
+      p;
+}
+
+/*element: test1:[null]*/
+test1() {
+  new A1(). /*invoke: [exact=A1]*/ x1("s");
+}
+
+/*element: A2.:[exact=A2]*/
+class A2 {
+  /*element: A2.x2:[exact=JSUInt31]*/
+  x2(/*[exact=JSUInt31]*/ p) => p;
+}
+
+/*element: test2:[null]*/
+test2() {
+  new A2(). /*invoke: [exact=A2]*/ x2(1);
+}
+
+/*element: A3.:[exact=A3]*/
+class A3 {
+  /*element: A3.x3:[empty]*/
+  x3(/*[subclass=JSInt]*/ p) => /*invoke: [exact=A3]*/ x3(
+      p /*invoke: [subclass=JSInt]*/ - 1);
+}
+
+/*element: test3:[null]*/
+test3() {
+  new A3(). /*invoke: [exact=A3]*/ x3(1);
+}
+
+/*element: A4.:[exact=A4]*/
+class A4 {
+  /*element: A4.x4:[empty]*/
+  x4(/*[subclass=JSNumber]*/ p) => /*invoke: [exact=A4]*/ x4(
+      p /*invoke: [subclass=JSNumber]*/ - 1);
+}
+
+/*element: test4:[null]*/
+test4() {
+  new A4(). /*invoke: [exact=A4]*/ x4(1.5);
+}
+
+/*element: A5.:[exact=A5]*/
+class A5 {
+  /*element: A5.x5:Union([exact=JSDouble], [exact=JSUInt31])*/
+  x5(
+          /*Union([exact=JSDouble], [exact=JSUInt31])*/ p) =>
+      p;
+}
+
+/*element: test5:[null]*/
+test5() {
+  new A5(). /*invoke: [exact=A5]*/ x5(1);
+  new A5(). /*invoke: [exact=A5]*/ x5(1.5);
+}
+
+/*element: A6.:[exact=A6]*/
+class A6 {
+  /*element: A6.x6:Union([exact=JSDouble], [exact=JSUInt31])*/
+  x6(
+          /*Union([exact=JSDouble], [exact=JSUInt31])*/ p) =>
+      p;
+}
+
+/*element: test6:[null]*/
+test6() {
+  new A6(). /*invoke: [exact=A6]*/ x6(1.5);
+  new A6(). /*invoke: [exact=A6]*/ x6(1);
+}
+
+/*element: A7.:[exact=A7]*/
+class A7 {
+  /*element: A7.x7:[empty]*/
+  x7(
+      /*Union([exact=JSString], [exact=JSUInt31])*/ p) => /*invoke: [exact=A7]*/ x7("x");
+}
+
+/*element: test7:[null]*/
+test7() {
+  new A7(). /*invoke: [exact=A7]*/ x7(1);
+}
+
+/*element: A8.:[exact=A8]*/
+class A8 {
+  /*element: A8.x8:[empty]*/
+  x8(
+          /*Union([exact=JSString], [subclass=JsLinkedHashMap])*/ p) =>
+      /*invoke: [exact=A8]*/ x8("x");
+}
+
+/*element: test8:[null]*/
+test8() {
+  new A8(). /*invoke: [exact=A8]*/ x8({});
+}
+
+/*element: A9.:[exact=A9]*/
+class A9 {
+  /*element: A9.x9:[empty]*/ x9(
+          /*[exact=JSUInt31]*/ p1,
+          /*Union([exact=JSString], [exact=JSUInt31])*/ p2,
+          /*Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/ p3) =>
+      /*invoke: [exact=A9]*/ x9(p1, "x", {});
+}
+
+/*element: test9:[null]*/
+test9() {
+  new A9(). /*invoke: [exact=A9]*/ x9(1, 2, 3);
+}
+
+/*element: A10.:[exact=A10]*/
+class A10 {
+  /*element: A10.x10:[empty]*/ x10(
+      /*[exact=JSUInt31]*/ p1,
+      /*[exact=JSUInt31]*/ p2) => /*invoke: [exact=A10]*/ x10(p1, p2);
+}
+
+/*element: test10:[null]*/
+test10() {
+  new A10(). /*invoke: [exact=A10]*/ x10(1, 2);
+}
+
+/*element: A11.:[exact=A11]*/
+class A11 {
+  /*element: A11.x11:[empty]*/
+  x11(
+      /*[exact=JSUInt31]*/ p1,
+      /*[exact=JSUInt31]*/ p2) => /*invoke: [exact=A11]*/ x11(p1, p2);
+}
+
+/*element: f11:[null]*/
+void f11(/*[null]*/ p) {
+  p. /*invoke: [null]*/ x11("x", "y");
+}
+
+/*element: test11:[null]*/
+test11() {
+  f11(null);
+  new A11(). /*invoke: [exact=A11]*/ x11(1, 2);
+}
+
+/*element: A12.:[exact=A12]*/
+class A12 {
+  /*element: A12.x12:[empty]*/
+  x12(
+          /*Union([exact=JSString], [exact=JSUInt31])*/ p1,
+          /*Union([exact=JSString], [exact=JSUInt31])*/ p2) =>
+      /*invoke: [exact=A12]*/ x12(1, 2);
+}
+
+/*element: test12:[null]*/
+test12() {
+  new A12(). /*invoke: [exact=A12]*/ x12("x", "y");
+}
+
+/*element: A13.:[exact=A13]*/
+class A13 {
+  /*element: A13.x13:[exact=JSUInt31]*/
+  x13(
+          /*Value([exact=JSString], value: "x")*/ p1,
+          [/*[exact=JSUInt31]*/ p2 = 1]) =>
+      1;
+}
+
+/*element: test13:[null]*/
+test13() {
+  new A13(). /*invoke: [exact=A13]*/ x13("x", 1);
+  new A13(). /*invoke: [exact=A13]*/ x13("x");
+}
+
+/*element: A14.:[exact=A14]*/
+class A14 {
+  /*element: A14.x14:[exact=JSUInt31]*/
+  x14(
+          /*Union([exact=JSDouble], [exact=JSUInt31])*/ p) =>
+      1;
+}
+
+/*element: f14:[exact=JSUInt31]*/
+f14(/*[exact=A14]*/ p) => p. /*invoke: [exact=A14]*/ x14(2.2);
+
+/*element: test14:[null]*/
+test14() {
+  new A14(). /*invoke: [exact=A14]*/ x14(1);
+  f14(new A14());
+}
+
+/*element: A15.:[exact=A15]*/
+class A15 {
+  /*element: A15.x15:[exact=JSUInt31]*/
+  x15(/*[exact=JSUInt31]*/ p1,
+          [/*Value([exact=JSString], value: "s")*/ p2 = "s"]) =>
+      1;
+}
+
+/*element: test15:[null]*/
+test15() {
+  new A15(). /*invoke: [exact=A15]*/ x15(1);
+}
+
+/*element: A16.:[exact=A16]*/
+class A16 {
+  /*element: A16.x16:[exact=JSUInt31]*/
+  x16(
+          /*Value([exact=JSString], value: "x")*/ p1,
+          [/*[exact=JSBool]*/ p2 = true]) =>
+      1;
+}
+
+/*element: f16:[empty]*/
+f16(/*[null]*/ p) => p. /*invoke: [null]*/ a("x");
+
+/*element: test16:[null]*/
+test16() {
+  new A16(). /*invoke: [exact=A16]*/ x16("x");
+  new A16(). /*invoke: [exact=A16]*/ x16("x", false);
+  f16(null);
+}
+
+/*element: A17.:[exact=A17]*/
+class A17 {
+  /*element: A17.x17:[exact=JSUInt31]*/
+  x17(/*[exact=JSUInt31]*/ p1,
+          [/*[exact=JSUInt31]*/ p2 = 1, /*[exact=JSString]*/ p3 = "s"]) =>
+      1;
+}
+
+/*element: test17:[null]*/
+test17() {
+  new A17(). /*invoke: [exact=A17]*/ x17(1);
+  new A17(). /*invoke: [exact=A17]*/ x17(1, 2);
+  new A17(). /*invoke: [exact=A17]*/ x17(1, 2, "x");
+  // ignore: undefined_named_parameter
+  new A17(). /*invoke: [exact=A17]*/ x17(1, p2: 2);
+  // ignore: undefined_named_parameter
+  new A17(). /*invoke: [exact=A17]*/ x17(1, p3: "x");
+  // ignore: undefined_named_parameter
+  new A17(). /*invoke: [exact=A17]*/ x17(1, p3: "x", p2: 2);
+  // ignore: undefined_named_parameter
+  new A17(). /*invoke: [exact=A17]*/ x17(1, p2: 2, p3: "x");
+}
+
+/*element: A18.:[exact=A18]*/
+class A18 {
+  /*element: A18.x18:[exact=JSUInt31]*/
+  x18(/*[exact=JSUInt31]*/ p1,
+          [/*[exact=JSBool]*/ p2 = 1, /*[exact=JSDouble]*/ p3 = "s"]) =>
+      1;
+}
+
+/*element: test18:[null]*/
+test18() {
+  new A18(). /*invoke: [exact=A18]*/ x18(1, true, 1.1);
+  new A18(). /*invoke: [exact=A18]*/ x18(1, false, 2.2);
+  // ignore: undefined_named_parameter
+  new A18(). /*invoke: [exact=A18]*/ x18(1, p3: 3.3, p2: true);
+  // ignore: undefined_named_parameter
+  new A18(). /*invoke: [exact=A18]*/ x18(1, p2: false, p3: 4.4);
+}
+
+/*element: A19.:[exact=A19]*/
+class A19 {
+  /*element: A19.x19:[empty]*/
+  x19(
+          /*Union([exact=JSString], [exact=JSUInt31])*/ p1,
+          /*Union([exact=JSString], [exact=JSUInt31])*/ p2) =>
+      /*invoke: [subclass=A19]*/ x19(p1, p2);
+}
+
+/*element: B19.:[exact=B19]*/
+class B19 extends A19 {}
+
+/*element: test19:[null]*/
+test19() {
+  new B19(). /*invoke: [exact=B19]*/ x19("a", "b");
+  new A19(). /*invoke: [exact=A19]*/ x19(1, 2);
+}
diff --git a/tests/compiler/dart2js/inference/data/closurization_instance.dart b/tests/compiler/dart2js/inference/data/closurization_instance.dart
new file mode 100644
index 0000000..13f52ca
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/closurization_instance.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.
+
+/*element: main:[null]*/
+main() {
+  closurizedCallToString();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Implicit/explicit .call on instance method tear-off.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Class.:[exact=Class]*/
+class Class {
+  /*element: Class.method:[exact=JSUInt31]*/
+  method() => 42;
+}
+
+// TODO(johnniwinther): Fix the refined type. Missing call methods in the closed
+// world leads to concluding [empty].
+/*element: closurizedCallToString:[empty]*/
+closurizedCallToString() {
+  var c = new Class();
+  var local = c. /*[exact=Class]*/ method;
+  local. /*invoke: [subclass=Closure]*/ toString();
+  local();
+  local
+      . /*invoke: [empty]*/
+      toString();
+  local.call();
+  return local
+      . /*invoke: [empty]*/
+      toString();
+}
diff --git a/tests/compiler/dart2js/inference/data/closurization_instance_call.dart b/tests/compiler/dart2js/inference/data/closurization_instance_call.dart
new file mode 100644
index 0000000..8dd31e7
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/closurization_instance_call.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.
+
+/*element: main:[null]*/
+main() {
+  closurizedCallToString();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Implicit/explicit .call on instance method tear-off with a non synthesized
+// '.call' method in the closed world.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Class.:[exact=Class]*/
+class Class {
+  /*element: Class.call:Value([exact=JSBool], value: true)*/
+  call() => true;
+
+  /*element: Class.method:[exact=JSUInt31]*/
+  method() => 42;
+}
+
+// TODO(johnniwinther): Fix the refined type. Missing call methods in the closed
+// world leads to concluding [exact=Class].
+/*element: closurizedCallToString:[exact=JSString]*/
+closurizedCallToString() {
+  var c = new Class();
+  c.call(); // Make `Class.call` live.
+  var local = c. /*[exact=Class]*/ method;
+  local. /*invoke: [subtype=Function]*/ toString();
+  local();
+  local
+      . /*invoke: [exact=Class]*/
+      toString();
+  local.call();
+  return local
+      . /*invoke: [exact=Class]*/
+      toString();
+}
diff --git a/tests/compiler/dart2js/inference/data/closurization_local_call.dart b/tests/compiler/dart2js/inference/data/closurization_local_call.dart
new file mode 100644
index 0000000..30e4983
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/closurization_local_call.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: main:[null]*/
+main() {
+  closurizedCallToString();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Implicit/explicit .call on a local variable with a non synthesized '.call'
+// method in the closed world.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Class.:[exact=Class]*/
+class Class {
+  /*element: Class.call:Value([exact=JSBool], value: true)*/
+  call() => true;
+}
+
+// TODO(johnniwinther): Fix the refined type. Missing call methods in the closed
+// world leads to concluding [exact=Class].
+/*element: closurizedCallToString:[exact=JSString]*/
+closurizedCallToString() {
+  var c = new Class();
+  c.call(); // Make `Class.call` live.
+  var local = /*[exact=JSUInt31]*/ () => 42;
+  local. /*invoke: [subtype=Function]*/ toString();
+  local();
+  local
+      . /*invoke: [exact=Class]*/
+      toString();
+  local.call();
+  return local
+      . /*invoke: [exact=Class]*/
+      toString();
+}
diff --git a/tests/compiler/dart2js/inference/data/closurization_static.dart b/tests/compiler/dart2js/inference/data/closurization_static.dart
new file mode 100644
index 0000000..e93e641
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/closurization_static.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.
+
+/*element: main:[null]*/
+main() {
+  closurizedCallToString();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Implicit/explicit .call on static method tear-off.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: method:[exact=JSUInt31]*/
+method() => 42;
+
+// TODO(johnniwinther): Fix the refined type. Missing call methods in the closed
+// world leads to concluding [empty].
+/*element: closurizedCallToString:[empty]*/
+closurizedCallToString() {
+  var local = method;
+  local. /*invoke: [subclass=Closure]*/ toString();
+  local();
+  local
+      . /*invoke: [empty]*/
+      toString();
+  local.call();
+  return local
+      . /*invoke: [empty]*/
+      toString();
+}
diff --git a/tests/compiler/dart2js/inference/data/closurization_static_call.dart b/tests/compiler/dart2js/inference/data/closurization_static_call.dart
new file mode 100644
index 0000000..b4d00d8
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/closurization_static_call.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.
+
+/*element: main:[null]*/
+main() {
+  closurizedCallToString();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Implicit/explicit .call on static method tear-off with a non synthesized
+// '.call' method in the closed world.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: method:[exact=JSUInt31]*/
+method() => 42;
+
+/*element: Class.:[exact=Class]*/
+class Class {
+  /*element: Class.call:Value([exact=JSBool], value: true)*/
+  call() => true;
+}
+
+// TODO(johnniwinther): Fix the refined type. Missing call methods in the closed
+// world leads to concluding [exact=Class].
+/*element: closurizedCallToString:[exact=JSString]*/
+closurizedCallToString() {
+  var c = new Class();
+  c.call(); // Make `Class.call` live.
+  var local = method;
+  local. /*invoke: [subtype=Function]*/ toString();
+  local();
+  local
+      . /*invoke: [exact=Class]*/
+      toString();
+  local.call();
+  return local
+      . /*invoke: [exact=Class]*/
+      toString();
+}
diff --git a/tests/compiler/dart2js/inference/data/dictionary_types.dart b/tests/compiler/dart2js/inference/data/dictionary_types.dart
new file mode 100644
index 0000000..f6f3cc4
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/dictionary_types.dart
@@ -0,0 +1,196 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: main:[null]*/
+main() {
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+}
+
+/*element: dictionaryA1:Map([subclass=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/
+var dictionaryA1 = {'string': "aString", 'int': 42, 'double': 21.5, 'list': []};
+
+/*element: dictionaryB1:Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), stringTwo: Value([null|exact=JSString], value: "anotherString"), intTwo: [null|exact=JSUInt31]})*/
+var dictionaryB1 = {'string': "aString", 'int': 42, 'double': 21.5, 'list': []};
+
+/*element: otherDict1:Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSUInt31], [null|exact=JSString]), map: {stringTwo: Value([exact=JSString], value: "anotherString"), intTwo: [exact=JSUInt31]})*/
+var otherDict1 = {'stringTwo': "anotherString", 'intTwo': 84};
+
+/*element: int1:[exact=JSUInt31]*/
+var int1 = 0;
+
+/*element: anotherInt1:[exact=JSUInt31]*/
+var anotherInt1 = 0;
+
+/*element: nullOrInt1:[null|exact=JSUInt31]*/
+var nullOrInt1 = 0;
+
+/*element: dynamic1:[null|subclass=Object]*/
+var dynamic1 = 0;
+
+/*element: test1:[null]*/
+test1() {
+  dictionaryA1
+      . /*invoke: Map([subclass=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/
+      addAll(otherDict1);
+  dictionaryB1
+      . /*invoke: Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), stringTwo: Value([null|exact=JSString], value: "anotherString"), intTwo: [null|exact=JSUInt31]})*/
+      addAll({'stringTwo': "anotherString", 'intTwo': 84});
+  int1 = dictionaryB1
+      /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), stringTwo: Value([null|exact=JSString], value: "anotherString"), intTwo: [null|exact=JSUInt31]})*/
+      ['int'];
+  anotherInt1 = otherDict1
+      /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSUInt31], [null|exact=JSString]), map: {stringTwo: Value([exact=JSString], value: "anotherString"), intTwo: [exact=JSUInt31]})*/
+      ['intTwo'];
+  dynamic1 = dictionaryA1
+      /*Map([subclass=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/ [
+      'int'];
+  nullOrInt1 = dictionaryB1
+      /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), stringTwo: Value([null|exact=JSString], value: "anotherString"), intTwo: [null|exact=JSUInt31]})*/
+      ['intTwo'];
+}
+
+/*element: dictionaryA2:Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+var dictionaryA2 = {'string': "aString", 'int': 42, 'double': 21.5, 'list': []};
+
+/*element: dictionaryB2:Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), intTwo: [exact=JSUInt31], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+var dictionaryB2 = {'string': "aString", 'intTwo': 42, 'list': []};
+
+/*element: nullOrInt2:[null|exact=JSUInt31]*/
+var nullOrInt2 = 0;
+
+/*element: aString2:[exact=JSString]*/
+var aString2 = "";
+
+/*element: doubleOrNull2:[null|exact=JSDouble]*/
+var doubleOrNull2 = 22.2;
+
+/*element: test2:[null]*/
+test2() {
+  var union = dictionaryA2
+          /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+          ['foo']
+      ? dictionaryA2
+      : dictionaryB2;
+  nullOrInt2 = union
+      /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {int: [null|exact=JSUInt31], double: [null|exact=JSDouble], string: Value([exact=JSString], value: "aString"), intTwo: [null|exact=JSUInt31], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+      ['intTwo'];
+  aString2 = union
+      /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {int: [null|exact=JSUInt31], double: [null|exact=JSDouble], string: Value([exact=JSString], value: "aString"), intTwo: [null|exact=JSUInt31], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+      ['string'];
+  doubleOrNull2 = union
+      /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {int: [null|exact=JSUInt31], double: [null|exact=JSDouble], string: Value([exact=JSString], value: "aString"), intTwo: [null|exact=JSUInt31], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+      ['double'];
+}
+
+/*element: dictionary3:Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+var dictionary3 = {'string': "aString", 'int': 42, 'double': 21.5, 'list': []};
+/*element: keyD3:Value([exact=JSString], value: "double")*/
+var keyD3 = 'double';
+
+/*element: keyI3:Value([exact=JSString], value: "int")*/
+var keyI3 = 'int';
+
+/*element: keyN3:Value([exact=JSString], value: "notFoundInMap")*/
+var keyN3 = 'notFoundInMap';
+
+/*element: knownDouble3:[exact=JSDouble]*/
+var knownDouble3 = 42.2;
+
+/*element: intOrNull3:[null|exact=JSUInt31]*/
+var intOrNull3 = dictionary3
+    /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+    [keyI3];
+
+/*element: justNull3:[null]*/
+var justNull3 = dictionary3
+    /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+    [keyN3];
+
+/*element: test3:[null]*/
+test3() {
+  knownDouble3 = dictionary3
+      /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+      [keyD3];
+  // ignore: unused_local_variable
+  var x = [intOrNull3, justNull3];
+}
+
+class A4 {
+/*element: A4.:[exact=A4]*/
+  A4();
+/*element: A4.foo4:[exact=JSUInt31]*/
+  foo4(
+      /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSUInt31], [null|exact=JSString]), map: {anInt: [exact=JSUInt31], aString: Value([exact=JSString], value: "theString")})*/ value) {
+    return value /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSUInt31], [null|exact=JSString]), map: {anInt: [exact=JSUInt31], aString: Value([exact=JSString], value: "theString")})*/ [
+        'anInt'];
+  }
+}
+
+class B4 {
+/*element: B4.:[exact=B4]*/
+  B4();
+
+/*element: B4.foo4:[exact=JSUInt31]*/
+  foo4(
+      /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSUInt31], [null|exact=JSString]), map: {anInt: [exact=JSUInt31], aString: Value([exact=JSString], value: "theString")})*/ value) {
+    return 0;
+  }
+}
+
+/*element: test4:[null]*/
+test4() {
+  var dictionary = {'anInt': 42, 'aString': "theString"};
+  var it;
+  if ([true, false]
+      /*Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/
+      [0]) {
+    it = new A4();
+  } else {
+    it = new B4();
+  }
+  print(it. /*invoke: Union([exact=A4], [exact=B4])*/ foo4(
+          dictionary) /*invoke: [exact=JSUInt31]*/ +
+      2);
+}
+
+/*element: dict5:Map([null|subclass=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/
+var dict5 = makeMap5([1, 2]);
+
+/*element: notInt5:[null|subclass=Object]*/
+var notInt5 = 0;
+
+/*element: alsoNotInt5:[null|subclass=Object]*/
+var alsoNotInt5 = 0;
+
+/*element: makeMap5:Map([subclass=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/
+makeMap5(
+    /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/ values) {
+  return {
+    'moo': values
+        /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+        [0],
+    'boo': values
+        /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+        [1]
+  };
+}
+
+/*element: test5:[null]*/
+test5() {
+  dict5
+      /*update: Map([null|subclass=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/
+      ['goo'] = 42;
+  var closure =
+      /*Map([null|subclass=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/
+      () => dict5;
+  notInt5 = closure()['boo'];
+  alsoNotInt5 = dict5
+      /*Map([null|subclass=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/
+      ['goo'];
+  print("$notInt5 and $alsoNotInt5.");
+}
diff --git a/tests/compiler/dart2js/inference/data/local_functions.dart b/tests/compiler/dart2js/inference/data/local_functions.dart
index 5e24e6b..c64f6a5 100644
--- a/tests/compiler/dart2js/inference/data/local_functions.dart
+++ b/tests/compiler/dart2js/inference/data/local_functions.dart
@@ -94,29 +94,35 @@
 // Implicit .call on a local variable.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*element: closureToString:[exact=JSString]*/
+// TODO(johnniwinther): Fix the refined type. Missing call methods in the closed
+// world leads to concluding [empty].
+/*element: closureToString:[empty]*/
 closureToString() {
   var local = /*[null]*/ () {};
   local();
-  return local. /*invoke: [subclass=Closure]*/ toString();
+  return local. /*invoke: [empty]*/ toString();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Explicit .call on a local variable.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*element: closureCallToString:[exact=JSString]*/
+// TODO(johnniwinther): Fix the refined type. Missing call methods in the closed
+// world leads to concluding [empty].
+/*element: closureCallToString:[empty]*/
 closureCallToString() {
   var local = /*[null]*/ () {};
   local.call();
-  return local. /*invoke: [subclass=Closure]*/ toString();
+  return local. /*invoke: [empty]*/ toString();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Operator == on the result of a parameter invocation.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*element: _callCompare:[exact=callCompare_closure]*/
+// TODO(johnniwinther): Fix the refined type. Missing call methods in the closed
+// world leads to concluding [empty].
+/*element: _callCompare:[empty]*/
 _callCompare(int /*[subclass=Closure]*/ compare({a, b})) {
   compare(a: 0, b: 1) == 0;
   return compare;
@@ -139,7 +145,7 @@
   method1() {}
 }
 
-/*element: _callClosure:[exact=callClosure_closure]*/
+/*element: _callClosure:[empty]*/
 _callClosure(/*[subclass=Closure]*/ f({c})) {
   f(c: new Class1()).method1();
   return f;
diff --git a/tests/compiler/dart2js/inference/data/local_functions_call.dart b/tests/compiler/dart2js/inference/data/local_functions_call.dart
new file mode 100644
index 0000000..308de0f
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/local_functions_call.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This is the same test as `closureCallToString` in 'local_functions.dart' but
+// with a different expectancy because the closed world contains less '.call'
+// methods.
+
+/*element: main:[null]*/
+main() {
+  closureCallToString();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Explicit .call on a local variable.
+////////////////////////////////////////////////////////////////////////////////
+
+// TODO(johnniwinther): Fix the refined type. Missing call methods in the closed
+// world leads to concluding [empty].
+/*element: closureCallToString:[empty]*/
+closureCallToString() {
+  var local = /*[null]*/ () {};
+  local.call();
+  return local
+      .
+      /*invoke: [empty]*/
+      toString();
+}
diff --git a/tests/compiler/dart2js/inference/data/map_tracer_keys.dart b/tests/compiler/dart2js/inference/data/map_tracer_keys.dart
new file mode 100644
index 0000000..fb02458
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/map_tracer_keys.dart
@@ -0,0 +1,189 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: main:[null]*/
+main() {
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+}
+
+/*element: aDouble1:[null|exact=JSDouble]*/
+double aDouble1 = 42.5;
+
+/*element: aList1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+List aList1 = [42];
+
+/*element: consume1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+consume1(
+        /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x) =>
+    x;
+
+/*element: test1:[null]*/
+test1() {
+  var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4};
+  theMap
+      /*update: Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSDouble], map: {a: [exact=JSDouble], b: [exact=JSDouble], c: [exact=JSDouble], d: [null|exact=JSDouble]})*/
+      ['d'] = 5.5;
+  /*iterator: [exact=LinkedHashMapKeyIterable]*/
+  /*current: [exact=LinkedHashMapKeyIterator]*/
+  /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+  for (var key in theMap.
+      /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSDouble], map: {a: [exact=JSDouble], b: [exact=JSDouble], c: [exact=JSDouble], d: [null|exact=JSDouble]})*/
+      keys) {
+    aDouble1 = theMap
+        /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSDouble], map: {a: [exact=JSDouble], b: [exact=JSDouble], c: [exact=JSDouble], d: [null|exact=JSDouble]})*/
+        [key];
+  }
+  // We have to reference it somewhere, so that it always gets resolved.
+  consume1(aList1);
+}
+
+/*element: aDouble2:[null|exact=JSDouble]*/
+double aDouble2 = 42.5;
+
+/*element: aList2:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+List aList2 = [42];
+
+/*element: consume2:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+consume2(
+        /*Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/ x) =>
+    x;
+
+/*element: test2:[null]*/
+test2() {
+  dynamic theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4};
+  theMap
+      /*update: Map([subclass=JsLinkedHashMap], key: Union([exact=JSExtendableArray], [exact=JSString]), value: [null|exact=JSDouble])*/
+      [aList2] = 5.5;
+  /*iterator: [exact=LinkedHashMapKeyIterable]*/
+  /*current: [exact=LinkedHashMapKeyIterator]*/
+  /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+  for (var key in theMap.
+      /*Map([subclass=JsLinkedHashMap], key: Union([exact=JSExtendableArray], [exact=JSString]), value: [null|exact=JSDouble])*/
+      keys) {
+    aDouble2 = theMap
+        /*Map([subclass=JsLinkedHashMap], key: Union([exact=JSExtendableArray], [exact=JSString]), value: [null|exact=JSDouble])*/
+        [key];
+  }
+  // We have to reference it somewhere, so that it always gets resolved.
+  consume2(aList2);
+}
+
+/*element: aDouble3:Union([exact=JSDouble], [null|exact=JSExtendableArray])*/
+double aDouble3 = 42.5;
+
+/*element: aList3:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+List aList3 = [42];
+
+/*element: consume3:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+consume3(
+        /*Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/ x) =>
+    x;
+
+/*element: test3:[null]*/
+test3() {
+  dynamic theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4};
+  theMap
+      /*update: Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [null|exact=JSExtendableArray]), map: {a: [exact=JSDouble], b: [exact=JSDouble], c: [exact=JSDouble], d: Container([null|exact=JSExtendableArray], element: [null|subclass=Object], length: null)})*/
+      ['d'] = aList3;
+  /*iterator: [exact=LinkedHashMapKeyIterable]*/
+  /*current: [exact=LinkedHashMapKeyIterator]*/
+  /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+  for (var key in theMap.
+      /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [null|exact=JSExtendableArray]), map: {a: [exact=JSDouble], b: [exact=JSDouble], c: [exact=JSDouble], d: Container([null|exact=JSExtendableArray], element: [null|subclass=Object], length: null)})*/
+      keys) {
+    aDouble3 = theMap
+        /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [null|exact=JSExtendableArray]), map: {a: [exact=JSDouble], b: [exact=JSDouble], c: [exact=JSDouble], d: Container([null|exact=JSExtendableArray], element: [null|subclass=Object], length: null)})*/
+        [key];
+  }
+  // We have to reference it somewhere, so that it always gets resolved.
+  consume3(aList3);
+}
+
+/*element: aDouble4:[null|exact=JSDouble]*/
+double aDouble4 = 42.5;
+
+/*element: aList4:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+List aList4 = [42];
+
+/*element: consume4:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+consume4(
+        /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x) =>
+    x;
+
+/*element: test4:[null]*/
+test4() {
+  var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4, 'd': 5.5};
+  /*iterator: [exact=LinkedHashMapKeyIterable]*/
+  /*current: [exact=LinkedHashMapKeyIterator]*/
+  /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+  for (var key in theMap.
+      /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSDouble], map: {a: [exact=JSDouble], b: [exact=JSDouble], c: [exact=JSDouble], d: [exact=JSDouble]})*/
+      keys) {
+    aDouble4 = theMap
+        /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSDouble], map: {a: [exact=JSDouble], b: [exact=JSDouble], c: [exact=JSDouble], d: [exact=JSDouble]})*/
+        [key];
+  }
+  // We have to reference it somewhere, so that it always gets resolved.
+  consume4(aList4);
+}
+
+/*element: aDouble5:[null|exact=JSDouble]*/
+double aDouble5 = 42.5;
+
+/*element: aList5:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+List aList5 = [42];
+
+/*element: consume5:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+consume5(
+        /*Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/ x) =>
+    x;
+
+/*element: test5:[null]*/
+test5() {
+  var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4, aList5: 5.5};
+  /*iterator: [exact=LinkedHashMapKeyIterable]*/
+  /*current: [exact=LinkedHashMapKeyIterator]*/
+  /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+  for (var key in theMap.
+      /*Map([subclass=JsLinkedHashMap], key: Union([exact=JSExtendableArray], [exact=JSString]), value: [null|exact=JSDouble])*/
+      keys) {
+    aDouble5 = theMap
+        /*Map([subclass=JsLinkedHashMap], key: Union([exact=JSExtendableArray], [exact=JSString]), value: [null|exact=JSDouble])*/
+        [key];
+  }
+  // We have to reference it somewhere, so that it always gets resolved.
+  consume5(aList5);
+}
+
+/*element: aDouble6:Union([null|exact=JSDouble], [null|exact=JSExtendableArray])*/
+double aDouble6 = 42.5;
+/*element: aList6:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+List aList6 = [42];
+
+/*element: consume6:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+consume6(
+        /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x) =>
+    x;
+
+/*element: test6:[null]*/
+test6() {
+  var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4, 'd': aList6};
+  /*iterator: [exact=LinkedHashMapKeyIterable]*/
+  /*current: [exact=LinkedHashMapKeyIterator]*/
+  /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+  for (var key in theMap.
+      /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [null|exact=JSExtendableArray]), map: {a: [exact=JSDouble], b: [exact=JSDouble], c: [exact=JSDouble], d: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)})*/
+      keys) {
+    aDouble6 = theMap
+        /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([null|exact=JSDouble], [null|exact=JSExtendableArray]), map: {a: [exact=JSDouble], b: [exact=JSDouble], c: [exact=JSDouble], d: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)})*/
+        [key];
+  }
+  // We have to reference it somewhere, so that it always gets resolved.
+  consume6(aList6);
+}
diff --git a/tests/compiler/dart2js/inference/data/refine_locals.dart b/tests/compiler/dart2js/inference/data/refine_locals.dart
index cb1c021..bc437fb 100644
--- a/tests/compiler/dart2js/inference/data/refine_locals.dart
+++ b/tests/compiler/dart2js/inference/data/refine_locals.dart
@@ -163,14 +163,16 @@
 // Refine the type of a local variable through a sequence of invocations.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*element: _refineToClosureLocal:[exact=_refineToClosureLocal_closure]*/
+/*element: _refineToClosureLocal:[empty]*/
 _refineToClosureLocal() {
   var f = /*[null]*/ ({/*[exact=JSUInt31]*/ a}) {};
   f(a: 0);
   return f;
 }
 
-/*element: _refineToClosureLocalCall:[exact=_refineToClosureLocalCall_closure]*/
+// TODO(johnniwinther): Fix the refined type. Missing call methods in the closed
+// world leads to concluding [empty].
+/*element: _refineToClosureLocalCall:[empty]*/
 _refineToClosureLocalCall() {
   var f = /*[null]*/ ({/*[exact=JSUInt31]*/ b}) {};
   f.call(b: 0);
diff --git a/tests/compiler/dart2js/inference/dictionary_types_test.dart b/tests/compiler/dart2js/inference/dictionary_types_test.dart
deleted file mode 100644
index 1d934e6..0000000
--- a/tests/compiler/dart2js/inference/dictionary_types_test.dart
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:expect/expect.dart';
-
-import '../memory_compiler.dart';
-
-var SOURCES = const {
-  'AddAll.dart': """
-  var dictionaryA = {'string': "aString", 'int': 42, 'double': 21.5,
-                     'list': []};
-  var dictionaryB = {'string': "aString", 'int': 42, 'double': 21.5,
-                     'list': []};
-  var otherDict = {'stringTwo' : "anotherString", 'intTwo' : 84};
-  var int = 0;
-  var anotherInt = 0;
-  var nullOrInt = 0;
-  var dynamic = 0;
-
-  main() {
-    dictionaryA.addAll(otherDict);
-    dictionaryB.addAll({'stringTwo' : "anotherString", 'intTwo' : 84});
-    int = dictionaryB['int'];
-    anotherInt = otherDict['intTwo'];
-    dynamic = dictionaryA['int'];
-    nullOrInt = dictionaryB['intTwo'];
-  }
-""",
-  'Union.dart': """
-  var dictionaryA = {'string': "aString", 'int': 42, 'double': 21.5,
-                     'list': []};
-  var dictionaryB = {'string': "aString", 'intTwo': 42, 'list': []};
-  var nullOrInt = 0;
-  var aString = "";
-  var doubleOrNull = 22.2;
-  var key = "string";
-
-  main() {
-    var union = dictionaryA['foo'] ? dictionaryA : dictionaryB;
-    nullOrInt = union['intTwo'];
-    aString = union['string'];
-    doubleOrNull = union['double'];
-  }
-""",
-  'ValueType.dart': """
-  var dictionary = {'string': "aString", 'int': 42, 'double': 21.5, 'list': []};
-  var keyD = 'double';
-  var keyI = 'int';
-  var keyN = 'notFoundInMap';
-  var knownDouble = 42.2;
-  var intOrNull = dictionary[keyI];
-  var justNull = dictionary[keyN];
-
-  main() {
-    knownDouble = dictionary[keyD];
-    var x = [intOrNull, justNull];
-  }
-""",
-  'Propagation.dart': """
-  class A {
-    A();
-    foo(value) {
-      return value['anInt'];
-    }
-  }
-
-  class B {
-    B();
-    foo(value) {
-      return 0;
-    }
-  }
-
-  main() {
-    var dictionary = {'anInt': 42, 'aString': "theString"};
-    var it;
-    if ([true, false][0]) {
-      it = new A();
-    } else {
-      it = new B();
-    }
-    print(it.foo(dictionary) + 2);
-  }
-""",
-  'Bailout.dart': """
-  var dict = makeMap([1,2]);
-  var notInt = 0;
-  var alsoNotInt = 0;
-
-  makeMap(values) {
-    return {'moo': values[0], 'boo': values[1]};
-  }
-
-  main () {
-    dict['goo'] = 42;
-    var closure = () => dict;
-    notInt = closure()['boo'];
-    alsoNotInt = dict['goo'];
-    print("\$notInt and \$alsoNotInt.");
-  }
-"""
-};
-
-void main() {
-  asyncTest(() async {
-    print('--test from ast---------------------------------------------------');
-    await runTests(useKernel: false);
-    print('--test from kernel------------------------------------------------');
-    await runTests(useKernel: true);
-  });
-}
-
-runTests({bool useKernel}) async {
-  await compileAndTest("AddAll.dart", (types, getType, closedWorld) {
-    Expect.equals(getType('int'), types.uint31Type);
-    Expect.equals(getType('anotherInt'), types.uint31Type);
-    Expect.equals(getType('dynamic'), types.dynamicType);
-    Expect.equals(getType('nullOrInt'), types.uint31Type.nullable());
-  }, useKernel: useKernel);
-  await compileAndTest("Union.dart", (types, getType, closedWorld) {
-    Expect.equals(getType('nullOrInt'), types.uint31Type.nullable());
-    Expect.isTrue(getType('aString').containsOnlyString(closedWorld));
-    Expect.equals(getType('doubleOrNull'), types.doubleType.nullable());
-  }, useKernel: useKernel);
-  await compileAndTest("ValueType.dart", (types, getType, closedWorld) {
-    Expect.equals(getType('knownDouble'), types.doubleType);
-    Expect.equals(getType('intOrNull'), types.uint31Type.nullable());
-    Expect.equals(getType('justNull'), types.nullType);
-  }, useKernel: useKernel);
-  await compileAndTest("Propagation.dart", (code) {
-    Expect.isFalse(code.contains("J.\$add\$ns"));
-  }, createCode: true, useKernel: useKernel);
-  await compileAndTest("Bailout.dart", (types, getType, closedWorld) {
-    Expect.equals(getType('notInt'), types.dynamicType);
-    Expect.equals(getType('alsoNotInt'), types.dynamicType);
-    Expect.isFalse(getType('dict').isDictionary);
-  }, useKernel: useKernel);
-}
-
-compileAndTest(source, checker,
-    {bool createCode: false, bool useKernel}) async {
-  CompilationResult result = await runCompiler(
-      entryPoint: Uri.parse('memory:' + source),
-      memorySourceFiles: SOURCES,
-      beforeRun: (compiler) {
-        compiler.stopAfterTypeInference = !createCode;
-      },
-      options: useKernel ? [Flags.useKernel] : []);
-  var compiler = result.compiler;
-  var typesInferrer = compiler.globalInference.typesInferrerInternal;
-  var closedWorld = typesInferrer.closedWorld;
-  var elementEnvironment = closedWorld.elementEnvironment;
-  var commonMasks = closedWorld.commonMasks;
-  getType(String name) {
-    var element = elementEnvironment.lookupLibraryMember(
-        elementEnvironment.mainLibrary, name);
-    Expect.isNotNull(element, "No class '$name' found.");
-    return typesInferrer.getTypeOfMember(element);
-  }
-
-  if (!createCode) {
-    checker(commonMasks, getType, closedWorld);
-  } else {
-    var element = elementEnvironment.mainFunction;
-    var code = compiler.backend.getGeneratedCode(element);
-    checker(code);
-  }
-}
diff --git a/tests/compiler/dart2js/inference/field_type_simple_inferer_test.dart b/tests/compiler/dart2js/inference/field_type_simple_inferer_test.dart
deleted file mode 100644
index 6b46ce7..0000000
--- a/tests/compiler/dart2js/inference/field_type_simple_inferer_test.dart
+++ /dev/null
@@ -1,689 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-/// Currently it only works with the mock compiler.
-
-import 'package:expect/expect.dart';
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/types/types.dart' show TypeMask;
-import 'package:compiler/src/world.dart' show ClosedWorld;
-
-import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
-
-void compileAndFind(String code, String className, String memberName,
-    bool disableInlining, check(compiler, element)) {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(code, uri, disableInlining: disableInlining);
-  asyncTest(() => compiler.run(uri).then((_) {
-        dynamic cls = findElement(compiler, className);
-        var member = cls.lookupMember(memberName);
-        check(compiler, member);
-      }));
-}
-
-const String TEST_1 = r"""
-  class A {
-    int f;
-  }
-  main() { new A(); }
-""";
-
-const String TEST_2 = r"""
-  class A {
-    int f1;
-    int f2 = 1;
-  }
-  main() { new A(); }
-""";
-
-const String TEST_3 = r"""
-  class A {
-    int f1;
-    int f2;
-    A() : f1 = 1;
-  }
-  main() { new A().f2 = 2; }
-""";
-
-const String TEST_4 = r"""
-  class A {
-    int f1;
-    int f2;
-    A() : f1 = 1;
-  }
-  main() {
-    A a = new A();
-    a.f1 = "a";
-    a.f2 = "a";
-  }
-""";
-
-const String TEST_5 = r"""
-  class A {
-    int f1 = 1;
-    int f2 = 1;
-    A(x) {
-      f1 = "1";
-      if (x) {
-        f2 = "1";
-      } else {
-        f2 = "2";
-      }
-    }
-  }
-  main() {
-    new A(true);
-    new A(false);
-  }
-""";
-
-const String TEST_6 = r"""
-  class A {
-    int f1 = 1;
-    int f2 = 1;
-    A(x) {
-      f1 = "1";
-      if (x) {
-        f2 = "1";
-      } else {
-        f2 = "2";
-      }
-      if (x) {
-        f2 = new List();
-      } else {
-        f2 = new List();
-      }
-    }
-  }
-  main() {
-    new A(true);
-    new A(false);
-  }
-""";
-
-const String TEST_7 = r"""
-  class A {
-    int f1 = 1;
-    int f2 = 1;
-    A(x) {
-      f1 = "1";
-      if (x) {
-        f2 = "1";
-      } else {
-        f2 = "2";
-      }
-      if (x) {
-        f1 = new List();
-        f2 = new List();
-      } else {
-        f2 = new List();
-      }
-    }
-  }
-  main() {
-    new A(true);
-    new A(false);
-  }
-""";
-
-const String TEST_8 = r"""
-  class A {
-    int f;
-    A(x) {
-      if (x) {
-        f = "1";
-      } else {
-      }
-    }
-  }
-  main() {
-    new A(true);
-    new A(false);
-  }
-""";
-
-const String TEST_9 = r"""
-  class A {
-    int f;
-    A(x) {
-      if (x) {
-      } else {
-        f = "1";
-      }
-    }
-  }
-  main() {
-    new A(true);
-    new A(false);
-  }
-""";
-
-const String TEST_10 = r"""
-  class A {
-    int f;
-    A() {
-      f = 1;
-    }
-    m() => f + 1;
-  }
-  void f(x) { x.f = "2"; }
-  main() {
-    A a;
-    f(a);
-    a = new A();
-    a.m();
-  }
-""";
-
-const String TEST_11 = r"""
-  class S {
-    int fs = 1;
-    ms() { fs = 1; }
-  }
-
-  class A extends S {
-    m() { ms(); }
-  }
-
-  main() {
-    A a = new A();
-    a.m();
-  }
-""";
-
-const String TEST_12 = r"""
-  class S {
-    int fs = 1;
-    S() { fs = "2"; }
-  }
-
-  class A extends S {
-  }
-
-  main() {
-    A a = new A();
-  }
-""";
-
-const String TEST_13 = r"""
-  class S {
-    int fs;
-    S() { fs = 1; }
-  }
-
-  class A extends S {
-    A() { fs = 1; }
-  }
-
-  main() {
-    A a = new A();
-  }
-""";
-
-const String TEST_14 = r"""
-  class A {
-    var f;
-    A() { f = 1; }
-    A.other() { f = 2; }
-  }
-
-  main() {
-    A a = new A();
-    a = new A.other();
-  }
-""";
-
-const String TEST_15 = r"""
-  class A {
-    var f;
-    A() { f = "1"; }
-    A.other() { f = new List(); }
-  }
-
-  main() {
-    A a = new A();
-    a = new A.other();
-  }
-""";
-
-const String TEST_16 = r"""
-  class A {
-    var f;
-    A() { f = "1"; }
-    A.other() : f = 1 { }
-  }
-
-  main() {
-    A a = new A();
-    a = new A.other();
-  }
-""";
-
-const String TEST_17 = r"""
-  g([p]) => p.f = 1;
-  class A {
-    var f;
-    A(x) {
-      var a;
-      if (x) {
-        a = this;
-      } else {
-        a = g;
-      }
-      a(this);
-    }
-  }
-  main() {
-    new A(true);
-    new A(false);
-  }
-""";
-
-const String TEST_18 = r"""
-  class A {
-    var f1;
-    var f2;
-    var f3;
-    A(x) {
-      f1 = 1;
-      var a;
-      if (x) {
-        f2 = "1";
-        a = this;
-      } else {
-        a = 1;
-        f2 = "1";
-      }
-      f3 = a;
-    }
-  }
-  main() {
-    new A(true);
-    new A(false);
-  }
-""";
-
-const String TEST_19 = r"""
-  class A {
-    var f1;
-    var f2;
-    var f3;
-    A(x) {
-      f1 = 1;
-      var a;
-      if (x) {
-        f2 = "1";
-        a = this;
-      } else {
-        a = 1;
-        f2 = "1";
-      }
-      f3 = a;
-      a();
-    }
-  }
-  main() {
-    new A(true);
-    new A(false);
-  }
-""";
-
-const String TEST_20 = r"""
-  class A {
-    var f;
-    A() {
-      for (f in this) {
-      }
-    }
-    get iterator => this;
-    get current => 42;
-    bool moveNext() => false;
-  }
-  main() {
-    new A();
-  }
-""";
-
-const String TEST_21 = r"""
-  class A {
-    var f;
-    A() {
-      for (var i in this) {
-      }
-      f = 42;
-    }
-    get iterator => null;
-  }
-  main() {
-    new A();
-  }
-""";
-
-const String TEST_22 = r"""
-  class A {
-    var f1;
-    var f2;
-    var f3;
-    A() {
-      f1 = 42;
-      f2 = f1 == null ? 42 : f3 == null ? 41: 43;
-      f3 = 'foo';
-    }
-  }
-  main() {
-    new A();
-  }
-""";
-
-const String TEST_23 = r"""
-  class A {
-    var f1 = 42;
-    var f2 = 42;
-    var f3 = 42;
-    var f4 = 42;
-    A() {
-      // Test string interpolation.
-      '${f1 = null}';
-      // Test string juxtaposition.
-      ''
-      '${f2 = null}';
-      // Test list literal.
-      [f3 = null];
-      // Test map literal.
-      var c = {'foo': f4 = null };
-    }
-  }
-  main() {
-    new A();
-  }
-""";
-
-const String TEST_24 = r"""
-  class A {
-    var f1 = 42;
-    var f2 = 42;
-    var f3 = 42;
-    final f4;
-    var f5;
-    var f6 = null;
-    A() : f4 = 42 {
-      f1++;
-      f2 += 42;
-      var f6 = 'foo';
-      this.f6 = f6;
-    }
-    A.foo(other) : f3 = other.f3, f4 = other.f4, f5 = other.bar();
-    operator+(other) => 'foo';
-    bar() => 42.5;
-  }
-  class B extends A {
-    bar() => 42;
-  }
-  main() {
-    new A();
-    new A.foo(new A());
-    new A.foo(new B());
-
-  }
-""";
-
-const String TEST_25 = r"""
-  class A {
-    var f1 = 42;
-  }
-  class B {
-    var f1 = '42';
-  }
-  main() {
-    new B();
-    new A().f1 = new A().f1;
-  }
-""";
-
-const String TEST_26 = r"""
-  class A {
-    var f1 = 42;
-  }
-  class B {
-    var f1 = 54;
-  }
-  main() {
-    new A().f1 = [new B(), new A()][0].f1 + 42;
-  }
-""";
-
-const String TEST_27 = r"""
-  class A {
-    var f1;
-    var f2;
-    A() {
-      this.f1 = 42;
-      this.f2 = 42;
-    }
-  }
-  class B extends A {
-    set f2(value) {}
-  }
-  main() {
-    new A();
-    new B();
-  }
-""";
-
-const String TEST_28 = r"""
-  class A {
-    var f1;
-    var f2;
-    A(x) {
-      this.f1 = x;
-      if (x == 0) return;
-      this.f2 = x;
-    }
-  }
-  main() {
-    new A(0);
-    new A(1);
-  }
-""";
-
-const String TEST_29 = r"""
-  class A {
-    var f1;
-    var f2;
-    A(x) {
-      this.f1 = x;
-      if (x == 0) {
-      } else {
-        return;
-      }
-      this.f2 = x;
-    }
-  }
-  main() {
-    new A(0);
-    new A(1);
-  }
-""";
-
-const String TEST_30 = r"""
-  class A {
-    var f1;
-    var f2;
-    var f3;
-    A(x) {
-      this.f1 = x;
-      if (x == 0) {
-        this.f2 = 1;
-      } else {
-        this.f2 = x;
-        return;
-      }
-      this.f3 = x;
-    }
-  }
-  main() {
-    new A(0);
-    new A(1);
-  }
-""";
-
-typedef TypeMask TestCallback(ClosedWorld closedWorld);
-
-void doTest(
-    String test, bool disableInlining, Map<String, TestCallback> fields) {
-  fields.forEach((String name, TestCallback f) {
-    compileAndFind(test, 'A', name, disableInlining, (compiler, field) {
-      var inferrer = compiler.globalInference.typesInferrerInternal;
-      var closedWorld = inferrer.closedWorld;
-      TypeMask type = f(closedWorld);
-      TypeMask inferredType =
-          simplify(inferrer.getTypeOfMember(field), closedWorld);
-      Expect.equals(type, inferredType, '$name of:\n$test');
-    });
-  });
-}
-
-void runTest(String test, Map<String, TestCallback> fields) {
-  doTest(test, false, fields);
-  doTest(test, true, fields);
-}
-
-void test() {
-  runTest(TEST_1, <String, TestCallback>{
-    'f': (closedWorld) => closedWorld.commonMasks.nullType
-  });
-  runTest(TEST_2, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.nullType,
-    'f2': (closedWorld) => closedWorld.commonMasks.uint31Type
-  });
-  runTest(TEST_3, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.uint31Type,
-    'f2': (closedWorld) => closedWorld.commonMasks.uint31Type.nullable()
-  });
-  runTest(TEST_4, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.interceptorType,
-    'f2': (closedWorld) => closedWorld.commonMasks.stringType.nullable()
-  });
-
-  // TODO(ngeoffray): We should try to infer that the initialization
-  // code at the declaration site of the fields does not matter.
-  runTest(TEST_5, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.interceptorType,
-    'f2': (closedWorld) => closedWorld.commonMasks.interceptorType,
-  });
-  runTest(TEST_6, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.interceptorType,
-    'f2': (closedWorld) => closedWorld.commonMasks.interceptorType,
-  });
-  runTest(TEST_7, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.interceptorType,
-    'f2': (closedWorld) => closedWorld.commonMasks.interceptorType,
-  });
-
-  runTest(TEST_8, <String, TestCallback>{
-    'f': (closedWorld) => closedWorld.commonMasks.stringType.nullable()
-  });
-  runTest(TEST_9, <String, TestCallback>{
-    'f': (closedWorld) => closedWorld.commonMasks.stringType.nullable()
-  });
-  runTest(TEST_10, <String, TestCallback>{
-    'f': (closedWorld) => closedWorld.commonMasks.uint31Type
-  });
-  runTest(TEST_11, <String, TestCallback>{
-    'fs': (closedWorld) => closedWorld.commonMasks.uint31Type
-  });
-
-  // TODO(ngeoffray): We should try to infer that the initialization
-  // code at the declaration site of the fields does not matter.
-  runTest(TEST_12, <String, TestCallback>{
-    'fs': (closedWorld) => closedWorld.commonMasks.interceptorType
-  });
-
-  runTest(TEST_13, <String, TestCallback>{
-    'fs': (closedWorld) => closedWorld.commonMasks.uint31Type
-  });
-  runTest(TEST_14, <String, TestCallback>{
-    'f': (closedWorld) => closedWorld.commonMasks.uint31Type
-  });
-  runTest(TEST_15, <String, TestCallback>{
-    'f': (closedWorld) {
-      ClassElement cls = closedWorld.commonElements.jsIndexableClass;
-      return new TypeMask.nonNullSubtype(cls, closedWorld);
-    }
-  });
-  runTest(TEST_16, <String, TestCallback>{
-    'f': (closedWorld) => closedWorld.commonMasks.interceptorType
-  });
-  runTest(TEST_17, <String, TestCallback>{
-    'f': (closedWorld) => closedWorld.commonMasks.uint31Type.nullable()
-  });
-  runTest(TEST_18, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.uint31Type,
-    'f2': (closedWorld) => closedWorld.commonMasks.stringType,
-    'f3': (closedWorld) => closedWorld.commonMasks.dynamicType
-  });
-  runTest(TEST_19, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.uint31Type,
-    'f2': (closedWorld) => closedWorld.commonMasks.stringType,
-    'f3': (closedWorld) => closedWorld.commonMasks.dynamicType
-  });
-  runTest(TEST_20, <String, TestCallback>{
-    'f': (closedWorld) => closedWorld.commonMasks.uint31Type.nullable()
-  });
-  runTest(TEST_21, <String, TestCallback>{
-    'f': (closedWorld) => closedWorld.commonMasks.uint31Type.nullable()
-  });
-
-  runTest(TEST_22, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.uint31Type,
-    'f2': (closedWorld) => closedWorld.commonMasks.uint31Type,
-    'f3': (closedWorld) => closedWorld.commonMasks.stringType.nullable()
-  });
-
-  runTest(TEST_23, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.uint31Type.nullable(),
-    'f2': (closedWorld) => closedWorld.commonMasks.uint31Type.nullable(),
-    'f3': (closedWorld) => closedWorld.commonMasks.uint31Type.nullable(),
-    'f4': (closedWorld) => closedWorld.commonMasks.uint31Type.nullable()
-  });
-
-  runTest(TEST_24, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.positiveIntType,
-    'f2': (closedWorld) => closedWorld.commonMasks.positiveIntType,
-    'f3': (closedWorld) => closedWorld.commonMasks.uint31Type,
-    'f4': (closedWorld) => closedWorld.commonMasks.uint31Type,
-    'f5': (closedWorld) => closedWorld.commonMasks.numType.nullable(),
-    'f6': (closedWorld) => closedWorld.commonMasks.stringType.nullable()
-  });
-
-  runTest(TEST_25, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.uint31Type
-  });
-  runTest(TEST_26, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.positiveIntType
-  });
-  runTest(TEST_27, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.uint31Type,
-    'f2': (closedWorld) => closedWorld.commonMasks.uint31Type.nullable()
-  });
-  runTest(TEST_28, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.uint31Type,
-    'f2': (closedWorld) => closedWorld.commonMasks.uint31Type.nullable()
-  });
-  runTest(TEST_29, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.uint31Type,
-    'f2': (closedWorld) => closedWorld.commonMasks.uint31Type.nullable()
-  });
-  runTest(TEST_30, <String, TestCallback>{
-    'f1': (closedWorld) => closedWorld.commonMasks.uint31Type,
-    'f2': (closedWorld) => closedWorld.commonMasks.uint31Type,
-    'f3': (closedWorld) => closedWorld.commonMasks.uint31Type.nullable()
-  });
-}
-
-void main() {
-  test();
-}
diff --git a/tests/compiler/dart2js/inference/inference0_test.dart b/tests/compiler/dart2js/inference/inference0_test.dart
new file mode 100644
index 0000000..3f3ae82
--- /dev/null
+++ b/tests/compiler/dart2js/inference/inference0_test.dart
@@ -0,0 +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 file.
+
+import 'inference_test_helper.dart';
+
+main(List<String> args) {
+  runTests(args, 0);
+}
diff --git a/tests/compiler/dart2js/inference/inference1_test.dart b/tests/compiler/dart2js/inference/inference1_test.dart
new file mode 100644
index 0000000..ba475ac
--- /dev/null
+++ b/tests/compiler/dart2js/inference/inference1_test.dart
@@ -0,0 +1,9 @@
+// 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 'inference_test_helper.dart';
+
+main(List<String> args) {
+  runTests(args, 1);
+}
diff --git a/tests/compiler/dart2js/inference/inference_test.dart b/tests/compiler/dart2js/inference/inference_test.dart
deleted file mode 100644
index ac40734..0000000
--- a/tests/compiler/dart2js/inference/inference_test.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io';
-import 'package:async_helper/async_helper.dart';
-import '../equivalence/id_equivalence_helper.dart';
-import 'inference_test_helper.dart';
-
-const List<String> skipForKernel = const <String>[
-  // TODO(johnniwinther): Remove this when issue 31767 is fixed.
-  'mixin_constructor_default_parameter_values.dart',
-];
-
-main(List<String> args) {
-  asyncTest(() async {
-    Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
-    await checkTests(
-        dataDir, computeMemberAstTypeMasks, computeMemberIrTypeMasks,
-        libDirectory: new Directory.fromUri(Platform.script.resolve('libs')),
-        forUserLibrariesOnly: true,
-        args: args,
-        options: [stopAfterTypeInference],
-        skipForKernel: skipForKernel);
-  });
-}
diff --git a/tests/compiler/dart2js/inference/inference_test_helper.dart b/tests/compiler/dart2js/inference/inference_test_helper.dart
index ac64daa..8e760c1 100644
--- a/tests/compiler/dart2js/inference/inference_test_helper.dart
+++ b/tests/compiler/dart2js/inference/inference_test_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:io';
+import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/closure.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/compiler.dart';
@@ -16,6 +18,31 @@
 import 'package:compiler/src/kernel/kernel_backend_strategy.dart';
 import 'package:kernel/ast.dart' as ir;
 import '../equivalence/id_equivalence.dart';
+import '../equivalence/id_equivalence_helper.dart';
+
+const List<String> skipForKernel = const <String>[
+  // TODO(johnniwinther): Remove this when issue 31767 is fixed.
+  'mixin_constructor_default_parameter_values.dart',
+];
+
+main(List<String> args) {
+  runTests(args);
+}
+
+runTests(List<String> args, [int shardIndex]) {
+  asyncTest(() async {
+    Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
+    await checkTests(
+        dataDir, computeMemberAstTypeMasks, computeMemberIrTypeMasks,
+        libDirectory: new Directory.fromUri(Platform.script.resolve('libs')),
+        forUserLibrariesOnly: true,
+        args: args,
+        options: [stopAfterTypeInference],
+        skipForKernel: skipForKernel,
+        shardIndex: shardIndex ?? 0,
+        shards: shardIndex != null ? 2 : 1);
+  });
+}
 
 /// Compute type inference data for [_member] as a [MemberElement].
 ///
diff --git a/tests/compiler/dart2js/inference/list_tracer_test.dart b/tests/compiler/dart2js/inference/list_tracer_test.dart
index b9f5e819..613f8a3 100644
--- a/tests/compiler/dart2js/inference/list_tracer_test.dart
+++ b/tests/compiler/dart2js/inference/list_tracer_test.dart
@@ -2,15 +2,13 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-/// Currently it only works with the mock compiler.
-
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
+import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/types/types.dart' show ContainerTypeMask, TypeMask;
+import 'package:compiler/src/commandline_options.dart';
+import 'package:expect/expect.dart';
 
 import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
+import '../memory_compiler.dart';
 
 String generateTest(String listAllocation) {
   return """
@@ -189,58 +187,76 @@
 }
 
 void main() {
-  doTest('[]', nullify: false); // Test literal list.
-  doTest('new List()', nullify: false); // Test growable list.
-  doTest('new List(1)', nullify: true); // Test fixed list.
-  doTest('new List.filled(1, 0)', nullify: false); // Test List.filled.
-  doTest('new List.filled(1, null)', nullify: true); // Test List.filled.
+  runTest({bool useKernel}) async {
+    // Test literal list.
+    await doTest('[]', nullify: false, useKernel: useKernel);
+    // Test growable list.
+    await doTest('new List()', nullify: false, useKernel: useKernel);
+    // Test fixed list.
+    await doTest('new List(1)', nullify: true, useKernel: useKernel);
+    // Test List.filled.
+    await doTest('new List.filled(1, 0)', nullify: false, useKernel: useKernel);
+    // Test List.filled.
+    await doTest('new List.filled(1, null)',
+        nullify: true, useKernel: useKernel);
+  }
+
+  asyncTest(() async {
+    print('--test from ast---------------------------------------------------');
+    await runTest(useKernel: false);
+    print('--test from kernel------------------------------------------------');
+    await runTest(useKernel: true);
+  });
 }
 
-void doTest(String allocation, {bool nullify}) {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(generateTest(allocation), uri,
-      expectedErrors: 0, expectedWarnings: 1);
-  asyncTest(() => compiler.run(uri).then((_) {
-        var typesInferrer = compiler.globalInference.typesInferrerInternal;
-        var closedWorld = typesInferrer.closedWorld;
-        var commonMasks = closedWorld.commonMasks;
+doTest(String allocation, {bool nullify, bool useKernel}) async {
+  String source = generateTest(allocation);
+  var result = await runCompiler(
+      memorySourceFiles: {'main.dart': source},
+      options: useKernel ? [Flags.useKernel] : []);
+  Expect.isTrue(result.isSuccess);
+  var compiler = result.compiler;
+  var typesInferrer = compiler.globalInference.typesInferrerInternal;
+  var closedWorld = typesInferrer.closedWorld;
+  var commonMasks = closedWorld.commonMasks;
 
-        checkType(String name, type) {
-          MemberElement element = findElement(compiler, name);
-          ContainerTypeMask mask = typesInferrer.getTypeOfMember(element);
-          if (nullify) type = type.nullable();
-          Expect.equals(type, simplify(mask.elementType, closedWorld), name);
-        }
+  checkType(String name, type) {
+    var element = findMember(closedWorld, name);
+    ContainerTypeMask mask = typesInferrer.getTypeOfMember(element);
+    if (nullify) type = type.nullable();
+    Expect.equals(type, simplify(mask.elementType, closedWorld), name);
+  }
 
-        checkType('listInField', commonMasks.numType);
-        checkType('listPassedToMethod', commonMasks.numType);
-        checkType('listReturnedFromMethod', commonMasks.numType);
-        checkType('listUsedWithCascade', commonMasks.numType);
-        checkType('listUsedInClosure', commonMasks.numType);
-        checkType('listPassedToSelector', commonMasks.numType);
-        checkType('listReturnedFromSelector', commonMasks.numType);
-        checkType('listUsedWithAddAndInsert', commonMasks.numType);
-        checkType('listUsedWithConstraint', commonMasks.positiveIntType);
-        checkType('listEscapingFromSetter', commonMasks.numType);
-        checkType('listUsedInLocal', commonMasks.numType);
-        checkType('listEscapingInSetterValue', commonMasks.numType);
-        checkType('listEscapingInIndex', commonMasks.numType);
-        checkType('listEscapingInIndexSet', commonMasks.uint31Type);
-        checkType('listEscapingTwiceInIndexSet', commonMasks.numType);
-        checkType('listSetInNonFinalField', commonMasks.numType);
-        checkType('listWithChangedLength', commonMasks.uint31Type.nullable());
+  checkType('listInField', commonMasks.numType);
+  checkType('listPassedToMethod', commonMasks.numType);
+  checkType('listReturnedFromMethod', commonMasks.numType);
+  checkType('listUsedWithCascade', commonMasks.numType);
+  checkType('listUsedInClosure', commonMasks.numType);
+  checkType('listPassedToSelector', commonMasks.numType);
+  checkType('listReturnedFromSelector', commonMasks.numType);
+  checkType('listUsedWithAddAndInsert', commonMasks.numType);
+  checkType('listUsedWithConstraint', commonMasks.positiveIntType);
+  checkType('listEscapingFromSetter', commonMasks.numType);
+  checkType('listUsedInLocal', commonMasks.numType);
+  checkType('listEscapingInSetterValue', commonMasks.numType);
+  checkType('listEscapingInIndex', commonMasks.numType);
+  checkType('listEscapingInIndexSet', commonMasks.uint31Type);
+  // TODO(johnniwinther): Since Iterable.iterableToString is part of the closed
+  // world we find the `dynamicType` instead of `numType`.
+  checkType('listEscapingTwiceInIndexSet', commonMasks.dynamicType);
+  checkType('listSetInNonFinalField', commonMasks.numType);
+  checkType('listWithChangedLength', commonMasks.uint31Type.nullable());
 
-        checkType('listPassedToClosure', commonMasks.dynamicType);
-        checkType('listReturnedFromClosure', commonMasks.dynamicType);
-        checkType('listUsedWithNonOkSelector', commonMasks.dynamicType);
-        checkType('listPassedAsOptionalParameter', commonMasks.numType);
-        checkType('listPassedAsNamedParameter', commonMasks.numType);
-        checkType('listStoredInList', commonMasks.uint31Type);
-        checkType('listStoredInListButEscapes', commonMasks.dynamicType);
+  checkType('listPassedToClosure', commonMasks.dynamicType);
+  checkType('listReturnedFromClosure', commonMasks.dynamicType);
+  checkType('listUsedWithNonOkSelector', commonMasks.dynamicType);
+  checkType('listPassedAsOptionalParameter', commonMasks.numType);
+  checkType('listPassedAsNamedParameter', commonMasks.numType);
+  checkType('listStoredInList', commonMasks.uint31Type);
+  checkType('listStoredInListButEscapes', commonMasks.dynamicType);
 
-        if (!allocation.contains('filled')) {
-          checkType('listUnset', new TypeMask.nonNullEmpty());
-          checkType('listOnlySetWithConstraint', new TypeMask.nonNullEmpty());
-        }
-      }));
+  if (!allocation.contains('filled')) {
+    checkType('listUnset', new TypeMask.nonNullEmpty());
+    checkType('listOnlySetWithConstraint', new TypeMask.nonNullEmpty());
+  }
 }
diff --git a/tests/compiler/dart2js/inference/map_tracer_keys_test.dart b/tests/compiler/dart2js/inference/map_tracer_keys_test.dart
deleted file mode 100644
index e968733..0000000
--- a/tests/compiler/dart2js/inference/map_tracer_keys_test.dart
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-/// Currently it only works with the mock compiler.
-
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'package:compiler/src/types/types.dart' show ContainerTypeMask, TypeMask;
-
-import '../compiler_helper.dart';
-
-String generateTest(String key, String value, bool initial) {
-  return """
-double aDouble = 42.5;
-List aList = [42];
-
-consume(x) => x;
-
-main() {
-""" +
-      (initial
-          ? """
-  var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4, $key: $value};
-"""
-          : """
-  var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4};
-  theMap[$key] = $value;
-""") +
-      """
-  for (var key in theMap.keys) {
-    aDouble = theMap[key];
-  }
-  // We have to reference it somewhere, so that it always gets resolved.
-  consume(aList);
-}
-""";
-}
-
-void main() {
-  // Test using keys without the list floating in
-  doTest();
-  // Test using keys with the list floating in as key
-  doTest(key: "aList", bail: true);
-  // Test using keys with the list floating in as value
-  doTest(value: "aList");
-  // And the above where we add the list as part of the map literal.
-  doTest(initial: true);
-  doTest(key: "aList", bail: true, initial: true);
-  doTest(value: "aList", initial: true);
-}
-
-void doTest(
-    {String key: "'d'",
-    String value: "5.5",
-    bool bail: false,
-    bool initial: false}) {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(generateTest(key, value, initial), uri,
-      expectedErrors: 0, expectedWarnings: 0);
-  asyncTest(() => compiler.run(uri).then((_) {
-        var typesInferrer = compiler.globalInference.typesInferrerInternal;
-        var commonMasks = typesInferrer.closedWorld.commonMasks;
-        MemberElement aDouble = findElement(compiler, 'aDouble');
-        var aDoubleType = typesInferrer.getTypeOfMember(aDouble);
-        MemberElement aList = findElement(compiler, 'aList');
-        var aListType = typesInferrer.getTypeOfMember(aList);
-
-        Expect.equals(aDoubleType, commonMasks.doubleType);
-        Expect.isTrue(aListType is ContainerTypeMask);
-        ContainerTypeMask container = aListType;
-        TypeMask elementType = container.elementType;
-        if (bail) {
-          Expect.equals(elementType, commonMasks.dynamicType);
-        } else {
-          Expect.equals(elementType, commonMasks.uint31Type);
-        }
-      }));
-}
diff --git a/tests/compiler/dart2js/inference/map_tracer_test.dart b/tests/compiler/dart2js/inference/map_tracer_test.dart
index ddac6fd..0c1e02b 100644
--- a/tests/compiler/dart2js/inference/map_tracer_test.dart
+++ b/tests/compiler/dart2js/inference/map_tracer_test.dart
@@ -2,15 +2,17 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-/// Currently it only works with the mock compiler.
-
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/inferrer/type_graph_inferrer.dart';
 import 'package:compiler/src/types/types.dart' show MapTypeMask, TypeMask;
+import 'package:compiler/src/world.dart';
+import 'package:expect/expect.dart';
 
 import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
+import '../memory_compiler.dart';
 
 String generateTest(String mapAllocation) {
   return """
@@ -119,6 +121,8 @@
 }
 
 main() {
+  anInt++;
+
   mapReturnedFromMethod[aKey] = anInt;
   bar()[aKey] = aDouble;
 
@@ -202,90 +206,103 @@
 }
 
 void main() {
-  // Test empty literal map
-  doTest('{}');
-  // Test preset map of <String,uint32>
-  doTest('{presetKey : anInt}', "presetKey", "anInt");
-  // Test preset map of <Double,uint32>
-  doTest('{aDouble : anInt}', "aDouble", "anInt");
+  runTests({bool useKernel}) async {
+    // Test empty literal map
+    await doTest('{}', useKernel: useKernel);
+    // Test preset map of <String,uint32>
+    await doTest('{presetKey : anInt}',
+        keyElementName: "presetKey",
+        valueElementName: "anInt",
+        useKernel: useKernel);
+    // Test preset map of <Double,uint32>
+    await doTest('{aDouble : anInt}',
+        keyElementName: "aDouble",
+        valueElementName: "anInt",
+        useKernel: useKernel);
+  }
+
+  asyncTest(() async {
+    print('--test from ast---------------------------------------------------');
+    await runTests(useKernel: false);
+    print('--test from kernel------------------------------------------------');
+    await runTests(useKernel: true);
+  });
 }
 
-void doTest(String allocation,
-    [String keyElementName, String valueElementName]) {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(generateTest(allocation), uri,
-      expectedErrors: 0, expectedWarnings: 1);
-  asyncTest(() => compiler.run(uri).then((_) {
-        var keyType, valueType;
-        var typesInferrer = compiler.globalInference.typesInferrerInternal;
-        var closedWorld = typesInferrer.closedWorld;
-        var commonMasks = closedWorld.commonMasks;
-        var emptyType = new TypeMask.nonNullEmpty();
-        MemberElement aKey = findElement(compiler, 'aKey');
-        var aKeyType = typesInferrer.getTypeOfMember(aKey);
-        if (keyElementName != null) {
-          MemberElement keyElement = findElement(compiler, keyElementName);
-          keyType = typesInferrer.getTypeOfMember(keyElement);
-        }
-        if (valueElementName != null) {
-          MemberElement valueElement = findElement(compiler, valueElementName);
-          valueType = typesInferrer.getTypeOfMember(valueElement);
-        }
-        if (keyType == null) keyType = emptyType;
-        if (valueType == null) valueType = emptyType;
+doTest(String allocation,
+    {String keyElementName, String valueElementName, bool useKernel}) async {
+  String source = generateTest(allocation);
+  var result = await runCompiler(
+      memorySourceFiles: {'main.dart': source},
+      options: useKernel ? [Flags.useKernel] : []);
+  Expect.isTrue(result.isSuccess);
+  Compiler compiler = result.compiler;
+  TypeMask keyType, valueType;
+  TypeGraphInferrer typesInferrer =
+      compiler.globalInference.typesInferrerInternal;
+  ClosedWorld closedWorld = typesInferrer.closedWorld;
+  CommonMasks commonMasks = closedWorld.commonMasks;
+  TypeMask emptyType = new TypeMask.nonNullEmpty();
+  MemberEntity aKey = findMember(closedWorld, 'aKey');
+  TypeMask aKeyType = typesInferrer.getTypeOfMember(aKey);
+  if (keyElementName != null) {
+    MemberEntity keyElement = findMember(closedWorld, keyElementName);
+    keyType = typesInferrer.getTypeOfMember(keyElement);
+  }
+  if (valueElementName != null) {
+    MemberEntity valueElement = findMember(closedWorld, valueElementName);
+    valueType = typesInferrer.getTypeOfMember(valueElement);
+  }
+  if (keyType == null) keyType = emptyType;
+  if (valueType == null) valueType = emptyType;
 
-        checkType(String name, keyType, valueType) {
-          MemberElement element = findElement(compiler, name);
-          MapTypeMask mask = typesInferrer.getTypeOfMember(element);
-          Expect.equals(keyType, simplify(mask.keyType, closedWorld), name);
-          Expect.equals(valueType, simplify(mask.valueType, closedWorld), name);
-        }
+  checkType(String name, keyType, valueType) {
+    MemberEntity element = findMember(closedWorld, name);
+    MapTypeMask mask = typesInferrer.getTypeOfMember(element);
+    Expect.equals(keyType, simplify(mask.keyType, closedWorld), name);
+    Expect.equals(valueType, simplify(mask.valueType, closedWorld), name);
+  }
 
-        K(TypeMask other) =>
-            simplify(keyType.union(other, closedWorld), closedWorld);
-        V(TypeMask other) =>
-            simplify(valueType.union(other, closedWorld), closedWorld)
-                .nullable();
+  K(TypeMask other) => simplify(keyType.union(other, closedWorld), closedWorld);
+  V(TypeMask other) =>
+      simplify(valueType.union(other, closedWorld), closedWorld).nullable();
 
-        checkType('mapInField', K(aKeyType), V(commonMasks.numType));
-        checkType('mapPassedToMethod', K(aKeyType), V(commonMasks.numType));
-        checkType('mapReturnedFromMethod', K(aKeyType), V(commonMasks.numType));
-        checkType('mapUsedWithCascade', K(aKeyType), V(commonMasks.numType));
-        checkType('mapUsedInClosure', K(aKeyType), V(commonMasks.numType));
-        checkType('mapPassedToSelector', K(aKeyType), V(commonMasks.numType));
-        checkType(
-            'mapReturnedFromSelector', K(aKeyType), V(commonMasks.numType));
-        checkType(
-            'mapUsedWithConstraint', K(aKeyType), V(commonMasks.uint31Type));
-        checkType('mapEscapingFromSetter', K(aKeyType), V(commonMasks.numType));
-        checkType('mapUsedInLocal', K(aKeyType), V(commonMasks.numType));
-        checkType(
-            'mapEscapingInSetterValue', K(aKeyType), V(commonMasks.numType));
-        checkType('mapEscapingInIndex', K(aKeyType), V(commonMasks.numType));
-        checkType(
-            'mapEscapingInIndexSet', K(aKeyType), V(commonMasks.uint31Type));
-        checkType(
-            'mapEscapingTwiceInIndexSet', K(aKeyType), V(commonMasks.numType));
-        checkType('mapSetInNonFinalField', K(aKeyType), V(commonMasks.numType));
+  checkType('mapInField', K(aKeyType), V(commonMasks.numType));
+  checkType('mapPassedToMethod', K(aKeyType), V(commonMasks.numType));
+  checkType('mapReturnedFromMethod', K(aKeyType), V(commonMasks.numType));
+  checkType('mapUsedWithCascade', K(aKeyType), V(commonMasks.numType));
+  checkType('mapUsedInClosure', K(aKeyType), V(commonMasks.numType));
+  checkType('mapPassedToSelector', K(aKeyType), V(commonMasks.numType));
+  checkType('mapReturnedFromSelector', K(aKeyType), V(commonMasks.numType));
+  checkType(
+      'mapUsedWithConstraint', K(aKeyType), V(commonMasks.positiveIntType));
+  checkType('mapEscapingFromSetter', K(aKeyType), V(commonMasks.numType));
+  checkType('mapUsedInLocal', K(aKeyType), V(commonMasks.numType));
+  checkType('mapEscapingInSetterValue', K(aKeyType), V(commonMasks.numType));
+  checkType('mapEscapingInIndex', K(aKeyType), V(commonMasks.numType));
+  checkType(
+      'mapEscapingInIndexSet', K(aKeyType), V(commonMasks.positiveIntType));
+  // TODO(johnniwinther): Reenable this when we don't bail out due to
+  // (benign) JS calls.
+  //checkType('mapEscapingTwiceInIndexSet', K(aKeyType), V(commonMasks.numType));
+  checkType('mapSetInNonFinalField', K(aKeyType), V(commonMasks.numType));
 
-        checkType('mapPassedToClosure', K(commonMasks.dynamicType),
-            V(commonMasks.dynamicType));
-        checkType('mapReturnedFromClosure', K(commonMasks.dynamicType),
-            V(commonMasks.dynamicType));
-        checkType('mapUsedWithNonOkSelector', K(commonMasks.dynamicType),
-            V(commonMasks.dynamicType));
-        checkType('mapPassedAsOptionalParameter', K(aKeyType),
-            V(commonMasks.numType));
-        checkType(
-            'mapPassedAsNamedParameter', K(aKeyType), V(commonMasks.numType));
-        checkType('mapStoredInList', K(aKeyType), V(commonMasks.uint31Type));
-        checkType('mapStoredInListButEscapes', K(commonMasks.dynamicType),
-            V(commonMasks.dynamicType));
-        checkType('mapStoredInMap', K(aKeyType), V(commonMasks.uint31Type));
-        checkType('mapStoredInMapButEscapes', K(commonMasks.dynamicType),
-            V(commonMasks.dynamicType));
+  checkType('mapPassedToClosure', K(commonMasks.dynamicType),
+      V(commonMasks.dynamicType));
+  checkType('mapReturnedFromClosure', K(commonMasks.dynamicType),
+      V(commonMasks.dynamicType));
+  checkType('mapUsedWithNonOkSelector', K(commonMasks.dynamicType),
+      V(commonMasks.dynamicType));
+  checkType(
+      'mapPassedAsOptionalParameter', K(aKeyType), V(commonMasks.numType));
+  checkType('mapPassedAsNamedParameter', K(aKeyType), V(commonMasks.numType));
+  checkType('mapStoredInList', K(aKeyType), V(commonMasks.uint31Type));
+  checkType('mapStoredInListButEscapes', K(commonMasks.dynamicType),
+      V(commonMasks.dynamicType));
+  checkType('mapStoredInMap', K(aKeyType), V(commonMasks.uint31Type));
+  checkType('mapStoredInMapButEscapes', K(commonMasks.dynamicType),
+      V(commonMasks.dynamicType));
 
-        checkType('mapUnset', K(emptyType), V(emptyType));
-        checkType('mapOnlySetWithConstraint', K(aKeyType), V(emptyType));
-      }));
+  checkType('mapUnset', K(emptyType), V(emptyType));
+  checkType('mapOnlySetWithConstraint', K(aKeyType), V(emptyType));
 }
diff --git a/tests/compiler/dart2js/inference/show.dart b/tests/compiler/dart2js/inference/show.dart
index 6870b5f..3d7c465 100644
--- a/tests/compiler/dart2js/inference/show.dart
+++ b/tests/compiler/dart2js/inference/show.dart
@@ -4,9 +4,35 @@
 
 /// Helper program that shows the inferrer data on a dart program.
 
+import 'package:args/args.dart';
+import 'package:compiler/src/inferrer/inferrer_engine.dart';
+import '../equivalence/id_equivalence_helper.dart';
 import '../equivalence/show_helper.dart';
 import 'inference_test_helper.dart';
+import 'side_effects_test.dart';
+import 'callers_test.dart';
 
 main(List<String> args) async {
-  await show(args, computeMemberAstTypeMasks, computeMemberIrTypeMasks);
+  ArgParser argParser = createArgParser();
+  argParser.addFlag('inference', defaultsTo: true);
+  argParser.addFlag('side-effects', defaultsTo: false);
+  argParser.addFlag('callers', defaultsTo: false);
+  ArgResults results = argParser.parse(args);
+
+  ComputeMemberDataFunction astFunction;
+  ComputeMemberDataFunction kernelFunction;
+  if (results['side-effects']) {
+    astFunction = computeMemberAstSideEffects;
+    kernelFunction = computeMemberIrSideEffects;
+  }
+  if (results['callers']) {
+    InferrerEngineImpl.retainDataForTesting = true;
+    astFunction = computeMemberAstCallers;
+    kernelFunction = computeMemberIrCallers;
+  } else {
+    InferrerEngineImpl.useSorterForTesting = true;
+    astFunction = computeMemberAstTypeMasks;
+    kernelFunction = computeMemberIrTypeMasks;
+  }
+  await show(results, astFunction, kernelFunction);
 }
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_callers_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_callers_test.dart
deleted file mode 100644
index 91fd918..0000000
--- a/tests/compiler/dart2js/inference/simple_inferrer_callers_test.dart
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-// Test that computation of callers of an element works when two
-// elements of the same name are being invoked in the same method.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:expect/expect.dart';
-import 'package:compiler/src/common_elements.dart';
-import 'package:compiler/src/inferrer/type_graph_inferrer.dart';
-import 'package:compiler/src/world.dart' show ClosedWorld, ClosedWorldRefiner;
-
-import '../compiler_helper.dart';
-
-const String TEST = """
-class A {
-  var field;
-}
-
-class B {
-  var field;
-}
-
-main() {
-  new A().field;
-  new B().field;
-}
-""";
-
-// Create our own type inferrer to avoid clearing out the internal
-// data structures.
-class MyInferrer extends AstTypeGraphInferrer {
-  MyInferrer(compiler, closedWorld, closedWorldRefiner)
-      : super(compiler, closedWorld, closedWorldRefiner);
-  clear() {}
-}
-
-void main() {
-  Uri uri = new Uri(scheme: 'source');
-  var compiler = mockCompilerFor(TEST, uri, analyzeOnly: true);
-  asyncTest(() => compiler.run(uri).then((_) {
-        ElementEnvironment elementEnvironment =
-            compiler.frontendStrategy.elementEnvironment;
-        ClosedWorldRefiner closedWorldRefiner =
-            compiler.closeResolution(elementEnvironment.mainFunction);
-        ClosedWorld closedWorld =
-            compiler.resolutionWorldBuilder.closedWorldForTesting;
-        var inferrer =
-            new MyInferrer(compiler, closedWorld, closedWorldRefiner);
-        compiler.globalInference.typesInferrerInternal = inferrer;
-        compiler.globalInference.runGlobalTypeInference(
-            closedWorld.elementEnvironment.mainFunction,
-            closedWorld,
-            closedWorldRefiner);
-        var mainElement = findElement(compiler, 'main');
-        dynamic classA = findElement(compiler, 'A');
-        var fieldA = classA.lookupLocalMember('field');
-        dynamic classB = findElement(compiler, 'B');
-        var fieldB = classB.lookupLocalMember('field');
-
-        Expect.isTrue(inferrer.getCallersOf(fieldA).contains(mainElement));
-        Expect.isTrue(inferrer.getCallersOf(fieldB).contains(mainElement));
-      }));
-}
diff --git a/tests/compiler/dart2js/inlining/inlining_viewer.dart b/tests/compiler/dart2js/inlining/inlining_viewer.dart
index ed25d93..9ec0739 100644
--- a/tests/compiler/dart2js/inlining/inlining_viewer.dart
+++ b/tests/compiler/dart2js/inlining/inlining_viewer.dart
@@ -10,5 +10,6 @@
 
 main(List<String> args) async {
   JavaScriptBackend.cacheCodegenImpactForTesting = true;
-  await show(args, computeMemberAstInlinings, computeMemberIrInlinings);
+  await show(createArgParser().parse(args), computeMemberAstInlinings,
+      computeMemberIrInlinings);
 }
diff --git a/tests/compiler/dart2js/js/js_parser_test.dart b/tests/compiler/dart2js/js/js_parser_test.dart
index 7d76533..ac5c6a0 100644
--- a/tests/compiler/dart2js/js/js_parser_test.dart
+++ b/tests/compiler/dart2js/js/js_parser_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.
 
+// VMOptions= --no_limit_ints_to_64_bits
 import 'package:expect/expect.dart';
 import 'package:compiler/src/js/js.dart' as jsAst;
 import 'package:compiler/src/js/js.dart' show js;
diff --git a/tests/compiler/dart2js/memory_compiler.dart b/tests/compiler/dart2js/memory_compiler.dart
index 4fc6919..25e5600 100644
--- a/tests/compiler/dart2js/memory_compiler.dart
+++ b/tests/compiler/dart2js/memory_compiler.dart
@@ -72,8 +72,12 @@
 Expando<MemorySourceFileProvider> expando =
     new Expando<MemorySourceFileProvider>();
 
+// Cached kernel state for non-strong mode.
 fe.InitializedCompilerState kernelInitializedCompilerState;
 
+// Cached kernel state for strong mode.
+fe.InitializedCompilerState strongKernelInitializedCompilerState;
+
 /// memorySourceFiles can contain a map of string filename to string file
 /// contents or string file name to binary file contents (hence the `dynamic`
 /// type for the second parameter).
@@ -110,14 +114,20 @@
   if (beforeRun != null) {
     beforeRun(compiler);
   }
+  fe.InitializedCompilerState compilerState;
   bool isSuccess = await compiler.run(entryPoint);
   if (compiler.libraryLoader is KernelLibraryLoaderTask) {
     KernelLibraryLoaderTask loader = compiler.libraryLoader;
-    kernelInitializedCompilerState = loader.initializedCompilerState;
+    if (compiler.options.strongMode) {
+      compilerState = strongKernelInitializedCompilerState =
+          loader.initializedCompilerState;
+    } else {
+      compilerState =
+          kernelInitializedCompilerState = loader.initializedCompilerState;
+    }
   }
   return new CompilationResult(compiler,
-      isSuccess: isSuccess,
-      kernelInitializedCompilerState: kernelInitializedCompilerState);
+      isSuccess: isSuccess, kernelInitializedCompilerState: compilerState);
 }
 
 CompilerImpl compilerFor(
@@ -172,21 +182,25 @@
     outputProvider = const NullCompilerOutput();
   }
 
+  CompilerOptions compilerOptions = new CompilerOptions.parse(
+      entryPoint: entryPoint,
+      resolutionInputs: resolutionInputs,
+      libraryRoot: libraryRoot,
+      packageRoot: packageRoot,
+      options: options,
+      environment: {},
+      platformBinaries: platformBinaries,
+      packageConfig: packageConfig,
+      packagesDiscoveryProvider: packagesDiscoveryProvider);
+  if (compilerOptions.strongMode) {
+    compilerOptions.kernelInitializedCompilerState =
+        strongKernelInitializedCompilerState;
+  } else {
+    compilerOptions.kernelInitializedCompilerState =
+        kernelInitializedCompilerState;
+  }
   CompilerImpl compiler = new CompilerImpl(
-      provider,
-      outputProvider,
-      diagnosticHandler,
-      new CompilerOptions.parse(
-          entryPoint: entryPoint,
-          resolutionInputs: resolutionInputs,
-          libraryRoot: libraryRoot,
-          packageRoot: packageRoot,
-          options: options,
-          environment: {},
-          platformBinaries: platformBinaries,
-          packageConfig: packageConfig,
-          packagesDiscoveryProvider: packagesDiscoveryProvider)
-        ..kernelInitializedCompilerState = kernelInitializedCompilerState);
+      provider, outputProvider, diagnosticHandler, compilerOptions);
 
   if (cachedCompiler != null) {
     Map copiedLibraries = {};
diff --git a/tests/compiler/dart2js/data/mirrors_helper.dart b/tests/compiler/dart2js/mirrors/data/mirrors_helper.dart
similarity index 100%
rename from tests/compiler/dart2js/data/mirrors_helper.dart
rename to tests/compiler/dart2js/mirrors/data/mirrors_helper.dart
diff --git a/tests/compiler/dart2js/output_type_test.dart b/tests/compiler/dart2js/output_type_test.dart
index 85338dd..0e07a75 100644
--- a/tests/compiler/dart2js/output_type_test.dart
+++ b/tests/compiler/dart2js/output_type_test.dart
@@ -79,7 +79,7 @@
     PRINT_GRAPH = true;
     TRACE_FILTER_PATTERN_FOR_TEST = 'x';
     await test([
-      'tests/compiler/dart2js/data/deferred_helper.dart',
+      'tests/compiler/dart2js/deferred/data/deferred_helper.dart',
       '--out=custom.js',
       '--deferred-map=def/deferred.json',
       Flags.dumpInfo,
@@ -111,7 +111,7 @@
 
     await test(
         [
-          'tests/compiler/dart2js/data/deferred_helper.dart',
+          'tests/compiler/dart2js/deferred/data/deferred_helper.dart',
           Flags.useContentSecurityPolicy,
         ]..addAll(additionOptionals),
         expectedOutput,
@@ -120,7 +120,7 @@
     if (!useKernel) {
       // Option --resolve-only is only supported for the old frontend.
       await test([
-        'tests/compiler/dart2js/data/deferred_helper.dart',
+        'tests/compiler/dart2js/deferred/data/deferred_helper.dart',
         '--out=custom.data',
         '--resolve-only',
       ], [
diff --git a/tests/compiler/dart2js/receiver_type_test.dart b/tests/compiler/dart2js/receiver_type_test.dart
index c408182..711633f 100644
--- a/tests/compiler/dart2js/receiver_type_test.dart
+++ b/tests/compiler/dart2js/receiver_type_test.dart
@@ -56,7 +56,9 @@
     TypeMask mask = new TypeMask.nonNullSubclass(cls, closedWorld);
     TypeMask receiverType = closedWorld.computeReceiverType(callSelector, mask);
     if (cls.isClosure) {
-      String expected = '$mask';
+      // TODO(johnniwinther): Expect mask based on 'cls' when all synthesized
+      // call methods are registered.
+      String expected = '[empty]'; //'$mask';
       Expect.equals(expected, '${receiverType}',
           "Unexpected receiver type for $callSelector on $mask");
       closureCount++;
diff --git a/tests/compiler/dart2js/rti/data/type_literal.dart b/tests/compiler/dart2js/rti/data/type_literal.dart
index 5e09e8a..4cc8c0b 100644
--- a/tests/compiler/dart2js/rti/data/type_literal.dart
+++ b/tests/compiler/dart2js/rti/data/type_literal.dart
@@ -4,9 +4,66 @@
 
 /*class: A:needsArgs,exp*/
 class A<T> {
-  m() => T;
+  instanceMethod() => T;
+
+  /*ast.element: A.staticMethod:exp*/
+  /*kernel.element: A.staticMethod:needsArgs,exp*/
+  static staticMethod<S>() => S;
+
+  /*ast.element: A.staticMethodNested:exp*/
+  /*kernel.element: A.staticMethodNested:needsArgs,exp*/
+  static staticMethodNested<S>() {
+    var inner = () => S;
+    return inner();
+  }
+
+  /*ast.element: A.genericMethod:exp*/
+  /*kernel.element: A.genericMethod:needsArgs,exp*/
+  genericMethod<S>() => S;
+
+  /*ast.element: A.genericMethodNested:exp*/
+  /*kernel.element: A.genericMethodNested:needsArgs,exp*/
+  genericMethodNested<S>() {
+    var inner = () => S;
+    return inner();
+  }
+
+  localFunction() {
+    /*ast.exp*/ /*kernel.needsArgs,exp*/ local<S>() => S;
+
+    return local<bool>();
+  }
+
+  localFunctionNested() {
+    /*ast.exp*/ /*kernel.needsArgs,exp*/ local<S>() {
+      var inner = () => S;
+      return inner();
+    }
+
+    return local<bool>();
+  }
+}
+
+/*ast.element: topLevelMethod:exp*/
+/*kernel.element: topLevelMethod:needsArgs,exp*/
+topLevelMethod<S>() => S;
+
+/*ast.element: topLevelMethodNested:exp*/
+/*kernel.element: topLevelMethodNested:needsArgs,exp*/
+topLevelMethodNested<S>() {
+  var inner = () => S;
+  return inner();
 }
 
 main() {
-  new A<int>().m();
+  var a = new A<int>();
+  a.instanceMethod();
+  a.genericMethod<String>();
+  a.genericMethodNested<String>();
+  a.localFunction();
+  a.localFunctionNested();
+  A.staticMethod<double>();
+  A.staticMethodNested<double>();
+  topLevelMethod<num>();
+  topLevelMethodNested<num>();
 }
diff --git a/tests/compiler/dart2js/rti/disable_rti_test.dart b/tests/compiler/dart2js/rti/disable_rti_test.dart
index 5ca31af..18981ca 100644
--- a/tests/compiler/dart2js/rti/disable_rti_test.dart
+++ b/tests/compiler/dart2js/rti/disable_rti_test.dart
@@ -41,10 +41,11 @@
 };
 
 main() {
-  asyncTest(() async {
+  runTest({bool useKernel}) async {
     CompilationResult result = await runCompiler(
         memorySourceFiles: {'main.dart': code},
-        options: [Flags.disableRtiOptimization, Flags.disableInlining]);
+        options: [Flags.disableRtiOptimization, Flags.disableInlining]
+          ..addAll(useKernel ? [Flags.useKernel] : []));
     Expect.isTrue(result.isSuccess);
     Compiler compiler = result.compiler;
     ClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
@@ -80,6 +81,13 @@
     LibraryEntity library = elementEnvironment.mainLibrary;
     elementEnvironment.forEachClass(library, processClass);
     elementEnvironment.forEachLibraryMember(library, processMember);
+  }
+
+  asyncTest(() async {
+    print('--test from ast---------------------------------------------------');
+    await runTest(useKernel: false);
+    print('--test from kernel------------------------------------------------');
+    await runTest(useKernel: true);
   });
 }
 
diff --git a/tests/compiler/dart2js/rti/rti_need_test.dart b/tests/compiler/dart2js/rti/rti_need_test.dart
index ba20c2f..67de10c 100644
--- a/tests/compiler/dart2js/rti/rti_need_test.dart
+++ b/tests/compiler/dart2js/rti/rti_need_test.dart
@@ -17,6 +17,7 @@
 import 'package:compiler/src/js_backend/runtime_types.dart';
 import 'package:compiler/src/kernel/element_map.dart';
 import 'package:compiler/src/kernel/kernel_backend_strategy.dart';
+import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:compiler/src/ssa/builder.dart' as ast;
 import 'package:compiler/src/universe/world_builder.dart';
 import 'package:kernel/ast.dart' as ir;
@@ -114,7 +115,7 @@
     }
     ClassEntity frontendClass = getFrontendClass(backendClass);
     comma = findDependencies(sb, comma, frontendClass);
-    if (rtiNeedBuilder.classesUsingTypeVariableExpression
+    if (rtiNeedBuilder.classesUsingTypeVariableLiterals
         .contains(frontendClass)) {
       sb.write('${comma}exp');
       comma = ',';
@@ -146,16 +147,30 @@
         sb.write('${comma}needsSignature');
         comma = ',';
       }
-      if (frontendClosure != null &&
-          rtiNeed.localFunctionNeedsSignature(frontendClosure)) {
-        sb.write('${comma}needsSignature');
-        comma = ',';
+      if (frontendClosure != null) {
+        if (frontendClosure is LocalFunctionElement &&
+            rtiNeed.localFunctionNeedsSignature(frontendClosure)) {
+          sb.write('${comma}needsSignature');
+          comma = ',';
+        }
+        if (rtiNeedBuilder.localFunctionsUsingTypeVariableLiterals
+            .contains(frontendClosure)) {
+          sb.write('${comma}exp');
+          comma = ',';
+        }
       }
-      comma = findDependencies(sb, comma, frontendMember);
-      comma = findChecks(
-          sb, comma, 'explicit', frontendMember, rtiNeedBuilder.isChecks);
-      comma = findChecks(sb, comma, 'implicit', frontendMember,
-          rtiNeedBuilder.implicitIsChecks);
+      if (frontendMember != null) {
+        if (rtiNeedBuilder.methodsUsingTypeVariableLiterals
+            .contains(frontendMember)) {
+          sb.write('${comma}exp');
+          comma = ',';
+        }
+        comma = findDependencies(sb, comma, frontendMember);
+        comma = findChecks(
+            sb, comma, 'explicit', frontendMember, rtiNeedBuilder.isChecks);
+        comma = findChecks(sb, comma, 'implicit', frontendMember,
+            rtiNeedBuilder.implicitIsChecks);
+      }
     }
     return sb.toString();
   }
@@ -332,7 +347,17 @@
   }
 
   @override
-  Local getFrontendClosure(MemberEntity member) => null;
+  Local getFrontendClosure(MemberEntity member) {
+    KernelBackendStrategy backendStrategy = compiler.backendStrategy;
+    ir.Node node = backendStrategy.elementMap.getMemberDefinition(member).node;
+    if (node is ir.FunctionDeclaration || node is ir.FunctionExpression) {
+      KernelFrontEndStrategy frontendStrategy = compiler.frontendStrategy;
+      KernelToElementMapForImpact frontendElementMap =
+          frontendStrategy.elementMap;
+      return frontendElementMap.getLocalFunction(node);
+    }
+    return null;
+  }
 }
 
 class RtiClassNeedIrComputer extends DataRegistry
diff --git a/tests/compiler/dart2js/serialization/equivalence_test.dart b/tests/compiler/dart2js/serialization/equivalence_test.dart
index 1508168..8aa3f25 100644
--- a/tests/compiler/dart2js/serialization/equivalence_test.dart
+++ b/tests/compiler/dart2js/serialization/equivalence_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.
 
+// VMOptions= --no_limit_ints_to_64_bits
 library dart2js.serialization_test;
 
 import 'dart:io';
diff --git a/tests/compiler/dart2js/serialization/impact_test.dart b/tests/compiler/dart2js/serialization/impact_test.dart
index 3b40213..1e5ce1e 100644
--- a/tests/compiler/dart2js/serialization/impact_test.dart
+++ b/tests/compiler/dart2js/serialization/impact_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.
 
+// VMOptions= --no_limit_ints_to_64_bits
 library dart2js.serialization_impact_test;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/serialization/model0_test.dart b/tests/compiler/dart2js/serialization/model0_test.dart
index c4ef537..3731bd1 100644
--- a/tests/compiler/dart2js/serialization/model0_test.dart
+++ b/tests/compiler/dart2js/serialization/model0_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.
 
+// VMOptions= --no_limit_ints_to_64_bits
 library dart2js.serialization.model0_test;
 
 import 'model_test_helper.dart' as test;
diff --git a/tests/compiler/dart2js/serialization/reserialization_test.dart b/tests/compiler/dart2js/serialization/reserialization_test.dart
index 540541b..8814e54 100644
--- a/tests/compiler/dart2js/serialization/reserialization_test.dart
+++ b/tests/compiler/dart2js/serialization/reserialization_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.
 
+// VMOptions= --no_limit_ints_to_64_bits
 library dart2js.reserialization_test;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/serialization/resolved_ast_test.dart b/tests/compiler/dart2js/serialization/resolved_ast_test.dart
index 191cea5..5c7b3a1 100644
--- a/tests/compiler/dart2js/serialization/resolved_ast_test.dart
+++ b/tests/compiler/dart2js/serialization/resolved_ast_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.
 
+// VMOptions= --no_limit_ints_to_64_bits
 library dart2js.serialization_resolved_ast_test;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/sourcemaps/helpers/output_structure.dart b/tests/compiler/dart2js/sourcemaps/helpers/output_structure.dart
index 9f0bccb..f12212a 100644
--- a/tests/compiler/dart2js/sourcemaps/helpers/output_structure.dart
+++ b/tests/compiler/dart2js/sourcemaps/helpers/output_structure.dart
@@ -648,7 +648,9 @@
   final String name;
   final int offset;
 
-  CodeLocation(this.uri, this.name, this.offset);
+  CodeLocation(this.uri, this.name, this.offset) {
+    assert(uri != null);
+  }
 
   String toString() => '$uri:$name:$offset';
 
diff --git a/tests/compiler/dart2js/sourcemaps/helpers/source_map_validator_helper.dart b/tests/compiler/dart2js/sourcemaps/helpers/source_map_validator_helper.dart
index 23aede2..75c211b 100644
--- a/tests/compiler/dart2js/sourcemaps/helpers/source_map_validator_helper.dart
+++ b/tests/compiler/dart2js/sourcemaps/helpers/source_map_validator_helper.dart
@@ -180,6 +180,12 @@
           if (interval != null && interval.contains(sourcePosition)) {
             AstElement innerElement = findInnermost(element);
             String expectedName = computeElementNameForSourceMaps(innerElement);
+            int stubIndex = name.indexOf('[function-entry');
+            if (stubIndex != -1) {
+              Expect.isTrue(innerElement is FunctionElement,
+                  "Unexpected element $innerElement for stub '$name'.");
+              name = name.substring(0, stubIndex);
+            }
             if (name != expectedName) {
               // For the code
               //    (){}();
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/parameters.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/parameters.dart
new file mode 100644
index 0000000..f9a6d06
--- /dev/null
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/parameters.dart
@@ -0,0 +1,76 @@
+// 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:meta/dart2js.dart';
+
+main() {
+  var c = new Class();
+  c. /*1:main*/ instancePositional1(0);
+}
+
+class Class {
+  @noInline
+  /*2:Class.instancePositional1[function-entry$1]*/ instancePositional1(a,
+      [b = 42, c = 87]) {
+    print('instancePositional1($a,$b,$c)');
+    /*3:Class.instancePositional1*/ instancePositional2(1, 2);
+  }
+
+  @noInline
+  /*4:Class.instancePositional2[function-entry$2]*/ instancePositional2(a,
+      [b = 42, c = 87]) {
+    print('instancePositional2($a,$b,$c)');
+    /*5:Class.instancePositional2*/ instancePositional3(3, 4, 5);
+  }
+
+  @noInline
+  instancePositional3(a, [b = 42, c = 87]) {
+    print('instancePositional3($a,$b,$c)');
+    /*6:Class.instancePositional3*/ instanceNamed1(0);
+  }
+
+  @noInline
+  /*7:Class.instanceNamed1[function-entry$1]*/ instanceNamed1(a,
+      {b: 42, c: 87, d: 735}) {
+    print('instanceNamed1($a,b:$b,c:$c,d:$d)');
+    /*8:Class.instanceNamed1*/ instanceNamed2(1, b: 2);
+  }
+
+  @noInline
+  /*9:Class.instanceNamed2[function-entry$1$b]*/ instanceNamed2(a,
+      {b: 42, c: 87, d: 735}) {
+    print('instanceNamed2($a,b:$b,c:$c,d:$d)');
+    /*10:Class.instanceNamed2*/ instanceNamed3(3, c: 123);
+  }
+
+  @noInline
+  /*11:Class.instanceNamed3[function-entry$1$c]*/ instanceNamed3(a,
+      {b: 42, c: 87, d: 735}) {
+    print('instanceNamed3($a,b:$b,c:$c,d:$d)');
+    /*12:Class.instanceNamed3*/ instanceNamed4(4, c: 45, b: 76);
+  }
+
+  @noInline
+  /*13:Class.instanceNamed4[function-entry$1$b$c]*/ instanceNamed4(a,
+      {b: 42, c: 87, d: 735}) {
+    print('instanceNamed4($a,b:$b,c:$c,d:$d)');
+    /*14:Class.instanceNamed4*/ instanceNamed5(5, c: 6, b: 7, d: 8);
+  }
+
+  @noInline
+  instanceNamed5(a, {b: 42, c: 87, d: 735}) {
+    print('instanceNamed5($a,b:$b,c:$c,d:$d)');
+    /*18:Class.instanceNamed5[function-entry$0].local*/ local([e = 42]) {
+      print('instanceNamed5.local($e)');
+      /*19:Class.instanceNamed5.local*/ throw '>ExceptionMarker<';
+    }
+
+    var anonymous = /*16:Class.instanceNamed5[function-entry$0].<anonymous function>*/ (
+        {f: 87}) {
+      print('instanceNamed5.<anonymous(f:$f)');
+      /*17:Class.instanceNamed5.<anonymous function>*/ local();
+    };
+    anonymous. /*15:Class.instanceNamed5*/ call();
+  }
+}
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace_test.dart b/tests/compiler/dart2js/sourcemaps/stacktrace_test.dart
index 12fd748..76ed3de 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace_test.dart
@@ -92,7 +92,11 @@
       jsPreambles: (input, output) =>
           ['sdk/lib/_internal/js_runtime/lib/preambles/d8.js'],
       afterExceptions: testAfterExceptions,
-      beforeExceptions: beforeExceptions);
+      beforeExceptions: beforeExceptions,
+      verbose: verbose,
+      printJs: printJs,
+      writeJs: writeJs,
+      stackTraceLimit: 100);
 }
 
 /// Lines allowed before the intended stack trace. Typically from helper
@@ -119,4 +123,13 @@
   const LineException('_Future._propagateToListeners', 'future_impl.dart'),
   const LineException(
       '_Future._addListener.<anonymous function>', 'future_impl.dart'),
+  const LineException('_microtaskLoop', 'schedule_microtask.dart'),
+  const LineException('_startMicrotaskLoop', 'schedule_microtask.dart'),
+  const LineException('_AsyncRun._scheduleImmediateJsOverride.internalCallback',
+      'async_patch.dart'),
+  const LineException('invokeClosure.<anonymous function>', 'js_helper.dart'),
+  const LineException('_IsolateContext.eval', 'isolate_helper.dart'),
+  const LineException('_callInIsolate', 'isolate_helper.dart'),
+  const LineException('invokeClosure', 'js_helper.dart'),
+  const LineException('convertDartClosureToJS', 'js_helper.dart'),
 ];
diff --git a/tests/compiler/dart2js/sourcemaps/tools/diff_view.dart b/tests/compiler/dart2js/sourcemaps/tools/diff_view.dart
index 2a1a1f1..194dfed 100644
--- a/tests/compiler/dart2js/sourcemaps/tools/diff_view.dart
+++ b/tests/compiler/dart2js/sourcemaps/tools/diff_view.dart
@@ -598,8 +598,9 @@
 </html>
 ''');
 
-  new File(out).writeAsStringSync(sb.toString());
-  print('Diff generated in $out');
+  File file = new File(out);
+  file.writeAsStringSync(sb.toString());
+  print('Diff generated in ${file.absolute.uri}');
 }
 
 class CodeLinesResult {
@@ -729,9 +730,11 @@
       locations = [];
     }
     List<CodeLocation> codeLocations = locations
+        .where((l) => l.sourceUri != null)
         .map((l) => new CodeLocation(l.sourceUri, l.sourceName, l.offset))
         .toList();
     List<CodeSource> codeSourceList = locations
+        .where((l) => l.sourceUri != null)
         .map(codeSources.sourceLocationToCodeSource)
         .where((c) => c != null)
         .toList();
diff --git a/tests/compiler/dart2js/sourcemaps/tools/source_mapping_tester.dart b/tests/compiler/dart2js/sourcemaps/tools/source_mapping_tester.dart
index a7e9645..f1c2423 100644
--- a/tests/compiler/dart2js/sourcemaps/tools/source_mapping_tester.dart
+++ b/tests/compiler/dart2js/sourcemaps/tools/source_mapping_tester.dart
@@ -158,7 +158,7 @@
     {bool verbose: true}) async {
   SourceMapProcessor processor = new SourceMapProcessor(uri);
   SourceMaps sourceMaps = await processor.process(
-      ['--csp', '--disable-inlining']..addAll(options),
+      [Flags.useContentSecurityPolicy, Flags.disableInlining]..addAll(options),
       verbose: verbose);
   TestResult result = new TestResult(config, filename, processor);
   for (SourceMapInfo info in sourceMaps.elementSourceMapInfos.values) {
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index eeb49d4..933e5f3 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -6,20 +6,14 @@
 recursive_import_test: Skip # Issue 27441
 
 [ $compiler == dart2js ]
-21579_test: Crash # Issue 31762
 class_test: Fail
 constant_javascript_semantics4_test: Fail, OK
-constant_javascript_semantics_test/01: Crash # Issue 31762
-constant_javascript_semantics_test/02: Crash # Issue 31762
-constant_javascript_semantics_test/03: Crash # Issue 31762
-constant_javascript_semantics_test/04: Crash # Issue 31762
-constant_javascript_semantics_test/none: Crash # Issue 31762
 dummy_compiler_test: Slow, Pass
+local_function_call_test: RuntimeError # Issue 31879
 mirror_printer_test: Pass, Slow # Issue 25940, 16473
 mirrors_used_closure_test: Fail # Issue 17939
 no_such_method_test: Fail # Wrong Invocation.memberName.
 recursive_import_test: Slow, Pass
-round_constant_folding_test: Crash # Issue 31762
 statements_test: Fail
 typed_locals_test: Fail
 
@@ -84,7 +78,6 @@
 deferred/deferred_mirrors2_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred/reflect_multiple_annotations_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred/reflect_multiple_default_arg_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
-deferred/uninstantiated_type_variable_test: Crash # NoSuchMethodError: The method 'hasSubclass' was called on null.
 deferred_custom_loader_test: RuntimeError
 deferred_fail_and_retry_test: RuntimeError
 deferred_fail_and_retry_worker_test: Fail
@@ -120,8 +113,6 @@
 recursive_import_test: CompileTimeError
 reflect_native_types_test: RuntimeError
 regress/4562_test/none: CompileTimeError
-string_interpolation_dynamic_test: RuntimeError
-string_interpolation_test: RuntimeError
 type_constant_switch_test/01: MissingCompileTimeError
 unconditional_dartio_import_test: RuntimeError
 
@@ -132,15 +123,9 @@
 js_interop_test: RuntimeError # Issue 31082
 
 [ $compiler == dart2js && $dart2js_with_kernel ]
-21579_test: CompileTimeError # Large integer literal
-constant_javascript_semantics_test/01: Pass # Issue 31762
-constant_javascript_semantics_test/02: Pass # Issue 31762
-constant_javascript_semantics_test/03: CompileTimeError # Large integer literal
-constant_javascript_semantics_test/04: CompileTimeError # Large integer literal
-constant_javascript_semantics_test/none: CompileTimeError # Large integer literal
 dummy_compiler_test: Crash # Issue 31715
 recursive_import_test: Crash # Issue 31715
-round_constant_folding_test: CompileTimeError # Large integer literal
+typevariable_typedef_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(A.T) in (local(A.foo#func)) for j:constructor(B.).
 
 [ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
 23056_test: Pass
@@ -164,91 +149,95 @@
 private_symbol_literal_test/06: MissingCompileTimeError
 recursive_import_test: CompileTimeError
 regress/4562_test/none: CompileTimeError
-string_interpolation_dynamic_test: RuntimeError
-string_interpolation_test: RuntimeError
 type_constant_switch_test/01: MissingCompileTimeError
 unconditional_dartio_import_test: RuntimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
-21666_test: RuntimeError
+21666_test: CompileTimeError
+23056_test: CompileTimeError
 closure_capture2_test: RuntimeError
-closure_type_reflection2_test: RuntimeError
-closure_type_reflection_test: RuntimeError
+closure_type_reflection2_test: CompileTimeError
+closure_type_reflection_test: CompileTimeError
 constant_javascript_semantics_test/01: MissingCompileTimeError
-deferred/deferred_mirrors1_test: Crash # Assertion failure: Missing scope info for j:method(_loadLibraryWrapper).
-deferred/deferred_mirrors2_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
-deferred/reflect_multiple_annotations_test: Crash # Assertion failure: Missing scope info for j:method(_loadLibraryWrapper).
-deferred/reflect_multiple_default_arg_test: Crash # Assertion failure: Missing scope info for j:method(_loadLibraryWrapper).
+deferred/deferred_mirrors1_test: CompileTimeError
+deferred/deferred_mirrors2_test: CompileTimeError
+deferred/reflect_multiple_annotations_test: CompileTimeError
+deferred/reflect_multiple_default_arg_test: CompileTimeError
 deferred_custom_loader_test: RuntimeError
 deferred_fail_and_retry_test: RuntimeError
 deferred_fail_and_retry_worker_test: Fail
-invalid_annotation2_test/none: RuntimeError
+inference_nsm_mirrors_test: CompileTimeError
+invalid_annotation2_test/none: CompileTimeError
 label_test/06: MissingCompileTimeError
-mirror_invalid_field_access2_test: RuntimeError
-mirror_invalid_field_access3_test: RuntimeError
-mirror_invalid_field_access4_test: RuntimeError
-mirror_invalid_field_access_test: RuntimeError
-mirror_invalid_invoke2_test: RuntimeError
-mirror_invalid_invoke3_test: RuntimeError
-mirror_invalid_invoke_test: RuntimeError
-mirror_printer_test/01: RuntimeError
-mirror_printer_test/none: RuntimeError
-mirror_test: RuntimeError
-mirror_type_inference_field2_test: RuntimeError
-mirror_type_inference_field_test: RuntimeError
-mirror_type_inference_function_test: RuntimeError
-mirrors_declarations_filtering_test: RuntimeError
-mirrors_used_metatargets_test: RuntimeError
-mirrors_used_native_test: RuntimeError
-mirrors_used_warning2_test: RuntimeError
-mirrors_used_warning_test/minif: RuntimeError
-mirrors_used_warning_test/none: RuntimeError
+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
 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: RuntimeError
+reflect_native_types_test: CompileTimeError
 regress/4562_test/none: CompileTimeError
-string_interpolation_dynamic_test: RuntimeError
-string_interpolation_test: RuntimeError
 type_constant_switch_test/01: MissingCompileTimeError
 unconditional_dartio_import_test: RuntimeError # Issue 30902
 
 [ $compiler == dart2js && $dart2js_with_kernel && $minified ]
-21666_test: RuntimeError
-closure_type_reflection2_test: RuntimeError
-closure_type_reflection_test: RuntimeError
+21666_test: CompileTimeError
+23056_test: CompileTimeError
+closure_type_reflection2_test: CompileTimeError
+closure_type_reflection_test: CompileTimeError
 constant_javascript_semantics_test/01: MissingCompileTimeError
-deferred/deferred_mirrors1_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-deferred/deferred_mirrors2_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
+deferred/deferred_mirrors1_test: CompileTimeError
+deferred/deferred_mirrors2_test: CompileTimeError
 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_custom_loader_test: RuntimeError
 deferred_fail_and_retry_test: RuntimeError
 deferred_fail_and_retry_worker_test: Fail
 dummy_compiler_test: CompileTimeError
-invalid_annotation2_test/none: RuntimeError
+inference_nsm_mirrors_test: CompileTimeError
+invalid_annotation2_test/none: CompileTimeError
 label_test/06: MissingCompileTimeError
-mirror_invalid_field_access2_test: RuntimeError
-mirror_invalid_field_access3_test: RuntimeError
-mirror_invalid_field_access4_test: RuntimeError
-mirror_invalid_field_access_test: RuntimeError
-mirror_invalid_invoke2_test: RuntimeError
-mirror_invalid_invoke3_test: RuntimeError
-mirror_invalid_invoke_test: RuntimeError
-mirror_printer_test/01: RuntimeError
-mirror_printer_test/none: RuntimeError
-mirror_test: RuntimeError
-mirror_type_inference_field2_test: RuntimeError
-mirror_type_inference_field_test: RuntimeError
-mirror_type_inference_function_test: RuntimeError
-mirrors_declarations_filtering_test: RuntimeError
-mirrors_used_metatargets_test: RuntimeError
-mirrors_used_native_test: RuntimeError
-mirrors_used_warning2_test: RuntimeError
-mirrors_used_warning_test/none: RuntimeError
+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
 private_symbol_literal_test/01: MissingCompileTimeError
 private_symbol_literal_test/02: MissingCompileTimeError
 private_symbol_literal_test/03: MissingCompileTimeError
@@ -256,16 +245,16 @@
 private_symbol_literal_test/05: MissingCompileTimeError
 private_symbol_literal_test/06: MissingCompileTimeError
 recursive_import_test: CompileTimeError
-reflect_native_types_test: RuntimeError
+reflect_native_types_test: CompileTimeError
 regress/4562_test/none: CompileTimeError
-string_interpolation_dynamic_test: RuntimeError
-string_interpolation_test: RuntimeError
 type_constant_switch_test/01: MissingCompileTimeError
 unconditional_dartio_import_test: RuntimeError # Issue 30902
 
 [ $compiler == dart2js && !$dart2js_with_kernel ]
 expose_this1_test: RuntimeError # Issue 31254
 expose_this2_test: RuntimeError # Issue 31254
+string_interpolation_dynamic_test: Fail # CRLF handling clarified, see Issue 23562
+string_interpolation_test: Fail # CRLF handling clarified, see Issue 23562
 
 [ $compiler == dart2js && $fast_startup ]
 21666_test: Fail # mirrors not supported
@@ -311,8 +300,9 @@
 mirrors_used_warning_test/minif: Fail, OK # Tests warning that minified code will be broken.
 runtime_type_test: Fail, OK # Tests extected output of Type.toString().
 to_string_test: Fail # Issue 7179.
+typevariable_typedef_test: Fail, OK # Tests extected output of Type.toString().
 
-[ $compiler == dart2js && ($runtime == chrome || $runtime == chromeOnAndroid || $runtime == drt || $runtime == ff || $runtime == safari || $runtime == safarimobilesim) ]
+[ $compiler == dart2js && ($runtime == chrome || $runtime == chromeOnAndroid || $runtime == drt || $runtime == ff || $runtime == safari) ]
 isolate2_test/01: Fail # Issue 14458.
 
 [ $compiler == dart2js && ($runtime == chrome || $runtime == d8 || $runtime == drt) ]
diff --git a/tests/compiler/dart2js_extra/string_interpolation_dynamic_test.dart b/tests/compiler/dart2js_extra/string_interpolation_dynamic_test.dart
index ab10b07..91e9487 100644
--- a/tests/compiler/dart2js_extra/string_interpolation_dynamic_test.dart
+++ b/tests/compiler/dart2js_extra/string_interpolation_dynamic_test.dart
Binary files differ
diff --git a/tests/compiler/dart2js_extra/string_interpolation_test.dart b/tests/compiler/dart2js_extra/string_interpolation_test.dart
index 3407260..beded4c 100644
--- a/tests/compiler/dart2js_extra/string_interpolation_test.dart
+++ b/tests/compiler/dart2js_extra/string_interpolation_test.dart
Binary files differ
diff --git a/tests/compiler/dart2js_extra/typevariable_typedef_test.dart b/tests/compiler/dart2js_extra/typevariable_typedef_test.dart
new file mode 100644
index 0000000..5dc6d2b
--- /dev/null
+++ b/tests/compiler/dart2js_extra/typevariable_typedef_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.
+
+import "package:expect/expect.dart";
+
+typedef T Func<T>(T x);
+
+class A<T> {
+  final Box<T> box;
+  A._(this.box);
+  A.foo(Func<T> func) : this._(new Box<T>(func));
+}
+
+class Box<T> {
+  final Func<T> func;
+  Box(this.func);
+}
+
+class B extends A {
+  B() : super.foo((x) => x);
+}
+
+main() {
+  var x = new B();
+  Expect.equals(x.runtimeType.toString(), 'B');
+}
diff --git a/tests/compiler/dart2js_native/dart2js_native.status b/tests/compiler/dart2js_native/dart2js_native.status
index c339153..29cb393 100644
--- a/tests/compiler/dart2js_native/dart2js_native.status
+++ b/tests/compiler/dart2js_native/dart2js_native.status
@@ -40,11 +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: RuntimeError
+mirror_intercepted_field_test: CompileTimeError
 native_library_same_name_used_frog_test: CompileTimeError
-native_mirror_test: RuntimeError
-native_no_such_method_exception4_frog_test: RuntimeError
-native_no_such_method_exception5_frog_test: RuntimeError
+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
 subclassing_constructor_1_test: RuntimeError
 subclassing_super_call_test: RuntimeError
 subclassing_super_field_1_test: RuntimeError
@@ -53,11 +54,12 @@
 [ $compiler == dart2js && $dart2js_with_kernel && $minified ]
 bound_closure_super_test: RuntimeError
 fake_thing_test: RuntimeError
-mirror_intercepted_field_test: RuntimeError
+mirror_intercepted_field_test: CompileTimeError
 native_library_same_name_used_frog_test: CompileTimeError
-native_mirror_test: RuntimeError
-native_no_such_method_exception4_frog_test: RuntimeError
-native_no_such_method_exception5_frog_test: RuntimeError
+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
 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 e418d9e..8a40903 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -12,33 +12,7 @@
 string_test: StaticWarning, OK # Test generates error on purpose.
 
 [ $compiler == dart2js ]
-bit_twiddling_bigint_test: Crash # Issue 31762
-bit_twiddling_test: Crash # Issue 31762
-double_ceil_test: Crash # Issue 31762
-double_floor_test: Crash # Issue 31762
-double_round_test: Crash # Issue 31762
-double_truncate_test: Crash # Issue 31762
-int_ceil_test: Crash # Issue 31762
-int_ceil_to_double_test: Crash # Issue 31762
-int_floor_test: Crash # Issue 31762
-int_floor_to_double_test: Crash # Issue 31762
-int_from_environment_test: Crash # Issue 31762
-int_modulo_arith_test/bignum: Crash # Issue 31762
-int_modulo_arith_test/modPow: Crash # Issue 31762
-int_modulo_arith_test/none: Crash # Issue 31762
-int_parse_radix_test/02: Crash # Issue 31762
-int_round_test: Crash # Issue 31762
-int_round_to_double_test: Crash # Issue 31762
-int_to_int_test: Crash # Issue 31762
-int_truncate_test: Crash # Issue 31762
-int_truncate_to_double_test: Crash # Issue 31762
-integer_to_radix_string_test: Crash # Issue 31762
-integer_to_string_test/01: Crash # Issue 31762
-num_parse_test/01: Crash # Issue 31762
-num_parse_test/none: Crash # Issue 31762
-num_sign_test: Crash # Issue 31762
 regexp/pcre_test: Pass, Slow # Issue 21593
-regress_r21715_test: Crash # Issue 31762
 
 [ $compiler == precompiler ]
 apply3_test: SkipByDesign # Imports dart:mirrors
@@ -89,6 +63,11 @@
 string_case_test/01: RuntimeError # jsshell does not recognize character 223 aka \xdf
 unicode_test: RuntimeError # jsshell does not recognize character 223 aka \xdf
 
+[ $runtime == safari ]
+double_round3_test: RuntimeError
+double_round_to_double2_test: Pass, Fail, OK
+string_trimlr_test/02: RuntimeError # Uses Unicode 6.2.0 or earlier.
+
 [ $strong ]
 *: SkipByDesign # tests/corelib_2 has the strong mode versions of these tests.
 
@@ -133,12 +112,6 @@
 [ $compiler == dart2js && $runtime == none ]
 *: Fail, Pass # TODO(ahe): Triage these tests.
 
-[ $compiler == dart2js && $runtime == safarimobilesim ]
-list_test/01: Fail # Safari bug: Array(-2) seen as dead code.
-string_split_test: RuntimeError # Issue 21431
-string_trimlr_test/01: Fail
-string_trimlr_test/02: RuntimeError # Uses Unicode 6.2.0 or earlier.
-
 [ $compiler == dart2js && !$browser ]
 package_resource_test: RuntimeError # Issue 26842
 
@@ -245,7 +218,7 @@
 symbol_test/03: MissingCompileTimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
-apply3_test: RuntimeError
+apply3_test: CompileTimeError
 big_integer_arith_vm_test/add: RuntimeError
 big_integer_arith_vm_test/div: RuntimeError
 big_integer_arith_vm_test/gcd: RuntimeError
@@ -288,7 +261,7 @@
 symbol_test/03: MissingCompileTimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel && $minified ]
-apply3_test: RuntimeError
+apply3_test: CompileTimeError
 big_integer_arith_vm_test/add: RuntimeError
 big_integer_arith_vm_test/div: RuntimeError
 big_integer_arith_vm_test/gcd: RuntimeError
@@ -404,15 +377,10 @@
 *: Skip
 
 [ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
+big_integer_arith_vm_test: CompileTimeError # Large integer literal
 big_integer_parsed_arith_vm_test: RuntimeError # Large integers
 big_integer_parsed_div_rem_vm_test: RuntimeError # Large integers
 big_integer_parsed_mul_div_vm_test: RuntimeError # Large integers
-regexp/capture-3: Pass, Slow, Timeout # Issues 21593 and 22008
-regexp/global_test: Skip # Timeout. Issue 21709 and 21708
-regexp/pcre_test: Pass, Slow, Timeout # Issues 21593 and 22008
-
-[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm || ($compiler == dart2js && $dart2js_with_kernel) ]
-big_integer_arith_vm_test: CompileTimeError # Large integer literal
 bit_twiddling_bigint_test: CompileTimeError # Large integer literal
 bit_twiddling_test: CompileTimeError # Large integer literal
 double_ceil_test: CompileTimeError # Large integer literal
@@ -436,6 +404,9 @@
 num_parse_test/01: CompileTimeError # Large integer literal
 num_parse_test/none: CompileTimeError # Large integer literal
 num_sign_test: CompileTimeError # Large integer literal
+regexp/capture-3: Pass, Slow, Timeout # Issues 21593 and 22008
+regexp/global_test: Skip # Timeout. Issue 21709 and 21708
+regexp/pcre_test: Pass, Slow, Timeout # Issues 21593 and 22008
 regress_r21715_test: CompileTimeError # Large integer literal
 
 # Firefox takes advantage of the ECMAScript number parsing cop-out clause
@@ -446,11 +417,6 @@
 [ $runtime == ff || $runtime == jsshell ]
 double_parse_test/02: Fail, OK
 
-[ $runtime == safari || $runtime == safarimobilesim ]
-double_round3_test: RuntimeError
-double_round_to_double2_test: Pass, Fail, OK
-string_trimlr_test/02: RuntimeError # Uses Unicode 6.2.0 or earlier.
-
 [ $hot_reload || $hot_reload_rollback ]
 big_integer_huge_mul_vm_test: Pass, Slow # Slow
 big_integer_parsed_mul_div_vm_test: Pass, Slow # Slow.
diff --git a/tests/corelib_2/cast_test.dart b/tests/corelib_2/cast_test.dart
index b4e805c..feee4e2 100644
--- a/tests/corelib_2/cast_test.dart
+++ b/tests/corelib_2/cast_test.dart
@@ -18,7 +18,7 @@
   // Down-cast
   {
     // An iterable that (likely) can do direct access.
-    var dIterable = Iterable.castTo<C, D>(iterable);
+    var dIterable = Iterable.castFrom<C, D>(iterable);
 
     Expect.throws(() => dIterable.first, null, "1.first");
     Expect.equals(d, dIterable.elementAt(1));
@@ -31,7 +31,7 @@
 
   {
     // An iterable that cannot do direct access.
-    var dIterable2 = Iterable.castTo<C, D>(iterable.where((_) => true));
+    var dIterable2 = Iterable.castFrom<C, D>(iterable.where((_) => true));
 
     Expect.throws(() => dIterable2.first, null, "2.first");
     Expect.equals(d, dIterable2.elementAt(1));
@@ -46,7 +46,7 @@
     // Iterable that definitely won't survive accessing element 2.
     var iterable3 = new Iterable<C>.generate(
         elements.length, (n) => n == 3 ? throw "untouchable" : elements[n]);
-    var dIterable3 = Iterable.castTo<C, D>(iterable3);
+    var dIterable3 = Iterable.castFrom<C, D>(iterable3);
 
     Expect.throws(() => dIterable3.first, null, "3.first");
     Expect.equals(d, dIterable3.elementAt(1));
@@ -60,7 +60,7 @@
 
   // Up-cast.
   {
-    var oIterable4 = Iterable.castTo<C, Object>(iterable);
+    var oIterable4 = Iterable.castFrom<C, Object>(iterable);
     Expect.listEquals(elements, oIterable4.toList());
   }
 }
@@ -68,7 +68,7 @@
 void testList() {
   // Down-cast.
   var list = new List<C>.from(elements);
-  var dList = List.castTo<C, D>(list);
+  var dList = List.castFrom<C, D>(list);
 
   Expect.throws(() => dList.first); // C is not D.
   Expect.equals(d, dList[1]);
@@ -83,7 +83,7 @@
 
   // Up-cast.
   var list2 = new List<C>.from(elements);
-  var dList2 = List.castTo<C, Object>(list2);
+  var dList2 = List.castFrom<C, Object>(list2);
   Expect.listEquals(elements, dList2);
   Expect.throws(() => dList2[2] = new Object()); // Cannot set non-C.
   Expect.listEquals(elements, dList2);
@@ -93,7 +93,7 @@
   var set = new Set<C>.from(elements); // Linked HashSet.
   Expect.listEquals(elements, set.toList()); // Preserves order.
 
-  var dSet = Set.castTo<C, D>(set);
+  var dSet = Set.castFrom<C, D>(set);
 
   // Preserves order.
   Expect.throws(() => dSet.first); // C is not D.
@@ -116,7 +116,7 @@
 
   // Up-cast
   var set2 = new Set<C>.from(elements);
-  var dSet2 = Set.castTo<C, Object>(set2);
+  var dSet2 = Set.castFrom<C, Object>(set2);
 
   var newObject = new Object();
   Expect.throws(() => dSet2.add(newObject));
@@ -129,7 +129,7 @@
   // Custom emptySet.
 
   var set3 = new Set<C>.from(elements);
-  var dSet3 = Set.castTo<C, Object>(set3, newSet: <T>() => new HashSet<T>());
+  var dSet3 = Set.castFrom<C, Object>(set3, newSet: <T>() => new HashSet<T>());
 
   var toSet3 = dSet3.toSet();
   Expect.isTrue(toSet3 is HashSet<Object>);
@@ -140,7 +140,7 @@
 void testMap() {
   var map = new Map.fromIterables(elements, elements);
 
-  var dMap = Map.castTo<C, C, D, D>(map);
+  var dMap = Map.castFrom<C, C, D, D>(map);
 
   Expect.isTrue(dMap is Map<D, D>);
 
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 80c5092..fefc9fc 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -9,16 +9,7 @@
 
 [ $compiler == dart2js ]
 date_time11_test: RuntimeError, Pass # Fails when US is on winter time, issue 31285.
-double_ceil_test/int64: Crash # Issue 31762
-double_floor_test/int64: Crash # Issue 31762
-double_round_test/int64: Crash # Issue 31762
-double_truncate_test/int64: Crash # Issue 31762
 hash_set_test/01: RuntimeError # Issue 11551
-int_from_environment_test: Crash # Issue 31762
-int_parse_radix_test/01: Crash # Issue 31762
-int_parse_radix_test/02: Crash # Issue 31762
-int_parse_radix_test/badTypes: Crash # Issue 31762
-int_parse_radix_test/none: Crash # Issue 31762
 integer_to_radix_string_test: RuntimeError # Issue 29921
 string_static_test: MissingCompileTimeError
 
@@ -26,52 +17,18 @@
 error_stack_trace_test/static: MissingCompileTimeError
 
 [ $compiler == dartdevk ]
-bool_from_environment2_test/01: MissingCompileTimeError
-bool_from_environment2_test/02: MissingCompileTimeError
-bool_from_environment2_test/03: MissingCompileTimeError
-bool_from_environment2_test/04: MissingCompileTimeError
-from_environment_const_type_test/01: Pass
-from_environment_const_type_test/02: MissingCompileTimeError
-from_environment_const_type_test/03: MissingCompileTimeError
-from_environment_const_type_test/04: MissingCompileTimeError
-from_environment_const_type_test/05: Pass
-from_environment_const_type_test/06: MissingCompileTimeError
-from_environment_const_type_test/07: MissingCompileTimeError
-from_environment_const_type_test/08: MissingCompileTimeError
-from_environment_const_type_test/09: MissingCompileTimeError
-from_environment_const_type_test/10: Pass
-from_environment_const_type_test/11: MissingCompileTimeError
-from_environment_const_type_test/12: MissingCompileTimeError
-from_environment_const_type_test/13: MissingCompileTimeError
-from_environment_const_type_test/14: MissingCompileTimeError
-from_environment_const_type_test/15: Pass
-from_environment_const_type_test/16: MissingCompileTimeError
-from_environment_const_type_test/none: Pass
-from_environment_const_type_undefined_test/02: MissingCompileTimeError
-from_environment_const_type_undefined_test/03: MissingCompileTimeError
-from_environment_const_type_undefined_test/04: MissingCompileTimeError
-from_environment_const_type_undefined_test/06: MissingCompileTimeError
-from_environment_const_type_undefined_test/07: MissingCompileTimeError
-from_environment_const_type_undefined_test/08: MissingCompileTimeError
-from_environment_const_type_undefined_test/09: MissingCompileTimeError
-from_environment_const_type_undefined_test/11: MissingCompileTimeError
-from_environment_const_type_undefined_test/12: MissingCompileTimeError
-from_environment_const_type_undefined_test/13: MissingCompileTimeError
-from_environment_const_type_undefined_test/14: MissingCompileTimeError
-from_environment_const_type_undefined_test/16: MissingCompileTimeError
+apply3_test: CompileTimeError
+bool_from_environment2_test/03: Crash
 int_modulo_arith_test/modPow: RuntimeError
 int_modulo_arith_test/none: RuntimeError
-int_parse_radix_bad_handler_test: MissingCompileTimeError
+iterable_reduce_test/01: CompileTimeError
 map_test: Crash # crash in front_end.
-string_from_environment3_test/01: MissingCompileTimeError
-string_from_environment3_test/02: MissingCompileTimeError
-string_from_environment3_test/03: MissingCompileTimeError
-string_from_environment3_test/04: MissingCompileTimeError
+null_nosuchmethod_test/01: CompileTimeError
+null_nosuchmethod_test/none: CompileTimeError
+string_from_environment3_test/03: Crash
 symbol_reserved_word_test/04: MissingCompileTimeError
-symbol_reserved_word_test/05: MissingCompileTimeError
 symbol_reserved_word_test/07: MissingCompileTimeError
 symbol_reserved_word_test/10: MissingCompileTimeError
-symbol_test/01: MissingCompileTimeError
 symbol_test/02: MissingCompileTimeError
 symbol_test/03: MissingCompileTimeError
 
@@ -112,11 +69,13 @@
 string_trimlr_test/02: RuntimeError # Flutter Issue 9111
 
 [ $runtime == jsshell ]
-string_case_test/01: Fail, OK
+string_case_test/01: Fail, OK # German double S.
 unicode_test: Fail
 
-[ $runtime == vm ]
-string_case_test/01: RuntimeError
+[ $runtime == safari ]
+double_round3_test: Fail, OK # Runtime rounds 0.49999999999999994 to 1.
+double_round_to_double2_test: Fail, OK # Runtime rounds 0.49999999999999994 to 1.
+string_trimlr_test/02: RuntimeError # Uses Unicode 6.2.0 or earlier.
 
 [ !$strong ]
 cast_test: SkipByDesign # Uses generic method parameters.
@@ -161,7 +120,7 @@
 symbol_reserved_word_test/05: MissingCompileTimeError # Issue 30245
 
 # All static_tests have expected compile-time errors.
-[ $compiler != dart2analyzer && $compiler != dartdevc && $compiler != dartk && $compiler != dartkp && $strong ]
+[ $compiler != dart2analyzer && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $strong ]
 core_runtime_types_static_test: MissingCompileTimeError
 splay_tree_test/01: MissingCompileTimeError
 splay_tree_test/02: MissingCompileTimeError
@@ -189,7 +148,7 @@
 list_test/*: RuntimeError # dart2js doesn't implement strong mode covariance checks
 nan_infinity_test/01: RuntimeError
 regexp/pcre_test: Pass, Slow # Issue 21593
-string_split_test: RuntimeError # does not return List<String>
+string_split_test: RuntimeError # Issue 30548: does not return List<String>
 
 [ $compiler == dart2js && $runtime != none && !$checked ]
 growable_list_test: RuntimeError # Concurrent modifications test always runs
@@ -207,11 +166,6 @@
 regexp/no-extensions_test: RuntimeError
 regexp/overflow_test: RuntimeError
 
-[ $compiler == dart2js && $runtime == safarimobilesim ]
-list_test/01: Fail # Safari bug: Array(-2) seen as dead code.
-string_trimlr_test/01: Fail
-string_trimlr_test/02: RuntimeError # Uses Unicode 6.2.0 or earlier.
-
 [ $compiler == dart2js && !$browser ]
 package_resource_test: RuntimeError # Issue 26842
 
@@ -277,8 +231,9 @@
 *: SkipByDesign
 
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked && $strong ]
-apply3_test: RuntimeError
+apply3_test: CompileTimeError
 cast_test: RuntimeError
+dynamic_nosuchmethod_test: CompileTimeError
 error_stack_trace1_test: RuntimeError # Issue 12399
 iterable_return_type_test/01: RuntimeError
 iterable_return_type_test/02: RuntimeError
@@ -300,9 +255,9 @@
 *: SkipByDesign
 
 [ $compiler == dart2js && $dart2js_with_kernel && $minified && $strong ]
-apply3_test: RuntimeError
+apply3_test: CompileTimeError
 cast_test: RuntimeError
-dynamic_nosuchmethod_test: RuntimeError
+dynamic_nosuchmethod_test: CompileTimeError
 error_stack_trace1_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).
 iterable_element_at_test/static: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(_LinkedCustomHashSet.#x), local(_LinkedCustomHashSet.#)) for j:closure_call(_LinkedCustomHashSet__LinkedCustomHashSet_closure.call).
@@ -344,6 +299,138 @@
 dynamic_nosuchmethod_test: Fail # mirrors not supported
 
 [ $compiler == dartdevc && $runtime != none ]
+symbol_operator_test: RuntimeError # Issue 29921
+
+[ $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp ]
+iterable_element_at_test/static: MissingCompileTimeError
+
+[ $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $runtime != none ]
+map_keys2_test: RuntimeError # needs Dart 2 is checks
+
+[ $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && ($compiler != dart2analyzer || !$strong) ]
+iterable_mapping_test/01: MissingCompileTimeError
+
+[ $compiler != dartdevc && $compiler != dartdevk && $checked && !$strong ]
+core_runtime_types_static_test: MissingCompileTimeError
+splay_tree_test/01: MissingCompileTimeError
+splay_tree_test/02: MissingCompileTimeError
+string_base_vm_static_test: MissingCompileTimeError
+string_replace_static_test: MissingCompileTimeError
+string_static_test: MissingCompileTimeError
+
+[ $compiler != dartdevc && $runtime != none && !$checked && !$strong ]
+null_nosuchmethod_test: RuntimeError # needs Dart 2 or checked mode
+
+# 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 && $mode == debug && $strong && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) ]
+bigint_parse_radix_test: Pass, Timeout # Please triage.
+bigint_test: Pass, Timeout # Please triage.
+
+# ===== dartk + vm status lines =====
+[ $compiler == dartk && $runtime == vm && $strong ]
+apply3_test: CompileTimeError # Issue 31402 (Invocation arguments)
+bool_from_environment2_test/03: MissingCompileTimeError
+compare_to2_test: RuntimeError
+iterable_empty_test: RuntimeError
+iterable_fold_test/02: RuntimeError
+iterable_reduce_test/01: CompileTimeError # Issue 31533
+iterable_reduce_test/none: RuntimeError
+iterable_to_list_test/01: RuntimeError
+iterable_to_list_test/none: RuntimeError
+json_map_test: RuntimeError
+list_replace_range_test: RuntimeError
+list_set_all_test: RuntimeError
+null_nosuchmethod_test/01: CompileTimeError # Issue 31402 (Invocation arguments)
+null_nosuchmethod_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
+string_from_environment3_test/03: MissingCompileTimeError
+string_trimlr_test/02: RuntimeError
+symbol_operator_test/03: RuntimeError
+symbol_reserved_word_test/04: MissingCompileTimeError
+symbol_reserved_word_test/06: RuntimeError
+symbol_reserved_word_test/07: MissingCompileTimeError
+symbol_reserved_word_test/09: RuntimeError
+symbol_reserved_word_test/10: MissingCompileTimeError
+symbol_reserved_word_test/12: RuntimeError
+symbol_test/02: MissingCompileTimeError
+symbol_test/03: MissingCompileTimeError
+symbol_test/none: RuntimeError
+unicode_test: RuntimeError
+
+# ===== dartkp + dart_precompiled status lines =====
+[ $compiler == dartkp && $runtime == dart_precompiled && $strong ]
+bool_from_environment2_test/03: MissingCompileTimeError
+compare_to2_test: RuntimeError
+iterable_empty_test: RuntimeError
+iterable_fold_test/02: RuntimeError
+iterable_reduce_test/01: CompileTimeError # Issue 31533
+iterable_reduce_test/none: RuntimeError
+iterable_to_list_test/01: RuntimeError
+iterable_to_list_test/none: RuntimeError
+json_map_test: RuntimeError
+list_replace_range_test: RuntimeError
+list_set_all_test: RuntimeError
+null_nosuchmethod_test/01: CompileTimeError # Issue 31402 (Invocation arguments)
+null_nosuchmethod_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
+regexp/stack-overflow_test: RuntimeError
+string_from_environment3_test/03: MissingCompileTimeError
+string_trimlr_test/02: RuntimeError
+symbol_operator_test/03: RuntimeError
+symbol_reserved_word_test/04: MissingCompileTimeError
+symbol_reserved_word_test/06: RuntimeError
+symbol_reserved_word_test/07: MissingCompileTimeError
+symbol_reserved_word_test/09: RuntimeError
+symbol_reserved_word_test/10: MissingCompileTimeError
+symbol_reserved_word_test/12: RuntimeError
+symbol_test/02: MissingCompileTimeError
+symbol_test/03: MissingCompileTimeError
+symbol_test/none: RuntimeError
+unicode_test: RuntimeError
+
+[ $compiler == none && $runtime == drt ]
+string_from_environment2_test: Skip
+string_from_environment3_test: Skip
+string_from_environment_test: Skip
+
+[ $compiler == none && ($runtime == flutter || $runtime == vm) ]
+iterable_to_set_test: RuntimeError # is-checks do not implement strong mode type system
+string_trimlr_test/02: RuntimeError # Issue 29060
+
+[ $compiler == precompiler && $runtime == dart_precompiled && !$checked ]
+iterable_generate_test/01: RuntimeError
+splay_tree_from_iterable_test: RuntimeError
+
+[ $runtime == dart_precompiled && $minified ]
+apply_test: Skip # Uses new Symbol via symbolMapToStringMap helper
+error_stack_trace1_test: Skip # Expects unobfuscated stack trace
+
+[ $runtime == drt && ($compiler == dart2js || $compiler == dartdevc || $compiler == dartdevk) ]
+string_trimlr_test/02: RuntimeError # Uses Unicode 6.2.0 or earlier.
+
+[ $runtime != drt && ($compiler == app_jit || $compiler == none || $compiler == precompiler) ]
+symbol_test/02: MissingCompileTimeError # Issue 11669
+symbol_test/03: MissingCompileTimeError # Issue 11669
+
+[ $runtime != none && ($compiler == dart2js || $compiler == dartdevc || $compiler == dartdevk) ]
+bit_twiddling_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
+compare_to2_test: RuntimeError, OK # Requires fixed-size int64 support.
+double_ceil_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
+double_floor_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
+double_round_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
+double_truncate_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
+hash_set_test/01: RuntimeError # Issue 11551
+int_modulo_arith_test/modPow: RuntimeError # Issue 29921
+int_parse_with_limited_ints_test: Skip # dart2js and dartdevc don't know about --limit-ints-to-64-bits
+integer_arith_vm_test/modPow: RuntimeError # Issues 10245, 30170
+integer_parsed_arith_vm_test: RuntimeError # Issues 10245, 29921
+integer_parsed_div_rem_vm_test: RuntimeError # Issue 29921
+integer_parsed_mul_div_vm_test: RuntimeError # Issue 29921
+json_map_test: RuntimeError
+regress_r21715_test: RuntimeError # Requires fixed-size int64 support.
+typed_data_with_limited_ints_test: Skip # dart2js and dartdevc don't know about --limit-ints-to-64-bits
+
+[ $runtime != none && ($compiler == dartdevc || $compiler == dartdevk) ]
 apply2_test: RuntimeError # Issue 29921
 apply3_test: RuntimeError # Issue 29921
 bigint_test: Pass, Slow
@@ -413,7 +500,6 @@
 regexp/zero-length-alternatives_test: RuntimeError # Issue 29921
 regress_r21715_test: RuntimeError # Issue 29921
 string_operations_with_null_test: RuntimeError # Issue 29921
-symbol_operator_test: RuntimeError # Issue 29921
 symbol_operator_test/03: RuntimeError # Issue 29921
 symbol_reserved_word_test/06: RuntimeError # Issue 29921
 symbol_reserved_word_test/09: RuntimeError # Issue 29921
@@ -421,145 +507,11 @@
 symbol_test/none: RuntimeError # Issue 29921
 typed_data_with_limited_ints_test: Skip # dartdevc doesn't know about --limit-ints-to-64-bits
 
-[ $compiler != dartdevc && $compiler != dartk && $compiler != dartkp ]
-iterable_element_at_test/static: MissingCompileTimeError
-
-[ $compiler != dartdevc && $compiler != dartk && $compiler != dartkp && $runtime != none ]
-map_keys2_test: RuntimeError # needs Dart 2 is checks
-
-[ $compiler != dartdevc && $compiler != dartk && $compiler != dartkp && ($compiler != dart2analyzer || !$strong) ]
-iterable_mapping_test/01: MissingCompileTimeError
-
-[ $compiler != dartdevc && $runtime != none && !$checked && !$strong ]
-null_nosuchmethod_test: RuntimeError # needs Dart 2 or checked mode
-
-[ $compiler != dartdevc && $checked && !$strong ]
-core_runtime_types_static_test: MissingCompileTimeError
-splay_tree_test/01: MissingCompileTimeError
-splay_tree_test/02: MissingCompileTimeError
-string_base_vm_static_test: MissingCompileTimeError
-string_replace_static_test: MissingCompileTimeError
-string_static_test: MissingCompileTimeError
-
-# 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 && $mode == debug && $strong && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) ]
-bigint_parse_radix_test: Pass, Timeout # Please triage.
-bigint_test: Pass, Timeout # Please triage.
-
-# ===== dartk + vm status lines =====
-[ $compiler == dartk && $runtime == vm && $strong ]
-apply3_test: CompileTimeError # Issue 31402 (Invocation arguments)
-bool_from_environment2_test/03: MissingCompileTimeError
-compare_to2_test: RuntimeError
-iterable_empty_test: RuntimeError
-iterable_fold_test/02: RuntimeError
-iterable_reduce_test/01: CompileTimeError # Issue 31533
-iterable_reduce_test/none: RuntimeError
-iterable_to_list_test/01: RuntimeError
-iterable_to_list_test/none: RuntimeError
-json_map_test: RuntimeError
-list_replace_range_test: RuntimeError
-list_set_all_test: RuntimeError
-null_nosuchmethod_test/01: CompileTimeError # Issue 31402 (Invocation arguments)
-null_nosuchmethod_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
-splay_tree_from_iterable_test: RuntimeError
-string_case_test/01: RuntimeError
-string_from_environment3_test/03: MissingCompileTimeError
-string_trimlr_test/02: RuntimeError
-symbol_operator_test/03: RuntimeError
-symbol_reserved_word_test/04: MissingCompileTimeError
-symbol_reserved_word_test/06: RuntimeError
-symbol_reserved_word_test/07: MissingCompileTimeError
-symbol_reserved_word_test/09: RuntimeError
-symbol_reserved_word_test/10: MissingCompileTimeError
-symbol_reserved_word_test/12: RuntimeError
-symbol_test/02: MissingCompileTimeError
-symbol_test/03: MissingCompileTimeError
-symbol_test/none: RuntimeError
-unicode_test: RuntimeError
-
-# ===== dartkp + dart_precompiled status lines =====
-[ $compiler == dartkp && $runtime == dart_precompiled && $strong ]
-bool_from_environment2_test/03: MissingCompileTimeError
-compare_to2_test: RuntimeError
-iterable_empty_test: RuntimeError
-iterable_fold_test/02: RuntimeError
-iterable_reduce_test/01: CompileTimeError # Issue 31533
-iterable_reduce_test/none: RuntimeError
-iterable_to_list_test/01: RuntimeError
-iterable_to_list_test/none: RuntimeError
-json_map_test: RuntimeError
-list_replace_range_test: RuntimeError
-list_set_all_test: RuntimeError
-null_nosuchmethod_test/01: CompileTimeError # Issue 31402 (Invocation arguments)
-null_nosuchmethod_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
-regexp/stack-overflow_test: RuntimeError
-splay_tree_from_iterable_test: RuntimeError
-string_case_test/01: RuntimeError
-string_from_environment3_test/03: MissingCompileTimeError
-string_trimlr_test/02: RuntimeError
-symbol_operator_test/03: RuntimeError
-symbol_reserved_word_test/04: MissingCompileTimeError
-symbol_reserved_word_test/06: RuntimeError
-symbol_reserved_word_test/07: MissingCompileTimeError
-symbol_reserved_word_test/09: RuntimeError
-symbol_reserved_word_test/10: MissingCompileTimeError
-symbol_reserved_word_test/12: RuntimeError
-symbol_test/02: MissingCompileTimeError
-symbol_test/03: MissingCompileTimeError
-symbol_test/none: RuntimeError
-unicode_test: RuntimeError
-
-[ $compiler == none && $runtime == drt ]
-string_from_environment2_test: Skip
-string_from_environment3_test: Skip
-string_from_environment_test: Skip
-
-[ $compiler == none && $runtime == vm ]
-string_static_test: MissingCompileTimeError
-
-[ $compiler == none && ($runtime == flutter || $runtime == vm) ]
-iterable_to_set_test: RuntimeError # is-checks do not implement strong mode type system
-string_trimlr_test/02: RuntimeError # Issue 29060
-
-[ $compiler == precompiler && $runtime == dart_precompiled && !$checked ]
-iterable_generate_test/01: RuntimeError
-splay_tree_from_iterable_test: RuntimeError
-
-[ $runtime == dart_precompiled && $minified ]
-apply_test: Skip # Uses new Symbol via symbolMapToStringMap helper
-error_stack_trace1_test: Skip # Expects unobfuscated stack trace
-
-[ $runtime == drt && ($compiler == dart2js || $compiler == dartdevc) ]
-string_trimlr_test/02: RuntimeError # Uses Unicode 6.2.0 or earlier.
-
-[ $runtime != drt && ($compiler == app_jit || $compiler == none || $compiler == precompiler) ]
-symbol_test/02: MissingCompileTimeError # Issue 11669
-symbol_test/03: MissingCompileTimeError # Issue 11669
-
-[ $runtime != none && ($compiler == dart2js || $compiler == dartdevc) ]
-bit_twiddling_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
-compare_to2_test: RuntimeError, OK # Requires fixed-size int64 support.
-double_ceil_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
-double_floor_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
-double_round_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
-double_truncate_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
-hash_set_test/01: RuntimeError # Issue 11551
-int_modulo_arith_test/modPow: RuntimeError # Issue 29921
-int_parse_with_limited_ints_test: Skip # dart2js and dartdevc don't know about --limit-ints-to-64-bits
-integer_arith_vm_test/modPow: RuntimeError # Issues 10245, 30170
-integer_parsed_arith_vm_test: RuntimeError # Issues 10245, 29921
-integer_parsed_div_rem_vm_test: RuntimeError # Issue 29921
-integer_parsed_mul_div_vm_test: RuntimeError # Issue 29921
-json_map_test: RuntimeError
-regress_r21715_test: RuntimeError # Requires fixed-size int64 support.
-typed_data_with_limited_ints_test: Skip # dart2js and dartdevc don't know about --limit-ints-to-64-bits
-
+# We no longer expect Dart2 tests to run with the standalone VM without the new
+# common front end, but for now we get better coverage by still running them in
+# checked mode, which is mostly Dart2-compatible.
 [ $runtime == vm && !$checked && ($compiler == app_jit || $compiler == none) ]
-iterable_generate_test/01: RuntimeError
-splay_tree_from_iterable_test: RuntimeError
+*: Skip
 
 [ !$checked && !$strong ]
 core_runtime_types_static_test: MissingCompileTimeError
@@ -612,7 +564,6 @@
 
 [ $compiler == app_jit || $compiler == none || $compiler == precompiler ]
 compare_to2_test: Fail # Issue 4018
-string_case_test/01: Fail # Bug 18061
 symbol_operator_test/03: Fail # Issue 11669
 symbol_reserved_word_test/06: RuntimeError # Issue 11669, With the exception of 'void', new Symbol() should not accept reserved words.
 symbol_reserved_word_test/09: RuntimeError # Issue 11669, With the exception of 'void', new Symbol() should not accept reserved words.
@@ -671,6 +622,7 @@
 double_parse_test/03: Skip # Temporarily disable the following tests until we figure out why they started failing.
 double_parse_test/04: Skip # Temporarily disable the following tests until we figure out why they started failing.
 double_parse_test/none: Skip # Temporarily disable the following tests until we figure out why they started failing.
+iterable_reduce_test/01: CompileTimeError # Issue 31533
 
 [ $compiler == dartkp || $compiler == precompiler ]
 apply3_test: SkipByDesign
@@ -688,17 +640,12 @@
 integer_parsed_arith_vm_test/02: RuntimeError # Issue 31346
 integer_parsed_div_rem_vm_test/01: RuntimeError # Issue 31346
 integer_to_radix_string_test/01: RuntimeError # Issue 31346
-string_split_test: RuntimeError # does not return List<String>
+string_case_test/01: RuntimeError # Issue 18061: German double S.
 
 [ $runtime == ff || $runtime == jsshell ]
 double_parse_test/02: Fail, OK # Issue 30468
 regexp/UC16_test: RuntimeError
 
-[ $runtime == safari || $runtime == safarimobilesim ]
-double_round3_test: Fail, OK # Runtime rounds 0.49999999999999994 to 1.
-double_round_to_double2_test: Fail, OK # Runtime rounds 0.49999999999999994 to 1.
-string_trimlr_test/02: RuntimeError # Uses Unicode 6.2.0 or earlier.
-
 [ $hot_reload || $hot_reload_rollback ]
 bigint_parse_radix_test: Pass, Timeout # Issue 31659
 bigint_test: Pass, Crash # Issue 31660
diff --git a/tests/corelib_2/splay_tree_from_iterable_test.dart b/tests/corelib_2/splay_tree_from_iterable_test.dart
index 08ceba3..7118f4a 100644
--- a/tests/corelib_2/splay_tree_from_iterable_test.dart
+++ b/tests/corelib_2/splay_tree_from_iterable_test.dart
@@ -119,14 +119,14 @@
   Expect.isFalse(map is SplayTreeMap<dynamic, int>);
 }
 
-typedef String intToString(int v);
-typedef bool intToBool(int v);
+typedef String objectToString(Object v);
+typedef bool objectToBool(Object v);
 
 // Test in checked mode with explicitly given types.
 void typedTest() {
   // Assign functions to typed function variables.
-  intToString key = (int v) => "$v";
-  intToBool value = (int v) => v.isOdd;
+  objectToString key = (v) => "$v";
+  objectToBool value = (v) => (v as int).isOdd;
   Function id = (int i) => i;
 
   Expect.throws(() {
diff --git a/tests/corelib_2/string_split_test.dart b/tests/corelib_2/string_split_test.dart
index 353cbe4..f15ac1f 100644
--- a/tests/corelib_2/string_split_test.dart
+++ b/tests/corelib_2/string_split_test.dart
@@ -21,11 +21,6 @@
   }
   List actual = string.split(pattern);
 
-  // Check that the list is growable/mutable
-  actual
-    ..add('42')
-    ..removeLast();
-
   // Ensure that the correct type is reified.
   actual = actual as List<String>;
   Expect.throwsTypeError(() => actual.add(42),
diff --git a/tests/html/html.status b/tests/html/html.status
index 66809df..a61443a 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -123,6 +123,15 @@
 
 [ $runtime == safari ]
 audiobuffersourcenode_test/functional: RuntimeError
+canvasrenderingcontext2d_test/drawImage_video_element: Fail # Safari does not support drawImage w/ video element
+canvasrenderingcontext2d_test/drawImage_video_element_dataUrl: Fail # Safari does not support drawImage w/ video element
+element_animate_test: Fail # Element.animate not supported on these browsers.
+element_test: Pass, Fail # Issue 21434
+element_types_test/supported_content: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
+element_types_test/supported_datalist: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
+element_types_test/supported_shadow: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
+fileapi_test/supported: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
+gamepad_test: Fail # Safari does not support Navigator.getGamepads()
 indexeddb_1_test/functional: Skip # Times out. Issue 21433
 indexeddb_2_test: RuntimeError # Issue 21433
 indexeddb_3_test: Skip # Times out 1 out of 10.
@@ -133,20 +142,17 @@
 input_element_test/supported_month: RuntimeError
 input_element_test/supported_time: RuntimeError
 input_element_test/supported_week: RuntimeError
+media_stream_test/supported_MediaStreamEvent: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
+media_stream_test/supported_MediaStreamTrackEvent: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
+media_stream_test/supported_media: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
+mediasource_test: Pass, Fail # MediaSource only available on Safari 8 desktop, we can't express that.
 notification_test/constructors: Fail # Safari doesn't let us access the fields of the Notification to verify them.
+rtc_test/supported: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
+shadow_dom_test/supported: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
+speechrecognition_test/supported: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
 touchevent_test/supported: Fail # Safari does not support TouchEvents
-
-[ $runtime == safarimobilesim ]
-element_offset_test/offset: RuntimeError # Issue 18573
-element_types_test/supported_meter: RuntimeError # Issue 18573
-element_types_test/supported_template: Fail
-event_test: RuntimeError # Safarimobilesim does not support WheelEvent
-indexeddb_1_test/supported: Fail
-notification_test/constructors: Pass # Safari mobile will pass this test on the basis that notifications aren't supported at all.
-notification_test/supported_notification: RuntimeError # Issue 22869
-performance_api_test/supported: Fail
-wheelevent_test: RuntimeError # Safarimobilesim does not support WheelEvent
-xhr_test/json: Fail # Safari doesn't support JSON response type
+webgl_1_test: Pass, Fail # Issue 8219
+worker_api_test: Skip # Issue 13221
 
 [ $builder_tag == strong && $compiler == dart2analyzer ]
 *: Skip # Issue 28649
@@ -343,7 +349,7 @@
 [ $compiler == dart2js && ($runtime == drt || $runtime == ff) ]
 request_animation_frame_test: Skip # Async test hangs.
 
-[ $compiler == dart2js && ($runtime == ff || $runtime == safari || $runtime == safarimobilesim || $ie) ]
+[ $compiler == dart2js && ($runtime == ff || $runtime == safari || $ie) ]
 custom/attribute_changed_callback_test/unsupported_on_polyfill: Fail # Polyfill does not support
 custom/entered_left_view_test/viewless_document: Fail # Polyfill does not handle this
 fontface_test: Fail # Fontface not supported on these.
@@ -366,26 +372,6 @@
 [ $runtime == dart_precompiled || $runtime == vm ]
 *: Skip
 
-[ $runtime == safari || $runtime == safarimobilesim ]
-canvasrenderingcontext2d_test/drawImage_video_element: Fail # Safari does not support drawImage w/ video element
-canvasrenderingcontext2d_test/drawImage_video_element_dataUrl: Fail # Safari does not support drawImage w/ video element
-element_animate_test: Fail # Element.animate not supported on these browsers.
-element_test: Pass, Fail # Issue 21434
-element_types_test/supported_content: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
-element_types_test/supported_datalist: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
-element_types_test/supported_shadow: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
-fileapi_test/supported: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
-gamepad_test: Fail # Safari does not support Navigator.getGamepads()
-media_stream_test/supported_MediaStreamEvent: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
-media_stream_test/supported_MediaStreamTrackEvent: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
-media_stream_test/supported_media: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
-mediasource_test: Pass, Fail # MediaSource only available on Safari 8 desktop, we can't express that.
-rtc_test/supported: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
-shadow_dom_test/supported: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
-speechrecognition_test/supported: Fail # Safari Feature support statuses - All changes should be accompanied by platform support annotation changes.
-webgl_1_test: Pass, Fail # Issue 8219
-worker_api_test: Skip # Issue 13221
-
 [ $system == windows || $runtime == drt && $system == macos ]
 xhr_test/xhr: Skip # Times out.  Issue 21527
 
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 2b1df1d..1365973 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -27,6 +27,12 @@
 spawn_uri_vm_test: SkipByDesign # Test uses a ".dart" URI.
 stacktrace_message_test: RuntimeError # Fails to send stacktrace object.
 
+[ $compiler == dartk ]
+message3_test/int32x4: Crash
+
+[ $compiler == dartkp ]
+message3_test/int32x4: Crash
+
 [ $mode == product ]
 issue_24243_parent_isolate_test: Skip # Requires checked mode
 
@@ -67,9 +73,6 @@
 cross_isolate_message_test: Skip # Issue 12627
 message_test: Skip # Issue 12627
 
-[ $compiler == dart2js && $runtime == safarimobilesim ]
-compile_time_error_test/none: Pass, Slow
-
 [ $compiler == dart2js && !$browser && $fast_startup ]
 isolate_current_test: Fail # please triage
 
@@ -103,9 +106,18 @@
 [ $compiler == dart2js && ($runtime == chrome || $runtime == chromeOnAndroid || $runtime == drt || $runtime == ff || $runtime == safari) ]
 isolate_stress_test: Pass, Slow # Issue 10697
 
+[ $compiler == dartk && $system == windows && $strong ]
+issue_22778_test: Fail
+message3_test/int32x4: Fail
+
+[ $compiler == dartk && $system == windows && !$strong ]
+message3_test/int32x4: Fail
+
+[ $compiler == dartk && $system != windows && $strong ]
+issue_22778_test: Crash
+
 [ $compiler == dartk && $strong ]
 issue_21398_parent_isolate1_test: RuntimeError
-issue_22778_test: Crash
 message3_test/byteBuffer: RuntimeError
 message3_test/constInstance: RuntimeError
 message3_test/constList: RuntimeError
@@ -118,7 +130,7 @@
 mint_maker_test: CompileTimeError
 spawn_function_custom_class_test: CompileTimeError
 spawn_uri_nested_vm_test: CompileTimeError
-static_function_test: CompileTimeError
+static_function_test: CompileTimeError, Timeout
 typed_message_test: CompileTimeError
 unresolved_ports_test: CompileTimeError, Pass, Timeout # Fails to compile on opt counter builder (#31838)
 
@@ -126,7 +138,38 @@
 # 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) ]
-*: Skip
+checked_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+count_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+cross_isolate_message_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+error_at_spawnuri_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+error_exit_at_spawnuri_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+exit_at_spawnuri_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+illegal_msg_function_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+illegal_msg_mirror_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate_complex_messages_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+issue_21398_parent_isolate1_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+issue_21398_parent_isolate_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+issue_24243_parent_isolate_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+mandel_isolate_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+message2_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+message_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+mint_maker_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+nested_spawn2_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+nested_spawn_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+raw_port_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+request_reply_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+spawn_function_custom_class_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+spawn_function_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+spawn_uri_exported_main_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+spawn_uri_missing_from_isolate_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+spawn_uri_missing_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+spawn_uri_multi_test/01: Skip # No support for Isolate.spawnUri in batch-mode atm.
+spawn_uri_multi_test/none: Skip # No support for Isolate.spawnUri in batch-mode atm.
+spawn_uri_nested_vm_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+spawn_uri_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+spawn_uri_vm_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+static_function_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+unresolved_ports_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
 
 [ $compiler == none && $runtime == vm && $system == fuchsia ]
 *: Skip # Not yet triaged.
@@ -135,7 +178,7 @@
 scenarios/short_package/short_package_test: Fail, OK # We do not plan to support the tested behavior anyway.
 
 [ $mode == debug && ($compiler == dartk || $compiler == dartkp) ]
-static_function_test: Skip # Flaky (https://github.com/dart-lang/sdk/issues/30063).
+static_function_test: Skip # Times out. Issue 31855
 
 [ $compiler == app_jit || $compiler == none || $compiler == precompiler ]
 compile_time_error_test/01: Skip # Issue 12587
@@ -152,7 +195,6 @@
 deferred_in_isolate2_test: Skip # Timeout. Deferred loading kernel issue 28335.
 deferred_in_isolate_test: Skip # Timeout. Deferred loading kernel issue 28335.
 issue_21398_parent_isolate2_test/01: Skip # Timeout. Deferred loading kernel issue 28335.
-message3_test/int32x4: Crash
 ping_pause_test: Pass, Timeout
 spawn_function_custom_class_test: Pass, Timeout
 spawn_uri_nested_vm_test: Pass, Timeout
diff --git a/tests/kernel/kernel.status b/tests/kernel/kernel.status
index c90979a..a39cb57 100644
--- a/tests/kernel/kernel.status
+++ b/tests/kernel/kernel.status
@@ -6,7 +6,6 @@
 unsorted/invocation_errors_test: Pass
 unsorted/loop_test: Skip
 unsorted/nsm_dispatcher_test: Skip # The test uses Symbol without MirrorsUsed
-unsorted/simple_literal_test: Crash # Issue 31762
 unsorted/super_initializer_test: Skip
 unsorted/super_mixin_test: CompileTimeError
 
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 9458eea..b61f8d0 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -7,21 +7,9 @@
 
 # VM specific tests that should not be run by dart2js.
 [ $compiler == dart2js ]
-arithmetic_test: Crash # Issue 31762
 assertion_initializer_test: Crash
-bit_operations_test/01: Crash # Issue 31762
-bit_operations_test/02: Crash # Issue 31762
-bit_operations_test/03: Crash # Issue 31762
-bit_operations_test/04: Crash # Issue 31762
-bit_operations_test/none: Crash # Issue 31762
-deopt_inlined_function_lazy_test: Crash # Issue 31762
-deopt_smi_op_test: RuntimeError # Issue 31762
 generalized_void_syntax_test: CompileTimeError
-guess_cid_test: Crash # Issue 31762
-identical_closure2_test: Crash # Issue 31762
-int2_test: Crash # Issue 31762
-mint_compares_test: Crash # Issue 31762
-number_identity_test: Crash # Issue 31762
+local_function_test: RuntimeError # Issue 31879
 vm/*: Skip # Issue 12699
 
 [ $arch == ia32 && $compiler == dart2js && $runtime == d8 ]
@@ -52,8 +40,8 @@
 [ $compiler == dart2js && $runtime == none && $dart2js_with_kernel ]
 *: Fail, Pass, Crash # TODO(sigmund): we should have no crashes when migration completes
 
-[ $compiler == dart2js && $runtime == safarimobilesim ]
-call_through_getter_test: Fail, OK # Safari codegen bug, fixed on some versions of Safari 7.1 (Version 7.1 (9537.85.10.17.1))
+[ $compiler == dart2js && $runtime == safari ]
+round_test: Fail, OK # Common JavaScript engine Math.round bug.
 
 [ $compiler == dart2js && $system == windows && ($runtime == chrome || $runtime == ff) ]
 string_literals_test: RuntimeError # Issue 27533
@@ -122,9 +110,6 @@
 compile_time_constant_checked_test/01: Fail
 compile_time_constant_checked_test/02: MissingCompileTimeError
 compile_time_constant_checked_test/03: Fail
-conditional_import_string_test: RuntimeError
-conditional_import_test: RuntimeError
-config_import_corelib_test: RuntimeError
 config_import_test: RuntimeError
 const_constructor2_test/13: MissingCompileTimeError
 const_constructor2_test/14: MissingCompileTimeError
@@ -159,7 +144,6 @@
 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_call_empty_before_load_test: RuntimeError
-deferred_closurize_load_library_test: RuntimeError
 deferred_constraints_constants_test/default_argument2: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred_constraints_constants_test/none: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred_constraints_constants_test/reference_after_load: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
@@ -495,17 +479,6 @@
 [ $compiler == dart2js && !$checked && $enable_asserts ]
 bool_check_test: RuntimeError # Issue 29647
 
-[ $compiler == dart2js && $dart2js_with_kernel ]
-arithmetic_test: CompileTimeError # Large integer literal
-bit_operations_test: CompileTimeError # Large integer literal
-deopt_inlined_function_lazy_test: CompileTimeError # Large integer literal
-guess_cid_test: CompileTimeError # Large integer literal
-identical_closure2_test: CompileTimeError # Large integer literal
-int2_test: CompileTimeError # Large integer literal
-mint_compares_test: CompileTimeError # Large integer literal
-number_identity_test: CompileTimeError # Large integer literal
-vm/regress_14903_test: CompileTimeError # Large integer literal
-
 [ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
 arithmetic_canonicalization_test: RuntimeError
 assertion_initializer_const_error2_test/none: CompileTimeError
@@ -531,9 +504,6 @@
 class_cycle_test/03: MissingCompileTimeError
 closure_in_field_test/01: RuntimeError
 closure_in_field_test/02: RuntimeError
-conditional_import_string_test: RuntimeError
-conditional_import_test: RuntimeError
-config_import_corelib_test: RuntimeError
 config_import_test: RuntimeError
 const_error_multiply_initialized_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/04: MissingCompileTimeError
@@ -556,7 +526,6 @@
 constructor_redirect2_test/01: MissingCompileTimeError
 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 # Stack Overflow
-deferred_closurize_load_library_test: RuntimeError
 deferred_constraints_constants_test/default_argument2: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred_constraints_constants_test/none: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred_constraints_constants_test/reference_after_load: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
@@ -848,13 +817,11 @@
 closure_in_field_test/01: RuntimeError
 closure_in_field_test/02: RuntimeError
 closure_self_reference_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/nodes.dart': Failed assertion: line 641 pos 12: 'isClosed()': is not true.
-conditional_import_string_test: RuntimeError
-conditional_import_test: RuntimeError
-config_import_corelib_test: RuntimeError
 config_import_test: RuntimeError
 const_error_multiply_initialized_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/04: MissingCompileTimeError
-const_evaluation_test/01: RuntimeError
+const_evaluation_test/01: CompileTimeError
+const_evaluation_test/none: CompileTimeError
 const_factory_with_body_test/01: MissingCompileTimeError
 const_instance_field_test/01: MissingCompileTimeError
 const_map2_test/00: MissingCompileTimeError
@@ -874,10 +841,8 @@
 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_call_empty_before_load_test: RuntimeError
-deferred_closurize_load_library_test: RuntimeError
-deferred_constraints_constants_test/default_argument2: Crash # Assertion failure: Missing scope info for j:method(_loadLibraryWrapper).
-deferred_constraints_constants_test/none: Crash # Assertion failure: Missing scope info for j:method(_loadLibraryWrapper).
-deferred_constraints_constants_test/reference_after_load: Crash # Assertion failure: Missing scope info for j:method(_loadLibraryWrapper).
+deferred_constraints_constants_test/none: CompileTimeError
+deferred_constraints_constants_test/reference_after_load: CompileTimeError
 deferred_constraints_type_annotation_test/as_operation: RuntimeError
 deferred_constraints_type_annotation_test/catch_check: RuntimeError
 deferred_constraints_type_annotation_test/is_check: RuntimeError
@@ -896,7 +861,7 @@
 duplicate_implements_test/04: MissingCompileTimeError
 dynamic_prefix_core_test/01: RuntimeError
 dynamic_prefix_core_test/none: RuntimeError
-enum_mirror_test: RuntimeError
+enum_mirror_test: CompileTimeError
 example_constructor_test: RuntimeError
 expect_test: RuntimeError
 external_test/10: MissingRuntimeError
@@ -905,6 +870,7 @@
 factory_redirection_test/07: MissingCompileTimeError
 fauxverride_test/03: MissingCompileTimeError
 fauxverride_test/05: MissingCompileTimeError
+field_increment_bailout_test: CompileTimeError
 field_initialization_order_test: RuntimeError
 field_override3_test/00: MissingCompileTimeError
 field_override3_test/01: MissingCompileTimeError
@@ -917,7 +883,6 @@
 full_stacktrace1_test: RuntimeError
 full_stacktrace2_test: RuntimeError
 full_stacktrace3_test: RuntimeError
-generic_local_functions_test: Crash # Unsupported operation: Unsupported type parameter type node Y.
 generic_methods_generic_function_parameter_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
 generic_methods_type_expression_test/01: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
 generic_methods_type_expression_test/03: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
@@ -930,20 +895,23 @@
 identical_closure2_test: RuntimeError
 if_null_assignment_behavior_test/14: RuntimeError
 infinity_test: RuntimeError
-instance_creation_in_function_annotation_test: RuntimeError
+instance_creation_in_function_annotation_test: CompileTimeError
 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: RuntimeError
+invocation_mirror2_test: CompileTimeError
 invocation_mirror_empty_arguments_test: RuntimeError
+invocation_mirror_invoke_on2_test: CompileTimeError
+invocation_mirror_invoke_on_test: CompileTimeError
 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: RuntimeError
+issue21079_test: CompileTimeError
 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
 map_literal4_test: RuntimeError
 method_name_test: CompileTimeError
 method_override5_test: RuntimeError
@@ -1078,12 +1046,12 @@
 named_parameters_type_test/03: MissingRuntimeError
 nan_identical_test: RuntimeError
 no_main_test/01: CompileTimeError
-null_test/02: MissingCompileTimeError
-null_test/03: MissingCompileTimeError
-null_test/none: RuntimeError
+no_such_method_test: CompileTimeError
+null_test/none: CompileTimeError
 number_identity2_test: RuntimeError
 numbers_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.
+overridden_no_such_method_test: CompileTimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
@@ -1102,9 +1070,12 @@
 redirecting_factory_default_values_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/02: MissingCompileTimeError
 redirecting_factory_long_test: RuntimeError
-redirecting_factory_reflection_test: RuntimeError
+redirecting_factory_reflection_test: CompileTimeError
+regress_13462_0_test: CompileTimeError
+regress_13462_1_test: CompileTimeError
 regress_13494_test: RuntimeError
 regress_17382_test: RuntimeError
+regress_18535_test: CompileTimeError
 regress_20394_test/01: MissingCompileTimeError
 regress_22936_test/01: RuntimeError
 regress_22976_test/01: Pass # Incorrectly pass, we are ignoring an error due to #31118
@@ -1115,7 +1086,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: RuntimeError
+regress_28255_test: CompileTimeError
 setter_override_test/00: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
 stacktrace_demangle_ctors_test: RuntimeError # Issue 12698
@@ -1126,7 +1097,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: Crash # Assertion failure: Missing scope info for j:method(E.boz).
+super_call4_test: CompileTimeError
+super_getter_setter_test: CompileTimeError
 super_test: RuntimeError
 switch_bad_case_test/01: MissingCompileTimeError
 switch_bad_case_test/02: MissingCompileTimeError
@@ -1166,15 +1138,11 @@
 class_cycle_test/03: MissingCompileTimeError
 closure_in_field_test/01: RuntimeError
 closure_in_field_test/02: RuntimeError
-conditional_import_string_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-conditional_import_string_test: RuntimeError
-conditional_import_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-conditional_import_test: RuntimeError
-config_import_corelib_test: RuntimeError
 config_import_test: RuntimeError
 const_error_multiply_initialized_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/04: MissingCompileTimeError
-const_evaluation_test/01: RuntimeError
+const_evaluation_test/01: CompileTimeError
+const_evaluation_test/none: CompileTimeError
 const_factory_with_body_test/01: MissingCompileTimeError
 const_instance_field_test/01: MissingCompileTimeError
 const_map2_test/00: MissingCompileTimeError
@@ -1200,11 +1168,8 @@
 cyclic_type_test/03: RuntimeError
 cyclic_type_test/04: RuntimeError
 deferred_call_empty_before_load_test: RuntimeError
-deferred_closurize_load_library_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-deferred_closurize_load_library_test: RuntimeError
-deferred_constraints_constants_test/default_argument2: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-deferred_constraints_constants_test/none: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-deferred_constraints_constants_test/reference_after_load: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
+deferred_constraints_constants_test/none: CompileTimeError
+deferred_constraints_constants_test/reference_after_load: CompileTimeError
 deferred_constraints_type_annotation_test/as_operation: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
 deferred_constraints_type_annotation_test/as_operation: RuntimeError
 deferred_constraints_type_annotation_test/catch_check: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
@@ -1229,7 +1194,7 @@
 duplicate_implements_test/04: MissingCompileTimeError
 dynamic_prefix_core_test/01: RuntimeError
 dynamic_prefix_core_test/none: RuntimeError
-enum_mirror_test: RuntimeError
+enum_mirror_test: CompileTimeError
 example_constructor_test: RuntimeError
 expect_test: RuntimeError
 external_test/10: MissingRuntimeError
@@ -1240,6 +1205,7 @@
 factory_redirection_test/07: MissingCompileTimeError
 fauxverride_test/03: MissingCompileTimeError
 fauxverride_test/05: MissingCompileTimeError
+field_increment_bailout_test: CompileTimeError
 field_initialization_order_test: RuntimeError
 field_override3_test/00: MissingCompileTimeError
 field_override3_test/01: MissingCompileTimeError
@@ -1264,20 +1230,23 @@
 identical_closure2_test: RuntimeError
 if_null_assignment_behavior_test/14: RuntimeError
 infinity_test: RuntimeError
-instance_creation_in_function_annotation_test: RuntimeError
+instance_creation_in_function_annotation_test: CompileTimeError
 integer_division_by_zero_test: RuntimeError
 internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
-invocation_mirror2_test: RuntimeError
+invocation_mirror2_test: CompileTimeError
 invocation_mirror_empty_arguments_test: RuntimeError
+invocation_mirror_invoke_on2_test: CompileTimeError
+invocation_mirror_invoke_on_test: CompileTimeError
 invocation_mirror_test: RuntimeError
 issue13474_test: RuntimeError
-issue21079_test: RuntimeError
+issue21079_test: CompileTimeError
 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
 map_literal4_test: RuntimeError
 method_name_test: CompileTimeError
 method_override5_test: RuntimeError
@@ -1413,11 +1382,11 @@
 named_parameters_type_test/03: MissingRuntimeError
 nan_identical_test: RuntimeError
 no_main_test/01: CompileTimeError
-null_test/02: MissingCompileTimeError
-null_test/03: MissingCompileTimeError
-null_test/none: RuntimeError
+no_such_method_test: CompileTimeError
+null_test/none: CompileTimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError
+overridden_no_such_method_test: CompileTimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
@@ -1435,9 +1404,12 @@
 redirecting_factory_default_values_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/02: MissingCompileTimeError
 redirecting_factory_long_test: RuntimeError
-redirecting_factory_reflection_test: RuntimeError
+redirecting_factory_reflection_test: CompileTimeError
+regress_13462_0_test: CompileTimeError
+regress_13462_1_test: CompileTimeError
 regress_13494_test: RuntimeError
 regress_17382_test: RuntimeError
+regress_18535_test: CompileTimeError
 regress_20394_test/01: MissingCompileTimeError
 regress_21795_test: RuntimeError
 regress_22936_test/01: RuntimeError
@@ -1449,7 +1421,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: RuntimeError
+regress_28255_test: CompileTimeError
 setter_override_test/00: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
 stack_trace_test: RuntimeError
@@ -1461,7 +1433,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: Crash # NoSuchMethodError: The getter 'thisLocal' was called on null.
+super_call4_test: CompileTimeError
+super_getter_setter_test: CompileTimeError
 super_test: RuntimeError
 switch_bad_case_test/01: MissingCompileTimeError
 switch_bad_case_test/02: MissingCompileTimeError
@@ -1679,9 +1652,6 @@
 mixin_mixin_bound_test: RuntimeError # Issue 12605
 symbol_conflict_test: RuntimeError # Issue 23857
 
-[ $compiler == dart2js && ($runtime == safari || $runtime == safarimobilesim) ]
-round_test: Fail, OK # Common JavaScript engine Math.round bug.
-
 [ !$dart2js_with_kernel && $minified ]
 regress_21795_test: RuntimeError # Issue 12605
 stack_trace_test: Fail, OK # Stack trace not preserved in minified code.
diff --git a/tests/language_2/dynamic_test.dart b/tests/language_2/dynamic_test.dart
index 97e97bf..5fe8529 100644
--- a/tests/language_2/dynamic_test.dart
+++ b/tests/language_2/dynamic_test.dart
@@ -47,7 +47,7 @@
   Expect.isTrue(m3 is Iface<String, num>);
   Expect.isTrue(m3 is! Iface<num, String>);
 
-  F1<int> f1 = (String s, int i) => s[i];
+  F1<int> f1 = (dynamic s, int i) => s[i];
   Expect.isTrue(f1 is F1<int>);
 
   HasFieldDynamic has_field = new HasFieldDynamic();
diff --git a/tests/language_2/function_test.dart b/tests/language_2/function_test.dart
index 334d48a..aa5f087 100644
--- a/tests/language_2/function_test.dart
+++ b/tests/language_2/function_test.dart
@@ -351,6 +351,7 @@
     UntypedFunction2 uf2 = null;
     Foo foo = null;
     Foo<int, String> fooIntString = null;
+    Foo<Object, Object> fooObjectObject = null;
 
     f = uf;
     f = uf2;
@@ -362,9 +363,11 @@
     foo = f;
     fooIntString = f;
 
-    foo = fooIntString;
     fooIntString = foo;
 
+    foo = fooObjectObject;
+    fooObjectObject = foo;
+
     uf = uf2;
     uf2 = uf;
   }
diff --git a/tests/language_2/index_assign_operator_infer_return_type_test.dart b/tests/language_2/index_assign_operator_infer_return_type_test.dart
new file mode 100644
index 0000000..357c281
--- /dev/null
+++ b/tests/language_2/index_assign_operator_infer_return_type_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class C {
+  dynamic operator []=(dynamic index, dynamic value) {}
+}
+
+abstract class I {
+  void operator []=(dynamic index, dynamic value) {}
+}
+
+class D extends C implements I {
+  // Even though `C` and `I` define different return types for `operator[]=`, it
+  // should still be possible to infer a return type here, since the return type
+  // of `operator[]=` is always inferred as `void`.
+  operator []=(dynamic index, dynamic value) {}
+}
+
+main() {}
diff --git a/tests/language_2/instantiate_tearoff_test.dart b/tests/language_2/instantiate_tearoff_test.dart
index 892be77..1c50f7f 100644
--- a/tests/language_2/instantiate_tearoff_test.dart
+++ b/tests/language_2/instantiate_tearoff_test.dart
@@ -6,21 +6,38 @@
 
 T f<T>(T x) => x;
 
+int intToInt(int x) => x;
+String stringToString(String x) => x;
+
 main() {
   int Function(int) intFunc = f;
   dynamic intFuncDynamic = intFunc;
   Expect.isTrue(intFuncDynamic is int Function(int));
   Expect.isFalse(intFuncDynamic is String Function(String));
   Expect.equals(intFuncDynamic(1), 1);
+  Expect.equals("${intFuncDynamic.runtimeType}", "${intToInt.runtimeType}");
   Expect.throwsTypeError(() {
     intFuncDynamic('oops');
   });
+  Expect.throwsNoSuchMethodError(() {
+    intFuncDynamic<String>('oops');
+  });
   String Function(String) stringFunc = f;
   dynamic stringFuncDynamic = stringFunc;
   Expect.isTrue(stringFuncDynamic is String Function(String));
   Expect.isFalse(stringFuncDynamic is int Function(int));
   Expect.equals(stringFuncDynamic('hello'), 'hello');
+  Expect.equals(
+      "${stringFuncDynamic.runtimeType}", "${stringToString.runtimeType}");
   Expect.throwsTypeError(() {
     stringFuncDynamic(1);
   });
+  Expect.throwsNoSuchMethodError(() {
+    stringFuncDynamic<int>(1);
+  });
+  dynamic Function(dynamic) dynamicFunc = f;
+  dynamic dynamicFuncDynamic = dynamicFunc;
+  Expect.throwsNoSuchMethodError(() {
+    dynamicFuncDynamic<int>(1);
+  });
 }
diff --git a/tests/language_2/issue13179_test.dart b/tests/language_2/issue13179_test.dart
index 0439cea..d1492b4 100644
--- a/tests/language_2/issue13179_test.dart
+++ b/tests/language_2/issue13179_test.dart
@@ -6,7 +6,7 @@
 
 int count = 0;
 
-void f([void f([x]) = f]) {
+void f([void f([Null x]) = f]) {
   count++;
   if (f != null) {
     f(null);
diff --git a/tests/language_2/language_2.status b/tests/language_2/language_2.status
index 00f785d..146c5dd 100644
--- a/tests/language_2/language_2.status
+++ b/tests/language_2/language_2.status
@@ -22,13 +22,10 @@
 stacktrace_demangle_ctors_test: SkipByDesign # Names are not scrubbed.
 type_checks_in_factory_method_test: SkipByDesign # Requires checked mode.
 
-[ $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $strong ]
+[ $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $strong ]
 type_promotion_functions_test: CompileTimeError # Issue 30895: This test requires a complete rewrite for 2.0.
 
-[ $compiler != dartdevc && !$checked ]
-function_type/*: Skip # Needs checked mode.
-
-[ $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $strong ]
+[ $compiler != dart2js && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $strong ]
 compile_time_constant_static5_test/11: CompileTimeError # Issue 30546
 compile_time_constant_static5_test/16: CompileTimeError # Issue 30546
 compile_time_constant_static5_test/21: CompileTimeError # Issue 30546
@@ -37,15 +34,25 @@
 issue_25671b_test/01: CompileTimeError
 type_promotion_more_specific_test/04: CompileTimeError # Issue 30906.
 
+[ $compiler != dartdevc && !$checked ]
+function_type/*: Skip # Needs checked mode.
+
 [ $compiler != dartk && $compiler != dartkp && $mode == debug && $runtime == vm ]
 built_in_identifier_type_annotation_test/15: Crash # Not supported by legacy VM front-end.
 
 [ $compiler == none && $runtime == drt && !$checked ]
 assertion_initializer_const_error_test/01: Fail
 
+# We no longer expect Dart2 tests to run with the standalone VM without the new
+# common front end, but for now we get better coverage by still running them in
+# checked mode, which is mostly Dart2-compatible.
+[ $compiler == none && $runtime == vm && !$checked ]
+*: Skip
+
 [ $compiler != spec_parser && !$checked && !$strong ]
 closure_type_test: RuntimeError
 map_literal1_test/01: MissingCompileTimeError
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/02: RuntimeError # Requires type check.
 
 [ $compiler != spec_parser && !$strong ]
 class_literal_static_test: MissingCompileTimeError # Requires strong mode
@@ -98,6 +105,9 @@
 map_literal4_test/04: MissingCompileTimeError
 map_literal4_test/05: MissingCompileTimeError
 map_literal4_test/06: MissingCompileTimeError
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/03: MissingCompileTimeError # Issue #31426
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError # Issue #31426
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError # Issue #31426
 number_identifier_test/05: MissingCompileTimeError
 number_identifier_test/08: MissingCompileTimeError
 number_identifier_test/09: MissingCompileTimeError
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index b7c2b77..803fd57 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -45,6 +45,7 @@
 getter_declaration_negative_test: CompileTimeError
 getter_setter_in_lib_test: Fail # Issue 23286
 import_core_prefix_test: StaticWarning
+index_assign_operator_infer_return_type_test: StaticWarning
 initializing_formal_final_test: MissingCompileTimeError
 inst_field_initializer1_negative_test: CompileTimeError
 instance_call_wrong_argument_count_negative_test: Fail # Issue 11585
@@ -69,8 +70,8 @@
 list_literal_negative_test: CompileTimeError
 map_literal_negative_test: CompileTimeError
 method_override7_test/03: Fail # Issue 11497
-method_override_test: StaticWarning
 method_override_test: CompileTimeError
+method_override_test: StaticWarning
 mixin_supertype_subclass2_test/02: MissingStaticWarning # Issue 25614
 mixin_supertype_subclass2_test/05: MissingStaticWarning # Issue 25614
 mixin_supertype_subclass3_test/02: MissingStaticWarning # Issue 25614
@@ -1133,39 +1134,48 @@
 void_type_override_test/none: CompileTimeError # Issue 30177
 void_type_usage_test/call_as: CompileTimeError # Issue 30177
 void_type_usage_test/call_for: CompileTimeError # Issue 30177
+void_type_usage_test/call_return_to_void: CompileTimeError # Issue 30177
 void_type_usage_test/call_stmt: CompileTimeError # Issue 30177
 void_type_usage_test/field_assign: CompileTimeError # Issue 30177
 void_type_usage_test/field_assign2: CompileTimeError # Issue 30177
 void_type_usage_test/final_local_as: CompileTimeError # Issue 30177
 void_type_usage_test/final_local_for: CompileTimeError # Issue 30177
+void_type_usage_test/final_local_return_to_void: CompileTimeError # Issue 30177
 void_type_usage_test/final_local_stmt: CompileTimeError # Issue 30177
 void_type_usage_test/global_as: CompileTimeError # Issue 30177
 void_type_usage_test/global_for: CompileTimeError # Issue 30177
 void_type_usage_test/global_for_in2: CompileTimeError # Issue 30177
+void_type_usage_test/global_return_to_void: CompileTimeError # Issue 30177
 void_type_usage_test/global_stmt: CompileTimeError # Issue 30177
 void_type_usage_test/instance2_as: CompileTimeError # Issue 30177
 void_type_usage_test/instance2_for: CompileTimeError # Issue 30177
 void_type_usage_test/instance2_for_in3: CompileTimeError # Issue 30177
+void_type_usage_test/instance2_return_to_void: CompileTimeError # Issue 30177
 void_type_usage_test/instance2_stmt: CompileTimeError # Issue 30177
 void_type_usage_test/instance3_as: CompileTimeError # Issue 30177
 void_type_usage_test/instance3_for: CompileTimeError # Issue 30177
 void_type_usage_test/instance3_for_in3: CompileTimeError # Issue 30177
+void_type_usage_test/instance3_return_to_void: CompileTimeError # Issue 30177
 void_type_usage_test/instance3_stmt: CompileTimeError # Issue 30177
 void_type_usage_test/instance_as: CompileTimeError # Issue 30177
 void_type_usage_test/instance_for: CompileTimeError # Issue 30177
+void_type_usage_test/instance_return_to_void: CompileTimeError # Issue 30177
 void_type_usage_test/instance_stmt: CompileTimeError # Issue 30177
 void_type_usage_test/local_as: CompileTimeError # Issue 30177
 void_type_usage_test/local_assign: CompileTimeError # Issue 30177
 void_type_usage_test/local_for: CompileTimeError # Issue 30177
 void_type_usage_test/local_for_in2: CompileTimeError # Issue 30177
+void_type_usage_test/local_return_to_void: CompileTimeError # Issue 30177
 void_type_usage_test/local_stmt: CompileTimeError # Issue 30177
 void_type_usage_test/none: CompileTimeError # Issue 30177
 void_type_usage_test/param_as: CompileTimeError # Issue 30177
 void_type_usage_test/param_for: CompileTimeError # Issue 30177
 void_type_usage_test/param_for_in2: CompileTimeError # Issue 30177
+void_type_usage_test/param_return_to_void: CompileTimeError # Issue 30177
 void_type_usage_test/param_stmt: CompileTimeError # Issue 30177
 void_type_usage_test/paren_as: CompileTimeError # Issue 30177
 void_type_usage_test/paren_for: CompileTimeError # Issue 30177
+void_type_usage_test/paren_return_to_void: CompileTimeError # Issue 30177
 void_type_usage_test/paren_stmt: CompileTimeError # Issue 30177
 void_type_usage_test/setter_assign: CompileTimeError # Issue 30177
 
@@ -1363,6 +1373,7 @@
 invalid_cast_test/10: MissingCompileTimeError
 invalid_cast_test/11: MissingCompileTimeError
 invocation_mirror_test: StaticWarning
+issue13179_test: StaticWarning
 known_identifier_prefix_error_test/*: MissingCompileTimeError # Error only in strong mode.
 known_identifier_prefix_error_test/none: Pass
 least_upper_bound_expansive_test/01: MissingCompileTimeError
@@ -1488,6 +1499,7 @@
 named_parameters_type_test/01: MissingCompileTimeError
 named_parameters_type_test/02: MissingCompileTimeError
 named_parameters_type_test/03: MissingCompileTimeError
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/03: MissingCompileTimeError # Strong mode error
 object_has_no_call_method_test/02: MissingCompileTimeError
 object_has_no_call_method_test/05: MissingCompileTimeError
 object_has_no_call_method_test/08: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index a8e5484..64b68c3 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -20,7 +20,6 @@
 argument_assignability_function_typed_test/03: RuntimeError
 argument_assignability_function_typed_test/04: RuntimeError
 argument_assignability_function_typed_test/05: RuntimeError
-arithmetic_test: Crash # Issue 31762
 assign_static_type_test/01: MissingCompileTimeError
 assign_static_type_test/02: MissingCompileTimeError
 assign_static_type_test/03: MissingCompileTimeError
@@ -134,7 +133,6 @@
 default_factory2_test/01: MissingCompileTimeError
 default_factory_test/01: MissingCompileTimeError
 deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
-deopt_smi_op_test: RuntimeError # Issue 31762
 dynamic_field_test/01: MissingCompileTimeError
 dynamic_field_test/02: MissingCompileTimeError
 dynamic_prefix_core_test/01: MissingCompileTimeError
@@ -254,7 +252,6 @@
 getter_no_setter_test/03: MissingCompileTimeError
 getter_override_test/03: MissingCompileTimeError
 getters_setters2_test/02: MissingCompileTimeError
-guess_cid_test: RuntimeError # Issue 31762
 identical_const_test/01: MissingCompileTimeError
 identical_const_test/02: MissingCompileTimeError
 identical_const_test/03: MissingCompileTimeError
@@ -416,7 +413,6 @@
 method_override7_test/03: MissingCompileTimeError
 method_override8_test/03: MissingCompileTimeError
 method_override_test: RuntimeError
-mint_compares_test: Crash # Issue 31762
 mixin_illegal_constructor_test/13: MissingCompileTimeError
 mixin_illegal_constructor_test/14: MissingCompileTimeError
 mixin_illegal_constructor_test/15: MissingCompileTimeError
@@ -595,6 +591,7 @@
 regress_23408_test: RuntimeError
 regress_26133_test: MissingCompileTimeError
 regress_27572_test: MissingCompileTimeError
+regress_30516_test: CompileTimeError # Issue 30515.
 regress_31057_test: RuntimeError
 regress_31591_test: RuntimeError, OK # strong mode only
 return_type_test: MissingCompileTimeError
@@ -1064,9 +1061,6 @@
 field_type_check2_test/01: MissingRuntimeError
 round_test: Fail, OK # Common JavaScript engine Math.round bug.
 
-[ $compiler == dart2js && $runtime == safarimobilesim && !$dart2js_with_kernel ]
-call_through_getter_test: Fail, OK
-
 [ $compiler == dart2js && $system == windows && !$dart2js_with_kernel ]
 string_literals_test: Pass, RuntimeError # Failures on dart2js-win7-chrome-4-4-be and dart2js-win7-ie11ff-4-4-be
 
@@ -1110,8 +1104,6 @@
 closure_invoked_through_interface_target_getter_test: MissingCompileTimeError
 compile_time_constant_o_test/01: MissingCompileTimeError
 compile_time_constant_o_test/02: MissingCompileTimeError
-conditional_import_string_test: RuntimeError
-conditional_import_test: RuntimeError
 conditional_method_invocation_test/05: MissingCompileTimeError
 conditional_method_invocation_test/06: MissingCompileTimeError
 conditional_method_invocation_test/07: MissingCompileTimeError
@@ -1152,7 +1144,6 @@
 conditional_property_increment_decrement_test/34: MissingCompileTimeError
 conditional_property_increment_decrement_test/39: MissingCompileTimeError
 conditional_property_increment_decrement_test/40: MissingCompileTimeError
-config_import_corelib_test: RuntimeError
 config_import_test: RuntimeError
 const_constructor2_test/05: MissingCompileTimeError
 const_constructor2_test/06: MissingCompileTimeError
@@ -1207,7 +1198,6 @@
 covariant_subtyping_test: CompileTimeError
 cyclic_constructor_test/01: Crash # Stack Overflow
 deferred_call_empty_before_load_test: RuntimeError
-deferred_closurize_load_library_test: RuntimeError
 deferred_constraints_constants_test/default_argument2: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred_constraints_constants_test/none: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred_constraints_constants_test/reference_after_load: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
@@ -1587,7 +1577,6 @@
 function_subtype_inline2_test: RuntimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel ]
-arithmetic_test: Pass # Issue 31762
 bug31436_test: RuntimeError
 built_in_identifier_type_annotation_test/22: Crash # Issue 28815
 built_in_identifier_type_annotation_test/52: MissingCompileTimeError # Issue 28815
@@ -1635,7 +1624,6 @@
 invalid_cast_test/10: MissingCompileTimeError
 invalid_cast_test/11: MissingCompileTimeError
 library_env_test/has_no_mirror_support: Pass
-mint_compares_test: Pass # Issue 31762
 object_has_no_call_method_test/02: MissingCompileTimeError
 object_has_no_call_method_test/05: MissingCompileTimeError
 object_has_no_call_method_test/08: MissingCompileTimeError
@@ -1666,8 +1654,6 @@
 closure_invoked_through_interface_target_getter_test: MissingCompileTimeError
 compile_time_constant_o_test/01: MissingCompileTimeError
 compile_time_constant_o_test/02: MissingCompileTimeError
-conditional_import_string_test: RuntimeError
-conditional_import_test: RuntimeError
 conditional_method_invocation_test/05: MissingCompileTimeError
 conditional_method_invocation_test/06: MissingCompileTimeError
 conditional_method_invocation_test/07: MissingCompileTimeError
@@ -1708,7 +1694,6 @@
 conditional_property_increment_decrement_test/34: MissingCompileTimeError
 conditional_property_increment_decrement_test/39: MissingCompileTimeError
 conditional_property_increment_decrement_test/40: MissingCompileTimeError
-config_import_corelib_test: RuntimeError
 config_import_test: RuntimeError
 const_constructor2_test/05: MissingCompileTimeError
 const_constructor2_test/06: MissingCompileTimeError
@@ -1766,7 +1751,6 @@
 covariant_subtyping_unsafe_call3_test: RuntimeError
 cyclic_constructor_test/01: Crash # Stack Overflow
 deferred_call_empty_before_load_test: RuntimeError
-deferred_closurize_load_library_test: RuntimeError
 deferred_constraints_constants_test/default_argument2: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred_constraints_constants_test/none: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred_constraints_constants_test/reference_after_load: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
@@ -2162,8 +2146,6 @@
 compile_time_constant_static_test/01: MissingCompileTimeError
 compile_time_constant_static_test/02: MissingCompileTimeError
 compile_time_constant_static_test/03: MissingCompileTimeError
-conditional_import_string_test: RuntimeError
-conditional_import_test: RuntimeError
 conditional_method_invocation_test/05: MissingCompileTimeError
 conditional_method_invocation_test/06: MissingCompileTimeError
 conditional_method_invocation_test/07: MissingCompileTimeError
@@ -2204,7 +2186,6 @@
 conditional_property_increment_decrement_test/34: MissingCompileTimeError
 conditional_property_increment_decrement_test/39: MissingCompileTimeError
 conditional_property_increment_decrement_test/40: MissingCompileTimeError
-config_import_corelib_test: RuntimeError
 config_import_test: RuntimeError
 const_constructor2_test/05: MissingCompileTimeError
 const_constructor2_test/06: MissingCompileTimeError
@@ -2222,7 +2203,8 @@
 const_dynamic_type_literal_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/04: MissingCompileTimeError
-const_evaluation_test/01: RuntimeError
+const_evaluation_test/01: CompileTimeError
+const_evaluation_test/none: CompileTimeError
 const_factory_with_body_test/01: MissingCompileTimeError
 const_init2_test/02: MissingCompileTimeError
 const_instance_field_test/01: MissingCompileTimeError
@@ -2263,10 +2245,8 @@
 crash_6725_test/01: MissingCompileTimeError
 cyclic_constructor_test/01: Crash # Issue 30856
 deferred_call_empty_before_load_test: RuntimeError
-deferred_closurize_load_library_test: RuntimeError
-deferred_constraints_constants_test/default_argument2: Crash # Assertion failure: Missing scope info for j:method(_loadLibraryWrapper).
-deferred_constraints_constants_test/none: Crash # Assertion failure: Missing scope info for j:method(_loadLibraryWrapper).
-deferred_constraints_constants_test/reference_after_load: Crash # Assertion failure: Missing scope info for j:method(_loadLibraryWrapper).
+deferred_constraints_constants_test/none: CompileTimeError
+deferred_constraints_constants_test/reference_after_load: CompileTimeError
 deferred_constraints_type_annotation_test/as_operation: MissingCompileTimeError
 deferred_constraints_type_annotation_test/catch_check: MissingCompileTimeError
 deferred_constraints_type_annotation_test/is_check: MissingCompileTimeError
@@ -2304,7 +2284,7 @@
 duplicate_implements_test/03: MissingCompileTimeError
 duplicate_implements_test/04: MissingCompileTimeError
 dynamic_prefix_core_test/none: RuntimeError
-enum_mirror_test: RuntimeError
+enum_mirror_test: CompileTimeError
 enum_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
 expect_test: RuntimeError
 external_test/10: MissingRuntimeError
@@ -2313,6 +2293,7 @@
 factory_redirection_test/07: MissingCompileTimeError
 fauxverride_test/03: MissingCompileTimeError
 fauxverride_test/05: MissingCompileTimeError
+field_increment_bailout_test: CompileTimeError
 field_override3_test/00: MissingCompileTimeError
 field_override3_test/01: MissingCompileTimeError
 field_override3_test/02: MissingCompileTimeError
@@ -2378,14 +2359,16 @@
 infinity_test: RuntimeError
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
-instance_creation_in_function_annotation_test: RuntimeError
+instance_creation_in_function_annotation_test: CompileTimeError
 instanceof2_test: RuntimeError
 instanceof4_test/01: RuntimeError
 instanceof4_test/none: RuntimeError
 integer_division_by_zero_test: RuntimeError
 interface_test/00: Crash # 'package:front_end/src/fasta/kernel/body_builder.dart': Failed assertion: line 2218 pos 14: '!target.enclosingClass.isAbstract': is not true.
 internal_library_test/02: Crash # type 'DillLibraryBuilder' is not a subtype of type 'SourceLibraryBuilder<KernelTypeBuilder, Library>' of 'value' where
-invocation_mirror2_test: RuntimeError
+invocation_mirror2_test: CompileTimeError
+invocation_mirror_invoke_on2_test: CompileTimeError
+invocation_mirror_invoke_on_test: CompileTimeError
 is_malformed_type_test/94: MissingCompileTimeError
 is_malformed_type_test/95: MissingCompileTimeError
 is_malformed_type_test/96: MissingCompileTimeError
@@ -2399,7 +2382,7 @@
 issue15606_test/01: MissingCompileTimeError
 issue18628_1_test/01: MissingCompileTimeError
 issue18628_2_test/01: MissingCompileTimeError
-issue21079_test: RuntimeError
+issue21079_test: CompileTimeError
 issue23244_test: RuntimeError
 known_identifier_prefix_error_test/01: MissingCompileTimeError
 known_identifier_prefix_error_test/02: MissingCompileTimeError
@@ -2438,6 +2421,7 @@
 list_literal_syntax_test/03: MissingCompileTimeError
 malformed2_test/00: MissingCompileTimeError
 many_generic_instanceof_test: RuntimeError
+many_overridden_no_such_method_test: CompileTimeError
 map_literal11_test/none: MissingRuntimeError
 map_literal1_test/01: MissingCompileTimeError
 map_literal3_test/01: MissingCompileTimeError
@@ -2551,6 +2535,11 @@
 nan_identical_test: RuntimeError
 nested_generic_closure_test: Crash # Unsupported operation: Unsupported type parameter type node F.
 no_main_test/01: CompileTimeError
+no_such_method_test: CompileTimeError
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/02: RuntimeError
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/03: MissingCompileTimeError
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError
 not_enough_positional_arguments_test/00: MissingCompileTimeError
 not_enough_positional_arguments_test/01: MissingCompileTimeError
 not_enough_positional_arguments_test/02: MissingCompileTimeError
@@ -2558,10 +2547,8 @@
 not_enough_positional_arguments_test/05: MissingCompileTimeError
 not_enough_positional_arguments_test/06: MissingCompileTimeError
 not_enough_positional_arguments_test/07: MissingCompileTimeError
-null_test/02: MissingCompileTimeError
-null_test/03: MissingCompileTimeError
-null_test/mirrors: RuntimeError
-null_test/none: RuntimeError
+null_test/mirrors: CompileTimeError
+null_test/none: CompileTimeError
 number_identifier_test/05: MissingCompileTimeError
 number_identifier_test/08: MissingCompileTimeError
 number_identifier_test/09: MissingCompileTimeError
@@ -2572,6 +2559,7 @@
 operator_equals_test: MissingCompileTimeError
 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.
 optimized_constant_array_string_access_test: MissingCompileTimeError
+overridden_no_such_method_test: CompileTimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
@@ -2595,7 +2583,10 @@
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_long_test: RuntimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
-redirecting_factory_reflection_test: RuntimeError
+redirecting_factory_reflection_test: CompileTimeError
+regress_13462_0_test: CompileTimeError
+regress_13462_1_test: CompileTimeError
+regress_18535_test: CompileTimeError
 regress_20394_test/01: MissingCompileTimeError
 regress_22976_test/01: Pass # Incorrectly pass, we are ignoring an error due to #31118
 regress_22976_test/02: Pass # Incorrectly pass, we are ignoring an error due to #31118
@@ -2605,7 +2596,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: RuntimeError
+regress_28255_test: CompileTimeError
 regress_28341_test: RuntimeError
 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
@@ -2617,7 +2608,8 @@
 stacktrace_rethrow_error_test/withtraceparameter: RuntimeError
 stacktrace_rethrow_nonerror_test: RuntimeError
 stacktrace_test: RuntimeError # Issue 12698
-super_call4_test: Crash # Assertion failure: Missing scope info for j:method(E.boz).
+super_call4_test: CompileTimeError
+super_getter_setter_test: CompileTimeError
 switch_bad_case_test/01: MissingCompileTimeError
 switch_bad_case_test/02: MissingCompileTimeError
 switch_case_test/00: MissingCompileTimeError
@@ -2740,6 +2732,7 @@
 void_type_override_test/none: CompileTimeError
 void_type_usage_test/call_as: CompileTimeError
 void_type_usage_test/call_for: CompileTimeError
+void_type_usage_test/call_return_to_void: CompileTimeError
 void_type_usage_test/call_stmt: CompileTimeError
 void_type_usage_test/conditional2_argument: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_conditional: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
@@ -2751,6 +2744,7 @@
 void_type_usage_test/conditional2_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_parens: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_return: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_return_to_void: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 192 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_stmt: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_throw: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_void_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
@@ -2767,6 +2761,7 @@
 void_type_usage_test/conditional3_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_parens: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_return: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_return_to_void: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 192 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_stmt: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_throw: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_void_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
@@ -2777,38 +2772,46 @@
 void_type_usage_test/field_assign2: CompileTimeError
 void_type_usage_test/final_local_as: CompileTimeError
 void_type_usage_test/final_local_for: CompileTimeError
+void_type_usage_test/final_local_return_to_void: CompileTimeError
 void_type_usage_test/final_local_stmt: CompileTimeError
 void_type_usage_test/global_as: CompileTimeError
 void_type_usage_test/global_for: CompileTimeError
 void_type_usage_test/global_for_in2: CompileTimeError
 void_type_usage_test/global_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/global_return_to_void: CompileTimeError
 void_type_usage_test/global_stmt: CompileTimeError
 void_type_usage_test/instance2_as: CompileTimeError
 void_type_usage_test/instance2_for: CompileTimeError
 void_type_usage_test/instance2_for_in3: CompileTimeError
+void_type_usage_test/instance2_return_to_void: CompileTimeError
 void_type_usage_test/instance2_stmt: CompileTimeError
 void_type_usage_test/instance3_as: CompileTimeError
 void_type_usage_test/instance3_for: CompileTimeError
 void_type_usage_test/instance3_for_in3: CompileTimeError
+void_type_usage_test/instance3_return_to_void: CompileTimeError
 void_type_usage_test/instance3_stmt: CompileTimeError
 void_type_usage_test/instance_as: CompileTimeError
 void_type_usage_test/instance_for: CompileTimeError
+void_type_usage_test/instance_return_to_void: CompileTimeError
 void_type_usage_test/instance_stmt: CompileTimeError
 void_type_usage_test/local_as: CompileTimeError
 void_type_usage_test/local_assign: CompileTimeError
 void_type_usage_test/local_for: CompileTimeError
 void_type_usage_test/local_for_in2: CompileTimeError
 void_type_usage_test/local_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/local_return_to_void: CompileTimeError
 void_type_usage_test/local_stmt: CompileTimeError
 void_type_usage_test/none: CompileTimeError
 void_type_usage_test/param_as: CompileTimeError
 void_type_usage_test/param_for: CompileTimeError
 void_type_usage_test/param_for_in2: CompileTimeError
 void_type_usage_test/param_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/param_return_to_void: CompileTimeError
 void_type_usage_test/param_stmt: CompileTimeError
 void_type_usage_test/paren_as: CompileTimeError
 void_type_usage_test/paren_for: CompileTimeError
 void_type_usage_test/paren_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/paren_return_to_void: CompileTimeError
 void_type_usage_test/paren_stmt: CompileTimeError
 void_type_usage_test/setter_assign: CompileTimeError
 wrong_number_type_arguments_test/none: Pass
@@ -2909,8 +2912,6 @@
 compile_time_constant_static_test/01: MissingCompileTimeError
 compile_time_constant_static_test/02: MissingCompileTimeError
 compile_time_constant_static_test/03: MissingCompileTimeError
-conditional_import_string_test: RuntimeError
-conditional_import_test: RuntimeError
 conditional_method_invocation_test/05: MissingCompileTimeError
 conditional_method_invocation_test/06: MissingCompileTimeError
 conditional_method_invocation_test/07: MissingCompileTimeError
@@ -2951,7 +2952,6 @@
 conditional_property_increment_decrement_test/34: MissingCompileTimeError
 conditional_property_increment_decrement_test/39: MissingCompileTimeError
 conditional_property_increment_decrement_test/40: MissingCompileTimeError
-config_import_corelib_test: RuntimeError
 config_import_test: RuntimeError
 const_constructor2_test/05: MissingCompileTimeError
 const_constructor2_test/06: MissingCompileTimeError
@@ -2969,7 +2969,8 @@
 const_dynamic_type_literal_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/02: MissingCompileTimeError
 const_error_multiply_initialized_test/04: MissingCompileTimeError
-const_evaluation_test/01: RuntimeError
+const_evaluation_test/01: CompileTimeError
+const_evaluation_test/none: CompileTimeError
 const_factory_with_body_test/01: MissingCompileTimeError
 const_init2_test/02: MissingCompileTimeError
 const_instance_field_test/01: MissingCompileTimeError
@@ -3010,10 +3011,8 @@
 crash_6725_test/01: MissingCompileTimeError
 cyclic_constructor_test/01: Crash # Issue 30856
 deferred_call_empty_before_load_test: RuntimeError
-deferred_closurize_load_library_test: RuntimeError
-deferred_constraints_constants_test/default_argument2: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-deferred_constraints_constants_test/none: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-deferred_constraints_constants_test/reference_after_load: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
+deferred_constraints_constants_test/none: CompileTimeError
+deferred_constraints_constants_test/reference_after_load: CompileTimeError
 deferred_constraints_type_annotation_test/as_operation: MissingCompileTimeError
 deferred_constraints_type_annotation_test/catch_check: MissingCompileTimeError
 deferred_constraints_type_annotation_test/is_check: MissingCompileTimeError
@@ -3051,7 +3050,7 @@
 duplicate_implements_test/03: MissingCompileTimeError
 duplicate_implements_test/04: MissingCompileTimeError
 dynamic_prefix_core_test/none: RuntimeError
-enum_mirror_test: RuntimeError
+enum_mirror_test: CompileTimeError
 expect_test: RuntimeError
 external_test/10: MissingRuntimeError
 external_test/13: MissingRuntimeError
@@ -3060,6 +3059,7 @@
 factory_redirection_test/07: MissingCompileTimeError
 fauxverride_test/03: MissingCompileTimeError
 fauxverride_test/05: MissingCompileTimeError
+field_increment_bailout_test: CompileTimeError
 field_override3_test/00: MissingCompileTimeError
 field_override3_test/01: MissingCompileTimeError
 field_override3_test/02: MissingCompileTimeError
@@ -3119,13 +3119,15 @@
 infinity_test: RuntimeError
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
-instance_creation_in_function_annotation_test: RuntimeError
+instance_creation_in_function_annotation_test: CompileTimeError
 instanceof2_test: RuntimeError
 instanceof4_test/01: RuntimeError
 instanceof4_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: RuntimeError
+invocation_mirror2_test: CompileTimeError
+invocation_mirror_invoke_on2_test: CompileTimeError
+invocation_mirror_invoke_on_test: CompileTimeError
 invocation_mirror_test: RuntimeError
 is_malformed_type_test/94: MissingCompileTimeError
 is_malformed_type_test/95: MissingCompileTimeError
@@ -3140,7 +3142,7 @@
 issue15606_test/01: MissingCompileTimeError
 issue18628_1_test/01: MissingCompileTimeError
 issue18628_2_test/01: MissingCompileTimeError
-issue21079_test: RuntimeError
+issue21079_test: CompileTimeError
 issue23244_test: RuntimeError
 known_identifier_prefix_error_test/01: MissingCompileTimeError
 known_identifier_prefix_error_test/02: MissingCompileTimeError
@@ -3179,6 +3181,7 @@
 list_literal_syntax_test/03: MissingCompileTimeError
 malformed2_test/00: MissingCompileTimeError
 many_generic_instanceof_test: RuntimeError
+many_overridden_no_such_method_test: CompileTimeError
 map_literal11_test/none: MissingRuntimeError
 map_literal1_test/01: MissingCompileTimeError
 map_literal3_test/01: MissingCompileTimeError
@@ -3289,6 +3292,11 @@
 nested_generic_closure_test: Crash # Unsupported operation: Unsupported type parameter type node F.
 no_main_test/01: CompileTimeError
 no_such_method_native_test: RuntimeError
+no_such_method_test: CompileTimeError
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/02: RuntimeError
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/03: MissingCompileTimeError
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError
 not_enough_positional_arguments_test/00: MissingCompileTimeError
 not_enough_positional_arguments_test/01: MissingCompileTimeError
 not_enough_positional_arguments_test/02: MissingCompileTimeError
@@ -3296,10 +3304,8 @@
 not_enough_positional_arguments_test/05: MissingCompileTimeError
 not_enough_positional_arguments_test/06: MissingCompileTimeError
 not_enough_positional_arguments_test/07: MissingCompileTimeError
-null_test/02: MissingCompileTimeError
-null_test/03: MissingCompileTimeError
-null_test/mirrors: RuntimeError
-null_test/none: RuntimeError
+null_test/mirrors: CompileTimeError
+null_test/none: CompileTimeError
 number_identifier_test/05: MissingCompileTimeError
 number_identifier_test/08: MissingCompileTimeError
 number_identifier_test/09: MissingCompileTimeError
@@ -3309,6 +3315,7 @@
 operator5_test: MissingCompileTimeError
 operator_equals_test: MissingCompileTimeError
 optimized_constant_array_string_access_test: MissingCompileTimeError
+overridden_no_such_method_test: CompileTimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
@@ -3331,7 +3338,10 @@
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_long_test: RuntimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
-redirecting_factory_reflection_test: RuntimeError
+redirecting_factory_reflection_test: CompileTimeError
+regress_13462_0_test: CompileTimeError
+regress_13462_1_test: CompileTimeError
+regress_18535_test: CompileTimeError
 regress_20394_test/01: MissingCompileTimeError
 regress_21795_test: RuntimeError
 regress_22976_test/01: Pass # Incorrectly pass, we are ignoring an error due to #31118
@@ -3342,7 +3352,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: RuntimeError
+regress_28255_test: CompileTimeError
 regress_28341_test: RuntimeError
 regress_29784_test/01: Crash # Issue 29784
 regress_29784_test/02: MissingCompileTimeError # Issue 29784
@@ -3355,7 +3365,8 @@
 stacktrace_rethrow_error_test/withtraceparameter: RuntimeError # Issue 12698
 stacktrace_rethrow_nonerror_test: RuntimeError # Issue 12698
 stacktrace_test: RuntimeError # Issue 12698
-super_call4_test: Crash # NoSuchMethodError: The getter 'thisLocal' was called on null.
+super_call4_test: CompileTimeError
+super_getter_setter_test: CompileTimeError
 switch_bad_case_test/01: MissingCompileTimeError
 switch_bad_case_test/02: MissingCompileTimeError
 switch_case_test/00: MissingCompileTimeError
@@ -3477,39 +3488,48 @@
 void_type_override_test/none: CompileTimeError
 void_type_usage_test/call_as: CompileTimeError
 void_type_usage_test/call_for: CompileTimeError
+void_type_usage_test/call_return_to_void: CompileTimeError
 void_type_usage_test/call_stmt: CompileTimeError
 void_type_usage_test/field_assign: CompileTimeError
 void_type_usage_test/field_assign2: CompileTimeError
 void_type_usage_test/final_local_as: CompileTimeError
 void_type_usage_test/final_local_for: CompileTimeError
+void_type_usage_test/final_local_return_to_void: CompileTimeError
 void_type_usage_test/final_local_stmt: CompileTimeError
 void_type_usage_test/global_as: CompileTimeError
 void_type_usage_test/global_for: CompileTimeError
 void_type_usage_test/global_for_in2: CompileTimeError
+void_type_usage_test/global_return_to_void: CompileTimeError
 void_type_usage_test/global_stmt: CompileTimeError
 void_type_usage_test/instance2_as: CompileTimeError
 void_type_usage_test/instance2_for: CompileTimeError
 void_type_usage_test/instance2_for_in3: CompileTimeError
+void_type_usage_test/instance2_return_to_void: CompileTimeError
 void_type_usage_test/instance2_stmt: CompileTimeError
 void_type_usage_test/instance3_as: CompileTimeError
 void_type_usage_test/instance3_for: CompileTimeError
 void_type_usage_test/instance3_for_in3: CompileTimeError
+void_type_usage_test/instance3_return_to_void: CompileTimeError
 void_type_usage_test/instance3_stmt: CompileTimeError
 void_type_usage_test/instance_as: CompileTimeError
 void_type_usage_test/instance_for: CompileTimeError
+void_type_usage_test/instance_return_to_void: CompileTimeError
 void_type_usage_test/instance_stmt: CompileTimeError
 void_type_usage_test/local_as: CompileTimeError
 void_type_usage_test/local_assign: CompileTimeError
 void_type_usage_test/local_for: CompileTimeError
 void_type_usage_test/local_for_in2: CompileTimeError
+void_type_usage_test/local_return_to_void: CompileTimeError
 void_type_usage_test/local_stmt: CompileTimeError
 void_type_usage_test/none: CompileTimeError
 void_type_usage_test/param_as: CompileTimeError
 void_type_usage_test/param_for: CompileTimeError
 void_type_usage_test/param_for_in2: CompileTimeError
+void_type_usage_test/param_return_to_void: CompileTimeError
 void_type_usage_test/param_stmt: CompileTimeError
 void_type_usage_test/paren_as: CompileTimeError
 void_type_usage_test/paren_for: CompileTimeError
+void_type_usage_test/paren_return_to_void: CompileTimeError
 void_type_usage_test/paren_stmt: CompileTimeError
 void_type_usage_test/setter_assign: CompileTimeError
 wrong_number_type_arguments_test/none: Pass
@@ -3526,7 +3546,6 @@
 bad_constructor_test/05: CompileTimeError
 bad_typedef_test/00: Crash # Issue 28214
 bug31436_test: RuntimeError
-built_in_identifier_type_annotation_test/13: Crash # Issue 28815
 built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Error only in strong mode
 built_in_identifier_type_annotation_test/30: Crash # Issue 28815
 built_in_identifier_type_annotation_test/52: Crash # Issue 28815
@@ -3545,7 +3564,6 @@
 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
-built_in_identifier_type_annotation_test/81: Crash # Issue 28815
 call_function_apply_test: RuntimeError # Issue 23873
 canonical_const2_test: RuntimeError, OK # Issue 1533
 closure_param_null_to_object_test: RuntimeError
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index 88ab234..2e88f06 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -55,6 +55,7 @@
 initializing_formal_final_test: MissingCompileTimeError
 instantiate_tearoff_after_contravariance_check_test: RuntimeError
 instantiate_tearoff_of_call_test: RuntimeError
+instantiate_tearoff_test: RuntimeError
 interface_test/00: MissingCompileTimeError
 internal_library_test/01: MissingCompileTimeError # Issue 29920
 issue31596_test: CompileTimeError
@@ -124,7 +125,6 @@
 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
-arithmetic_test: RuntimeError # Issue 31763
 assertion_initializer_const_error2_test/cc01: MissingCompileTimeError
 assertion_initializer_const_error2_test/cc02: MissingCompileTimeError
 assertion_initializer_const_error2_test/cc03: MissingCompileTimeError
@@ -144,7 +144,7 @@
 async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
 async_return_types_test/tooManyTypeParameters: MissingCompileTimeError
 async_return_types_test/wrongReturnType: Crash # Maltyped input from Fasta, issue 31414
-await_test: CompileTimeError # Issue 31541
+await_test: Crash # Issue 31541
 bad_named_parameters2_test/01: MissingCompileTimeError
 bad_named_parameters_test/01: MissingCompileTimeError
 bad_named_parameters_test/02: MissingCompileTimeError
@@ -269,7 +269,6 @@
 duplicate_implements_test/01: MissingCompileTimeError
 duplicate_implements_test/02: MissingCompileTimeError
 dynamic_prefix_core_test/none: CompileTimeError
-dynamic_test: CompileTimeError
 emit_const_fields_test: CompileTimeError # Issue 31533
 export_ambiguous_main_test: MissingCompileTimeError
 external_test/21: CompileTimeError
@@ -385,7 +384,6 @@
 instance_call_wrong_argument_count_negative_test: Fail
 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'.
-issue13179_test: CompileTimeError # Issue 31537
 issue18628_2_test/01: MissingCompileTimeError
 issue31596_test: RuntimeError
 issue_25671a_test/01: CompileTimeError # Warning: The method 'A::noSuchMethod' has fewer positional arguments than those of overridden method 'Object::noSuchMethod'.
@@ -418,7 +416,6 @@
 method_override8_test/01: MissingCompileTimeError
 method_override8_test/03: MissingCompileTimeError
 method_override_test: CompileTimeError # Issue 31616
-mint_compares_test: RuntimeError # Issue 31763
 mixin_black_listed_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
@@ -598,6 +595,7 @@
 regress_29784_test/01: MissingCompileTimeError
 regress_29784_test/02: MissingCompileTimeError
 regress_30339_test: CompileTimeError
+regress_30516_test: CompileTimeError # Issue 30470.
 setter4_test: MissingCompileTimeError
 setter_no_getter_test/01: CompileTimeError
 setter_override_test/00: MissingCompileTimeError
@@ -716,11 +714,10 @@
 
 [ $compiler == dartdevk && $runtime != none ]
 callable_test/none: RuntimeError # Expect.throws(TypeError) fails: Did not throw
-conditional_import_string_test: RuntimeError # Unsupported operation: String.fromEnvironment can only be used as a const constructor
-conditional_import_test: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
+conditional_import_string_test: CompileTimeError # Test is broken
+conditional_import_test: CompileTimeError # Test is broken
 cyclic_type_test/00: RuntimeError # Expect.equals(expected: <Derived>, actual: <dynamic>) fails.
 cyclic_type_test/01: RuntimeError # Expect.equals(at index 0: Expected <Derived<Derived<int>>...>, Found: <dynamic>) fails.
-deferred_closurize_load_library_test: RuntimeError # NoSuchMethodError: method not found: 'then'
 enum_duplicate_test/01: RuntimeError # NoSuchMethodError: method not found: '<Unexpected Null Value>'
 enum_duplicate_test/02: RuntimeError # NoSuchMethodError: method not found: '<Unexpected Null Value>'
 enum_duplicate_test/none: RuntimeError # NoSuchMethodError: method not found: '<Unexpected Null Value>'
@@ -729,7 +726,6 @@
 enum_private_test/none: RuntimeError # NoSuchMethodError: method not found: '<Unexpected Null Value>'
 enum_test: RuntimeError # NoSuchMethodError: method not found: '<Unexpected Null Value>'
 f_bounded_equality_test: RuntimeError # Expect.equals(expected: <dynamic>, actual: <Real>) fails.
-field_override_optimization_test: RuntimeError # Expect.fail('This should also be unreachable')
 first_class_types_test: RuntimeError # Expect.equals(expected: <List>, actual: <List<int>>) fails.
 forwarding_stub_tearoff_test: RuntimeError
 function_subtype_bound_closure1_test: RuntimeError # Expect.isTrue(false, 'foo is Foo') fails.
@@ -737,7 +733,6 @@
 function_subtype_bound_closure5_test: RuntimeError # ReferenceError: TAndStringToint is not defined
 function_subtype_bound_closure5a_test: RuntimeError # ReferenceError: TAndStringToint is not defined
 function_subtype_bound_closure6_test: RuntimeError # ReferenceError: TAndStringToint is not defined
-function_subtype_bound_closure7_test: RuntimeError # ReferenceError: TTodynamic is not defined
 function_subtype_cast0_test: RuntimeError # CastError: Casting value of type '(int) => void' to type '(dynamic) => void' which is incompatible
 function_subtype_cast2_test: RuntimeError # ReferenceError: TTovoid is not defined
 function_subtype_cast3_test: RuntimeError # ReferenceError: TTovoid is not defined
@@ -760,11 +755,7 @@
 generic_closure_test/none: RuntimeError # ReferenceError: TToT is not defined
 generic_function_dcall_test: RuntimeError
 generic_list_checked_test: RuntimeError # Expect.throws fails: Did not throw
-generic_methods_tearoff_specialization_test: RuntimeError
-generic_methods_unused_parameter_test: RuntimeError # Expect.isTrue(false) fails.
 generic_test: RuntimeError # ReferenceError: BOfT is not defined
-instantiate_tearoff_after_contravariance_check_test: RuntimeError
-instantiate_tearoff_test: RuntimeError
 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
@@ -793,6 +784,7 @@
 runtime_type_function_test: RuntimeError # Expect.fail('Type print string does not match expectation
 syncstar_yield_test/copyParameters: RuntimeError # Expect.equals(expected: <2>, actual: <3>) fails.
 type_literal_test: RuntimeError # Expect.equals(expected: <Func>, actual: <(bool) => int>) fails.
+instantiate_tearoff_test: RuntimeError
 
 # Compiler tests for dartdevc and dartdevk.  These contain common expectations
 # for all runtimes including $runtime == none.  They are organized by: shared
@@ -888,6 +880,7 @@
 nan_identical_test: RuntimeError # Issue 29920; Unsupported operation: Uint64 accessor not supported by dart2js.
 nested_switch_label_test: RuntimeError # Issue 29920; UnimplementedError: node <ShadowContinueSwitchStatement> see https://github.com/dart-lang/sdk/issues/29352 `continue #L1;
 no_such_method_test: RuntimeError # UnimplementedError: JsInstanceMirror.delegate unimplemented
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError # Issue #31425
 null_test/mirrors: RuntimeError # Uses mirrors.; ReferenceError: GenericOfT is not defined
 number_identity2_test: RuntimeError # Issue 29920; Expect.isTrue(false) fails.
 numbers_test: RuntimeError # Issue 29920; Expect.equals(expected: <false>, actual: <true>) fails.
@@ -929,6 +922,7 @@
 multiline_newline_test/04r: MissingCompileTimeError
 multiline_newline_test/05: MissingCompileTimeError
 multiline_newline_test/05r: MissingCompileTimeError
+no_such_method_tearoff_fta_test: RuntimeError # Issue http://dartbug.com/31897
 override_field_test/03: MissingCompileTimeError
 override_inheritance_abstract_test/02: MissingCompileTimeError
 override_inheritance_abstract_test/03: MissingCompileTimeError
@@ -957,43 +951,51 @@
 void_type_override_test/none: CompileTimeError # Issue 30514
 void_type_usage_test/call_as: CompileTimeError # Issue 30514
 void_type_usage_test/call_for: CompileTimeError # Issue 30514
+void_type_usage_test/call_return_to_void: CompileTimeError # Issue 30514
 void_type_usage_test/call_stmt: CompileTimeError # Issue 30514
 void_type_usage_test/field_assign: CompileTimeError # Issue 30514
 void_type_usage_test/field_assign2: CompileTimeError # Issue 30514
 void_type_usage_test/final_local_as: CompileTimeError # Issue 30514
 void_type_usage_test/final_local_for: CompileTimeError # Issue 30514
+void_type_usage_test/final_local_return_to_void: CompileTimeError # Issue 30514
 void_type_usage_test/final_local_stmt: CompileTimeError # Issue 30514
 void_type_usage_test/global_as: CompileTimeError # Issue 30514
 void_type_usage_test/global_for: CompileTimeError # Issue 30514
 void_type_usage_test/global_for_in2: CompileTimeError # Issue 30514
+void_type_usage_test/global_return_to_void: CompileTimeError # Issue 30514
 void_type_usage_test/global_stmt: CompileTimeError # Issue 30514
 void_type_usage_test/instance2_as: CompileTimeError # Issue 30514
 void_type_usage_test/instance2_for: CompileTimeError # Issue 30514
 void_type_usage_test/instance2_for_in3: CompileTimeError # Issue 30514
+void_type_usage_test/instance2_return_to_void: CompileTimeError # Issue 30514
 void_type_usage_test/instance2_stmt: CompileTimeError # Issue 30514
 void_type_usage_test/instance3_as: CompileTimeError # Issue 30514
 void_type_usage_test/instance3_for: CompileTimeError # Issue 30514
 void_type_usage_test/instance3_for_in3: CompileTimeError # Issue 30514
+void_type_usage_test/instance3_return_to_void: CompileTimeError # Issue 30514
 void_type_usage_test/instance3_stmt: CompileTimeError # Issue 30514
 void_type_usage_test/instance_as: CompileTimeError # Issue 30514
 void_type_usage_test/instance_for: CompileTimeError # Issue 30514
+void_type_usage_test/instance_return_to_void: CompileTimeError # Issue 30514
 void_type_usage_test/instance_stmt: CompileTimeError # Issue 30514
 void_type_usage_test/local_as: CompileTimeError # Issue 30514
 void_type_usage_test/local_assign: CompileTimeError # Issue 30514
 void_type_usage_test/local_for: CompileTimeError # Issue 30514
 void_type_usage_test/local_for_in2: CompileTimeError # Issue 30514
+void_type_usage_test/local_return_to_void: CompileTimeError # Issue 30514
 void_type_usage_test/local_stmt: CompileTimeError # Issue 30514
 void_type_usage_test/none: CompileTimeError # Issue 30514
 void_type_usage_test/param_as: CompileTimeError # Issue 30514
 void_type_usage_test/param_for: CompileTimeError # Issue 30514
 void_type_usage_test/param_for_in2: CompileTimeError # Issue 30514
+void_type_usage_test/param_return_to_void: CompileTimeError # Issue 30514
 void_type_usage_test/param_stmt: CompileTimeError # Issue 30514
 void_type_usage_test/paren_as: CompileTimeError # Issue 30514
 void_type_usage_test/paren_for: CompileTimeError # Issue 30514
+void_type_usage_test/paren_return_to_void: CompileTimeError # Issue 30514
 void_type_usage_test/paren_stmt: CompileTimeError # Issue 30514
 void_type_usage_test/setter_assign: CompileTimeError # Issue 30514
 
 [ $compiler == dartdevk || $compiler == dartdevc && $runtime == none ]
 instantiate_type_variable_test/01: CompileTimeError
 setter_no_getter_call_test/01: CompileTimeError
-
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 66efda2..5d9d5ee 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -9,7 +9,6 @@
 # in the existing sections, if possible keep the alphabetic ordering. If we are
 # missing a section you need, please reach out to sigmund@ to see the best way
 # to add them.
-# ===== Skip dartk and darkp in !$strong mode ====
 
 [ $compiler == dartkp ]
 generic_no_such_method_dispatcher_test: RuntimeError # Issue 31424
@@ -82,11 +81,6 @@
 async_return_types_test/none: RuntimeError
 async_star_regression_2238_test: RuntimeError
 async_star_take_reyield_test: RuntimeError
-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
 asyncstar_yield_test: RuntimeError
 asyncstar_yieldstar_test: RuntimeError
 bug31436_test: RuntimeError
@@ -231,18 +225,7 @@
 async_return_types_test/wrongReturnType: MissingCompileTimeError
 async_star_cancel_while_paused_test: RuntimeError
 async_star_pause_test: Fail, OK
-async_star_regression_2238_test: RuntimeError
-async_star_regression_23116_test: RuntimeError
-async_star_regression_fisk_test: RuntimeError
-async_star_test/01: CompileTimeError # Issue 2238.
-async_star_test/01: Pass
-async_star_test/01: RuntimeError
-async_star_test/02: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/03: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/04: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/05: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
-await_test: CompileTimeError # Issue 31541
+async_star_test/02: RuntimeError # Issue 31402 (Invocation arguments)
 bad_named_parameters2_test/01: MissingCompileTimeError
 bad_named_parameters_test/01: MissingCompileTimeError
 bad_named_parameters_test/02: MissingCompileTimeError
@@ -278,10 +261,6 @@
 callable_test/none: CompileTimeError # Issue 31402 (Variable declaration)
 cha_deopt1_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 cha_deopt1_test: RuntimeError
-cha_deopt2_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-cha_deopt2_test: RuntimeError
-cha_deopt3_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-cha_deopt3_test: RuntimeError
 check_member_static_test/01: MissingCompileTimeError
 closure_invoked_through_interface_target_field_test: MissingCompileTimeError
 closure_invoked_through_interface_target_getter_test: MissingCompileTimeError
@@ -337,12 +316,9 @@
 ct_const2_test: Pass, Crash # Flaky
 ct_const_test: RuntimeError
 cyclic_constructor_test/01: MissingCompileTimeError # Fasta bug: Cyclic constructor redirection.
-cyclic_type2_test: CompileTimeError
-cyclic_type2_test: Fail, OK
-cyclic_type_test/02: CompileTimeError
-cyclic_type_test/02: Fail, OK # Non-contractive types are not supported in the vm.
-cyclic_type_test/04: CompileTimeError
-cyclic_type_test/04: Fail, OK
+cyclic_type2_test: RuntimeError, CompileTimeError
+cyclic_type_test/02: RuntimeError, CompileTimeError
+cyclic_type_test/04: RuntimeError, CompileTimeError
 cyclic_type_variable_test/01: MissingCompileTimeError
 cyclic_type_variable_test/02: MissingCompileTimeError
 cyclic_type_variable_test/03: MissingCompileTimeError
@@ -376,19 +352,16 @@
 deferred_inlined_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_inlined_test: RuntimeError
 deferred_load_constants_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_load_inval_code_test: RuntimeError
 deferred_load_inval_code_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_load_library_wrong_args_test/01: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
 deferred_load_library_wrong_args_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_mixin_test: RuntimeError
 deferred_mixin_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
+deferred_mixin_test: RuntimeError
 deferred_no_such_method_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_no_such_method_test: RuntimeError
 deferred_not_loaded_check_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
 deferred_only_constant_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_only_constant_test: RuntimeError
 deferred_optimized_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_optimized_test: RuntimeError
 deferred_redirecting_factory_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_redirecting_factory_test: RuntimeError
 deferred_regression_22995_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
@@ -398,7 +371,6 @@
 deferred_shared_and_unshared_classes_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_shared_and_unshared_classes_test: RuntimeError
 deferred_static_seperate_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_static_seperate_test: RuntimeError
 deferred_super_dependency_test/01: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
 deferred_type_dependency_test/as: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_type_dependency_test/is: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
@@ -414,7 +386,6 @@
 external_test/10: MissingRuntimeError # KernelVM bug: Unbound external.
 external_test/13: MissingRuntimeError # KernelVM bug: Unbound external.
 external_test/20: MissingRuntimeError # KernelVM bug: Unbound external.
-extract_type_arguments_test: RuntimeError # Issue 31371
 f_bounded_quantification_test/01: MissingCompileTimeError
 f_bounded_quantification_test/02: MissingCompileTimeError
 factory2_test/03: MissingCompileTimeError
@@ -438,8 +409,6 @@
 function_subtype_bound_closure5_test: RuntimeError
 function_subtype_bound_closure5a_test: RuntimeError
 function_subtype_bound_closure6_test: RuntimeError
-function_subtype_bound_closure7_test: CompileTimeError # Issue 31402 (Variable declaration)
-function_subtype_bound_closure7_test: RuntimeError
 function_subtype_call1_test: RuntimeError
 function_subtype_call2_test: RuntimeError
 function_subtype_cast0_test: RuntimeError
@@ -463,11 +432,9 @@
 function_type_alias6_test/none: RuntimeError
 function_type_alias_test: RuntimeError
 generalized_void_syntax_test: CompileTimeError # Issue #30176.
-generic_async_star_test: RuntimeError
 generic_closure_test: RuntimeError
 generic_function_bounds_test: RuntimeError
 generic_function_bounds_test: CompileTimeError
-generic_function_dcall_test: CompileTimeError
 generic_function_dcall_test: RuntimeError
 generic_instanceof2_test: RuntimeError
 generic_is_check_test: RuntimeError
@@ -475,17 +442,12 @@
 generic_methods_bounds_test/01: MissingCompileTimeError
 generic_methods_overriding_test/01: MissingCompileTimeError
 generic_methods_recursive_bound_test/02: MissingCompileTimeError
-generic_methods_tearoff_specialization_test: CompileTimeError # Issue 31402 (Variable declaration)
-generic_methods_tearoff_specialization_test: RuntimeError
-generic_methods_unused_parameter_test: RuntimeError
-generic_methods_unused_parameter_test: CompileTimeError # Issue 31402 (Variable declaration)
 generic_no_such_method_dispatcher_simple_test: CompileTimeError # Issue 31533
 generic_no_such_method_dispatcher_test: CompileTimeError # Issue 31533
 generic_tearoff_test: CompileTimeError
 generic_tearoff_test: RuntimeError
 generic_test: RuntimeError
 getter_override_test/03: MissingCompileTimeError
-hello_dart_test: Crash # error: expected: cls.is_type_finalized()
 identical_const_test/01: MissingCompileTimeError
 identical_const_test/02: MissingCompileTimeError
 identical_const_test/03: MissingCompileTimeError
@@ -495,16 +457,12 @@
 implicit_this_test/04: MissingCompileTimeError
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
-instantiate_tearoff_after_contravariance_check_test: CompileTimeError
 instantiate_tearoff_of_call_test: CompileTimeError
-instantiate_tearoff_test: CompileTimeError
 invocation_mirror_test: CompileTimeError # Issue 31402 (Invocation arguments)
-issue13179_test: CompileTimeError # Issue 31402 (Parameter default value)
 issue18628_2_test/01: MissingCompileTimeError
 issue_1751477_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 issue_25671a_test/01: CompileTimeError # Test assumes Dart 1.0 semantics
 issue_25671b_test/01: DartkCrash
-language_2/least_upper_bound_expansive_test/none: CompileTimeError
 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.
@@ -609,6 +567,8 @@
 nested_generic_closure_test: RuntimeError
 no_main_test/01: DartkCrash
 no_main_test/01: Skip
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError # Issue #31426
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError # Issue #31426
 null_no_such_method_test: CompileTimeError # Issue 31533
 optional_named_parameters_test/02: MissingCompileTimeError
 optional_named_parameters_test/04: MissingCompileTimeError
@@ -662,15 +622,12 @@
 override_inheritance_no_such_method_test/13: MissingCompileTimeError
 parser_quirks_test: CompileTimeError # Issue 31533
 recursive_generic_test: RuntimeError
-recursive_mixin_test: Crash
-recursive_mixin_test: RuntimeError
 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.
 redirecting_factory_default_values_test/03: MissingCompileTimeError
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_long_test: RuntimeError # Fasta bug: Bad compilation of type arguments for redirecting factory.
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
-redirecting_factory_reflection_test: Crash, Pass
 regress_22443_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 regress_22976_test/01: CompileTimeError # Issue 31402 (Variable declaration)
 regress_23089_test: Crash
@@ -684,6 +641,7 @@
 regress_29784_test/01: MissingCompileTimeError
 regress_29784_test/02: MissingCompileTimeError
 regress_30339_test: CompileTimeError # Issue 31402 (Variable declaration)
+regress_30516_test: CompileTimeError # Issue 30470.
 setter4_test: MissingCompileTimeError # Issue 14736
 setter_override_test/01: MissingCompileTimeError
 setter_override_test/02: MissingCompileTimeError
@@ -715,6 +673,7 @@
 syntax_test/31: MissingCompileTimeError
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
+syntax_test/59: Pass # Issue 30470.
 type_literal_test: RuntimeError
 type_promotion_functions_test/02: CompileTimeError # Issue 31537
 type_promotion_functions_test/03: CompileTimeError # Issue 31537
@@ -751,44 +710,68 @@
 void_type_override_test/none: CompileTimeError
 void_type_usage_test/call_as: CompileTimeError
 void_type_usage_test/call_for: CompileTimeError
+void_type_usage_test/call_return_to_void: CompileTimeError
 void_type_usage_test/call_stmt: CompileTimeError
 void_type_usage_test/field_assign: CompileTimeError
 void_type_usage_test/field_assign2: CompileTimeError
 void_type_usage_test/final_local_as: CompileTimeError
 void_type_usage_test/final_local_for: CompileTimeError
+void_type_usage_test/final_local_return_to_void: CompileTimeError
 void_type_usage_test/final_local_stmt: CompileTimeError
 void_type_usage_test/global_as: CompileTimeError
 void_type_usage_test/global_for: CompileTimeError
 void_type_usage_test/global_for_in2: CompileTimeError
+void_type_usage_test/global_return_to_void: CompileTimeError
 void_type_usage_test/global_stmt: CompileTimeError
 void_type_usage_test/instance2_as: CompileTimeError
 void_type_usage_test/instance2_for: CompileTimeError
 void_type_usage_test/instance2_for_in3: CompileTimeError
+void_type_usage_test/instance2_return_to_void: CompileTimeError
 void_type_usage_test/instance2_stmt: CompileTimeError
 void_type_usage_test/instance3_as: CompileTimeError
 void_type_usage_test/instance3_for: CompileTimeError
 void_type_usage_test/instance3_for_in3: CompileTimeError
+void_type_usage_test/instance3_return_to_void: CompileTimeError
 void_type_usage_test/instance3_stmt: CompileTimeError
 void_type_usage_test/instance_as: CompileTimeError
 void_type_usage_test/instance_for: CompileTimeError
+void_type_usage_test/instance_return_to_void: CompileTimeError
 void_type_usage_test/instance_stmt: CompileTimeError
 void_type_usage_test/local_as: CompileTimeError
 void_type_usage_test/local_assign: CompileTimeError
 void_type_usage_test/local_for: CompileTimeError
 void_type_usage_test/local_for_in2: CompileTimeError
+void_type_usage_test/local_return_to_void: CompileTimeError
 void_type_usage_test/local_stmt: CompileTimeError
 void_type_usage_test/none: CompileTimeError
 void_type_usage_test/param_as: CompileTimeError
 void_type_usage_test/param_for: CompileTimeError
 void_type_usage_test/param_for_in2: CompileTimeError
+void_type_usage_test/param_return_to_void: CompileTimeError
 void_type_usage_test/param_stmt: CompileTimeError
 void_type_usage_test/paren_as: CompileTimeError
 void_type_usage_test/paren_for: CompileTimeError
+void_type_usage_test/paren_return_to_void: CompileTimeError
 void_type_usage_test/paren_stmt: CompileTimeError
 void_type_usage_test/setter_assign: CompileTimeError
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 wrong_number_type_arguments_test/none: Pass
 
+[ $compiler == dartk && $system == windows && $strong ]
+ct_const2_test: Fail
+hello_dart_test: Fail
+recursive_mixin_test: Fail
+redirecting_factory_reflection_test: Fail
+
+[ $compiler == dartk && $system != windows && $strong ]
+hello_dart_test: Crash
+recursive_mixin_test: Crash
+redirecting_factory_reflection_test: Crash
+
+[ $compiler == dartk && $strong ]
+cha_deopt2_test: CompileTimeError, DartkCrash # KernelVM bug: Deferred loading kernel issue 28335.
+cha_deopt3_test: CompileTimeError, DartkCrash # KernelVM bug: Deferred loading kernel issue 28335.
+
 # 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.
@@ -798,7 +781,6 @@
 duplicate_implements_test/01: MissingCompileTimeError # Please triage.
 duplicate_implements_test/02: MissingCompileTimeError # Please triage.
 generic_methods_generic_function_result_test/01: MissingCompileTimeError # Please triage.
-issue23244_test: RuntimeError # Please triage.
 least_upper_bound_expansive_test/none: RuntimeError # Please triage.
 mixin_black_listed_test/02: MissingCompileTimeError # Please triage.
 null_test/02: MissingCompileTimeError # Please triage.
@@ -1009,7 +991,6 @@
 field_override_optimization_test: RuntimeError
 field_type_check2_test/01: MissingRuntimeError
 if_null_precedence_test/none: RuntimeError
-implicit_downcast_during_assignment_test: RuntimeError
 implicit_downcast_during_combiner_test: RuntimeError
 implicit_downcast_during_compound_assignment_test: RuntimeError
 implicit_downcast_during_conditional_expression_test: RuntimeError
@@ -1058,17 +1039,7 @@
 async_return_types_test/wrongReturnType: MissingCompileTimeError
 async_star_cancel_while_paused_test: RuntimeError
 async_star_pause_test: Fail, OK
-async_star_regression_2238_test: RuntimeError
-async_star_regression_23116_test: RuntimeError
-async_star_regression_fisk_test: RuntimeError
-async_star_test/01: CompileTimeError # Issue 2238.
-async_star_test/02: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/02: RuntimeError
-async_star_test/03: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/04: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/05: CompileTimeError # Issue 31402 (Invocation arguments)
-async_star_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
-await_test: CompileTimeError # Issue 31541
+async_star_test/02: RuntimeError, CompileTimeError # Issue 31402 (Invocation arguments)
 bad_named_parameters2_test/01: MissingCompileTimeError
 bad_named_parameters_test/01: MissingCompileTimeError
 bad_named_parameters_test/02: MissingCompileTimeError
@@ -1137,8 +1108,8 @@
 const_constructor2_test/22: MissingCompileTimeError
 const_constructor2_test/24: MissingCompileTimeError
 const_constructor_nonconst_field_test/01: MissingCompileTimeError # Fasta bug: Non-const expression in field initializer.
-const_dynamic_type_literal_test/02: MissingCompileTimeError
 const_dynamic_type_literal_test/02: RuntimeError # KernelVM bug: Constant map duplicated key.
+const_dynamic_type_literal_test/02: MissingCompileTimeError
 const_evaluation_test: SkipByDesign
 const_factory_with_body_test/01: MissingCompileTimeError # Fasta bug: Const factory with body.
 const_instance_field_test/01: MissingCompileTimeError # Fasta bug: Const instance field.
@@ -1162,7 +1133,6 @@
 constructor_redirect2_test/01: MissingCompileTimeError # Fasta bug: Body on redirecting constructor.
 constructor_redirect_test/01: MissingCompileTimeError # Fasta bug: Initializer refers to this.
 covariant_subtyping_test: CompileTimeError
-covariant_subtyping_test: Crash
 ct_const2_test: Skip # Incompatible flag: --compile_all
 ct_const_test: RuntimeError
 cyclic_constructor_test/01: MissingCompileTimeError # Fasta bug: Cyclic constructor redirection.
@@ -1209,8 +1179,7 @@
 deferred_not_loaded_check_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
 deferred_only_constant_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_optimized_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_redirecting_factory_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_redirecting_factory_test: Fail, Crash # Issue 23408
+deferred_redirecting_factory_test: CompileTimeError, Fail, Crash # Issue 23408, KernelVM bug: Deferred loading kernel issue 28335.
 deferred_regression_22995_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_regression_28678_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_shadow_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
@@ -1226,19 +1195,16 @@
 duplicate_implements_test/01: MissingCompileTimeError
 duplicate_implements_test/02: MissingCompileTimeError
 dynamic_prefix_core_test/none: CompileTimeError
-dynamic_test: CompileTimeError # Issue 31402 (Variable declaration)
+dynamic_test: RuntimeError # Issue 31402 (Variable declaration)
 emit_const_fields_test: CompileTimeError # Issue 31533
 enum_mirror_test: SkipByDesign
 example_constructor_test: Fail, OK
-export_ambiguous_main_negative_test: Fail # Issue 14763
-export_ambiguous_main_negative_test: Skip # Issue 29895
-export_double_same_main_test: Crash # Issue 29895
-export_double_same_main_test: Skip # Issue 29895
+export_ambiguous_main_negative_test: Skip # Issue 29895 Fail Issue 14763
+export_double_same_main_test: Skip # Issue 29895 Crash Issue 29895
 external_test/10: MissingRuntimeError # KernelVM bug: Unbound external.
 external_test/13: MissingRuntimeError # KernelVM bug: Unbound external.
 external_test/20: MissingRuntimeError # KernelVM bug: Unbound external.
 external_test/24: Pass, CompileTimeError # Started to pass after switching to batch-mode.
-extract_type_arguments_test: RuntimeError # Issue 31371
 f_bounded_quantification_test/01: MissingCompileTimeError
 f_bounded_quantification_test/02: MissingCompileTimeError
 factory2_test/03: MissingCompileTimeError
@@ -1265,8 +1231,6 @@
 function_subtype_bound_closure5_test: RuntimeError
 function_subtype_bound_closure5a_test: RuntimeError
 function_subtype_bound_closure6_test: RuntimeError
-function_subtype_bound_closure7_test: CompileTimeError # Issue 31402 (Variable declaration)
-function_subtype_bound_closure7_test: RuntimeError
 function_subtype_call1_test: RuntimeError
 function_subtype_call2_test: RuntimeError
 function_subtype_cast0_test: RuntimeError
@@ -1291,10 +1255,9 @@
 function_type_alias6_test/none: RuntimeError
 function_type_alias_test: RuntimeError
 generalized_void_syntax_test: CompileTimeError # Issue #30176
-generic_async_star_test: RuntimeError
 generic_closure_test: RuntimeError
 generic_function_bounds_test: CompileTimeError
-generic_function_dcall_test: CompileTimeError
+generic_function_dcall_test: RuntimeError
 generic_instanceof2_test: RuntimeError
 generic_is_check_test: RuntimeError
 generic_list_checked_test: CompileTimeError # Issue 31402 (Variable declaration)
@@ -1307,9 +1270,8 @@
 generic_methods_recursive_bound_test/03: MissingRuntimeError
 generic_methods_recursive_bound_test/03: Pass
 generic_methods_reuse_type_variables_test: Pass
-generic_methods_tearoff_specialization_test: CompileTimeError # Issue 31402 (Variable declaration)
 generic_methods_tearoff_specialization_test: RuntimeError
-generic_methods_unused_parameter_test: CompileTimeError # Issue 31402 (Variable declaration)
+generic_methods_unused_parameter_test: RuntimeError # Issue 31402 (Variable declaration)
 generic_no_such_method_dispatcher_simple_test: CompileTimeError # Issue 31533
 generic_no_such_method_dispatcher_test: CompileTimeError # Issue 31533
 generic_tearoff_test: CompileTimeError
@@ -1346,22 +1308,17 @@
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
 instance_creation_in_function_annotation_test: SkipByDesign
-instantiate_tearoff_after_contravariance_check_test: CompileTimeError
 instantiate_tearoff_of_call_test: CompileTimeError
-instantiate_tearoff_test: CompileTimeError
 invocation_mirror2_test: SkipByDesign
 invocation_mirror_invoke_on2_test: SkipByDesign
 invocation_mirror_invoke_on_test: SkipByDesign
 invocation_mirror_test: CompileTimeError # Issue 31402 (Invocation arguments)
-issue13179_test: CompileTimeError # Issue 31402 (Parameter default value)
 issue18628_2_test/01: MissingCompileTimeError
 issue21079_test: SkipByDesign
 issue_1751477_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 issue_25671a_test/01: CompileTimeError # Test assumes Dart 1.0 semantics
 issue_25671b_test/01: Crash
-language_2/least_upper_bound_expansive_test/none: CompileTimeError
 least_upper_bound_expansive_test/none: RuntimeError
-least_upper_bound_expansive_test/none: CompileTimeError
 library_env_test/has_html_support: RuntimeError # KernelVM bug: Configurable imports.
 library_env_test/has_mirror_support: RuntimeError, OK
 library_env_test/has_no_io_support: RuntimeError # KernelVM bug: Configurable imports.
@@ -1466,6 +1423,9 @@
 no_main_test/01: Skip
 no_such_method_mock_test: RuntimeError
 no_such_method_test: SkipByDesign
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/04: RuntimeError # Issue #31911
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError # Issue #31426
+nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError # Issue #31426
 null_no_such_method_test: CompileTimeError # Issue 31533
 null_test/02: MissingCompileTimeError
 null_test/03: MissingCompileTimeError
@@ -1551,6 +1511,7 @@
 regress_29784_test/01: MissingCompileTimeError
 regress_29784_test/02: MissingCompileTimeError
 regress_30339_test: CompileTimeError # Issue 31402 (Variable declaration)
+regress_30516_test: CompileTimeError # Issue 30470.
 setter4_test: MissingCompileTimeError # Issue 14736
 setter_no_getter_test/01: Pass, CompileTimeError # Issue 31533 (started passing after switching to batch-mode)
 setter_override_test/01: MissingCompileTimeError
@@ -1585,6 +1546,7 @@
 syntax_test/31: MissingCompileTimeError
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
+syntax_test/59: Pass # Issue 30470.
 type_literal_test: RuntimeError
 type_promotion_functions_test/02: CompileTimeError # Issue 31537
 type_promotion_functions_test/03: CompileTimeError # Issue 31537
@@ -1654,39 +1616,48 @@
 void_type_override_test/none: CompileTimeError
 void_type_usage_test/call_as: CompileTimeError
 void_type_usage_test/call_for: CompileTimeError
+void_type_usage_test/call_return_to_void: CompileTimeError
 void_type_usage_test/call_stmt: CompileTimeError
 void_type_usage_test/field_assign: CompileTimeError
 void_type_usage_test/field_assign2: CompileTimeError
 void_type_usage_test/final_local_as: CompileTimeError
 void_type_usage_test/final_local_for: CompileTimeError
+void_type_usage_test/final_local_return_to_void: CompileTimeError
 void_type_usage_test/final_local_stmt: CompileTimeError
 void_type_usage_test/global_as: CompileTimeError
 void_type_usage_test/global_for: CompileTimeError
 void_type_usage_test/global_for_in2: CompileTimeError
+void_type_usage_test/global_return_to_void: CompileTimeError
 void_type_usage_test/global_stmt: CompileTimeError
 void_type_usage_test/instance2_as: CompileTimeError
 void_type_usage_test/instance2_for: CompileTimeError
 void_type_usage_test/instance2_for_in3: CompileTimeError
+void_type_usage_test/instance2_return_to_void: CompileTimeError
 void_type_usage_test/instance2_stmt: CompileTimeError
 void_type_usage_test/instance3_as: CompileTimeError
 void_type_usage_test/instance3_for: CompileTimeError
 void_type_usage_test/instance3_for_in3: CompileTimeError
+void_type_usage_test/instance3_return_to_void: CompileTimeError
 void_type_usage_test/instance3_stmt: CompileTimeError
 void_type_usage_test/instance_as: CompileTimeError
 void_type_usage_test/instance_for: CompileTimeError
+void_type_usage_test/instance_return_to_void: CompileTimeError
 void_type_usage_test/instance_stmt: CompileTimeError
 void_type_usage_test/local_as: CompileTimeError
 void_type_usage_test/local_assign: CompileTimeError
 void_type_usage_test/local_for: CompileTimeError
 void_type_usage_test/local_for_in2: CompileTimeError
+void_type_usage_test/local_return_to_void: CompileTimeError
 void_type_usage_test/local_stmt: CompileTimeError
 void_type_usage_test/none: CompileTimeError
 void_type_usage_test/param_as: CompileTimeError
 void_type_usage_test/param_for: CompileTimeError
 void_type_usage_test/param_for_in2: CompileTimeError
+void_type_usage_test/param_return_to_void: CompileTimeError
 void_type_usage_test/param_stmt: CompileTimeError
 void_type_usage_test/paren_as: CompileTimeError
 void_type_usage_test/paren_for: CompileTimeError
+void_type_usage_test/paren_return_to_void: CompileTimeError
 void_type_usage_test/paren_stmt: CompileTimeError
 void_type_usage_test/setter_assign: CompileTimeError
 wrong_number_type_arguments_test/01: MissingCompileTimeError
diff --git a/tests/language_2/language_2_precompiled.status b/tests/language_2/language_2_precompiled.status
index 5a95759..6bedfa3 100644
--- a/tests/language_2/language_2_precompiled.status
+++ b/tests/language_2/language_2_precompiled.status
@@ -282,7 +282,6 @@
 export_ambiguous_main_negative_test: Skip # Issue 29895
 export_ambiguous_main_test: Crash
 export_double_same_main_test: Skip # Issue 29895
-extract_type_arguments_test: RuntimeError # Issue 31371
 f_bounded_quantification_test/01: MissingCompileTimeError
 f_bounded_quantification_test/02: MissingCompileTimeError
 factory1_test/00: MissingCompileTimeError
@@ -878,6 +877,7 @@
 switch_fallthru_test/01: MissingCompileTimeError
 symbol_literal_test/01: MissingCompileTimeError
 sync_generator1_test/01: MissingCompileTimeError
+syntax_test/59: MissingCompileTimeError,OK # Issue 30516.
 top_level_getter_no_setter1_test: MissingCompileTimeError
 top_level_getter_no_setter2_test: MissingCompileTimeError
 transitive_private_library_access_test: MissingCompileTimeError
diff --git a/tests/language_2/language_2_vm.status b/tests/language_2/language_2_vm.status
index f967113..54520a6 100644
--- a/tests/language_2/language_2_vm.status
+++ b/tests/language_2/language_2_vm.status
@@ -310,7 +310,6 @@
 enum_private_test/02: MissingCompileTimeError
 error_stacktrace_test/00: MissingCompileTimeError
 export_ambiguous_main_test: MissingCompileTimeError
-extract_type_arguments_test: RuntimeError # Issue 31371
 f_bounded_quantification_test/01: MissingCompileTimeError
 f_bounded_quantification_test/02: MissingCompileTimeError
 factory1_test/00: MissingCompileTimeError
@@ -834,6 +833,7 @@
 switch_fallthru_test/01: MissingCompileTimeError
 symbol_literal_test/01: MissingCompileTimeError
 sync_generator1_test/01: MissingCompileTimeError
+syntax_test/59: MissingCompileTimeError,OK # Issue 30516.
 top_level_getter_no_setter1_test: MissingCompileTimeError
 top_level_getter_no_setter2_test: MissingCompileTimeError
 transitive_private_library_access_test: MissingCompileTimeError
diff --git a/tests/language_2/no_such_method_tearoff_fta_test.dart b/tests/language_2/no_such_method_tearoff_fta_test.dart
new file mode 100644
index 0000000..163dc7e
--- /dev/null
+++ b/tests/language_2/no_such_method_tearoff_fta_test.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+void foo() {}
+
+main() {
+  final dynamic tearoff = foo;
+
+  Expect.throwsNoSuchMethodError(() {
+    tearoff<String>(3);
+  }, 'Providing type arguments to a non-generic tearoff should throw go NSM.');
+}
diff --git a/tests/language_2/nosuchmethod_forwarding/README.md b/tests/language_2/nosuchmethod_forwarding/README.md
index 15cf2d2..bc759e3 100644
--- a/tests/language_2/nosuchmethod_forwarding/README.md
+++ b/tests/language_2/nosuchmethod_forwarding/README.md
@@ -5,4 +5,4 @@
 implicitly for all method signatures in the interface of a class that
 declares a non-trivial `noSuchMethod`. For more details, please check
 the
-[feature specification](https://github.com/dart-lang/sdk/blob/master/docs/language/informal/nosuchmethod-forwarding.md).
\ No newline at end of file
+[feature specification](https://github.com/dart-lang/sdk/blob/master/docs/language/informal/nosuchmethod-forwarding.md).
diff --git a/tests/language_2/nosuchmethod_forwarding/nosuchmethod_forwarding_test.dart b/tests/language_2/nosuchmethod_forwarding/nosuchmethod_forwarding_test.dart
new file mode 100644
index 0000000..d54a784
--- /dev/null
+++ b/tests/language_2/nosuchmethod_forwarding/nosuchmethod_forwarding_test.dart
@@ -0,0 +1,54 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Testing that `noSuchMethod` appears to use implicit forwarders (we don't
+// care how it's actually implemented, but it should look like that).
+
+import 'package:expect/expect.dart';
+
+// "Template" class: Something to emulate.
+class A {
+  int foo(String s) => s.length;
+}
+
+// Emulate `A`, but only dynamically.
+class B {
+  noSuchMethod(_) => 31;
+}
+
+// Emulate `A`, including its type.
+class C implements A {
+  noSuchMethod(_) => 41;
+}
+
+// Emulate `A` with its type, based on an inherited `noSuchMethod`.
+class D extends B implements A {}
+
+void test(A a, int expectedValue) {
+  // Regular superinterfaces can be supported by `noSuchMethod`.
+  Expect.equals(expectedValue, a.foo('Hello!')); //# 04: ok
+
+  // `noSuchMethod` triggers generation of forwarders, so a statically
+  // known instance method tear-off yields a `Function`, also when invoked
+  // dynamically.
+  Expect.isTrue(a.foo is Function); //# 05: ok
+  Expect.isTrue((a as dynamic).foo is Function); //# 06: ok
+
+  // For an unknown member name the invocation must be dynamic, and in that
+  // case it does not match a forwarder, but we invoke `noSuchMethod`.
+  Expect.equals(expectedValue, (a as dynamic).bar); //# 07: ok
+}
+
+main() {
+  // Dynamic invocations can make a `B` seem to implement `A`.
+  Expect.equals(31, (new B() as dynamic).foo('Hello!')); //# 01: ok
+
+  // But `noSuchMethod` does not affect the type or interface of a class.
+  A a; //# 02: continued
+  Expect.throws(() => a = new B() as dynamic); //# 02: ok
+  new B().foo('Hello!'); //# 03: compile-time error
+
+  test(new C(), 41);
+  test(new D(), 31);
+}
diff --git a/tests/language_2/regress_30516_test.dart b/tests/language_2/regress_30516_test.dart
new file mode 100644
index 0000000..d62e4d6
--- /dev/null
+++ b/tests/language_2/regress_30516_test.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef void RecognizerCallback<T>();
+typedef void GestureTapCancelCallback();
+GestureTapCancelCallback onTapCancel;
+T invokeCallback<T>(String name, RecognizerCallback<T> callback,
+    {String debugReport()}) {}
+main() {
+  invokeCallback<void>('spontaneous onTapCancel', onTapCancel);
+}
diff --git a/tests/language_2/void_type_usage_test.dart b/tests/language_2/void_type_usage_test.dart
index 0b91393..64a040b 100644
--- a/tests/language_2/void_type_usage_test.dart
+++ b/tests/language_2/void_type_usage_test.dart
@@ -6,7 +6,7 @@
 
 void use(dynamic x) { }
 
-void testVoidParam(void x) {
+testVoidParam(void x) {
   x;  //# param_stmt: ok
   true ? x : x;  //# param_conditional: compile-time error
   for (x; false; x) {}   //# param_for: ok
@@ -34,7 +34,7 @@
   x..toString();  //# param_cascade: compile-time error
 }
 
-void testVoidCall(void f()) {
+testVoidCall(void f()) {
   f();  //# call_stmt: ok
   true ? f() : f();  //# call_conditional: compile-time error
   for (f(); false; f()) {}   //# call_for: ok
@@ -60,7 +60,7 @@
   f()..toString();  //# call_cascade: compile-time error
 }
 
-void testVoidLocal() {
+testVoidLocal() {
   void x;
   x = 42;   //# local_assign: ok
   x;  //# local_stmt: ok
@@ -90,7 +90,7 @@
   x..toString();  //# local_cascade: compile-time error
 }
 
-void testVoidFinalLocal() {
+testVoidFinalLocal() {
   final void x = null;
   x = 42;   //# final_local_assign: compile-time error
   x;  //# final_local_stmt: ok
@@ -121,7 +121,7 @@
 }
 
 void global;
-void testVoidGlobal() {
+testVoidGlobal() {
   global;  //# global_stmt: ok
   true ? global : global;  //# global_conditional: compile-time error
   for (global; false; global) {}   //# global_for: ok
@@ -149,7 +149,7 @@
   global..toString();  //# global_cascade: compile-time error
 }
 
-void testVoidConditional() {
+testVoidConditional() {
   void x;
   (true ? x : x);   //# conditional_parens: compile-time error
   true ? x : x;  //# conditional_stmt: compile-time error
@@ -203,7 +203,6 @@
   for (var v in true ? x : 499) {}   //# conditional_for_in: compile-time error
 }
 
-
 class A<T> {
   T x;
 
@@ -231,8 +230,7 @@
   }
 }
 
-
-void testInstanceField() {
+testInstanceField() {
   A<void> a = new A<void>();
   a.x = 499;  //# field_assign: ok
   a.x;  //# instance_stmt: ok
@@ -317,7 +315,7 @@
   c.x..toString();  //# instance3_cascade: compile-time error
 }
 
-void testParenthesized() {
+testParenthesized() {
   void x;
   (x);  //# paren_stmt: ok
   true ? (x) : (x);  //# paren_conditional: compile-time error
@@ -344,6 +342,26 @@
   (x)..toString();  //# paren_cascade: compile-time error
 }
 
+void testReturnToVoid(void x, void f()) {
+  void y;
+  final void z;
+  A<void> a = new A<void>();
+  B b = new B();
+  C c = new C();
+  return x;   //# param_return_to_void: ok
+  return f();   //# call_return_to_void: ok
+  return y;   //# local_return_to_void: ok
+  return z;   //# final_local_return_to_void: ok
+  return global;   //# global_return_to_void: ok
+  return true ? x : x;   //# conditional_return_to_void: compile-time error
+  return true ? 499 : x;   //# conditional2_return_to_void: compile-time error
+  return true ? x : 499;   //# conditional3_return_to_void: compile-time error
+  return a.x;   //# instance_return_to_void: ok
+  return b.x;   //# instance2_return_to_void: ok
+  return c.x;   //# instance3_return_to_void: ok
+  return (x);   //# paren_return_to_void: ok
+}
+
 main() {
   try {
     testVoidParam(499);
@@ -353,8 +371,9 @@
     testVoidConditional();
     testInstanceField();
     testParenthesized();
+    testReturnToVoid(499, () {});
   } catch (e) {
     // Silently eat all dynamic errors.
-    // This test is only testing static warnings.
+    // This test is only testing static analysis.
   }
-}
\ No newline at end of file
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 627c0be..bf9e495 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -27,12 +27,9 @@
 [ $compiler == dart2js ]
 async/schedule_microtask6_test: RuntimeError # global error handling is not supported. Issue 5958
 convert/base64_test/01: Fail, OK # Uses bit-wise operations to detect invalid values. Some large invalid values accepted by dart2js.
-convert/base64_test/01: Crash # Issue 31762
 convert/chunked_conversion_utf88_test: Slow, Pass
-convert/utf82_test: Crash # Issue 31762
 convert/utf85_test: Slow, Pass
 developer/timeline_test: Skip # Not supported
-math/double_pow_test: Crash # Issue 31762
 math/double_pow_test: RuntimeError
 math/low_test: RuntimeError
 mirrors/class_declarations_test/none: RuntimeError # Issue 13440
@@ -124,7 +121,6 @@
 mirrors/typevariable_mirror_metadata_test: RuntimeError # Issue 10905
 mirrors/variable_is_const_test/none: RuntimeError # Issue 14671
 profiler/metrics_num_test: Skip # Because of a int / double type test.
-typed_data/int32x4_bigint_test: Crash # Issue 31762
 typed_data/int32x4_bigint_test: RuntimeError # Issue 1533
 typed_data/int64_list_load_store_test: RuntimeError # Issue 10275
 typed_data/typed_data_hierarchy_int64_test: RuntimeError # Issue 10275
@@ -153,6 +149,11 @@
 async/stream_event_transformed_test: Skip # Flutter Issue 9113
 mirrors/*: Skip # Flutter does not support mirrors.
 
+[ $runtime == safari ]
+convert/json_test: Fail # https://bugs.webkit.org/show_bug.cgi?id=134920
+typed_data/float32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
+typed_data/int32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
+
 [ $runtime == vm ]
 convert/streamed_conversion_json_utf8_decode_test: Pass, Slow # Infrequent timeouts.
 
@@ -184,6 +185,11 @@
 convert/streamed_conversion_json_utf8_decode_test: Skip # Timeout.
 mirrors/immutable_collections_test: SkipSlow # Timeout.
 
+[ $builder_tag == mac10_7 && $runtime == safari ]
+typed_data/setRange_2_test: Fail # Safari doesn't fully implement spec for TypedArray.set
+typed_data/setRange_3_test: Fail # Safari doesn't fully implement spec for TypedArray.set
+typed_data/setRange_4_test: Fail # Safari doesn't fully implement spec for TypedArray.set
+
 [ $builder_tag == strong && $compiler == dart2analyzer ]
 *: Skip # Issue 28649
 
@@ -238,10 +244,6 @@
 async/zone_empty_description2_test: RuntimeError # Timer interface not supported: Issue 7728.
 mirrors/mirrors_reader_test: Skip # Running in v8 suffices. Issue 16589 - RuntimeError.  Issue 22130 - Crash (out of memory).
 
-[ $compiler == dart2js && $runtime == safarimobilesim ]
-mirrors/mirrors_reader_test: SkipSlow # Times out. Issue 20806.
-mirrors/null_test: Fail # Issue 16831
-
 [ $compiler == dart2js && $checked ]
 convert/utf85_test: Pass, Slow # Issue 12029.
 
@@ -280,20 +282,34 @@
 math/math2_test: RuntimeError
 math/math_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
-# batch mode.
 [ $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/invoke_throws_test: Fail
+mirrors/list_constructor_test/01: Fail
+mirrors/list_constructor_test/none: Fail
+mirrors/mirrors_test: Fail
+mirrors/redirecting_factory_test/01: Fail
+mirrors/redirecting_factory_test/02: Fail
+mirrors/redirecting_factory_test/none: Fail
+
+[ $compiler == dartk && $system != windows ]
+mirrors/invoke_throws_test: Crash
+mirrors/list_constructor_test/01: Crash
+mirrors/list_constructor_test/none: Crash
+mirrors/mirrors_test: Crash
+mirrors/redirecting_factory_test/01: Crash
+mirrors/redirecting_factory_test/02: Crash
+mirrors/redirecting_factory_test/none: 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
 # 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.
-mirrors/spawn_function_root_library_test: Skip
 
 [ $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
@@ -394,7 +410,6 @@
 mirrors/invocation_fuzz_test/string: Crash
 mirrors/invoke_private_test: RuntimeError
 mirrors/invoke_private_wrong_library_test: RuntimeError
-mirrors/invoke_throws_test: Crash
 mirrors/library_declarations_test/none: RuntimeError
 mirrors/library_enumeration_deferred_loading_test: CompileTimeError # Deferred loading kernel issue 28335.
 mirrors/library_exports_hidden_test: RuntimeError
@@ -407,8 +422,6 @@
 mirrors/library_imports_prefixed_test: RuntimeError
 mirrors/library_imports_shown_test: RuntimeError
 mirrors/library_metadata_test: RuntimeError
-mirrors/list_constructor_test/01: Crash
-mirrors/list_constructor_test/none: Crash
 mirrors/load_library_test: RuntimeError
 mirrors/metadata_allowed_values_test/13: MissingCompileTimeError
 mirrors/metadata_allowed_values_test/14: MissingCompileTimeError
@@ -421,7 +434,6 @@
 mirrors/mirrors_nsm_mismatch_test: RuntimeError
 mirrors/mirrors_nsm_test/dart2js: RuntimeError
 mirrors/mirrors_reader_test: Crash
-mirrors/mirrors_test: Crash
 mirrors/mirrors_used_inheritance_test: RuntimeError
 mirrors/mirrors_used_typedef_declaration_test/01: RuntimeError
 mirrors/mirrors_used_typedef_declaration_test/none: RuntimeError
@@ -434,9 +446,6 @@
 mirrors/private_class_field_test: RuntimeError
 mirrors/private_symbol_test: RuntimeError
 mirrors/private_types_test: RuntimeError
-mirrors/redirecting_factory_test/01: Crash
-mirrors/redirecting_factory_test/02: Crash
-mirrors/redirecting_factory_test/none: Crash
 mirrors/reflect_class_test/01: RuntimeError
 mirrors/reflect_class_test/02: RuntimeError
 mirrors/reflect_class_test/none: RuntimeError
@@ -475,27 +484,15 @@
 
 [ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
 async/timer_not_available_test: Fail, OK
+convert/base64_test/01: CompileTimeError # Large integer literal
 convert/json_utf8_chunk_test: RuntimeError # Large integers
+convert/utf82_test: CompileTimeError # Large integer literal
 js/*: Skip
+math/double_pow_test: CompileTimeError # Large integer literal
 mirrors/deferred_type_test: CompileTimeError, OK # Don't have a multitest marker for dynamic compile time errors.
 mirrors/native_class_test: Fail, OK # This test is meant to run in a browser.
-
-[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm || ($compiler == dart2js && $dart2js_with_kernel) ]
-convert/base64_test/01: CompileTimeError # Large integer literal
-convert/utf82_test: CompileTimeError # Large integer literal
-math/double_pow_test: CompileTimeError # Large integer literal
 typed_data/int32x4_bigint_test: CompileTimeError # Large integer literal
 
-[ $runtime == safari || $runtime == safarimobilesim ]
-convert/json_test: Fail # https://bugs.webkit.org/show_bug.cgi?id=134920
-typed_data/float32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
-typed_data/int32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
-
-[ $runtime == safarimobilesim || $builder_tag == mac10_7 && $runtime == safari ]
-typed_data/setRange_2_test: Fail # Safari doesn't fully implement spec for TypedArray.set
-typed_data/setRange_3_test: Fail # Safari doesn't fully implement spec for TypedArray.set
-typed_data/setRange_4_test: Fail # Safari doesn't fully implement spec for TypedArray.set
-
 [ $hot_reload || $hot_reload_rollback ]
 async/stream_transformer_test: Pass, Fail # Closure identity
 mirrors/fake_function_with_call_test: SkipByDesign # Method equality
diff --git a/tests/lib_2/async/slow_consumer2_test.dart b/tests/lib_2/async/slow_consumer2_test.dart
index 460c920..6b1ab56 100644
--- a/tests/lib_2/async/slow_consumer2_test.dart
+++ b/tests/lib_2/async/slow_consumer2_test.dart
@@ -31,7 +31,8 @@
   Future addStream(Stream stream) {
     Completer result = new Completer();
     var subscription;
-    subscription = stream.listen((List<int> data) {
+    subscription = stream.listen((Object _data) {
+      List<int> data = _data;
       receivedCount += data.length;
       usedBufferSize += data.length;
       bufferedData.add(data);
diff --git a/tests/lib_2/async/slow_consumer3_test.dart b/tests/lib_2/async/slow_consumer3_test.dart
index c005198..17de0e0 100644
--- a/tests/lib_2/async/slow_consumer3_test.dart
+++ b/tests/lib_2/async/slow_consumer3_test.dart
@@ -31,7 +31,8 @@
   Future addStream(Stream stream) {
     Completer result = new Completer();
     var subscription;
-    subscription = stream.listen((List<int> data) {
+    subscription = stream.listen((Object _data) {
+      List<int> data = _data;
       receivedCount += data.length;
       usedBufferSize += data.length;
       bufferedData.add(data);
diff --git a/tests/lib_2/async/slow_consumer_test.dart b/tests/lib_2/async/slow_consumer_test.dart
index 9cd3b94..9a3c92e 100644
--- a/tests/lib_2/async/slow_consumer_test.dart
+++ b/tests/lib_2/async/slow_consumer_test.dart
@@ -29,7 +29,8 @@
     bool done = false;
     Completer completer = new Completer();
     var subscription;
-    subscription = stream.listen((List<int> data) {
+    subscription = stream.listen((Object _data) {
+      List data = _data;
       current = current.then((count) {
         // Simulated amount of time it takes to handle the data.
         int ms = data.length * 1000 ~/ bytesPerSecond;
diff --git a/tests/lib_2/async/stream_from_iterable_test.dart b/tests/lib_2/async/stream_from_iterable_test.dart
index b58d9df..9367cc7 100644
--- a/tests/lib_2/async/stream_from_iterable_test.dart
+++ b/tests/lib_2/async/stream_from_iterable_test.dart
@@ -59,7 +59,7 @@
   });
 
   test("iterable-paused", () {
-    Stream stream = new Stream.fromIterable(iter);
+    var stream = new Stream<int>.fromIterable(iter);
     Events actual = new Events();
     StreamSubscription subscription;
     subscription = stream.listen((int value) {
diff --git a/tests/lib_2/convert/json_toEncodable_reviver_test.dart b/tests/lib_2/convert/json_toEncodable_reviver_test.dart
index 5ef66ec..f5f8313 100644
--- a/tests/lib_2/convert/json_toEncodable_reviver_test.dart
+++ b/tests/lib_2/convert/json_toEncodable_reviver_test.dart
@@ -12,7 +12,7 @@
   A(this.x);
 }
 
-toEncodable(A a) => {"A": a.x};
+toEncodable(Object a) => {"A": (a as A).x};
 reviver(key, value) {
   if (value is Map && value.length == 1 && value["A"] != null) {
     return new A(value["A"]);
diff --git a/tests/lib_2/convert/streamed_conversion_json_utf8_encode_test.dart b/tests/lib_2/convert/streamed_conversion_json_utf8_encode_test.dart
index 71f7ca9..c4f1a44 100644
--- a/tests/lib_2/convert/streamed_conversion_json_utf8_encode_test.dart
+++ b/tests/lib_2/convert/streamed_conversion_json_utf8_encode_test.dart
@@ -19,7 +19,7 @@
   return controller.stream.transform(jsonUtf8.encoder);
 }
 
-void testUnpaused(List<int> expected, Stream stream) {
+void testUnpaused(List<int> expected, Stream<List<int>> stream) {
   asyncStart();
   stream.toList().then((list) {
     var combined = <int>[];
@@ -29,7 +29,7 @@
   });
 }
 
-void testWithPauses(List<int> expected, Stream stream) {
+void testWithPauses(List<int> expected, Stream<List<int>> stream) {
   asyncStart();
   var accumulated = <int>[];
   var sub;
diff --git a/tests/lib_2/convert/streamed_conversion_utf8_encode_test.dart b/tests/lib_2/convert/streamed_conversion_utf8_encode_test.dart
index 64ee6c2..3daba03 100644
--- a/tests/lib_2/convert/streamed_conversion_utf8_encode_test.dart
+++ b/tests/lib_2/convert/streamed_conversion_utf8_encode_test.dart
@@ -25,7 +25,7 @@
   return controller.stream.transform(utf8.encoder);
 }
 
-void testUnpaused(List<int> expected, Stream stream) {
+void testUnpaused(List<int> expected, Stream<List<int>> stream) {
   asyncStart();
   stream.toList().then((list) {
     var combined = [];
@@ -36,7 +36,7 @@
   });
 }
 
-void testWithPauses(List<int> expected, Stream stream) {
+void testWithPauses(List<int> expected, Stream<List<int>> stream) {
   asyncStart();
   var combined = <int>[];
   var sub;
diff --git a/tests/lib_2/isolate/browser/typed_data_message_test.dart b/tests/lib_2/isolate/browser/typed_data_message_test.dart
index b000d4d..3070fc0 100644
--- a/tests/lib_2/isolate/browser/typed_data_message_test.dart
+++ b/tests/lib_2/isolate/browser/typed_data_message_test.dart
@@ -95,7 +95,8 @@
   test("send objects and receive them back", () {
     ReceivePort response = new ReceivePort();
     Isolate.spawn(pingPong, response.sendPort);
-    response.first.then((SendPort remote) {
+    response.first.then((_remote) {
+      SendPort remote = _remote;
       // Send objects and receive them back.
       for (int i = 0; i < elements.length; i++) {
         var sentObject = elements[i];
diff --git a/tests/lib_2/isolate/count_test.dart b/tests/lib_2/isolate/count_test.dart
index e4f88e9..740631c 100644
--- a/tests/lib_2/isolate/count_test.dart
+++ b/tests/lib_2/isolate/count_test.dart
@@ -12,7 +12,8 @@
   int count = 0;
   var port = new ReceivePort();
   replyTo.send(["init", port.sendPort]);
-  port.listen((int message) {
+  port.listen((_message) {
+    int message = _message;
     if (message == -1) {
       expect(count, 10);
       replyTo.send(["done"]);
diff --git a/tests/lib_2/isolate/handle_error2_test.dart b/tests/lib_2/isolate/handle_error2_test.dart
index 508690b..452b46a 100644
--- a/tests/lib_2/isolate/handle_error2_test.dart
+++ b/tests/lib_2/isolate/handle_error2_test.dart
@@ -33,7 +33,7 @@
 /// Returns a list of `[isolate, commandPort]` in a future.
 Future spawn(entry) {
   ReceivePort reply = new ReceivePort();
-  Future isolate = Isolate.spawn(entry, reply.sendPort, paused: true);
+  var isolate = Isolate.spawn(entry, reply.sendPort, paused: true);
   return isolate.then((Isolate isolate) {
     isolate.setErrorsFatal(false);
     isolate.resume(isolate.pauseCapability);
diff --git a/tests/lib_2/isolate/handle_error3_test.dart b/tests/lib_2/isolate/handle_error3_test.dart
index eeac985..e725822 100644
--- a/tests/lib_2/isolate/handle_error3_test.dart
+++ b/tests/lib_2/isolate/handle_error3_test.dart
@@ -33,7 +33,7 @@
 /// Returns a list of `[isolate, commandPort]` in a future.
 Future spawn(entry) {
   ReceivePort reply = new ReceivePort();
-  Future isolate = Isolate.spawn(entry, reply.sendPort, paused: true);
+  var isolate = Isolate.spawn(entry, reply.sendPort, paused: true);
   return isolate.then((Isolate isolate) {
     isolate.setErrorsFatal(false);
     isolate.resume(isolate.pauseCapability);
diff --git a/tests/lib_2/isolate/illegal_msg_function_test.dart b/tests/lib_2/isolate/illegal_msg_function_test.dart
index adda26e..89baaf2 100644
--- a/tests/lib_2/isolate/illegal_msg_function_test.dart
+++ b/tests/lib_2/isolate/illegal_msg_function_test.dart
@@ -25,7 +25,8 @@
   // Ignore returned Future.
   Isolate.spawn(echo, port.sendPort);
 
-  port.first.then((SendPort snd) {
+  port.first.then((_snd) {
+    SendPort snd = _snd;
     int function(x) => x + 2;
     try {
       snd.send(function);
diff --git a/tests/lib_2/isolate/illegal_msg_mirror_test.dart b/tests/lib_2/isolate/illegal_msg_mirror_test.dart
index a86b5dc..af5773b 100644
--- a/tests/lib_2/isolate/illegal_msg_mirror_test.dart
+++ b/tests/lib_2/isolate/illegal_msg_mirror_test.dart
@@ -31,7 +31,8 @@
   // Ignore returned Future.
   Isolate.spawn(echo, port.sendPort);
 
-  port.first.then((SendPort snd) {
+  port.first.then((_snd) {
+    SendPort snd = _snd;
     final methodMirror = reflectClass(Class).declarations[#method];
     try {
       snd.send(methodMirror);
diff --git a/tests/lib_2/isolate/isolate_current_test.dart b/tests/lib_2/isolate/isolate_current_test.dart
index e2e2d99..bdd62ea 100644
--- a/tests/lib_2/isolate/isolate_current_test.dart
+++ b/tests/lib_2/isolate/isolate_current_test.dart
@@ -59,8 +59,8 @@
   };
 
   Isolate.spawn(replyCurrent, [p.sendPort, asList]).then((Isolate isolate) {
-    return response.future.then((Isolate isolate2) {
-      expectIsolateEquals(isolate, isolate2);
+    return response.future.then((isolate2) {
+      expectIsolateEquals(isolate, isolate2 as Isolate);
       asyncEnd();
     });
   });
@@ -98,8 +98,8 @@
   };
 
   Isolate.spawn(expectCurrent, [p.sendPort, asList]).then((Isolate isolate) {
-    return response.future.then((SendPort port) {
-      port.send(transform(isolate));
+    return response.future.then((port) {
+      (port as SendPort).send(transform(isolate));
     });
   });
 }
diff --git a/tests/lib_2/isolate/kill_test.dart b/tests/lib_2/isolate/kill_test.dart
index 2bf89cd..62a4dd1 100644
--- a/tests/lib_2/isolate/kill_test.dart
+++ b/tests/lib_2/isolate/kill_test.dart
@@ -21,7 +21,8 @@
   var completer = new Completer(); // Completed by first reply from isolate.
   RawReceivePort reply = new RawReceivePort(completer.complete);
   Isolate.spawn(isomain1, reply.sendPort).then((Isolate isolate) {
-    completer.future.then((SendPort echoPort) {
+    completer.future.then((_echoPort) {
+      SendPort echoPort = _echoPort;
       List result = [];
       reply.handler = (v) {
         result.add(v);
diff --git a/tests/lib_2/isolate/mandel_isolate_test.dart b/tests/lib_2/isolate/mandel_isolate_test.dart
index 16db3c0..ee21f1e 100644
--- a/tests/lib_2/isolate/mandel_isolate_test.dart
+++ b/tests/lib_2/isolate/mandel_isolate_test.dart
@@ -107,8 +107,8 @@
   void processLine(int y) {
     ReceivePort reply = new ReceivePort();
     _port.send([y, reply.sendPort]);
-    reply.first.then((List<int> message) {
-      _state.notifyProcessedLine(this, y, message);
+    reply.first.then((message) {
+      _state.notifyProcessedLine(this, y, message as List<int>);
     });
   }
 
diff --git a/tests/lib_2/isolate/message3_test.dart b/tests/lib_2/isolate/message3_test.dart
index 95fc7a4..be4d5e2 100644
--- a/tests/lib_2/isolate/message3_test.dart
+++ b/tests/lib_2/isolate/message3_test.dart
@@ -256,8 +256,8 @@
     x[0] = 22;
     Expect.equals(22, x[0]);
     // Must be extendable.
-    x["gee"] = 499;
-    Expect.equals(499, x["gee"]);
+    x[123] = 499;
+    Expect.equals(499, x[123]);
   });
 
   Map cyclicMap = {};
@@ -457,7 +457,8 @@
   Isolate
       .spawn(echoMain, [initialReplyPort.sendPort, testPort.sendPort])
       .then((_) => initialReplyPort.first)
-      .then((SendPort ping) {
+      .then((_ping) {
+        SendPort ping = _ping;
         runTests(ping, checks);
         Expect.isTrue(checks.length > 0);
         completer.future.then((_) => ping.send("halt")).then((_) => asyncEnd());
diff --git a/tests/lib_2/isolate/mint_maker_test.dart b/tests/lib_2/isolate/mint_maker_test.dart
index b5d350b..e9f5f5b 100644
--- a/tests/lib_2/isolate/mint_maker_test.dart
+++ b/tests/lib_2/isolate/mint_maker_test.dart
@@ -44,8 +44,8 @@
 
   void createPurse(int balance, handlePurse(PurseWrapper purse)) {
     ReceivePort reply = new ReceivePort();
-    reply.first.then((SendPort purse) {
-      handlePurse(new PurseWrapper(purse));
+    reply.first.then((purse) {
+      handlePurse(new PurseWrapper(purse as SendPort));
     });
     _mint.send([balance, reply.sendPort]);
   }
@@ -103,10 +103,10 @@
 
   PurseWrapper(this._purse) {}
 
-  void _sendReceive(message, replyHandler(reply)) {
+  void _sendReceive<T>(String message, replyHandler(T reply)) {
     ReceivePort reply = new ReceivePort();
     _purse.send([message, reply.sendPort]);
-    reply.first.then(replyHandler);
+    reply.first.then((a) => replyHandler(a as T));
   }
 
   void queryBalance(handleBalance(int balance)) {
@@ -127,9 +127,9 @@
 mintMakerWrapper(SendPort replyPort) {
   ReceivePort receiver = new ReceivePort();
   replyPort.send(receiver.sendPort);
-  receiver.listen((SendPort replyTo) {
+  receiver.listen((replyTo) {
     Mint mint = new Mint();
-    replyTo.send(mint.port);
+    (replyTo as SendPort).send(mint.port);
   });
 }
 
@@ -147,8 +147,8 @@
 
   void makeMint(handleMint(MintWrapper mint)) {
     ReceivePort reply = new ReceivePort();
-    reply.first.then((SendPort mint) {
-      handleMint(new MintWrapper(mint));
+    reply.first.then((mint) {
+      handleMint(new MintWrapper(mint as SendPort));
     });
     _port.send(reply.sendPort);
   }
diff --git a/tests/lib_2/isolate/typed_message_test.dart b/tests/lib_2/isolate/typed_message_test.dart
index 6c6d52e..4bb2770 100644
--- a/tests/lib_2/isolate/typed_message_test.dart
+++ b/tests/lib_2/isolate/typed_message_test.dart
@@ -16,7 +16,8 @@
   print("Starting log server.");
   ReceivePort port = new ReceivePort();
   replyTo.send(port.sendPort);
-  port.first.then((List<int> message) {
+  port.first.then((_message) {
+    List<int> message = _message;
     print("Log $message");
     Expect.equals(5, message.length);
     Expect.equals(0, message[0]);
diff --git a/tests/lib_2/isolate/unresolved_ports_test.dart b/tests/lib_2/isolate/unresolved_ports_test.dart
index b6ca58d..4634cd0 100644
--- a/tests/lib_2/isolate/unresolved_ports_test.dart
+++ b/tests/lib_2/isolate/unresolved_ports_test.dart
@@ -41,7 +41,7 @@
       .then((msg) => msg[1].send('${msg[0]}\nBob says: we are all coming!'));
 }
 
-Future<SendPort> spawnFunction(function) {
+Future spawnFunction(function) {
   ReceivePort init = new ReceivePort();
   Isolate.spawn(function, init.sendPort);
   return init.first;
diff --git a/tests/lib_2/lib_2.status b/tests/lib_2/lib_2.status
index 6bcb0a9..40162ef 100644
--- a/tests/lib_2/lib_2.status
+++ b/tests/lib_2/lib_2.status
@@ -74,7 +74,14 @@
 html/xhr_test/json: Fail # IE10 returns string, not JSON object
 
 [ $runtime == safari ]
+convert/json_test: Fail # https://bugs.webkit.org/show_bug.cgi?id=134920
 html/audiobuffersourcenode_test/functional: RuntimeError
+html/canvasrenderingcontext2d_test/drawImage_video_element: Fail # Safari does not support drawImage w/ video element
+html/canvasrenderingcontext2d_test/drawImage_video_element_dataUrl: Fail # Safari does not support drawImage w/ video element
+html/element_animate_test: Fail # Element.animate not supported on these browsers.
+html/element_test: Pass, Fail # Issue 21434
+html/fileapi_supported_test: Fail
+html/gamepad_test: Fail # Safari does not support Navigator.getGamepads()
 html/indexeddb_1_test/functional: Skip # Times out. Issue 21433
 html/indexeddb_2_test: RuntimeError # Issue 21433
 html/indexeddb_3_test: Skip # Times out 1 out of 10.
@@ -85,17 +92,17 @@
 html/input_element_month_test: RuntimeError
 html/input_element_time_test: RuntimeError
 html/input_element_week_test: RuntimeError
+html/media_stream_test: Pass, Fail
+html/mediasource_test: Pass, Fail # MediaSource only available on Safari 8 desktop, we can't express that.
 html/notification_test: Fail # Safari doesn't let us access the fields of the Notification to verify them.
+html/rtc_test: Fail
+html/shadow_dom_test: Fail
+html/speechrecognition_test: Fail
 html/touchevent_test: Fail # Safari does not support TouchEvents
-
-[ $runtime == safarimobilesim ]
-html/element_offset_test/offset: RuntimeError # Issue 18573
-html/event_test: RuntimeError # Safarimobilesim does not support WheelEvent
-html/indexeddb_1_test/supported: Fail
-html/notification_test: RuntimeError # Issue 22869
-html/performance_api_test/supported: Fail
-html/wheelevent_test: RuntimeError # Safarimobilesim does not support WheelEvent
-html/xhr_test/json: Fail # Safari doesn't support JSON response type
+html/webgl_1_test: Pass, Fail # Issue 8219
+html/worker_api_test: Skip # Issue 13221
+typed_data/float32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
+typed_data/int32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
 
 [ $csp ]
 isolate/browser/package_resolve_browser_hook_test: SkipByDesign # Test written in a way that violates CSP.
@@ -118,6 +125,11 @@
 typed_data/int32x4_static_test/01: MissingCompileTimeError
 typed_data/int32x4_static_test/02: MissingCompileTimeError
 
+[ $builder_tag == mac10_7 && $runtime == safari ]
+typed_data/setRange_2_test: Fail # Safari doesn't fully implement spec for TypedArray.set
+typed_data/setRange_3_test: Fail # Safari doesn't fully implement spec for TypedArray.set
+typed_data/setRange_4_test: Fail # Safari doesn't fully implement spec for TypedArray.set
+
 [ $compiler != dart2analyzer && $runtime != none && $checked && !$strong ]
 mirrors/redirecting_factory_different_type_test/02: RuntimeError
 
@@ -215,29 +227,6 @@
 isolate/isolate_stress_test: Skip # Issue 12588: Uses dart:html. This should be able to pass when we have wrapper-less tests.
 isolate/stacktrace_message_test: RuntimeError # Fails to send stacktrace object.
 
-[ $runtime == safari || $runtime == safarimobilesim ]
-convert/json_test: Fail # https://bugs.webkit.org/show_bug.cgi?id=134920
-html/canvasrenderingcontext2d_test/drawImage_video_element: Fail # Safari does not support drawImage w/ video element
-html/canvasrenderingcontext2d_test/drawImage_video_element_dataUrl: Fail # Safari does not support drawImage w/ video element
-html/element_animate_test: Fail # Element.animate not supported on these browsers.
-html/element_test: Pass, Fail # Issue 21434
-html/fileapi_supported_test: Fail
-html/gamepad_test: Fail # Safari does not support Navigator.getGamepads()
-html/media_stream_test: Pass, Fail
-html/mediasource_test: Pass, Fail # MediaSource only available on Safari 8 desktop, we can't express that.
-html/rtc_test: Fail
-html/shadow_dom_test: Fail
-html/speechrecognition_test: Fail
-html/webgl_1_test: Pass, Fail # Issue 8219
-html/worker_api_test: Skip # Issue 13221
-typed_data/float32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
-typed_data/int32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
-
-[ $runtime == safarimobilesim || $builder_tag == mac10_7 && $runtime == safari ]
-typed_data/setRange_2_test: Fail # Safari doesn't fully implement spec for TypedArray.set
-typed_data/setRange_3_test: Fail # Safari doesn't fully implement spec for TypedArray.set
-typed_data/setRange_4_test: Fail # Safari doesn't fully implement spec for TypedArray.set
-
 [ $system == windows || $runtime == drt && $system == macos ]
 html/xhr_test/xhr: Skip # Times out.  Issue 21527
 
diff --git a/tests/lib_2/lib_2_dart2js.status b/tests/lib_2/lib_2_dart2js.status
index 4125ad3..6cd6ce0 100644
--- a/tests/lib_2/lib_2_dart2js.status
+++ b/tests/lib_2/lib_2_dart2js.status
@@ -84,6 +84,7 @@
 convert/streamed_conversion_utf8_decode_test: SkipSlow # Times out. Issue 22050
 html/element_classes_test: RuntimeError # Issue 30291
 html/element_types_keygen_test: RuntimeError # Issue 29055
+html/file_sample_test: Pass, RuntimeError
 html/fileapi_directory_test: Fail # TODO(dart2js-team): Please triage this failure.
 html/fileapi_entry_test: Pass, Fail # TODO(dart2js-team): Please triage this failure.
 html/fileapi_file_test: Fail # TODO(dart2js-team): Please triage this failure.
@@ -165,12 +166,10 @@
 html/dart_object_local_storage_test: Skip # sessionStorage NS_ERROR_DOM_NOT_SUPPORTED_ERR
 html/element_animate_test/timing_dict: RuntimeError # Issue 26730
 html/element_classes_test: RuntimeError # Issue 27535
-html/element_types_content_test: RuntimeError # Issue 29922
-html/element_types_content_test: Pass, RuntimeError # Issue 28983
+html/element_types_content_test: Pass, RuntimeError # Issues 28983, 29922
 html/element_types_keygen_test: RuntimeError # Issue 29922
 html/element_types_keygen_test: Fail
-html/element_types_shadow_test: RuntimeError # Issue 29922
-html/element_types_shadow_test: Pass, RuntimeError # Issue 28983
+html/element_types_shadow_test: Pass, RuntimeError # Issues 28983, 29922
 html/file_sample_test: Skip # FileSystem not supported on FireFox.
 html/fileapi_supported_test: Skip # FileSystem not supported on FireFox.
 html/fileapi_supported_throws_test: Skip # FileSystem not supported on FireFox.
@@ -272,9 +271,6 @@
 isolate/cross_isolate_message_test: Skip # Issue 12627
 isolate/message_test: Skip # Issue 12627
 
-[ $compiler == dart2js && $runtime == safarimobilesim ]
-isolate/compile_time_error_test/none: Pass, Slow
-
 [ $compiler == dart2js && $system == linux ]
 html/interactive_geolocation_test: Skip # Requires allowing geo location.
 
@@ -397,8 +393,8 @@
 html/js_array_test: CompileTimeError
 html/js_array_test: Crash # FileSystemException(uri=file:///usr/local/google/home/efortuna/dart2/sdk/sdk/lib/_internal/dart2js_platform.dill; message=Error reading 'sdk/lib/_internal/dart2js_platform.dill'  (No such file or directory))
 html/js_dart_to_string_test: Crash # 'file:*/pkg/compiler/lib/src/common_elements.dart': Failed assertion: line 405 pos 12: 'element.name == '=='': is not true.
-html/js_dispatch_property_test: Crash # FileSystemException(uri=file:///usr/local/google/home/efortuna/dart2/sdk/sdk/lib/_internal/dart2js_platform.dill; message=Error reading 'sdk/lib/_internal/dart2js_platform.dill'  (No such file or directory))
 html/js_dispatch_property_test: CompileTimeError
+html/js_dispatch_property_test: Crash # FileSystemException(uri=file:///usr/local/google/home/efortuna/dart2/sdk/sdk/lib/_internal/dart2js_platform.dill; message=Error reading 'sdk/lib/_internal/dart2js_platform.dill'  (No such file or directory))
 html/js_function_getter_test: CompileTimeError
 html/js_function_getter_test/call getter as function: Crash # FileSystemException(uri=file:///usr/local/google/home/efortuna/dart2/sdk/sdk/lib/_internal/dart2js_platform.dill; message=Error reading 'sdk/lib/_internal/dart2js_platform.dill'  (No such file or directory))
 html/js_function_getter_trust_types_test: Crash # FileSystemException(uri=file:///usr/local/google/home/efortuna/dart2/sdk/sdk/lib/_internal/dart2js_platform.dill; message=Error reading 'sdk/lib/_internal/dart2js_platform.dill'  (No such file or directory))
@@ -781,7 +777,7 @@
 html/fileapi_file_test: Fail, Pass # TODO(dart2js-team): Please triage this failure.
 isolate/browser/issue_12474_test: RuntimeError # packageRoot not implemented.
 
-[ $compiler == dart2js && ($runtime == ff || $runtime == safari || $runtime == safarimobilesim || $ie) ]
+[ $compiler == dart2js && ($runtime == ff || $runtime == safari || $ie) ]
 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 e1fbe36..8d082b1 100644
--- a/tests/lib_2/lib_2_dartdevc.status
+++ b/tests/lib_2/lib_2_dartdevc.status
@@ -3,8 +3,85 @@
 # 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
+
+[ $compiler == dartdevk ]
+async/future_or_strong_test: RuntimeError
+async/future_value_chain4_test: CompileTimeError
+async/slow_consumer_test: CompileTimeError
+async/zone_run_unary_test: CompileTimeError # Issue 31537
+collection/list_test: RuntimeError
+convert/chunked_conversion1_test: RuntimeError
+convert/chunked_conversion_utf82_test: RuntimeError
+convert/chunked_conversion_utf86_test: RuntimeError
+convert/chunked_conversion_utf87_test: RuntimeError
+convert/codec1_test: RuntimeError
+convert/utf82_test: RuntimeError
+html/debugger_test: CompileTimeError
+html/js_typed_interop_anonymous2_exp_test: Crash
+html/js_typed_interop_anonymous2_test: RuntimeError
+html/js_typed_interop_anonymous_exp_test: Crash
+html/js_typed_interop_anonymous_test: RuntimeError
+html/js_typed_interop_anonymous_unreachable_exp_test: Crash
+html/js_typed_interop_dynamic_test: RuntimeError
+html/js_typed_interop_lazy_test/01: RuntimeError
+html/js_typed_interop_lazy_test/none: RuntimeError
+html/js_typed_interop_side_cast_exp_test/01: Crash
+html/js_typed_interop_side_cast_exp_test/none: Crash
+html/js_typed_interop_side_cast_test: RuntimeError
+html/js_typed_interop_test: RuntimeError
+html/js_typed_interop_type2_test/01: RuntimeError
+html/js_typed_interop_type2_test/none: RuntimeError
+js/prototype_access_test: RuntimeError
+
+[ $runtime == chrome && ($compiler == dartdevc || $compiler == dartdevk) ]
+html/element_animate_test/timing_dict: RuntimeError # Issue 29922
+html/element_types_keygen_test: RuntimeError # Issue 29055
+html/js_dispatch_property_test: Skip # Timeout Issue 31030
+html/touchevent_test: RuntimeError # Issue 29922
+
+[ $runtime == drt && ($compiler == dartdevc || $compiler == dartdevk) ]
+html/svg_test: RuntimeError # Issue 29922
+math/math2_test: RuntimeError # Issue 29922
+math/math_test: RuntimeError # Issue 29922
+
+[ $system == linux && ($compiler == dartdevc || $compiler == dartdevk) ]
+html/interactive_geolocation_test: Skip # Requires allowing geo location.
+html/interactive_media_test: RuntimeError
+
+[ $system == macos && ($compiler == dartdevc || $compiler == dartdevk) ]
+html/client_rect_test: Pass, RuntimeError # Issue 31019
+html/css_test: Pass, RuntimeError # Issue 31019
+
+[ $system == windows && ($compiler == dartdevc || $compiler == dartdevk) ]
+html/xhr_test/xhr: Skip # Times out. Issue 21527
+
+[ $compiler == dartdevc || $compiler == dartdevk ]
+async/async_await_sync_completer_test: RuntimeError # Issue 29922
+async/async_await_zones_test: RuntimeError # Issue 29922
+async/future_or_bad_type_test/implements: RuntimeError # Issue 29922
+async/future_or_bad_type_test/none: RuntimeError # Issue 29922
+async/future_test: RuntimeError # Issue 29922
+async/slow_consumer_test: Pass, Timeout # Issue 29922
+async/stream_controller_async_test: RuntimeError
+async/stream_distinct_test: RuntimeError # Issue 29922
+async/stream_join_test: RuntimeError
+async/stream_subscription_as_future_test: RuntimeError
+async/timer_not_available_test: RuntimeError
+convert/base64_test/01: Fail, OK # Uses bit-wise operations to detect invalid values. Some large invalid values accepted by DDC/dart2js.
+convert/chunked_conversion_utf88_test: Slow, Pass
+convert/json_utf8_chunk_test: Slow, Pass
+convert/streamed_conversion_json_utf8_encode_test: Pass, Timeout # Issue 29922
+convert/streamed_conversion_utf8_decode_test: Slow, Pass
+convert/streamed_conversion_utf8_encode_test: Pass, Timeout # Issue 29922
+convert/utf85_test: Slow, Pass
+html/async_spawnuri_test: RuntimeError # Issue 29922
+html/async_test: RuntimeError # Issue 29922
+html/client_rect_test: RuntimeError # Issue 29922, seems to be a reified type problem with DOMClientRect
 html/custom/attribute_changed_callback_test: Skip # Issue 31577
 html/custom/constructor_calls_created_synchronously_test: Skip # Issue 31577
+html/custom/created_callback_test: RuntimeError
 html/custom/created_callback_test: Skip # Issue 31577
 html/custom/document_register_basic_test: Skip # Issue 31577
 html/custom/document_register_template_test: Skip # Issue 31577
@@ -22,65 +99,15 @@
 html/custom/mirrors_2_test: Skip # Issue 31577
 html/custom/mirrors_test: Crash # Issue 29922
 html/custom/regress_194523002_test: Crash # Issue 29922
-html/deferred_multi_app_htmltest: Skip # Issue 29919
-html/fontface_loaded_test: RuntimeError
-html/gamepad_test: RuntimeError # Issue 31029
-html/no_linked_scripts_htmltest: Skip # Issue 29919
-html/scripts_htmltest: Skip # Issue 29919
-html/transferables_test: CompileTimeError # Issue 30975
-html/two_scripts_htmltest: Skip # Issue 29919
-isolate/*: SkipByDesign # No support for dart:isolate in dart4web (http://dartbug.com/30538)
-js/null_test: RuntimeError # Issue 30652
-math/double_pow_test: RuntimeError # Issue 29922
-math/low_test: RuntimeError # Issue 29922
-math/random_big_test: RuntimeError # Issue 29922
-mirrors/*: SkipByDesign # Mirrors not supported on web in Dart 2.0.
-profiler/metrics_num_test: Skip # Because of an int / double type test.
-
-[ $compiler == dartdevk ]
-async/zone_run_unary_test: CompileTimeError # Issue 31537
-
-[ $compiler == dartdevc && $runtime == chrome ]
-html/element_animate_test/timing_dict: RuntimeError # Issue 29922
-html/element_types_keygen_test: RuntimeError # Issue 29055
-html/js_dispatch_property_test: Skip # Timeout Issue 31030
-html/touchevent_test: RuntimeError # Issue 29922
-
-[ $compiler == dartdevc && $runtime == drt ]
-html/svg_test: RuntimeError # Issue 29922
-math/math2_test: RuntimeError # Issue 29922
-math/math_test: RuntimeError # Issue 29922
-
-[ $compiler == dartdevc && $runtime != none ]
-async/async_await_sync_completer_test: RuntimeError # Issue 29922
-async/async_await_zones_test: RuntimeError # Issue 29922
-async/future_or_bad_type_test/implements: RuntimeError # Issue 29922
-async/future_or_bad_type_test/none: RuntimeError # Issue 29922
-async/future_test: RuntimeError # Issue 29922
-async/futures_test: RuntimeError # Issue 29922
-async/slow_consumer_test: Pass, Timeout # Issue 29922
-async/stream_controller_async_test: RuntimeError
-async/stream_distinct_test: RuntimeError # Issue 29922
-async/stream_join_test: RuntimeError
-async/stream_subscription_as_future_test: RuntimeError
-async/timer_not_available_test: RuntimeError
-convert/base64_test/01: Fail, OK # Uses bit-wise operations to detect invalid values. Some large invalid values accepted by DDC/dart2js.
-convert/chunked_conversion_utf88_test: Slow, Pass
-convert/json_utf8_chunk_test: Slow, Pass
-convert/streamed_conversion_json_utf8_encode_test: Pass, Timeout # Issue 29922
-convert/streamed_conversion_utf8_decode_test: Slow, Pass
-convert/streamed_conversion_utf8_encode_test: Pass, Timeout # Issue 29922
-convert/utf85_test: Slow, Pass
-html/async_spawnuri_test: RuntimeError # Issue 29922
-html/async_test: RuntimeError # Issue 29922
-html/client_rect_test: RuntimeError # Issue 29922, seems to be a reified type problem with DOMClientRect
-html/custom/created_callback_test: RuntimeError
 html/custom_element_method_clash_test: Skip # Issue 29922
 html/custom_element_name_clash_test: Skip # Issue 29922
 html/custom_elements_23127_test: Skip # Issue 29922
 html/custom_elements_test: Skip # Issue 29922
+html/deferred_multi_app_htmltest: Skip # Issue 29919
 html/element_classes_svg_test: RuntimeError # Issue 29922
 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)
@@ -92,12 +119,20 @@
 html/js_util_test: RuntimeError # Issue 29922
 html/media_stream_test: RuntimeError # Issue 29922
 html/mediasource_test: RuntimeError # Issue 29922
+html/no_linked_scripts_htmltest: Skip # Issue 29919
+html/scripts_htmltest: Skip # Issue 29919
+html/transferables_test: CompileTimeError # Issue 30975
 html/transition_event_test: Pass, RuntimeError, Timeout # Issue 29922, this test seems flaky
+html/two_scripts_htmltest: Skip # Issue 29919
 html/webgl_extensions_test: RuntimeError # Issue 31017
 html/worker_api_test: RuntimeError # Issue 29922
 html/xhr_cross_origin_test/functional: RuntimeError # Issue 29922
-html/xhr_test/xhr: RuntimeError # Issue 29922, strong mode cast failure
+isolate/*: SkipByDesign # No support for dart:isolate in dart4web (http://dartbug.com/30538)
+js/null_test: RuntimeError # Issue 30652
+math/double_pow_test: RuntimeError # Issue 29922
+math/low_test: RuntimeError # Issue 29922
 math/random_big_test: RuntimeError # Issue 29922
+mirrors/*: SkipByDesign # Mirrors not supported on web in Dart 2.0.
 mirrors/private_types_test: RuntimeError # Issue 29922
 mirrors/reflect_runtime_type_test: RuntimeError # Issue 29922
 mirrors/reflect_uninstantiated_class_test: RuntimeError # Issue 29922
@@ -106,18 +141,8 @@
 mirrors/reflected_type_typedefs_test: RuntimeError # Issue 29922
 mirrors/reflected_type_typevars_test: RuntimeError # Issue 29922
 mirrors/regress_14304_test: RuntimeError # Issue 29922
+profiler/metrics_num_test: Skip # Because of an int / double type test.
 typed_data/int32x4_arithmetic_test/int64: RuntimeError # Issue 29922
 typed_data/int64_list_load_store_test: RuntimeError # Issue 29922
 typed_data/typed_data_hierarchy_int64_test: RuntimeError # Issue 29922
 
-[ $compiler == dartdevc && $runtime != none && $system == macos ]
-html/client_rect_test: Pass, RuntimeError # Issue 31019
-html/css_test: Pass, RuntimeError # Issue 31019
-
-[ $compiler == dartdevc && $system == linux ]
-html/interactive_geolocation_test: Skip # Requires allowing geo location.
-html/interactive_media_test: RuntimeError
-
-[ $compiler == dartdevc && $system == windows ]
-html/xhr_test/xhr: Skip # Times out. Issue 21527
-
diff --git a/tests/lib_2/lib_2_kernel.status b/tests/lib_2/lib_2_kernel.status
index 0508dbe..cebcb02 100644
--- a/tests/lib_2/lib_2_kernel.status
+++ b/tests/lib_2/lib_2_kernel.status
@@ -16,7 +16,13 @@
 
 [ $compiler == dartk && $mode == debug && $runtime == vm && $strong ]
 isolate/isolate_complex_messages_test: Crash
-isolate/static_function_test: Skip # Flaky (https://github.com/dart-lang/sdk/issues/30063).
+mirrors/library_exports_shown_test: Crash # 31916
+mirrors/library_imports_deferred_test: Crash # 31916
+mirrors/library_imports_hidden_test: Crash # 31916
+mirrors/library_imports_metadata_test: Crash # 31916
+mirrors/library_imports_prefixed_show_hide_test: Crash # 31916
+mirrors/library_imports_prefixed_test: Crash # 31916
+mirrors/library_imports_shown_test: Crash # 31916
 mirrors/other_declarations_location_test: Crash # assertion error, TypeParameter not having position.
 
 # Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
@@ -26,24 +32,23 @@
 mirrors/variable_is_const_test/01: Crash # Please triage.
 
 [ $compiler == dartk && $runtime == vm && $checked && $strong ]
-mirrors/invocation_fuzz_test/emptyarray: Pass
-mirrors/invocation_fuzz_test/false: Pass
-mirrors/invocation_fuzz_test/none: Pass
-mirrors/invocation_fuzz_test/string: Pass
 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
 
+[ $compiler == dartk && $runtime == vm && !$checked && $strong ]
+mirrors/invocation_fuzz_test/emptyarray: Crash
+mirrors/invocation_fuzz_test/false: Crash
+mirrors/invocation_fuzz_test/none: Crash
+mirrors/invocation_fuzz_test/string: Crash
+
 # ===== dartk + vm status lines =====
 [ $compiler == dartk && $runtime == vm && $strong ]
 async/async_await_sync_completer_test: RuntimeError
 async/future_or_strong_test: RuntimeError
 async/future_value_chain4_test: CompileTimeError # Issue 31616
 async/slow_consumer2_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/slow_consumer3_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/slow_consumer_test: CompileTimeError # Issue 31402 (Invocation arguments)
 async/stream_controller_async_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_from_iterable_test: CompileTimeError # Issue 31402 (Invocation arguments)
 async/stream_join_test: CompileTimeError # Issue 31402 (Invocation arguments)
 async/stream_subscription_as_future_test: CompileTimeError # Issue 31402 (Invocation arguments)
 async/timer_cancel2_test: CompileTimeError # Issue 31402 (Invocation arguments)
@@ -55,67 +60,44 @@
 convert/streamed_conversion_json_utf8_decode_test: Pass, Slow # Infrequent timeouts.
 html/*: SkipByDesign # dart:html not supported on VM.
 isolate/compile_time_error_test/01: MissingCompileTimeError
-isolate/count_test: CompileTimeError # Issue 31402 (Invocation arguments)
 isolate/deferred_in_isolate2_test: Skip # Times out. Deferred loading kernel issue 28335.
 isolate/deferred_in_isolate_test: Skip # Times out. Deferred loading kernel issue 28335.
-isolate/handle_error2_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/handle_error3_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/illegal_msg_function_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/illegal_msg_mirror_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/isolate_current_test: CompileTimeError # Issue 31402 (Invocation arguments)
 isolate/issue_21398_parent_isolate1_test: RuntimeError # Issue 31402 (List literal)
 isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
-isolate/kill_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/mandel_isolate_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/byteBuffer: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/constInstance: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/constList: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/constList_identical: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/constMap: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/fun: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/int32x4: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
+isolate/message3_test/int32x4: Crash # 31916
 isolate/message_test: CompileTimeError # Issue 31402 (Invocation arguments)
 isolate/mint_maker_test: CompileTimeError # Issue 31402 (Invocation arguments)
 isolate/ping_pause_test: Pass, Timeout
 isolate/spawn_function_custom_class_test: Pass, Timeout
 isolate/spawn_uri_nested_vm_test: Pass, Timeout
-isolate/static_function_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/typed_message_test: CompileTimeError # Issue 31402 (Invocation arguments)
+isolate/static_function_test: Skip # Times out. Issue 31855. CompileTimeError. Issue 31402
 js/datetime_roundtrip_test: CompileTimeError
 js/null_test: CompileTimeError
 js/prototype_access_test: CompileTimeError
 mirrors/abstract_class_test: RuntimeError
-mirrors/abstract_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/class_declarations_test/01: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/class_declarations_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
+mirrors/class_declarations_test/01: RuntimeError # Issue 31402 (Invocation arguments)
+mirrors/class_declarations_test/none: RuntimeError # Issue 31402 (Invocation arguments)
 mirrors/class_mirror_location_test: RuntimeError
-mirrors/closures_test: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/constructor_kinds_test/01: RuntimeError
 mirrors/constructor_kinds_test/none: RuntimeError
-mirrors/constructor_optional_args_test: CompileTimeError
-mirrors/constructor_optional_args_test: Crash # Issue 29201
 mirrors/constructor_private_name_test: RuntimeError
 mirrors/constructors_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/dart2js_mirrors_test: CompileTimeError # Issue 31537
+mirrors/dart2js_mirrors_test: Crash # 31916
 mirrors/deferred_mirrors_metadata_test: RuntimeError
 mirrors/deferred_mirrors_metadata_test: CompileTimeError # Deferred loading kernel issue 28335.
 mirrors/deferred_mirrors_metatarget_test: CompileTimeError # Deferred loading kernel issue 28335.
 mirrors/deferred_mirrors_metatarget_test: RuntimeError
-mirrors/deferred_mirrors_test: Crash
+mirrors/deferred_mirrors_test: Crash # 31916
 mirrors/deferred_mirrors_update_test: CompileTimeError # Deferred loading kernel issue 28335.
 mirrors/deferred_mirrors_update_test: RuntimeError
-mirrors/deferred_type_test: CompileTimeError
-mirrors/deferred_type_test: RuntimeError
-mirrors/empty_test: Crash
-mirrors/empty_test: RuntimeError
-mirrors/enum_test: CompileTimeError # Issue 31402 (Invocation arguments)
+mirrors/deferred_type_test: CompileTimeError, RuntimeError
+mirrors/empty_test: Crash, RuntimeError
+mirrors/enum_test: RuntimeError # Issue 31402 (Invocation arguments)
 mirrors/equality_test: RuntimeError
 mirrors/function_type_mirror_test: RuntimeError
 mirrors/generic_bounded_by_type_parameter_test/02: MissingCompileTimeError
 mirrors/generic_bounded_test/01: MissingCompileTimeError
 mirrors/generic_bounded_test/02: MissingCompileTimeError
-mirrors/generic_class_declaration_test: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/generic_f_bounded_mixin_application_test: RuntimeError
 mirrors/generic_function_typedef_test: RuntimeError
 mirrors/generic_interface_test/01: MissingCompileTimeError
@@ -131,22 +113,12 @@
 mirrors/generics_test/none: RuntimeError
 mirrors/hot_get_field_test: RuntimeError
 mirrors/hot_set_field_test: RuntimeError
-mirrors/inherit_field_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/intercepted_class_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/intercepted_object_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/invocation_fuzz_test/emptyarray: Crash
-mirrors/invocation_fuzz_test/false: Crash
-mirrors/invocation_fuzz_test/none: Crash
-mirrors/invocation_fuzz_test/string: Crash
+mirrors/intercepted_object_test: RuntimeError # Issue 31402 (Invocation arguments)
 mirrors/invoke_private_test: RuntimeError
 mirrors/invoke_private_wrong_library_test: RuntimeError
-mirrors/invoke_throws_test: Crash
-mirrors/invoke_throws_test: RuntimeError
-mirrors/lazy_static_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/library_declarations_test/01: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/library_declarations_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/library_enumeration_deferred_loading_test: CompileTimeError # Deferred loading kernel issue 28335.
+mirrors/library_declarations_test/none: RuntimeError # Issue 31402 (Invocation arguments)
 mirrors/library_enumeration_deferred_loading_test: RuntimeError
+mirrors/library_enumeration_deferred_loading_test: CompileTimeError # Deferred loading kernel issue 28335.
 mirrors/library_exports_hidden_test: RuntimeError, Crash
 mirrors/library_exports_hidden_test: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/library_exports_shown_test: RuntimeError
@@ -155,54 +127,43 @@
 mirrors/library_imports_bad_metadata_test/none: Crash
 mirrors/library_imports_deferred_test: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/library_imports_deferred_test: RuntimeError
-mirrors/library_imports_hidden_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/library_imports_hidden_test: RuntimeError
-mirrors/library_imports_metadata_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/library_imports_metadata_test: RuntimeError
-mirrors/library_imports_prefixed_show_hide_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/library_imports_prefixed_show_hide_test: RuntimeError
-mirrors/library_imports_prefixed_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/library_imports_prefixed_test: RuntimeError
-mirrors/library_imports_shown_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/library_imports_shown_test: RuntimeError
+mirrors/library_imports_hidden_test: RuntimeError # Issue 31402 (Invocation arguments)
+mirrors/library_imports_metadata_test: RuntimeError # Issue 31402 (Invocation arguments)
+mirrors/library_imports_prefixed_show_hide_test: RuntimeError # Issue 31402 (Invocation arguments)
+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/list_constructor_test/01: Crash
-mirrors/list_constructor_test/01: RuntimeError
-mirrors/list_constructor_test/none: Crash
-mirrors/list_constructor_test/none: RuntimeError
-mirrors/load_library_test: Crash
-mirrors/load_library_test: RuntimeError
+mirrors/list_constructor_test/01: Crash, RuntimeError
+mirrors/list_constructor_test/none: Crash, RuntimeError
+mirrors/load_library_test: Crash, RuntimeError
 mirrors/metadata_allowed_values_test/13: MissingCompileTimeError
 mirrors/metadata_allowed_values_test/14: MissingCompileTimeError
 mirrors/metadata_allowed_values_test/16: Skip # Flaky, crashes.
-mirrors/metadata_constructed_constant_test: RuntimeError
-mirrors/metadata_constructed_constant_test: Crash
+mirrors/metadata_constructed_constant_test: Crash, RuntimeError
 mirrors/metadata_scope_test/none: RuntimeError
 mirrors/method_mirror_location_test: RuntimeError
-mirrors/method_mirror_name_test: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/method_mirror_source_line_ending_test: Crash
 mirrors/method_mirror_source_test: Crash
 mirrors/mirrors_nsm_mismatch_test: CompileTimeError # Issue 31533
 mirrors/mirrors_nsm_test/dart2js: CompileTimeError # Issue 31533
 mirrors/mirrors_nsm_test/none: CompileTimeError # Issue 31533
 mirrors/mirrors_reader_test: Crash
-mirrors/mirrors_test: CompileTimeError # Issue 31537
+mirrors/mirrors_test: Crash
 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
 mirrors/mirrors_used_typedef_declaration_test/none: RuntimeError
-mirrors/mixin_application_test: CompileTimeError # Issue 31402 (Invocation arguments)
+mirrors/mixin_application_test: RuntimeError # Issue 31402 (Invocation arguments)
 mirrors/mixin_members_test: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/mixin_simple_test: RuntimeError
 mirrors/mixin_test: RuntimeError
 mirrors/native_class_test: SkipByDesign # Imports dart:html
-mirrors/no_metadata_test: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/operator_test: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/other_declarations_location_test: RuntimeError
 mirrors/parameter_annotation_mirror_test: RuntimeError
 mirrors/parameter_metadata_test: RuntimeError
 mirrors/parameter_metadata_test: Crash
-mirrors/parameter_of_mixin_app_constructor_test: CompileTimeError # Issue 31402 (Invocation arguments)
+mirrors/parameter_of_mixin_app_constructor_test: RuntimeError # Issue 31402 (Invocation arguments)
 mirrors/parameter_test/01: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/parameter_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/private_class_field_test: RuntimeError
@@ -211,13 +172,10 @@
 mirrors/private_types_test: RuntimeError
 mirrors/redirecting_factory_different_type_test/01: Crash
 mirrors/redirecting_factory_different_type_test/01: MissingCompileTimeError
-mirrors/redirecting_factory_different_type_test/02: Crash
-mirrors/redirecting_factory_different_type_test/none: Crash
 mirrors/redirecting_factory_test/01: Crash
 mirrors/redirecting_factory_test/02: Crash
 mirrors/redirecting_factory_test/none: Crash
 mirrors/reflect_class_test/none: RuntimeError
-mirrors/reflect_model_test: CompileTimeError # Issue 31402 (Invocation arguments)
 mirrors/reflected_type_classes_test/01: RuntimeError
 mirrors/reflected_type_function_type_test: RuntimeError
 mirrors/reflected_type_generics_test/01: RuntimeError
@@ -230,13 +188,10 @@
 mirrors/relation_subclass_test: CompileTimeError # Issue 31533
 mirrors/relation_subtype_test: RuntimeError
 mirrors/repeated_private_anon_mixin_app_test: RuntimeError
-mirrors/return_type_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/static_members_easier_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/static_members_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/static_test: CompileTimeError # Issue 31402 (Invocation arguments)
-mirrors/symbol_validation_test/01: CompileTimeError # Issue 31537
-mirrors/symbol_validation_test/none: CompileTimeError # Issue 31537
-mirrors/synthetic_accessor_properties_test: CompileTimeError # Issue 31402 (Invocation arguments)
+mirrors/static_members_easier_test: RuntimeError # Issue 31402 (Invocation arguments)
+mirrors/static_members_test: RuntimeError # Issue 31402 (Invocation arguments)
+mirrors/symbol_validation_test/01: RuntimeError # Issue 31537
+mirrors/symbol_validation_test/none: RuntimeError # Issue 31537
 mirrors/type_variable_is_static_test: RuntimeError
 mirrors/type_variable_owner_test/01: RuntimeError
 mirrors/typearguments_mirror_test: CompileTimeError # Issue 31402 (Invocation arguments)
@@ -254,14 +209,30 @@
 typed_data/int32x4_static_test/01: Pass # Issue 31402 (Invocation arguments)
 typed_data/int32x4_static_test/02: Pass # Issue 31402 (Invocation arguments)
 
+[ $compiler == dartk && $system == windows && $strong ]
+isolate/issue_22778_test: Fail
+mirrors/constructor_optional_args_test: Fail
+mirrors/invoke_throws_test: Fail
+mirrors/list_constructor_test/01: Fail
+mirrors/list_constructor_test/none: Fail
+mirrors/redirecting_factory_different_type_test/02: Fail
+mirrors/redirecting_factory_different_type_test/none: Fail
+
+[ $compiler == dartk && $system != windows && $strong ]
+isolate/issue_22778_test: Crash
+mirrors/constructor_optional_args_test: Crash
+mirrors/invoke_throws_test: Crash
+mirrors/list_constructor_test/01: Crash
+mirrors/list_constructor_test/none: Crash
+mirrors/redirecting_factory_different_type_test/02: Crash
+mirrors/redirecting_factory_different_type_test/none: Crash
+
 [ $compiler == dartk && $strong ]
 async/future_test/01: RuntimeError
 async/future_test/none: RuntimeError
-async/slow_consumer2_test: RuntimeError
-async/slow_consumer_test: RuntimeError
+async/slow_consumer2_test: RuntimeError # Issue 31402 (Invocation arguments)
 async/stream_controller_async_test: RuntimeError
 async/stream_distinct_test: RuntimeError
-async/stream_from_iterable_test: RuntimeError
 async/stream_join_test: RuntimeError
 async/stream_subscription_as_future_test: RuntimeError
 async/timer_cancel2_test: RuntimeError
@@ -269,37 +240,18 @@
 async/timer_isActive_test: RuntimeError
 async/timer_repeat_test: RuntimeError
 async/zone_run_unary_test: RuntimeError
-convert/json_toEncodable_reviver_test: CompileTimeError
-isolate/count_test: Timeout
-isolate/illegal_msg_function_test: RuntimeError
-isolate/illegal_msg_mirror_test: RuntimeError
-isolate/isolate_current_test: RuntimeError
-isolate/issue_22778_test: Crash
 isolate/kill_self_synchronously_test: RuntimeError
-isolate/kill_test: RuntimeError
-isolate/mandel_isolate_test: RuntimeError
-isolate/message3_test/byteBuffer: RuntimeError
-isolate/message3_test/constInstance: RuntimeError
-isolate/message3_test/constList: RuntimeError
-isolate/message3_test/constList_identical: RuntimeError
-isolate/message3_test/constMap: RuntimeError
-isolate/message3_test/fun: RuntimeError
-isolate/message3_test/int32x4: RuntimeError
-isolate/message3_test/none: RuntimeError
 isolate/message_test: RuntimeError
 isolate/mint_maker_test: RuntimeError
 isolate/ping_pause_test: RuntimeError
 isolate/request_reply_test: Pass, Timeout
 isolate/stacktrace_message_test: RuntimeError
-isolate/typed_message_test: RuntimeError
 isolate/unresolved_ports_test: CompileTimeError, Pass, Timeout # Fails to compile on opt counter builder (#31838)
 mirrors/class_mirror_type_variables_test: RuntimeError
-mirrors/closures_test: RuntimeError
 mirrors/constructors_test: RuntimeError
 mirrors/fake_function_with_call_test: RuntimeError
 mirrors/generic_bounded_by_type_parameter_test/none: RuntimeError
 mirrors/generic_bounded_test/none: RuntimeError
-mirrors/generic_class_declaration_test: RuntimeError
 mirrors/generic_f_bounded_test/01: RuntimeError
 mirrors/generic_f_bounded_test/none: RuntimeError
 mirrors/generic_local_function_test: RuntimeError
@@ -316,10 +268,8 @@
 mirrors/instance_members_unimplemented_interface_test: RuntimeError
 mirrors/instance_members_with_override_test: RuntimeError
 mirrors/instantiate_abstract_class_test: RuntimeError
-mirrors/intercepted_class_test: RuntimeError
 mirrors/invocation_fuzz_test/smi: Crash, Pass # Crashes on opt counter builder (#31838)
 mirrors/invoke_closurization2_test: RuntimeError
-mirrors/library_declarations_test/01: RuntimeError
 mirrors/library_imports_bad_metadata_test/none: RuntimeError
 mirrors/metadata_const_map_test: Crash
 mirrors/mixin_members_test: RuntimeError
@@ -328,7 +278,6 @@
 mirrors/parameter_is_const_test/none: RuntimeError
 mirrors/parameter_test/01: RuntimeError
 mirrors/parameter_test/none: RuntimeError
-mirrors/reflect_model_test: RuntimeError
 mirrors/reflected_type_classes_test/01: MissingCompileTimeError
 mirrors/reflected_type_classes_test/02: MissingCompileTimeError
 mirrors/reflected_type_classes_test/03: MissingCompileTimeError
@@ -336,7 +285,6 @@
 mirrors/reflected_type_test/02: MissingCompileTimeError
 mirrors/reflected_type_test/03: MissingCompileTimeError
 mirrors/regress_16321_test/none: Crash
-mirrors/return_type_test: RuntimeError
 mirrors/top_level_accessors_test/01: MissingCompileTimeError
 mirrors/type_argument_is_type_variable_test: RuntimeError
 mirrors/typearguments_mirror_test: RuntimeError
@@ -348,14 +296,33 @@
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
 # batch mode.
 [ $compiler == dartk && $strong && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) ]
-isolate/*: Skip
+isolate/count_test: RuntimeError
+isolate/cross_isolate_message_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/error_at_spawnuri_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/error_exit_at_spawnuri_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/exit_at_spawnuri_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/issue_21398_parent_isolate_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/issue_24243_parent_isolate_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/mandel_isolate_test: RuntimeError
+isolate/message2_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/nested_spawn2_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/nested_spawn_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/raw_port_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/request_reply_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/spawn_function_custom_class_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/spawn_function_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/spawn_uri_exported_main_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/spawn_uri_multi_test/none: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/spawn_uri_nested_vm_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/spawn_uri_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/spawn_uri_vm_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
+isolate/unresolved_ports_test: Skip # No support for Isolate.spawnUri in batch-mode atm.
 mirrors/invocation_fuzz_test/emptyarray: CompileTimeError, Pass # Please triage.
 mirrors/invocation_fuzz_test/false: CompileTimeError, Pass # Please triage.
 mirrors/invocation_fuzz_test/none: CompileTimeError # Please triage.
 mirrors/invocation_fuzz_test/smi: CompileTimeError, DartkCrash, Crash, Pass # Please triage.
 mirrors/invocation_fuzz_test/string: CompileTimeError, Pass # Please triage.
-mirrors/library_uri_io_test: CompileTimeError # Please triage.
-mirrors/spawn_function_root_library_test: Skip
+mirrors/library_uri_io_test: RuntimeError # Please triage.
 
 # ===== Skip dartk and darkp in !$strong mode ====
 [ $compiler == dartk && !$strong ]
@@ -372,66 +339,30 @@
 async/future_test/01: RuntimeError
 async/future_test/none: RuntimeError
 async/future_value_chain4_test: CompileTimeError # Issue 31616
-async/slow_consumer2_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/slow_consumer3_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/slow_consumer_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_controller_async_test: CompileTimeError # Issue 31402 (Invocation arguments)
+async/slow_consumer2_test: RuntimeError # Issue 31402 (Invocation arguments)
+async/stream_controller_async_test: RuntimeError
 async/stream_distinct_test: RuntimeError
-async/stream_first_where_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_from_iterable_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_iterator_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_join_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_last_where_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_periodic2_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_periodic3_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_periodic4_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_periodic5_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_periodic6_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_periodic_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_single_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_single_to_multi_subscriber_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_state_nonzero_timer_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_state_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_subscription_as_future_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_subscription_cancel_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_timeout_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_transform_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/stream_transformation_broadcast_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/timer_cancel1_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/timer_cancel2_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/timer_cancel_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/timer_isActive_test: CompileTimeError # Issue 31402 (Invocation arguments)
+async/stream_join_test: RuntimeError
+async/stream_subscription_as_future_test: RuntimeError
+async/timer_cancel2_test: RuntimeError
+async/timer_cancel_test: RuntimeError
+async/timer_isActive_test: RuntimeError
 async/timer_not_available_test: RuntimeError
-async/timer_repeat_test: CompileTimeError # Issue 31402 (Invocation arguments)
-async/timer_test: CompileTimeError # Issue 31402 (Invocation arguments)
+async/timer_repeat_test: RuntimeError
 async/zone_run_unary_test: CompileTimeError # Issue 31537
-convert/json_toEncodable_reviver_test: CompileTimeError
 html/*: SkipByDesign # dart:html not supported on VM.
 isolate/compile_time_error_test/01: Crash
 isolate/compile_time_error_test/01: MissingCompileTimeError
 isolate/deferred_in_isolate2_test: Skip # Times out. Deferred loading kernel issue 28335.
 isolate/deferred_in_isolate_test: Skip # Times out. Deferred loading kernel issue 28335.
-isolate/handle_error2_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/handle_error3_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/isolate_current_test: CompileTimeError # Issue 31402 (Invocation arguments)
 isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
 isolate/issue_22778_test: Crash
 isolate/kill_self_synchronously_test: RuntimeError
-isolate/kill_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/byteBuffer: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/constInstance: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/constList: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/constList_identical: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/constMap: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/fun: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/int32x4: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message3_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
+isolate/message3_test/int32x4: Crash # 31916
 isolate/ping_pause_test: Crash
 isolate/ping_pause_test: Pass, Timeout
 isolate/spawn_function_custom_class_test: Pass, Timeout
 isolate/spawn_uri_nested_vm_test: Pass, Timeout
-isolate/timer_isolate_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/typed_message_test: CompileTimeError # Issue 31402 (Invocation arguments)
 js/datetime_roundtrip_test: CompileTimeError
 js/null_test: CompileTimeError
 js/prototype_access_test: CompileTimeError
diff --git a/tests/lib_2/mirrors/mirrors_test.dart b/tests/lib_2/mirrors/mirrors_test.dart
index c3ef03b..44f1467 100644
--- a/tests/lib_2/mirrors/mirrors_test.dart
+++ b/tests/lib_2/mirrors/mirrors_test.dart
@@ -194,7 +194,7 @@
       equals(const Symbol('MirrorsTest.Class.field')));
 }
 
-testLibraryUri(var value, bool check(Uri)) {
+testLibraryUri(var value, bool check(Uri uri)) {
   var valueMirror = reflect(value);
   ClassMirror valueClass = valueMirror.type;
   LibraryMirror valueLibrary = valueClass.owner;
diff --git a/tests/lib_2/mirrors/stringify.dart b/tests/lib_2/mirrors/stringify.dart
index c89fc2e..32cc653 100644
--- a/tests/lib_2/mirrors/stringify.dart
+++ b/tests/lib_2/mirrors/stringify.dart
@@ -16,7 +16,8 @@
 stringifyMap(Map map) {
   var buffer = new StringBuffer();
   bool first = true;
-  for (String key in map.keys.map(MirrorSystem.getName).toList()..sort()) {
+  var names = map.keys.map((s) => MirrorSystem.getName(s)).toList()..sort();
+  for (String key in names) {
     if (!first) buffer.write(', ');
     first = false;
     buffer.write(key);
diff --git a/tests/lib_2/mirrors/symbol_validation_test.dart b/tests/lib_2/mirrors/symbol_validation_test.dart
index f65255a..5b3b2e3 100644
--- a/tests/lib_2/mirrors/symbol_validation_test.dart
+++ b/tests/lib_2/mirrors/symbol_validation_test.dart
@@ -61,7 +61,7 @@
       .expand((op) => [".$op", "$op.x", "x$op", "_x.$op"])
       .forEach(invalidSymbol);
   operators
-      .expand((op) => operators.contains("$op=") ? [] : ["x.$op=", "$op="])
+      .expand<String>((op) => operators.contains("$op=") ? [] : ["x.$op=", "$op="])
       .forEach(invalidSymbol);
 
   var simpleSymbols = [
diff --git a/tests/standalone_2/io/addlatexhash_test.dart b/tests/standalone_2/io/addlatexhash_test.dart
index a748de2..d586a35 100755
--- a/tests/standalone_2/io/addlatexhash_test.dart
+++ b/tests/standalone_2/io/addlatexhash_test.dart
@@ -9,7 +9,7 @@
 import 'package:path/path.dart' as path;
 import '../../../tools/addlatexhash.dart';
 
-final execDir = path.dirname(path.fromUri(Platform.executable));
+final execDir = path.dirname(Platform.resolvedExecutable);
 final dartRootDir = path.dirname(path.dirname(execDir));
 final dartRootPath = dartRootDir.toString();
 
diff --git a/tests/standalone_2/io/http_proxy_advanced_test.dart b/tests/standalone_2/io/http_proxy_advanced_test.dart
index 8b5e252..fda2388 100644
--- a/tests/standalone_2/io/http_proxy_advanced_test.dart
+++ b/tests/standalone_2/io/http_proxy_advanced_test.dart
@@ -150,7 +150,7 @@
   }
 
   Future<ProxyServer> start() {
-    var x = new Completer();
+    var x = new Completer<ProxyServer>();
     var host = ipV6 ? "::1" : "localhost";
     HttpServer.bind(host, 0).then((s) {
       server = s;
@@ -257,8 +257,8 @@
                 .add(HttpHeaders.VIA, "${viaPrefix}1.1 localhost:$port");
             // Copy all content.
             return request.pipe(clientRequest);
-          }).then((HttpClientResponse clientResponse) {
-            clientResponse.pipe(request.response);
+          }).then((clientResponse) {
+            (clientResponse as HttpClientResponse).pipe(request.response);
           });
         }
       });
diff --git a/tests/standalone_2/io/http_proxy_test.dart b/tests/standalone_2/io/http_proxy_test.dart
index e885cce..bd07700 100644
--- a/tests/standalone_2/io/http_proxy_test.dart
+++ b/tests/standalone_2/io/http_proxy_test.dart
@@ -139,7 +139,7 @@
   }
 
   Future<ProxyServer> start() {
-    var x = new Completer();
+    var x = new Completer<ProxyServer>();
     var host = ipV6 ? "::1" : "localhost";
     HttpServer.bind(host, 0).then((s) {
       server = s;
@@ -245,8 +245,8 @@
                 .add(HttpHeaders.VIA, "${viaPrefix}1.1 localhost:$port");
             // Copy all content.
             return request.pipe(clientRequest);
-          }).then((HttpClientResponse clientResponse) {
-            clientResponse.pipe(request.response);
+          }).then((clientResponse) {
+            (clientResponse as HttpClientResponse).pipe(request.response);
           });
         }
       });
diff --git a/tests/standalone_2/standalone_2.status b/tests/standalone_2/standalone_2.status
index 198f5b6..924b2f6 100644
--- a/tests/standalone_2/standalone_2.status
+++ b/tests/standalone_2/standalone_2.status
@@ -99,7 +99,6 @@
 io/http_cookie_date_test: CompileTimeError
 io/http_headers_test: CompileTimeError
 io/http_parser_test: CompileTimeError
-io/http_proxy_advanced_test: CompileTimeError
 io/http_redirect_test: RuntimeError
 io/http_reuse_server_port_test: RuntimeError
 io/http_server_response_test: RuntimeError
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index ca96d89..83be5c7 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -24,10 +24,8 @@
 io/compile_all_test: Crash
 io/http_client_request_test: Pass, Timeout
 io/http_compression_test: RuntimeError
-io/http_proxy_test: CompileTimeError
 io/secure_builtin_roots_test: Timeout
 io/socket_finalizer_test: Pass, Timeout
-map_insert_remove_oom_test: Crash
 no_support_debugger_test: Skip # kernel-service snapshot not compatible with flag disabled
 package/package1_test: CompileTimeError
 package/package_test: CompileTimeError
@@ -37,24 +35,25 @@
 regress_29350_test: MissingCompileTimeError
 regress_29350_test/none: Pass # Issue 31537
 
+[ $compiler == dartk && $system == windows && $strong ]
+io/compile_all_test: Fail
+io/file_stream_test: RuntimeError # Issue 31904
+io/platform_test: RuntimeError # Issue 31904
+io/process_non_ascii_test: RuntimeError # Issue 31904
+io/regress_7679_test: RuntimeError # Issue 31904
+map_insert_remove_oom_test: Skip # Timeout
+
+[ $compiler == dartk && $system != windows && $strong ]
+map_insert_remove_oom_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
 # batch mode.
 [ $compiler == dartk && $strong && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) ]
 io/directory_list_sync_test: Timeout, Pass # Please triage.
-io/echo_server_stream_test: Skip # Uses isolates which don't work in batch mode.
 io/file_blocking_lock_test: Pass, Crash # Please triage.
 io/file_lock_test: RuntimeError # Please triage.
-io/http_advanced_test: Skip # Uses isolates which don't work in batch mode.
-io/http_basic_test: Skip # Uses isolates which don't work in batch mode.
-io/http_read_test: Skip # Uses isolates which don't work in batch mode.
-io/pipe_server_test: Skip # Uses isolates which don't work in batch mode.
-io/platform_test: Skip # Uses isolates which don't work in batch mode.
-io/raw_synchronous_socket_test: Skip # Uses isolates which don't work in batch mode.
-io/socket_close_test: Skip # Uses isolates which don't work in batch mode.
-io/socket_finalizer_test: Skip # Uses isolates which don't work in batch mode.
-io/socket_many_connections_test: Skip # Uses isolates which don't work in batch mode.
-io/stdio_socket_finalizer_test: Skip # Uses isolates which don't work in batch mode.
+io/platform_test: RuntimeError # Please triage.
 io/test_extension_fail_test: RuntimeError # Please traige.
 io/test_extension_test: RuntimeError # Please traige.
 map_insert_remove_oom_test: Pass # Please triage.
@@ -63,12 +62,6 @@
 package/scenarios/packages_file_strange_formatting/empty_lines_test: CompileTimeError # Please triage.
 package/scenarios/packages_file_strange_formatting/mixed_line_ends_test: CompileTimeError # Please triage.
 package/scenarios/packages_option_only/packages_option_only_test: CompileTimeError # Please triage.
-regress_26031_test: RuntimeError # Please triage.
-regress_28854_1_test: RuntimeError # Please triage.
-regress_28854_2_test: RuntimeError # Please triage.
-typed_array_int64_uint64_test: RuntimeError # Please triage.
-typed_array_test: RuntimeError # Please triage.
-typed_data_isolate_test: RuntimeError # Please triage.
 
 # ===== Skip dartk and darkp in !$strong mode ====
 [ $compiler == dartk && !$strong ]
diff --git a/tools/VERSION b/tools/VERSION
index 0015155..f7edf31 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 0
 PATCH 0
-PRERELEASE 17
+PRERELEASE 18
 PRERELEASE_PATCH 0
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 784895d..f71c0a7 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -118,7 +118,8 @@
       "builders": [
         "vm-kernel-precomp-linux-release-x64",
         "vm-kernel-precomp-linux-release-simarm",
-        "vm-kernel-precomp-linux-release-simarm64"
+        "vm-kernel-precomp-linux-release-simarm64",
+        "vm-kernel-precomp-win-release-x64"
       ],
       "meta": {
         "description": "This configuration is used by the vm kernel release builder."
@@ -234,7 +235,8 @@
         "vm-kernel-linux-release-simdbc64",
         "vm-kernel-linux-release-x64",
         "vm-kernel-mac-debug-x64",
-        "vm-kernel-mac-release-x64"
+        "vm-kernel-mac-release-x64",
+        "vm-kernel-win-release-x64"
       ],
       "meta": {
         "description": "This configuration is for the kernel builder group."
@@ -316,7 +318,9 @@
             "--checked",
             "--strong",
             "--use-sdk",
-            "language_2"
+            "language_2",
+            "corelib_2",
+            "lib_2"
           ]
         },
         {
@@ -375,8 +379,7 @@
             "--use-sdk",
             "language_2",
             "corelib_2",
-            "lib_2",
-            "lib_strong"
+            "lib_2"
           ]
         },
         {
@@ -386,7 +389,9 @@
             "--checked",
             "--strong",
             "--use-sdk",
-            "language_2"
+            "language_2",
+            "corelib_2",
+            "lib_2"
           ]
         },
         {
@@ -1238,6 +1243,7 @@
             "--compiler=none",
             "--runtime=vm",
             "--checked",
+            "--timeout=120",
             "--use-sdk",
             "pkg/front_end"
           ]
@@ -1301,7 +1307,8 @@
             "--use-sdk",
             "--compiler=none",
             "--runtime=vm",
-            "--checked"
+            "--checked",
+            "--timeout=120"
           ],
           "tests": ["pkg"]
         },
diff --git a/tools/gardening/lib/src/results/configurations.dart b/tools/gardening/lib/src/results/configurations.dart
index 09d900b..6bde17a 100644
--- a/tools/gardening/lib/src/results/configurations.dart
+++ b/tools/gardening/lib/src/results/configurations.dart
@@ -114,7 +114,6 @@
           Runtime.ie11,
           Runtime.opera,
           Runtime.chromeOnAndroid,
-          Runtime.safariMobileSim
         ];
 
       case Compiler.dartdevc:
@@ -250,7 +249,6 @@
   static const ie11 = const Runtime._('ie11');
   static const opera = const Runtime._('opera');
   static const chromeOnAndroid = const Runtime._('chromeOnAndroid');
-  static const safariMobileSim = const Runtime._('safarimobilesim');
   static const contentShellOnAndroid = const Runtime._('ContentShellOnAndroid');
   static const selfCheck = const Runtime._('self_check');
   static const none = const Runtime._('none');
@@ -272,7 +270,6 @@
     ie11,
     opera,
     chromeOnAndroid,
-    safariMobileSim,
     contentShellOnAndroid,
     selfCheck,
     none
@@ -302,7 +299,6 @@
         chrome,
         firefox,
         chromeOnAndroid,
-        safariMobileSim,
         contentShellOnAndroid
       ].contains(this);
 
@@ -337,7 +333,6 @@
       case ie11:
       case opera:
       case chromeOnAndroid:
-      case safariMobileSim:
       case contentShellOnAndroid:
         return Compiler.dart2js;
 
diff --git a/tools/testing/dart/browser_controller.dart b/tools/testing/dart/browser_controller.dart
index 94890e3..dd66be3 100644
--- a/tools/testing/dart/browser_controller.dart
+++ b/tools/testing/dart/browser_controller.dart
@@ -84,9 +84,6 @@
       case Runtime.safari:
         browser = new Safari();
         break;
-      case Runtime.safariMobileSim:
-        browser = new SafariMobileSimulator();
-        break;
       case Runtime.ie9:
       case Runtime.ie10:
       case Runtime.ie11:
@@ -517,69 +514,6 @@
   String toString() => "Chrome";
 }
 
-class SafariMobileSimulator extends Safari {
-  /**
-   * Directories where safari simulator stores state. We delete these if the
-   * resetBrowserConfiguration is set
-   */
-  static const List<String> CACHE_DIRECTORIES = const [
-    "Library/Application Support/iPhone Simulator/7.1/Applications"
-  ];
-
-  // Helper function to delete many directories recursively.
-  Future<bool> deleteIfExists(Iterable<String> paths) async {
-    for (var path in paths) {
-      Directory directory = new Directory(path);
-      if (await directory.exists()) {
-        _logEvent("Deleting $path");
-        try {
-          await directory.delete(recursive: true);
-        } catch (error) {
-          _logEvent("Failure trying to delete $path: $error");
-          return false;
-        }
-      } else {
-        _logEvent("$path is not present");
-      }
-    }
-    return true;
-  }
-
-  // Clears the cache if the static resetBrowserConfiguration flag is set.
-  // Returns false if the command to actually clear the cache did not complete.
-  Future<bool> resetConfiguration() {
-    if (!Browser.resetBrowserConfiguration) return new Future.value(true);
-    var home = Platform.environment['HOME'];
-    var paths = CACHE_DIRECTORIES.map((s) => "$home/$s");
-    return deleteIfExists(paths);
-  }
-
-  Future<bool> start(String url) {
-    _logEvent("Starting safari mobile simulator browser on: $url");
-    return resetConfiguration().then((success) {
-      if (!success) {
-        _logEvent("Could not clear cache, exiting");
-        return false;
-      }
-      var args = [
-        "-SimulateApplication",
-        "/Applications/Xcode.app/Contents/Developer/Platforms/"
-            "iPhoneSimulator.platform/Developer/SDKs/"
-            "iPhoneSimulator7.1.sdk/Applications/MobileSafari.app/"
-            "MobileSafari",
-        "-u",
-        url
-      ];
-      return startBrowserProcess(_binary, args).catchError((e) {
-        _logEvent("Running $_binary --version failed with $e");
-        return false;
-      });
-    });
-  }
-
-  String toString() => "SafariMobileSimulator";
-}
-
 class IE extends Browser {
   Future<String> getVersion() {
     var args = [
diff --git a/tools/testing/dart/configuration.dart b/tools/testing/dart/configuration.dart
index 8d562ce..253e153 100644
--- a/tools/testing/dart/configuration.dart
+++ b/tools/testing/dart/configuration.dart
@@ -179,6 +179,18 @@
     return _servers;
   }
 
+  /// Returns true if this configuration uses the new front end (fasta)
+  /// as the first stage of compilation.
+  bool get usesFasta {
+    var fastaCompilers = const [
+      Compiler.dartk,
+      Compiler.dartkp,
+      Compiler.dartdevk
+    ];
+    return fastaCompilers.contains(compiler) ||
+        compiler == Compiler.dart2js && useDart2JSWithKernel;
+  }
+
   /// Returns true if this configuration is considered Dart 2.0 configuration
   /// by VM (which is identified by using common front-end and strong mode).
   /// In this case instead of invoking VM binary directly we use
@@ -306,11 +318,6 @@
       Runtime.safari: const {
         System.macos: '/Applications/Safari.app/Contents/MacOS/Safari'
       },
-      Runtime.safariMobileSim: const {
-        System.macos: '/Applications/Xcode.app/Contents/Developer/Platforms/'
-            'iPhoneSimulator.platform/Developer/Applications/'
-            'iPhone Simulator.app/Contents/MacOS/iPhone Simulator'
-      },
       Runtime.ie9: const {
         System.windows: 'C:\\Program Files\\Internet Explorer\\iexplore.exe'
       },
@@ -457,6 +464,7 @@
         'csp': isCsp,
         'system': system.name,
         'vm_options': vmOptions,
+        'fasta': usesFasta,
         'use_sdk': useSdk,
         'builder_tag': builderTag,
         'fast_startup': useFastStartup,
@@ -580,7 +588,6 @@
           Runtime.ie11,
           Runtime.opera,
           Runtime.chromeOnAndroid,
-          Runtime.safariMobileSim
         ];
 
       case Compiler.dartdevc:
@@ -716,7 +723,6 @@
   static const ie11 = const Runtime._('ie11');
   static const opera = const Runtime._('opera');
   static const chromeOnAndroid = const Runtime._('chromeOnAndroid');
-  static const safariMobileSim = const Runtime._('safarimobilesim');
   static const contentShellOnAndroid = const Runtime._('ContentShellOnAndroid');
   static const selfCheck = const Runtime._('self_check');
   static const none = const Runtime._('none');
@@ -738,7 +744,6 @@
     ie11,
     opera,
     chromeOnAndroid,
-    safariMobileSim,
     contentShellOnAndroid,
     selfCheck,
     none
@@ -768,7 +773,6 @@
         chrome,
         firefox,
         chromeOnAndroid,
-        safariMobileSim,
         contentShellOnAndroid
       ].contains(this);
 
@@ -803,7 +807,6 @@
       case ie11:
       case opera:
       case chromeOnAndroid:
-      case safariMobileSim:
       case contentShellOnAndroid:
         return Compiler.dart2js;
 
diff --git a/tools/testing/dart/environment.dart b/tools/testing/dart/environment.dart
index 2e98e5f..1b9dc2d 100644
--- a/tools/testing/dart/environment.dart
+++ b/tools/testing/dart/environment.dart
@@ -20,8 +20,9 @@
   "compiler": new _Variable((c) => c.compiler.name, Compiler.names),
   "csp": new _Variable.bool((c) => c.isCsp),
   "dart2js_with_kernel": new _Variable.bool((c) => c.useDart2JSWithKernel),
-  "fast_startup": new _Variable.bool((c) => c.useFastStartup),
   "enable_asserts": new _Variable.bool((c) => c.useEnableAsserts),
+  "fast_startup": new _Variable.bool((c) => c.useFastStartup),
+  "fasta": new _Variable.bool((c) => c.usesFasta),
   "host_checked": new _Variable.bool((c) => c.isHostChecked),
   "host_unchecked": new _Variable.bool((c) => !c.isHostChecked),
   "hot_reload": new _Variable.bool((c) => c.hotReload),
diff --git a/tools/testing/dart/runtime_configuration.dart b/tools/testing/dart/runtime_configuration.dart
index 9f43481..c7482f3 100644
--- a/tools/testing/dart/runtime_configuration.dart
+++ b/tools/testing/dart/runtime_configuration.dart
@@ -29,7 +29,6 @@
       case Runtime.ie9:
       case Runtime.opera:
       case Runtime.safari:
-      case Runtime.safariMobileSim:
         // TODO(ahe): Replace this with one or more browser runtimes.
         return new DummyRuntimeConfiguration();
 
diff --git a/tools/testing/dart/status_reporter.dart b/tools/testing/dart/status_reporter.dart
index 37ea7dc..0f33e17 100644
--- a/tools/testing/dart/status_reporter.dart
+++ b/tools/testing/dart/status_reporter.dart
@@ -54,7 +54,7 @@
       'compiler': 'none'
     },
     {
-      'runtimes': ['safari', 'safarimobilesim'],
+      'runtimes': ['safari'],
       'modes': ['release'],
       'archs': ['ia32'],
       'compiler': 'dart2js'
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index 0bc7943..1867b2a 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -586,13 +586,10 @@
     if (!useSdk) {
       _dart2JsBootstrapDependencies = [];
     } else {
-      var snapshotPath = new Path(buildDir)
-          .join(new Path('dart-sdk/bin/snapshots/'
-              'utils_wrapper.dart.snapshot'))
-          .absolute
-          .toString();
       _dart2JsBootstrapDependencies = [
-        new Uri(scheme: 'file', path: snapshotPath)
+        Uri.base
+            .resolveUri(new Uri.directory(buildDir))
+            .resolve('dart-sdk/bin/snapshots/dart2js.dart.snapshot')
       ];
     }
   }
diff --git a/utils/application_snapshot.gni b/utils/application_snapshot.gni
index fa28255..10f3a35 100644
--- a/utils/application_snapshot.gni
+++ b/utils/application_snapshot.gni
@@ -18,6 +18,10 @@
 template("application_snapshot") {
   assert(defined(invoker.main_dart), "Must specify 'main_dart'")
   assert(defined(invoker.training_args), "Must specify 'training_args'")
+  vm_args = []
+  if (defined(invoker.vm_args)) {
+    vm_args = invoker.vm_args
+  }
   main_dart = invoker.main_dart
   training_args = invoker.training_args
   name = target_name
@@ -59,7 +63,7 @@
       "--packages=$dot_packages",
       "--snapshot=$abs_output",
       "--snapshot-depfile=$abs_depfile",
-    ]
+    ] + vm_args
 
     if (dart_snapshot_kind == "script") {
       args += [
diff --git a/utils/compiler/BUILD.gn b/utils/compiler/BUILD.gn
index 391a10b..36ede78 100644
--- a/utils/compiler/BUILD.gn
+++ b/utils/compiler/BUILD.gn
@@ -25,7 +25,7 @@
   output = "$target_gen_dir/dartdoc_files.stamp"
 }
 
-compiled_action("dart2js_create_snapshot_entries") {
+compiled_action("dart2js_create_snapshot_entry") {
   tool = "../../runtime/bin:dart"
   deps = [
     ":dart2js_files_stamp",
@@ -44,11 +44,8 @@
     "../../tools/VERSION",
   ]
 
-  utils_output = "$target_gen_dir/utils_wrapper.dart"
-  dart2js_output = "$target_gen_dir/dart2js.dart"
   outputs = [
-    utils_output,
-    dart2js_output,
+    "$target_gen_dir/dart2js.dart"
   ]
 
   args = [
@@ -61,8 +58,9 @@
 
 application_snapshot("dart2js") {
   deps = [
-    ":dart2js_create_snapshot_entries",
+    ":dart2js_create_snapshot_entry",
   ]
+  vm_args = ["--no_limit_ints_to_64_bits"]
   main_dart = "$target_gen_dir/dart2js.dart"
   training_args = [
     "--packages=" + rebase_path("../../.packages"),
@@ -72,14 +70,6 @@
   ]
 }
 
-application_snapshot("utils_wrapper") {
-  deps = [
-    ":dart2js_create_snapshot_entries",
-  ]
-  main_dart = "$target_gen_dir/utils_wrapper.dart"
-  training_args = [ "--help" ]
-}
-
 compile_platform("compile_dart2js_platform") {
   sources = [
     "../../sdk/lib/libraries.json",
diff --git a/utils/compiler/create_snapshot.dart b/utils/compiler/create_snapshot.dart
deleted file mode 100644
index d36b792..0000000
--- a/utils/compiler/create_snapshot.dart
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io';
-
-Future<String> getVersion(var rootPath) {
-  var suffix = Platform.operatingSystem == 'windows' ? '.exe' : '';
-  var printVersionScript = rootPath.resolve("tools/print_version.py");
-  return Process
-      .run("python$suffix", [printVersionScript.toFilePath()]).then((result) {
-    if (result.exitCode != 0) {
-      throw "Could not generate version";
-    }
-    return result.stdout.trim();
-  });
-}
-
-Future<String> getSnapshotGenerationFile(var args, var rootPath) {
-  var dart2js = rootPath.resolve(args["dart2js_main"]);
-  return getVersion(rootPath).then((version) {
-    var snapshotGenerationText = """
-import '${dart2js.toFilePath(windows: false)}' as dart2jsMain;
-import 'dart:io';
-
-void main(List<String> arguments) {
-  if (arguments.length < 1) throw "No tool given as argument";
-  String tool = arguments[0];
-  if (tool == "dart2js") {
-    dart2jsMain.BUILD_ID = "$version";
-    dart2jsMain.main(arguments.skip(1).toList());
-  }
-}
-
-""";
-    return snapshotGenerationText;
-  });
-}
-
-Future<String> getDart2jsSnapshotGenerationFile(var args, var rootPath) {
-  var dart2js = rootPath.resolve(args["dart2js_main"]);
-  return getVersion(rootPath).then((version) {
-    var snapshotGenerationText = """
-import '${dart2js.toFilePath(windows: false)}' as dart2jsMain;
-
-void main(List<String> arguments) {
-  dart2jsMain.BUILD_ID = "$version";
-  dart2jsMain.main(arguments);
-}
-""";
-    return snapshotGenerationText;
-  });
-}
-
-void writeSnapshotFile(var path, var content) {
-  File file = new File(path);
-  var writer = file.openSync(mode: FileMode.WRITE);
-  writer.writeStringSync(content);
-  writer.close();
-}
-
-Future createSnapshot(var dart_file) {
-  return Process.run(Platform.executable, [
-    "--packages=../../.packages",
-    "--snapshot=$dart_file.snapshot",
-    dart_file
-  ]).then((result) {
-    if (result.exitCode != 0) {
-      print("Could not generate snapshot: result code ${result.exitCode}");
-      print(result.stdout);
-      print(result.stderr);
-      throw "Could not generate snapshot";
-    }
-  });
-}
-
-/**
- * Takes the following arguments:
- * --output_dir=val     The full path to the output_dir.
- * --dart2js_main=val   The path to the dart2js main script relative to root.
- */
-void main(List<String> arguments) {
-  var validArguments = ["--output_dir", "--dart2js_main"];
-  var args = {};
-  for (var argument in arguments) {
-    var argumentSplit = argument.split("=");
-    if (argumentSplit.length != 2) throw "Invalid argument $argument, no =";
-    if (!validArguments.contains(argumentSplit[0])) {
-      throw "Invalid argument $argument";
-    }
-    args[argumentSplit[0].substring(2)] = argumentSplit[1];
-  }
-  if (!args.containsKey("dart2js_main")) throw "Please specify dart2js_main";
-  if (!args.containsKey("output_dir")) throw "Please specify output_dir";
-
-  var scriptFile = Uri.base.resolveUri(Platform.script);
-  var path = scriptFile.resolve(".");
-  var rootPath = path.resolve("../..");
-  getSnapshotGenerationFile(args, rootPath).then((result) {
-    var wrapper = "${args['output_dir']}/utils_wrapper.dart";
-    writeSnapshotFile(wrapper, result);
-    createSnapshot(wrapper);
-  });
-
-  getDart2jsSnapshotGenerationFile(args, rootPath).then((result) {
-    var wrapper = "${args['output_dir']}/dart2js.dart";
-    writeSnapshotFile(wrapper, result);
-    createSnapshot(wrapper);
-  });
-}
diff --git a/utils/compiler/create_snapshot_entry.dart b/utils/compiler/create_snapshot_entry.dart
index 99fb301..2c6497b 100644
--- a/utils/compiler/create_snapshot_entry.dart
+++ b/utils/compiler/create_snapshot_entry.dart
@@ -2,6 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+/// Generates a wrapper around dart2js to ship with the SDK.
+///
+/// The only reason to create this wrapper is to be able to embed the sdk
+/// version information into the compiler.
 import 'dart:io';
 import 'dart:async';
 
@@ -17,27 +21,6 @@
   });
 }
 
-Future<String> getSnapshotGenerationFile(var args, var rootPath) {
-  var dart2js = rootPath.resolve(args["dart2js_main"]);
-  return getVersion(rootPath).then((version) {
-    var snapshotGenerationText = """
-import '${dart2js.toFilePath(windows: false)}' as dart2jsMain;
-import 'dart:io';
-
-void main(List<String> arguments) {
-  if (arguments.length < 1) throw "No tool given as argument";
-  String tool = arguments[0];
-  if (tool == "dart2js") {
-    dart2jsMain.BUILD_ID = "$version";
-    dart2jsMain.main(arguments.skip(1).toList());
-  }
-}
-
-""";
-    return snapshotGenerationText;
-  });
-}
-
 Future<String> getDart2jsSnapshotGenerationFile(var args, var rootPath) {
   var dart2js = rootPath.resolve(args["dart2js_main"]);
   return getVersion(rootPath).then((version) {
@@ -53,13 +36,6 @@
   });
 }
 
-void writeSnapshotFile(var path, var content) {
-  File file = new File(path);
-  var writer = file.openSync(mode: FileMode.WRITE);
-  writer.writeStringSync(content);
-  writer.close();
-}
-
 /**
  * Takes the following arguments:
  * --output_dir=val     The full path to the output_dir.
@@ -82,13 +58,9 @@
   var scriptFile = Uri.base.resolveUri(Platform.script);
   var path = scriptFile.resolve(".");
   var rootPath = path.resolve("../..");
-  getSnapshotGenerationFile(args, rootPath).then((result) {
-    var wrapper = "${args['output_dir']}/utils_wrapper.dart";
-    writeSnapshotFile(wrapper, result);
-  });
 
   getDart2jsSnapshotGenerationFile(args, rootPath).then((result) {
     var wrapper = "${args['output_dir']}/dart2js.dart";
-    writeSnapshotFile(wrapper, result);
+    new File(wrapper).writeAsStringSync(result);
   });
 }
diff --git a/utils/kernel-service/BUILD.gn b/utils/kernel-service/BUILD.gn
index dbd42c6..e31406d 100644
--- a/utils/kernel-service/BUILD.gn
+++ b/utils/kernel-service/BUILD.gn
@@ -5,6 +5,8 @@
 import("../../build/dart_host_sdk_toolchain.gni")
 import("../application_snapshot.gni")
 
+# TODO: Switch this to use kernel based app-jit snapshot
+# when we are ready to switch to the kernel based core snapshots.
 application_snapshot("kernel-service") {
   main_dart = "../../pkg/vm/bin/kernel_service.dart"
   deps = [
@@ -15,3 +17,47 @@
     "file://" + rebase_path("../../pkg/compiler/lib/src/dart2js.dart"),
   ]
 }
+
+copy("copy_kernel_service_snapshot") {
+  deps = [
+    ":kernel-service",
+  ]
+  sources = [
+    rebase_path("$root_gen_dir/kernel-service.dart.snapshot"),
+  ]
+  outputs = [
+    "$root_out_dir/kernel-service.dart.snapshot",
+  ]
+}
+
+compiled_action("kernel_service_dill") {
+  deps = [
+    "../../runtime/vm:vm_legacy_platform",
+  ]
+  tool = "../../runtime/bin:dart_bootstrap"
+  kernel_service_script = "../../pkg/vm/bin/kernel_service.dart"
+  gen_kernel_script = "../../pkg/vm/bin/gen_kernel.dart"
+
+  inputs = [
+    gen_kernel_script,
+    kernel_service_script,
+    "$root_out_dir/vm_platform.dill",
+  ]
+  outputs = [
+    "$root_gen_dir/kernel_service.dill",
+  ]
+
+  # TODO: Switch over to vm_platform_strong.dill and remove the
+  # flags --no-strong-mode once https://github.com/dart-lang/sdk/issues/31623
+  # is fixed.
+  args = [
+    rebase_path(gen_kernel_script),
+    "--packages=file:///" + rebase_path("../../.packages"),
+    "--platform=file:///" + 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),
+  ]
+}
