Version 2.0.0-dev.10.0

Merge commit 'f53fe4db539121382aca317296d35bf93280998a' into dev
diff --git a/.packages b/.packages
index aa7918c..a2dd24e 100644
--- a/.packages
+++ b/.packages
@@ -101,6 +101,7 @@
 unittest:third_party/pkg/unittest/lib
 usage:third_party/pkg/usage/lib
 utf:third_party/pkg/utf/lib
+vm:pkg/vm/lib
 watcher:third_party/pkg/watcher/lib
 # Note: this is pointing to the observatory_pub_packages version of pkg/observe
 web_components:third_party/observatory_pub_packages/packages/web_components/lib
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 5d4e4e1..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,99 +0,0 @@
-language: dart
-sudo: required
-dist: trusty
-dart:
-  - dev
-cache:
-  directories:
-    - $HOME/.npm
-    - $HOME/.nvm
-    - $HOME/.pub-cache/hosted
-    - pkg/dev_compiler/node_modules
-addons:
-  firefox: latest
-before_install:
-  # g++4.8.1 setup
-  - if [ "$CXX" == "g++" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi
-
-  # clang 3.4 setup
-  - if [ "$CXX" == "clang++" ]; then sudo add-apt-repository -y ppa:h-rayflood/llvm; fi
-
-  - sudo apt-get update -qq
-
-  # g++4.8.1 install
-  - if [ "$CXX" = "g++" ]; then sudo apt-get install -qq g++-4.8; fi
-  - if [ "$CXX" = "g++" ]; then export CXX="g++-4.8"; fi
-
-  # clang 3.4 install
-  - if [ "$CXX" == "clang++" ]; then sudo apt-get install --allow-unauthenticated -qq clang-3.4; fi
-  - if [ "$CXX" == "clang++" ]; then export CXX="clang++-3.4"; fi
-
-  - if [ "$CXX" ]; then $CXX --version ; fi
-
-  # Chrome install
-  - wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
-  - wget https://dl.google.com/linux/direct/google-chrome-unstable_current_amd64.deb
-  - sudo dpkg -i google-chrome*.deb
-  - /usr/bin/google-chrome --version
-  - export CHROME_BIN=/usr/bin/google-chrome
-  - /usr/bin/google-chrome-unstable --version
-  - export CHROME_CANARY_BIN=/usr/bin/google-chrome-unstable
-
-  # Install Depot Tools
-  - git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
-  - export PATH=`pwd`/depot_tools:"$PATH"
-
-  # Checkout everything to pull in sdk and third_party dart packages
-  - cd ..
-  - 'gclient config --spec=''solutions = [ { "name": "sdk", "url": "git@github.com:dart-lang/sdk.git", "deps_file": "DEPS", "managed": False } ]'''
-  - gclient sync -n
-  - download_from_google_storage --no_auth --no_resume --bucket dart-dependencies --extract -s sdk/third_party/pkg/unittest.tar.gz.sha1
-  - cd sdk
-
-  # If a C++ compiler is set, run hooks and build the SDK - else use the preinstalled SDK instead.
-  - export DART_USE_GYP=1
-  - if [ "$CXX" ]; then gclient runhooks ; fi
-  - if [ "$CXX" ]; then ./tools/build.py -m release create_sdk ; fi
-  - if [ "$CXX" ]; then export PATH=`pwd`/out/ReleaseX64/dart-sdk/bin:"$PATH" ; fi
-  - dart --version
-
-  # DDC setup
-  - cd pkg/dev_compiler
-  - pub global activate dart_coveralls
-  - export DISPLAY=:99.0
-  - sh -e /etc/init.d/xvfb start
-install:
-  # Empty to suppress default pub get behavior
-before_script:
-  # Node modules used by DDC
-  - nvm install 6.9.1
-  - npm install
-script:
-  # Run DDC tests
-  - if [[ -z "$TEST" ]]; then ./tool/presubmit.sh ; fi
-  - if [[ "$TEST" == sdk ]]; then ./tool/build_sdk.sh && git diff --exit-code ; fi
-  - if [[ "$TEST" == coverage ]]; then ./tool/build_sdk.sh && ./tool/coverage.sh ; fi
-  - if [[ "$TEST" == node ]]; then ./tool/node_test.sh ; fi
-  - if [[ "$TEST" == package ]]; then ./tool/build_sdk.sh && ./tool/build_pkgs.dart --analyzer-sdk=gen/sdk/ddc_gen.sum --output=gen/codegen_output/pkg --travis; fi
-env:
-  - ANALYZER=master DDC_BROWSERS=ChromeTravis
-  - ANALYZER=master DDC_BROWSERS=Firefox
-  - ANALYZER=master DDC_BROWSERS=ChromeCanaryTravis
-  # TODO(vsm): We don't get much value from this for DDC & it eats up travis
-  # cycles.  Consider adding back at some point to test the built dartdevc
-  # snapshot.
-  # - ANALYZER=master CXX=clang++
-  - TEST=sdk
-  - TEST=coverage
-  - TEST=package
-matrix:
-  allow_failures:
-    - env: ANALYZER=master CXX=clang++
-    - env: ANALYZER=master DDC_BROWSERS=ChromeTravis
-    - env: ANALYZER=master DDC_BROWSERS=ChromeCanaryTravis
-    - env: ANALYZER=master DDC_BROWSERS=Firefox
-notifications:
-  email:
-    recipients:
-      - dev-compiler+buildbot@dartlang.org
-    on_failure: change
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 99d74b0..2db006c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -88,6 +88,9 @@
 * `dart:isolate`
   * Rename `IMMEDIATE` and `BEFORE_NEXT_EVENT` on `Isolate` to `immediate` and
     `beforeNextEvent`.
+  * Make `Isolate.spawn` take a type parameter representing the argument type
+    of the provided function. This allows functions with arguments types other
+    than `Object` in strong mode.
 
 * `dart.math`
   * Renamed `E`, `LN10`, `LN`, `LOG2E`, `LOG10E`, `PI`, `SQRT1_2` and `SQRT2`
diff --git a/DEPS b/DEPS
index c805bda..7b396d4 100644
--- a/DEPS
+++ b/DEPS
@@ -52,7 +52,7 @@
   "barback_tag" : "@0.15.2+13",
   "bazel_worker_tag": "@v0.1.4",
   "boolean_selector_tag" : "@1.0.2",
-  "boringssl_gen_rev": "@753224969dbe43dad29343146529727b5066c0f3",
+  "boringssl_gen_rev": "@d2b56d1b7657e52eb5a1f075968c773aa3e53614",
   "boringssl_rev" : "@d519bf6be0b447fb80fbc539d4bff4479b5482a2",
   "charcode_tag": "@v1.1.1",
   "chrome_rev" : "@19997",
@@ -91,7 +91,7 @@
   "isolate_tag": "@1.1.0",
   "jinja2_rev": "@2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_tag": "@2.0.4",
-  "linter_tag": "@0.1.39",
+  "linter_tag": "@0.1.40",
   "logging_tag": "@0.11.3+1",
   "markdown_tag": "@0.11.4",
   "matcher_tag": "@0.12.1+4",
@@ -456,14 +456,28 @@
     'name': 'sysroot_i386',
     'pattern': '.',
     'action': ['python', 'sdk/build/linux/sysroot_scripts/install-sysroot.py',
-               '--running-as-hook', '--arch', 'i386'],
+               '--arch', 'i386'],
   },
   {
     # Pull Debian wheezy sysroot for amd64 Linux
     'name': 'sysroot_amd64',
     'pattern': '.',
     'action': ['python', 'sdk/build/linux/sysroot_scripts/install-sysroot.py',
-               '--running-as-hook', '--arch', 'amd64'],
+               '--arch', 'amd64'],
+  },
+  {
+    # Pull Debian wheezy sysroot for arm Linux
+    'name': 'sysroot_amd64',
+    'pattern': '.',
+    'action': ['python', 'sdk/build/linux/sysroot_scripts/install-sysroot.py',
+               '--arch', 'arm'],
+  },
+  {
+    # Pull Debian jessie sysroot for arm64 Linux
+    'name': 'sysroot_amd64',
+    'pattern': '.',
+    'action': ['python', 'sdk/build/linux/sysroot_scripts/install-sysroot.py',
+               '--arch', 'arm64'],
   },
   {
     'name': 'download_android_tools',
diff --git a/build/.gitignore b/build/.gitignore
index 56c0181..512a659 100644
--- a/build/.gitignore
+++ b/build/.gitignore
@@ -2,5 +2,8 @@
 win_toolchain.json
 
 # Pulled Debian wheezy sysroots
+linux/debian_jessie_arm-sysroot
+linux/debian_jessie_arm64-sysroot
 linux/debian_wheezy_amd64-sysroot
+linux/debian_wheezy_arm-sysroot
 linux/debian_wheezy_i386-sysroot
diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn
index 462aaa5..4dfbaf6 100644
--- a/build/config/BUILDCONFIG.gn
+++ b/build/config/BUILDCONFIG.gn
@@ -219,6 +219,7 @@
 # duplication in each target below.
 _native_compiler_configs = [
   "//build/config/compiler:compiler",
+  "//build/config/compiler:clang_stackrealign",
   "//build/config/compiler:compiler_arm_fpu",
   "//build/config/compiler:chromium_code",
   "//build/config/compiler:default_include_dirs",
@@ -252,7 +253,6 @@
 
 if (is_clang) {
   _native_compiler_configs += [
-    "//build/config/clang:find_bad_constructs",
     "//build/config/clang:extra_warnings",
   ]
 }
diff --git a/build/config/clang/BUILD.gn b/build/config/clang/BUILD.gn
index 6dff486..c11ef19 100644
--- a/build/config/clang/BUILD.gn
+++ b/build/config/clang/BUILD.gn
@@ -2,54 +2,6 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import("clang.gni")
-
-config("find_bad_constructs") {
-  if (clang_use_chrome_plugins) {
-    cflags = []
-
-    # On Windows, the plugin is built directly into clang, so there's
-    # no need to load it dynamically.
-
-    if (is_mac || is_ios) {
-      cflags += [
-        "-Xclang",
-        "-load",
-        "-Xclang",
-        rebase_path(
-            "//third_party/llvm-build/Release+Asserts/lib/libFindBadConstructs.dylib",
-            root_build_dir),
-      ]
-    } else if (is_linux) {
-      cflags += [
-        "-Xclang",
-        "-load",
-        "-Xclang",
-        rebase_path(
-            "//third_party/llvm-build/Release+Asserts/lib/libFindBadConstructs.so",
-            root_build_dir),
-      ]
-    }
-
-    # https://crbug.com/441916
-    if (is_android || is_linux || is_mac) {
-      cflags += [
-        "-Xclang",
-        "-plugin-arg-find-bad-constructs",
-        "-Xclang",
-        "check-templates",
-      ]
-    }
-
-    cflags += [
-      "-Xclang",
-      "-add-plugin",
-      "-Xclang",
-      "find-bad-constructs",
-    ]
-  }
-}
-
 # Enables some extra Clang-specific warnings. Some third-party code won't
 # compile with these so may want to remove this config.
 config("extra_warnings") {
diff --git a/build/config/clang/clang.gni b/build/config/clang/clang.gni
deleted file mode 100644
index 3893ca3..0000000
--- a/build/config/clang/clang.gni
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-declare_args() {
-  # Indicates if the build should use the Chrome-specific plugins for enforcing
-  # coding guidelines, etc. Only used when compiling with Clang.
-  clang_use_chrome_plugins = false
-}
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 8d9e79e..12dca5d 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -187,10 +187,6 @@
           # Else building libyuv gives clang's register allocator issues,
           # see llvm.org/PR15798 / crbug.com/233709
           "-mno-omit-leaf-frame-pointer",
-
-          # Align the stack on 16-byte boundaries, http://crbug.com/418554.
-          "-mstack-alignment=16",
-          "-mstackrealign",
         ]
       }
     } else if (current_cpu == "arm") {
@@ -254,6 +250,15 @@
   if (is_linux) {
     cflags += [ "-pthread" ]
     ldflags += [ "-pthread" ]
+    if (is_clang) {
+      if (current_cpu == "arm") {
+        cflags += [ "--target=arm-linux-gnueabihf" ]
+        ldflags += [ "--target=arm-linux-gnueabihf" ]
+      } else if (current_cpu == "arm64") {
+        cflags += [ "--target=aarch64-linux-gnu" ]
+        ldflags += [ "--target=aarch64-linux-gnu" ]
+      }
+    }
   }
 
   # Clang-specific compiler flags setup.
@@ -353,6 +358,20 @@
   }
 }
 
+# This is separate from :compiler_codegen (and not even a sub-config there)
+# so that some targets can remove it from the list with:
+#   configs -= [ "//build/config/compiler:clang_stackrealign" ]
+# See https://crbug.com/556393 for details of where it must be avoided.
+config("clang_stackrealign") {
+  if (is_clang && current_cpu == "x86" && !is_nacl) {
+    cflags = [
+      # Align the stack on 16-byte boundaries, http://crbug.com/418554.
+      "-mstack-alignment=16",
+      "-mstackrealign",
+    ]
+ }
+}
+
 config("compiler_arm_fpu") {
   if (current_cpu == "arm") {
     cflags = [ "-mfpu=$arm_fpu" ]
diff --git a/build/config/sysroot.gni b/build/config/sysroot.gni
index 1eed2e8..478f369 100644
--- a/build/config/sysroot.gni
+++ b/build/config/sysroot.gni
@@ -19,6 +19,10 @@
     target_sysroot = rebase_path("//build/linux/debian_wheezy_i386-sysroot")
   } else if (current_cpu == "x64") {
     target_sysroot = rebase_path("//build/linux/debian_wheezy_amd64-sysroot")
+  } else if (current_cpu == "arm") {
+    target_sysroot = rebase_path("//build/linux/debian_wheezy_arm-sysroot")
+  } else if (current_cpu == "arm64") {
+    target_sysroot = rebase_path("//build/linux/debian_jessie_arm64-sysroot")
   } else {
     print("There is no Debian wheezy sysroot present for $current_cpu")
     assert(false)
diff --git a/build/detect_host_arch.py b/build/detect_host_arch.py
index 19579eb..cb61ec7 100755
--- a/build/detect_host_arch.py
+++ b/build/detect_host_arch.py
@@ -21,6 +21,15 @@
     host_arch = 'x64'
   elif host_arch.startswith('arm'):
     host_arch = 'arm'
+  elif host_arch.startswith('aarch64'):
+    host_arch = 'arm64'
+  elif host_arch.startswith('mips'):
+    host_arch = 'mips'
+  elif host_arch.startswith('ppc'):
+    host_arch = 'ppc'
+  elif host_arch.startswith('s390'):
+    host_arch = 's390'
+
 
   # platform.machine is based on running kernel. It's possible to use 64-bit
   # kernel with 32-bit userland, e.g. to give linker slightly more memory.
@@ -28,13 +37,15 @@
   # the python binary.
   if host_arch == 'x64' and platform.architecture()[0] == '32bit':
     host_arch = 'ia32'
+  if host_arch == 'arm64' and platform.architecture()[0] == '32bit':
+    host_arch = 'arm'
 
   return host_arch
 
+
 def DoMain(_):
   """Hook to be called from gyp without starting a separate python
   interpreter."""
   return HostArch()
-
 if __name__ == '__main__':
   print DoMain([])
diff --git a/build/linux/sysroot_scripts/README.dart.md b/build/linux/sysroot_scripts/README.dart.md
new file mode 100644
index 0000000..c71ad34
--- /dev/null
+++ b/build/linux/sysroot_scripts/README.dart.md
@@ -0,0 +1,5 @@
+This directory contains a script and a json file describing the sysroots that
+Dart downloads and builds against on Linux. Dart uses the sysroots vended by
+Chromium. See:
+
+https://chromium.googlesource.com/chromium/src/build/+/master/linux/sysroot_scripts
diff --git a/build/linux/sysroot_scripts/install-sysroot.py b/build/linux/sysroot_scripts/install-sysroot.py
index f305f26..2fc9d53 100755
--- a/build/linux/sysroot_scripts/install-sysroot.py
+++ b/build/linux/sysroot_scripts/install-sysroot.py
@@ -3,19 +3,22 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-# Script to install a Debian Wheezy sysroot for making official Google Chrome
-# Linux builds.
-# The sysroot is needed to make Chrome work for Debian Wheezy.
-# This script can be run manually but is more often run as part of gclient
-# hooks. When run from hooks this script should be a no-op on non-linux
-# platforms.
+"""Install Debian sysroots for building chromium.
+"""
+
+# The sysroot is needed to ensure that binaries will run on Debian Wheezy,
+# the oldest supported linux distribution. For ARM64 linux, we have Debian
+# Jessie sysroot as Jessie is the first version with ARM64 support. This script
+# can be run manually but is more often run as part of gclient hooks. When run
+# from hooks this script is a no-op on non-linux platforms.
 
 # The sysroot image could be constructed from scratch based on the current
-# state or Debian Wheezy but for consistency we currently use a pre-built root
-# image. The image will normally need to be rebuilt every time chrome's build
-# dependancies are changed.
+# state or Debian Wheezy/Jessie but for consistency we currently use a
+# pre-built root image. The image will normally need to be rebuilt every time
+# chrome's build dependencies are changed.
 
 import hashlib
+import json
 import platform
 import optparse
 import os
@@ -23,29 +26,21 @@
 import shutil
 import subprocess
 import sys
-
+import urllib2
 
 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
-URL_PREFIX = 'http://storage.googleapis.com'
-URL_PATH = 'chrome-linux-sysroot/toolchain'
-REVISION_AMD64 = 'a2d45701cb21244b9514e420950ba6ba687fb655'
-REVISION_ARM = 'a2d45701cb21244b9514e420950ba6ba687fb655'
-REVISION_I386 = 'a2d45701cb21244b9514e420950ba6ba687fb655'
-REVISION_MIPS = '7749d2957387abf225b6d45154c3ddad142148dc'
-TARBALL_AMD64 = 'debian_wheezy_amd64_sysroot.tgz'
-TARBALL_ARM = 'debian_wheezy_arm_sysroot.tgz'
-TARBALL_I386 = 'debian_wheezy_i386_sysroot.tgz'
-TARBALL_MIPS = 'debian_wheezy_mips_sysroot.tgz'
-TARBALL_AMD64_SHA1SUM = '601216c0f980e798e7131635f3dd8171b3dcbcde'
-TARBALL_ARM_SHA1SUM = '6289593b36616526562a4d85ae9c92b694b8ce7e'
-TARBALL_I386_SHA1SUM = '0090e5a4b56ab9ffb5d557da6a520195ab59b446'
-TARBALL_MIPS_SHA1SUM = '3b4d782a237db4aac185a638572a7747c1a21825'
-SYSROOT_DIR_AMD64 = 'debian_wheezy_amd64-sysroot'
-SYSROOT_DIR_ARM = 'debian_wheezy_arm-sysroot'
-SYSROOT_DIR_I386 = 'debian_wheezy_i386-sysroot'
-SYSROOT_DIR_MIPS = 'debian_wheezy_mips-sysroot'
+sys.path.append(os.path.dirname(os.path.dirname(SCRIPT_DIR)))
+import detect_host_arch
 
-valid_archs = ('arm', 'i386', 'amd64', 'mips')
+
+URL_PREFIX = 'https://commondatastorage.googleapis.com'
+URL_PATH = 'chrome-linux-sysroot/toolchain'
+
+VALID_ARCHS = ('arm', 'arm64', 'i386', 'amd64', 'mips')
+
+
+class Error(Exception):
+  pass
 
 
 def GetSha1(filename):
@@ -60,25 +55,9 @@
   return sha1.hexdigest()
 
 
-def DetectArch(gyp_defines):
-  # Check for optional target_arch and only install for that architecture.
-  # If target_arch is not specified, then only install for the host
-  # architecture.
-  if 'target_arch=x64' in gyp_defines:
-    return 'amd64'
-  elif 'target_arch=ia32' in gyp_defines:
-    return 'i386'
-  elif 'target_arch=arm' in gyp_defines:
-    return 'arm'
-  elif 'target_arch=mipsel' in gyp_defines:
-    return 'mips'
-
+def DetectHostArch():
   # Figure out host arch using build/detect_host_arch.py and
   # set target_arch to host arch
-  build_dir = os.path.dirname(os.path.dirname(os.path.join(SCRIPT_DIR)))
-  sys.path.append(build_dir)
-  import detect_host_arch
-
   detected_host_arch = detect_host_arch.HostArch()
   if detected_host_arch == 'x64':
     return 'amd64'
@@ -86,55 +65,65 @@
     return 'i386'
   elif detected_host_arch == 'arm':
     return 'arm'
+  elif detected_host_arch == 'arm64':
+    return 'arm64'
   elif detected_host_arch == 'mips':
     return 'mips'
-  else:
-    print "Unknown host arch: %s" % detected_host_arch
+  elif detected_host_arch == 'ppc':
+    return 'ppc'
+  elif detected_host_arch == 's390':
+    return 's390'
 
-  return None
+  raise Error('Unrecognized host arch: %s' % detected_host_arch)
 
 
-def main():
-  if options.running_as_hook and not sys.platform.startswith('linux'):
+def main(args):
+  parser = optparse.OptionParser('usage: %prog [OPTIONS]', description=__doc__)
+  parser.add_option('--arch', type='choice', choices=VALID_ARCHS,
+                    help='Sysroot architecture: %s' % ', '.join(VALID_ARCHS))
+  options, _ = parser.parse_args(args)
+  if not sys.platform.startswith('linux'):
     return 0
 
-  gyp_defines = os.environ.get('GYP_DEFINES', '')
+  if not options.arch:
+    print 'You much specify either --arch or --running-as-hook'
+    return 1
+  InstallDefaultSysrootForArch(options.arch)
 
-  if options.arch:
-    target_arch = options.arch
+  return 0
+
+
+def InstallDefaultSysrootForArch(target_arch):
+  if target_arch == 'amd64':
+    InstallSysroot('Wheezy', 'amd64')
+  elif target_arch == 'arm':
+    InstallSysroot('Wheezy', 'arm')
+  elif target_arch == 'arm64':
+    InstallSysroot('Jessie', 'arm64')
+  elif target_arch == 'i386':
+    InstallSysroot('Wheezy', 'i386')
+  elif target_arch == 'mips':
+    InstallSysroot('Wheezy', 'mips')
   else:
-    target_arch = DetectArch(gyp_defines)
-    if not target_arch:
-      print 'Unable to detect host architecture'
-      return 1
+    raise Error('Unknown architecture: %s' % target_arch)
 
+
+def InstallSysroot(target_platform, target_arch):
   # The sysroot directory should match the one specified in build/common.gypi.
-  # TODO(thestig) Consider putting this else where to avoid having to recreate
+  # TODO(thestig) Consider putting this elsewhere to avoid having to recreate
   # it on every build.
   linux_dir = os.path.dirname(SCRIPT_DIR)
-  if target_arch == 'amd64':
-    sysroot = os.path.join(linux_dir, SYSROOT_DIR_AMD64)
-    tarball_filename = TARBALL_AMD64
-    tarball_sha1sum = TARBALL_AMD64_SHA1SUM
-    revision = REVISION_AMD64
-  elif target_arch == 'arm':
-    sysroot = os.path.join(linux_dir, SYSROOT_DIR_ARM)
-    tarball_filename = TARBALL_ARM
-    tarball_sha1sum = TARBALL_ARM_SHA1SUM
-    revision = REVISION_ARM
-  elif target_arch == 'i386':
-    sysroot = os.path.join(linux_dir, SYSROOT_DIR_I386)
-    tarball_filename = TARBALL_I386
-    tarball_sha1sum = TARBALL_I386_SHA1SUM
-    revision = REVISION_I386
-  elif target_arch == 'mips':
-    sysroot = os.path.join(linux_dir, SYSROOT_DIR_MIPS)
-    tarball_filename = TARBALL_MIPS
-    tarball_sha1sum = TARBALL_MIPS_SHA1SUM
-    revision = REVISION_MIPS
-  else:
-    print 'Unknown architecture: %s' % target_arch
-    assert(False)
+
+  sysroots_file = os.path.join(SCRIPT_DIR, 'sysroots.json')
+  sysroots = json.load(open(sysroots_file))
+  sysroot_key = '%s_%s' % (target_platform.lower(), target_arch)
+  if sysroot_key not in sysroots:
+    raise Error('No sysroot for: %s %s' % (target_platform, target_arch))
+  sysroot_dict = sysroots[sysroot_key]
+  revision = sysroot_dict['Revision']
+  tarball_filename = sysroot_dict['Tarball']
+  tarball_sha1sum = sysroot_dict['Sha1Sum']
+  sysroot = os.path.join(linux_dir, sysroot_dict['SysrootDir'])
 
   url = '%s/%s/%s/%s' % (URL_PREFIX, URL_PATH, revision, tarball_filename)
 
@@ -142,11 +131,12 @@
   if os.path.exists(stamp):
     with open(stamp) as s:
       if s.read() == url:
-        print 'Debian Wheezy %s root image already up-to-date: %s' % \
-            (target_arch, sysroot)
-        return 0
+        print '%s %s sysroot image already up to date: %s' % \
+            (target_platform, target_arch, sysroot)
+        return
 
-  print 'Installing Debian Wheezy %s root image: %s' % (target_arch, sysroot)
+  print 'Installing Debian %s %s root image: %s' % \
+      (target_platform, target_arch, sysroot)
   if os.path.isdir(sysroot):
     shutil.rmtree(sysroot)
   os.mkdir(sysroot)
@@ -154,28 +144,30 @@
   print 'Downloading %s' % url
   sys.stdout.flush()
   sys.stderr.flush()
-  subprocess.check_call(['curl', '--fail', '-L', url, '-o', tarball])
+  for _ in range(3):
+    try:
+      response = urllib2.urlopen(url)
+      with open(tarball, "wb") as f:
+        f.write(response.read())
+      break
+    except:
+      pass
+  else:
+    raise Error('Failed to download %s' % url)
   sha1sum = GetSha1(tarball)
   if sha1sum != tarball_sha1sum:
-    print 'Tarball sha1sum is wrong.'
-    print 'Expected %s, actual: %s' % (tarball_sha1sum, sha1sum)
-    return 1
+    raise Error('Tarball sha1sum is wrong.'
+                'Expected %s, actual: %s' % (tarball_sha1sum, sha1sum))
   subprocess.check_call(['tar', 'xf', tarball, '-C', sysroot])
   os.remove(tarball)
 
   with open(stamp, 'w') as s:
     s.write(url)
-  return 0
 
 
 if __name__ == '__main__':
-  parser = optparse.OptionParser('usage: %prog [OPTIONS]')
-  parser.add_option('--running-as-hook', action='store_true',
-                    default=False, help='Used when running from gclient hooks.'
-                                        ' In this mode the sysroot will only '
-                                        'be installed for official Linux '
-                                        'builds or ARM Linux builds')
-  parser.add_option('--arch', type='choice', choices=valid_archs,
-                    help='Sysroot architecture: %s' % ', '.join(valid_archs))
-  options, _ = parser.parse_args()
-  sys.exit(main())
+  try:
+    sys.exit(main(sys.argv[1:]))
+  except Error as e:
+    sys.stderr.write(str(e) + '\n')
+    sys.exit(1)
diff --git a/build/linux/sysroot_scripts/packagelist.trusty.arm b/build/linux/sysroot_scripts/packagelist.trusty.arm
deleted file mode 100644
index cd4b671..0000000
--- a/build/linux/sysroot_scripts/packagelist.trusty.arm
+++ /dev/null
@@ -1,158 +0,0 @@
-main/a/alsa-lib/libasound2_1.0.27.2-3ubuntu7_armhf.deb
-main/a/alsa-lib/libasound2-dev_1.0.27.2-3ubuntu7_armhf.deb
-main/a/atk1.0/libatk1.0-0_2.10.0-2ubuntu2_armhf.deb
-main/a/atk1.0/libatk1.0-dev_2.10.0-2ubuntu2_armhf.deb
-main/a/avahi/libavahi-client3_0.6.31-4ubuntu1_armhf.deb
-main/a/avahi/libavahi-common3_0.6.31-4ubuntu1_armhf.deb
-main/c/cairo/libcairo2_1.13.0~20140204-0ubuntu1_armhf.deb
-main/c/cairo/libcairo2-dev_1.13.0~20140204-0ubuntu1_armhf.deb
-main/c/cairo/libcairo-gobject2_1.13.0~20140204-0ubuntu1_armhf.deb
-main/c/cairo/libcairo-script-interpreter2_1.13.0~20140204-0ubuntu1_armhf.deb
-main/c/cups/libcups2_1.7.2-0ubuntu1_armhf.deb
-main/c/cups/libcups2-dev_1.7.2-0ubuntu1_armhf.deb
-main/d/dbus-glib/libdbus-glib-1-2_0.100.2-1_armhf.deb
-main/d/dbus/libdbus-1-3_1.6.18-0ubuntu4_armhf.deb
-main/d/dbus/libdbus-1-dev_1.6.18-0ubuntu4_armhf.deb
-main/e/e2fsprogs/comerr-dev_2.1-1.42.9-3ubuntu1_armhf.deb
-main/e/e2fsprogs/libcomerr2_1.42.9-3ubuntu1_armhf.deb
-main/e/eglibc/libc6_2.19-0ubuntu6_armhf.deb
-main/e/eglibc/libc6-dev_2.19-0ubuntu6_armhf.deb
-main/e/elfutils/libelf1_0.158-0ubuntu5_armhf.deb
-main/e/elfutils/libelf-dev_0.158-0ubuntu5_armhf.deb
-main/e/expat/libexpat1_2.1.0-4ubuntu1_armhf.deb
-main/e/expat/libexpat1-dev_2.1.0-4ubuntu1_armhf.deb
-main/f/fontconfig/libfontconfig1_2.11.0-0ubuntu4_armhf.deb
-main/f/fontconfig/libfontconfig1-dev_2.11.0-0ubuntu4_armhf.deb
-main/f/freetype/libfreetype6_2.5.2-1ubuntu2_armhf.deb
-main/f/freetype/libfreetype6-dev_2.5.2-1ubuntu2_armhf.deb
-main/g/gcc-4.8/gcc-4.8_4.8.2-19ubuntu1_armhf.deb
-main/g/gcc-4.8/libgomp1_4.8.2-19ubuntu1_armhf.deb
-main/g/gcc-4.8/libstdc++-4.8-dev_4.8.2-19ubuntu1_armhf.deb
-main/g/gcc-4.8/libstdc++6_4.8.2-19ubuntu1_armhf.deb
-main/g/gccgo-4.9/libgcc1_4.9-20140406-0ubuntu1_armhf.deb
-main/g/gconf/libgconf2-4_3.2.6-0ubuntu2_armhf.deb
-main/g/gconf/libgconf-2-4_3.2.6-0ubuntu2_armhf.deb
-main/g/gconf/libgconf2-dev_3.2.6-0ubuntu2_armhf.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.30.7-0ubuntu1_armhf.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.30.7-0ubuntu1_armhf.deb
-main/g/glib2.0/libglib2.0-0_2.40.0-2_armhf.deb
-main/g/glib2.0/libglib2.0-dev_2.40.0-2_armhf.deb
-main/g/gnutls26/libgnutls26_2.12.23-12ubuntu2_armhf.deb
-main/g/gnutls26/libgnutls-dev_2.12.23-12ubuntu2_armhf.deb
-main/g/gnutls26/libgnutls-openssl27_2.12.23-12ubuntu2_armhf.deb
-main/g/gnutls26/libgnutlsxx27_2.12.23-12ubuntu2_armhf.deb
-main/g/gtk+2.0/libgtk2.0-0_2.24.23-0ubuntu1_armhf.deb
-main/g/gtk+2.0/libgtk2.0-dev_2.24.23-0ubuntu1_armhf.deb
-main/k/keyutils/libkeyutils1_1.5.6-1_armhf.deb
-main/k/krb5/krb5-multidev_1.12+dfsg-2ubuntu4_armhf.deb
-main/k/krb5/libgssapi-krb5-2_1.12+dfsg-2ubuntu4_armhf.deb
-main/k/krb5/libgssrpc4_1.12+dfsg-2ubuntu4_armhf.deb
-main/k/krb5/libk5crypto3_1.12+dfsg-2ubuntu4_armhf.deb
-main/k/krb5/libkadm5clnt-mit9_1.12+dfsg-2ubuntu4_armhf.deb
-main/k/krb5/libkadm5srv-mit9_1.12+dfsg-2ubuntu4_armhf.deb
-main/k/krb5/libkdb5-7_1.12+dfsg-2ubuntu4_armhf.deb
-main/k/krb5/libkrb5-3_1.12+dfsg-2ubuntu4_armhf.deb
-main/k/krb5/libkrb5-dev_1.12+dfsg-2ubuntu4_armhf.deb
-main/k/krb5/libkrb5support0_1.12+dfsg-2ubuntu4_armhf.deb
-main/libc/libcap2/libcap2_2.24-0ubuntu2_armhf.deb
-main/libc/libcap2/libcap-dev_2.24-0ubuntu2_armhf.deb
-main/libd/libdrm/libdrm2_2.4.52-1_armhf.deb
-main/libe/libexif/libexif12_0.6.21-1ubuntu1_armhf.deb
-main/libe/libexif/libexif-dev_0.6.21-1ubuntu1_armhf.deb
-main/libf/libffi/libffi6_3.1~rc1+r3.0.13-12_armhf.deb
-main/libg/libgcrypt11/libgcrypt11_1.5.3-2ubuntu4_armhf.deb
-main/libg/libgcrypt11/libgcrypt11-dev_1.5.3-2ubuntu4_armhf.deb
-main/libg/libgnome-keyring/libgnome-keyring0_3.8.0-2_armhf.deb
-main/libg/libgnome-keyring/libgnome-keyring-dev_3.8.0-2_armhf.deb
-main/libg/libgpg-error/libgpg-error0_1.12-0.2ubuntu1_armhf.deb
-main/libg/libgpg-error/libgpg-error-dev_1.12-0.2ubuntu1_armhf.deb
-main/libn/libnss-db/libnss-db_2.2.3pre1-5build3_armhf.deb
-main/libp/libp11/libp11-2_0.2.8-3ubuntu1_armhf.deb
-main/libp/libpng/libpng12-0_1.2.50-1ubuntu2_armhf.deb
-main/libp/libpng/libpng12-dev_1.2.50-1ubuntu2_armhf.deb
-main/libs/libselinux/libselinux1_2.2.2-1_armhf.deb
-main/libt/libtasn1-6/libtasn1-6_3.4-3_armhf.deb
-main/libx/libx11/libx11-6_1.6.2-1ubuntu2_armhf.deb
-main/libx/libx11/libx11-dev_1.6.2-1ubuntu2_armhf.deb
-main/libx/libx11/libx11-xcb1_1.6.2-1ubuntu2_armhf.deb
-main/libx/libxau/libxau6_1.0.8-1_armhf.deb
-main/libx/libxau/libxau-dev_1.0.8-1_armhf.deb
-main/libx/libxcb/libxcb1_1.10-2ubuntu1_armhf.deb
-main/libx/libxcb/libxcb1-dev_1.10-2ubuntu1_armhf.deb
-main/libx/libxcb/libxcb-glx0_1.10-2ubuntu1_armhf.deb
-main/libx/libxcb/libxcb-render0_1.10-2ubuntu1_armhf.deb
-main/libx/libxcb/libxcb-render0-dev_1.10-2ubuntu1_armhf.deb
-main/libx/libxcb/libxcb-shm0_1.10-2ubuntu1_armhf.deb
-main/libx/libxcb/libxcb-shm0-dev_1.10-2ubuntu1_armhf.deb
-main/libx/libxcomposite/libxcomposite1_0.4.4-1_armhf.deb
-main/libx/libxcomposite/libxcomposite-dev_0.4.4-1_armhf.deb
-main/libx/libxcursor/libxcursor1_1.1.14-1_armhf.deb
-main/libx/libxcursor/libxcursor-dev_1.1.14-1_armhf.deb
-main/libx/libxdamage/libxdamage1_1.1.4-1ubuntu1_armhf.deb
-main/libx/libxdamage/libxdamage-dev_1.1.4-1ubuntu1_armhf.deb
-main/libx/libxdmcp/libxdmcp6_1.1.1-1_armhf.deb
-main/libx/libxext/libxext6_1.3.2-1_armhf.deb
-main/libx/libxext/libxext-dev_1.3.2-1_armhf.deb
-main/libx/libxfixes/libxfixes3_5.0.1-1ubuntu1_armhf.deb
-main/libx/libxfixes/libxfixes-dev_5.0.1-1ubuntu1_armhf.deb
-main/libx/libxi/libxi6_1.7.1.901-1ubuntu1_armhf.deb
-main/libx/libxi/libxi-dev_1.7.1.901-1ubuntu1_armhf.deb
-main/libx/libxinerama/libxinerama1_1.1.3-1_armhf.deb
-main/libx/libxinerama/libxinerama-dev_1.1.3-1_armhf.deb
-main/libx/libxrandr/libxrandr2_1.4.2-1_armhf.deb
-main/libx/libxrandr/libxrandr-dev_1.4.2-1_armhf.deb
-main/libx/libxrender/libxrender1_0.9.8-1_armhf.deb
-main/libx/libxrender/libxrender-dev_0.9.8-1_armhf.deb
-main/libx/libxss/libxss1_1.2.2-1_armhf.deb
-main/libx/libxss/libxss-dev_1.2.2-1_armhf.deb
-main/libx/libxt/libxt6_1.1.4-1_armhf.deb
-main/libx/libxt/libxt-dev_1.1.4-1_armhf.deb
-main/libx/libxtst/libxtst6_1.2.2-1_armhf.deb
-main/libx/libxtst/libxtst-dev_1.2.2-1_armhf.deb
-main/libx/libxxf86vm/libxxf86vm1_1.1.3-1_armhf.deb
-main/l/linux/linux-libc-dev_3.13.0-24.46_armhf.deb
-main/m/mesa/libgl1-mesa-dev_10.1.0-4ubuntu5_armhf.deb
-main/m/mesa/libgl1-mesa-glx_10.1.0-4ubuntu5_armhf.deb
-main/m/mesa/libglapi-mesa_10.1.0-4ubuntu5_armhf.deb
-main/m/mesa/mesa-common-dev_10.1.0-4ubuntu5_armhf.deb
-main/n/nspr/libnspr4_4.10.2-1ubuntu1_armhf.deb
-main/n/nspr/libnspr4-dev_4.10.2-1ubuntu1_armhf.deb
-main/n/nss/libnss3_3.15.4-1ubuntu7_armhf.deb
-main/n/nss/libnss3-dev_3.15.4-1ubuntu7_armhf.deb
-main/o/openssl/libssl1.0.0_1.0.1f-1ubuntu2_armhf.deb
-main/o/openssl/libssl-dev_1.0.1f-1ubuntu2_armhf.deb
-main/o/orbit2/liborbit2_2.14.19-0.3_armhf.deb
-main/p/p11-kit/libp11-kit0_0.20.2-2ubuntu2_armhf.deb
-main/p/pam/libpam0g_1.1.8-1ubuntu2_armhf.deb
-main/p/pam/libpam0g-dev_1.1.8-1ubuntu2_armhf.deb
-main/p/pango1.0/libpango-1.0-0_1.36.3-1ubuntu1_armhf.deb
-main/p/pango1.0/libpango1.0-dev_1.36.3-1ubuntu1_armhf.deb
-main/p/pango1.0/libpangocairo-1.0-0_1.36.3-1ubuntu1_armhf.deb
-main/p/pango1.0/libpangoft2-1.0-0_1.36.3-1ubuntu1_armhf.deb
-main/p/pango1.0/libpangoxft-1.0-0_1.36.3-1ubuntu1_armhf.deb
-main/p/pciutils/libpci3_3.2.1-1ubuntu5_armhf.deb
-main/p/pciutils/libpci-dev_3.2.1-1ubuntu5_armhf.deb
-main/p/pcre3/libpcre3_8.31-2ubuntu2_armhf.deb
-main/p/pcre3/libpcre3-dev_8.31-2ubuntu2_armhf.deb
-main/p/pcre3/libpcrecpp0_8.31-2ubuntu2_armhf.deb
-main/p/pixman/libpixman-1-0_0.30.2-2ubuntu1_armhf.deb
-main/p/pixman/libpixman-1-dev_0.30.2-2ubuntu1_armhf.deb
-main/p/pulseaudio/libpulse0_4.0-0ubuntu11_armhf.deb
-main/p/pulseaudio/libpulse-dev_4.0-0ubuntu11_armhf.deb
-main/p/pulseaudio/libpulse-mainloop-glib0_4.0-0ubuntu11_armhf.deb
-main/s/speech-dispatcher/libspeechd2_0.8-5ubuntu1_armhf.deb
-main/s/speech-dispatcher/libspeechd-dev_0.8-5ubuntu1_armhf.deb
-main/s/speech-dispatcher/speech-dispatcher_0.8-5ubuntu1_armhf.deb
-main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
-main/x/x11proto-core/x11proto-core-dev_7.0.24-1_all.deb
-main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
-main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2ubuntu2_all.deb
-main/x/x11proto-input/x11proto-input-dev_2.3-1_all.deb
-main/x/x11proto-kb/x11proto-kb-dev_1.0.6-2_all.deb
-main/x/x11proto-randr/x11proto-randr-dev_1.4.0+git20120101.is.really.1.4.0-0ubuntu1_all.deb
-main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
-main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
-main/x/x11proto-xext/x11proto-xext-dev_7.3.0-1_all.deb
-main/z/zlib/zlib1g_1.2.8.dfsg-1ubuntu1_armhf.deb
-main/z/zlib/zlib1g-dev_1.2.8.dfsg-1ubuntu1_armhf.deb
diff --git a/build/linux/sysroot_scripts/packagelist.wheezy.amd64 b/build/linux/sysroot_scripts/packagelist.wheezy.amd64
deleted file mode 100644
index ced7dfd..0000000
--- a/build/linux/sysroot_scripts/packagelist.wheezy.amd64
+++ /dev/null
@@ -1,157 +0,0 @@
-main/a/alsa-lib/libasound2_1.0.25-4_amd64.deb
-main/a/alsa-lib/libasound2-dev_1.0.25-4_amd64.deb
-main/a/atk1.0/libatk1.0-0_2.4.0-2_amd64.deb
-main/a/atk1.0/libatk1.0-dev_2.4.0-2_amd64.deb
-main/a/attr/libattr1_2.4.46-8_amd64.deb
-main/a/avahi/libavahi-client3_0.6.31-2_amd64.deb
-main/a/avahi/libavahi-common3_0.6.31-2_amd64.deb
-main/c/cairo/libcairo2_1.12.2-3_amd64.deb
-main/c/cairo/libcairo2-dev_1.12.2-3_amd64.deb
-main/c/cairo/libcairo-gobject2_1.12.2-3_amd64.deb
-main/c/cairo/libcairo-script-interpreter2_1.12.2-3_amd64.deb
-main/c/cups/libcups2_1.5.3-5+deb7u4_amd64.deb
-main/c/cups/libcups2-dev_1.5.3-5+deb7u4_amd64.deb
-main/d/dbus-glib/libdbus-glib-1-2_0.100.2-1_amd64.deb
-main/d/dbus/libdbus-1-3_1.6.8-1+deb7u5_amd64.deb
-main/d/dbus/libdbus-1-dev_1.6.8-1+deb7u5_amd64.deb
-main/e/e2fsprogs/comerr-dev_2.1-1.42.5-1.1_amd64.deb
-main/e/e2fsprogs/libcomerr2_1.42.5-1.1_amd64.deb
-main/e/eglibc/libc6_2.13-38+deb7u6_amd64.deb
-main/e/eglibc/libc6-dev_2.13-38+deb7u6_amd64.deb
-main/e/elfutils/libelf1_0.152-1+wheezy1_amd64.deb
-main/e/elfutils/libelf-dev_0.152-1+wheezy1_amd64.deb
-main/e/expat/libexpat1_2.1.0-1+deb7u1_amd64.deb
-main/e/expat/libexpat1-dev_2.1.0-1+deb7u1_amd64.deb
-main/f/fontconfig/libfontconfig1_2.9.0-7.1_amd64.deb
-main/f/fontconfig/libfontconfig1-dev_2.9.0-7.1_amd64.deb
-main/f/freetype/libfreetype6_2.4.9-1.1_amd64.deb
-main/f/freetype/libfreetype6-dev_2.4.9-1.1_amd64.deb
-main/g/gcc-4.6/gcc-4.6_4.6.3-14_amd64.deb
-main/g/gcc-4.6/libstdc++6-4.6-dev_4.6.3-14_amd64.deb
-main/g/gcc-4.7/libgcc1_4.7.2-5_amd64.deb
-main/g/gcc-4.7/libgomp1_4.7.2-5_amd64.deb
-main/g/gcc-4.7/libquadmath0_4.7.2-5_amd64.deb
-main/g/gcc-4.7/libstdc++6_4.7.2-5_amd64.deb
-main/g/gconf/libgconf-2-4_3.2.5-1+build1_amd64.deb
-main/g/gconf/libgconf2-4_3.2.5-1+build1_amd64.deb
-main/g/gconf/libgconf2-dev_3.2.5-1+build1_amd64.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.26.1-1_amd64.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.26.1-1_amd64.deb
-main/g/glib2.0/libglib2.0-0_2.33.12+really2.32.4-5_amd64.deb
-main/g/glib2.0/libglib2.0-dev_2.33.12+really2.32.4-5_amd64.deb
-main/g/gnutls26/libgnutls26_2.12.20-8+deb7u2_amd64.deb
-main/g/gnutls26/libgnutls-dev_2.12.20-8+deb7u2_amd64.deb
-main/g/gnutls26/libgnutls-openssl27_2.12.20-8+deb7u2_amd64.deb
-main/g/gnutls26/libgnutlsxx27_2.12.20-8+deb7u2_amd64.deb
-main/g/gtk+2.0/libgtk2.0-0_2.24.10-2_amd64.deb
-main/g/gtk+2.0/libgtk2.0-dev_2.24.10-2_amd64.deb
-main/k/keyutils/libkeyutils1_1.5.5-3+deb7u1_amd64.deb
-main/k/krb5/krb5-multidev_1.10.1+dfsg-5+deb7u2_amd64.deb
-main/k/krb5/libgssapi-krb5-2_1.10.1+dfsg-5+deb7u2_amd64.deb
-main/k/krb5/libgssrpc4_1.10.1+dfsg-5+deb7u2_amd64.deb
-main/k/krb5/libk5crypto3_1.10.1+dfsg-5+deb7u2_amd64.deb
-main/k/krb5/libkadm5clnt-mit8_1.10.1+dfsg-5+deb7u2_amd64.deb
-main/k/krb5/libkadm5srv-mit8_1.10.1+dfsg-5+deb7u2_amd64.deb
-main/k/krb5/libkdb5-6_1.10.1+dfsg-5+deb7u2_amd64.deb
-main/k/krb5/libkrb5-3_1.10.1+dfsg-5+deb7u2_amd64.deb
-main/k/krb5/libkrb5-dev_1.10.1+dfsg-5+deb7u2_amd64.deb
-main/k/krb5/libkrb5support0_1.10.1+dfsg-5+deb7u2_amd64.deb
-main/libc/libcap2/libcap2_2.22-1.2_amd64.deb
-main/libc/libcap2/libcap-dev_2.22-1.2_amd64.deb
-main/libd/libdrm/libdrm2_2.4.40-1~deb7u2_amd64.deb
-main/libe/libexif/libexif12_0.6.20-3_amd64.deb
-main/libe/libexif/libexif-dev_0.6.20-3_amd64.deb
-main/libf/libffi/libffi5_3.0.10-3_amd64.deb
-main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u2_amd64.deb
-main/libg/libgcrypt11/libgcrypt11-dev_1.5.0-5+deb7u2_amd64.deb
-main/libg/libgnome-keyring/libgnome-keyring0_3.4.1-1_amd64.deb
-main/libg/libgnome-keyring/libgnome-keyring-dev_3.4.1-1_amd64.deb
-main/libg/libgpg-error/libgpg-error0_1.10-3.1_amd64.deb
-main/libg/libgpg-error/libgpg-error-dev_1.10-3.1_amd64.deb
-main/libn/libnss-db/libnss-db_2.2.3pre1-4_amd64.deb
-main/libp/libp11/libp11-2_0.2.8-2_amd64.deb
-main/libp/libpng/libpng12-0_1.2.49-1_amd64.deb
-main/libp/libpng/libpng12-dev_1.2.49-1_amd64.deb
-main/libs/libselinux/libselinux1_2.1.9-5_amd64.deb
-main/libt/libtasn1-3/libtasn1-3_2.13-2+deb7u1_amd64.deb
-main/libx/libx11/libx11-6_1.5.0-1+deb7u1_amd64.deb
-main/libx/libx11/libx11-dev_1.5.0-1+deb7u1_amd64.deb
-main/libx/libx11/libx11-xcb1_1.5.0-1+deb7u1_amd64.deb
-main/libx/libxau/libxau6_1.0.7-1_amd64.deb
-main/libx/libxau/libxau-dev_1.0.7-1_amd64.deb
-main/libx/libxcb/libxcb1_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcb/libxcb1-dev_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcb/libxcb-glx0_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcb/libxcb-render0_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcb/libxcb-render0-dev_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcb/libxcb-shm0_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcb/libxcb-shm0-dev_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcomposite/libxcomposite1_0.4.3-2_amd64.deb
-main/libx/libxcomposite/libxcomposite-dev_0.4.3-2_amd64.deb
-main/libx/libxcursor/libxcursor1_1.1.13-1+deb7u1_amd64.deb
-main/libx/libxcursor/libxcursor-dev_1.1.13-1+deb7u1_amd64.deb
-main/libx/libxdamage/libxdamage1_1.1.3-2_amd64.deb
-main/libx/libxdamage/libxdamage-dev_1.1.3-2_amd64.deb
-main/libx/libxdmcp/libxdmcp6_1.1.1-1_amd64.deb
-main/libx/libxext/libxext6_1.3.1-2+deb7u1_amd64.deb
-main/libx/libxext/libxext-dev_1.3.1-2+deb7u1_amd64.deb
-main/libx/libxfixes/libxfixes3_5.0-4+deb7u1_amd64.deb
-main/libx/libxfixes/libxfixes-dev_5.0-4+deb7u1_amd64.deb
-main/libx/libxi/libxi6_1.6.1-1+deb7u1_amd64.deb
-main/libx/libxi/libxi-dev_1.6.1-1+deb7u1_amd64.deb
-main/libx/libxinerama/libxinerama1_1.1.2-1+deb7u1_amd64.deb
-main/libx/libxinerama/libxinerama-dev_1.1.2-1+deb7u1_amd64.deb
-main/libx/libxrandr/libxrandr2_1.3.2-2+deb7u1_amd64.deb
-main/libx/libxrandr/libxrandr-dev_1.3.2-2+deb7u1_amd64.deb
-main/libx/libxrender/libxrender1_0.9.7-1+deb7u1_amd64.deb
-main/libx/libxrender/libxrender-dev_0.9.7-1+deb7u1_amd64.deb
-main/libx/libxss/libxss1_1.2.2-1_amd64.deb
-main/libx/libxss/libxss-dev_1.2.2-1_amd64.deb
-main/libx/libxt/libxt6_1.1.3-1+deb7u1_amd64.deb
-main/libx/libxt/libxt-dev_1.1.3-1+deb7u1_amd64.deb
-main/libx/libxtst/libxtst6_1.2.1-1+deb7u1_amd64.deb
-main/libx/libxtst/libxtst-dev_1.2.1-1+deb7u1_amd64.deb
-main/libx/libxxf86vm/libxxf86vm1_1.1.2-1+deb7u1_amd64.deb
-main/l/linux/linux-libc-dev_3.2.65-1_amd64.deb
-main/m/mesa/libgl1-mesa-dev_8.0.5-4+deb7u2_amd64.deb
-main/m/mesa/libgl1-mesa-glx_8.0.5-4+deb7u2_amd64.deb
-main/m/mesa/libglapi-mesa_8.0.5-4+deb7u2_amd64.deb
-main/m/mesa/mesa-common-dev_8.0.5-4+deb7u2_amd64.deb
-main/n/nspr/libnspr4_4.9.2-1+deb7u2_amd64.deb
-main/n/nspr/libnspr4-dev_4.9.2-1+deb7u2_amd64.deb
-main/n/nss/libnss3_3.14.5-1+deb7u3_amd64.deb
-main/n/nss/libnss3-dev_3.14.5-1+deb7u3_amd64.deb
-main/o/openssl/libssl1.0.0_1.0.1e-2+deb7u13_amd64.deb
-main/o/openssl/libssl-dev_1.0.1e-2+deb7u13_amd64.deb
-main/o/orbit2/liborbit2_2.14.19-0.1_amd64.deb
-main/p/p11-kit/libp11-kit0_0.12-3_amd64.deb
-main/p/pam/libpam0g_1.1.3-7.1_amd64.deb
-main/p/pam/libpam0g-dev_1.1.3-7.1_amd64.deb
-main/p/pango1.0/libpango1.0-0_1.30.0-1_amd64.deb
-main/p/pango1.0/libpango1.0-dev_1.30.0-1_amd64.deb
-main/p/pciutils/libpci3_3.1.9-6_amd64.deb
-main/p/pciutils/libpci-dev_3.1.9-6_amd64.deb
-main/p/pcre3/libpcre3_8.30-5_amd64.deb
-main/p/pcre3/libpcre3-dev_8.30-5_amd64.deb
-main/p/pcre3/libpcrecpp0_8.30-5_amd64.deb
-main/p/pixman/libpixman-1-0_0.26.0-4+deb7u1_amd64.deb
-main/p/pixman/libpixman-1-dev_0.26.0-4+deb7u1_amd64.deb
-main/p/pulseaudio/libpulse0_2.0-6.1_amd64.deb
-main/p/pulseaudio/libpulse-dev_2.0-6.1_amd64.deb
-main/p/pulseaudio/libpulse-mainloop-glib0_2.0-6.1_amd64.deb
-main/s/speech-dispatcher/libspeechd2_0.7.1-6.2_amd64.deb
-main/s/speech-dispatcher/libspeechd-dev_0.7.1-6.2_amd64.deb
-main/s/speech-dispatcher/speech-dispatcher_0.7.1-6.2_amd64.deb
-main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
-main/x/x11proto-core/x11proto-core-dev_7.0.23-1_all.deb
-main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
-main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb
-main/x/x11proto-input/x11proto-input-dev_2.2-1_all.deb
-main/x/x11proto-kb/x11proto-kb-dev_1.0.6-2_all.deb
-main/x/x11proto-randr/x11proto-randr-dev_1.3.2-2_all.deb
-main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
-main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
-main/x/x11proto-xext/x11proto-xext-dev_7.2.1-1_all.deb
-main/z/zlib/zlib1g_1.2.7.dfsg-13_amd64.deb
-main/z/zlib/zlib1g-dev_1.2.7.dfsg-13_amd64.deb
diff --git a/build/linux/sysroot_scripts/packagelist.wheezy.arm b/build/linux/sysroot_scripts/packagelist.wheezy.arm
deleted file mode 100644
index 3d79cb3..0000000
--- a/build/linux/sysroot_scripts/packagelist.wheezy.arm
+++ /dev/null
@@ -1,156 +0,0 @@
-main/a/alsa-lib/libasound2_1.0.25-4_armhf.deb
-main/a/alsa-lib/libasound2-dev_1.0.25-4_armhf.deb
-main/a/atk1.0/libatk1.0-0_2.4.0-2_armhf.deb
-main/a/atk1.0/libatk1.0-dev_2.4.0-2_armhf.deb
-main/a/attr/libattr1_2.4.46-8_armhf.deb
-main/a/avahi/libavahi-client3_0.6.31-2_armhf.deb
-main/a/avahi/libavahi-common3_0.6.31-2_armhf.deb
-main/c/cairo/libcairo2_1.12.2-3_armhf.deb
-main/c/cairo/libcairo2-dev_1.12.2-3_armhf.deb
-main/c/cairo/libcairo-gobject2_1.12.2-3_armhf.deb
-main/c/cairo/libcairo-script-interpreter2_1.12.2-3_armhf.deb
-main/c/cups/libcups2_1.5.3-5+deb7u4_armhf.deb
-main/c/cups/libcups2-dev_1.5.3-5+deb7u4_armhf.deb
-main/d/dbus-glib/libdbus-glib-1-2_0.100.2-1_armhf.deb
-main/d/dbus/libdbus-1-3_1.6.8-1+deb7u5_armhf.deb
-main/d/dbus/libdbus-1-dev_1.6.8-1+deb7u5_armhf.deb
-main/e/e2fsprogs/comerr-dev_2.1-1.42.5-1.1_armhf.deb
-main/e/e2fsprogs/libcomerr2_1.42.5-1.1_armhf.deb
-main/e/eglibc/libc6_2.13-38+deb7u6_armhf.deb
-main/e/eglibc/libc6-dev_2.13-38+deb7u6_armhf.deb
-main/e/elfutils/libelf1_0.152-1+wheezy1_armhf.deb
-main/e/elfutils/libelf-dev_0.152-1+wheezy1_armhf.deb
-main/e/expat/libexpat1_2.1.0-1+deb7u1_armhf.deb
-main/e/expat/libexpat1-dev_2.1.0-1+deb7u1_armhf.deb
-main/f/fontconfig/libfontconfig1_2.9.0-7.1_armhf.deb
-main/f/fontconfig/libfontconfig1-dev_2.9.0-7.1_armhf.deb
-main/f/freetype/libfreetype6_2.4.9-1.1_armhf.deb
-main/f/freetype/libfreetype6-dev_2.4.9-1.1_armhf.deb
-main/g/gcc-4.6/gcc-4.6_4.6.3-14_armhf.deb
-main/g/gcc-4.6/libstdc++6-4.6-dev_4.6.3-14_armhf.deb
-main/g/gcc-4.7/libgcc1_4.7.2-5_armhf.deb
-main/g/gcc-4.7/libgomp1_4.7.2-5_armhf.deb
-main/g/gcc-4.7/libstdc++6_4.7.2-5_armhf.deb
-main/g/gconf/libgconf2-4_3.2.5-1+build1_armhf.deb
-main/g/gconf/libgconf-2-4_3.2.5-1+build1_armhf.deb
-main/g/gconf/libgconf2-dev_3.2.5-1+build1_armhf.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.26.1-1_armhf.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.26.1-1_armhf.deb
-main/g/glib2.0/libglib2.0-0_2.33.12+really2.32.4-5_armhf.deb
-main/g/glib2.0/libglib2.0-dev_2.33.12+really2.32.4-5_armhf.deb
-main/g/gnutls26/libgnutls26_2.12.20-8+deb7u2_armhf.deb
-main/g/gnutls26/libgnutls-dev_2.12.20-8+deb7u2_armhf.deb
-main/g/gnutls26/libgnutls-openssl27_2.12.20-8+deb7u2_armhf.deb
-main/g/gnutls26/libgnutlsxx27_2.12.20-8+deb7u2_armhf.deb
-main/g/gtk+2.0/libgtk2.0-0_2.24.10-2_armhf.deb
-main/g/gtk+2.0/libgtk2.0-dev_2.24.10-2_armhf.deb
-main/k/keyutils/libkeyutils1_1.5.5-3+deb7u1_armhf.deb
-main/k/krb5/krb5-multidev_1.10.1+dfsg-5+deb7u2_armhf.deb
-main/k/krb5/libgssapi-krb5-2_1.10.1+dfsg-5+deb7u2_armhf.deb
-main/k/krb5/libgssrpc4_1.10.1+dfsg-5+deb7u2_armhf.deb
-main/k/krb5/libk5crypto3_1.10.1+dfsg-5+deb7u2_armhf.deb
-main/k/krb5/libkadm5clnt-mit8_1.10.1+dfsg-5+deb7u2_armhf.deb
-main/k/krb5/libkadm5srv-mit8_1.10.1+dfsg-5+deb7u2_armhf.deb
-main/k/krb5/libkdb5-6_1.10.1+dfsg-5+deb7u2_armhf.deb
-main/k/krb5/libkrb5-3_1.10.1+dfsg-5+deb7u2_armhf.deb
-main/k/krb5/libkrb5-dev_1.10.1+dfsg-5+deb7u2_armhf.deb
-main/k/krb5/libkrb5support0_1.10.1+dfsg-5+deb7u2_armhf.deb
-main/libc/libcap2/libcap2_2.22-1.2_armhf.deb
-main/libc/libcap2/libcap-dev_2.22-1.2_armhf.deb
-main/libd/libdrm/libdrm2_2.4.40-1~deb7u2_armhf.deb
-main/libe/libexif/libexif12_0.6.20-3_armhf.deb
-main/libe/libexif/libexif-dev_0.6.20-3_armhf.deb
-main/libf/libffi/libffi5_3.0.10-3+b1_armhf.deb
-main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u2_armhf.deb
-main/libg/libgcrypt11/libgcrypt11-dev_1.5.0-5+deb7u2_armhf.deb
-main/libg/libgnome-keyring/libgnome-keyring0_3.4.1-1_armhf.deb
-main/libg/libgnome-keyring/libgnome-keyring-dev_3.4.1-1_armhf.deb
-main/libg/libgpg-error/libgpg-error0_1.10-3.1_armhf.deb
-main/libg/libgpg-error/libgpg-error-dev_1.10-3.1_armhf.deb
-main/libn/libnss-db/libnss-db_2.2.3pre1-4_armhf.deb
-main/libp/libp11/libp11-2_0.2.8-2_armhf.deb
-main/libp/libpng/libpng12-0_1.2.49-1_armhf.deb
-main/libp/libpng/libpng12-dev_1.2.49-1_armhf.deb
-main/libs/libselinux/libselinux1_2.1.9-5_armhf.deb
-main/libt/libtasn1-3/libtasn1-3_2.13-2+deb7u1_armhf.deb
-main/libx/libx11/libx11-6_1.5.0-1+deb7u1_armhf.deb
-main/libx/libx11/libx11-dev_1.5.0-1+deb7u1_armhf.deb
-main/libx/libx11/libx11-xcb1_1.5.0-1+deb7u1_armhf.deb
-main/libx/libxau/libxau6_1.0.7-1_armhf.deb
-main/libx/libxau/libxau-dev_1.0.7-1_armhf.deb
-main/libx/libxcb/libxcb1_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcb/libxcb1-dev_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcb/libxcb-glx0_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcb/libxcb-render0_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcb/libxcb-render0-dev_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcb/libxcb-shm0_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcb/libxcb-shm0-dev_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcomposite/libxcomposite1_0.4.3-2+b1_armhf.deb
-main/libx/libxcomposite/libxcomposite-dev_0.4.3-2+b1_armhf.deb
-main/libx/libxcursor/libxcursor1_1.1.13-1+deb7u1_armhf.deb
-main/libx/libxcursor/libxcursor-dev_1.1.13-1+deb7u1_armhf.deb
-main/libx/libxdamage/libxdamage1_1.1.3-2+b1_armhf.deb
-main/libx/libxdamage/libxdamage-dev_1.1.3-2+b1_armhf.deb
-main/libx/libxdmcp/libxdmcp6_1.1.1-1_armhf.deb
-main/libx/libxext/libxext6_1.3.1-2+deb7u1_armhf.deb
-main/libx/libxext/libxext-dev_1.3.1-2+deb7u1_armhf.deb
-main/libx/libxfixes/libxfixes3_5.0-4+deb7u1_armhf.deb
-main/libx/libxfixes/libxfixes-dev_5.0-4+deb7u1_armhf.deb
-main/libx/libxi/libxi6_1.6.1-1+deb7u1_armhf.deb
-main/libx/libxi/libxi-dev_1.6.1-1+deb7u1_armhf.deb
-main/libx/libxinerama/libxinerama1_1.1.2-1+deb7u1_armhf.deb
-main/libx/libxinerama/libxinerama-dev_1.1.2-1+deb7u1_armhf.deb
-main/libx/libxrandr/libxrandr2_1.3.2-2+deb7u1_armhf.deb
-main/libx/libxrandr/libxrandr-dev_1.3.2-2+deb7u1_armhf.deb
-main/libx/libxrender/libxrender1_0.9.7-1+deb7u1_armhf.deb
-main/libx/libxrender/libxrender-dev_0.9.7-1+deb7u1_armhf.deb
-main/libx/libxss/libxss1_1.2.2-1_armhf.deb
-main/libx/libxss/libxss-dev_1.2.2-1_armhf.deb
-main/libx/libxt/libxt6_1.1.3-1+deb7u1_armhf.deb
-main/libx/libxt/libxt-dev_1.1.3-1+deb7u1_armhf.deb
-main/libx/libxtst/libxtst6_1.2.1-1+deb7u1_armhf.deb
-main/libx/libxtst/libxtst-dev_1.2.1-1+deb7u1_armhf.deb
-main/libx/libxxf86vm/libxxf86vm1_1.1.2-1+deb7u1_armhf.deb
-main/l/linux/linux-libc-dev_3.2.65-1_armhf.deb
-main/m/mesa/libgl1-mesa-dev_8.0.5-4+deb7u2_armhf.deb
-main/m/mesa/libgl1-mesa-glx_8.0.5-4+deb7u2_armhf.deb
-main/m/mesa/libglapi-mesa_8.0.5-4+deb7u2_armhf.deb
-main/m/mesa/mesa-common-dev_8.0.5-4+deb7u2_armhf.deb
-main/n/nspr/libnspr4_4.9.2-1+deb7u2_armhf.deb
-main/n/nspr/libnspr4-dev_4.9.2-1+deb7u2_armhf.deb
-main/n/nss/libnss3_3.14.5-1+deb7u3_armhf.deb
-main/n/nss/libnss3-dev_3.14.5-1+deb7u3_armhf.deb
-main/o/openssl/libssl1.0.0_1.0.1e-2+deb7u13_armhf.deb
-main/o/openssl/libssl-dev_1.0.1e-2+deb7u13_armhf.deb
-main/o/orbit2/liborbit2_2.14.19-0.1_armhf.deb
-main/p/p11-kit/libp11-kit0_0.12-3_armhf.deb
-main/p/pam/libpam0g_1.1.3-7.1_armhf.deb
-main/p/pam/libpam0g-dev_1.1.3-7.1_armhf.deb
-main/p/pango1.0/libpango1.0-0_1.30.0-1_armhf.deb
-main/p/pango1.0/libpango1.0-dev_1.30.0-1_armhf.deb
-main/p/pciutils/libpci3_3.1.9-6_armhf.deb
-main/p/pciutils/libpci-dev_3.1.9-6_armhf.deb
-main/p/pcre3/libpcre3_8.30-5_armhf.deb
-main/p/pcre3/libpcre3-dev_8.30-5_armhf.deb
-main/p/pcre3/libpcrecpp0_8.30-5_armhf.deb
-main/p/pixman/libpixman-1-0_0.26.0-4+deb7u1_armhf.deb
-main/p/pixman/libpixman-1-dev_0.26.0-4+deb7u1_armhf.deb
-main/p/pulseaudio/libpulse0_2.0-6.1_armhf.deb
-main/p/pulseaudio/libpulse-dev_2.0-6.1_armhf.deb
-main/p/pulseaudio/libpulse-mainloop-glib0_2.0-6.1_armhf.deb
-main/s/speech-dispatcher/libspeechd2_0.7.1-6.2_armhf.deb
-main/s/speech-dispatcher/libspeechd-dev_0.7.1-6.2_armhf.deb
-main/s/speech-dispatcher/speech-dispatcher_0.7.1-6.2_armhf.deb
-main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
-main/x/x11proto-core/x11proto-core-dev_7.0.23-1_all.deb
-main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
-main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb
-main/x/x11proto-input/x11proto-input-dev_2.2-1_all.deb
-main/x/x11proto-kb/x11proto-kb-dev_1.0.6-2_all.deb
-main/x/x11proto-randr/x11proto-randr-dev_1.3.2-2_all.deb
-main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
-main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
-main/x/x11proto-xext/x11proto-xext-dev_7.2.1-1_all.deb
-main/z/zlib/zlib1g_1.2.7.dfsg-13_armhf.deb
-main/z/zlib/zlib1g-dev_1.2.7.dfsg-13_armhf.deb
diff --git a/build/linux/sysroot_scripts/packagelist.wheezy.i386 b/build/linux/sysroot_scripts/packagelist.wheezy.i386
deleted file mode 100644
index 1379fee..0000000
--- a/build/linux/sysroot_scripts/packagelist.wheezy.i386
+++ /dev/null
@@ -1,157 +0,0 @@
-main/a/alsa-lib/libasound2_1.0.25-4_i386.deb
-main/a/alsa-lib/libasound2-dev_1.0.25-4_i386.deb
-main/a/atk1.0/libatk1.0-0_2.4.0-2_i386.deb
-main/a/atk1.0/libatk1.0-dev_2.4.0-2_i386.deb
-main/a/attr/libattr1_2.4.46-8_i386.deb
-main/a/avahi/libavahi-client3_0.6.31-2_i386.deb
-main/a/avahi/libavahi-common3_0.6.31-2_i386.deb
-main/c/cairo/libcairo2_1.12.2-3_i386.deb
-main/c/cairo/libcairo2-dev_1.12.2-3_i386.deb
-main/c/cairo/libcairo-gobject2_1.12.2-3_i386.deb
-main/c/cairo/libcairo-script-interpreter2_1.12.2-3_i386.deb
-main/c/cups/libcups2_1.5.3-5+deb7u4_i386.deb
-main/c/cups/libcups2-dev_1.5.3-5+deb7u4_i386.deb
-main/d/dbus-glib/libdbus-glib-1-2_0.100.2-1_i386.deb
-main/d/dbus/libdbus-1-3_1.6.8-1+deb7u5_i386.deb
-main/d/dbus/libdbus-1-dev_1.6.8-1+deb7u5_i386.deb
-main/e/e2fsprogs/comerr-dev_2.1-1.42.5-1.1_i386.deb
-main/e/e2fsprogs/libcomerr2_1.42.5-1.1_i386.deb
-main/e/eglibc/libc6_2.13-38+deb7u6_i386.deb
-main/e/eglibc/libc6-dev_2.13-38+deb7u6_i386.deb
-main/e/elfutils/libelf1_0.152-1+wheezy1_i386.deb
-main/e/elfutils/libelf-dev_0.152-1+wheezy1_i386.deb
-main/e/expat/libexpat1_2.1.0-1+deb7u1_i386.deb
-main/e/expat/libexpat1-dev_2.1.0-1+deb7u1_i386.deb
-main/f/fontconfig/libfontconfig1_2.9.0-7.1_i386.deb
-main/f/fontconfig/libfontconfig1-dev_2.9.0-7.1_i386.deb
-main/f/freetype/libfreetype6_2.4.9-1.1_i386.deb
-main/f/freetype/libfreetype6-dev_2.4.9-1.1_i386.deb
-main/g/gcc-4.6/gcc-4.6_4.6.3-14_i386.deb
-main/g/gcc-4.6/libstdc++6-4.6-dev_4.6.3-14_i386.deb
-main/g/gcc-4.7/libgcc1_4.7.2-5_i386.deb
-main/g/gcc-4.7/libgomp1_4.7.2-5_i386.deb
-main/g/gcc-4.7/libquadmath0_4.7.2-5_i386.deb
-main/g/gcc-4.7/libstdc++6_4.7.2-5_i386.deb
-main/g/gconf/libgconf-2-4_3.2.5-1+build1_i386.deb
-main/g/gconf/libgconf2-4_3.2.5-1+build1_i386.deb
-main/g/gconf/libgconf2-dev_3.2.5-1+build1_i386.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.26.1-1_i386.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.26.1-1_i386.deb
-main/g/glib2.0/libglib2.0-0_2.33.12+really2.32.4-5_i386.deb
-main/g/glib2.0/libglib2.0-dev_2.33.12+really2.32.4-5_i386.deb
-main/g/gnutls26/libgnutls26_2.12.20-8+deb7u2_i386.deb
-main/g/gnutls26/libgnutls-dev_2.12.20-8+deb7u2_i386.deb
-main/g/gnutls26/libgnutls-openssl27_2.12.20-8+deb7u2_i386.deb
-main/g/gnutls26/libgnutlsxx27_2.12.20-8+deb7u2_i386.deb
-main/g/gtk+2.0/libgtk2.0-0_2.24.10-2_i386.deb
-main/g/gtk+2.0/libgtk2.0-dev_2.24.10-2_i386.deb
-main/k/keyutils/libkeyutils1_1.5.5-3+deb7u1_i386.deb
-main/k/krb5/krb5-multidev_1.10.1+dfsg-5+deb7u2_i386.deb
-main/k/krb5/libgssapi-krb5-2_1.10.1+dfsg-5+deb7u2_i386.deb
-main/k/krb5/libgssrpc4_1.10.1+dfsg-5+deb7u2_i386.deb
-main/k/krb5/libk5crypto3_1.10.1+dfsg-5+deb7u2_i386.deb
-main/k/krb5/libkadm5clnt-mit8_1.10.1+dfsg-5+deb7u2_i386.deb
-main/k/krb5/libkadm5srv-mit8_1.10.1+dfsg-5+deb7u2_i386.deb
-main/k/krb5/libkdb5-6_1.10.1+dfsg-5+deb7u2_i386.deb
-main/k/krb5/libkrb5-3_1.10.1+dfsg-5+deb7u2_i386.deb
-main/k/krb5/libkrb5-dev_1.10.1+dfsg-5+deb7u2_i386.deb
-main/k/krb5/libkrb5support0_1.10.1+dfsg-5+deb7u2_i386.deb
-main/libc/libcap2/libcap2_2.22-1.2_i386.deb
-main/libc/libcap2/libcap-dev_2.22-1.2_i386.deb
-main/libd/libdrm/libdrm2_2.4.40-1~deb7u2_i386.deb
-main/libe/libexif/libexif12_0.6.20-3_i386.deb
-main/libe/libexif/libexif-dev_0.6.20-3_i386.deb
-main/libf/libffi/libffi5_3.0.10-3_i386.deb
-main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u2_i386.deb
-main/libg/libgcrypt11/libgcrypt11-dev_1.5.0-5+deb7u2_i386.deb
-main/libg/libgnome-keyring/libgnome-keyring0_3.4.1-1_i386.deb
-main/libg/libgnome-keyring/libgnome-keyring-dev_3.4.1-1_i386.deb
-main/libg/libgpg-error/libgpg-error0_1.10-3.1_i386.deb
-main/libg/libgpg-error/libgpg-error-dev_1.10-3.1_i386.deb
-main/libn/libnss-db/libnss-db_2.2.3pre1-4_i386.deb
-main/libp/libp11/libp11-2_0.2.8-2_i386.deb
-main/libp/libpng/libpng12-0_1.2.49-1_i386.deb
-main/libp/libpng/libpng12-dev_1.2.49-1_i386.deb
-main/libs/libselinux/libselinux1_2.1.9-5_i386.deb
-main/libt/libtasn1-3/libtasn1-3_2.13-2+deb7u1_i386.deb
-main/libx/libx11/libx11-6_1.5.0-1+deb7u1_i386.deb
-main/libx/libx11/libx11-dev_1.5.0-1+deb7u1_i386.deb
-main/libx/libx11/libx11-xcb1_1.5.0-1+deb7u1_i386.deb
-main/libx/libxau/libxau6_1.0.7-1_i386.deb
-main/libx/libxau/libxau-dev_1.0.7-1_i386.deb
-main/libx/libxcb/libxcb1_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcb/libxcb1-dev_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcb/libxcb-glx0_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcb/libxcb-render0_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcb/libxcb-render0-dev_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcb/libxcb-shm0_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcb/libxcb-shm0-dev_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcomposite/libxcomposite1_0.4.3-2_i386.deb
-main/libx/libxcomposite/libxcomposite-dev_0.4.3-2_i386.deb
-main/libx/libxcursor/libxcursor1_1.1.13-1+deb7u1_i386.deb
-main/libx/libxcursor/libxcursor-dev_1.1.13-1+deb7u1_i386.deb
-main/libx/libxdamage/libxdamage1_1.1.3-2_i386.deb
-main/libx/libxdamage/libxdamage-dev_1.1.3-2_i386.deb
-main/libx/libxdmcp/libxdmcp6_1.1.1-1_i386.deb
-main/libx/libxext/libxext6_1.3.1-2+deb7u1_i386.deb
-main/libx/libxext/libxext-dev_1.3.1-2+deb7u1_i386.deb
-main/libx/libxfixes/libxfixes3_5.0-4+deb7u1_i386.deb
-main/libx/libxfixes/libxfixes-dev_5.0-4+deb7u1_i386.deb
-main/libx/libxi/libxi6_1.6.1-1+deb7u1_i386.deb
-main/libx/libxi/libxi-dev_1.6.1-1+deb7u1_i386.deb
-main/libx/libxinerama/libxinerama1_1.1.2-1+deb7u1_i386.deb
-main/libx/libxinerama/libxinerama-dev_1.1.2-1+deb7u1_i386.deb
-main/libx/libxrandr/libxrandr2_1.3.2-2+deb7u1_i386.deb
-main/libx/libxrandr/libxrandr-dev_1.3.2-2+deb7u1_i386.deb
-main/libx/libxrender/libxrender1_0.9.7-1+deb7u1_i386.deb
-main/libx/libxrender/libxrender-dev_0.9.7-1+deb7u1_i386.deb
-main/libx/libxss/libxss1_1.2.2-1_i386.deb
-main/libx/libxss/libxss-dev_1.2.2-1_i386.deb
-main/libx/libxt/libxt6_1.1.3-1+deb7u1_i386.deb
-main/libx/libxt/libxt-dev_1.1.3-1+deb7u1_i386.deb
-main/libx/libxtst/libxtst6_1.2.1-1+deb7u1_i386.deb
-main/libx/libxtst/libxtst-dev_1.2.1-1+deb7u1_i386.deb
-main/libx/libxxf86vm/libxxf86vm1_1.1.2-1+deb7u1_i386.deb
-main/l/linux/linux-libc-dev_3.2.65-1_i386.deb
-main/m/mesa/libgl1-mesa-dev_8.0.5-4+deb7u2_i386.deb
-main/m/mesa/libgl1-mesa-glx_8.0.5-4+deb7u2_i386.deb
-main/m/mesa/libglapi-mesa_8.0.5-4+deb7u2_i386.deb
-main/m/mesa/mesa-common-dev_8.0.5-4+deb7u2_i386.deb
-main/n/nspr/libnspr4_4.9.2-1+deb7u2_i386.deb
-main/n/nspr/libnspr4-dev_4.9.2-1+deb7u2_i386.deb
-main/n/nss/libnss3_3.14.5-1+deb7u3_i386.deb
-main/n/nss/libnss3-dev_3.14.5-1+deb7u3_i386.deb
-main/o/openssl/libssl1.0.0_1.0.1e-2+deb7u13_i386.deb
-main/o/openssl/libssl-dev_1.0.1e-2+deb7u13_i386.deb
-main/o/orbit2/liborbit2_2.14.19-0.1_i386.deb
-main/p/p11-kit/libp11-kit0_0.12-3_i386.deb
-main/p/pam/libpam0g_1.1.3-7.1_i386.deb
-main/p/pam/libpam0g-dev_1.1.3-7.1_i386.deb
-main/p/pango1.0/libpango1.0-0_1.30.0-1_i386.deb
-main/p/pango1.0/libpango1.0-dev_1.30.0-1_i386.deb
-main/p/pciutils/libpci3_3.1.9-6_i386.deb
-main/p/pciutils/libpci-dev_3.1.9-6_i386.deb
-main/p/pcre3/libpcre3_8.30-5_i386.deb
-main/p/pcre3/libpcre3-dev_8.30-5_i386.deb
-main/p/pcre3/libpcrecpp0_8.30-5_i386.deb
-main/p/pixman/libpixman-1-0_0.26.0-4+deb7u1_i386.deb
-main/p/pixman/libpixman-1-dev_0.26.0-4+deb7u1_i386.deb
-main/p/pulseaudio/libpulse0_2.0-6.1_i386.deb
-main/p/pulseaudio/libpulse-dev_2.0-6.1_i386.deb
-main/p/pulseaudio/libpulse-mainloop-glib0_2.0-6.1_i386.deb
-main/s/speech-dispatcher/libspeechd2_0.7.1-6.2_i386.deb
-main/s/speech-dispatcher/libspeechd-dev_0.7.1-6.2_i386.deb
-main/s/speech-dispatcher/speech-dispatcher_0.7.1-6.2_i386.deb
-main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
-main/x/x11proto-core/x11proto-core-dev_7.0.23-1_all.deb
-main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
-main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb
-main/x/x11proto-input/x11proto-input-dev_2.2-1_all.deb
-main/x/x11proto-kb/x11proto-kb-dev_1.0.6-2_all.deb
-main/x/x11proto-randr/x11proto-randr-dev_1.3.2-2_all.deb
-main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
-main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
-main/x/x11proto-xext/x11proto-xext-dev_7.2.1-1_all.deb
-main/z/zlib/zlib1g_1.2.7.dfsg-13_i386.deb
-main/z/zlib/zlib1g-dev_1.2.7.dfsg-13_i386.deb
diff --git a/build/linux/sysroot_scripts/sysroot-creator-test.sh b/build/linux/sysroot_scripts/sysroot-creator-test.sh
deleted file mode 100755
index b346bb7..0000000
--- a/build/linux/sysroot_scripts/sysroot-creator-test.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# Rudimentry test suite for sysroot-creator.
-
-SCRIPT_DIR=$(dirname $0)
-
-set -o errexit
-
-TestUpdateAllLists() {
-  echo "[ RUN      ] TestUpdateAllLists"
-  "$SCRIPT_DIR/sysroot-creator-trusty.sh" UpdatePackageListsAmd64
-  "$SCRIPT_DIR/sysroot-creator-trusty.sh" UpdatePackageListsI386
-  "$SCRIPT_DIR/sysroot-creator-trusty.sh" UpdatePackageListsARM
-  "$SCRIPT_DIR/sysroot-creator-wheezy.sh" UpdatePackageListsAmd64
-  "$SCRIPT_DIR/sysroot-creator-wheezy.sh" UpdatePackageListsI386
-  "$SCRIPT_DIR/sysroot-creator-wheezy.sh" UpdatePackageListsARM
-  echo "[      OK  ]"
-}
-
-TestUpdateAllLists
diff --git a/build/linux/sysroot_scripts/sysroot-creator-trusty.sh b/build/linux/sysroot_scripts/sysroot-creator-trusty.sh
deleted file mode 100755
index c0d82ec..0000000
--- a/build/linux/sysroot_scripts/sysroot-creator-trusty.sh
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/bin/sh
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-SCRIPT_DIR=$(dirname $0)
-
-DISTRO=ubuntu
-DIST=trusty
-
-# This is where we get all the debian packages from.
-APT_REPO=http://archive.ubuntu.com/ubuntu
-APT_REPO_ARM=http://ports.ubuntu.com
-REPO_BASEDIR="${APT_REPO}/dists/${DIST}"
-KEYRING_FILE=/usr/share/keyrings/ubuntu-archive-keyring.gpg
-
-# Sysroot packages: these are the packages needed to build chrome.
-# NOTE: When DEBIAN_PACKAGES is modified, the packagelist files must be updated
-# by running this script in GeneratePackageList mode.
-DEBIAN_PACKAGES="\
-  comerr-dev \
-  gcc-4.8 \
-  krb5-multidev \
-  libasound2 \
-  libasound2-dev \
-  libatk1.0-0 \
-  libatk1.0-dev \
-  libavahi-client3 \
-  libavahi-common3 \
-  libc6 \
-  libc6-dev \
-  libcairo2 \
-  libcairo2-dev \
-  libcairo-gobject2 \
-  libcairo-script-interpreter2 \
-  libcap-dev \
-  libcap2 \
-  libcomerr2 \
-  libcups2 \
-  libcups2-dev \
-  libdbus-1-3 \
-  libdbus-1-dev \
-  libdbus-glib-1-2 \
-  libdrm2 \
-  libelf1 \
-  libelf-dev \
-  libexif12 \
-  libexif-dev \
-  libexpat1 \
-  libexpat1-dev \
-  libffi6 \
-  libfontconfig1 \
-  libfontconfig1-dev \
-  libfreetype6 \
-  libfreetype6-dev \
-  libgcc1 \
-  libgconf-2-4 \
-  libgconf2-4 \
-  libgconf2-dev \
-  libgcrypt11 \
-  libgcrypt11-dev \
-  libgdk-pixbuf2.0-0 \
-  libgdk-pixbuf2.0-dev \
-  libgl1-mesa-dev \
-  libgl1-mesa-glx \
-  libglapi-mesa \
-  libglib2.0-0 \
-  libglib2.0-dev \
-  libgnome-keyring0 \
-  libgnome-keyring-dev \
-  libgnutls26 \
-  libgnutls-dev \
-  libgnutls-openssl27 \
-  libgnutlsxx27 \
-  libgomp1 \
-  libgpg-error0 \
-  libgpg-error-dev \
-  libgssapi-krb5-2 \
-  libgssrpc4 \
-  libgtk2.0-0 \
-  libgtk2.0-dev \
-  libk5crypto3 \
-  libkadm5clnt-mit9 \
-  libkadm5srv-mit9 \
-  libkdb5-7 \
-  libkeyutils1 \
-  libkrb5-3 \
-  libkrb5-dev \
-  libkrb5support0 \
-  libnspr4 \
-  libnspr4-dev \
-  libnss3 \
-  libnss3-dev \
-  libnss-db \
-  liborbit2 \
-  libp11-2 \
-  libp11-kit0 \
-  libpam0g \
-  libpam0g-dev \
-  libpango-1.0-0 \
-  libpango1.0-dev \
-  libpangocairo-1.0-0 \
-  libpangoft2-1.0-0 \
-  libpangoxft-1.0-0 \
-  libpci3 \
-  libpci-dev \
-  libpcre3 \
-  libpcre3-dev \
-  libpcrecpp0 \
-  libpixman-1-0 \
-  libpixman-1-dev \
-  libpng12-0 \
-  libpng12-dev \
-  libpulse0 \
-  libpulse-dev \
-  libpulse-mainloop-glib0 \
-  libselinux1 \
-  libspeechd2 \
-  libspeechd-dev \
-  libssl1.0.0 \
-  libssl-dev \
-  libstdc++6 \
-  libstdc++-4.8-dev \
-  libtasn1-6 \
-  libx11-6 \
-  libx11-dev \
-  libx11-xcb1 \
-  libxau6 \
-  libxau-dev \
-  libxcb1 \
-  libxcb1-dev \
-  libxcb-glx0 \
-  libxcb-render0 \
-  libxcb-render0-dev \
-  libxcb-shm0 \
-  libxcb-shm0-dev \
-  libxcomposite1 \
-  libxcomposite-dev \
-  libxcursor1 \
-  libxcursor-dev \
-  libxdamage1 \
-  libxdamage-dev \
-  libxdmcp6 \
-  libxext6 \
-  libxext-dev \
-  libxfixes3 \
-  libxfixes-dev \
-  libxi6 \
-  libxi-dev \
-  libxinerama1 \
-  libxinerama-dev \
-  libxrandr2 \
-  libxrandr-dev \
-  libxrender1 \
-  libxrender-dev \
-  libxss1 \
-  libxss-dev \
-  libxt6 \
-  libxt-dev \
-  libxtst6 \
-  libxtst-dev \
-  libxxf86vm1 \
-  linux-libc-dev \
-  mesa-common-dev \
-  speech-dispatcher \
-  x11proto-composite-dev \
-  x11proto-core-dev \
-  x11proto-damage-dev \
-  x11proto-fixes-dev \
-  x11proto-input-dev \
-  x11proto-kb-dev \
-  x11proto-randr-dev \
-  x11proto-record-dev \
-  x11proto-render-dev \
-  x11proto-scrnsaver-dev \
-  x11proto-xext-dev \
-  zlib1g \
-  zlib1g-dev"
-
-DEBIAN_PACKAGES_X86="libquadmath0"
-
-. ${SCRIPT_DIR}/sysroot-creator.sh
diff --git a/build/linux/sysroot_scripts/sysroot-creator-wheezy.sh b/build/linux/sysroot_scripts/sysroot-creator-wheezy.sh
deleted file mode 100755
index 9a4d1bf..0000000
--- a/build/linux/sysroot_scripts/sysroot-creator-wheezy.sh
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/bin/sh
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-SCRIPT_DIR=$(dirname $0)
-
-DISTRO=debian
-DIST=wheezy
-APT_REPO=http://http.us.debian.org/debian
-REPO_BASEDIR="${APT_REPO}/dists/${DIST}"
-KEYRING_FILE=/usr/share/keyrings/debian-archive-keyring.gpg
-
-# Sysroot packages: these are the packages needed to build chrome.
-# NOTE: When DEBIAN_PACKAGES is modified, the packagelist files must be updated
-# by running this script in GeneratePackageList mode.
-DEBIAN_PACKAGES="\
-  comerr-dev \
-  gcc-4.6 \
-  krb5-multidev \
-  libasound2 \
-  libasound2-dev \
-  libatk1.0-0 \
-  libatk1.0-dev \
-  libattr1 \
-  libavahi-client3 \
-  libavahi-common3 \
-  libc6 \
-  libc6-dev \
-  libcairo2 \
-  libcairo2-dev \
-  libcairo-gobject2 \
-  libcairo-script-interpreter2 \
-  libcap-dev \
-  libcap2 \
-  libcomerr2 \
-  libcups2 \
-  libcups2-dev \
-  libdbus-1-3 \
-  libdbus-1-dev \
-  libdbus-glib-1-2 \
-  libdrm2 \
-  libelf1 \
-  libelf-dev \
-  libexif12 \
-  libexif-dev \
-  libexpat1 \
-  libexpat1-dev \
-  libffi5 \
-  libfontconfig1 \
-  libfontconfig1-dev \
-  libfreetype6 \
-  libfreetype6-dev \
-  libgcc1 \
-  libgconf-2-4 \
-  libgconf2-4 \
-  libgconf2-dev \
-  libgcrypt11 \
-  libgcrypt11-dev \
-  libgdk-pixbuf2.0-0 \
-  libgdk-pixbuf2.0-dev \
-  libgl1-mesa-dev \
-  libgl1-mesa-glx \
-  libglapi-mesa \
-  libglib2.0-0 \
-  libglib2.0-dev \
-  libgnome-keyring0 \
-  libgnome-keyring-dev \
-  libgnutls26 \
-  libgnutls-dev \
-  libgnutls-openssl27 \
-  libgnutlsxx27 \
-  libgomp1 \
-  libgpg-error0 \
-  libgpg-error-dev \
-  libgssapi-krb5-2 \
-  libgssrpc4 \
-  libgtk2.0-0 \
-  libgtk2.0-dev \
-  libk5crypto3 \
-  libkadm5clnt-mit8 \
-  libkadm5srv-mit8 \
-  libkdb5-6 \
-  libkeyutils1 \
-  libkrb5-3 \
-  libkrb5-dev \
-  libkrb5support0 \
-  libnspr4 \
-  libnspr4-dev \
-  libnss3 \
-  libnss3-dev \
-  libnss-db \
-  liborbit2 \
-  libp11-2 \
-  libp11-kit0 \
-  libpam0g \
-  libpam0g-dev \
-  libpango1.0-0 \
-  libpango1.0-dev \
-  libpci3 \
-  libpci-dev \
-  libpcre3 \
-  libpcre3-dev \
-  libpcrecpp0 \
-  libpixman-1-0 \
-  libpixman-1-dev \
-  libpng12-0 \
-  libpng12-dev \
-  libpulse0 \
-  libpulse-dev \
-  libpulse-mainloop-glib0 \
-  libselinux1 \
-  libspeechd2 \
-  libspeechd-dev \
-  libssl1.0.0 \
-  libssl-dev \
-  libstdc++6 \
-  libstdc++6-4.6-dev \
-  libtasn1-3 \
-  libx11-6 \
-  libx11-dev \
-  libx11-xcb1 \
-  libxau6 \
-  libxau-dev \
-  libxcb1 \
-  libxcb1-dev \
-  libxcb-glx0 \
-  libxcb-render0 \
-  libxcb-render0-dev \
-  libxcb-shm0 \
-  libxcb-shm0-dev \
-  libxcomposite1 \
-  libxcomposite-dev \
-  libxcursor1 \
-  libxcursor-dev \
-  libxdamage1 \
-  libxdamage-dev \
-  libxdmcp6 \
-  libxext6 \
-  libxext-dev \
-  libxfixes3 \
-  libxfixes-dev \
-  libxi6 \
-  libxi-dev \
-  libxinerama1 \
-  libxinerama-dev \
-  libxrandr2 \
-  libxrandr-dev \
-  libxrender1 \
-  libxrender-dev \
-  libxss1 \
-  libxss-dev \
-  libxt6 \
-  libxt-dev \
-  libxtst6 \
-  libxtst-dev \
-  libxxf86vm1 \
-  linux-libc-dev \
-  mesa-common-dev \
-  speech-dispatcher \
-  x11proto-composite-dev \
-  x11proto-core-dev \
-  x11proto-damage-dev \
-  x11proto-fixes-dev \
-  x11proto-input-dev \
-  x11proto-kb-dev \
-  x11proto-randr-dev \
-  x11proto-record-dev \
-  x11proto-render-dev \
-  x11proto-scrnsaver-dev \
-  x11proto-xext-dev \
-  zlib1g \
-  zlib1g-dev"
-
-DEBIAN_PACKAGES_X86="libquadmath0"
-
-. ${SCRIPT_DIR}/sysroot-creator.sh
diff --git a/build/linux/sysroot_scripts/sysroot-creator.sh b/build/linux/sysroot_scripts/sysroot-creator.sh
deleted file mode 100644
index 822a5e8..0000000
--- a/build/linux/sysroot_scripts/sysroot-creator.sh
+++ /dev/null
@@ -1,700 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# This script should not be run directly but sourced by the other
-# scripts (e.g. sysroot-creator-trusty.sh).  Its up to the parent scripts
-# to define certain environment variables: e.g.
-#  DISTRO=ubuntu
-#  DIST=trusty
-#  APT_REPO=http://archive.ubuntu.com/ubuntu
-#  KEYRING_FILE=/usr/share/keyrings/ubuntu-archive-keyring.gpg
-#  DEBIAN_PACKAGES="gcc libz libssl"
-
-#@ This script builds a Debian sysroot images for building Google Chrome.
-#@
-#@  Generally this script is invoked as:
-#@  sysroot-creator-<flavour>.sh <mode> <args>*
-#@  Available modes are shown below.
-#@
-#@ List of modes:
-
-######################################################################
-# Config
-######################################################################
-
-set -o nounset
-set -o errexit
-
-SCRIPT_DIR=$(cd $(dirname $0) && pwd)
-
-if [ -z "${DIST:-}" ]; then
-  echo "error: DIST not defined"
-  exit 1
-fi
-
-if [ -z "${APT_REPO:-}" ]; then
-  echo "error: APT_REPO not defined"
-  exit 1
-fi
-
-if [ -z "${KEYRING_FILE:-}" ]; then
-  echo "error: KEYRING_FILE not defined"
-  exit 1
-fi
-
-if [ -z "${DEBIAN_PACKAGES:-}" ]; then
-  echo "error: DEBIAN_PACKAGES not defined"
-  exit 1
-fi
-
-readonly REPO_BASEDIR="${APT_REPO}/dists/${DIST}"
-
-readonly REQUIRED_TOOLS="wget"
-
-######################################################################
-# Package Config
-######################################################################
-
-readonly RELEASE_FILE="Release"
-readonly RELEASE_FILE_GPG="Release.gpg"
-readonly RELEASE_LIST="${REPO_BASEDIR}/${RELEASE_FILE}"
-readonly RELEASE_LIST_GPG="${REPO_BASEDIR}/${RELEASE_FILE_GPG}"
-readonly PACKAGE_FILE_AMD64="main/binary-amd64/Packages.bz2"
-readonly PACKAGE_FILE_I386="main/binary-i386/Packages.bz2"
-readonly PACKAGE_FILE_ARM="main/binary-armhf/Packages.bz2"
-readonly PACKAGE_FILE_MIPS="main/binary-mipsel/Packages.bz2"
-readonly PACKAGE_LIST_AMD64="${REPO_BASEDIR}/${PACKAGE_FILE_AMD64}"
-readonly PACKAGE_LIST_I386="${REPO_BASEDIR}/${PACKAGE_FILE_I386}"
-readonly PACKAGE_LIST_ARM="${REPO_BASEDIR}/${PACKAGE_FILE_ARM}"
-readonly PACKAGE_LIST_MIPS="${REPO_BASEDIR}/${PACKAGE_FILE_MIPS}"
-
-readonly DEBIAN_DEP_LIST_AMD64="packagelist.${DIST}.amd64"
-readonly DEBIAN_DEP_LIST_I386="packagelist.${DIST}.i386"
-readonly DEBIAN_DEP_LIST_ARM="packagelist.${DIST}.arm"
-readonly DEBIAN_DEP_LIST_MIPS="packagelist.${DIST}.mipsel"
-
-######################################################################
-# Helper
-######################################################################
-
-Banner() {
-  echo "######################################################################"
-  echo $*
-  echo "######################################################################"
-}
-
-
-SubBanner() {
-  echo "----------------------------------------------------------------------"
-  echo $*
-  echo "----------------------------------------------------------------------"
-}
-
-
-Usage() {
-  egrep "^#@" "${BASH_SOURCE[0]}" | cut --bytes=3-
-}
-
-
-DownloadOrCopy() {
-  if [ -f "$2" ] ; then
-    echo "$2 already in place"
-    return
-  fi
-
-  HTTP=0
-  echo "$1" | grep -qs ^http:// && HTTP=1
-  if [ "$HTTP" = "1" ]; then
-    SubBanner "downloading from $1 -> $2"
-    wget "$1" -O "${2}.partial"
-    mv "${2}.partial" $2
-  else
-    SubBanner "copying from $1"
-    cp "$1" "$2"
-  fi
-}
-
-
-SetEnvironmentVariables() {
-  ARCH=""
-  echo $1 | grep -qs Amd64$ && ARCH=AMD64
-  if [ -z "$ARCH" ]; then
-    echo $1 | grep -qs I386$ && ARCH=I386
-  fi
-  if [ -z "$ARCH" ]; then
-    echo $1 | grep -qs Mips$ && ARCH=MIPS
-  fi
-  if [ -z "$ARCH" ]; then
-    echo $1 | grep -qs ARM$ && ARCH=ARM
-  fi
-  if [ -z "${ARCH}" ]; then
-    echo "ERROR: Unable to determine architecture based on: $1"
-    exit 1
-  fi
-  ARCH_LOWER=$(echo $ARCH | tr '[:upper:]' '[:lower:]')
-}
-
-
-# some sanity checks to make sure this script is run from the right place
-# with the right tools
-SanityCheck() {
-  Banner "Sanity Checks"
-
-  local chrome_dir=$(cd "${SCRIPT_DIR}/../../../.." && pwd)
-  BUILD_DIR="${chrome_dir}/out/sysroot-build/${DIST}"
-  mkdir -p ${BUILD_DIR}
-  echo "Using build directory: ${BUILD_DIR}"
-
-  for tool in ${REQUIRED_TOOLS} ; do
-    if ! which ${tool} > /dev/null ; then
-      echo "Required binary $tool not found."
-      echo "Exiting."
-      exit 1
-    fi
-  done
-
-  # This is where the staging sysroot is.
-  INSTALL_ROOT="${BUILD_DIR}/${DIST}_${ARCH_LOWER}_staging"
-  TARBALL="${BUILD_DIR}/${DISTRO}_${DIST}_${ARCH_LOWER}_sysroot.tgz"
-
-  if ! mkdir -p "${INSTALL_ROOT}" ; then
-    echo "ERROR: ${INSTALL_ROOT} can't be created."
-    exit 1
-  fi
-}
-
-
-ChangeDirectory() {
-  # Change directory to where this script is.
-  cd ${SCRIPT_DIR}
-}
-
-
-ClearInstallDir() {
-  Banner "Clearing dirs in ${INSTALL_ROOT}"
-  rm -rf ${INSTALL_ROOT}/*
-}
-
-
-CreateTarBall() {
-  Banner "Creating tarball ${TARBALL}"
-  tar zcf ${TARBALL} -C ${INSTALL_ROOT} .
-}
-
-ExtractPackageBz2() {
-  bzcat "$1" | egrep '^(Package:|Filename:|SHA256:) ' > "$2"
-}
-
-GeneratePackageListAmd64() {
-  local output_file="$1"
-  local package_list="${BUILD_DIR}/Packages.${DIST}_amd64.bz2"
-  local tmp_package_list="${BUILD_DIR}/Packages.${DIST}_amd64"
-  DownloadOrCopy "${PACKAGE_LIST_AMD64}" "${package_list}"
-  VerifyPackageListing "${PACKAGE_FILE_AMD64}" "${package_list}"
-  ExtractPackageBz2 "$package_list" "$tmp_package_list"
-  GeneratePackageList "$tmp_package_list" "$output_file" "${DEBIAN_PACKAGES}
-    ${DEBIAN_PACKAGES_X86}"
-}
-
-GeneratePackageListI386() {
-  local output_file="$1"
-  local package_list="${BUILD_DIR}/Packages.${DIST}_i386.bz2"
-  local tmp_package_list="${BUILD_DIR}/Packages.${DIST}_amd64"
-  DownloadOrCopy "${PACKAGE_LIST_I386}" "${package_list}"
-  VerifyPackageListing "${PACKAGE_FILE_I386}" "${package_list}"
-  ExtractPackageBz2 "$package_list" "$tmp_package_list"
-  GeneratePackageList "$tmp_package_list" "$output_file" "${DEBIAN_PACKAGES}
-    ${DEBIAN_PACKAGES_X86}"
-}
-
-GeneratePackageListARM() {
-  local output_file="$1"
-  local package_list="${BUILD_DIR}/Packages.${DIST}_arm.bz2"
-  local tmp_package_list="${BUILD_DIR}/Packages.${DIST}_arm"
-  DownloadOrCopy "${PACKAGE_LIST_ARM}" "${package_list}"
-  VerifyPackageListing "${PACKAGE_FILE_ARM}" "${package_list}"
-  ExtractPackageBz2 "$package_list" "$tmp_package_list"
-  GeneratePackageList "$tmp_package_list" "$output_file" "${DEBIAN_PACKAGES}"
-}
-
-GeneratePackageListMips() {
-  local output_file="$1"
-  local package_list="${BUILD_DIR}/Packages.${DIST}_mips.bz2"
-  local tmp_package_list="${BUILD_DIR}/Packages.${DIST}_mips"
-  DownloadOrCopy "${PACKAGE_LIST_MIPS}" "${package_list}"
-  VerifyPackageListing "${PACKAGE_FILE_MIPS}" "${package_list}"
-  ExtractPackageBz2 "$package_list" "$tmp_package_list"
-  GeneratePackageList "$tmp_package_list" "$output_file" "${DEBIAN_PACKAGES}"
-}
-
-StripChecksumsFromPackageList() {
-  local package_file="$1"
-  sed -i 's/ [a-f0-9]\{64\}$//' "$package_file"
-}
-
-VerifyPackageFilesMatch() {
-  local downloaded_package_file="$1"
-  local stored_package_file="$2"
-  diff -u "$downloaded_package_file" "$stored_package_file"
-  if [ "$?" -ne "0" ]; then
-    echo "ERROR: downloaded package files does not match $2."
-    echo "You may need to run UpdatePackageLists."
-    exit 1
-  fi
-}
-
-######################################################################
-#
-######################################################################
-
-HacksAndPatchesAmd64() {
-  Banner "Misc Hacks & Patches"
-  # these are linker scripts with absolute pathnames in them
-  # which we rewrite here
-  lscripts="${INSTALL_ROOT}/usr/lib/x86_64-linux-gnu/libpthread.so \
-            ${INSTALL_ROOT}/usr/lib/x86_64-linux-gnu/libc.so"
-
-  # Rewrite linker scripts
-  sed -i -e 's|/usr/lib/x86_64-linux-gnu/||g'  ${lscripts}
-  sed -i -e 's|/lib/x86_64-linux-gnu/||g' ${lscripts}
-
-  # This is for chrome's ./build/linux/pkg-config-wrapper
-  # which overwrites PKG_CONFIG_PATH internally
-  SubBanner "Package Configs Symlink"
-  mkdir -p ${INSTALL_ROOT}/usr/share
-  ln -s ../lib/x86_64-linux-gnu/pkgconfig ${INSTALL_ROOT}/usr/share/pkgconfig
-
-  SubBanner "Adding an additional ld.conf include"
-  LD_SO_HACK_CONF="${INSTALL_ROOT}/etc/ld.so.conf.d/zz_hack.conf"
-  echo /usr/lib/gcc/x86_64-linux-gnu/4.6 > "$LD_SO_HACK_CONF"
-  echo /usr/lib >> "$LD_SO_HACK_CONF"
-}
-
-
-HacksAndPatchesI386() {
-  Banner "Misc Hacks & Patches"
-  # these are linker scripts with absolute pathnames in them
-  # which we rewrite here
-  lscripts="${INSTALL_ROOT}/usr/lib/i386-linux-gnu/libpthread.so \
-            ${INSTALL_ROOT}/usr/lib/i386-linux-gnu/libc.so"
-
-  # Rewrite linker scripts
-  sed -i -e 's|/usr/lib/i386-linux-gnu/||g'  ${lscripts}
-  sed -i -e 's|/lib/i386-linux-gnu/||g' ${lscripts}
-
-  # This is for chrome's ./build/linux/pkg-config-wrapper
-  # which overwrites PKG_CONFIG_PATH internally
-  SubBanner "Package Configs Symlink"
-  mkdir -p ${INSTALL_ROOT}/usr/share
-  ln -s ../lib/i386-linux-gnu/pkgconfig ${INSTALL_ROOT}/usr/share/pkgconfig
-
-  SubBanner "Adding an additional ld.conf include"
-  LD_SO_HACK_CONF="${INSTALL_ROOT}/etc/ld.so.conf.d/zz_hack.conf"
-  echo /usr/lib/gcc/i486-linux-gnu/4.6 > "$LD_SO_HACK_CONF"
-  echo /usr/lib >> "$LD_SO_HACK_CONF"
-}
-
-
-HacksAndPatchesARM() {
-  Banner "Misc Hacks & Patches"
-  # these are linker scripts with absolute pathnames in them
-  # which we rewrite here
-  lscripts="${INSTALL_ROOT}/usr/lib/arm-linux-gnueabihf/libpthread.so \
-            ${INSTALL_ROOT}/usr/lib/arm-linux-gnueabihf/libc.so"
-
-  # Rewrite linker scripts
-  sed -i -e 's|/usr/lib/arm-linux-gnueabihf/||g' ${lscripts}
-  sed -i -e 's|/lib/arm-linux-gnueabihf/||g' ${lscripts}
-
-  # This is for chrome's ./build/linux/pkg-config-wrapper
-  # which overwrites PKG_CONFIG_PATH internally
-  SubBanner "Package Configs Symlink"
-  mkdir -p ${INSTALL_ROOT}/usr/share
-  ln -s ../lib/arm-linux-gnueabihf/pkgconfig ${INSTALL_ROOT}/usr/share/pkgconfig
-}
-
-
-HacksAndPatchesMips() {
-  Banner "Misc Hacks & Patches"
-  # these are linker scripts with absolute pathnames in them
-  # which we rewrite here
-  lscripts="${INSTALL_ROOT}/usr/lib/mipsel-linux-gnu/libpthread.so \
-            ${INSTALL_ROOT}/usr/lib/mipsel-linux-gnu/libc.so"
-
-  # Rewrite linker scripts
-  sed -i -e 's|/usr/lib/mipsel-linux-gnu/||g' ${lscripts}
-  sed -i -e 's|/lib/mipsel-linux-gnu/||g' ${lscripts}
-
-  # This is for chrome's ./build/linux/pkg-config-wrapper
-  # which overwrites PKG_CONFIG_PATH internally
-  SubBanner "Package Configs Symlink"
-  mkdir -p ${INSTALL_ROOT}/usr/share
-  ln -s ../lib/mipsel-linux-gnu/pkgconfig ${INSTALL_ROOT}/usr/share/pkgconfig
-}
-
-
-InstallIntoSysroot() {
-  Banner "Install Libs And Headers Into Jail"
-
-  mkdir -p ${BUILD_DIR}/debian-packages
-  mkdir -p ${INSTALL_ROOT}
-  while (( "$#" )); do
-    local file="$1"
-    local package="${BUILD_DIR}/debian-packages/${file##*/}"
-    shift
-    local sha256sum="$1"
-    shift
-    if [ "${#sha256sum}" -ne "64" ]; then
-      echo "Bad sha256sum from package list"
-      exit 1
-    fi
-
-    Banner "Installing ${file}"
-    DownloadOrCopy ${APT_REPO}/pool/${file} ${package}
-    if [ ! -s "${package}" ] ; then
-      echo
-      echo "ERROR: bad package ${package}"
-      exit 1
-    fi
-    echo "${sha256sum}  ${package}" | sha256sum --quiet -c
-
-    SubBanner "Extracting to ${INSTALL_ROOT}"
-    dpkg --fsys-tarfile ${package}\
-      | tar -xf - --exclude=./usr/share -C ${INSTALL_ROOT}
-  done
-}
-
-
-CleanupJailSymlinks() {
-  Banner "Jail symlink cleanup"
-
-  SAVEDPWD=$(pwd)
-  cd ${INSTALL_ROOT}
-  local libdirs="lib usr/lib"
-  if [ "${ARCH}" != "MIPS" ]; then
-    libdirs+=" lib64"
-  fi
-  find $libdirs -type l -printf '%p %l\n' | while read link target; do
-    # skip links with non-absolute paths
-    echo "${target}" | grep -qs ^/ || continue
-    echo "${link}: ${target}"
-    case "${link}" in
-      usr/lib/gcc/x86_64-linux-gnu/4.*/* | usr/lib/gcc/i486-linux-gnu/4.*/* | \
-      usr/lib/gcc/arm-linux-gnueabihf/4.*/* | \
-      usr/lib/gcc/mipsel-linux-gnu/4.*/*)
-        # Relativize the symlink.
-        ln -snfv "../../../../..${target}" "${link}"
-        ;;
-      usr/lib/x86_64-linux-gnu/* | usr/lib/i386-linux-gnu/* | \
-      usr/lib/arm-linux-gnueabihf/* | usr/lib/mipsel-linux-gnu/* )
-        # Relativize the symlink.
-        ln -snfv "../../..${target}" "${link}"
-        ;;
-      usr/lib/*)
-        # Relativize the symlink.
-        ln -snfv "../..${target}" "${link}"
-        ;;
-      lib64/* | lib/*)
-        # Relativize the symlink.
-        ln -snfv "..${target}" "${link}"
-        ;;
-    esac
-  done
-
-  find $libdirs -type l -printf '%p %l\n' | while read link target; do
-    # Make sure we catch new bad links.
-    if [ ! -r "${link}" ]; then
-      echo "ERROR: FOUND BAD LINK ${link}"
-      ls -l ${link}
-      exit 1
-    fi
-  done
-  cd "$SAVEDPWD"
-}
-
-#@
-#@ BuildSysrootAmd64
-#@
-#@    Build everything and package it
-BuildSysrootAmd64() {
-  ClearInstallDir
-  local package_file="$BUILD_DIR/package_with_sha256sum_amd64"
-  GeneratePackageListAmd64 "$package_file"
-  local files_and_sha256sums="$(cat ${package_file})"
-  StripChecksumsFromPackageList "$package_file"
-  VerifyPackageFilesMatch "$package_file" "$DEBIAN_DEP_LIST_AMD64"
-  InstallIntoSysroot ${files_and_sha256sums}
-  CleanupJailSymlinks
-  HacksAndPatchesAmd64
-  CreateTarBall
-}
-
-#@
-#@ BuildSysrootI386
-#@
-#@    Build everything and package it
-BuildSysrootI386() {
-  ClearInstallDir
-  local package_file="$BUILD_DIR/package_with_sha256sum_i386"
-  GeneratePackageListI386 "$package_file"
-  local files_and_sha256sums="$(cat ${package_file})"
-  StripChecksumsFromPackageList "$package_file"
-  VerifyPackageFilesMatch "$package_file" "$DEBIAN_DEP_LIST_I386"
-  InstallIntoSysroot ${files_and_sha256sums}
-  CleanupJailSymlinks
-  HacksAndPatchesI386
-  CreateTarBall
-}
-
-#@
-#@ BuildSysrootARM
-#@
-#@    Build everything and package it
-BuildSysrootARM() {
-  ClearInstallDir
-  local package_file="$BUILD_DIR/package_with_sha256sum_arm"
-  GeneratePackageListARM "$package_file"
-  local files_and_sha256sums="$(cat ${package_file})"
-  StripChecksumsFromPackageList "$package_file"
-  VerifyPackageFilesMatch "$package_file" "$DEBIAN_DEP_LIST_ARM"
-  APT_REPO=${APR_REPO_ARM:=$APT_REPO}
-  InstallIntoSysroot ${files_and_sha256sums}
-  CleanupJailSymlinks
-  HacksAndPatchesARM
-  CreateTarBall
-}
-
-#@
-#@ BuildSysrootMips
-#@
-#@    Build everything and package it
-BuildSysrootMips() {
-  ClearInstallDir
-  local package_file="$BUILD_DIR/package_with_sha256sum_arm"
-  GeneratePackageListMips "$package_file"
-  local files_and_sha256sums="$(cat ${package_file})"
-  StripChecksumsFromPackageList "$package_file"
-  VerifyPackageFilesMatch "$package_file" "$DEBIAN_DEP_LIST_MIPS"
-  APT_REPO=${APR_REPO_MIPS:=$APT_REPO}
-  InstallIntoSysroot ${files_and_sha256sums}
-  CleanupJailSymlinks
-  HacksAndPatchesMips
-  CreateTarBall
-}
-
-#@
-#@ BuildSysrootAll
-#@
-#@    Build sysroot images for all architectures
-BuildSysrootAll() {
-  RunCommand BuildSysrootAmd64
-  RunCommand BuildSysrootI386
-  RunCommand BuildSysrootARM
-  RunCommand BuildSysrootMips
-}
-
-UploadSysroot() {
-  local rev=$1
-  if [ -z "${rev}" ]; then
-    echo "Please specify a revision to upload at."
-    exit 1
-  fi
-  set -x
-  gsutil cp -a public-read "${TARBALL}" \
-      "gs://chrome-linux-sysroot/toolchain/$rev/"
-  set +x
-}
-
-#@
-#@ UploadSysrootAmd64 <revision>
-#@
-UploadSysrootAmd64() {
-  UploadSysroot "$@"
-}
-
-#@
-#@ UploadSysrootI386 <revision>
-#@
-UploadSysrootI386() {
-  UploadSysroot "$@"
-}
-
-#@
-#@ UploadSysrootARM <revision>
-#@
-UploadSysrootARM() {
-  UploadSysroot "$@"
-}
-
-#@
-#@ UploadSysrootMips <revision>
-#@
-UploadSysrootMips() {
-  UploadSysroot "$@"
-}
-
-#@
-#@ UploadSysrootAll <revision>
-#@
-#@    Upload sysroot image for all architectures
-UploadSysrootAll() {
-  RunCommand UploadSysrootAmd64 "$@"
-  RunCommand UploadSysrootI386 "$@"
-  RunCommand UploadSysrootARM "$@"
-  RunCommand UploadSysrootMips "$@"
-}
-
-#
-# CheckForDebianGPGKeyring
-#
-#     Make sure the Debian GPG keys exist. Otherwise print a helpful message.
-#
-CheckForDebianGPGKeyring() {
-  if [ ! -e "$KEYRING_FILE" ]; then
-    echo "Debian GPG keys missing. Install the debian-archive-keyring package."
-    exit 1
-  fi
-}
-
-#
-# VerifyPackageListing
-#
-#     Verifies the downloaded Packages.bz2 file has the right checksums.
-#
-VerifyPackageListing() {
-  local file_path=$1
-  local output_file=$2
-  local release_file="${BUILD_DIR}/${RELEASE_FILE}"
-  local release_file_gpg="${BUILD_DIR}/${RELEASE_FILE_GPG}"
-  local tmp_keyring_file="${BUILD_DIR}/keyring.gpg"
-
-  CheckForDebianGPGKeyring
-
-  DownloadOrCopy ${RELEASE_LIST} ${release_file}
-  DownloadOrCopy ${RELEASE_LIST_GPG} ${release_file_gpg}
-  echo "Verifying: ${release_file} with ${release_file_gpg}"
-  cp "${KEYRING_FILE}" "${tmp_keyring_file}"
-  gpg --primary-keyring "${tmp_keyring_file}" --recv-keys 2B90D010
-  gpgv --keyring "${tmp_keyring_file}" "${release_file_gpg}" "${release_file}"
-
-  echo "Verifying: ${output_file}"
-  local checksums=$(grep ${file_path} ${release_file} | cut -d " " -f 2)
-  local sha256sum=$(echo ${checksums} | cut -d " " -f 3)
-
-  if [ "${#sha256sum}" -ne "64" ]; then
-    echo "Bad sha256sum from ${RELEASE_LIST}"
-    exit 1
-  fi
-
-  echo "${sha256sum}  ${output_file}" | sha256sum --quiet -c
-}
-
-#
-# GeneratePackageList
-#
-#     Looks up package names in ${BUILD_DIR}/Packages and write list of URLs
-#     to output file.
-#
-GeneratePackageList() {
-  local input_file="$1"
-  local output_file="$2"
-  echo "Updating: ${output_file} from ${input_file}"
-  /bin/rm -f "${output_file}"
-  shift
-  shift
-  for pkg in $@ ; do
-    local pkg_full=$(grep -A 1 " ${pkg}\$" "$input_file" | \
-      egrep -o "pool/.*")
-    if [ -z "${pkg_full}" ]; then
-        echo "ERROR: missing package: $pkg"
-        exit 1
-    fi
-    local pkg_nopool=$(echo "$pkg_full" | sed "s/^pool\///")
-    local sha256sum=$(grep -A 4 " ${pkg}\$" "$input_file" | \
-      grep ^SHA256: | sed 's/^SHA256: //')
-    if [ "${#sha256sum}" -ne "64" ]; then
-      echo "Bad sha256sum from Packages"
-      exit 1
-    fi
-    echo $pkg_nopool $sha256sum >> "$output_file"
-  done
-  # sort -o does an in-place sort of this file
-  sort "$output_file" -o "$output_file"
-}
-
-#@
-#@ UpdatePackageListsAmd64
-#@
-#@     Regenerate the package lists such that they contain an up-to-date
-#@     list of URLs within the Debian archive. (For amd64)
-UpdatePackageListsAmd64() {
-  GeneratePackageListAmd64 "$DEBIAN_DEP_LIST_AMD64"
-  StripChecksumsFromPackageList "$DEBIAN_DEP_LIST_AMD64"
-}
-
-#@
-#@ UpdatePackageListsI386
-#@
-#@     Regenerate the package lists such that they contain an up-to-date
-#@     list of URLs within the Debian archive. (For i386)
-UpdatePackageListsI386() {
-  GeneratePackageListI386 "$DEBIAN_DEP_LIST_I386"
-  StripChecksumsFromPackageList "$DEBIAN_DEP_LIST_I386"
-}
-
-#@
-#@ UpdatePackageListsARM
-#@
-#@     Regenerate the package lists such that they contain an up-to-date
-#@     list of URLs within the Debian archive. (For arm)
-UpdatePackageListsARM() {
-  GeneratePackageListARM "$DEBIAN_DEP_LIST_ARM"
-  StripChecksumsFromPackageList "$DEBIAN_DEP_LIST_ARM"
-}
-
-#@
-#@ UpdatePackageListsMips
-#@
-#@     Regenerate the package lists such that they contain an up-to-date
-#@     list of URLs within the Debian archive. (For arm)
-UpdatePackageListsMips() {
-  GeneratePackageListMips "$DEBIAN_DEP_LIST_MIPS"
-  StripChecksumsFromPackageList "$DEBIAN_DEP_LIST_MIPS"
-}
-
-#@
-#@ UpdatePackageListsAll
-#@
-#@    Regenerate the package lists for all architectures.
-UpdatePackageListsAll() {
-  RunCommand UpdatePackageListsAmd64
-  RunCommand UpdatePackageListsI386
-  RunCommand UpdatePackageListsARM
-  RunCommand UpdatePackageListsMips
-}
-
-RunCommand() {
-  SetEnvironmentVariables "$1"
-  SanityCheck
-  "$@"
-}
-
-if [ $# -eq 0 ] ; then
-  echo "ERROR: you must specify a mode on the commandline"
-  echo
-  Usage
-  exit 1
-elif [ "$(type -t $1)" != "function" ]; then
-  echo "ERROR: unknown function '$1'." >&2
-  echo "For help, try:"
-  echo "    $0 help"
-  exit 1
-else
-  ChangeDirectory
-  if echo $1 | grep -qs "All$"; then
-    "$@"
-  else
-    RunCommand "$@"
-  fi
-fi
diff --git a/build/linux/sysroot_scripts/sysroots.json b/build/linux/sysroot_scripts/sysroots.json
new file mode 100644
index 0000000..32b3dd9
--- /dev/null
+++ b/build/linux/sysroot_scripts/sysroots.json
@@ -0,0 +1,68 @@
+{
+    "jessie_amd64": {
+        "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
+        "Sha1Sum": "046a82b027f069bdde98424850490c315e2f31f9",
+        "SysrootDir": "debian_jessie_amd64-sysroot",
+        "Tarball": "debian_jessie_amd64_sysroot.tgz"
+    },
+    "jessie_arm": {
+        "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
+        "Sha1Sum": "7addeb28195f7f367cbaba46cdba99925a0646b2",
+        "SysrootDir": "debian_jessie_arm-sysroot",
+        "Tarball": "debian_jessie_arm_sysroot.tgz"
+    },
+    "jessie_arm64": {
+        "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
+        "Sha1Sum": "1b853d8082321256fe646589558da3980875d767",
+        "SysrootDir": "debian_jessie_arm64-sysroot",
+        "Tarball": "debian_jessie_arm64_sysroot.tgz"
+    },
+    "jessie_i386": {
+        "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
+        "Sha1Sum": "7edfe877ea71473def2d9e6958474d76c9ff98b6",
+        "SysrootDir": "debian_jessie_i386-sysroot",
+        "Tarball": "debian_jessie_i386_sysroot.tgz"
+    },
+    "jessie_mips": {
+        "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
+        "Sha1Sum": "3d0c5640a39e264d7180df2bac1192308f8a256e",
+        "SysrootDir": "debian_jessie_mips-sysroot",
+        "Tarball": "debian_jessie_mips_sysroot.tgz"
+    },
+    "precise_amd64": {
+        "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
+        "Sha1Sum": "69e1d3c9efda92ba265ce7bb653be546e8dde7e4",
+        "SysrootDir": "ubuntu_precise_amd64-sysroot",
+        "Tarball": "ubuntu_precise_amd64_sysroot.tgz"
+    },
+    "trusty_arm": {
+        "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
+        "Sha1Sum": "d1591e8fc6a273af1fbf3d1a864f098081d06dd1",
+        "SysrootDir": "ubuntu_trusty_arm-sysroot",
+        "Tarball": "ubuntu_trusty_arm_sysroot.tgz"
+    },
+    "wheezy_amd64": {
+        "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
+        "Sha1Sum": "3a150574635247c7fc7f135df10c2565d745c76c",
+        "SysrootDir": "debian_wheezy_amd64-sysroot",
+        "Tarball": "debian_wheezy_amd64_sysroot.tgz"
+    },
+    "wheezy_arm": {
+        "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
+        "Sha1Sum": "65a16e16ffbb570f044c7139871665bb6689be1c",
+        "SysrootDir": "debian_wheezy_arm-sysroot",
+        "Tarball": "debian_wheezy_arm_sysroot.tgz"
+    },
+    "wheezy_i386": {
+        "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
+        "Sha1Sum": "e7fa85ede53048dd3e8f3ea8009af954f0b7ef0d",
+        "SysrootDir": "debian_wheezy_i386-sysroot",
+        "Tarball": "debian_wheezy_i386_sysroot.tgz"
+    },
+    "wheezy_mips": {
+        "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
+        "Sha1Sum": "edf929f216611a7fae41e537687c75be50c8fdec",
+        "SysrootDir": "debian_wheezy_mips-sysroot",
+        "Tarball": "debian_wheezy_mips_sysroot.tgz"
+    }
+}
diff --git a/build/toolchain/android/BUILD.gn b/build/toolchain/android/BUILD.gn
index f680609..38f95b9 100644
--- a/build/toolchain/android/BUILD.gn
+++ b/build/toolchain/android/BUILD.gn
@@ -4,7 +4,6 @@
 
 import("//build/config/sysroot.gni")  # Imports android/config.gni.
 import("//build/toolchain/ccache.gni")
-import("//build/toolchain/clang.gni")
 import("//build/toolchain/goma.gni")
 import("//build/toolchain/gcc_toolchain.gni")
 
diff --git a/build/toolchain/clang.gni b/build/toolchain/clang.gni
deleted file mode 100644
index c680384..0000000
--- a/build/toolchain/clang.gni
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-declare_args() {
-  # Enable the optional type profiler in Clang, which will tag heap allocations
-  # with the allocation type.
-  use_clang_type_profiler = false
-}
diff --git a/build/toolchain/linux/BUILD.gn b/build/toolchain/linux/BUILD.gn
index 7ad72ac..7a3d2df 100644
--- a/build/toolchain/linux/BUILD.gn
+++ b/build/toolchain/linux/BUILD.gn
@@ -4,7 +4,6 @@
 
 import("//build/config/sysroot.gni")
 import("//build/toolchain/ccache.gni")
-import("//build/toolchain/clang.gni")
 import("//build/toolchain/gcc_toolchain.gni")
 import("//build/toolchain/goma.gni")
 
@@ -42,6 +41,22 @@
   is_clang = false
 }
 
+gcc_toolchain("clang_arm") {
+  prefix = rebase_path("//buildtools/toolchain/clang+llvm-x86_64-linux/bin",
+                       root_build_dir)
+  cc = "${compiler_prefix}${prefix}/clang"
+  cxx = "${compiler_prefix}${prefix}/clang++"
+  readelf = "readelf"
+  nm = "${prefix}/llvm-nm"
+  ar = "${prefix}/llvm-ar"
+  ld = cxx
+  strip = "${prefix}/strip"
+
+  toolchain_cpu = "arm"
+  toolchain_os = "linux"
+  is_clang = true
+}
+
 gcc_toolchain("arm64") {
   prefix = "aarch64-linux-gnu-"
   if (toolchain_prefix != "") {
@@ -62,6 +77,23 @@
   is_clang = false
 }
 
+gcc_toolchain("clang_arm64") {
+  prefix = rebase_path("//buildtools/toolchain/clang+llvm-x86_64-linux/bin",
+                       root_build_dir)
+  cc = "${compiler_prefix}${prefix}/clang"
+  cxx = "${compiler_prefix}${prefix}/clang++"
+
+  readelf = "readelf"
+  nm = "${prefix}/llvm-nm"
+  ar = "${prefix}/llvm-ar"
+  ld = cxx
+  strip = "${prefix}/strip"
+
+  toolchain_cpu = "arm64"
+  toolchain_os = "linux"
+  is_clang = true
+}
+
 gcc_toolchain("clang_x86") {
   prefix = rebase_path("//buildtools/toolchain/clang+llvm-x86_64-linux/bin",
                        root_build_dir)
diff --git a/build/toolchain/mac/BUILD.gn b/build/toolchain/mac/BUILD.gn
index b520efd..4ccc69b 100644
--- a/build/toolchain/mac/BUILD.gn
+++ b/build/toolchain/mac/BUILD.gn
@@ -11,7 +11,6 @@
 
 assert(host_os == "mac")
 
-import("//build/toolchain/clang.gni")
 import("//build/toolchain/goma.gni")
 import("//build/config/sysroot.gni")
 
diff --git a/docs/language/dart.sty b/docs/language/dart.sty
index b331d80..b935898 100644
--- a/docs/language/dart.sty
+++ b/docs/language/dart.sty
@@ -1,8 +1,8 @@
 \def\keyword#1{\textbf{#1}}
 \def\builtinId#1{\textbf{#1}}
+\def\code#1{\textsf{#1}}
 \def\comment#1{\textit{#1}}
 \def\capt#1{\rmfamily \caption{#1}}
-\newcommand{\cd}[1]{\textsf{#1}}
 \def\lt{\ensuremath{<}}
 \def\gt{\ensuremath{>}}
 \def\<{\ensuremath{\langle}}
@@ -70,6 +70,13 @@
 \def\WITH{\keyword{with}}
 \def\YIELD{\keyword{yield}}
 
+% A quoted comma as used in the grammar: needs spacing fix.
+\newcommand{\gcomma}{\mbox{`,\hspace{-0.1em}'}}
+
+% Used as line break in the right hand side of a grammar
+% alternative, that is, when starting a "continuation line".
+\newcommand{\gnewline}{\\\mbox{}\qquad{}}
+
 \newenvironment{Q}[1]{{\bf #1}}{}
 \newenvironment{rationale}[1]{{\it #1}}{}
 \newenvironment{commentary}[1]{{\sf #1}}{}
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex
index a336632..7203fd1 100644
--- a/docs/language/dartLangSpec.tex
+++ b/docs/language/dartLangSpec.tex
@@ -6,8 +6,7 @@
 \usepackage{hyperref}
 \usepackage{lmodern}
 \usepackage[T1]{fontenc}
-\newcommand{\code}[1]{{\sf #1}}
-\title{Dart Programming Language Specification  \\
+\title{Dart Programming Language Specification\\
 {5th edition draft}\\
 {\large Version 2.0.0-dev}}
 
@@ -31,6 +30,8 @@
 % - Add >>> as overridable operator.
 % - If initializing formal has type annotation, require subtype of field.
 % - Constant `==` operations now also allowed if just one operand is null.
+% - Make flatten not be recursive.
+% - Disallow implementing two instantiations of the same generic interface.
 %
 % 1.15
 % - Change how language specification describes control flow.
@@ -82,39 +83,44 @@
 \maketitle
 \tableofcontents
 
-
 \newpage
 
 \pagestyle{myheadings}
 \markright{Dart Programming Language Specification}
 
+
 % begin Ecma boilerplate
 \section{Scope}
 \LMLabel{ecmaScope}
 
 \LMHash{}
-This Ecma standard specifies the syntax and semantics of the Dart programming language.  It does not specify the APIs of the Dart libraries except where those library elements are essential to the correct functioning of the language itself (e.g., the existence of class \cd{Object} with methods such as \cd{noSuchMethod}, \cd{runtimeType}).
+This Ecma standard specifies the syntax and semantics of the Dart programming language.
+It does not specify the APIs of the Dart libraries except where those library elements are essential to the correct functioning of the language itself (e.g., the existence of class \code{Object} with methods such as \code{noSuchMethod}, \code{runtimeType}).
+
 
 \section{Conformance}
 \LMLabel{ecmaConformance}
 
 \LMHash{}
-A conforming  implementation of the Dart programming language must provide and support all the  APIs (libraries, types, functions, getters, setters, whether top-level, static, instance or local) mandated in this specification.
+A conforming implementation of the Dart programming language must provide and support all the APIs (libraries, types, functions, getters, setters, whether top-level, static, instance or local) mandated in this specification.
 
 \LMHash{}
 A conforming implementation is permitted to provide additional APIs, but not additional syntax, except for experimental features in support of null-aware cascades that are likely to be introduced in the next revision of this specification.
 
+
 \section{Normative References}
 \LMLabel{ecmaNormativeReferences}
 
 \LMHash{}
-The following referenced documents are indispensable for the application of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.
+The following referenced documents are indispensable for the application of this document.
+For dated references, only the edition cited applies.
+For undated references, the latest edition of the referenced document (including any amendments) applies.
 
 \begin{enumerate}
 \item
-The Unicode Standard, Version 5.0, as amended by Unicode 5.1.0, or successor.
+  The Unicode Standard, Version 5.0, as amended by Unicode 5.1.0, or successor.
 \item
-Dart API Reference, https://api.dartlang.org/
+  Dart API Reference, https://api.dartlang.org/
 \end{enumerate}
 
 
@@ -122,7 +128,8 @@
 \LMLabel{ecmaTermsAndDefinitions}
 
 \LMHash{}
-Terms and definitions used in this specification are given in the body of the specification proper. Such terms are highlighted in italics when they are introduced, e.g., `we use the term {\em verbosity} to refer to the property of excess verbiage'.
+Terms and definitions used in this specification are given in the body of the specification proper.
+Such terms are highlighted in italics when they are introduced, e.g., `we use the term {\em verbosity} to refer to the property of excess verbiage'.
 % End Ecma Boilerplate
 
 
@@ -130,73 +137,102 @@
 \LMLabel{notation}
 
 \LMHash{}
-We distinguish between normative and non-normative text. Normative text defines the rules of Dart. It is given in this font. At this time, non-normative text includes:
+We distinguish between normative and non-normative text.
+Normative text defines the rules of Dart.
+It is given in this font.
+At this time, non-normative text includes:
 \begin{itemize}
-\item[Rationale] Discussion of the motivation for language design decisions appears in italics. \rationale{Distinguishing normative from non-normative helps clarify what part of the text is binding and what part is merely expository.}
-\item[Commentary] Comments such as  ``\commentary{The careful reader will have noticed that the name Dart has four characters}'' serve to illustrate or clarify the specification, but are redundant with the normative text.  \commentary{The difference between commentary and rationale can be subtle.} \rationale{ Commentary is more general than rationale, and may include illustrative examples or clarifications. }
-\item[Open questions] (\Q{in this font}). Open questions are points that are unsettled in the mind of the author(s) of the specification; expect them (the questions, not the authors; precision is important in a specification) to be eliminated in the final specification. \Q{Should the text at the end of the previous bullet be rationale or commentary?}
+\item[Rationale]
+  Discussion of the motivation for language design decisions appears in italics.
+\rationale{
+Distinguishing normative from non-normative helps clarify what part of the text is binding and what part is merely expository.
+}
+\item[Commentary]
+  Comments such as ``\commentary{The careful reader will have noticed that the name Dart has four characters}'' serve to illustrate or clarify the specification, but are redundant with the normative text.
+\commentary{
+The difference between commentary and rationale can be subtle.
+}
+\rationale{
+Commentary is more general than rationale, and may include illustrative examples or clarifications.
+}
+\item[Open questions] (\Q{in this font}).
+Open questions are points that are unsettled in the mind of the author(s) of the specification; expect them (the questions, not the authors; precision is important in a specification) to be eliminated in the final specification.
+\Q{Should the text at the end of the previous bullet be rationale or commentary?}
 \end{itemize}
 
 \LMHash{}
-Reserved words and built-in identifiers  (\ref{identifierReference}) appear in {\bf bold}.
+Reserved words and built-in identifiers (\ref{identifierReference}) appear in {\bf bold}.
 
 \commentary{
 Examples would be \SWITCH{} or \CLASS{}.
 }
 
-
 \LMHash{}
-Grammar productions are given in a common variant of EBNF.  The left hand side of a production ends with a colon.  On the right hand side, alternation is represented by vertical bars, and sequencing by spacing.  As in PEGs, alternation gives priority to the left. Optional elements of a production are suffixed by a question mark like so: \code{anElephant?}.  Appending a star to an element of a production means it may be repeated zero or more times.  Appending a plus sign to a production means it occurs one or more times. Parentheses are used for grouping. Negation  is represented by prefixing an element of a production with a tilde. Negation is similar to the not combinator of PEGs, but it consumes input if it matches. In the context of a lexical production it consumes a single character if there is one;  otherwise, a single token if there is one.
+Grammar productions are given in a common variant of EBNF.
+The left hand side of a production ends with a colon.
+On the right hand side, alternation is represented by vertical bars, and sequencing by spacing.
+As in PEGs, alternation gives priority to the left.
+Optional elements of a production are suffixed by a question mark like so: \code{anElephant?}.
+Appending a star to an element of a production means it may be repeated zero or more times.
+Appending a plus sign to a production means it occurs one or more times.
+Parentheses are used for grouping.
+Negation is represented by prefixing an element of a production with a tilde.
+Negation is similar to the not combinator of PEGs, but it consumes input if it matches.
+In the context of a lexical production it consumes a single character if there is one; otherwise, a single token if there is one.
 
-\commentary{ An example would be:}
+\commentary{
+An example would be:
+}
 
 \begin{grammar}
 {\sf
 {\bf AProduction:}AnAlternative;
-    AnotherAlternative;
-    OneThing After Another;
-    ZeroOrMoreThings*;
-    OneOrMoreThings+;
-    AnOptionalThing?;
-    (Some Grouped Things);
-    \~{}NotAThing;
-    A\_LEXICAL\_THING
-    .
-    }
+  AnotherAlternative;
+  OneThing After Another;
+  ZeroOrMoreThings*;
+  OneOrMoreThings+;
+  AnOptionalThing?;
+  (Some Grouped Things);
+  \~{}NotAThing;
+  A\_LEXICAL\_THING
+  .
+}
 \end{grammar}
 
-% need a match anything or a production that does that, so we can correct bugs wrt use
-% ~. ~ does not actually parse stuff - it just looks ahead and checks. To get the effect of
-% parsing anything but X, one needs ~X ANYTHING, not just ~X. There are bugs in the
-% grammar related to this.
-% The alternative is to define ~X as anything but X, or to introduce an anythingBut(X)
-% combinator, such as !X
-
 \LMHash{}
-Both syntactic and lexical productions are represented this way. Lexical productions are distinguished by their names. The names of lexical productions consist exclusively of upper case characters and underscores.  As always, within grammatical productions, whitespace and comments between elements of the production are implicitly ignored unless stated otherwise.
+Both syntactic and lexical productions are represented this way.
+Lexical productions are distinguished by their names.
+The names of lexical productions consist exclusively of upper case characters and underscores.
+As always, within grammatical productions, whitespace and comments between elements of the production are implicitly ignored unless stated otherwise.
 Punctuation tokens appear in quotes.
 
 \LMHash{}
 Productions are embedded, as much as possible, in the discussion of the constructs they represent.
 
 \LMHash{}
-A list $x_1, \ldots, x_n$ denotes any list of $n$ elements of the form $x_i, 1 \le i \le n$. Note that $n$ may be zero, in which case the list is empty. We use such lists extensively throughout this specification.
+A list $x_1, \ldots, x_n$ denotes any list of $n$ elements of the form $x_i, 1 \le i \le n$.
+Note that $n$ may be zero, in which case the list is empty.
+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$.
 
 \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. The intent is to denote a list (respectively map) object whose elements are the $o_i$ (respectively, whose keys are the $k_i$ and values are the $o_i$).
+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.
+The intent is to denote a list (respectively map) object whose elements are the $o_i$ (respectively, whose keys are the $k_i$ and values are the $o_i$).
 
 \LMHash{}
-The specifications of operators often involve statements such as $x$ $op$ $y$ is equivalent to the method invocation $x.op(y)$. Such specifications should be understood as a shorthand for:
+The specifications of operators often involve statements such as $x$ $op$ $y$ is equivalent to the method invocation $x.op(y)$.
+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^\prime(y)$, assuming the class of $x$ actually declared a non-operator method named $op^\prime$ defining the same function as the operator $op$.
 \end{itemize}
 
- \rationale{This circumlocution is required because x.op(y), where op is an operator, is not legal syntax. However, it is painfully verbose, and we prefer to state this rule once here, and use a concise and clear notation across the specification.
- }
+\rationale{
+This circumlocution is required because x.op(y), where op is an operator, is not legal syntax.
+However, it is painfully verbose, and we prefer to state this rule once here, and use a concise and clear notation across the specification.
+}
 
 \LMHash{}
 When the specification refers to the order given in the program, it means the order of the program source code text, scanning left-to-right and top-to-bottom.
@@ -214,27 +250,36 @@
 
 \LMHash{}
 When the specification says that one piece of syntax {\em is equivalent to} another piece of syntax, it means that it is equivalent in all ways, and the former syntax should generate the same static warnings and have the same run-time behavior as the latter.
-\commentary {
+\commentary{
 Error messages, if any, should always refer to the original syntax.
 }
 If execution or evaluation of a construct is said to be equivalent to execution or evaluation of another construct, then only the run-time behavior is equivalent, and only the static warnings or errors mentioned for the original syntax applies.
 
+
 \section{Overview}
 \LMLabel{overview}
 
 \LMHash{}
-Dart is a class-based, single-inheritance, pure object-oriented programming language. Dart is optionally typed (\ref{types}) and supports reified generics. The run-time type of every object is represented as an instance of class \code{Type}  which can be obtained by calling the getter  \code{runtimeType} declared in class \code{Object}, the root of the Dart class hierarchy.
+Dart is a class-based, single-inheritance, pure object-oriented programming language.
+Dart is optionally typed (\ref{types}) and supports reified generics.
+The run-time type of every object is represented as an instance of class \code{Type} which can be obtained by calling the getter \code{runtimeType} declared in class \code{Object}, the root of the Dart class hierarchy.
 
 \LMHash{}
-Dart programs may be statically checked. The static checker will report some violations of the type rules, but such violations do not abort compilation or preclude execution.
+Dart programs may be statically checked.
+The static checker will report some violations of the type rules, but such violations do not abort compilation or preclude execution.
 
 \LMHash{}
-Dart programs may be executed in one of two modes: production mode or checked mode. In production mode, static type annotations (\ref{staticTypes}) have absolutely no effect on execution with the exception of reflection and structural type tests.
+Dart programs may be executed in one of two modes: production mode or checked mode.
+In production mode, static type annotations (\ref{staticTypes}) have absolutely no effect on execution with the exception of reflection and structural type tests.
 
 \commentary{
-Reflection, by definition, examines the program structure. If we provide reflective access to the type of a declaration, or to source code, it will inevitably produce results that depend on the types used in the underlying code.
+Reflection, by definition, examines the program structure.
+If we provide reflective access to the type of a declaration, or to source code, it will inevitably produce results that depend on the types used in the underlying code.
 
-Type tests also examine the types in a program explicitly. Nevertheless, in most cases, these will not depend on type annotations. The exceptions to this rule are type tests involving function types. Function types are structural, and so depend on the types declared for their parameters and on their return types.
+Type tests also examine the types in a program explicitly.
+Nevertheless, in most cases, these will not depend on type annotations.
+The exceptions to this rule are type tests involving function types.
+Function types are structural, and so depend on the types declared for their parameters and on their return types.
 }
 
 \LMHash{}
@@ -243,27 +288,37 @@
 \commentary{
 The coexistence between optional typing and reification is based on the following:
 \begin{enumerate}
-\item Reified type information reflects the types of objects at run time and may always be queried by dynamic typechecking constructs (the analogs of instanceOf, casts, typecase etc. in other languages). Reified type information includes class declarations, the run-time type (aka class) of an object, and type arguments to constructors.
+\item Reified type information reflects the types of objects at run time and may always be queried by dynamic typechecking constructs (the analogs of instanceOf, casts, typecase etc.\ in other languages).
+Reified type information includes class declarations, the run-time type (aka class) of an object, and type arguments to constructors.
 \item Static type annotations determine the types of variables and function declarations (including methods and constructors).
-\item Production mode respects optional typing. Static type annotations do not affect run-time behavior.
+\item Production mode respects optional typing.
+Static type annotations do not affect run-time behavior.
 \item Checked mode utilizes static type annotations and dynamic type information aggressively yet selectively to provide early error detection during development.
 \end{enumerate}
 }
 
 \LMHash{}
-Dart programs are organized in a modular fashion into units called {\em libraries} (\ref{librariesAndScripts}). Libraries are units of encapsulation and may be mutually recursive.
+Dart programs are organized in a modular fashion into units called {\em libraries} (\ref{librariesAndScripts}).
+Libraries are units of encapsulation and may be mutually recursive.
 
-\commentary{However they are not first class.  To get multiple copies of a library running simultaneously, one needs to spawn an isolate.
+\commentary{
+However they are not first class.
+To get multiple copies of a library running simultaneously, one needs to spawn an isolate.
 }
 
+
 \subsection{Scoping}
 \LMLabel{scoping}
 
 \LMHash{}
-A {\em namespace} is a mapping of names denoting declarations to actual declarations.  Let $NS$ be a namespace. We say that a name $n$ {\em is in }$NS$ if $n$ is a key of $NS$. We say a declaration $d$ {\em is in }$NS$ if a key of $NS$ maps to $d$.
+A {\em namespace} is a mapping of names denoting declarations to actual declarations.
+Let $NS$ be a namespace.
+We say that a name $n$ {\em is in }$NS$ if $n$ is a key of $NS$.
+We say a declaration $d$ {\em is in }$NS$ if a key of $NS$ maps to $d$.
 
 \LMHash{}
-A scope $S_0$ induces a namespace $NS_0$ that maps the simple name of each variable, type or function declaration $d$ declared in $S_0$ to $d$. Labels are not included in the induced namespace of a scope; instead they have their own dedicated namespace.
+A scope $S_0$ induces a namespace $NS_0$ that maps the simple name of each variable, type or function declaration $d$ declared in $S_0$ to $d$.
+Labels are not included in the induced namespace of a scope; instead they have their own dedicated namespace.
 
 \commentary{
 It is therefore impossible, e.g., to define a class that declares a method and a getter with the same name in Dart.
@@ -274,19 +329,23 @@
 It is a compile-time error if there is more than one entity with the same name declared in the same scope.
 
 \commentary{
-In some cases, the name of the declaration differs from the identifier used to declare it.  Setters have names that are distinct from the corresponding getters because they always have an = automatically added at the end, and unary minus has the special name unary-.
+In some cases, the name of the declaration differs from the identifier used to declare it.
+Setters have names that are distinct from the corresponding getters because they always have an = automatically added at the end, and unary minus has the special name unary-.
 }
 
 \LMHash{}
-Dart is lexically scoped.    Scopes may nest.  A name or declaration $d$ is {\em available in scope} $S$ if $d$ is in the namespace induced by $S$ or if $d$ is available in the lexically enclosing scope of $S$. We  say that a name or declaration $d$ is {\em in scope} if $d$ is available in the current scope.
-
+Dart is lexically scoped.
+Scopes may nest.
+A name or declaration $d$ is {\em available in scope} $S$ if $d$ is in the namespace induced by $S$ or if $d$ is available in the lexically enclosing scope of $S$.
+We say that a name or declaration $d$ is {\em in scope} if $d$ is available in the current scope.
 
 \LMHash{}
-If a  declaration $d$ named $n$ is in the namespace induced by a scope $S$, then $d$ {\em hides} any declaration named $n$ that is available in the lexically enclosing scope of $S$.
+If a declaration $d$ named $n$ is in the namespace induced by a scope $S$, then $d$ {\em hides} any declaration named $n$ that is available in the lexically enclosing scope of $S$.
 
-\commentary {
+\commentary{
 A consequence of these rules is that it is possible to hide a type with a method or variable.
-Naming conventions usually prevent such abuses. Nevertheless,the following program is legal:
+Naming conventions usually prevent such abuses.
+Nevertheless,the following program is legal:
 }
 
 \begin{dartCode}
@@ -296,12 +355,16 @@
 \end{dartCode}
 
 \LMHash{}
-Names may be introduced into a scope by  declarations within the scope or  by other mechanisms such as imports or inheritance.
+Names may be introduced into a scope by declarations within the scope or by other mechanisms such as imports or inheritance.
 
 \rationale{
-The interaction of lexical scoping and inheritance is a subtle one.  Ultimately, the question is whether lexical scoping takes precedence over inheritance or vice versa. Dart chooses the former.
+The interaction of lexical scoping and inheritance is a subtle one.
+Ultimately, the question is whether lexical scoping takes precedence over inheritance or vice versa.
+Dart chooses the former.
 
-Allowing inherited names to take precedence over locally declared names can create unexpected situations as code evolves. Specifically, the behavior of code in a subclass can change without warning  if a new name is introduced in a superclass.  Consider:
+Allowing inherited names to take precedence over locally declared names can create unexpected situations as code evolves.
+Specifically, the behavior of code in a subclass can change without warning if a new name is introduced in a superclass.
+Consider:
 }
 
 \begin{dartCode}
@@ -314,7 +377,9 @@
 \CLASS{} C \EXTENDS{} S\{ bar() => foo();\}
 \end{dartCode}
 
-\rationale{Now assume a method \code{foo()} is added to \code{S}. }
+\rationale{
+Now assume a method \code{foo()} is added to \code{S}.
+}
 
 \begin{dartCode}
 \LIBRARY{} L1;
@@ -322,28 +387,34 @@
 \end{dartCode}
 
 \rationale{
-If inheritance took precedence over the lexical scope, the behavior of \code{C} would change in an unexpected way. Neither the author of \code{S} nor the author of \code{C} are necessarily aware of this. In Dart, if there is a lexically visible method \code{foo()}, it will always be called.
+If inheritance took precedence over the lexical scope, the behavior of \code{C} would change in an unexpected way.
+Neither the author of \code{S} nor the author of \code{C} are necessarily aware of this.
+In Dart, if there is a lexically visible method \code{foo()}, it will always be called.
 
-Now consider the opposite scenario. We start with a version of \code{S} that contains \code{foo()}, but do not declare \code{foo()} in library \code{L2}.  Again, there is a change in behavior - but the author of \code{L2} is the one who introduced the discrepancy that effects their code, and the new code is lexically visible. Both these factors make it more likely that the problem will be detected.
+Now consider the opposite scenario.
+We start with a version of \code{S} that contains \code{foo()}, but do not declare \code{foo()} in library \code{L2}.
+Again, there is a change in behavior - but the author of \code{L2} is the one who introduced the discrepancy that effects their code, and the new code is lexically visible.
+Both these factors make it more likely that the problem will be detected.
 
 These considerations become even more important if one introduces constructs such as nested classes, which might be considered in future versions of the language.
 
-Good tooling should of course endeavor to inform programmers of such situations (discreetly). For example, an identifier that is both inherited and lexically visible could be highlighted (via underlining or colorization). Better yet, tight integration of source control with language aware tools would detect such changes when they occur.
-
+Good tooling should of course endeavor to inform programmers of such situations (discreetly).
+For example, an identifier that is both inherited and lexically visible could be highlighted (via underlining or colorization).
+Better yet, tight integration of source control with language aware tools would detect such changes when they occur.
 }
 
 
-
-
 \subsection{Privacy}
 \LMLabel{privacy}
 
 \LMHash{}
-Dart supports two levels of privacy: {\em public} and {\em private}.  A declaration is {\em private} iff its name is private, otherwise it is {\em public.}  A  name $q$ is private iff any one of the identifiers that comprise $q$ is private,  otherwise it is {\em public.}  An identifier is private iff it
-begins with an underscore (the \_ character) otherwise it is {\em public.}
+Dart supports two levels of privacy: {\em public} and {\em private}.
+A declaration is {\em private} if{}f its name is private, otherwise it is {\em public}.
+A name $q$ is private if{}f any one of the identifiers that comprise $q$ is private, otherwise it is {\em public}.
+An identifier is private if{}f it begins with an underscore (the \_ character) otherwise it is {\em public}.
 
 \LMHash{}
-A declaration $m$ is {\em accessible to library $L$}  if $m$ is declared in $L$ or if $m$ is public.
+A declaration $m$ is {\em accessible to library $L$} if $m$ is declared in $L$ or if $m$ is public.
 
 \commentary{
 This means private declarations may only be accessed within the library in which they are declared.
@@ -352,22 +423,36 @@
 \LMHash{}
 Privacy applies only to declarations within a library, not to library declarations themselves.
 
-\rationale{Libraries do not reference each other by name and so the idea of a private library is meaningless.
+\rationale{
+Libraries do not reference each other by name and so the idea of a private library is meaningless.
 Thus, if the name of a library begins with an underscore, it has no effect on the accessibility of the library or its members.
 }
 
-\rationale{Privacy is, at this point, a static notion tied to a particular piece of code (a library). It is designed to support software engineering concerns rather than security concerns. Untrusted code should always run in an another isolate.  It is possible that libraries will become first class objects and privacy will be a dynamic notion tied to a library instance.
+\rationale{
+Privacy is, at this point, a static notion tied to a particular piece of code (a library).
+It is designed to support software engineering concerns rather than security concerns.
+Untrusted code should always run in an another isolate.
+It is possible that libraries will become first class objects and privacy will be a dynamic notion tied to a library instance.
 
-Privacy is indicated by the name of a declaration - hence privacy and naming are not orthogonal. This has the advantage that both humans and machines can recognize access to private declarations at the point of use without knowledge of the context from which the declaration is derived.}
+Privacy is indicated by the name of a declaration - hence privacy and naming are not orthogonal.
+This has the advantage that both humans and machines can recognize access to private declarations at the point of use without knowledge of the context from which the declaration is derived.
+}
+
 
 \subsection{Concurrency}
 \LMLabel{concurrency}
 
 \LMHash{}
-Dart code is always single threaded. There is no shared-state concurrency in Dart. Concurrency is supported via actor-like entities called {\em isolates}.
+Dart code is always single threaded.
+There is no shared-state concurrency in Dart.
+Concurrency is supported via actor-like entities called {\em isolates}.
 
 \LMHash{}
-An isolate is a unit of concurrency. It has its own memory and its own thread of control. Isolates communicate by message passing (\ref{sendingMessages}). No state is ever shared between isolates. Isolates are created by spawning (\ref{spawningAnIsolate}).
+An isolate is a unit of concurrency.
+It has its own memory and its own thread of control.
+Isolates communicate by message passing (\ref{sendingMessages}).
+No state is ever shared between isolates.
+Isolates are created by spawning (\ref{spawningAnIsolate}).
 
 
 \section{Errors and Warnings}
@@ -377,35 +462,56 @@
 This specification distinguishes between several kinds of errors.
 
 \LMHash{}
-{\em Compile-time errors} are errors that preclude execution. A compile-time error must be reported by a Dart compiler before the erroneous code is executed.
+{\em Compile-time errors} are errors that preclude execution.
+A compile-time error must be reported by a Dart compiler before the erroneous code is executed.
 
-\rationale{A Dart implementation has considerable freedom as to when compilation takes place. Modern programming language implementations often interleave compilation and execution, so that compilation of a method may be delayed, e.g.,  until it is first invoked. Consequently, compile-time errors in a method $m$ may be reported as late as the time of $m$'s first invocation.
+\rationale{
+A Dart implementation has considerable freedom as to when compilation takes place.
+Modern programming language implementations often interleave compilation and execution, so that compilation of a method may be delayed, e.g., until it is first invoked.
+Consequently, compile-time errors in a method $m$ may be reported as late as the time of $m$'s first invocation.
 
-As a web language, Dart is often loaded directly from source, with no intermediate binary representation. In the interests of rapid loading, Dart implementations may choose to avoid full parsing of method bodies, for example. This can be done by tokenizing the input and checking for balanced curly braces on method body entry. In such an implementation, even syntax errors will be detected only when the method needs to be executed, at which time it will be compiled (JITed).
+As a web language, Dart is often loaded directly from source, with no intermediate binary representation.
+In the interests of rapid loading, Dart implementations may choose to avoid full parsing of method bodies, for example.
+This can be done by tokenizing the input and checking for balanced curly braces on method body entry.
+In such an implementation, even syntax errors will be detected only when the method needs to be executed, at which time it will be compiled (JITed).
 
-In a development environment a compiler should of course report compilation errors eagerly so as to  best serve the programmer.
+In a development environment a compiler should of course report compilation errors eagerly so as to best serve the programmer.
 }
 
 \LMHash{}
-If an uncaught compile-time error occurs within the code of a running isolate $A$, $A$ is immediately suspended.  The only circumstance where a compile-time error could be caught would be via code run reflectively, where the mirror system can catch it.
+If an uncaught compile-time error occurs within the code of a running isolate $A$, $A$ is immediately suspended.
+The only circumstance where a compile-time error could be caught would be via code run reflectively, where the mirror system can catch it.
 
-\rationale{Typically, once a compile-time error is thrown and $A$ is suspended, $A$ will then be terminated. However, this depends on the overall environment.
+\rationale{
+Typically, once a compile-time error is thrown and $A$ is suspended, $A$ will then be terminated.
+However, this depends on the overall environment.
 A Dart engine runs in the context of an {\em embedder},
-a program that interfaces between the engine and the surrounding computing environment. The embedder will often be a web browser, but need not be; it may be a C++ program on the server for example. When an isolate fails with a compile-time error as described above, control returns to the embedder, along with an exception describing the problem.  This is necessary so that the embedder can clean up resources etc. It is then the embedder's decision whether to terminate the isolate or not.
+a program that interfaces between the engine and the surrounding computing environment.
+The embedder will often be a web browser, but need not be; it may be a C++ program on the server for example.
+When an isolate fails with a compile-time error as described above, control returns to the embedder, along with an exception describing the problem.
+This is necessary so that the embedder can clean up resources etc.
+It is then the embedder's decision whether to terminate the isolate or not.
 }
 
 \LMHash{}
-{\em Static  warnings} are those errors reported by the static checker. They have no effect on execution. Many, but not all, static warnings relate to types, in which case they are known as {\em static type warnings.} Static warnings must be provided by Dart compilers used during development such as those incorporated in IDEs or otherwise intended to be used by developers for developing code. Compilers that are part of run-time execution environments such as virtual machines should not issue static warnings.
+{\em Static warnings} are those errors reported by the static checker.
+They have no effect on execution.
+Many, but not all, static warnings relate to types, in which case they are known as {\em static type warnings}.
+Static warnings must be provided by Dart compilers used during development such as those incorporated in IDEs or otherwise intended to be used by developers for developing code.
+Compilers that are part of run-time execution environments such as virtual machines should not issue static warnings.
 
 \LMHash{}
 {\em Dynamic type errors} are type errors reported in checked mode.
 
 \LMHash{}
-{\em Run-time errors} are exceptions thrown during execution. Whenever we say that an exception $ex$ is {\em thrown}, it acts like an expression had {\em thrown} (\ref{completion}) with $ex$ as exception object and with a stack trace corresponding to the current system state. When we say that {\em a} $C$ {\em is thrown}, where $C$ is a class, we mean that an instance of class $C$ is thrown.
+{\em Run-time errors} are exceptions thrown during execution.
+Whenever we say that an exception $ex$ is {\em thrown}, it acts like an expression had {\em thrown} (\ref{completion}) with $ex$ as exception object and with a stack trace corresponding to the current system state.
+When we say that {\em a} $C$ {\em is thrown}, where $C$ is a class, we mean that an instance of class $C$ is thrown.
 
 \LMHash{}
 If an uncaught exception is thrown by a running isolate $A$, $A$ is immediately suspended.
 
+
 \section{Variables}
 \LMLabel{variables}
 
@@ -413,34 +519,29 @@
 Variables are storage locations in memory.
 
 \begin{grammar}
-{\bf variableDeclaration:}
-      declaredIdentifier (`,' identifier)*
-    .
+{\bf variableDeclaration:}declaredIdentifier (`,' identifier)*
+  .
 
-{\bf declaredIdentifier:}
-      metadata finalConstVarOrType identifier
-    .
+{\bf declaredIdentifier:}metadata finalConstVarOrType identifier
+  .
 
 {\bf finalConstVarOrType:}\FINAL{} type?;
-      \CONST{} type?;
-      varOrType
-    .
+  \CONST{} type?;
+  varOrType
+  .
 
 {\bf varOrType:}\VAR{};
-      type
-    .
+  type
+  .
 
-{\bf initializedVariableDeclaration:}
-      declaredIdentifier (`=' expression)? (`,' initializedIdentifier)* % could do top level here
-    .
+{\bf initializedVariableDeclaration:}declaredIdentifier (`=' expression)? (`,' initializedIdentifier)*
+  .
 
-{\bf initializedIdentifier:}
-      identifier (`=' expression)? % could do top-level here
-    .
+{\bf initializedIdentifier:}identifier (`=' expression)?
+  .
 
-{\bf initializedIdentifierList:}
-      initializedIdentifier (`,' initializedIdentifier)*
-    .
+{\bf initializedIdentifierList:}initializedIdentifier (`,' initializedIdentifier)*
+  .
 \end{grammar}
 
 \LMHash{}
@@ -450,61 +551,82 @@
 A variable declared at the top-level of a library is referred to as either a {\em library variable} or simply a top-level variable.
 
 \LMHash{}
-A {\em static variable} is a variable that is not associated with a particular instance, but rather with an entire library or class.  Static variables include library variables and class variables. Class variables are variables whose declaration is immediately nested inside a class declaration and includes the modifier \STATIC{}. A library variable is implicitly static. It is a compile-time error to preface a top-level variable declaration with the built-in identifier  (\ref{identifierReference}) \STATIC{}.
+A {\em static variable} is a variable that is not associated with a particular instance, but rather with an entire library or class.
+Static variables include library variables and class variables.
+Class variables are variables whose declaration is immediately nested inside a class declaration and includes the modifier \STATIC{}.
+A library variable is implicitly static.
+It is a compile-time error to preface a top-level variable declaration with the built-in identifier (\ref{identifierReference}) \STATIC{}.
 
 \LMHash{}
-Static variable declarations are initialized lazily. When a static variable $v$ is read, iff it has not yet been assigned,  it is set to the result of evaluating its initializer. The precise rules are given in section \ref{evaluationOfImplicitVariableGetters}.
+Static variable declarations are initialized lazily.
+When a static variable $v$ is read, if{}f it has not yet been assigned, it is set to the result of evaluating its initializer.
+The precise rules are given in section \ref{evaluationOfImplicitVariableGetters}.
 
-\rationale{The lazy semantics are given because we do not want a language where one tends to define expensive initialization computations, causing long application startup times. This is especially crucial for Dart, which must support the coding of  client applications.
+\rationale{
+The lazy semantics are given because we do not want a language where one tends to define expensive initialization computations, causing long application startup times.
+This is especially crucial for Dart, which must support the coding of client applications.
 }
 
 \LMHash{}
-A {\em final variable} is a variable whose binding is fixed upon initialization; a final variable $v$ will always refer to the same object after $v$ has been initialized. The declaration of a final variable must  include the modifier \FINAL{}.
+A {\em final variable} is a variable whose binding is fixed upon initialization; a final variable $v$ will always refer to the same object after $v$ has been initialized.
+The declaration of a final variable must include the modifier \FINAL{}.
 
 \LMHash{}
-It is a static warning if a final instance variable that has been initialized at its point of declaration  is  also initialized in a constructor.
-% It is a static warning if a final instance variable that has been initialized by means of an initializing formal of a constructor is  also initialized elsewhere in the same constructor.
+It is a static warning if a final instance variable that has been initialized at its point of declaration is also initialized in a constructor.
+% It is a static warning if a final instance variable that has been initialized by means of an initializing formal of a constructor is also initialized elsewhere in the same constructor.
 It is a compile-time error if a local variable $v$ is final and $v$ is not initialized at its point of declaration.
 It is a static warning and a dynamic error to assign to a final local variable.
 
 \commentary{
-
 A library or static variable is guaranteed to have an initializer at its declaration by the grammar.
 
-Attempting to assign to a final variable anywhere except in its declaration or in a constructor header will cause a run-time error to be thrown as discussed below. The assignment will also give rise to a static warning. Any repeated assignment to a final variable will also lead to a run-time error.
+Attempting to assign to a final variable anywhere except in its declaration or in a constructor header will cause a run-time error to be thrown as discussed below.
+The assignment will also give rise to a static warning.
+Any repeated assignment to a final variable will also lead to a run-time error.
 
 Taken as a whole, the rules ensure that any attempt to execute multiple assignments to a final variable will yield static warnings and repeated assignments will fail dynamically.
 }
 
 \LMHash{}
-A {\em constant variable} is a variable whose declaration includes the modifier \CONST{}. A constant variable is always implicitly final. A constant variable must be initialized to a compile-time constant (\ref{constants}) or a compile-time error occurs.
+A {\em constant variable} is a variable whose declaration includes the modifier \CONST{}.
+A constant variable is always implicitly final.
+A constant variable must be initialized to a compile-time constant (\ref{constants}) or a compile-time error occurs.
 
 \LMHash{}
 We say that a variable $v$ is {\em potentially mutated} in some scope $s$ if $v$ is not final or constant and an assignment to $v$ occurs in $s$.
 
 \LMHash{}
-If a variable declaration does not explicitly specify a type, the type of the declared variable(s) is  \DYNAMIC{}, the unknown type (\ref{typeDynamic}).
+If a variable declaration does not explicitly specify a type, the type of the declared variable(s) is \DYNAMIC{}, the unknown type (\ref{typeDynamic}).
 
 \LMHash{}
 A variable is {\em mutable} if it is not final.
-Static and instance variable declarations always induce implicit getters. If the variable is mutable it also introduces an implicit setter.
+Static and instance variable declarations always induce implicit getters.
+If the variable is mutable it also introduces an implicit setter.
 The scope into which the implicit getters and setters are introduced depends on the kind of variable declaration involved.
 
 \LMHash{}
-A library variable introduces a getter into the top level scope of the enclosing library. A static class variable introduces a static getter into the immediately enclosing class. An instance variable introduces an instance getter into the immediately enclosing class.
+A library variable introduces a getter into the top level scope of the enclosing library.
+A static class variable introduces a static getter into the immediately enclosing class.
+An instance variable introduces an instance getter into the immediately enclosing class.
 
 \LMHash{}
-A mutable library variable introduces a setter into the top level scope of the enclosing library. A mutable static class variable introduces a static setter into the immediately enclosing class. A mutable instance variable introduces an instance setter into the immediately enclosing class.
+A mutable library variable introduces a setter into the top level scope of the enclosing library.
+A mutable static class variable introduces a static setter into the immediately enclosing class.
+A mutable instance variable introduces an instance setter into the immediately enclosing class.
 
 \LMHash{}
-Local variables are added to the innermost enclosing scope.  They do not induce getters and setters.  A local variable may only be referenced at a source code location that is after its initializer, if any, is complete, or a compile-time error occurs.  The error may be reported either at the point where the premature reference occurs, or at the variable declaration.
+Local variables are added to the innermost enclosing scope.
+They do not induce getters and setters.
+A local variable may only be referenced at a source code location that is after its initializer, if any, is complete, or a compile-time error occurs.
+The error may be reported either at the point where the premature reference occurs, or at the variable declaration.
 
-\rationale {
+\rationale{
 We allow the error to be reported at the declaration to allow implementations to avoid an extra processing phase.
 }
 
 \commentary{
-The example below illustrates the expected behavior.  A variable $x$ is declared at the library level, and another $x$ is declared inside the function $f$.
+The example below illustrates the expected behavior.
+A variable $x$ is declared at the library level, and another $x$ is declared inside the function $f$.
 }
 
 \begin{dartCode}
@@ -516,21 +638,31 @@
     x = x + 1; // two compile-time errors
     print(x); // compile-time error
   \}
- \VAR{} x = x++; // compile-time error
- print(x);
+  \VAR{} x = x++; // compile-time error
+  print(x);
 \}
 \end{dartCode}
 
 \commentary{
-The declaration inside $f$ hides the enclosing one.  So all references to $x$ inside $f$ refer to the inner declaration of $x$. However, many of these references are illegal, because they appear before the declaration. The assignment to $z$ is one such case. The assignment to $x$ in the \IF{} statement suffers from multiple problems. The right hand side reads $x$ before its declaration, and the left hand side assigns to $x$ before its declaration. Each of these are, independently, compile-time errors.  The print statement inside the \IF{} is also illegal.
+The declaration inside $f$ hides the enclosing one.
+So all references to $x$ inside $f$ refer to the inner declaration of $x$.
+However, many of these references are illegal, because they appear before the declaration.
+The assignment to $z$ is one such case.
+The assignment to $x$ in the \IF{} statement suffers from multiple problems.
+The right hand side reads $x$ before its declaration, and the left hand side assigns to $x$ before its declaration.
+Each of these are, independently, compile-time errors.
+The print statement inside the \IF{} is also illegal.
 
-The inner declaration of $x$ is itself erroneous because its right hand side attempts to read $x$ before the declaration has terminated.  The left hand side is not, technically, a reference or an assignment but a declaration and so is legal.  The last print statement is perfectly legal as well.
+The inner declaration of $x$ is itself erroneous because its right hand side attempts to read $x$ before the declaration has terminated.
+The left hand side is not, technically, a reference or an assignment but a declaration and so is legal.
+The last print statement is perfectly legal as well.
 }
 
-\commentary {
-As another example  \code{\VAR{} x = 3, y = x;} is legal, because \code{x} is referenced after its initializer.
+\commentary{
+As another example \code{\VAR{} x = 3, y = x;} is legal, because \code{x} is referenced after its initializer.
 
-A particularly perverse example involves a local variable name shadowing a type. This is possible because Dart has a single namespace for types, functions and variables.
+A particularly perverse example involves a local variable name shadowing a type.
+This is possible because Dart has a single namespace for types, functions and variables.
 }
 
 \begin{dartCode}
@@ -540,70 +672,83 @@
    C aC; // compile-time error
    \VAR{} C = 10;
 \}
+\end{dartCode}
 
-\commentary {
- Inside \cd{perverse()}, \cd{C} denotes a local variable. The type \cd{C} is hidden by the variable of the same name. The attempt to instantiate \cd{C} causes a compile-time error because it references a local variable prior to its declaration. Similarly, for the declaration of \cd{aC} (even though it is only a type annotation).
+\commentary{
+Inside \code{perverse()}, \code{C} denotes a local variable.
+The type \code{C} is hidden by the variable of the same name.
+The attempt to instantiate \code{C} causes a compile-time error because it references a local variable prior to its declaration.
+Similarly, for the declaration of \code{aC} (even though it is only a type annotation).
 }
 
 \rationale{
-As a rule, type annotations are ignored in production mode. However, we do
- not want to allow programs to compile legally in one mode and not another, and in this extremely odd situation, that consideration takes precedence.
+As a rule, type annotations are ignored in production mode.
+However, we do not want to allow programs to compile legally in one mode and not another, and in this extremely odd situation, that consideration takes precedence.
 }
 
-\end{dartCode}
-
-% the grammar does not support local getters and setters. The local var discussion does not seem to mention getters and setters based semantics. It simply discusses the creation of the variable, not its access. Access is either assignment or identifiers. Identifiers ignore the getter story.
+% the grammar does not support local getters and setters.
+% The local var discussion does not seem to mention getters and setters based semantics.
+% It simply discusses the creation of the variable, not its access.
+% Access is either assignment or identifiers.
+% Identifiers ignore the getter story.
 
 \LMHash{}
 The following rules apply to all static and instance variables.
 
 \LMHash{}
-A  variable declaration  of one of the forms \code{$T$ $v$;}, \code{$T$ $v$ = $e$;}  \code{\CONST{} $T$ $v$ = $e$;}, \code{\FINAL{} $T$ $v$;} or \code{\FINAL{} $T$ $v$ = $e$;} always induces an implicit  getter function (\ref{getters}) with signature
+A variable declaration of one of the forms \code{$T$ $v$;}, \code{$T$ $v$ = $e$;} \code{\CONST{} $T$ $v$ = $e$;}, \code{\FINAL{} $T$ $v$;} or \code{\FINAL{} $T$ $v$ = $e$;} always induces an implicit getter function (\ref{getters}) with signature
 
 $T$ \GET{} $v$
 
 whose invocation evaluates as described below (\ref{evaluationOfImplicitVariableGetters}).
 
+\LMHash{}
+A variable declaration of one of the forms \code{\VAR{} $v$;}, \code{\VAR{} $v$ = $e$;}, \code{\CONST{} $v$ = $e$;}, \code{\FINAL{} $v$;} or \code{\FINAL{} $v$ = $e$;} always induces an implicit getter function with signature
+
+\GET{} $v$
+
+whose invocation evaluates as described below (\ref{evaluationOfImplicitVariableGetters}).
 
 \LMHash{}
-A  variable declaration  of one of the forms \code{\VAR{} $v$;},  \code{\VAR{} $v$ = $e$;} ,  \code{\CONST{} $v$ = $e$;}, \code{\FINAL{} $v$;} or \code{\FINAL{}  $v$ = $e$;}  always induces an implicit  getter function with signature
-
- \GET{} $v$
-
-whose  invocation evaluates as described below (\ref{evaluationOfImplicitVariableGetters}).
-
-\LMHash{}
-A non-final  variable declaration  of the form \code{{} $T$ $v$;} or the form  \code{$T$ $v$ = $e$;}   always induces an implicit  setter function (\ref{setters}) with signature
+A non-final variable declaration of the form \code{{} $T$ $v$;} or the form \code{$T$ $v$ = $e$;} always induces an implicit setter function (\ref{setters}) with signature
 
  \VOID{} \SET{} $v=(T$ $x)$
 
 whose execution sets the value of $v$ to the incoming argument $x$.
 
 \LMHash{}
-A  non-final variable declaration  of the form \code{\VAR{} $v$;} or the form  \code{\VAR{} $v$ = $e$;}   always induces an implicit  setter function with signature
+A non-final variable declaration of the form \code{\VAR{} $v$;} or the form \code{\VAR{} $v$ = $e$;} always induces an implicit setter function with signature
 
 \SET{} $v=(x)$
 
 whose execution sets the value of $v$ to the incoming argument $x$.
 
 
-\subsection{Evaluation of Implicit  Variable Getters}
+\subsection{Evaluation of Implicit Variable Getters}
 \LMLabel{evaluationOfImplicitVariableGetters}
 
 \LMHash{}
-Let $d$ be the declaration of a static or instance variable $v$.  If $d$ is an instance variable, then the invocation of the implicit getter  of $v$ evaluates to the value stored in $v$.
+Let $d$ be the declaration of a static or instance variable $v$.
+If $d$ is an instance variable, then the invocation of the implicit getter of $v$ evaluates to the value stored in $v$.
 If $d$ is a static or library variable then the implicit getter method of $v$ executes as follows:
 \begin{itemize}
-\item {\bf Non-constant variable declaration with initializer}. If $d$ is of one of the forms \code{\VAR{} $v$ = $e$;} ,  \code{$T$ $v$ = $e$;} ,   \code{\FINAL{} $v$ = $e$;} ,  \code{\FINAL{} $T$ $v$ = $e$;}, \code{\STATIC{} $v$ = $e$; }, \code{\STATIC{} $T$ $v$ = $e$; }, \code{\STATIC{} \FINAL{} $v$ = $e$; } or \code{\STATIC{} \FINAL{} $T$ $v$ = $e$;} and no value has yet been stored into $v$ then the initializer expression $e$ is evaluated. If, during the evaluation of $e$, the getter for $v$ is invoked, a \code{CyclicInitializationError} is thrown. If the evaluation succeeded yielding an object $o$, let $r$ be $o$, otherwise let $r$ be the null object (\ref{null}). In any case, $r$ is stored into $v$. The result of executing the getter is $r$.
-\item  {\bf Constant variable declaration}. If $d$ is of one of the forms \code{\CONST{} $v$ = $e$; } ,  \code{\CONST{} $T$  $v$ = $e$; },  \code{\STATIC{} \CONST{} $v$ = $e$; }  or \code{\STATIC{} \CONST{} $T$ $v$ = $e$;} the result of the getter is the value of the compile-time constant $e$. \commentary{Note that a compile-time constant cannot depend on itself, so no cyclic references can occur.}
+\item {\bf Non-constant variable declaration with initializer}.
+If $d$ is of one of the forms \code{\VAR{} $v$ = $e$;}, \code{$T$ $v$ = $e$;}, \code{\FINAL{} $v$ = $e$;}, \code{\FINAL{} $T$ $v$ = $e$;}, \code{\STATIC{} $v$ = $e$;}, \code{\STATIC{} $T$ $v$ = $e$; }, \code{\STATIC{} \FINAL{} $v$ = $e$; } or \code{\STATIC{} \FINAL{} $T$ $v$ = $e$;} and no value has yet been stored into $v$ then the initializer expression $e$ is evaluated.
+If, during the evaluation of $e$, the getter for $v$ is invoked, a \code{CyclicInitializationError} is thrown.
+If the evaluation succeeded yielding an object $o$, let $r$ be $o$, otherwise let $r$ be the null object (\ref{null}).
+In any case, $r$ is stored into $v$.
+The result of executing the getter is $r$.
+\item {\bf Constant variable declaration}.
+If $d$ is of one of the forms \code{\CONST{} $v$ = $e$;}, \code{\CONST{} $T$ $v$ = $e$;}, \code{\STATIC{} \CONST{} $v$ = $e$;} or \code{\STATIC{} \CONST{} $T$ $v$ = $e$;} the result of the getter is the value of the compile-time constant $e$.
+\commentary{
+Note that a compile-time constant cannot depend on itself, so no cyclic references can occur.
+}
 Otherwise
-\item {\bf Variable declaration without initializer}. The result of executing the getter method is the value stored in $v$.
+\item {\bf Variable declaration without initializer}.
+The result of executing the getter method is the value stored in $v$.
 \end{itemize}
 
 
-
-
-
 \section{Functions}
 \LMLabel{functions}
 
@@ -611,122 +756,146 @@
 Functions abstract over executable actions.
 
 \begin{grammar}
-{\bf functionSignature:}
-    metadata returnType? identifier formalParameterList
-    .
+{\bf functionSignature:}metadata returnType? identifier formalParameterList
+  .
 
-{\bf returnType:}
-      \VOID{};
-      type
-    .
+{\bf returnType:}\VOID{};
+  type
+  .
 
-{\bf functionBody:} \ASYNC{}?  `={\escapegrammar \gt}' expression `{\escapegrammar ;}';
-     (\ASYNC{} $|$ \ASYNC* $|$ \SYNC*)? block
-    .
+{\bf functionBody:}\ASYNC{}? `={\escapegrammar \gt}' expression `{\escapegrammar ;}';
+  (\ASYNC{} $|$ \ASYNC* $|$ \SYNC*)? block
+  .
 
-{\bf block:}
-      `\{' statements `\}'
-    .
-
+{\bf block:}`\{' statements `\}'
+  .
 \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 include function declarations (\ref{functionDeclarations}), methods (\ref{instanceMethods}, \ref{staticMethods}), getters (\ref{getters}), setters (\ref{setters}), constructors (\ref{constructors}) and 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.  A function body is either:
+All functions have a signature and a body.
+The signature describes the formal parameters of the function, and possibly its name and return type.
+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*.
 
 \commentary{
-Because Dart is optionally typed, we cannot guarantee that a function that does not return a value will not be used in the context of an expression. Therefore, every function must return a value. A function body that ends without doing a throw or return will cause the function to return the null object (\ref{null}), as will a \RETURN{} without an expression. For generator functions, the situation is more subtle. See further discussion in section \ref{return}.
+Because Dart is optionally typed, we cannot guarantee that a function that does not return a value will not be used in the context of an expression.
+Therefore, every function must return a value.
+A function body that ends without doing a throw or return will cause the function to return the null object (\ref{null}), as will a \RETURN{} without an expression.
+For generator functions, the situation is more subtle.
+See further discussion in section \ref{return}.
 }
 
 OR
-\item of the form \code{=> $e$} or the form \code{\ASYNC{} => $e$}, which both return the value of the expression $e$ as if by a \code{return $e$}. \commentary{The other modifiers do not apply here, because they apply only to generators, discussed below, and generators do not allow to return a value, values are added to the generated stream or iterable using \YIELD{} instead.}
+\item of the form \code{=> $e$} or the form \code{\ASYNC{} => $e$}, which both return the value of the expression $e$ as if by a \code{return $e$}.
+\commentary{
+The other modifiers do not apply here, because they apply only to generators, discussed below, and generators do not allow to return a value, values are added to the generated stream or iterable using \YIELD{} instead.
+}
 Let $R$ be the static type of $e$
 and let $T$ be the actual return type (\ref{actualTypeOfADeclaration})
 of the function that has this body.
 It is a static warning if $T$ is not \VOID{} and either
 the function is synchronous and the static type of $R$ is not assignable to $T$,
-or the function is asynchronous and \code{Future<$flatten$($R$)>}
+or the function is asynchronous and \code{Future<$flatten(R)$>}
 is not assignable to $T$.
 
 \end{itemize}
 
 \LMHash{}
-A function is {\em asynchronous} if its body is marked with the \ASYNC{} or \ASYNC* modifier. Otherwise the function is {\em synchronous}. A function is a {\em generator} if its body is marked with the \SYNC* or \ASYNC* modifier.
+A function is {\em asynchronous} if its body is marked with the \ASYNC{} or \ASYNC* modifier.
+Otherwise the function is {\em synchronous}.
+A function is a {\em generator} if its body is marked with the \SYNC* or \ASYNC* modifier.
 
 \commentary{
-Whether a function is synchronous or asynchronous is orthogonal to whether it is a generator or not. Generator functions are a sugar for functions that produce collections in a systematic way, by lazily applying a function that {\em generates} individual elements of a collection. Dart provides such a sugar in both the synchronous case, where one returns an iterable, and in the asynchronous case, where one returns a stream. Dart also allows both synchronous and asynchronous functions that produce a single value.
+Whether a function is synchronous or asynchronous is orthogonal to whether it is a generator or not.
+Generator functions are a sugar for functions that produce collections in a systematic way, by lazily applying a function that {\em generates} individual elements of a collection.
+Dart provides such a sugar in both the synchronous case, where one returns an iterable, and in the asynchronous case, where one returns a stream.
+Dart also allows both synchronous and asynchronous functions that produce a single value.
 }
 
 \LMHash{}
 It is a compile-time error if an \ASYNC, \ASYNC* or \SYNC* modifier is attached to the body of a setter or constructor.
 
 \rationale{
-An asynchronous setter would be of little use, since setters can only be used in the context of an assignment (\ref{assignment}), and an assignment expression always evaluates to the value of the assignment's right hand side. If the setter actually did its work asynchronously, one might imagine that one would return a future that resolved to the assignment's right hand side after the setter did its work. However, this would require dynamic tests at every assignment, and so would be prohibitively expensive.
+An asynchronous setter would be of little use, since setters can only be used in the context of an assignment (\ref{assignment}), and an assignment expression always evaluates to the value of the assignment's right hand side.
+If the setter actually did its work asynchronously, one might imagine that one would return a future that resolved to the assignment's right hand side after the setter did its work.
+However, this would require dynamic tests at every assignment, and so would be prohibitively expensive.
 
-An asynchronous constructor would, by definition, never return an instance of the class it purports to construct, but instead return a future. Calling such a beast via \NEW{} would be very confusing. If you need to produce an object asynchronously, use a method.
+An asynchronous constructor would, by definition, never return an instance of the class it purports to construct, but instead return a future.
+Calling such a beast via \NEW{} would be very confusing.
+If you need to produce an object asynchronously, use a method.
 
-One could allow modifiers for factories. A factory for \code{Future} could be modified by \ASYNC{}, a factory for \code{Stream} could be modified by \ASYNC* and a factory for \code{Iterable} could be modified by \SYNC*. No other scenario makes sense because the object returned by the factory would be of the wrong type. This situation is very unusual so it is not worth making an exception to the general rule for constructors in order to allow it.
+One could allow modifiers for factories.
+A factory for \code{Future} could be modified by \ASYNC{}, a factory for \code{Stream} could be modified by \ASYNC* and a factory for \code{Iterable} could be modified by \SYNC*.
+No other scenario makes sense because the object returned by the factory would be of the wrong type.
+This situation is very unusual so it is not worth making an exception to the general rule for constructors in order to allow it.
 }
 \LMHash{}
 It is a static warning if the declared return type of a function marked \ASYNC{} is not a supertype of \code{Future<\mbox{$T$}>} for some type $T$.
 It is a static warning if the declared return type of a function marked \SYNC* is not a supertype of \code{Iterable<\mbox{$T$}>} for some type $T$.
 It is a static warning if the declared return type of a function marked \ASYNC* is not a supertype of \code{Stream<\mbox{$T$}>} for some type $T$.
 
+
 \subsection{Function Declarations}
 \LMLabel{functionDeclarations}
 
 \LMHash{}
-A {\em function declaration} is a function that is neither a member of a class nor a function literal. Function declarations include {\em library functions}, which are function declarations
+A {\em function declaration} is a function that is neither a member of a class nor a function literal.
+Function declarations include {\em library functions}, which are function declarations
 %(including getters and setters)
-at the top level of a library, and {\em local functions}, which are function declarations declared inside other functions. Library functions are often referred to simply as top-level functions.
+at the top level of a library, and {\em local functions}, which are function declarations declared inside other functions.
+Library functions are often referred to simply as top-level functions.
 
 \LMHash{}
-A function declaration consists of an identifier indicating the function's name, possibly prefaced by a return type. The function name is followed by a signature and body. For getters, the signature  is empty. The body is empty for functions that are external.
+A function declaration consists of an identifier indicating the function's name, possibly prefaced by a return type.
+The function name is followed by a signature and body.
+For getters, the signature is empty.
+The body is empty for functions that are external.
 
 \LMHash{}
-The scope of a library function is the scope of the enclosing library. 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}).
+The scope of a library function is the scope of the enclosing library.
+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}])$}.
-
-%\Q{We need to cover library getters as well.}
-
-%\Q{ The definition in terms of variables is untrue, because the code would be illegal. The initializer cannot refer to the function name in this case.  I believe the best fix is to relax this
-%requirement in the case of closures. See bug 315.
-%}
+%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 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 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}\})$}.
+%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{}.
 
 \LMHash{}
-When we say that a function $f_1$ {\em forwards} to another function $f_2$, we mean that  invoking $f_1$ causes $f_2$ to  be executed with the same arguments and/or receiver as $f_1$, and returns the result of executing $f_2$ to the caller of $f_1$, unless $f_2$ throws an exception, in which case $f_1$ throws the same exception. Furthermore, we only use the term for synthetic functions introduced by the specification.
+When we say that a function $f_1$ {\em forwards} to another function $f_2$, we mean that invoking $f_1$ causes $f_2$ to be executed with the same arguments and/or receiver as $f_1$, and returns the result of executing $f_2$ to the caller of $f_1$, unless $f_2$ throws an exception, in which case $f_1$ throws the same exception.
+Furthermore, we only use the term for synthetic functions introduced by the specification.
 
 
 \subsection{Formal Parameters}
 \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}). The optional parameters may be specified either as a set of named parameters or as a list of positional parameters, but not both.
+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}).
+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.
+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.
 
 \LMHash{}
-The body of a function 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 body of a function 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.
 
@@ -737,44 +906,29 @@
 It is a compile-time error if a formal parameter is declared as a constant variable (\ref{variables}).
 
 \begin{grammar}
-{\bf formalParameterList:}
-     `(' `)';
-     `(' normalFormalParameters `,'? `)';
-     `(' normalFormalParameters `,'  optionalFormalParameters `)';
-     `(' optionalFormalParameters `)'
-   .
-%\end{grammar}
-%}
+{\bf formalParameterList:}`(' `)';
+  `(' normalFormalParameters \gcomma{}? `)';
+  `(' normalFormalParameters \gcomma{} optionalFormalParameters `)';
+  `(' optionalFormalParameters `)'
+  .
 
-%\begin{grammar}
-%formalParameterList:
-%      '(' restFormalParameter? ')';
-%      '(' namedFormalParameters ')';
- %     '(' normalFormalParameters normalFormalParameterTail? ')'
-  %  .
+{\bf normalFormalParameters:}normalFormalParameter (\gcomma{} normalFormalParameter)*
+  .
 
-{\bf normalFormalParameters:}
-      normalFormalParameter (`,' normalFormalParameter)*
-    .
+{\bf optionalFormalParameters:}optionalPositionalFormalParameters;
+  namedFormalParameters
+  .
 
-{\bf optionalFormalParameters:}
-      optionalPositionalFormalParameters;
-      namedFormalParameters
-    .
+{\bf optionalPositionalFormalParameters:}`[' defaultFormalParameter (\gcomma{} defaultFormalParameter)* \gcomma{}? `]'
+  .
 
-{\bf optionalPositionalFormalParameters:}
-      `[' defaultFormalParameter (`,' defaultFormalParameter)* `,'? `]'
-    .
-{\bf namedFormalParameters:}
-      `\{' defaultNamedParameter (`,' defaultNamedParameter)* `,'? `\}'
-    .
+{\bf namedFormalParameters:}`\{' defaultNamedParameter (\gcomma{} defaultNamedParameter)* \gcomma{}? `\}'
+  .
 \end{grammar}
 
-Formal parameter lists allow an optional trailing comma after the last parameter ($`,'?$). A parameter list with such a trailing comma is equivalent in all ways to the same parameter list without the trailing comma. All parameter lists in this specification are shown without a trailing comma, but the rules and semantics apply equally to the corresponding parameter list with a trailing comma.
-
-%Formal parameters are always \FINAL{}.
-%\Q{We're awaiting some data on whether enforcing this would cause widespread pain.}
-%A formal parameter is always considered to be initialized.  \rationale{This is because it will always be initialized by the call - even if it is optional.}
+Formal parameter lists allow an optional trailing comma after the last parameter ($`,\!'?$).
+A parameter list with such a trailing comma is equivalent in all ways to the same parameter list without the trailing comma.
+All parameter lists in this specification are shown without a trailing comma, but the rules and semantics apply equally to the corresponding parameter list with a trailing comma.
 
 
 \subsubsection{Required Formals}
@@ -783,28 +937,27 @@
 \LMHash{}
 A {\em required formal parameter} may be specified in one of three ways:
 \begin{itemize}
-\item By means of a function signature that names the parameter and describes its type as a function type (\ref{functionTypes}).  It is a compile-time error if any default values are specified in the signature of such a function type.% explain what the type is in this case? Where is this described in general?
+\item By means of a function signature that names the parameter and describes its type as a function type (\ref{functionTypes}).
+It is a compile-time error if any default values are specified in the signature of such a function type.% explain what the type is in this case? Where is this described in general?
 \item As an initializing formal, which is only valid as a parameter to a generative constructor (\ref{generativeConstructors}). % do we need to say this, or anything more?
 \item Via an ordinary variable declaration (\ref{variables}).
 \end{itemize}
 
 \begin{grammar}
 {\bf normalFormalParameter:}functionFormalParameter;
-      fieldFormalParameter;
-      simpleFormalParameter
-    .
+  fieldFormalParameter;
+  simpleFormalParameter
+  .
 
-{\bf functionFormalParameter:}
-      metadata \COVARIANT{}? returnType? identifier formalParameterList
-    .
+{\bf functionFormalParameter:}metadata \COVARIANT{}? returnType? identifier formalParameterList
+  .
 
-{\bf simpleFormalParameter:}
-      metadata \COVARIANT{}? finalConstVarOrType? identifier;
-    .
+{\bf simpleFormalParameter:}metadata \COVARIANT{}? finalConstVarOrType? identifier;
+  .
 
-{\bf fieldFormalParameter:}
-   metadata finalConstVarOrType? \THIS{} `{\escapegrammar .}' identifier formalParameterList?
-   .
+{\bf fieldFormalParameter:}metadata finalConstVarOrType? \THIS{} `{\escapegrammar .}' identifier
+  \gnewline{} formalParameterList?
+  .
 \end{grammar}
 
 \LMHash{}
@@ -819,15 +972,6 @@
 \LMHash{}
 It is a compile-time error if the modifier \COVARIANT{} occurs on a parameter of a function which is not an instance method, instance setter, or instance operator.
 
-%\subsubsection{Rest Formals}
-%\LMLabel{restFormals}
-
-%A rest formal $R$ must be the last parameter in a formal parameter list.  If a  type $T$ is specified for $R$, it signifies that the type of $R$ is $T[]$.
-
-%\begin{grammar}
-%restFormalParameter:
-%      finalConstVarOrType? '{\escapegrammar ...}' identifier
- %\end{grammar}
 
 \subsubsection{Optional Formals}
 \LMLabel{optionalFormals}
@@ -836,13 +980,12 @@
 Optional parameters may be specified and provided with default values.
 
 \begin{grammar}
-{\bf defaultFormalParameter:}
-      normalFormalParameter (`=' expression)?
-    .
+{\bf defaultFormalParameter:}normalFormalParameter (`=' expression)?
+  .
 
 {\bf defaultNamedParameter:}normalFormalParameter (`=' expression)?;
-      normalFormalParameter ( `{\escapegrammar :}' expression)?
-    .
+  normalFormalParameter ( `{\escapegrammar :}' expression)?
+  .
 \end{grammar}
 
 A {\bf defaultNamedParameter} of the form:
@@ -857,16 +1000,20 @@
 It is deprecated and will be removed in a later version of the language specification.
 
 \LMHash{}
-It is a compile-time error if the default value of an optional parameter is not a compile-time constant (\ref{constants}). If no default is explicitly specified for an optional parameter an implicit default of \NULL{} is provided.
+It is a compile-time error if the default value of an optional parameter is not a compile-time constant (\ref{constants}).
+If no default is explicitly specified for an optional parameter an implicit default of \NULL{} is provided.
 
 \LMHash{}
 It is a compile-time error if the name of a named optional parameter begins with an `\_' character.
 
 \rationale{
-The need for this  restriction is a direct consequence of the fact that naming and privacy are not orthogonal.
-If we allowed named parameters to begin with an underscore, they would be considered private and inaccessible to callers from outside the library where it was defined. If a method outside the library overrode a method with a private optional name, it would not be a subtype of the original method. The static checker would of course flag such situations, but the consequence would be that adding a private named formal would break clients outside the library in a way they could not easily correct.
+The need for this restriction is a direct consequence of the fact that naming and privacy are not orthogonal.
+If we allowed named parameters to begin with an underscore, they would be considered private and inaccessible to callers from outside the library where it was defined.
+If a method outside the library overrode a method with a private optional name, it would not be a subtype of the original method.
+The static checker would of course flag such situations, but the consequence would be that adding a private named formal would break clients outside the library in a way they could not easily correct.
 }
 
+
 \subsection{Type of a Function}
 \LMLabel{typeOfAFunction}
 
@@ -874,101 +1021,108 @@
 If a function 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.
 
 \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$.
+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$.
 
 \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$.
+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$.
 
 \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 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$.
 
 \LMHash{}
-The run-time type of a function object always implements the class \cd{Function}.
+The run-time type of a function object always implements the class \code{Function}.
 
 \commentary{
-One cannot assume, based on the above, that  given a function \cd{f}, \cd{f.runtimeType} will actually be \cd{Function}, or that any two distinct function objects necessarily have the same run-time type.
+One cannot assume, based on the above, that given a function \code{f}, \code{f.runtimeType} will actually be \code{Function}, or that any two distinct function objects necessarily have the same run-time type.
 }
 
 \rationale{
 It is up to the implementation to choose an appropriate representation for functions.
-For example, consider that a closure produced via property extraction treats equality different from ordinary closures, and is therefore likely a different class. Implementations may also use different classes for functions based on arity and or type. Arity may be implicitly affected by whether a function is an instance method (with an implicit receiver parameter) or not. The variations are manifold, and so this specification only guarantees that function objects are instances of some class that is considered to implement \cd{Function}.
-
+For example, consider that a closure produced via property extraction treats equality different from ordinary closures, and is therefore likely a different class.
+Implementations may also use different classes for functions based on arity and or type.
+Arity may be implicitly affected by whether a function is an instance method (with an implicit receiver parameter) or not.
+The variations are manifold, and so this specification only guarantees that function objects are instances of some class that is considered to implement \code{Function}.
 }
 
+
 \subsection{External Functions}
 \LMLabel{externalFunctions}
 
 \LMHash{}
-An {\em external function} is a function whose body is provided separately from its declaration. An external function may be a top-level function (\ref{librariesAndScripts}), a method (\ref{instanceMethods}, \ref{staticMethods}), a getter (\ref{getters}), a setter (\ref{setters}) or a non-redirecting constructor (\ref{generativeConstructors}, \ref{factories}). External functions are introduced via the built-in identifier \EXTERNAL{}  (\ref{identifierReference}) followed by the function signature.
+An {\em external function} is a function whose body is provided separately from its declaration.
+An external function may be a top-level function (\ref{librariesAndScripts}), a method (\ref{instanceMethods}, \ref{staticMethods}), a getter (\ref{getters}), a setter (\ref{setters}) or a non-redirecting constructor (\ref{generativeConstructors}, \ref{factories}).
+External functions are introduced via the built-in identifier \EXTERNAL{} (\ref{identifierReference}) followed by the function signature.
 
 \rationale{
-External functions allow us to introduce  type information for code that is not statically known to the Dart compiler.
+External functions allow us to introduce type information for code that is not statically known to the Dart compiler.
 }
 
 \commentary{
-Examples of external functions might be foreign functions (defined in C, or Javascript etc.), primitives of the implementation (as defined by the Dart run-time system), or code that was dynamically generated but whose interface is statically known. However, an abstract method is different from an external function, as it has {\em no} body.
+Examples of external functions might be foreign functions (defined in C, or Javascript etc.), primitives of the implementation (as defined by the Dart run-time system), or code that was dynamically generated but whose interface is statically known.
+However, an abstract method is different from an external function, as it has {\em no} body.
 }
 
 \LMHash{}
-An external function is connected to its body by an implementation specific mechanism. Attempting to invoke an external function that has not been connected to its body will throw a \code{NoSuchMethodError} or some subclass thereof.
+An external function is connected to its body by an implementation specific mechanism.
+Attempting to invoke an external function that has not been connected to its body will throw a \code{NoSuchMethodError} or some subclass thereof.
 
 \LMHash{}
 The actual syntax is given in sections \ref{classes} and \ref{librariesAndScripts} below.
 
+
 \section{Classes}
 \LMLabel{classes}
 
 \LMHash{}
-A {\em class} defines the form and behavior of a set of objects which are its {\em instances}.  Classes may be defined by class declarations as described below, or via mixin applications (\ref{mixinApplication}).
+A {\em class} defines the form and behavior of a set of objects which are its {\em instances}.
+Classes may be defined by class declarations as described below, or via mixin applications (\ref{mixinApplication}).
 
 \begin{grammar}
-{\bf classDefinition:}
-metadata \ABSTRACT{}?  \CLASS{} identifier typeParameters? (superclass mixins?)? interfaces? \\
-       `\{' (metadata classMemberDefinition)* `\}';
+{\bf classDefinition:}metadata \ABSTRACT{}? \CLASS{} identifier typeParameters?
+  \gnewline{} (superclass mixins?)? interfaces?
+  \gnewline{} `\{' (metadata classMemberDefinition)* `\}';
+  metadata \ABSTRACT{}? \CLASS{} mixinApplicationClass
+  .
 
-metadata \ABSTRACT{}?  \CLASS{} mixinApplicationClass
-    .
-
-{\bf mixins:}
-  \WITH{} typeList
+{\bf mixins:}\WITH{} typeList
   .
 
 {\bf classMemberDefinition:}declaration `{\escapegrammar ;}' ;
-       methodSignature functionBody
-    .
+  methodSignature functionBody
+  .
 
 {\bf methodSignature:}constructorSignature initializers?;
-      factoryConstructorSignature;
+  factoryConstructorSignature;
 % This doesn't work: `static @override foo() => 42`, but `functionSignature` starts with metadata. https://github.com/dart-lang/sdk/issues/29614
-      \STATIC{}? functionSignature;
-      \STATIC{}? getterSignature;
-      \STATIC{}? setterSignature;
-      operatorSignature
-    .
+  \STATIC{}? functionSignature;
+  \STATIC{}? getterSignature;
+  \STATIC{}? setterSignature;
+  operatorSignature
+  .
 
 {\bf declaration:}constantConstructorSignature (redirection $|$ initializers)?;
-      constructorSignature (redirection $|$ initializers)?;
-      \EXTERNAL{} constantConstructorSignature;
-      \EXTERNAL{} constructorSignature;
-      ((\EXTERNAL{} \STATIC{}?))? getterSignature;
-      ((\EXTERNAL{} \STATIC{}?))? setterSignature;
-      \EXTERNAL{}? operatorSignature;
+  constructorSignature (redirection $|$ initializers)?;
+  \EXTERNAL{} constantConstructorSignature;
+  \EXTERNAL{} constructorSignature;
+  ((\EXTERNAL{} \STATIC{}?))? getterSignature;
+  ((\EXTERNAL{} \STATIC{}?))? setterSignature;
+  \EXTERNAL{}? operatorSignature;
 % This doesn't work: `static @override foo() => 42`, but `functionSignature` starts with metadata. https://github.com/dart-lang/sdk/issues/29614
-      ((\EXTERNAL{} \STATIC{}?))? functionSignature;
-      \STATIC{} (\FINAL{} $|$ \CONST{}) type? staticFinalDeclarationList;
+  ((\EXTERNAL{} \STATIC{}?))? functionSignature;
+  \STATIC{} (\FINAL{} $|$ \CONST{}) type? staticFinalDeclarationList;
 %      \CONST{} type? staticFinalDeclarationList;
-      \FINAL{} type? initializedIdentifierList;
-      (\STATIC{} $|$ \COVARIANT{})? (\VAR{} $|$ type) initializedIdentifierList
-    .
+  \FINAL{} type? initializedIdentifierList;
+  (\STATIC{} $|$ \COVARIANT{})? (\VAR{} $|$ type) initializedIdentifierList
+  .
 
-{\bf staticFinalDeclarationList:}
-    staticFinalDeclaration (`,' staticFinalDeclaration)*
-    .
+{\bf staticFinalDeclarationList:}staticFinalDeclaration (\gcomma{} staticFinalDeclaration)*
+  .
 
-{\bf staticFinalDeclaration:}
-      identifier `=' expression
-    .
-
+{\bf staticFinalDeclaration:}identifier `=' expression
+  .
 \end{grammar}
 
 \LMHash{}
@@ -981,14 +1135,19 @@
 }
 
 \LMHash{}
-A class has constructors,  instance members and static members. The instance members of a class are its instance methods, getters, setters and instance variables. The static members of a class are its static methods, getters, setters and static variables. The members of a class are its static and instance members.
+A class has constructors, instance members and static members.
+The instance members of a class are its instance methods, getters, setters and instance variables.
+The static members of a class are its static methods, getters, setters and static variables.
+The members of a class are its static and instance members.
 
 \LMHash{}
 A class has several scopes:
 \begin{itemize}
-\item A {\em type-parameter scope}, which is empty if the class is not generic (\ref{generics}).  The enclosing scope of the type-parameter scope of a class is the enclosing scope of the class declaration.
-\item A {\em static scope}. The enclosing scope of the static scope of a  class is the type parameter scope (\ref{generics}) of the class.
-\item  An {\em instance scope}.
+\item A {\em type-parameter scope}, which is empty if the class is not generic (\ref{generics}).
+The enclosing scope of the type-parameter scope of a class is the enclosing scope of the class declaration.
+\item A {\em static scope}.
+The enclosing scope of the static scope of a class is the type parameter scope (\ref{generics}) of the class.
+\item An {\em instance scope}.
 The enclosing scope of a class' instance scope is the class' static scope.
 \end{itemize}
 
@@ -998,27 +1157,23 @@
 \LMHash{}
 The enclosing scope of a static member declaration is the static scope of the class in which it is declared.
 
+\LMHash{}
+Every class has a single superclass except class \code{Object} which has no superclass.
+A class may implement a number of interfaces by declaring them in its implements clause (\ref{superinterfaces}).
 
 \LMHash{}
-Every class has a single superclass  except class \code{Object} which has no superclass. A class may implement a number of interfaces
-%, either
-by declaring them in its implements clause  (\ref{superinterfaces}).
-% or via interface injection declarations (\ref{interfaceInjection}) outside the class declaration
-
-
-\LMHash{}
-An {\em abstract class} is
-%either
-a class that is explicitly declared with the  \ABSTRACT{}  modifier, either by means of a class declaration or via a type alias (\ref{typedef}) for a mixin application (\ref{mixinApplication}). A {\em concrete class} is a class that is not abstract.
-%, or a class that declares at least one abstract method  (\ref{abstractInstanceMembers}).
+An {\em abstract class} is a class that is explicitly declared with the \ABSTRACT{} modifier, either by means of a class declaration or via a type alias (\ref{typedef}) for a mixin application (\ref{mixinApplication}).
+A {\em concrete class} is a class that is not abstract.
 
 \rationale{
-%The abstract modifier for classes is intended to be used in scenarios where an abstract class $A$ inherits from another abstract class $B$. In such a situation, it may be that A$ $itself does not declare any abstract methods. In the absence of an abstract modifier on the class, the class would be interpreted as a concrete class. However, w
-We want different behavior for concrete classes and abstract classes. If $A$ is intended to be abstract, we want the static checker to warn about any attempt to instantiate $A$, and we do not want the checker to complain about unimplemented methods in $A$. In contrast, if $A$ is intended to be concrete, the checker should warn about all unimplemented methods, but allow clients to instantiate it freely.
+We want different behavior for concrete classes and abstract classes.
+If $A$ is intended to be abstract, we want the static checker to warn about any attempt to instantiate $A$, and we do not want the checker to complain about unimplemented methods in $A$.
+In contrast, if $A$ is intended to be concrete, the checker should warn about all unimplemented methods, but allow clients to instantiate it freely.
 }
 
 \LMHash{}
-The {\em interface of class $C$} is an implicit interface that declares instance members that correspond to the instance members declared by $C$, and whose direct superinterfaces are the direct superinterfaces of $C$ (\ref{superinterfaces}). When a class name appears as a type, that name denotes the interface of the class.
+The {\em interface of class $C$} is an implicit interface that declares instance members that correspond to the instance members declared by $C$, and whose direct superinterfaces are the direct superinterfaces of $C$ (\ref{superinterfaces}).
+When a class name appears as a type, that name denotes the interface of the class.
 
 % making an exception for the setters generated for final fields is tempting but problematic.
 % If a super type defines a setter, it will be overridden yet have no impact on the interface.
@@ -1026,12 +1181,14 @@
 % I think the original rules were best.
 
 \LMHash{}
- It is a compile-time error if a class declares two members of the same name.
- %, except that a getter and a setter may be declared with the same name provided both are instance members or both are static members.
-It is a compile-time error if a class has an instance member and a static member  with the same name.
+It is a compile-time error if a class declares two members of the same name.
+It is a compile-time error if a class has an instance member and a static member with the same name.
 % It is a compile-time error if a generic (\ref{generics}) class declares a member with the same name as one of its type parameters.
 
-\commentary{Here are simple examples, that illustrate the difference between ``has a member'' and ``declares a member''. For example, \code{B} {\em declares} one member named \code{f}, but {\em has} two such members. The rules of inheritance determine what members a class has.
+\commentary{
+Here are simple examples, that illustrate the difference between ``has a member'' and ``declares a member''.
+For example, \code{B} {\em declares} one member named \code{f}, but {\em has} two such members.
+The rules of inheritance determine what members a class has.
 }
 
 \begin{dartCode}
@@ -1042,9 +1199,9 @@
 \}
 
 \CLASS{} B \EXTENDS{} A \{
-  int i = 1; //  getter i and setter i= override versions from A
+  int i = 1; // getter i and setter i= override versions from A
   \STATIC{} j; // compile-time error: static getter \& setter conflict with
-  //instance getter \& setter
+  // instance getter \& setter
 
   /* compile-time error: static method conflicts with instance method */
   \STATIC{} f(x) => 3;
@@ -1052,18 +1209,23 @@
 \end{dartCode}
 
 \LMHash{}
-It is a compile-time error if a class $C$ declares a member with the same name as $C$. It is a compile-time error if a generic class declares a type variable with the same name as the class or any of its members or constructors.
+It is a compile-time error if a class $C$ declares a member with the same name as $C$.
+It is a compile-time error if a generic class declares a type variable with the same name as the class or any of its members or constructors.
+
 
 \subsection{Instance Methods}
 \LMLabel{instanceMethods}
 
 \LMHash{}
-Instance methods are functions (\ref{functions}) whose declarations are immediately contained within a class declaration and that are not declared \STATIC{}. The instance methods of a class $C$ are those instance methods declared by $C$ and the instance methods inherited by $C$ from its superclass.
+Instance methods are functions (\ref{functions}) whose declarations are immediately contained within a class declaration and that are not declared \STATIC{}.
+The instance methods of a class $C$ are those instance methods declared by $C$ and the instance methods inherited by $C$ from its superclass.
 
 %make these warnings if possible
 
 \LMHash{}
-It is a static warning if an instance method $m_1$ overrides  (\ref{inheritanceAndOverriding}) an instance member $m_2$ and  $m_1$ has a greater number of required parameters than $m_2$. It is a static warning if an instance method $m_1$ overrides  an instance member $m_2$ and  $m_1$ has fewer positional parameters than $m_2$.  It is a static warning if an instance method $m_1$ overrides  an instance member $m_2$ and  $m_1$ does not declare all the named parameters declared by $m_2$.
+It is a static warning if an instance method $m_1$ overrides (\ref{inheritanceAndOverriding}) an instance member $m_2$ and $m_1$ has a greater number of required parameters than $m_2$.
+It is a static warning if an instance method $m_1$ overrides an instance member $m_2$ and $m_1$ has fewer positional parameters than $m_2$.
+It is a static warning if an instance method $m_1$ overrides an instance member $m_2$ and $m_1$ does not declare all the named parameters declared by $m_2$.
 
 % not quite right. It should be ok to override a method that requires N parameters with one that requires M < N but accepts the others as optional.
 
@@ -1074,6 +1236,7 @@
 
 % Works. If the name is public, no issue. If it's private, if a subclass has a conflicting inst var, it either is in the same lib and will be flagged, or is in another and is not an issue.
 
+
 \subsubsection{Operators}
 \LMLabel{operators}
 
@@ -1081,37 +1244,39 @@
 {\em Operators} are instance methods with special names.
 
 \begin{grammar}
-{\bf operatorSignature:}
-       returnType? \OPERATOR{} operator formalParameterList
-       .
+{\bf operatorSignature:}returnType? \OPERATOR{} operator formalParameterList
+  .
 
- {\bf operator:}`\~{}';
-      binaryOperator;
-      `[' `]' ;
-      `[' `]' `='
-    .
+{\bf operator:}`\~{}';
+  binaryOperator;
+  `[' `]' ;
+  `[' `]' `='
+  .
 
 {\bf binaryOperator:}multiplicativeOperator;
-      additiveOperator;
-      shiftOperator;
-      relationalOperator;
-      `==';
-      bitwiseOperator
-    .
- \end{grammar}
+  additiveOperator;
+  shiftOperator;
+  relationalOperator;
+  `==';
+  bitwiseOperator
+  .
+\end{grammar}
 
 \LMHash{}
 An operator declaration is identified using the built-in identifier (\ref{identifierReference}) \OPERATOR{}.
 
 \LMHash{}
-The following names are allowed for user-defined operators: \code{<, >, <=, >=, ==,  -, +, /, \~{}/, *, \%, $|$, \^{}, \&, $<<$, $>>$, $>>>$, []=, [], \~{}.}
-
+The following names are allowed for user-defined operators: \code{<, >, <=, >=, ==, -, +, /, \~{}/, *, \%, $|$, \^{}, \&, $<<$, $>>$, $>>>$, []=, [], \~{}}.
 
 \LMHash{}
-It is a compile-time error if the arity of the user-declared operator \code{[]=} is not 2. It is a compile-time error if the arity of a user-declared operator with one of the names:  \code{ <, >, <=, >=, ==, -, +,  \~{}/, /, *, \%, $|$, \^{}, \&, $<<$, $>>$, $>>>$, []} is not 1. It is a compile-time error if the arity of the user-declared operator  \code{-} is not 0 or 1.
+It is a compile-time error if the arity of the user-declared operator \code{[]=} is not 2.
+It is a compile-time error if the arity of a user-declared operator with one of the names: \code{<, >, <=, >=, ==, -, +, \~{}/, /, *, \%, $|$, \^{}, \&, $<<$, $>>$, $>>>$, []} is not 1.
+It is a compile-time error if the arity of the user-declared operator \code{-} is not 0 or 1.
 
 \commentary{
-The \code{-} operator is unique in that two overloaded versions are permitted. If the operator has no arguments, it denotes unary minus. If it has an argument, it denotes binary subtraction.
+The \code{-} operator is unique in that two overloaded versions are permitted.
+If the operator has no arguments, it denotes unary minus.
+If it has an argument, it denotes binary subtraction.
 }
 
 \LMHash{}
@@ -1122,7 +1287,7 @@
 }
 
 \LMHash{}
-It is a compile-time error if the arity of the user-declared operator  \code{ \~{}} is not 0.
+It is a compile-time error if the arity of the user-declared operator \code{\~{}} is not 0.
 
 \LMHash{}
 It is a compile-time error to declare an optional parameter in an operator.
@@ -1137,29 +1302,29 @@
 \LMLabel{getters}
 
 \LMHash{}
-Getters are functions (\ref{functions})  that are used to retrieve the values of object properties.
+Getters are functions (\ref{functions}) that are used to retrieve the values of object properties.
 
 \begin{grammar}
-{\bf getterSignature:}
-       returnType? \GET{} identifier
-.
+{\bf getterSignature:}returnType? \GET{} identifier
+  .
 \end{grammar}
 
-%\Q{Why does a getter have a formal parameter list at all?}
+\LMHash{}
+If no return type is specified, the return type of the getter is \DYNAMIC{}.
 
 \LMHash{}
-If no return type is specified, the return type of the getter is  \DYNAMIC{}.
+A getter definition that is prefixed with the \STATIC{} modifier defines a static getter.
+Otherwise, it defines an instance getter.
+The name of the getter is given by the identifier in the definition.
+The effect of a static getter declaration in class $C$ is to add an instance getter with the same name and signature to the \code{Type} object for class $C$ that forwards (\ref{functionDeclarations}) to the static getter.
 
 \LMHash{}
-A getter definition that is prefixed with the \STATIC{} modifier defines a static getter. Otherwise, it defines an instance getter. The name of the getter is given by the identifier in the definition. The effect of a static getter declaration in class $C$ is to add an instance getter with the same name and signature to the \code{Type} object for class $C$ that forwards (\ref{functionDeclarations})  to the static getter.
-
-%It is a compile-time error if a getter`s formal parameter list is not empty.
+The instance getters of a class $C$ are those instance getters declared by $C$, either implicitly or explicitly, and the instance getters inherited by $C$ from its superclass.
+The static getters of a class $C$ are those static getters declared by $C$.
 
 \LMHash{}
-The instance getters of a class $C$ are those instance getters declared by $C$, either implicitly or explicitly, and the instance getters inherited by $C$ from its superclass. The static getters of a class $C$ are those static getters declared by $C$.
-
-\LMHash{}
-It is a compile-time error if a class has both a getter and a method with the same name. This restriction holds regardless of whether the getter is defined explicitly or implicitly, or whether the getter or the method are inherited or not.
+It is a compile-time error if a class has both a getter and a method with the same name.
+This restriction holds regardless of whether the getter is defined explicitly or implicitly, or whether the getter or the method are inherited or not.
 
 \commentary{
 This implies that a getter can never override a method, and a method can never override a getter or an instance variable.
@@ -1167,7 +1332,7 @@
 
 \LMHash{}
 It is a static warning if the return type of a getter is \VOID.
-It is a static warning if a getter $m_1$ overrides  (\ref{inheritanceAndOverriding}) a getter
+It is a static warning if a getter $m_1$ overrides (\ref{inheritanceAndOverriding}) a getter
 $m_2$ and the type of $m_1$ is not a subtype of the type of $m_2$.
 
 \LMHash{}
@@ -1186,39 +1351,47 @@
 % so we need not specify how to handle those cases with respect to
 % this static warning.
 
+
 \subsection{Setters}
 \LMLabel{setters}
 
 \LMHash{}
 Setters are functions (\ref{functions}) that are used to set the values of object properties.
 
-% what about top level ones? Same for getters
-
 \begin{grammar}
-{\bf setterSignature:}
-       returnType? \SET{} identifier formalParameterList
-.
+{\bf setterSignature:}returnType? \SET{} identifier formalParameterList
+  .
 \end{grammar}
 
 \LMHash{}
-If no return type is specified, the return type of the setter is  \DYNAMIC{}.
+If no return type is specified, the return type of the setter is \DYNAMIC{}.
 
 \LMHash{}
-A setter definition that is prefixed with the \STATIC{} modifier defines a static setter. Otherwise, it defines an instance setter. The name of a setter is  obtained by appending the  string `='  to the identifier given in its signature. The effect of a static setter declaration in class $C$ is to add an instance setter with the same name and signature to the \code{Type} object for class $C$ that forwards (\ref{functionDeclarations})  to the static setter.
+A setter definition that is prefixed with the \STATIC{} modifier defines a static setter.
+Otherwise, it defines an instance setter.
+The name of a setter is obtained by appending the string `=' to the identifier given in its signature.
+The effect of a static setter declaration in class $C$ is to add an instance setter with the same name and signature to the \code{Type} object for class $C$ that forwards (\ref{functionDeclarations}) to the static setter.
 
-\commentary{Hence, a setter name can never conflict with, override or be overridden by a getter or method.}
+\commentary{
+Hence, a setter name can never conflict with, override or be overridden by a getter or method.
+}
 
 \LMHash{}
-The instance setters of a class $C$ are those instance setters declared by $C$ either implicitly or explicitly, and the instance setters inherited by $C$ from its superclass. The static setters of a class $C$ are those static setters declared by $C$.
+The instance setters of a class $C$ are those instance setters declared by $C$ either implicitly or explicitly, and the instance setters inherited by $C$ from its superclass.
+The static setters of a class $C$ are those static setters declared by $C$.
 
 \LMHash{}
-It is a compile-time error if a setter's formal parameter list does not consist of exactly one required formal parameter $p$.  \rationale{We could enforce this via the grammar, but we'd have to specify the evaluation rules in that case.}
+It is a compile-time error if a setter's formal parameter list does not consist of exactly one required formal parameter $p$.
+\rationale{
+We could enforce this via the grammar, but we'd have to specify the evaluation rules in that case.
+}
 
 %It is a compile-time error if a class has both a setter and a method with the same name. This restriction holds regardless of whether the setter is defined explicitly or implicitly, or whether the setter or the method are inherited or not.
 
 \LMHash{}
 It is a static warning if a setter declares a return type other than \VOID{}.
-It is a static warning if a setter $m_1$ overrides  (\ref{inheritanceAndOverriding}) a setter $m_2$ and the type of $m_1$ is not a subtype of the type of $m_2$. It is a static warning if a class has a setter named $v=$ with argument type $T$ and a getter named $v$ with return type $S$, and $T$ may not be assigned to $S$.
+It is a static warning if a setter $m_1$ overrides (\ref{inheritanceAndOverriding}) a setter $m_2$ and the type of $m_1$ is not a subtype of the type of $m_2$.
+It is a static warning if a class has a setter named $v=$ with argument type $T$ and a getter named $v$ with return type $S$, and $T$ may not be assigned to $S$.
 
 \LMHash{}
 It is a static warning if a class declares a static setter named $v=$ and also has a non-static member named $v$.
@@ -1236,22 +1409,28 @@
 % compile-time error, so we need not specify how to handle those cases
 % with respect to this static warning.
 
+
 \subsection{Abstract Instance Members}
 \LMLabel{abstractInstanceMembers}
 
 \LMHash{}
-An {\em abstract method} (respectively, {\em abstract getter} or {\em abstract setter)} is an instance method, getter or setter that is not declared \EXTERNAL{} and does not  provide an implementation. A {\em concrete method} (respectively, {\em concrete getter} or {\em concrete setter)} is an instance method, getter or setter that is not abstract.
-%The declaration of an abstract method is prefixed by the built-in identifier (\ref{identifierReference}) \ABSTRACT{}.
+An {\em abstract method} (respectively, {\em abstract getter} or {\em abstract setter)} is an instance method, getter or setter that is not declared \EXTERNAL{} and does not provide an implementation.
+A {\em concrete method} (respectively, {\em concrete getter} or {\em concrete setter)} is an instance method, getter or setter that is not abstract.
 
 \rationale{
-Earlier versions of Dart required that abstract members be identified by prefixing them with the modifier \ABSTRACT{}.  The elimination of this requirement is motivated by the desire to use abstract classes as interfaces. Every Dart class induces an implicit interface.
+Earlier versions of Dart required that abstract members be identified by prefixing them with the modifier \ABSTRACT{}.
+The elimination of this requirement is motivated by the desire to use abstract classes as interfaces.
+Every Dart class induces an implicit interface.
 
-Using an abstract class instead of an interface has important advantages. An abstract class can provide default implementations; it can also provide static methods, obviating the need for service classes such as \code{Collections} or \code{Lists}, whose entire purpose is to group utilities related to a given type.
+Using an abstract class instead of an interface has important advantages.
+An abstract class can provide default implementations; it can also provide static methods, obviating the need for service classes such as \code{Collections} or \code{Lists}, whose entire purpose is to group utilities related to a given type.
 
-Eliminating the requirement for an explicit modifier on members makes abstract classes more concise, making abstract classes an attractive substitute for  interface declarations.
+Eliminating the requirement for an explicit modifier on members makes abstract classes more concise, making abstract classes an attractive substitute for interface declarations.
 }
 
-\commentary {Invoking an abstract method, getter or setter results in an invocation of  \cd{noSuchMethod} exactly as if the declaration did not exist, unless a suitable member $a$ is available in a superclass, in which case $a$ is invoked.  The normative specification for this appears under the definitions of lookup for methods, getters and setters.
+\commentary{
+Invoking an abstract method, getter or setter results in an invocation of \code{noSuchMethod} exactly as if the declaration did not exist, unless a suitable member $a$ is available in a superclass, in which case $a$ is invoked.
+The normative specification for this appears under the definitions of lookup for methods, getters and setters.
 }
 
 % so does an abstract method override a method in a superclass or not? Does the superclass method get inherited or not?  This generally makes the spec inconsistent, as there is no simple answer.
@@ -1259,63 +1438,71 @@
 % But if we do override, method lookup rules break down.  So several things need revisiting.
 
 \rationale{
-The purpose of an abstract method is to provide a declaration for purposes such as type checking and reflection. In classes used as mixins, it is often useful to introduce such declarations for methods that the mixin expects will be provided by the superclass the mixin is applied to.
+The purpose of an abstract method is to provide a declaration for purposes such as type checking and reflection.
+In classes used as mixins, it is often useful to introduce such declarations for methods that the mixin expects will be provided by the superclass the mixin is applied to.
 }
 %always results in a run-time error. This must be \code{NoSuchMethodError} or an instance of a subclass of \code{NoSuchMethodError}, such as \code{AbstractMethodError}.
 
 \LMHash{}
 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 \cd{noSuchMethod()} method distinct from the one declared in class \cd{Object}.
+\item $m$ overrides a concrete member, or
+\item $C$ has a \code{noSuchMethod()} method distinct from the one declared in class \code{Object}.
 \end{itemize}
 
-\rationale {
-We wish to warn if one declares a concrete class with abstract members. However,  code like the following should work without warnings:
+\rationale{
+We wish to warn if one declares a concrete class with abstract members.
+However, code like the following should work without warnings:
 }
 
 \begin{dartCode}
- class Base \{
+  class Base \{
     int get one => 1;
- \}
+  \}
 
- abstract class Mix \{
+  abstract class Mix \{
     int get one;
     int get two => one + one;
- \}
+  \}
 
- class C extends Base with Mix \{ \}
+  class C extends Base with Mix \{ \}
 \end{dartCode}
 
-\rationale{At run time, the concrete method \cd{one} declared in \cd{Base} will be executed, and no problem should arise. Therefore no warning should be issued and so we suppress warnings if a corresponding concrete member exists in the hierarchy. }
+\rationale{
+At run time, the concrete method \code{one} declared in \code{Base} will be executed, and no problem should arise.
+Therefore no warning should be issued and so we suppress warnings if a corresponding concrete member exists in the hierarchy.
+}
+
 
 \subsection{Instance Variables}
 \LMLabel{instanceVariables}
 
 \LMHash{}
-Instance variables are variables whose declarations are immediately contained within a class declaration and that are not declared \STATIC{}. The instance variables of a class $C$ are those instance variables declared by $C$ and the instance variables inherited by $C$ from its superclass.
+Instance variables are variables whose declarations are immediately contained within a class declaration and that are not declared \STATIC{}.
+The instance variables of a class $C$ are those instance variables declared by $C$ and the instance variables inherited by $C$ from its superclass.
 
 \LMHash{}
 It is a compile-time error if an instance variable is declared to be constant.
 
 \rationale{
 The notion of a constant instance variable is subtle and confusing to programmers.
-An instance variable is intended to vary per instance. A constant instance variable would have the same value for all instances, and as such is already a dubious idea.
+An instance variable is intended to vary per instance.
+A constant instance variable would have the same value for all instances, and as such is already a dubious idea.
 
-The language could interpret const instance variable declarations as instance getters that return a constant.  However, a constant instance variable could not be treated as a true compile-time constant, as its getter would be subject to overriding.
+The language could interpret const instance variable declarations as instance getters that return a constant.
+However, a constant instance variable could not be treated as a true compile-time constant, as its getter would be subject to overriding.
 
-Given that the value does not depend on  the instance, it is better to use a static class variable.
+Given that the value does not depend on the instance, it is better to use a static class variable.
 An instance getter for it can always be defined manually if desired.
 }
 
-
-%An instance variable declaration of one of the forms \code{$T$ $v$;}, \code{\FINAL{} $T$ $v$;} ,  \code{$T$ $v$ = $e$;} ,  \code{\CONST{} $T$ $v$ = $e$;} or \code{\FINAL{} $T$ $v$ = $e$;}  always induces an implicit getter function (\ref{getters}) with signature
+%An instance variable declaration of one of the forms \code{$T$ $v$;}, \code{\FINAL{} $T$ $v$;} , \code{$T$ $v$ = $e$;}, \code{\CONST{} $T$ $v$ = $e$;} or \code{\FINAL{} $T$ $v$ = $e$;} always induces an implicit getter function (\ref{getters}) with signature
 
 %$T$ \GET{} $v$
 
 %whose invocation evaluates to the value stored in $v$.
 
-%An instance variable declaration  of one of the forms \code{\VAR{} $v$;}, \code{\FINAL{} $v$;}, \code{\VAR{} $v$ = $e$;} ,  \code{\CONST{} $v$ = $e$;} or \code{\FINAL{} $v$ = $e$;}   always induces an implicit getter function with signature
+%An instance variable declaration of one of the forms \code{\VAR{} $v$;}, \code{\FINAL{} $v$;}, \code{\VAR{} $v$ = $e$;}, \code{\CONST{} $v$ = $e$;} or \code{\FINAL{} $v$ = $e$;} always induces an implicit getter function with signature
 
 %\GET{} $v$
 
@@ -1323,13 +1510,13 @@
 
 %\commentary{Getters are introduced for all instance and static variables (\ref{staticVariables}), regardless of whether they are const/final or not.}
 
-%A non-final instance variable declaration  of the form \code{$T$ $v$;} or the form  \code{$T$ $v$ = $e$;}   always induces an implicit setter function (\ref{setters}) with signature
+%A non-final instance variable declaration of the form \code{$T$ $v$;} or the form \code{$T$ $v$ = $e$;} always induces an implicit setter function (\ref{setters}) with signature
 
 %\VOID{} \SET{} $v=(T$ $x)$
 
 %whose execution sets the value of $v$ to the incoming argument $x$.
 
-%A non-final instance variable declaration  of the form \code{\VAR{} $v$;} or the form  \code{\VAR{} $v$ = $e$;}   always induces an implicit setter function with signature
+%A non-final instance variable declaration of the form \code{\VAR{} $v$;} or the form \code{\VAR{} $v$ = $e$;} always induces an implicit setter function with signature
 
 %\SET{} $v=(x)$
 
@@ -1346,15 +1533,17 @@
 Constructors may be generative (\ref{generativeConstructors}) or they may be factories (\ref{factories}).
 
 \LMHash{}
-A {\em constructor name} always begins with the name of its immediately enclosing class, and may optionally be followed by a dot and an identifier $id$. It is a compile-time error if $id$ is the name of a member  declared in the immediately enclosing class. It is a compile-time error if the name of a  constructor is not a constructor name.
+A {\em constructor name} always begins with the name of its immediately enclosing class, and may optionally be followed by a dot and an identifier $id$.
+It is a compile-time error if $id$ is the name of a member declared in the immediately enclosing class.
+It is a compile-time error if the name of a constructor is not a constructor name.
 
-
-% In what scope do constructors go? The simple names of named constructors go  in the static scope of the class. Unnamed ones go nowhere, but we use the class name to refer to them; the class name could also in the static scope of the class as well to prevent weird errors, or we could ban it explicitly and avoiding duplication. Similarly, the instance scope could contain the constructor names and class name, or we could have special rules to prevent collisions between instance members and constructors or the class.
+% In what scope do constructors go? The simple names of named constructors go in the static scope of the class. Unnamed ones go nowhere, but we use the class name to refer to them; the class name could also in the static scope of the class as well to prevent weird errors, or we could ban it explicitly and avoiding duplication. Similarly, the instance scope could contain the constructor names and class name, or we could have special rules to prevent collisions between instance members and constructors or the class.
 
 % The enclosing scope of a generative constructor is the instance scope of the class in which it is declared (but what about redirecting?)
 
 \LMHash{}
-Iff no constructor is specified for a class $C$, it implicitly has a default constructor \code{C() : \SUPER{}() \{\}}, unless $C$ is class \code{Object}.
+If{}f no constructor is specified for a class $C$, it implicitly has a default constructor \code{C() : \SUPER{}() \{\}}, unless $C$ is class \code{Object}.
+
 
 \subsubsection{Generative Constructors}
 \LMLabel{generativeConstructors}
@@ -1363,13 +1552,16 @@
 A {\em generative constructor} consists of a constructor name, a constructor parameter list, and either a redirect clause or an initializer list and an optional body.
 
 \begin{grammar}
-{\bf constructorSignature:}
-      identifier (`{\escapegrammar .}' identifier)? formalParameterList
-    .
- \end{grammar}
+{\bf constructorSignature:}identifier (`{\escapegrammar .}' identifier)? formalParameterList
+  .
+\end{grammar}
 
 \LMHash{}
-A {\em constructor parameter list} is a parenthesized, comma-separated list of formal constructor parameters. A {\em formal constructor parameter} is either a formal parameter (\ref{formalParameters}) or an initializing formal. An {\em initializing formal} has the form \code{\THIS{}.$id$}, where $id$ is the name of an instance variable of the immediately enclosing class.  It is a compile-time error if $id$ is not an instance variable of the immediately enclosing class. It is a compile-time error if an initializing formal is used by a function other than a non-redirecting generative constructor.
+A {\em constructor parameter list} is a parenthesized, comma-separated list of formal constructor parameters.
+A {\em formal constructor parameter} is either a formal parameter (\ref{formalParameters}) or an initializing formal.
+An {\em initializing formal} has the form \code{\THIS{}.$id$}, where $id$ is the name of an instance variable of the immediately enclosing class.
+It is a compile-time error if $id$ is not an instance variable of the immediately enclosing class.
+It is a compile-time error if an initializing formal is used by a function other than a non-redirecting generative constructor.
 
 \LMHash{}
 If an explicit type is attached to the initializing formal, that is its static type.
@@ -1403,7 +1595,9 @@
 \}
 \end{dartCode}
 
-\commentary{is legal, and has the same effect as}
+\commentary{
+is legal, and has the same effect as
+}
 
 \begin{dartCode}
 class A \{
@@ -1413,57 +1607,56 @@
 \end{dartCode}
 
 \LMHash{}
-A {\em fresh instance} is an instance whose identity  is distinct from any previously allocated instance of its class. A generative constructor always operates on a fresh instance of its immediately enclosing class.
+A {\em fresh instance} is an instance whose identity is distinct from any previously allocated instance of its class.
+A generative constructor always operates on a fresh instance of its immediately enclosing class.
 
 \commentary{
-The above holds if the constructor is actually run, as it is by \NEW{}. If a constructor $c$ is referenced by \CONST{}, $c$ may not be run; instead, a canonical object may be looked up. See the section on instance creation (\ref{instanceCreation}).
+The above holds if the constructor is actually run, as it is by \NEW{}.
+If a constructor $c$ is referenced by \CONST{}, $c$ may not be run; instead, a canonical object may be looked up.
+See the section on instance creation (\ref{instanceCreation}).
 }
 
 \LMHash{}
-If a generative constructor $c$  is not a redirecting constructor and no body is provided, then $c$ implicitly has an empty body \code{\{\}}.
+If a generative constructor $c$ is not a redirecting constructor and no body is provided, then $c$ implicitly has an empty body \code{\{\}}.
 
 
 \paragraph{Redirecting Constructors}
 \LMLabel{redirectingConstructors}
 
 \LMHash{}
-A generative constructor may be {\em redirecting}, in which case its only action is to invoke another generative constructor.  A redirecting constructor has no body; instead, it has a redirect clause that specifies which constructor the invocation is redirected to, and with what arguments.
+A generative constructor may be {\em redirecting}, in which case its only action is to invoke another generative constructor.
+A redirecting constructor has no body; instead, it has a redirect clause that specifies which constructor the invocation is redirected to, and with what arguments.
 
 \begin{grammar}
-{\bf redirection:}
-     `{\escapegrammar :}' \THIS{} (`{\escapegrammar .}' identifier)? arguments
-    .
+{\bf redirection:}`{\escapegrammar :}' \THIS{} (`{\escapegrammar .}' identifier)? arguments
+  .
 \end{grammar}
 
-%\Q{We now have generative constructors with no bodies as well.}
 
 \paragraph{Initializer Lists}
 \LMLabel{initializerLists}
 
 \LMHash{}
-An initializer list begins with a colon, and consists of a comma-separated list of individual {\em initializers}. There are two kinds of initializers.
+An initializer list begins with a colon, and consists of a comma-separated list of individual {\em initializers}.
+There are two kinds of initializers.
 \begin{itemize}
-\item A {\em superinitializer} identifies a {\em superconstructor} - that is, a specific constructor of the superclass.  Execution of the superinitializer causes the initializer list of the superconstructor to be executed.
-
+\item A {\em superinitializer} identifies a {\em superconstructor} - that is, a specific constructor of the superclass.
+Execution of the superinitializer causes the initializer list of the superconstructor to be executed.
 \item An {\em instance variable initializer} assigns a value to an individual instance variable.
 \end{itemize}
 
 \begin{grammar}
-{\bf initializers:}
-      `{\escapegrammar :}' initializerListEntry (`,' initializerListEntry)*
-    .
-
+{\bf initializers:}`{\escapegrammar :}' initializerListEntry (\gcomma{} initializerListEntry)*
+  .
 
 {\bf initializerListEntry:}\SUPER{} arguments;
-      \SUPER{} `{\escapegrammar .}' identifier arguments;
-     fieldInitializer;
-     assertion
-    .
+  \SUPER{} `{\escapegrammar .}' identifier arguments;
+  fieldInitializer;
+  assertion
+  .
 
-   {\bf  fieldInitializer:}
-      (\THIS{} `{\escapegrammar .}')? identifier `=' conditionalExpression cascadeSection*
-    .
-
+{\bf fieldInitializer:}(\THIS{} `{\escapegrammar .}')? identifier `=' conditionalExpression cascadeSection*
+  .
 \end{grammar}
 
 \LMHash{}
@@ -1478,15 +1671,16 @@
 
 \LMHash{}
 Each final instance variable $f$ declared in the immediately enclosing class must have an initializer in $k$'s initializer list unless it has already been initialized by one of the following means:
- \begin{itemize}
- \item Initialization at the declaration of $f$.
- \item Initialization by means of an initializing formal of $k$.
- \end{itemize}
+\begin{itemize}
+\item Initialization at the declaration of $f$.
+\item Initialization by means of an initializing formal of $k$.
+\end{itemize}
 
-or a static warning occurs. It is a compile-time error if $k$'s initializer list contains an initializer for a variable that is not an instance variable declared in the immediately surrounding class.
+or a static warning occurs.
+It is a compile-time error if $k$'s initializer list contains an initializer for a variable that is not an instance variable declared in the immediately surrounding class.
 
-
-\commentary{The  initializer list may of course contain an initializer for any  instance variable declared by the immediately surrounding class, even if it is not final.
+\commentary{
+The initializer list may of course contain an initializer for any instance variable declared by the immediately surrounding class, even if it is not final.
 }
 
 \LMHash{}
@@ -1497,7 +1691,9 @@
 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$.
 
-\commentary{These bindings are usually determined by the instance creation expression that invoked the constructor (directly or indirectly). However, they may also be determined by a reflective call.
+\commentary{
+These bindings are usually determined by the instance creation expression that invoked the constructor (directly or indirectly).
+However, they may also be determined by a reflective call.
 }
 
 \LMHash{}
@@ -1505,10 +1701,11 @@
 
 \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 $(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$.
 
 \LMHash{}
-Otherwise, execution  proceeds as follows:
+Otherwise, execution proceeds as follows:
 
 \LMHash{}
 The instance variable declarations of the immediately enclosing class are visited in the order they appear in the program text.
@@ -1523,7 +1720,10 @@
 Then, the initializers of $k$'s initializer list are executed to initialize $i$
 in the order they appear in the program.
 
-\rationale {We could observe the order by side effecting external routines called. So we need to specify the order.}
+\rationale{
+We could observe the order by side effecting external routines called.
+So we need to specify the order.
+}
 
 \LMHash{}
 Then if any instance variable of $i$ declared by the immediately enclosing class
@@ -1572,9 +1772,9 @@
 \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})$
+\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 \SUPER{}$.id(a_1, \ldots, a_n, x_{n+1}: a_{n+1}, \ldots, x_{n+k}: a_{n+k})$
 
 proceeds as follows:
 
@@ -1586,7 +1786,8 @@
 the superconstructor is executed as follows:
 
 \LMHash{}
-Let $C$ be the class in which the superinitializer appears and let $S$ be the superclass of $C$.  If $S$ is generic (\ref{generics}), let $U_1, \ldots, U_m$ be the actual type arguments passed to $S$ in the superclass clause of $C$.
+Let $C$ be the class in which the superinitializer appears and let $S$ be the superclass of $C$.
+If $S$ is generic (\ref{generics}), let $U_1, \ldots, U_m$ be the actual type arguments passed to $S$ in the superclass clause of $C$.
 
 \LMHash{}
 The generative constructor $S$ (respectively $S.id$) of $S$ is executed
@@ -1597,23 +1798,22 @@
 \LMHash{}
 It is a compile-time error if class $S$ does not declare a generative constructor named $S$ (respectively $S.id$).
 
+
 \subsubsection{Factories}
 \LMLabel{factories}
 
 \LMHash{}
-A {\em factory} is a constructor prefaced by the built-in identifier  (\ref{identifierReference})   \FACTORY{}.
+A {\em factory} is a constructor prefaced by the built-in identifier (\ref{identifierReference}) \FACTORY{}.
 
 \begin{grammar}
-{\bf factoryConstructorSignature:}
-      \FACTORY{} identifier  (`{\escapegrammar .}' identifier)?  formalParameterList
-    .
+{\bf factoryConstructorSignature:}\FACTORY{} identifier (`{\escapegrammar .}' identifier)? formalParameterList
+  .
 \end{grammar}
 
-
 %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 $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.
@@ -1621,12 +1821,18 @@
 \LMHash{}
 In checked mode, it is a dynamic type error if a factory returns a non-null object whose type is not a subtype of its actual (\ref{actualTypeOfADeclaration}) return type.
 
-\rationale{It seems useless to allow a factory to return the null object (\ref{null}). But it is more uniform to allow it, as the rules currently do.}
-
-\rationale{Factories address classic weaknesses associated with constructors in other languages.
-Factories can produce instances that are not freshly allocated: they can come from a cache. Likewise, factories can return instances of different classes.
+\rationale{
+It seems useless to allow a factory to return the null object (\ref{null}).
+But it is more uniform to allow it, as the rules currently do.
 }
 
+\rationale{
+Factories address classic weaknesses associated with constructors in other languages.
+Factories can produce instances that are not freshly allocated: they can come from a cache.
+Likewise, factories can return instances of different classes.
+}
+
+
 \paragraph{Redirecting Factory Constructors}
 \LMLabel{redirectingFactoryConstructors}
 
@@ -1634,21 +1840,25 @@
 A {\em redirecting factory constructor} specifies a call to a constructor of another class that is to be used whenever the redirecting constructor is called.
 
 \begin{grammar}
-{\bf redirectingFactoryConstructorSignature:}
-      \CONST{}? \FACTORY{} identifier (`{\escapegrammar .}' identifier)? formalParameterList `=' type (`{\escapegrammar .}' identifier)?
-    .
+{\bf redirectingFactoryConstructorSignature:}\CONST{}? \FACTORY{} identifier (`{\escapegrammar .}' identifier)? formalParameterList
+  \gnewline{} `=' type (`{\escapegrammar .}' identifier)?
+  .
 \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$.  The resulting constructor call is governed by the same rules as an instance creation expression using \NEW{} (\ref{instanceCreation}).
+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$.
+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$.
+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$.
 }
 
 \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$. Hence, default values are disallowed.
+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$.
+Hence, default values are disallowed.
 }
 
 \LMHash{}
@@ -1657,19 +1867,20 @@
 % Make this a run-time error so deferred loading works
 
 \rationale{
-If a redirecting factory $F_1$ redirects to another redirecting factory $F_2$ and $F_2$ then redirects to $F_1$, then both $F_1$ and $F_2$ are ill-defined. Such cycles are therefore illegal.
+If a redirecting factory $F_1$ redirects to another redirecting factory $F_2$ and $F_2$ then redirects to $F_1$, then both $F_1$ and $F_2$ are ill-defined.
+Such cycles are therefore illegal.
 }
 
-
 \LMHash{}
 It is a static warning if $type$ does not denote a class accessible in the current scope; if $type$ does denote such a class $C$ it is a static warning if the referenced constructor (be it $type$ or $type.id$) is not a constructor of $C$.
 
 \commentary{
-Note that it is not possible to modify the arguments being passed to  $k'$.
+Note that it is not possible to modify the arguments being passed to $k'$.
 }
 % but we have the same issue with other redirecting constructors, no?)
 \rationale{
-At first glance, one might think that ordinary factory constructors could simply create instances of other classes and return them, and that redirecting factories are unnecessary. However, redirecting factories have several advantages:
+At first glance, one might think that ordinary factory constructors could simply create instances of other classes and return them, and that redirecting factories are unnecessary.
+However, redirecting factories have several advantages:
 \begin{itemize}
 \item An abstract class may provide a constant constructor that utilizes the constant constructor of another class.
 \item A redirecting factory constructors avoids the need for forwarders to repeat the default values for formal parameters in their signatures.
@@ -1679,19 +1890,17 @@
 %An example of the latter point:
 %}
 
-
 %\begin{dartCode}
 %\CLASS{} W<T> \IMPLEMENTS{} A<T> { W(w) {...} ...}
 %\CLASS{} X<T> \IMPLEMENTS{} A<T> { X(x) {...} ...}
 %\CLASS{} Y<T> \IMPLEMENTS{} A<T> { Y(y) {...} ...}
 %\CLASS{} Z<T> \IMPLEMENTS{} A<T> { Z(z) {...} ...}
 
-
 %\CLASS{} F<T> { // note that F does not implement A
-%  \STATIC{} F<T> idw(w) => \NEW{}  W<T>(w); // illegal - T not in scope in idw
+%  \STATIC{} F<T> idw(w) => \NEW{} W<T>(w); // illegal - T not in scope in idw
 %  \FACTORY{} F.idx(x) => \NEW{} X<T>(x);
 %  \FACTORY{} F.idy(y) => \NEW{} Y<T>(y);
-%  \STATIC{} F idz(z) => \NEW{}  Z(z); // does not capture the type argument
+%  \STATIC{} F idz(z) => \NEW{} Z(z); // does not capture the type argument
 %}
 
 %\CLASS{} A<T>{
@@ -1710,7 +1919,7 @@
 It is a static warning if the function type of $k^\prime$ 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$.
+This implies that the resulting object conforms to the interface of the immediately enclosing class of $k$.
 }
 
 \LMHash{}
@@ -1721,20 +1930,19 @@
 \LMLabel{constantConstructors}
 
 \LMHash{}
-A {\em constant constructor} may be used to create compile-time constant  (\ref{constants}) objects. A constant constructor is prefixed by the reserved word \CONST{}.
+A {\em constant constructor} may be used to create compile-time constant (\ref{constants}) objects.
+A constant constructor is prefixed by the reserved word \CONST{}.
 
 \begin{grammar}
-{\bf constantConstructorSignature:}
-      \CONST{} qualified formalParameterList
-    .
+{\bf constantConstructorSignature:}\CONST{} qualified formalParameterList
+  .
 \end{grammar}
 
+%\commentary{Spell out subtleties: a constant constructor call within the initializer of a constant constructor is treated as a ordinary constructor call (a new), because the arguments cannot be assumed constant anymore. In practice, this means two versions are compiled and analyzed. One for new and one for const.}
 
-%\commentary{Spell out subtleties: a constant constructor call within the initializer of a constant constructor is treated as a  ordinary constructor call (a new), because the arguments cannot be assumed constant anymore. In practice, this means two versions are compiled and analyzed. One for new and one for const.}
-
-% \Q{How to specify?}
-
-\commentary{All the work of a constant constructor must be handled via its initializers.}
+\commentary{
+All the work of a constant constructor must be handled via its initializers.
+}
 
 \LMHash{}
 It is a compile-time error if a constant constructor is declared by a class that has a non-final instance variable.
@@ -1746,7 +1954,7 @@
 \LMHash{}
 It is a compile-time error if a constant constructor is declared by a class $C$ if any instance variable declared in $C$ is initialized with an expression that is not a constant expression.
 
-\commentary {
+\commentary{
 A superclass of $C$ cannot declare such an initializer either, because it must necessarily declare constant constructor as well (unless it is \code{Object}, which declares no instance variables).
 }
 
@@ -1760,7 +1968,9 @@
 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.
 
 \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. For example}
+Note that a parameter that is not used in a superexpression that is restricted to certain types can be a constant of any type.
+For example
+}
 
 \begin{dartCode}
 \CLASS{} A \{
@@ -1769,34 +1979,39 @@
 \}
 \end{dartCode}
 
-\commentary{can be instantiated via \cd{\CONST{} A(\CONST []);}}
-
-
+\commentary{
+can be instantiated via \code{\CONST{} A(\CONST []);}
+}
 
 \commentary{
 The difference between a potentially constant expression and a compile-time constant expression (\ref{const}) deserves some explanation.
 
 The key issue is whether one treats the formal parameters of a constructor as compile-time constants.
 
-If a constant constructor is invoked from a constant object expression, the actual arguments will be required to be compile-time constants. Therefore, if we were assured that constant constructors were always invoked from constant object expressions, we could assume that the formal parameters of a constructor were compile-time constants.
+If a constant constructor is invoked from a constant object expression, the actual arguments will be required to be compile-time constants.
+Therefore, if we were assured that constant constructors were always invoked from constant object expressions, we could assume that the formal parameters of a constructor were compile-time constants.
 
 However, constant constructors can also be invoked from ordinary instance creation expressions (\ref{new}), and so the above assumption is not generally valid.
 
-Nevertheless, the use of the formal parameters of a constant constructor within the constructor is of considerable utility. The concept of potentially constant expressions is introduced to facilitate limited use of such formal parameters. Specifically, we allow the usage of the formal parameters of a constant constructor for expressions that involve built-in operators, but not for constant objects, lists and maps. This allows for constructors such as:
+Nevertheless, the use of the formal parameters of a constant constructor within the constructor is of considerable utility.
+The concept of potentially constant expressions is introduced to facilitate limited use of such formal parameters.
+Specifically, we allow the usage of the formal parameters of a constant constructor for expressions that involve built-in operators, but not for constant objects, lists and maps.
+This allows for constructors such as:
 }
 
 \begin{dartCode}
 \CLASS{} C \{
   \FINAL{} x; \FINAL{} y; \FINAL{} z;
   \CONST{} C(p, q): x = q, y = p + 100, z = p + q;
-  % what about
- %  \CONST{} C(p, q): x = q, y = p + 100, z = p + 'foo';
- % perhaps moot. Current spec says that would be ok; type checker can worry, as can execution, which is at compile time anyway
 \}
 \end{dartCode}
 
 \commentary{
-The assignment to \code{x} is allowed under the assumption that \code{q} is a compile-time constant (even though \code{q} is not, in general a compile-time constant).  The assignment to \code{y} is similar, but raises additional questions. In this case, the superexpression of \code{p} is \code{p + 100}, and it requires that \code{p} be a numeric compile-time constant for the entire expression to be considered constant.  The wording of the specification allows us to assume that \code{p} evaluates to an integer. A similar argument holds for \code{p} and \code{q} in the assignment to \code{z}.
+The assignment to \code{x} is allowed under the assumption that \code{q} is a compile-time constant (even though \code{q} is not, in general a compile-time constant).
+The assignment to \code{y} is similar, but raises additional questions.
+In this case, the superexpression of \code{p} is \code{p + 100}, and it requires that \code{p} be a numeric compile-time constant for the entire expression to be considered constant.
+The wording of the specification allows us to assume that \code{p} evaluates to an integer.
+A similar argument holds for \code{p} and \code{q} in the assignment to \code{z}.
 
 However, the following constructors are disallowed:
 }
@@ -1804,20 +2019,23 @@
 \begin{dartCode}
 \CLASS{} D \{
   \FINAL{} w;
-  \CONST{} D.makeList(p): w = \CONST{} [p];  // compile-time error
+  \CONST{} D.makeList(p): w = \CONST{} [p]; // compile-time error
   \CONST{} D.makeMap(p): w = \CONST{} \{``help'': q\}; // compile-time error
   \CONST{} D.makeC(p): w = \CONST{} C(p, 12); // compile-time error
 \}
 \end{dartCode}
 
 \commentary{
-The problem is not that the assignments to \code{w} are not potentially constant; they are.  However, all these run afoul of the rules for constant lists (\ref{lists}), maps (\ref{maps}) and objects (\ref{const}), all of which independently require their subexpressions to be constant expressions.
+The problem is not that the assignments to \code{w} are not potentially constant; they are.
+However, all these run afoul of the rules for constant lists (\ref{lists}), maps (\ref{maps}) and objects (\ref{const}), all of which independently require their subexpressions to be constant expressions.
 }
 
 \rationale{
-All of the illegal constructors of \code{D} above could not be sensibly invoked via \NEW{}, because an expression that must be constant cannot depend on a formal parameter, which may or may not be constant. In contrast, the legal examples make sense regardless of whether the constructor is invoked via \CONST{} or via \NEW{}.
+All of the illegal constructors of \code{D} above could not be sensibly invoked via \NEW{}, because an expression that must be constant cannot depend on a formal parameter, which may or may not be constant.
+In contrast, the legal examples make sense regardless of whether the constructor is invoked via \CONST{} or via \NEW{}.
 
-Careful readers will of course worry about cases where the actual arguments to \code{C()} are constants, but are not numeric. This is precluded by the following rule, combined with the rules for evaluating constant objects (\ref{const}).
+Careful readers will of course worry about cases where the actual arguments to \code{C()} are constants, but are not numeric.
+This is precluded by the following rule, combined with the rules for evaluating constant objects (\ref{const}).
 }
 
 \LMHash{}
@@ -1825,19 +2043,25 @@
 
 %Discuss External Constructors in ne subsubsection here
 
+
 \subsection{Static Methods}
 \LMLabel{staticMethods}
 
 \LMHash{}
-{\em Static methods} are functions, other than getters or setters, whose declarations are immediately contained within a class declaration and that are declared \STATIC{}. The static methods of a class $C$ are those static methods declared by $C$.
+{\em Static methods} are functions, other than getters or setters, whose declarations are immediately contained within a class declaration and that are declared \STATIC{}.
+The static methods of a class $C$ are those static methods declared by $C$.
 
 \LMHash{}
-The effect of a static method declaration in class $C$ is to add an instance method with the same name and signature to the \code{Type} object for class $C$ that forwards (\ref{functionDeclarations})  to the static method.
+The effect of a static method declaration in class $C$ is to add an instance method with the same name and signature to the \code{Type} object for class $C$ that forwards (\ref{functionDeclarations}) to the static method.
 
 \rationale{
-Inheritance of static methods has little utility in Dart. Static methods cannot be overridden. Any required static function can be obtained from its declaring library, and there is no need to bring it into scope via inheritance. Experience shows that developers are confused by the idea of inherited methods that are not instance methods.
+Inheritance of static methods has little utility in Dart.
+Static methods cannot be overridden.
+Any required static function can be obtained from its declaring library, and there is no need to bring it into scope via inheritance.
+Experience shows that developers are confused by the idea of inherited methods that are not instance methods.
 
-Of course, the entire notion of static methods is debatable, but it is retained here because so many programmers are familiar with it. Dart static methods may be seen as functions of the enclosing library.
+Of course, the entire notion of static methods is debatable, but it is retained here because so many programmers are familiar with it.
+Dart static methods may be seen as functions of the enclosing library.
 }
 
 \LMHash{}
@@ -1848,28 +2072,28 @@
 \LMLabel{staticVariables}
 
 \LMHash{}
-{\em Static variables} are variables whose declarations are immediately contained within a class declaration and that are declared \STATIC{}. The static variables of a class $C$ are those static variables declared by $C$.
+{\em Static variables} are variables whose declarations are immediately contained within a class declaration and that are declared \STATIC{}.
+The static variables of a class $C$ are those static variables declared by $C$.
 
-%A static variable declaration  of one of the forms \code{\STATIC{} $T$ $v$;},  \code{\STATIC{} $T$ $v$ = $e$;} ,  \code{\STATIC{} \CONST{} $T$ $v$ = $e$;}  or \code{\STATIC{} \FINAL{} $T$ $v$ = $e$;} always induces an implicit static getter function (\ref{getters}) with signature
+%A static variable declaration of one of the forms \code{\STATIC{} $T$ $v$;}, \code{\STATIC{} $T$ $v$ = $e$;}, \code{\STATIC{} \CONST{} $T$ $v$ = $e$;} or \code{\STATIC{} \FINAL{} $T$ $v$ = $e$;} always induces an implicit static getter function (\ref{getters}) with signature
 
 %\STATIC{} $T$ \GET{} $v$
 
 %whose invocation evaluates as described below (\ref{evaluationOfStaticVariableGetters}).%to the value stored in $v$.
 
-
-%A static variable declaration  of one of the forms \code{\STATIC{} \VAR{} $v$;},  \code{\STATIC{} \VAR{} $v$ = $e$;} ,  \code{\STATIC{} \CONST{} $v$ = $e$;} or \code{\STATIC{} \FINAL{}  $v$ = $e$;}  always induces an implicit static getter function with signature
+%A static variable declaration of one of the forms \code{\STATIC{} \VAR{} $v$;}, \code{\STATIC{} \VAR{} $v$ = $e$;}, \code{\STATIC{} \CONST{} $v$ = $e$;} or \code{\STATIC{} \FINAL{} $v$ = $e$;} always induces an implicit static getter function with signature
 
 %\STATIC{} \GET{} $v$
 
-%whose  invocation evaluates as described below (\ref{evaluationOfStaticVariableGetters}).%to the value stored in $v$.
+%whose invocation evaluates as described below (\ref{evaluationOfStaticVariableGetters}).%to the value stored in $v$.
 
-%A non-final static variable declaration  of the form \code{\STATIC{} $T$ $v$;} or the form  \code{\STATIC{} $T$ $v$ = $e$;}   always induces an implicit static setter function (\ref{setters}) with signature
+%A non-final static variable declaration of the form \code{\STATIC{} $T$ $v$;} or the form \code{\STATIC{} $T$ $v$ = $e$;} always induces an implicit static setter function (\ref{setters}) with signature
 
 %\STATIC{} \VOID{} \SET{} $v=(T$ $x)$
 
 %whose execution sets the value of $v$ to the incoming argument $x$.
 
-%A static variable declaration  of the form \code{\STATIC{} \VAR{} $v$;} or the form  \code{\STATIC{} \VAR{} $v$ = $e$;}   always induces an implicit static setter function with signature
+%A static variable declaration of the form \code{\STATIC{} \VAR{} $v$;} or the form \code{\STATIC{} \VAR{} $v$ = $e$;} always induces an implicit static setter function with signature
 
 %\STATIC{} \SET{} $v=(x)$
 
@@ -1883,30 +2107,30 @@
 %Let $d$ be the declaration of a static variable $v$. The implicit getter method of $v$ executes as follows:
 %\begin{itemize}
 %\item If $d$ is of one of the forms \code{\STATIC{} \VAR{} $v$ = $e$;} , \code{\STATIC{} $T$ $v$ = $e$; }, \code{\STATIC{} \FINAL{} $v$ = $e$; } or \code{\STATIC{} \FINAL{} $T$ $v$ = $e$;} and no value has yet been stored into $v$ then the initializer expression $e$ is evaluated. If, during the evaluation of $e$, the getter for $v$ is referenced, a \code{CyclicInitializationError} is thrown. If the evaluation succeeded yielding an object $o$, let $r$ be $o$, otherwise let $r$ be the null object (\ref{null}). In any case, $r$ is stored into $v$. The result of executing the getter is $r$.
-%\item  If $d$ is of one of the forms \code{\STATIC{} \CONST{} $v$ = $e$; } or \code{\STATIC{} \CONST{} $T$ $v$ = $e$;} the result of the getter is the value of the compile-time constant $e$.
+%\item If $d$ is of one of the forms \code{\STATIC{} \CONST{} $v$ = $e$; } or \code{\STATIC{} \CONST{} $T$ $v$ = $e$;} the result of the getter is the value of the compile-time constant $e$.
 %Otherwise
 %\item The result of executing the getter method is the value stored in $v$.
 %\end{itemize}
 
 
-
 \subsection{Superclasses}
 \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.  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:
+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}
 \item $C$ is \code{Object}, which has no superclass. OR
-\item Class $C$ is  deemed to have an \EXTENDS{} clause of the form \code{\EXTENDS{} Object}, and the rules above apply.
+\item Class $C$ is deemed to have an \EXTENDS{} clause of the form \code{\EXTENDS{} Object}, and the rules above apply.
 \end{itemize}
 
 \LMHash{}
 It is a compile-time error to specify an \EXTENDS{} clause for class \code{Object}.
 
 \begin{grammar}
-{\bf superclass:}
-      \EXTENDS{} type
-    .
+{\bf superclass:}\EXTENDS{} type
+  .
 \end{grammar}
 
 %The superclass clause of a class C is processed within the enclosing scope of the static scope of C.
@@ -1921,7 +2145,9 @@
 It is a compile-time error if the \EXTENDS{} clause of a class $C$ specifies a type variable (\ref{generics}), a type alias (\ref{typedef}), an enumerated type (\ref{enums}), a malformed type, or a deferred type (\ref{staticTypes}) as a superclass.
 It is a compile-time error if the \EXTENDS{} clause of a class $C$ specifies type \DYNAMIC{} as a superinterface.
 
-\commentary{ The type parameters of a generic class are available in the lexical scope of the superclass clause, potentially shadowing classes in the surrounding scope. The following code is therefore illegal and should cause a compile-time error:
+\commentary{
+The type parameters of a generic class are available in the lexical scope of the superclass clause, potentially shadowing classes in the surrounding scope.
+The following code is therefore illegal and should cause a compile-time error:
 }
 
 \begin{dartCode}
@@ -1947,15 +2173,18 @@
 \subsubsection{Inheritance and Overriding}
 \LMLabel{inheritanceAndOverriding}
 
-%A class $C$  {\em inherits} any accessible instance members of its superclass that are not overridden by members declared in $C$.
+%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$. However, a class $C$ can inherit a member $m$ that  is not a member of its superclass  $S$. This can occur when the member $m$ is private
-to the library $L_1$ of $C$, whereas $S$ comes from a different library $L_2$, but
-the superclass chain of $S$ includes a class declared in $L_1$.
+\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$.
+However, a class $C$ can inherit a member $m$ that is not a member of its superclass $S$.
+This can occur when the member $m$ is private to the library $L_1$ of $C$,
+whereas $S$ comes from a different library $L_2$,
+but the superclass chain of $S$ includes a class declared in $L_1$.
 }
 
 \LMHash{}
@@ -1963,20 +2192,26 @@
 
 \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$.
+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$ 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$ iff $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^\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.
 
-\commentary{Instance variables never override each other. The getters and setters induced by instance variables do.}
+\commentary{
+Instance variables never override each other.
+The getters and setters induced by instance variables do.
+}
 
-\rationale{Again, a local definition of overriding would be preferable, but fails to account for library privacy.
+\rationale{
+Again, a local definition of overriding would be preferable, but fails to account for library privacy.
 }
 
 \LMHash{}
 Whether an override is legal or not is described elsewhere in this specification (see \ref{instanceMethods}, \ref{getters} and \ref{setters}).
 
-\commentary{For example getters may not legally override methods and vice versa. Setters never override methods or getters, and vice versa, because their names always differ.
+\commentary{
+For example getters may not legally override methods and vice versa.
+Setters never override methods or getters, and vice versa, because their names always differ.
 }
 
 \rationale{
@@ -1984,70 +2219,79 @@
 }
 
 \commentary{
-Note that instance variables do not participate in the override relation, but the getters and setters they induce do. Also, getters don't override setters and vice versa.  Finally, static members never override anything.
+Note that instance variables do not participate in the override relation, but the getters and setters they induce do.
+Also, getters don't override setters and vice versa.
+Finally, static members never override anything.
 }
 
 \LMHash{}
 It is a static warning if a non-abstract class inherits an abstract method.
 
-\commentary {
-For convenience, here is a summary of the relevant rules. Remember that this is not normative. The controlling language is in the relevant sections of the specification.
+\commentary{
+For convenience, here is a summary of the relevant rules.
+Remember that this is not normative.
+The controlling language is in the relevant sections of the specification.
 
 \begin{enumerate}
 
 \item There is only one namespace for getters, setters, methods and constructors (\ref{scoping}).
   An instance or static variable $f$ introduces a getter $f$ and a non-final instance or static variable $f$ also introduces a setter $f=$ (\ref{instanceVariables}, \ref{staticVariables}).
   When we speak of members here, we mean accessible instance or static variables, getters, setters, and methods (\ref{classes}).
-\item You cannot have two  members with the same name in the same class - be they declared or inherited (\ref{scoping}, \ref{classes}).
+\item You cannot have two members with the same name in the same class - be they declared or inherited (\ref{scoping}, \ref{classes}).
 \item Static members are never inherited.
-\item It is a warning if you have an  static member named $m$ in your class or any superclass (even though it is not inherited) and an  instance member of the same name (\ref{instanceMethods}, \ref{getters}, \ref{setters}).
+\item It is a warning if you have an static member named $m$ in your class or any superclass (even though it is not inherited) and an instance member of the same name (\ref{instanceMethods}, \ref{getters}, \ref{setters}).
 \item It is a warning if you have a static setter $v=$, and an instance member $v$ (\ref{setters}).
 \item It is a warning if you have a static getter $v$ and an instance setter $v=$ (\ref{getters}).
-\item If you define an instance member named $m$, and your superclass has an  instance member of the same name, they override each other. This may or may not be legal.
+\item If you define an instance member named $m$, and your superclass has an instance member of the same name, they override each other.
+This may or may not be legal.
 \item \label{typeSigAssignable}
-If two members override each other, it is a static warning if their type signatures are not assignable to each other (\ref{instanceMethods}, \ref{getters}, \ref{setters}) (and  since these are function types, this means the same as "subtypes of each other").
+If two members override each other, it is a static warning if their type signatures are not assignable to each other (\ref{instanceMethods}, \ref{getters}, \ref{setters}) (and since these are function types, this means the same as "subtypes of each other").
 \item \label{requiredParams}
-If two members override each other, it is a static warning if the overriding member has more required parameters  than the overridden one (\ref{instanceMethods}).
-\item  \label{optionalPositionals}
-If two members override each other, it is a static warning if the overriding member has fewer  positional parameters than the overridden one (\ref{instanceMethods}).
-\item  \label{namedParams}
+If two members override each other, it is a static warning if the overriding member has more required parameters than the overridden one (\ref{instanceMethods}).
+\item \label{optionalPositionals}
+If two members override each other, it is a static warning if the overriding member has fewer positional parameters than the overridden one (\ref{instanceMethods}).
+\item \label{namedParams}
 If two members override each other, it is a static warning if the overriding member does not have all the named parameters that the overridden one has (\ref{instanceMethods}).
 \item Setters, getters and operators never have optional parameters of any kind; it's a compile-time error (\ref{operators}, \ref{getters}, \ref{setters}).
 \item It is a compile-time error if a member has the same name as its enclosing class (\ref{classes}).
 \item A class has an implicit interface (\ref{classes}).
-\item Superinterface members are not inherited by a class, but are inherited by its implicit interface. Interfaces have their own inheritance rules (\ref{interfaceInheritanceAndOverriding}).
+\item Superinterface members are not inherited by a class, but are inherited by its implicit interface.
+Interfaces have their own inheritance rules (\ref{interfaceInheritanceAndOverriding}).
 \item A member is abstract if it has no body and is not labeled \EXTERNAL{} (\ref{abstractInstanceMembers}, \ref{externalFunctions}).
-\item A class is abstract iff it is explicitly labeled \ABSTRACT{}.% or if it declares (not just inherits) an abstract member (\ref{classes}).
+\item A class is abstract if{}f it is explicitly labeled \ABSTRACT{}.% or if it declares (not just inherits) an abstract member (\ref{classes}).
 \item It is a static warning if a concrete class has an abstract member (declared or inherited).
-\item It is a static warning and a dynamic error to call a non-factory constructor of an abstract class  (\ref{new}).
-\item If a class defines an instance member named $m$, and any of its superinterfaces have a  member named $m$, the interface of the class overrides $m$.
-\item  An interface inherits all  members of its superinterfaces that are not overridden and not members of multiple superinterfaces.
-\item  If multiple superinterfaces of an interface define a member with the same name $m$, then at most one member is inherited. That member (if it exists) is the one whose type is a subtype of all the others. If there is no such member, then:
+\item It is a static warning and a dynamic error to call a non-factory constructor of an abstract class (\ref{new}).
+\item If a class defines an instance member named $m$, and any of its superinterfaces have a member named $m$, the interface of the class overrides $m$.
+\item An interface inherits all members of its superinterfaces that are not overridden and not members of multiple superinterfaces.
+\item If multiple superinterfaces of an interface define a member with the same name $m$, then at most one member is inherited.
+That member (if it exists) is the one whose type is a subtype of all the others.
+If there is no such member, then:
 \begin{itemize}
-  \item  A static warning is given.
-  \item  If possible the interface gets a member named $m$ that has the minimum number of required parameters among all the members in the superinterfaces, the maximal number of    positionals, and the superset of named parameters.  The types of these are all \DYNAMIC{}. 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 \cd{noSuchMethod} method (\ref{superinterfaces}).
+\item A static warning is given.
+\item If possible the interface gets a member named $m$ that has the minimum number of required parameters among all the members in the superinterfaces, the maximal number of positionals, and the superset of named parameters.
+The types of these are all \DYNAMIC{}.
+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 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}
 }
 
-
 %Can we have abstract getters and setters?
 
-\subsection{ Superinterfaces}
+
+\subsection{Superinterfaces}
 \LMLabel{superinterfaces}
 % what about rules about classes that fail to implement their interfaces?
 
 \LMHash{}
-A class has a set of direct superinterfaces. This set includes the interface of its superclass and the interfaces specified in the \IMPLEMENTS{}  clause of the class.
-% and any superinterfaces specified by interface injection (\ref{interfaceInjection}).  \Q{The latter needs to be worded carefully - when do interface injection clauses execute and in what scope?}
+A class has a set of direct superinterfaces.
+This set includes the interface of its superclass and the interfaces specified in the \IMPLEMENTS{} clause of the class.
 
 \begin{grammar}
-{\bf interfaces:}
-      \IMPLEMENTS{} typeList
-    .
+{\bf interfaces:}\IMPLEMENTS{} typeList
+  .
 \end{grammar}
 
 \LMHash{}
@@ -2058,67 +2302,55 @@
 It is a compile-time error if the \IMPLEMENTS{} clause of a class $C$ specifies type \DYNAMIC{} as a superinterface.
 It is a compile-time error if the \IMPLEMENTS{} clause of a class $C$ specifies a type $T$ as a superinterface more than once.
 It is a compile-time error if the superclass of a class $C$ is specified as a superinterface of $C$.
+It is a compile-time error if a class $C$ has two superinterfaces that are different instantiations of the same generic class. \commentary{For example, a class may not have both `List<int>` and `List<num>` as superinterfaces.}
+% If we need to allow multiple instantiations, they'll need to have a most
+% specific one, and then we can add the following clause
+%, unless it implements one that is a subtype of all the other. \commentary{This ensures that each class implements one {\em most specific} version of a generic class' interface.}
 
 \rationale{
-One might argue that it is harmless to repeat a type in the superinterface list, so why make it an error? The issue is not so much that the situation described in program source is erroneous, but that it is pointless. As such, it is an indication that the programmer may very well have meant to say something else - and that is a mistake that should be called to her or his attention.  Nevertheless, we could simply issue a warning; and perhaps we should and will. That said, problems like these are local and easily corrected on the spot, so we feel justified in taking a harder line.
+One might argue that it is harmless to repeat a type in the superinterface list, so why make it an error? The issue is not so much that the situation described in program source is erroneous, but that it is pointless.
+As such, it is an indication that the programmer may very well have meant to say something else - and that is a mistake that should be called to her or his attention.
+Nevertheless, we could simply issue a warning; and perhaps we should and will.
+That said, problems like these are local and easily corrected on the spot, so we feel justified in taking a harder line.
 }
 
 \LMHash{}
 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 \cd{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 \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$.
 
-\commentary{A class does not inherit members from its superinterfaces. However, its implicit interface does.
+\commentary{
+A class does not inherit members from its superinterfaces.
+However, its implicit interface does.
 }
 
-
-\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 \cd{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.
+\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}.
+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.
 }
 
-
 \LMHash{}
-It is a static warning if the implicit interface of  a class $C$ includes an instance member $m$ of type $F$ and $C$ declares or inherits a corresponding instance member $m$ of type $F'$ if  $F'$ is not a subtype of $F$.
+It is a static warning if the implicit interface of a class $C$ includes an instance member $m$ of type $F$ and $C$ declares or inherits a corresponding instance member $m$ of type $F'$ if $F'$ is not a subtype of $F$.
 
 \rationale{
 However, if a class does explicitly declare a member that conflicts with its superinterface, this always yields a static warning.
-
 }
 %It is a static warning if an imported superinterface of a class $C$ declares private members.
 
 % Should we ignore unimplemented private members?
 
-%\rationale{This last rule is problematic. As code evolves in one library ($L_1$) it may add private members to a class $I_1$ implemented or inherited in another  library $L_2$ breaking $L_1$.  This is a direct result of coupling an interface based type system with library based privacy.  We are considering alternative semantics that might help resolve this issue.
-%}
-
-%\commentary{However, it is perfectly acceptable if a type mentioned in the implements clause is mentioned as a superinterface in an interface injection clause.
-%}
-
-%\rationale{We disallow repetition of a type in a given implements clause, as that is a localized mistake. However, separate clauses (that is the original class and various injections) may evolve separately over time, and we don't want to cause breakage. For example
-
-%class C implements I1 {...}; // class declaration
-
-
-%somewhere someone realizes that C could implement I2 class C implements I2; // injection
-
-%later, the author of C decides to support I2
-
-%class C implements I1, I2 {...}; // class declaration
-
-%this should not cause breakage.
-%}
-
-% \rationale{This avoids the issues with so-called miranda methods etc. }
-
 
 \section{Interfaces}
 \LMLabel{interfaces}
 
 \LMHash{}
-An {\em interface} defines how one may interact with an object. An interface has methods, getters and setters and a set of superinterfaces.
+An {\em interface} defines how one may interact with an object.
+An interface has methods, getters and setters and a set of superinterfaces.
+
 
 \subsection{Superinterfaces}
 \LMLabel{interfaceSuperinterfaces}
@@ -2127,31 +2359,30 @@
 An interface has a set of direct superinterfaces.
 
 \LMHash{}
-An interface $J$ is a superinterface of an interface $I$ iff either $J$ is a direct superinterface of $I$ or $J$ is a superinterface of a direct superinterface of $I$.
-
-
+An interface $J$ is a superinterface of an interface $I$ if{}f either $J$ is a direct superinterface of $I$ or $J$ is a superinterface of a direct superinterface of $I$.
 
 
 \subsubsection{Inheritance and Overriding}
 \LMLabel{interfaceInheritanceAndOverriding}
 
 \LMHash{}
-Let $J$ be an interface and $K$ be a library. We define $inherited(J, K)$  to be the set of members $m$ such that   all of the following hold:
+Let $J$ be an interface and $K$ be a library.
+We define $inherited(J, K)$ to be the set of members $m$ such that all of the following hold:
 \begin{itemize}
 \item $m$ is accessible to $K$ and
 \item $A$ is a direct superinterface of $J$ and either
   \begin{itemize}
-  \item $A$ declares a member $m$  or
+  \item $A$ declares a member $m$ or
   \item $m$ is a member of $inherited(A, K)$.
   \end{itemize}
 \item $m$ is not overridden by $J$.
 \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^\prime$ 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 $C$ declares a member $m$.
 \item $m^\prime$ has the same name as $m$.
 \item $m^\prime$ is accessible to $K$.
 \item $A$ is a direct superinterface of $J$ and either
@@ -2161,9 +2392,9 @@
   \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)$.
+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)$.
 
 \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.
@@ -2171,8 +2402,6 @@
 \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.
 
-
-
 %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$.
@@ -2180,51 +2409,61 @@
 % tighten definition? do we need chain as for classes?  Definition for interface override?
 
 \LMHash{}
-However, if the above rules would cause multiple members $m_1, \ldots,  m_k$ with the same name $n$ to be inherited (because identically named members existed in several superinterfaces) then at most one member is inherited.
+However, if the above rules would cause multiple members $m_1, \ldots, m_k$ with the same name $n$ to be inherited (because identically named members existed in several superinterfaces) then at most one member is inherited.
 
 \LMHash{}
 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$. Furthermore, let $s$ denote the set of all named parameters of the $m_1, \ldots,  m_k$.  Then let
+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$.
+Furthermore, let $s$ denote the set of all named parameters of the $m_1, \ldots, m_k$.
+Then let
 
 $h = max(numberOfPositionals(m_i)), $
 
-$r = min(numberOfRequiredParams(m_i)), i \in 1..k$.
+$r = min(numberOfRequiredParams(m_i)), i \in 1 .. k$.
 
 \LMHash{}
-Then $I$ has a method named $n$, with $r$ required parameters of type \DYNAMIC{}, $h$  positional parameters of type \DYNAMIC{}, named parameters $s$ of type  \DYNAMIC{} and  return type  \DYNAMIC{}.
+Then $I$ has a method named $n$, with $r$ required parameters of type \DYNAMIC{}, $h$ positional parameters of type \DYNAMIC{}, named parameters $s$ of type \DYNAMIC{} and return type \DYNAMIC{}.
 
-
-
-\commentary{The only situation where the run-time system would be concerned with this would be during reflection, if a mirror attempted to obtain the signature of an interface member.
+\commentary{
+The only situation where the run-time system would be concerned with this would be during reflection, if a mirror attempted to obtain the signature of an interface member.
 }
 
 \rationale{
-The current solution is a tad complex, but is robust in the face of type annotation changes.  Alternatives: (a) No member is inherited in case of conflict. (b) The first m is selected (based on order of superinterface list) (c) Inherited member chosen at random.
+The current solution is a tad complex, but is robust in the face of type annotation changes.
+Alternatives: (a) No member is inherited in case of conflict.
+(b) The first m is selected (based on order of superinterface list).
+(c) Inherited member chosen at random.
 
-(a) means that the presence of an inherited member of an interface varies depending on type signatures.  (b) is sensitive to irrelevant details of the declaration and (c) is liable to give unpredictable results between implementations or even between different compilation sessions.
+(a) means that the presence of an inherited member of an interface varies depending on type signatures.
+(b) is sensitive to irrelevant details of the declaration, and
+(c) is liable to give unpredictable results between implementations or even between different compilation sessions.
 }
 
 % Need warnings if overrider conflicts with overriddee either because signatures are incompatible or because done is a method and one is a getter or setter.
 
+
 \section{Mixins}
 \LMLabel{mixins}
 
-
 \LMHash{}
-A mixin describes the difference between a class and its superclass. A mixin is always derived from an existing class declaration.
+A mixin describes the difference between a class and its superclass.
+A mixin is always derived from an existing class declaration.
 
 \LMHash{}
 It is a compile-time error if a declared or derived mixin explicitly declares a constructor which is not a factory constructor.
 
 \rationale{
-This restriction is temporary.  We expect to remove it in later versions of Dart.
+This restriction is temporary.
+We expect to remove it in later versions of Dart.
 
 The restriction on constructors simplifies the construction of mixin applications because the process of creating instances is simpler.
 }
 
+
 \subsection{Mixin Application}
 \LMLabel{mixinApplication}
 
@@ -2235,19 +2474,18 @@
 It is a compile-time error if the \WITH{} clause of a mixin application $C$ includes a type variable (\ref{generics}), a type alias (\ref{typedef}), an enumerated type (\ref{enums}), a malformed type, or a deferred type (\ref{staticTypes}).
 
 \begin{grammar}
-{\bf  mixinApplicationClass:}
-	identifier typeParameters? `='  mixinApplication `{\escapegrammar ;}' .
+{\bf mixinApplicationClass:}identifier typeParameters? `=' mixinApplication `{\escapegrammar ;}'
+  .
 
-{\bf mixinApplication:}
-     type mixins interfaces?
-    .
+{\bf mixinApplication:}type mixins interfaces?
+  .
 \end{grammar}
 
 \LMHash{}
-A  mixin application of the form  \code{$S$ \WITH{} $M$;} defines a class  $C$ with superclass  $S$.
+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$).
@@ -2255,7 +2493,7 @@
 
 \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});$.
@@ -2266,24 +2504,31 @@
 If the mixin application declares support for interfaces, the resulting class implements those interfaces.
 
 \LMHash{}
-It is a compile-time error if $S$ is an enumerated type (\ref{enums}) or a malformed type. It is a compile-time error if $M$ (respectively, any of $M_1, \ldots, M_k$) is an enumerated type (\ref{enums}) or a malformed type. It is a compile-time error if a well formed mixin cannot be derived from $M$ (respectively, from each of $M_1, \ldots, M_k$).
+It is a compile-time error if $S$ is an enumerated type (\ref{enums}) or a malformed type.
+It is a compile-time error if $M$ (respectively, any of $M_1, \ldots, M_k$) is an enumerated type (\ref{enums}) or a malformed type.
+It is a compile-time error if a well formed mixin cannot be derived from $M$ (respectively, from each of $M_1, \ldots, M_k$).
 
 \LMHash{}
-Let $K$ be a class declaration  with the same constructors, superclass and interfaces as $C$,  and the instance members declared by $M$ (respectively $M_1, \ldots, M_k$). It is a static warning if the declaration of $K$ would cause a static warning.  It is a compile-time error if the declaration of $K$ would cause a compile-time error.
+Let $K$ be a class declaration with the same constructors, superclass and interfaces as $C$, and the instance members declared by $M$ (respectively $M_1, \ldots, M_k$).
+It is a static warning if the declaration of $K$ would cause a static warning.
+It is a compile-time error if the declaration of $K$ would cause a compile-time error.
 
 \commentary{
 If, for example, $M$ declares an instance member $im$ whose type is at odds with the type of a member of the same name in $S$, this will result in a static warning just as if we had defined $K$ by means of an ordinary class declaration extending $S$, with a body that included $im$.
-
 }
 
 \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 name of the class is also set to $C$. Iff the  class is prefixed by the built-in identifier \ABSTRACT{}, the class being defined is an abstract class.
+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.
 
 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 \}}.
 
-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}$.
+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}$.
 
-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$.
+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$.
 
 
 \subsection{Mixin Composition}
@@ -2294,36 +2539,38 @@
 }
 
 \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
 
 \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.
 
 \rationale{
-The classes produced by mixin composition are regarded as abstract because they cannot be instantiated independently. They are only introduced as anonymous superclasses of ordinary class declarations and mixin applications. Consequently, no warning is given if a mixin composition includes abstract members, or incompletely implements an interface.
+The classes produced by mixin composition are regarded as abstract because they cannot be instantiated independently.
+They are only introduced as anonymous superclasses of ordinary class declarations and mixin applications.
+Consequently, no warning is given if a mixin composition includes abstract members, or incompletely implements an interface.
 }
 
 \LMHash{}
 Mixin composition is associative.
 
-
 \commentary{
-Note that any subset of $M_1$, $M_2$ and $S$ may or may not be generic. For any non-generic declaration, the corresponding type parameters may be elided, and if no type parameters remain in the derived declarations $Id_1$ and/or $Id_2$ then the those declarations need not be generic either.
+Note that any subset of $M_1$, $M_2$ and $S$ may or may not be generic.
+For any non-generic declaration, the corresponding type parameters may be elided, and if no type parameters remain in the derived declarations $Id_1$ and/or $Id_2$ then the those declarations need not be generic either.
 }
 
 
@@ -2334,9 +2581,8 @@
 An {\em enumerated type}, or {\em enum}, is used to represent a fixed number of constant values.
 
 \begin{grammar}
-{\bf enumType:}
-metadata \ENUM{} id `\{' id [`,' id]* [`,'] `\}'
-    .
+{\bf enumType:}metadata \ENUM{} id `\{' id [\gcomma{} id]* [\gcomma{}] `\}'
+  .
 \end{grammar}
 
 \LMHash{}
@@ -2355,39 +2601,48 @@
 \}
 \end{dartCode}
 
-\commentary {
-It is also a compile-time error to subclass, mix-in or implement an enum or to explicitly instantiate an enum.  These restrictions are given in normative form in sections \ref{superclasses}, \ref{superinterfaces}, \ref{mixinApplication} and \ref{instanceCreation} as appropriate.
+\commentary{
+It is also a compile-time error to subclass, mix-in or implement an enum or to explicitly instantiate an enum.
+These restrictions are given in normative form in sections \ref{superclasses}, \ref{superinterfaces}, \ref{mixinApplication} and \ref{instanceCreation} as appropriate.
 }
 
+
 \section{Generics}
 \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.
+$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.
 
 \begin{grammar}
-{\bf typeParameter:}
-     metadata identifier (\EXTENDS{} type)?
-    .
-{\bf typeParameters:}
-     `<' typeParameter (`,' typeParameter)* `>'
-    .
+{\bf typeParameter:}metadata identifier (\EXTENDS{} type)?
+  .
+
+{\bf typeParameters:}`<' typeParameter (\gcomma{} typeParameter)* `>'
+  .
 \end{grammar}
 
 \LMHash{}
-A type parameter $T$ may be suffixed with an \EXTENDS{} clause that specifies the {\em upper bound} for $T$. If no  \EXTENDS{} clause is present, the upper bound is \code{Object}.  It is a static type warning if a type parameter is a supertype of its upper bound. The bounds of type variables are a form of type annotation and have no effect on execution in production mode.
+A type parameter $T$ may be suffixed with an \EXTENDS{} clause that specifies the {\em upper bound} for $T$.
+If no \EXTENDS{} clause is present, the upper bound is \code{Object}.
+It is a static type warning if a type parameter is a supertype of its upper bound.
+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.
-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.
+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.
 
 \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 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.
 }
 
 \commentary{
-Because type parameters are in scope in their bounds, we support F-bounded quantification (if you don't know what that is, don't ask). This enables typechecking code such as:
+Because type parameters are in scope in their bounds, we support F-bounded quantification (if you don't know what that is, don't ask).
+This enables typechecking code such as:
 }
 
 \begin{dartCode}
@@ -2409,7 +2664,8 @@
 \item A type parameter cannot be used as a generic type.
 \end{itemize}
 
-The normative versions of these  are given in the appropriate sections of this specification. Some of these restrictions may be lifted in the future.
+The normative versions of these are given in the appropriate sections of this specification.
+Some of these restrictions may be lifted in the future.
 }
 
 %The {\em induced type set}, $S$, of a parameterized type $T$ is the set consisting of
@@ -2428,8 +2684,8 @@
 %\end{dartCode}
 
 %\rationale{
-%poses no problem under this rule. The instantiation \cd{D<T>} has an induced
-%set consisting of: \cd{B<D<T$>>$, Object, D<T>, T}. However, the following variant
+%poses no problem under this rule. The instantiation \code{D<T>} has an induced
+%set consisting of: \code{B<D<T$>>$, Object, D<T>, T}. However, the following variant
 %}
 
 %\begin{dartCode}
@@ -2438,14 +2694,13 @@
 %\end{dartCode}
 
 %\rationale{
-%is disallowed. Consider again the instantiation \cd{D<T>}. It leads to the
-%superclass \cd{B<D<D<T$>>>$}, and so adds \cd{D<D$< $T$>>$} to the induced set. The latter in turn leads to  \cd{B<D<D<D<T$>>>>$} and \cd{D<D<D<T$>>>$}
+%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$>>>$}
 %and so on ad infinitum.}
 
 %\commentary{
 %The above requirement does not preclude the use of arbitrary recursive types in the body of a generic class. }
-%A generic has a type parameter scope. The enclosing scope of a type parameter scope of a generic G  is the enclosing scope of G.
-
+%A generic has a type parameter scope. The enclosing scope of a type parameter scope of a generic G is the enclosing scope of G.
 
 %class T {...}
 
@@ -2454,36 +2709,6 @@
 %By current rules, this is illegal. Make sure we preserve this.
 
 
-%\subsection{Interface Injection}
-%\LMLabel{interfaceInjection}
-
-%An {\em interface injection declaration} causes a pre-existing class $S$ to be considered a subinterface of another interface $I$. It is a static type warning if $S$ is not a structural subtype of $I$. However, the subinterface relations implied by the interface injection declaration are considered to hold by both the typechecker and the run-time system, regardless.
-
-%\begin{grammar}
-%classInterfaceInjection:
-      %class qualified typeParameters? interfaces `{\escapegrammar ;}'
-      %  .
-
-
-%interfaceInterfaceInjection:
-      %interface qualified typeParameters? superinterfaces `{\escapegrammar ;}'
-    %.
-%\end{grammar}
-
-%\rationale{Since subinterface relations can be tested dynamically via \IS{}, interface injection is not just a directive to the static checker. The dynamic relations implied must  hold regardless of whether a static typecheck has succeeded, or has been performed at all. This makes sense from the perspective of preserving programmer intent. The injection describes a nominal type relation that the programmer wishes to hold. Just as a supertype mentioned within a class declaration is considered a supertype even though type errors might arise among (say) overridden and overriding methods, so it must be that the relation implied by an injection holds regardless of type errors.
-%In addition, this decision helps to produce meaningful and localized error messages. Any errors are reported at the point of injection rather than at program points that rely on the relation (a well known problem with structural subtyping in OO systems).
-%}
-
-%\Q{When does an interface injection take effect? When the containing library is loaded?
-%What is the scope of such a declaration? Is it global, or only in the scope of the containing library? The scope of such a declaration is global.
-%An injection must be at top level. Who has the right to inject an interface $I$ into another class $C$? Anybody? But since this affects dynamic behavior, is this a weird security issue?
-%The current theory is that there is no security within an isolate, and one can never refer to a type from another isolate, so supposedly not an issue. This assumption (no mutually suspicious code in the same isolate) is suspect but it seems there is nothing to be done at this point.
-%If libs are first class, they get created dynamically in order, and new libs might modify the type relations among other libs types - but then it is clear when that happened and order is ok.
-%}
-
-%It is a compile-time error if a type $T$ appears more than once in the implements or eextends clause of  an interface  injection.
-
-
 \section{Metadata}
 \LMLabel{metadata}
 
@@ -2491,38 +2716,43 @@
 Dart supports metadata which is used to attach user defined annotations to program structures.
 
 \begin{grammar}
-{\bf metadata:}
-      (`@' qualified ({\escapegrammar `.'} identifier)? (arguments)?)*
-    .
+{\bf metadata:}(`@' qualified ({\escapegrammar `.'} identifier)? (arguments)?)*
+  .
 \end{grammar}
 
 \LMHash{}
-Metadata consists of a series of annotations, each of which begin with the character @, followed by  a constant expression that starts with an identifier. It is a compile-time error if the expression is not one of the following:
+Metadata consists of a series of annotations, each of which begin with the character @, followed by a constant expression that starts with an identifier.
+It is a compile-time error if the expression is not one of the following:
 \begin{itemize}
 \item A reference to a compile-time constant variable.
 \item A call to a constant constructor.
 \end{itemize}
 
 \LMHash{}
-Metadata is associated with the abstract syntax tree of the program construct $p$ that immediately follows the metadata, assuming $p$ is not itself metadata or a comment. Metadata can be retrieved at run time via a reflective call, provided the annotated program construct $p$ is accessible via reflection.
+Metadata is associated with the abstract syntax tree of the program construct $p$ that immediately follows the metadata, assuming $p$ is not itself metadata or a comment.
+Metadata can be retrieved at run time via a reflective call, provided the annotated program construct $p$ is accessible via reflection.
 
 \commentary{
-Obviously, metadata can also be retrieved statically by parsing the program and evaluating the constants via a suitable interpreter. In fact many if not most uses of metadata are entirely static.
+Obviously, metadata can also be retrieved statically by parsing the program and evaluating the constants via a suitable interpreter.
+In fact many if not most uses of metadata are entirely static.
 }
 
 \rationale{
-It is important that no run-time overhead be incurred by the introduction of metadata that is not actually used. Because metadata only involves constants, the time at which it is computed is irrelevant so that implementations may skip the metadata during ordinary parsing and execution and evaluate it lazily.
+It is important that no run-time overhead be incurred by the introduction of metadata that is not actually used.
+Because metadata only involves constants, the time at which it is computed is irrelevant so that implementations may skip the metadata during ordinary parsing and execution and evaluate it lazily.
 }
 
 \commentary{
-It is possible to associate metadata with constructs that may not be accessible via reflection, such as local variables (though it is conceivable that in the future, richer reflective libraries might provide access to these as well).  This is not as useless as it might seem. As noted above, the data can be retrieved statically if source code is available.
+It is possible to associate metadata with constructs that may not be accessible via reflection, such as local variables (though it is conceivable that in the future, richer reflective libraries might provide access to these as well).
+This is not as useless as it might seem.
+As noted above, the data can be retrieved statically if source code is available.
 }
 
 \LMHash{}
 Metadata can appear before a library, part header, class, typedef, type parameter, constructor, factory, function, parameter, or variable declaration and before an import, export or part directive.
 
 \LMHash{}
-The constant expression given in an annotation  is type checked and evaluated in the scope surrounding the declaration being annotated.
+The constant expression given in an annotation is type checked and evaluated in the scope surrounding the declaration being annotated.
 
 
 \section{Expressions}
@@ -2545,74 +2775,77 @@
 the evaluation of $e$ stops at that point and throws the same exception object and stack trace.
 
 \begin{grammar}
-
 {\bf expression:}assignableExpression assignmentOperator expression;
-       conditionalExpression cascadeSection*;
-       throwExpression
-    .
+  conditionalExpression cascadeSection*;
+  throwExpression
+  .
 
+{\bf expressionWithoutCascade:}assignableExpression assignmentOperator
+  \gnewline{} expressionWithoutCascade;
+  conditionalExpression;
+  throwExpressionWithoutCascade
+  .
 
-{\bf expressionWithoutCascade:}assignableExpression assignmentOperator expressionWithoutCascade;
-      conditionalExpression;
-      throwExpressionWithoutCascade
-    .
-
-{\bf expressionList:}
-      expression (`,' expression)* %should these be top level expressions?
-    .
+{\bf expressionList:}expression (\gcomma{} expression)*
+  .
 \end{grammar}
 
 \begin{grammar}
 {\bf primary:}thisExpression;
-      \SUPER{} unconditionalAssignableSelector;
-      functionExpression;
-      literal;
-      identifier;
-      newExpression;
-      constObjectExpression;
-      `(' expression `)'
-    .
-
+  \SUPER{} unconditionalAssignableSelector;
+  functionExpression;
+  literal;
+  identifier;
+  newExpression;
+  constObjectExpression;
+  `(' expression `)'
+  .
 \end{grammar}
 
 \LMHash{}
 An expression $e$ may always be enclosed in parentheses, but this never has any semantic effect on $e$.
 
 \commentary{
-Sadly, it may have an effect on the surrounding expression. Given a class $C$ with static method $m => 42$, $C.m()$ returns 42, but $(C).m()$ produces a \code{NoSuchMethodError}.  This anomaly can be corrected by removing the restrictions on calling the members of instances of \code{Type}. This issue may be addressed in future versions of Dart.
+Sadly, it may have an effect on the surrounding expression.
+Given a class $C$ with static method $m => 42$, $C.m()$ returns 42, but $(C).m()$ produces a \code{NoSuchMethodError}.
+This anomaly can be corrected by removing the restrictions on calling the members of instances of \code{Type}.
+This issue may be addressed in future versions of Dart.
 }
 
- \subsubsection{Object Identity}
- \LMLabel{objectIdentity}
+
+\subsubsection{Object Identity}
+\LMLabel{objectIdentity}
 
 \LMHash{}
-The predefined Dart function \cd{identical()} is defined such that \code{identical($c_1$, $c_2$)} iff:
- \begin{itemize}
- \item $c_1$  evaluates to either the null object (\ref{null}) or an instance of \code{bool} and \code{$c_1$ == $c_2$}, OR
- \item $c_1$ and $c_2$ are instances of \code{int} and \code{$c_1$ == $c_2$}, OR
- \item $c_1$ and $c_2$ are constant strings and \code{$c_1$ == $c_2$}, OR
- \item $c_1$  and $c_2$  are instances of \cd{double} and  one of the following holds:
- \begin{itemize}
-   \item $c_1$ and $c_2$ are non-zero and \code{$c_1$ == $c_2$}.
-   \item  Both $c_1$ and $c_2$ are $+0.0$.
-   \item Both  $c_1$ and $c_2$ are $-0.0$.
-   \item Both $c_1$ and $c_2$ represent a NaN value with the same underlying bit pattern.
- \end{itemize}
+The predefined Dart function \code{identical()} is defined such that \code{identical($c_1$, $c_2$)} if{}f:
+\begin{itemize}
+\item $c_1$ evaluates to either the null object (\ref{null}) or an instance of \code{bool} and \code{$c_1$ == $c_2$}, OR
+\item $c_1$ and $c_2$ are instances of \code{int} and \code{$c_1$ == $c_2$}, OR
+\item $c_1$ and $c_2$ are constant strings and \code{$c_1$ == $c_2$}, OR
+\item $c_1$ and $c_2$ are instances of \code{double} and one of the following holds:
+  \begin{itemize}
+  \item $c_1$ and $c_2$ are non-zero and \code{$c_1$ == $c_2$}.
+  \item Both $c_1$ and $c_2$ are $+0.0$.
+  \item Both $c_1$ and $c_2$ are $-0.0$.
+  \item Both $c_1$ and $c_2$ represent a NaN value with the same underlying bit pattern.
+  \end{itemize}
  OR
- \item $c_1$ and $c_2$ are constant lists that are defined to be identical in the specification of literal list expressions (\ref{lists}), OR
- \item $c_1$ and $c_2$ are constant maps that are defined to be identical in the specification of literal map expressions (\ref{maps}), OR
- \item $c_1$ and $c_2$ are constant objects of the same class $C$ and the value of each instance variable of $c_1$ is identical to the value of the corresponding instance variable of $c_2$. OR
- \item $c_1$ and $c_2$ are the same object.
+\item $c_1$ and $c_2$ are constant lists that are defined to be identical in the specification of literal list expressions (\ref{lists}), OR
+\item $c_1$ and $c_2$ are constant maps that are defined to be identical in the specification of literal map expressions (\ref{maps}), OR
+\item $c_1$ and $c_2$ are constant objects of the same class $C$ and the value of each instance variable of $c_1$ is identical to the value of the corresponding instance variable of $c_2$. OR
+\item $c_1$ and $c_2$ are the same object.
 \end{itemize}
 
 \commentary{
-The definition of \cd{identity} for doubles differs from that of equality in that a NaN is identical to itself, and that negative and positive zero are distinct.
+The definition of \code{identity} for doubles differs from that of equality in that a NaN is identical to itself, and that negative and positive zero are distinct.
 }
 
 \rationale{
-The definition of equality for doubles is dictated by the IEEE 754 standard, which posits that NaNs do not obey the law of reflexivity.  Given that hardware implements these rules, it is necessary to support them for reasons of efficiency.
+The definition of equality for doubles is dictated by the IEEE 754 standard, which posits that NaNs do not obey the law of reflexivity.
+Given that hardware implements these rules, it is necessary to support them for reasons of efficiency.
 
-The definition of identity is not constrained in the same way. Instead, it assumes that bit-identical doubles are identical.
+The definition of identity is not constrained in the same way.
+Instead, it assumes that bit-identical doubles are identical.
 
 The rules for identity make it impossible for a Dart programmer to observe whether a boolean or numerical value is boxed or unboxed.
 }
@@ -2629,28 +2862,34 @@
 \begin{itemize}
 \item A literal number (\ref{numbers}).
 \item A literal boolean (\ref{booleans}).
-\item A literal string (\ref{strings}) where any interpolated expression  (\ref{stringInterpolation}) is a compile-time constant that evaluates to a numeric, string or boolean value or to the null object (\ref{null}).
-\rationale{It would be tempting to allow string interpolation where the interpolated value is any compile-time constant.  However, this would require running the \code{toString()} method for constant objects, which could contain arbitrary code.}
+\item A literal string (\ref{strings}) where any interpolated expression (\ref{stringInterpolation}) is a compile-time constant that evaluates to a numeric, string or boolean value or to the null object (\ref{null}).
+\rationale{
+It would be tempting to allow string interpolation where the interpolated value is any compile-time constant.
+However, this would require running the \code{toString()} method for constant objects, which could contain arbitrary code.
+}
 \item A literal symbol (\ref{symbols}).
 \item \NULL{} (\ref{null}).
 \item A qualified reference to a static constant variable (\ref{variables}) that is not qualified by a deferred prefix.
-\commentary {For example, If class C declares a constant static variable v, C.v is a constant. The same is true if C is accessed via a prefix p; p.C.v is a constant  unless p is a deferred prefix.
+\commentary{
+For example, If class C declares a constant static variable v, C.v is a constant.
+The same is true if C is accessed via a prefix p; p.C.v is a constant unless p is a deferred prefix.
 }
 \item An identifier expression that denotes a constant variable.
 \item A simple or qualified identifier denoting a class or type alias that is not qualified by a deferred prefix.
-\commentary {For example, If C is a class or typedef, C is a constant, and if C is imported with a prefix p, p.C is a constant unless p is a deferred prefix.
+\commentary{
+For example, If C is a class or typedef, C is a constant, and if C is imported with a prefix p, p.C is a constant unless p is a deferred prefix.
 }
 \item A constant constructor invocation (\ref{const}) that is not qualified by a deferred prefix.
 \item A constant list literal (\ref{lists}).
 \item A constant map literal (\ref{maps}).
 \item A simple or qualified identifier denoting a top-level function (\ref{functions}) or a static method (\ref{staticMethods}) that is not qualified by a deferred prefix.
 \item A parenthesized expression \code{($e$)} where $e$ is a constant expression.
-\item An expression of the form \code{identical($e_1$, $e_2$)} where $e_1$ and $e_2$ are constant expressions  and \code{identical()} is statically bound to the predefined dart function   \code{identical()} discussed above (\ref{objectIdentity}).
-\item An expression of one of the forms  \code{$e_1$ == $e_2$} or  \code{$e_1$ != $e_2$} where $e_1$ and $e_2$ are constant expressions, and either both evaluate to a numeric, string or boolean value, or at least one of $e_1$ or $e_2$ evaluates to the null object (\ref{null}).
-\item An expression of one of the forms \code{!$e$}, \code{$e_1$ \&\& $e_2$} or \code{$e_1 || e_2$}, where  $e$, $e_1$ and $e_2$ are constant expressions that evaluate to a boolean value.
-\item An expression of one of the forms \~{}$e$, $e_1$ \^{} $e_2$, \code{$e_1$ \& $e_2$}, $e_1 | e_2$, $e_1 << e_2$, $e_1 >> e_2$ or $e_1 >>> e_2$, where  $e$, $e_1$ and $e_2$ are constant expressions that evaluate to an integer value or to the null object (\ref{null}).
+\item An expression of the form \code{identical($e_1$, $e_2$)} where $e_1$ and $e_2$ are constant expressions and \code{identical()} is statically bound to the predefined dart function \code{identical()} discussed above (\ref{objectIdentity}).
+\item An expression of one of the forms \code{$e_1$ == $e_2$} or \code{$e_1$ != $e_2$} where $e_1$ and $e_2$ are constant expressions, and either both evaluate to a numeric, string or boolean value, or at least one of $e_1$ or $e_2$ evaluates to the null object (\ref{null}).
+\item An expression of one of the forms \code{!$e$}, \code{$e_1$ \&\& $e_2$} or \code{$e_1 || e_2$}, where $e$, $e_1$ and $e_2$ are constant expressions that evaluate to a boolean value.
+\item An expression of one of the forms \~{}$e$, $e_1$ \^{} $e_2$, \code{$e_1$ \& $e_2$}, $e_1 | e_2$, $e_1 << e_2$, $e_1 >> e_2$ or $e_1 >>> e_2$, where $e$, $e_1$ and $e_2$ are constant expressions that evaluate to an integer value or to the null object (\ref{null}).
 \item An expression of the form \code{$e_1 + e_2$} where $e_1$ and $e_2$ are constant expressions that evaluate to a numeric or string value or to the null object (\ref{null}).
-\item An expression of one of the forms \code{$-e$}, \code{$e_1$ - $e_2$}, \code{$e_1$ * $e_2$}, \code{$e_1$ / $e_2$,} \code{$e_1$ \~{}/ $e_2$},  \code{$e_1  >  e_2$}, \code{$e_1  <  e_2$}, \code{$e_1$ >= $e_2$}, \code{$e_1$ <= $e_2$} or \code{$e_1$ \% $e_2$},  where $e$, $e_1$ and $e_2$ are constant expressions that evaluate to a numeric value or to the null object (\ref{null}).
+\item An expression of one of the forms \code{$-e$}, \code{$e_1$ - $e_2$}, \code{$e_1$ * $e_2$}, \code{$e_1$ / $e_2$,} \code{$e_1$ \~{}/ $e_2$}, \code{$e_1 > e_2$}, \code{$e_1 < e_2$}, \code{$e_1$ >= $e_2$}, \code{$e_1$ <= $e_2$} or \code{$e_1$ \% $e_2$}, where $e$, $e_1$ and $e_2$ are constant expressions that evaluate to a numeric value or to the null object (\ref{null}).
 \item An expression of the form \code{$e_1$?$e_2$:$e3$} where $e_1$, $e_2$ and $e_3$ are constant expressions and $e_1$ evaluates to a boolean value.
 \item An expression of the form \code{$e_1 ?? e_2$} where $e_1$ and $e_2$ are constant expressions.
 \item An expression of the form \code{$e$.length} where $e$ is a constant expression that evaluates to a string value.
@@ -2666,9 +2905,12 @@
 
 % so, checked mode? analyzers? editor/development compilers?
 \commentary{
-Note that there is no requirement that every constant expression evaluate correctly. Only when a constant expression is required (e.g., to initialize a constant variable, or as a default value of a formal parameter, or as metadata) do we insist that a constant expression actually be evaluated successfully at compile time.
+Note that there is no requirement that every constant expression evaluate correctly.
+Only when a constant expression is required (e.g., to initialize a constant variable, or as a default value of a formal parameter, or as metadata) do we insist that a constant expression actually be evaluated successfully at compile time.
 
-The above is not dependent on program control-flow. The mere presence of a required compile-time constant whose evaluation would fail within a program is an error.  This also holds recursively: since compound constants are composed out of constants, if any subpart of a constant would throw an exception when evaluated, that is an error.
+The above is not dependent on program control-flow.
+The mere presence of a required compile-time constant whose evaluation would fail within a program is an error.
+This also holds recursively: since compound constants are composed out of constants, if any subpart of a constant would throw an exception when evaluated, that is an error.
 
 On the other hand, since implementations are free to compile code late, some compile-time errors may manifest quite late.
 }
@@ -2691,27 +2933,40 @@
 \}
 \end{dartCode}
 
-\commentary{An implementation is free to immediately issue a compilation error for  \code{x}, but it is not required to do so.  It could defer errors if it does not immediately compile the declarations that reference \code{x}. For example, it could delay giving a compilation error about the method \code{m1} until the first invocation of \code{m1}. However, it could not choose to execute \code{m1},  see that the branch that refers to \code{x} is not taken and return 2 successfully.
+\commentary{
+An implementation is free to immediately issue a compilation error for \code{x}, but it is not required to do so.
+It could defer errors if it does not immediately compile the declarations that reference \code{x}.
+For example, it could delay giving a compilation error about the method \code{m1} until the first invocation of \code{m1}.
+However, it could not choose to execute \code{m1}, see that the branch that refers to \code{x} is not taken and return 2 successfully.
 
-The situation with respect to an invocation \code{m2} is different. Because \code{y} is not a compile-time constant (even though its value is), one need not give a compile-time error upon compiling \code{m2}. An implementation may run the code, which will cause  the getter for \code{y} to be invoked. At that point, the initialization of \code{y} must take place, which requires the initializer to be compiled, which will cause a compilation error.
+The situation with respect to an invocation \code{m2} is different.
+Because \code{y} is not a compile-time constant (even though its value is), one need not give a compile-time error upon compiling \code{m2}.
+An implementation may run the code, which will cause the getter for \code{y} to be invoked.
+At that point, the initialization of \code{y} must take place, which requires the initializer to be compiled, which will cause a compilation error.
 }
 
 \rationale{
-The treatment of \code{\NULL{}} merits some discussion. Consider \code{\NULL{} + 2}.  This expression always causes an error. We could have chosen not to treat it as a constant expression (and in general, not to allow \code{\NULL{}} as a subexpression of numeric or boolean constant expressions).  There are two arguments for including it:
+The treatment of \code{\NULL{}} merits some discussion.
+Consider \code{\NULL{} + 2}.
+This expression always causes an error.
+We could have chosen not to treat it as a constant expression (and in general, not to allow \code{\NULL{}} as a subexpression of numeric or boolean constant expressions).
+There are two arguments for including it:
 \begin{enumerate}
-\item It is constant. We can evaluate it at compile time.
+\item It is constant.
+We can evaluate it at compile time.
 \item It seems more useful to give the error stemming from the evaluation explicitly.
 \end{enumerate}
 }
 
-\rationale {
-One might reasonably ask why $e_1? e_1: e_3$ and $e_1?? e_2$ have constant forms. For example, if $e_1$ is known statically, why do we need to test it?.
-The answer is that there are contexts where $e_1$ is a variable. In particular, constant constructor initializers such as
+\rationale{
+One might reasonably ask why $e_1? e_1: e_3$ and $e_1?? e_2$ have constant forms.
+For example, if $e_1$ is known statically, why do we need to test it?.
+The answer is that there are contexts where $e_1$ is a variable.
+In particular, constant constructor initializers such as
 
 \code{\CONST{} C(foo) : \THIS.foo = foo ?? someDefaultValue;}
 }
 
-
 \LMHash{}
 It is a compile-time error if the value of a compile-time constant expression depends on itself.
 
@@ -2727,18 +2982,16 @@
 \}
 \end{dartCode}
 
-
 \begin{grammar}
 {\bf literal:}nullLiteral;
-      booleanLiteral;
-      numericLiteral;
-      stringLiteral;
-      symbolLiteral;
-      mapLiteral;
-      listLiteral
-    .
- \end{grammar}
-
+  booleanLiteral;
+  numericLiteral;
+  stringLiteral;
+  symbolLiteral;
+  mapLiteral;
+  listLiteral
+  .
+\end{grammar}
 
 
 \subsection{Null}
@@ -2746,16 +2999,16 @@
 
 \LMHash{}
 The reserved word \NULL{} evaluates to the {\em null object}.
-%\Q{Any methods, such as \code{isNull}?}
 
 \begin{grammar}
-{\bf nullLiteral:}
-      \NULL{}
-.
+{\bf nullLiteral:}\NULL{}
+  .
 \end{grammar}
 
 \LMHash{}
-The null object is the sole instance of the built-in class \code{Null}. Attempting to instantiate \code{Null} causes a run-time error. It is a compile-time error for a class to extend, mix in or implement \code{Null}.
+The null object is the sole instance of the built-in class \code{Null}.
+Attempting to instantiate \code{Null} causes a run-time error.
+It is a compile-time error for a class to extend, mix in or implement \code{Null}.
 The \code{Null} class extends the \code{Object} class and declares no methods except those also declared by \code{Object}.
 
 \LMHash{}
@@ -2770,26 +3023,25 @@
 
 \begin{grammar}
 {\bf numericLiteral:}NUMBER;
-      HEX\_NUMBER
-    .
+  HEX\_NUMBER
+  .
 
-  {\bf NUMBER:} DIGIT+ (`{\escapegrammar.}' DIGIT+)? EXPONENT?;
-      {`\escapegrammar .}' DIGIT+ EXPONENT?
-    .
+{\bf NUMBER:}DIGIT+ (`{\escapegrammar.}' DIGIT+)? EXPONENT?;
+  {`\escapegrammar .}' DIGIT+ EXPONENT?
+  .
 
-{\bf  EXPONENT:}
-      (`e' $|$ `E') ('+' $|$ `-`)? DIGIT+
-    .
+{\bf EXPONENT:}(`e' $|$ `E') ('+' $|$ `-`)? DIGIT+
+  .
 
 {\bf HEX\_NUMBER:}`0x' HEX\_DIGIT+;
-      `0X' HEX\_DIGIT+
-    .
+  `0X' HEX\_DIGIT+
+  .
 
- {\bf HEX\_DIGIT:}`a'{\escapegrammar ..}'f';
-      `A'{\escapegrammar ..}'F';
-      DIGIT
-    .
- \end{grammar}
+{\bf HEX\_DIGIT:}`a'{\escapegrammar ..}'f';
+  `A'{\escapegrammar ..}'F';
+  DIGIT
+  .
+\end{grammar}
 
 \LMHash{}
 If a numeric literal begins with the prefix `0x' or `0X',
@@ -2805,10 +3057,13 @@
 as specified by the IEEE 754 standard.
 
 \LMHash{}
-In principle, the range of integers supported by a Dart implementations is unlimited. In practice, it is limited by available memory. Implementations may also be limited by other considerations.
+In principle, the range of integers supported by a Dart implementations is unlimited.
+In practice, it is limited by available memory.
+Implementations may also be limited by other considerations.
 
 \commentary{
-For example, implementations may choose to limit the range to facilitate efficient compilation to Javascript. These limitations should be relaxed as soon as technologically feasible.
+For example, implementations may choose to limit the range to facilitate efficient compilation to Javascript.
+These limitations should be relaxed as soon as technologically feasible.
 }
 
 \LMHash{}
@@ -2817,11 +3072,13 @@
 It is a compile-time error for any class other than \code{int} and \code{double} to extend, mix in or implement \code{num}.
 
 \LMHash{}
-An {\em integer literal} is either a hexadecimal integer literal or a  decimal integer literal.
+An {\em integer literal} is either a hexadecimal integer literal or a decimal integer literal.
 The static type of an integer literal is \code{int}.
 
 \LMHash{}
-A {\em literal double} is a numeric literal that is not an integer literal. The static type of a literal double is \code{double}.
+A {\em literal double} is a numeric literal that is not an integer literal.
+The static type of a literal double is \code{double}.
+
 
 \subsection{Booleans}
 \LMLabel{booleans}
@@ -2832,8 +3089,8 @@
 
 \begin{grammar}
 {\bf booleanLiteral:}\TRUE{};
-        \FALSE{}
-    .
+  \FALSE{}
+  .
 \end{grammar}
 
 \LMHash{}
@@ -2842,13 +3099,16 @@
 It is a compile-time error for a class to extend, mix in or implement \code{bool}.
 
 \LMHash{}
-Invoking the getter \code{runtimeType} on a boolean value returns the \code{Type} object that is the value of the expression \code{bool}. The static type of a boolean literal is \code{bool}.
+Invoking the getter \code{runtimeType} on a boolean value returns the \code{Type} object that is the value of the expression \code{bool}.
+The static type of a boolean literal is \code{bool}.
+
 
 \subsubsection{Boolean Conversion}
 \LMLabel{booleanConversion}
 
 \LMHash{}
-{\em Boolean conversion} maps any object $o$ into a boolean. Boolean conversion is  defined by the function application
+{\em Boolean conversion} maps any object $o$ into a boolean.
+Boolean conversion is defined by the function application
 
 \begin{dartCode}
 (bool v)\{
@@ -2859,15 +3119,28 @@
 \end{dartCode}
 
 \rationale{
-Boolean conversion is used as part of control-flow constructs and boolean expressions.  Ideally, one would simply insist that control-flow decisions be based exclusively on booleans.  This is straightforward in a statically typed setting. In a dynamically typed language, it requires a dynamic check. Sophisticated virtual machines can minimize the penalty involved. Alas, Dart must be compiled into Javascript. Boolean conversion allows this to be done efficiently.
+Boolean conversion is used as part of control-flow constructs and boolean expressions.
+Ideally, one would simply insist that control-flow decisions be based exclusively on booleans.
+This is straightforward in a statically typed setting.
+In a dynamically typed language, it requires a dynamic check.
+Sophisticated virtual machines can minimize the penalty involved.
+Alas, Dart must be compiled into Javascript.
+Boolean conversion allows this to be done efficiently.
 
-At the same time, this formulation differs radically from Javascript, where most numbers and objects are interpreted as \TRUE{}.  Dart's approach prevents usages such \code{\IF{} (a-b) ... ; }because it does not agree with the low level conventions whereby non-null objects or non-zero numbers are treated as \TRUE{}. Indeed, there is no way to derive \TRUE{} from a non-boolean object via boolean conversion, so this kind of low level hackery is nipped in the bud.
+At the same time, this formulation differs radically from Javascript, where most numbers and objects are interpreted as \TRUE{}.
+Dart's approach prevents usages such \code{\IF{} (a-b) ... ; }because it does not agree with the low level conventions whereby non-null objects or non-zero numbers are treated as \TRUE{}.
+Indeed, there is no way to derive \TRUE{} from a non-boolean object via boolean conversion, so this kind of low level hackery is nipped in the bud.
 
-Dart also avoids the strange behaviors that can arise due to the interaction of boolean conversion with autoboxing in Javascript. A notorious example is the situation where \FALSE{} can be interpreted as \TRUE{}. In Javascript, booleans are not objects, and instead are autoboxed into objects where ``needed''.  If \FALSE{} gets autoboxed into an object, that object can be coerced into \TRUE{} (as it is a non-null object).
+Dart also avoids the strange behaviors that can arise due to the interaction of boolean conversion with autoboxing in Javascript.
+A notorious example is the situation where \FALSE{} can be interpreted as \TRUE{}.
+In Javascript, booleans are not objects, and instead are autoboxed into objects where ``needed''.
+If \FALSE{} gets autoboxed into an object, that object can be coerced into \TRUE{} (as it is a non-null object).
 }
 
-\commentary{Because boolean conversion requires its parameter to be a boolean, any construct that makes use of boolean conversion will cause a dynamic type error in checked mode if the value to be converted is not a boolean.
- }
+\commentary{
+Because boolean conversion requires its parameter to be a boolean, any construct that makes use of boolean conversion will cause a dynamic type error in checked mode if the value to be converted is not a boolean.
+}
+
 
 \subsection{Strings}
 \LMLabel{strings}
@@ -2876,48 +3149,56 @@
 A {\em string} is a sequence of UTF-16 code units.
 
 \rationale{
-This decision was made for compatibility with web browsers and Javascript. Earlier versions of the specification required a string to be a sequence of valid Unicode code points.  Programmers should not depend on this distinction.
+This decision was made for compatibility with web browsers and Javascript.
+Earlier versions of the specification required a string to be a sequence of valid Unicode code points.
+Programmers should not depend on this distinction.
 }
 
 \begin{grammar}
 {\bf stringLiteral:}(multilineString $|$ singleLineString)+
-    .
+  .
 \end{grammar}
 
 \LMHash{}
 A string can be a sequence of single line strings and multiline strings.
 
 \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{"}}'
-    .
+{\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{"}}'
+  .
 \end{grammar}
 
 \LMHash{}
 A single line string is delimited by either matching single quotes or matching double quotes.
 
 \commentary{
-Hence, `abc' and ``abc'' are both legal strings, as are `He said ``To be or not to be'' did he not?'  and ``He said `To be or not to be' didn't he''. However  ``This ` is not a valid string, nor is `this''.
+Hence, `abc' and ``abc'' are both legal strings, as are `He said ``To be or not to be'' did he not?' and ``He said `To be or not to be' didn't he''.
+However ``This ` is not a valid string, nor is `this''.
 }
 
-\commentary{The grammar ensures that a single line string cannot span more than one line of source code, unless it includes an interpolated expression that spans multiple lines.
+\commentary{
+The grammar ensures that a single line string cannot span more than one line of source code, unless it includes an interpolated expression that spans multiple lines.
 }
 
 \LMHash{}
 Adjacent strings are implicitly concatenated to form a single string literal.
 
-
-\commentary{Here is an example}
+\commentary{
+Here is an example
+}
 
 \begin{dartCode}
 print("A string" "and then another"); // prints: A stringand then another
 \end{dartCode}
 
-\rationale{Dart also supports the operator + for string concatenation.
+\rationale{
+Dart also supports the operator + for string concatenation.
 
-The + operator on Strings requires a String argument. It does not coerce its argument into a string. This helps avoid puzzlers such as
+The + operator on Strings requires a String argument.
+It does not coerce its argument into a string.
+This helps avoid puzzlers such as
 }
 
 \begin{dartCode}
@@ -2925,19 +3206,22 @@
             2 + 2);
 \end{dartCode}
 
-\rationale{ which this prints  'A simple sum: 2 + 2 = 22' rather than 'A simple sum: 2 + 2 = 4'.
-However, the use of the concatenation operation is still discouraged for efficiency reasons. Instead, the recommended Dart idiom is to use string interpolation.
+\rationale{
+which this prints 'A simple sum: 2 + 2 = 22' rather than 'A simple sum: 2 + 2 = 4'.
+However, the use of the concatenation operation is still discouraged for efficiency reasons.
+Instead, the recommended Dart idiom is to use string interpolation.
 }
 
 \begin{dartCode}
-print("A simple sum: 2 + 2 =  \$\{2+2\}");
+print("A simple sum: 2 + 2 = \$\{2+2\}");
 \end{dartCode}
 
-
-\rationale{String interpolation works well for most cases. The main situation where it is not fully satisfactory is for string literals that are too large to fit on a line. Multiline strings can be useful, but in some cases, we want to visually align the code. This can be expressed by writing smaller strings separated by whitespace, as shown here:}
-
-
-
+\rationale{
+String interpolation works well for most cases.
+The main situation where it is not fully satisfactory is for string literals that are too large to fit on a line.
+Multiline strings can be useful, but in some cases, we want to visually align the code.
+This can be expressed by writing smaller strings separated by whitespace, as shown here:
+}
 
 \begin{dartCode}
 'Imagine this is a very long string that does not fit on a line. What shall we do? '
@@ -2946,63 +3230,61 @@
 'like so'.
 \end{dartCode}
 
-
-
-
-
 \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{'}}'
+{\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{'}}'
   .
 
-
-  {\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? HEX\_DIGIT? HEX\_DIGIT? HEX\_DIGIT?
-    .
-
+{\bf HEX\_DIGIT\_SEQUENCE:}HEX\_DIGIT HEX\_DIGIT? HEX\_DIGIT?
+  \gnewline{} HEX\_DIGIT? HEX\_DIGIT? HEX\_DIGIT?
+  .
 \end{grammar}
 
 \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.
+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.
 
 \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. These can be represented directly, but since for most characters prefixing by backslash is an identity in a non-raw string, we allow those forms as well.
+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.
+These can be represented directly, but since for most characters prefixing by backslash is an identity in a non-raw string, we allow those forms as well.
 }
 
- % could be clearer. Is the first line in  """\t
+ % could be clearer. Is the first line in """\t
  %    """ ignored not. It depends if we mean whitespace before escapes are interpreted,
  % or after, or both.  See https://code.google.com/p/dart/issues/detail?id=23020
 
 \LMHash{}
-Strings support escape sequences for special characters. The escapes are:
+Strings support escape sequences for special characters.
+The escapes are:
 \begin{itemize}
 \item $\backslash$n for newline, equivalent to $\backslash$x0A.
 \item $\backslash$r for carriage return, equivalent to $\backslash$x0D.
 \item $\backslash$f for form feed, equivalent to $\backslash$x0C.
 \item $\backslash$b for backspace, equivalent to $\backslash$x08.
 \item $\backslash$t for tab, equivalent to $\backslash$x09.
-\item $\backslash$v for vertical tab, equivalent to $\backslash$x0B
+\item $\backslash$v for vertical tab, equivalent to $\backslash$x0B.
 \item $\backslash$x $HEX\_DIGIT_1$ $HEX\_DIGIT_2$, equivalent to
 
 $\backslash$u\{$HEX\_DIGIT_1$ $HEX\_DIGIT_2$\}.
 \item $\backslash$u $HEX\_DIGIT_1$ $HEX\_DIGIT_2$ $HEX\_DIGIT_3$ $HEX\_DIGIT_4$, equivalent to $\backslash$u\{$HEX\_DIGIT_1$ $HEX\_DIGIT_2$ $HEX\_DIGIT_3$ $HEX\_DIGIT_4$\}.
-\item $\backslash$u\{$HEX\_DIGIT\_SEQUENCE$\} is the Unicode code point represented by the $HEX\_DIGIT\_SEQUENCE$. It is a compile-time error if the value of the $HEX\_DIGIT\_SEQUENCE$ is not a valid Unicode code point.
+\item $\backslash$u\{$HEX\_DIGIT\_SEQUENCE$\} is the Unicode code point represented by the $HEX\_DIGIT\_SEQUENCE$.
+It is a compile-time error if the value of the $HEX\_DIGIT\_SEQUENCE$ is not a valid Unicode code point.
 \item \$ indicating the beginning of an interpolated expression.
 \item Otherwise, $\backslash k$ indicates the character $k$ for any $k$ not in $\{n, r, f, b, t, v, x, u\}$.
- \end{itemize}
+\end{itemize}
 
 \LMHash{}
 Any string may be prefixed with the character `r', indicating that it is a {\em raw string}, in which case no escapes or interpolations are recognized.
@@ -3012,59 +3294,60 @@
 A line break introduces a single newline character into the string value.
 
 \LMHash{}
-It is a compile-time error if a non-raw string literal contains a character sequence of the form $\backslash$x that is not followed by a sequence of two hexadecimal digits. It is a compile-time error if a non-raw string literal  contains a character sequence of the form $\backslash$u that is not followed by either a sequence of four hexadecimal digits, or by curly brace delimited sequence of hexadecimal digits.
-
-
+It is a compile-time error if a non-raw string literal contains a character sequence of the form $\backslash$x that is not followed by a sequence of two hexadecimal digits.
+It is a compile-time error if a non-raw string literal contains a character sequence of the form $\backslash$u that is not followed by either a sequence of four hexadecimal digits, or by curly brace delimited sequence of hexadecimal digits.
 
 \begin{grammar}
- {\bf stringContentDQ:}\~{}( `$\backslash$' $|$ `{\escapegrammar \texttt{"}}' $|$ `\$' $|$ NEWLINE );
-      `$\backslash$'  \~{}( NEWLINE );
-     stringInterpolation
-    .
+{\bf stringContentDQ:}\~{}( `$\backslash$' $|$ `{\escapegrammar \texttt{"}}' $|$ `\$' $|$ NEWLINE );
+  `$\backslash$' \~{}( NEWLINE );
+  stringInterpolation
+  .
 
- {\bf stringContentSQ:}\~{}( `$\backslash$' $|$ `{\escapegrammar \texttt{'}}' $|$ `\$' $|$ NEWLINE );
-      `$\backslash$'  \~{}( NEWLINE );
-     stringInterpolation
-    .
+{\bf stringContentSQ:}\~{}( `$\backslash$' $|$ `{\escapegrammar \texttt{'}}' $|$ `\$' $|$ NEWLINE );
+  `$\backslash$' \~{}( NEWLINE );
+  stringInterpolation
+  .
 
+{\bf stringContentTDQ:}\~{}( `$\backslash$' $|$ `{\escapegrammar \texttt{"""}}' $|$ `\$');
+  stringInterpolation
+  .
 
- {\bf stringContentTDQ:}\~{}( `$\backslash$' $|$  `{\escapegrammar \texttt{"""}}' $|$ `\$');
-     stringInterpolation
-    .
-
- {\bf stringContentTSQ:}\~{}( `$\backslash$' $|$ `{\escapegrammar \code{'}\code{'}\code{'}}' $|$ `\$');
-     stringInterpolation
-    .
+{\bf stringContentTSQ:}\~{}( `$\backslash$' $|$ `{\escapegrammar \code{'}\code{'}\code{'}}' $|$ `\$');
+  stringInterpolation
+  .
 
 {\bf NEWLINE:}$\backslash$ n;
-      $\backslash$ r;
-      $\backslash$ r $\backslash$ n
-    .
-
- \end{grammar}
+  $\backslash$ r;
+  $\backslash$ r $\backslash$ n
+  .
+\end{grammar}
 
 \LMHash{}
 All string literals evaluate to instances of the built-in class \code{String}.
 It is a compile-time error for a class to extend, mix in or implement \code{String}.
 The static type of a string literal is \code{String}.
 
+
 \subsubsection{String Interpolation}
 \LMLabel{stringInterpolation}
 
 \LMHash{}
-It is possible to embed expressions within non-raw string literals, such that these expressions are evaluated, and the resulting values are converted into strings and concatenated with the enclosing string. This process is known as {\em string interpolation}.
+It is possible to embed expressions within non-raw string literals, such that these expressions are evaluated, and the resulting values are converted into strings and concatenated with the enclosing string.
+This process is known as {\em string interpolation}.
 
- \begin{grammar}
+\begin{grammar}
 {\bf stringInterpolation:}`\$' IDENTIFIER\_NO\_DOLLAR;
-      `\$' `\{' expression `\}' % could be top level expression, no?
-    .
- \end{grammar}
+  `\$' `\{' expression `\}'
+  .
+\end{grammar}
 
-\commentary{The reader will note that the expression inside the interpolation could itself include strings, which could again be interpolated recursively.
+\commentary{
+The reader will note that the expression inside the interpolation could itself include strings, which could again be interpolated recursively.
 }
 
 \LMHash{}
-An unescaped \$ character in a string signifies the beginning of an interpolated expression.  The \$ sign may be followed by either:
+An unescaped \$ character in a string signifies the beginning of an interpolated expression.
+The \$ sign may be followed by either:
 \begin{itemize}
 \item A single identifier $id$ that must not contain the \$ character.
 \item An expression $e$ delimited by curly braces.
@@ -3077,11 +3360,12 @@
 \begin{itemize}
 \item{} Evaluate $e_i$ to an object $o_i$.
 \item{} Invoke the \code{toString} method on $o_i$ with no arguments, and let
-  $r_i$ be the returned value.
+ $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$.
 
+
 \subsection{Symbols}
 \LMLabel{symbols}
 
@@ -3089,25 +3373,35 @@
 A {\em symbol literal} denotes the name of a declaration in a Dart program.
 
 \begin{grammar}
-{\bf symbolLiteral:}
-      `\#'  (operator $|$ (identifier (`{\escapegrammar .}' identifier)*))  .
+{\bf symbolLiteral:}`\#' (operator $|$ (identifier (`{\escapegrammar .}' identifier)*))
+  .
 \end{grammar}
 
 \LMHash{}
-A symbol literal \code{\#$id$} where $id$ does not begin with an underscore ('\code{\_}')  is equivalent to the expression \code{\CONST{} Symbol('$id$')}.
+A symbol literal \code{\#$id$} where $id$ does not begin with an underscore ('\code{\_}') is equivalent to the expression \code{\CONST{} Symbol('$id$')}.
 
 \LMHash{}
 A symbol literal \code{\#\_$id$} evaluates to the object that would be returned by the call \code{MirrorSystem.getSymbol("\_$id$", \metavar{libraryMirror})} where \metavar{libraryMirror} is an instance of the class \code{LibraryMirror} defined in the library \code{dart:mirrors}, reflecting the current library.
 
 \rationale{
-One may well ask what is the motivation for introducing literal symbols? In some languages, symbols are canonicalized whereas strings are not. However literal strings are already canonicalized in Dart.  Symbols are slightly easier to type compared to strings and their use can become strangely addictive, but this is not nearly sufficient justification for adding a literal form to the language. The primary motivation is related to the use of reflection and a web specific practice known as minification.
+One may well ask what is the motivation for introducing literal symbols? In some languages, symbols are canonicalized whereas strings are not.
+However literal strings are already canonicalized in Dart.
+Symbols are slightly easier to type compared to strings and their use can become strangely addictive, but this is not nearly sufficient justification for adding a literal form to the language.
+The primary motivation is related to the use of reflection and a web specific practice known as minification.
 
-Minification compresses identifiers consistently throughout a program in order to reduce download size.  This practice poses difficulties for reflective programs that refer to program declarations via strings. A string will refer to an identifier in the source, but the identifier will no longer be used in the minified code, and reflective code using these would fail.  Therefore, Dart reflection uses  objects of type \code{Symbol} rather than strings. Instances of \code{Symbol} are guaranteed to be stable with repeat to minification. Providing a literal form for symbols makes reflective code easier to read and write. The fact that symbols are easy to type and can often act as convenient substitutes for enums are secondary benefits.
+Minification compresses identifiers consistently throughout a program in order to reduce download size.
+This practice poses difficulties for reflective programs that refer to program declarations via strings.
+A string will refer to an identifier in the source, but the identifier will no longer be used in the minified code, and reflective code using these would fail.
+Therefore, Dart reflection uses objects of type \code{Symbol} rather than strings.
+Instances of \code{Symbol} are guaranteed to be stable with repeat to minification.
+Providing a literal form for symbols makes reflective code easier to read and write.
+The fact that symbols are easy to type and can often act as convenient substitutes for enums are secondary benefits.
 }
 
 \LMHash{}
 The static type of a symbol literal is \code{Symbol}.
 
+
 \subsection{Lists}
 \LMLabel{lists}
 
@@ -3115,69 +3409,92 @@
 A {\em list literal} denotes a list, which is an integer indexed collection of objects.
 
 \begin{grammar}
-{\bf listLiteral:}
-     \CONST{}? typeArguments? `[' (expressionList `,'?)? `]'
-    .
+{\bf listLiteral:}\CONST{}? typeArguments? `[' (expressionList \gcomma{}?)? `]'
+  .
 \end{grammar}
 
 \LMHash{}
-A list may contain zero or more objects. 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. 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.
-
+A list may contain zero or more objects.
+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.
+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{}
-If a list literal begins with the reserved word \CONST{}, it is a {\em constant list literal} which is a compile-time constant (\ref{constants}) and therefore evaluated at compile time. Otherwise, it is a {\em run-time list literal} and it is evaluated at run time. Only run-time list literals can be mutated
-after they are created. Attempting to mutate a constant list literal will result in a dynamic error.
+If a list literal begins with the reserved word \CONST{}, it is a {\em constant list literal} which is a compile-time constant (\ref{constants}) and therefore evaluated at compile time.
+Otherwise, it is a {\em run-time list literal} and it is evaluated at run time.
+Only run-time list literals can be mutated
+after they are created.
+Attempting to mutate a constant list literal will result in a dynamic error.
 
 \LMHash{}
-It is a compile-time error if an element of a constant list literal is not a compile-time constant. It is a compile-time error if the type argument of a constant list literal includes a type parameter.
-\rationale{The binding of a type parameter is not known at compile time, so we cannot use type parameters inside compile-time constants.}
+It is a compile-time error if an element of a constant list literal is not a compile-time constant.
+It is a compile-time error if the type argument of a constant list literal includes a type parameter.
+\rationale{
+The binding of a type parameter is not known at compile time, so we cannot use type parameters inside compile-time constants.
+}
 
 \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 $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>[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]$.
 
 \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. Iff \code{identical($o_{1i}$, $o_{2i}$)} for $i \in 1.. n$ and $V = U$ then \code{identical($list_1$, $list_2$)}.
+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{In other words, constant list literals are canonicalized.}
+\commentary{
+In other words, constant list literals are canonicalized.
+}
 
 \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$.
-\item A fresh instance (\ref{generativeConstructors}) $a$, of size $n$,  whose class implements the built-in class $List<E>$ is allocated.
+\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
+The operator \code{[]=} is invoked on $a$ with first argument $i$ and second argument
 %The $i$th element of $a$ is set to
 $o_{i+1}, 0 \le i < n$.
 \item
 The result of the evaluation is $a$.
 \end{itemize}
 
-
 \commentary{
-Note that this document does not specify an order in which the elements are set. This allows for parallel assignments into the list if an implementation so desires.  The order can only be observed in checked mode (and may not be relied upon): if element $i$ is not a subtype of the element type of the list, a dynamic type error will occur when $a[i]$ is assigned $o_{i-1}$.
+Note that this document does not specify an order in which the elements are set.
+This allows for parallel assignments into the list if an implementation so desires.
+The order can only be observed in checked mode (and may not be relied upon): if element $i$ is not a subtype of the element type of the list, a dynamic type error will occur when $a[i]$ is assigned $o_{i-1}$.
 }
 
 \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. It follows from the rules above that
-$<List<int>>[[1, 2, 3], [4, 5, 6]]$ is a list with type parameter $List<int>$, containing two lists with type parameter  \DYNAMIC{}.
+There is no restriction precluding nesting of list literals.
+It follows from the rules above that
+$<List<int>>[[1, 2, 3], [4, 5, 6]]$
+is a list with type parameter $List<int>$, containing two lists with type parameter \DYNAMIC{}.
 }
 
 \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. However, for mutable lists this may be unwarranted. Even for constant lists, we found this behavior to be problematic. Since compile time is often actually run time, the run-time system must be able to perform a complex least upper bound computation to determine a reasonably precise type. It is better to leave this task to a tool in the IDE. It is also much more uniform (and therefore predictable and understandable) to insist that whenever types are unspecified they are assumed to be the unknown type  \DYNAMIC{}.
+It is tempting to assume that the type of the list literal would be computed based on the types of its elements.
+However, for mutable lists this may be unwarranted.
+Even for constant lists, we found this behavior to be problematic.
+Since compile time is often actually run time, the run-time system must be able to perform a complex least upper bound computation to determine a reasonably precise type.
+It is better to leave this task to a tool in the IDE.
+It is also much more uniform (and therefore predictable and understandable) to insist that whenever types are unspecified they are assumed to be the unknown type \DYNAMIC{}.
 }
 
 %Invoking the getter \code{runtimeType} on a list literal returns the \code{Type} object that is the value of the expression \code{List}. The static type of a list literal is \code{List}.
 % what about generics?
 
+
 \subsection{Maps}
 \LMLabel{maps}
 
@@ -3185,60 +3502,68 @@
 A {\em map literal} denotes a map object.
 
 \begin{grammar}
-{\bf mapLiteral:}
-      \CONST{}?  typeArguments? `\{' (mapLiteralEntry (`,' mapLiteralEntry)* `,'?)? `\}'
-    .
+{\bf mapLiteral:}\CONST{}? typeArguments?
+  \gnewline{} `\{' (mapLiteralEntry (\gcomma{} mapLiteralEntry)* \gcomma{}?)? `\}'
+  .
 
-{\bf mapLiteralEntry:}
-        % identifier `{\escapegrammar :}' expression;
-	expression `{\escapegrammar :}' expression
-    .
+{\bf mapLiteralEntry:}expression `{\escapegrammar :}' expression
+  .
 \end{grammar}
 
 \LMHash{}
-A {\em map literal} consists of zero or more entries. Each entry has a {\em key} and a {\em value}.  Each key and each value is denoted by an expression.
+A {\em map literal} consists of zero or more entries.
+Each entry has a {\em key} and a {\em value}.
+Each key and each value is denoted by an expression.
 
 \LMHash{}
-If a map literal begins with the reserved word \CONST{}, it is a {\em constant map literal} which is a compile-time constant (\ref{constants}) and therefore evaluated at compile time. Otherwise, it is a {\em run-time map literal} and it is evaluated at run time. Only run-time map literals can be mutated
-after they are created. Attempting to mutate a constant map literal will result in a dynamic error.
+If a map literal begins with the reserved word \CONST{}, it is a {\em constant map literal} which is a compile-time constant (\ref{constants}) and therefore evaluated at compile time.
+Otherwise, it is a {\em run-time map literal} and it is evaluated at run time.
+Only run-time map literals can be mutated after they are created.
+Attempting to mutate a constant map literal will result in a dynamic error.
 
 \LMHash{}
-It is a compile-time error if either a key or a value of an entry in a constant map literal is not a compile-time constant. It is a compile-time error if the key of an entry in a constant map literal is an instance of a class that implements the operator $==$ unless the key is a
+It is a compile-time error if either a key or a value of an entry in a constant map literal is not a compile-time constant.
+It is a compile-time error if the key of an entry in a constant map literal is an instance of a class that implements the operator $==$ unless the key is a
 %symbol,
-string, an integer, a literal symbol or the result of invoking a constant constructor of class \cd{Symbol}.
+string, an integer, a literal symbol or the result of invoking a constant constructor of class \code{Symbol}.
 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 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, 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\}$.
 
 \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. Iff \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$)}.
+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{In other words, constant map literals are canonicalized.}
+\commentary{
+In other words, constant map literals are canonicalized.
+}
 
 \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,
+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$.
-\item  A fresh instance (\ref{generativeConstructors}) $m$ whose class implements the built-in class $Map<K, V>$ is allocated.
+\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$.
+The operator \code{[]=} is invoked on $m$ with first argument $u_i$ and second argument $o_i$ for each $i \in 1 .. n$.
 \item
 The result of the evaluation is $m$.
 \end{itemize}
 
+\LMHash{}
+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\}$.
 
 \LMHash{}
-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\}$.
-
-\LMHash{}
-Iff 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.
+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.
 
 \LMHash{}
 A map literal is ordered: iterating over the keys and/or values of the maps always happens in the
@@ -3257,21 +3582,18 @@
 \LMLabel{throw}
 
 \LMHash{}
-The {\em throw expression}  is used to throw an exception.
+The {\em throw expression} is used to throw an exception.
 
- \begin{grammar}
-{\bf throwExpression:}
-     \THROW{} expression
-    .
+\begin{grammar}
+{\bf throwExpression:}\THROW{} expression
+  .
 
-   {\bf throwExpressionWithoutCascade:}
-     \THROW{} expressionWithoutCascade
-    .
-
- \end{grammar}
+{\bf throwExpressionWithoutCascade:}\THROW{} expressionWithoutCascade
+  .
+\end{grammar}
 
 \LMHash{}
-Evaluation of a throw expression of the form  \code{\THROW{} $e$;} proceeds as follows:
+Evaluation of a throw expression of the form \code{\THROW{} $e$;} proceeds as follows:
 
 \LMHash{}
 The expression $e$ is evaluated to a value $v$ (\ref{evaluation}).
@@ -3300,30 +3622,28 @@
 The static type of a throw expression is $\bot$.
 
 
-\subsection{ Function Expressions}
+\subsection{Function Expressions}
 \LMLabel{functionExpressions}
 
 \LMHash{}
 A {\em function literal} is an object that encapsulates an executable unit of code.
 
 \begin{grammar}
-{\bf functionExpression:}
-    formalParameterList functionBody
-    .
- \end{grammar}
+{\bf functionExpression:}formalParameterList functionBody
+  .
+\end{grammar}
 
 \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$
+$(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
 
 $(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$.
@@ -3332,38 +3652,25 @@
 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 Future<flatten(T_0)>$, where $T_0$ is the static type of $e$ and  $flatten(T)$ is defined as follows:
+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:
 
- If $T = Future<S>$ then $flatten(T) = flatten(S)$.
+If $T = FuturOr<S>$ then $flatten(T) = 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$.
+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$.
 
 \rationale{
-This ensures that $Future<S>$ is the most specific instantiation of \cd{Future} that is a super type of $T$.
+This ensures that \code{Future<$S$>} is the most specific instantiation of \code{Future} that is a supertype of $T$.
+Note that $S$ is well-defined because of the requirements on superinterfaces.
 }
 
-Then $flatten(T) =  S$.
+Then $flatten(T) = S$.
 
 In any other circumstance, $flatten(T) = T$.
 
-
-
-\rationale{
-We collapse multiple layers of futures into one. If $e$ evaluates to a future $f$, the future will not invoke its \code{then()} callback until f completes to a non-future value, and so the result of an await is never a future, and the result of an \ASYNC{} function will never have type \code{Future$<X>$} where $X$ itself is an invocation of \code{Future}.
-
-The  exception to that would be a type $X$ that extended or implemented \code{Future}. In that case, only one unwrapping takes place. As an example of why this is done, consider
-
-\cd{\CLASS{} C<T>  \IMPLEMENTS{}  Future<C<C<T>>> \ldots }
-
-Here, a naive definition of $flatten$ diverges; there is not even a fixed point. A more sophisticated definition of $flatten$ is possible, but the existing rule deals with most realistic examples while remaining relatively simple to understand.
-
-}
-
-
 \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$
+$(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
 
 $(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$.
@@ -3371,79 +3678,76 @@
 \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$
+$(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 Future<flatten(T_0)>$, 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\}$
+$(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 $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow  \DYNAMIC{}$.
+is $(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\}$
+$(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$.
 
 \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\}$
+$(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$.
 
 \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\}$
+$(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$.
 
+\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\}$
+
+is $(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])\{s\}$
+$(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  \DYNAMIC{}$.
-
+is $(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\}$
+$(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{}$.
+is $(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\})$ $\ASYNC*{}$ $\{s\}$
+$(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  Stream{}$.
+is $(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\})$ $\SYNC*{}$ $\{s\}$
-
-is $(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, whenever $T_i, 1 \le i \le n+k$, is not specified, it is considered to have been specified as \DYNAMIC{}.
 
 
-\subsection{ This}
+\subsection{This}
 \LMLabel{this}
 
 \LMHash{}
 The reserved word \THIS{} denotes the target of the current instance member invocation.
 
 \begin{grammar}
-{\bf thisExpression:}
-      \THIS{}
-     .
+{\bf thisExpression:}\THIS{}
+  .
 \end{grammar}
 
 \LMHash{}
@@ -3454,9 +3758,10 @@
 }
 
 \LMHash{}
-It is a compile-time error if \THIS{} appears, implicitly or explicitly,  in a top-level function or variable initializer,  in a factory constructor, or in a static method or variable initializer, or in the initializer of an instance variable.
+It is a compile-time error if \THIS{} appears, implicitly or explicitly, in a top-level function or variable initializer, in a factory constructor, or in a static method or variable initializer, or in the initializer of an instance variable.
 
-\subsection{ Instance Creation}
+
+\subsection{Instance Creation}
 \LMLabel{instanceCreation}
 
 \LMHash{}
@@ -3464,11 +3769,11 @@
 
 %It is a compile-time error if any of the type arguments to a constructor of a generic type invoked by a new expression or a constant object expression do not denote types in the enclosing lexical scope.
 
-%It is a compile-time error if a constructor of a non-generic type invoked by a new expression or a constant object expression is passed any type arguments. It is a compile-time error if a constructor of a generic type with $n$ type parameters invoked by a new expression or a constant object expression is passed $m$ type arguments where $m \ne n$, or if any of its type arguments is  misconstructed (\ref{parameterizedTypes}).
+%It is a compile-time error if a constructor of a non-generic type invoked by a new expression or a constant object expression is passed any type arguments. It is a compile-time error if a constructor of a generic type with $n$ type parameters invoked by a new expression or a constant object expression is passed $m$ type arguments where $m \ne n$, or if any of its type arguments is misconstructed (\ref{parameterizedTypes}).
 
 \LMHash{}
 It is a static type warning if
-the type $T$ in an instance creation expression of one of  the forms
+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})$,
 
@@ -3493,16 +3798,15 @@
 %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$.
 
 
-\subsubsection{ New}
+\subsubsection{New}
 \LMLabel{new}
 
 \LMHash{}
 The {\em new expression} invokes a constructor (\ref{constructors}).
 
 \begin{grammar}
-{\bf newExpression:}
-\NEW{} type (`{\escapegrammar .}' identifier)? arguments
-.
+{\bf newExpression:}\NEW{} type (`{\escapegrammar .}' identifier)? arguments
+  .
 \end{grammar}
 
 \LMHash{}
@@ -3513,36 +3817,38 @@
 \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.
+%the type $T$ is malformed.
 %It is a static warning if $T$ is a malformed type.
 
-%not a class accessible in the current scope,  optionally followed by type arguments.
+%not a class accessible in the current scope, optionally followed by type arguments.
 
 \LMHash{}
-If $T$ is  a class or parameterized type accessible in the current scope then:
+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 \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$.
 \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}) $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 \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
 \begin{itemize}
-\item  If $T$ is not a parameterized type, then for $ i \in 1 .. l$, let $V_i =  \DYNAMIC{}$.
-\item  If $T$ is  a parameterized type then let $V_i = U_i$ for $ i \in 1 .. m$.
+\item If $T$ is not a parameterized type, then for $ i \in 1 .. l$, let $V_i = \DYNAMIC{}$.
+\item If $T$ is a parameterized type then let $V_i = U_i$ for $ i \in 1 .. m$.
 \end{itemize}
 
 \LMHash{}
-If $R$ is a generic with $l \ne m$ type parameters then for $ i \in 1 .. l$, let $V_i =  \DYNAMIC{}$. In any other case, let $V_i = U_i$ for $ i \in 1 .. m$.
+If $R$ is a generic with $l \ne m$ type parameters then for $ i \in 1 .. l$, let $V_i = \DYNAMIC{}$.
+In any other case, let $V_i = U_i$ for $ i \in 1 .. m$.
 
 \LMHash{}
 Evaluation of $e$ proceeds as follows:
@@ -3566,7 +3872,9 @@
 \LMHash{}
 Otherwise, if $q$ is a generative constructor (\ref{generativeConstructors}), then:
 
-\commentary{Note that at this point we are assured that the number of actual type arguments match the number of formal type parameters.}
+\commentary{
+Note that at this point we are assured that the number of actual type arguments match the number of formal type parameters.
+}
 
 \LMHash{}
 A fresh instance (\ref{generativeConstructors}), $i$, of class $R$ is allocated.
@@ -3578,15 +3886,16 @@
 (\ref{evaluation}).
 
 \LMHash{}
-Otherwise, $q$ is a factory constructor (\ref{factories}). Then:
+Otherwise, $q$ is a factory constructor (\ref{factories}).
+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}))$}.  If evaluation of $q$ causes $q$ to be re-evaluated cyclically, with only factory constructor redirections in-between, a run-time error occurs.
+$[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}))$}.
+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.
 
-
 \LMHash{}
 Otherwise, the body of $q$ is executed with respect to the bindings that resulted from the evaluation of the argument list, and with the type parameters (if any) of $q$ bound to the actual type arguments $V_1, \ldots, V_l$.
 If this execution returns a value (\ref{completion}),
@@ -3599,11 +3908,13 @@
 \LMHash{}
 It is a static warning if $q$ is a constructor of an abstract class and $q$ is not a factory constructor.
 
-\commentary{The above gives precise meaning to the idea that instantiating an abstract class leads to a warning.
+\commentary{
+The above gives precise meaning to the idea that instantiating an abstract class leads to a warning.
 A similar clause applies to constant object creation in the next section.
 }
 
-\rationale{In particular, a factory constructor can be declared in an abstract class and used safely, as it will either produce a valid instance or lead to a warning inside its own declaration.
+\rationale{
+In particular, a factory constructor can be declared in an abstract class and used safely, as it will either produce a valid instance or lead to a warning inside its own declaration.
 }
 
 \LMHash{}
@@ -3619,17 +3930,15 @@
 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}
+\subsubsection{Const}
 \LMLabel{const}
 
 \LMHash{}
 A {\em constant object expression} invokes a constant constructor (\ref{constantConstructors}).
 
 \begin{grammar}
-{\bf constObjectExpression:}
-\CONST{} type ('{\escapegrammar .}' identifier)? arguments
-.
+{\bf constObjectExpression:}\CONST{} type ('{\escapegrammar .}' identifier)? arguments
+  .
 \end{grammar}
 
 \LMHash{}
@@ -3637,22 +3946,27 @@
 
 \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})$. 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}).
+or 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 $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}).
 
-\commentary{In particular, $T$ may not be a type variable.}
+\commentary{
+In particular, $T$ may not be a type variable.
+}
 
 \LMHash{}
 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 \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$.
 
 \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.
+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$.
+%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{}$.
+% If $T$ is a generic with $l$ retype parameters, then for all $ i \in 1 .. l$, let $V_i = \DYNAMIC{}$.
 
 \LMHash{}
 Evaluation of $e$ proceeds as follows:
@@ -3704,7 +4018,8 @@
 
 \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$).
+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$).
 
 \LMHash{}
 It is a compile-time error if evaluation of a constant object results in an uncaught exception being thrown.
@@ -3715,19 +4030,18 @@
 
 \begin{dartCode}
 \CLASS{} A \{
-   \FINAL{}  x;
+   \FINAL{} x;
    \CONST{} A(p): x = p * 10;
 \}
 
 \CONST{} A("x"); // compile-time error
 \CONST{} A(5); // legal
 
-
 \CLASS{} IntPair \{
- \CONST{} IntPair(\THIS{}.x, \THIS{}.y);
- \FINAL{} int x;
- \FINAL{} int y;
- \OPERATOR *(v) => \NEW{} IntPair(x*v, y*v);
+  \CONST{} IntPair(\THIS{}.x, \THIS{}.y);
+  \FINAL{} int x;
+  \FINAL{} int y;
+  \OPERATOR *(v) => \NEW{} IntPair(x*v, y*v);
 \}
 
 \CONST{} A(\CONST{} IntPair(1,2)); // compile-time error: illegal in a subtler way
@@ -3737,31 +4051,34 @@
 Due to the rules governing constant constructors, evaluating the constructor \code{A()} with the argument \code{"x"} or the argument \code{\CONST{} IntPair(1, 2)} would cause it to throw an exception, resulting in a compile-time error.
 }
 
-
 \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}
+\subsection{Spawning an Isolate}
 \LMLabel{spawningAnIsolate}
 
 \LMHash{}
-Spawning an isolate is accomplished via what is syntactically an ordinary library call, invoking one of the functions \code{spawnUri()} or \code{spawn()} defined in the \code{dart:isolate} library. However, such calls  have the  semantic effect of creating a new isolate with its own memory and thread of control.
+Spawning an isolate is accomplished via what is syntactically an ordinary library call, invoking one of the functions \code{spawnUri()} or \code{spawn()} defined in the \code{dart:isolate} library.
+However, such calls have the semantic effect of creating a new isolate with its own memory and thread of control.
 
 \LMHash{}
-An isolate's memory is finite, as is the space available to its thread's call stack. It is possible for a running isolate to exhaust its memory or stack, resulting in a run-time error that cannot be effectively caught, which will force the isolate to be suspended.
+An isolate's memory is finite, as is the space available to its thread's call stack.
+It is possible for a running isolate to exhaust its memory or stack, resulting in a run-time error that cannot be effectively caught, which will force the isolate to be suspended.
 
 \commentary{
 As discussed in section \ref{errorsAndWarnings}, the handling of a suspended isolate is the responsibility of the embedder.
 }
 
 
-
-\subsection{ Function Invocation}
+\subsection{Function Invocation}
 \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). 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. When the body of $f$ is executed it will be executed with the aforementioned bindings.
+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.
+When the body of $f$ is executed it will be executed with the aforementioned bindings.
 
 \LMHash{}
 Executing a body of the form \code{=> $e$} is equivalent to executing a body of the form \code{\{ return $e$; \}}.
@@ -3776,39 +4093,51 @@
 \commentary{
 A complete function body can never break or contine (\ref{completion})
 because a \BREAK{} or \CONTINUE{} statement must always occur inside the statement that is the target of the \BREAK{} or \CONTINUE{}.
-This means that a function body can only either complete normally, throw, or return. Completing normally or returning without a value is treated the same as returning the null object (\ref{null}), so the result of executing a function body can always be used as the result of evaluating an expression, either by evaluating to a value or by the evaluation throwing.
+This means that a function body can only either complete normally, throw, or return.
+Completing normally or returning without a value is treated the same as returning the null object (\ref{null}), so the result of executing a function body can always be used as the result of evaluating an expression, either by evaluating to a value or by the evaluation throwing.
 }
 
-
 \LMHash{}
 If $f$ is marked \SYNC* (\ref{functions}), then a fresh instance $i$ implementing the built-in class \code{Iterable} is associated with the invocation and immediately returned.
 
 \commentary{
-A Dart implementation will need to provide a specific implementation of \code{Iterable} that will be returned by \SYNC* methods. A typical strategy would be to produce an instance of a subclass of class \code{IterableBase} defined in \code{dart:core}. The only method that needs to be added by the Dart implementation in that case is \code{iterator}.
+A Dart implementation will need to provide a specific implementation of \code{Iterable} that will be returned by \SYNC* methods.
+A typical strategy would be to produce an instance of a subclass of class \code{IterableBase} defined in \code{dart:core}.
+The only method that needs to be added by the Dart implementation in that case is \code{iterator}.
 }
 
 \LMHash{}
 The iterable implementation must comply with the contract of \code{Iterable} and should not take any steps identified as exceptionally efficient in that contract.
 
-\commentary {
-The contract explicitly mentions a number of situations where certain iterables could be more efficient than normal. For example, by precomputing their length. Normal iterables must iterate over their elements to determine their length. This is certainly true in the case of a synchronous generator, where each element is computed by a function. It would not be acceptable to pre-compute the results of the generator and cache them, for example.
+\commentary{
+The contract explicitly mentions a number of situations where certain iterables could be more efficient than normal.
+For example, by precomputing their length.
+Normal iterables must iterate over their elements to determine their length.
+This is certainly true in the case of a synchronous generator, where each element is computed by a function.
+It would not be acceptable to pre-compute the results of the generator and cache them, for example.
 }
 
 \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 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},
 \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. Further calls to \code{moveNext()} must return false.
+\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.
+Further calls to \code{moveNext()} must return false.
 \end{itemize}
 
-Each iterator starts a separate computation. If the \SYNC* function is impure, the sequence of values yielded by each iterator may differ.
+Each iterator starts a separate computation.
+If the \SYNC* function is impure, the sequence of values yielded by each iterator may differ.
 
 \commentary{
-One can derive more than one iterator from a given iterable.   Note that operations on the iterable itself can create distinct iterators. An example would be \code{length}.  It is conceivable that different iterators might yield sequences of different length. The same care needs to be taken when writing \SYNC* functions as when
-writing an \code{Iterator} class. In particular, it should handle multiple
-simultaneous iterators gracefully. If the iterator depends on external state
-that might change, it should check that the state is still valid after every
-yield (and maybe throw a \code{ConcurrentModificationError} if it isn't).
+One can derive more than one iterator from a given iterable.
+Note that operations on the iterable itself can create distinct iterators.
+An example would be \code{length}.
+It is conceivable that different iterators might yield sequences of different length.
+The same care needs to be taken when writing \SYNC* functions as when
+writing an \code{Iterator} class.
+In particular, it should handle multiple simultaneous iterators gracefully.
+If the iterator depends on external state that might change, it should check that the state is still valid after every yield (and maybe throw a \code{ConcurrentModificationError} if it isn't).
 }
 
 \LMHash{}
@@ -3821,7 +4150,9 @@
 \LMHash{}
 If $f$ is marked \ASYNC{} (\ref{functions}), then a fresh instance (\ref{generativeConstructors}) $o$ implementing the built-in class \code{Future} is associated with the invocation.
 Then the body of $f$ is executed until it either suspends or completes, at which point $o$ is returned.
-\commentary{The body of $f$ may suspend during the evaluation of an \AWAIT{} expression or execution of an asynchronous \FOR{} loop.}
+\commentary{
+The body of $f$ may suspend during the evaluation of an \AWAIT{} expression or execution of an asynchronous \FOR{} loop.
+}
 The future $o$ is completed when execution of the body of $f$ completes (\ref{completion}).
 If execution of the body returns a value, $o$ is completed with that value,
 if it completes normally or returns without a value,
@@ -3830,11 +4161,14 @@
 $o$ is completed with the error $e$ and stack trace $t$.
 If execution of the body throws before the body suspends the first time,
 completion of $o$ happens at some future time after the invocation has returned.
-\rationale{The caller needs time to set up error handling for the returned future,
-so the future is not completed with an error {\em before} it has been returned.}
+\rationale{
+The caller needs time to set up error handling for the returned future,
+so the future is not completed with an error {\em before} it has been returned.
+}
 
 \LMHash{}
-If $f$ is marked \ASYNC* (\ref{functions}), then a fresh instance $s$ implementing the built-in class \code{Stream} is associated with the invocation and immediately returned. When $s$ is listened to, execution of the body of $f$ will begin.
+If $f$ is marked \ASYNC* (\ref{functions}), then a fresh instance $s$ implementing the built-in class \code{Stream} is associated with the invocation and immediately returned.
+When $s$ is listened to, execution of the body of $f$ will begin.
 When execution of the body of $f$ completes:
 \begin{itemize}
 \item If it completes normally or returns with no value (\ref{completion}), then if $s$ has been canceled then its cancellation future is completed with the null object (\ref{null}).
@@ -3846,40 +4180,40 @@
 \item $s$ is closed.
 \end{itemize}
 \commentary{
-The body of an asynchronous generator function cannot break, continue or return a value (\ref{completion}). The first two are only allowed in contexts that will handle the break or continue, and return statements with an expression are not allowed in generator functions.
+The body of an asynchronous generator function cannot break, continue or return a value (\ref{completion}).
+The first two are only allowed in contexts that will handle the break or continue, and return statements with an expression are not allowed in generator functions.
 }
 
 \rationale{
-When an asynchronous generator's stream has been canceled, cleanup will occur in the \FINALLY{} clauses (\ref{try}) inside the generator. We choose to direct any exceptions that occur at this time to the cancellation future rather than have them be lost.
+When an asynchronous generator's stream has been canceled, cleanup will occur in the \FINALLY{} clauses (\ref{try}) inside the generator.
+We choose to direct any exceptions that occur at this time to the cancellation future rather than have them be lost.
 }
 
 %\LMHash{}
-%When a stream is canceled, the implementation must wait for the cancelation future returned by \cd{cancell()} to complete before proceeding.
+%When a stream is canceled, the implementation must wait for the cancelation future returned by \code{cancell()} to complete before proceeding.
 
-\subsubsection{ Actual Argument List Evaluation}
+
+\subsubsection{Actual Argument List Evaluation}
 \LMLabel{actualArguments}
 
 \LMHash{}
 Function invocation involves evaluation of the list of actual arguments to the function and binding of the results to the function's formal parameters.
 
 \begin{grammar}
-{\bf arguments:}
-      `(' (argumentList  `,'?)? `)'
-    .
+{\bf arguments:}`(' (argumentList \gcomma{}?)? `)'
+  .
 
-{\bf argumentList:}
-      namedArgument (`,' namedArgument)*;
-  %    expressionList ',' spreadArgument;
-      expressionList (`,' namedArgument)*
-%      spreadArgument
-    .
+{\bf argumentList:}namedArgument (\gcomma{} namedArgument)*;
+  expressionList (\gcomma{} namedArgument)*
+  .
 
-{\bf namedArgument:}
-      label expression % could be top level expression?
-    .
- \end{grammar}
+{\bf namedArgument:}label expression
+  .
+\end{grammar}
 
-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. 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.
+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.
+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
@@ -3891,43 +4225,60 @@
 \LMHash{}
 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.
+\commentary{
+Simply stated, an argument list consisting of $m$ positional arguments and $l$ named arguments is evaluated from left to right.
 }
 
 
-\subsubsection{ Binding Actuals to Formals}
+\subsubsection{Binding Actuals to Formals}
 \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$.
+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:
 
 \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. 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.  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.
+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.
+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.
+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.
 }
 
+\LMHash{}
+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$.
+All remaining formal parameters of $f$ are bound to their default values.
+
+\commentary{
+All of these remaining parameters are necessarily optional and thus have default values.
+}
 
 \LMHash{}
-If  $m < h$, or $m > n$, a \cd{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 \cd{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$.  All remaining formal parameters of $f$  are bound to their default values.
-
-\commentary{All of these remaining parameters are necessarily optional and thus have default values.}
-
-\LMHash{}
-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$. 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$.
+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$.
+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{}
 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$.  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.  It is a static warning if $T_{m+j}$ may not be assigned to $S_{q_j}, j \in 1 .. l$.
+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$.
+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.
+It is a static warning if $T_{m+j}$ may not be assigned to $S_{q_j}, j \in 1 .. l$.
 
-\subsubsection{ Unqualified Invocation}
+
+\subsubsection{Unqualified Invocation}
 \LMLabel{unqualifiedInvocation}
 
 \LMHash{}
@@ -3938,12 +4289,14 @@
 where $id$ is an identifier.
 
 \LMHash{}
-If there exists a lexically visible declaration named $id$, let $f_{id}$ be the innermost such declaration. Then:
+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{functionExpressionInvociation}) 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.
+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.
 }
 \item
 If $f_{id}$ is a prefix object, a compile-time error occurs.
@@ -3955,20 +4308,16 @@
 \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 \cd{NoSuchMethodError} to be thrown.
+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})$.
 
-
 % 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.
+% 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.
 
 
-
-
-
-\subsubsection{ Function Expression Invocation}
+\subsubsection{Function Expression Invocation}
 \LMLabel{functionExpressionInvocation}
 
 \LMHash{}
@@ -3976,17 +4325,22 @@
 
 $e_f(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$,
 
-where $e_f$ is an expression. 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.
+where $e_f$ is an expression.
+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)$.
 
 \commentary{
-The expression $(e_f)$ where $e_f$ 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.
+The expression $(e_f)$ where $e_f$ 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.
 }
 
 If $e_f$ is a property extraction expression (\ref{propertyExtraction}), then $i$ isn't a function expression invocation and is instead recognized as an ordinary method invocation (\ref{ordinaryInvocation}).
 
 \commentary{
-\code{$a.b(x)$} is parsed as a method invocation of method \code{$b()$} on object \code{$a$}, not as an invocation of getter \code{$b$} on \code{$a$} followed by a function call \code{$(a.b)(x)$}.  If a method or getter \code{$b$} exists, the two will be equivalent. However, if \code{$b$} is not defined on \code{$a$}, the resulting invocation of \code{noSuchMethod()} would differ.  The \code{Invocation} passed to \code{noSuchMethod()} would describe a call to a method \code{$b$} with argument \code{$x$} in the former case, and a call to a getter \code{$b$} (with no arguments) in the latter.
+\code{$a.b(x)$} is parsed as a method invocation of method \code{$b()$} on object \code{$a$}, not as an invocation of getter \code{$b$} on \code{$a$} followed by a function call \code{$(a.b)(x)$}.
+If a method or getter \code{$b$} exists, the two will be equivalent.
+However, if \code{$b$} is not defined on \code{$a$}, the resulting invocation of \code{noSuchMethod()} would differ.
+The \code{Invocation} passed to \code{noSuchMethod()} would describe a call to a method \code{$b$} with argument \code{$x$} in the former case, and a call to a getter \code{$b$} (with no arguments) in the latter.
 }
 
 \LMHash{}
@@ -3995,7 +4349,9 @@
 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})$.
 
 \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. The method \CALL{} is special in this regard. The signature of the \CALL{} method determines the signature used when using the object via the built-in invocation syntax.
+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.
+The method \CALL{} is special in this regard.
+The signature of the \CALL{} method determines the signature used when using the object via the built-in invocation syntax.
 }
 
 \LMHash{}
@@ -4018,60 +4374,69 @@
 Otherwise, the static type of $i$ is the return type $T_0$ of $F$.
 
 
-\subsection{ Lookup}
+\subsection{Lookup}
 \LMLabel{lookup}
 
+
 \subsubsection{Method Lookup}
 \LMLabel{methodLookup}
 
 \LMHash{}
-The result of a lookup of a method $m$ in object $o$ with respect to library $L$ is the result of  a lookup of method $m$ in class $C$ with respect to library $L$, where $C$ is the class of $o$.
+The result of a lookup of a method $m$ in object $o$ with respect to library $L$ is the result of a lookup of method $m$ in class $C$ with respect to library $L$, where $C$ is the class of $o$.
 
 \LMHash{}
-The result of  a lookup of method $m$ in class $C$ with respect to library $L$ is:
-If $C$ declares a concrete instance method named $m$ that is accessible to $L$,  then that method is the result of the lookup, and we say that the method was {\em looked up in $C$}. Otherwise, if $C$ has a superclass $S$, then the result of the lookup is the result of looking up $m$  in $S$ with respect to $L$. Otherwise, we say that the method lookup has failed.
+The result of a lookup of method $m$ in class $C$ with respect to library $L$ is:
+If $C$ declares a concrete instance method named $m$ that is accessible to $L$, then that method is the result of the lookup, and we say that the method was {\em looked up in $C$}.
+Otherwise, if $C$ has a superclass $S$, then the result of the lookup is the result of looking up $m$ in $S$ with respect to $L$.
+Otherwise, we say that the method lookup has failed.
 
-\rationale {
+\rationale{
 The motivation for skipping abstract members during lookup is largely to allow smoother mixin composition.
 }
 
 
-\subsubsection{ Getter and Setter Lookup}
+\subsubsection{Getter and Setter Lookup}
 \LMLabel{getterAndSetterLookup}
 
 \LMHash{}
-The result of a lookup of a getter (respectively setter) $m$ in object $o$  with respect  to  library $L$ is the result of looking up getter (respectively setter) $m$ in class $C$ with respect to $L$, where $C$ is the class of $o$.
+The result of a lookup of a getter (respectively setter) $m$ in object $o$ with respect to library $L$ is the result of looking up getter (respectively setter) $m$ in class $C$ with respect to $L$, where $C$ is the class of $o$.
 
 \LMHash{}
-The result of a lookup of a getter (respectively setter) $m$ in class $C$  with respect to library $L$ is:
-If $C$ declares a concrete instance getter (respectively setter) named $m$  that is accessible to $L$,  then that getter (respectively setter) is the result of the lookup, and we say that the getter (respectively setter) was {\em looked up in $C$}. Otherwise, if $C$ has a superclass $S$, then the result of the lookup is the result of looking up getter (respectively setter) $m$ in $S$ with respect to $L$. Otherwise, we say that the lookup has failed.
+The result of a lookup of a getter (respectively setter) $m$ in class $C$ with respect to library $L$ is:
+If $C$ declares a concrete instance getter (respectively setter) named $m$ that is accessible to $L$, then that getter (respectively setter) is the result of the lookup, and we say that the getter (respectively setter) was {\em looked up in $C$}.
+Otherwise, if $C$ has a superclass $S$, then the result of the lookup is the result of looking up getter (respectively setter) $m$ in $S$ with respect to $L$.
+Otherwise, we say that the lookup has failed.
 
-\rationale {
+\rationale{
 The motivation for skipping abstract members during lookup is largely to allow smoother mixin composition.
 }
 
 
-\subsection{ Top level Getter Invocation}
+\subsection{Top level Getter Invocation}
 \LMLabel{topLevelGetterInvocation}
 
 \LMHash{}
 Evaluation of a top-level getter invocation $i$ of the form $m$, where $m$ is an identifier, proceeds as follows:
 
 \LMHash{}
-The getter function $m$ is invoked. The value of $i$ is the result returned by the call to the getter function.
+The getter function $m$ is invoked.
+The value of $i$ is the result returned by the call to the getter function.
 \commentary{
-Note that the invocation is always defined. Per the rules for identifier references, an identifier will not be treated as a top-level getter invocation unless the getter $i$ is defined.
+Note that the invocation is always defined.
+Per the rules for identifier references, an identifier will not be treated as a top-level getter invocation unless the getter $i$ is defined.
 }
 
 \LMHash{}
 The static type of $i$ is the declared return type of $m$.
 
-\subsection{ Method Invocation}
+
+\subsection{Method Invocation}
 \LMLabel{methodInvocation}
 
 \LMHash{}
 Method invocation can take several forms as specified below.
 
+
 \subsubsection{Ordinary Invocation}
 \LMLabel{ordinaryInvocation}
 
@@ -4096,9 +4461,9 @@
 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$.
 
-
 \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 $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})$.
 
 \LMHash{}
 An {\em unconditional ordinary method invocation} $i$ has the form
@@ -4113,32 +4478,41 @@
 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}$. Let $f$ be the result of looking up (\ref{methodLookup}) method $m$  in $o$ with respect to the current library $L$.
+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}$.
+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 $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. 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.
+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.
+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.
 }
 
 \LMHash{}
-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. Otherwise method lookup has succeeded.
+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.
+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$. The value of $i$ is the value returned after $f$ is executed.
+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 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}\}$.
 
 \LMHash{}
 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.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}$\}}.
 \end{itemize}
@@ -4146,26 +4520,36 @@
 \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$.
 
-\commentary {
+\commentary{
 It is not possible to override the \code{noSuchMethod} if class \code{Object}
 in such a way that it cannot be invoked with one argument of type \code{Invocation}.
 }
 
-\commentary{Notice that the wording carefully avoids re-evaluating the receiver $o$ and the arguments $a_i$. }
+\commentary{
+Notice that the wording carefully avoids re-evaluating the receiver $o$ and the arguments $a_i$.
+}
 
 \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 $o$.
+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$. Or
-\item $T$ is \code{Function} and $m$ is \CALL. \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.
+\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{
+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.
 }
 \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$ 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$.
 
 \LMHash{}
-It is a compile-time error to invoke any of the methods of class \cd{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}
@@ -4176,13 +4560,12 @@
 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 arguments*) (assignableSelector arguments*)* (assignmentOperator expressionWithoutCascade)?
+  .
 
-{\bf cascadeSelector:}`['  expression `]';
-      identifier
-      .
+{\bf cascadeSelector:}`[' expression `]';
+  identifier
+  .
 \end{grammar}
 
 \LMHash{}
@@ -4194,11 +4577,14 @@
 Then $e$ evaluates to $o$.
 
 \rationale{
-With the introduction of null-aware conditional assignable expressions (\ref{assignableExpressions}), it would make sense to extend cascades with a null-aware conditional form as well. One might define \code{$e$?..\metavar{suffix}} to be equivalent to the expression \code{$t$ == \NULL{} ? \NULL{} : $t$.\metavar{suffix}} where $t$ is a fresh variable bound to the value of $e$.
+With the introduction of null-aware conditional assignable expressions (\ref{assignableExpressions}), it would make sense to extend cascades with a null-aware conditional form as well.
+One might define \code{$e$?..\metavar{suffix}} to be equivalent to the expression \code{$t$ == \NULL{} ? \NULL{} : $t$.\metavar{suffix}} where $t$ is a fresh variable bound to the value of $e$.
 
-The present specification has not added such a construct, in the interests of simplicity and rapid language evolution. However, Dart implementations may experiment with such constructs, as noted in section \ref{ecmaConformance}.
+The present specification has not added such a construct, in the interests of simplicity and rapid language evolution.
+However, Dart implementations may experiment with such constructs, as noted in section \ref{ecmaConformance}.
 }
 
+
 \subsubsection{Super Invocation}
 \LMLabel{superInvocation}
 
@@ -4211,25 +4597,31 @@
 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 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$.
 
 \LMHash{}
-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.
+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.
 
 \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{}. The value of $i$ is the value returned after $f$ is executed.
+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}\}$.
 
 \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.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}$\}}.
 \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$.
@@ -4238,37 +4630,41 @@
 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$. 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$.
+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$.
+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$.
 % 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}
 \LMLabel{sendingMessages}
 
 \LMHash{}
-Messages are the sole means of communication among isolates. Messages are sent by invoking specific  methods in the Dart libraries; there is no specific syntax for sending a message.
+Messages are the sole means of communication among isolates.
+Messages are sent by invoking specific methods in the Dart libraries; there is no specific syntax for sending a message.
 
-\commentary{In other words, the methods supporting sending messages embody primitives of Dart that are not accessible to ordinary code, much like the methods that spawn isolates.
+\commentary{
+In other words, the methods supporting sending messages embody primitives of Dart that are not accessible to ordinary code, much like the methods that spawn isolates.
 }
 
 
-
-\subsection{ Property Extraction}
+\subsection{Property Extraction}
 \LMLabel{propertyExtraction}
 
 \LMHash{}
 {\em Property extraction} allows for a member or constructor to be accessed as a property rather than a function.
 A property extraction can be either:
 \begin{enumerate}
-\item A {\em closurization} which converts a method or constructor into a closure. Or
+\item A {\em closurization} which converts a method or constructor into a closure.
+Or
 \item A {\em getter invocation} which returns the result of invoking of a getter method.
 \end{enumerate}
 
-
-\commentary{Closures derived from members via closurization are colloquially known as tear-offs}
+\commentary{
+Closures derived from members via closurization are colloquially known as tear-offs.
+}
 
 Property extraction can be either {\em conditional} or {\em unconditional}.
 
@@ -4286,12 +4682,14 @@
 and evaluate \code{$x$.\metavar{id}} to a value $r$.
 Then $e$ evaluates to $r$.
 
-
-The static type of $e$ is the same as the static type of \code{$e_1$.\metavar{id}}. Let $T$ be the static type of $e_1$ and let $y$ be a fresh variable of type $T$. Exactly the same static warnings that would be caused by \code{$y$.\metavar{id}} are also generated in the case of \code{$e_1$?.\metavar{id}}.
+The static type of $e$ is the same as the static type of \code{$e_1$.\metavar{id}}.
+Let $T$ be the static type of $e_1$ and let $y$ be a fresh variable of type $T$.
+Exactly the same static warnings that would be caused by \code{$y$.\metavar{id}} are also generated in the case of \code{$e_1$?.\metavar{id}}.
 
 \LMHash{}
 Unconditional property extraction has one of two syntactic forms: $e.m$ (\ref{getterAccessAndMethodExtraction}) or $\SUPER.m$ (\ref{superGetterAccessAndMethodClosurization}), where $e$ is an expression and $m$ is an identifier.
 
+
 \subsubsection{Getter Access and Method Extraction}
 \LMLabel{getterAccessAndMethodExtraction}
 
@@ -4299,18 +4697,27 @@
 Evaluation of a property extraction $i$ of the form $e.m$ proceeds as follows:
 
 \LMHash{}
-First, the expression $e$ is evaluated to an object $o$. Let $f$ be the result of looking up (\ref{methodLookup}) method  (\ref{instanceMethods}) $m$ in $o$ with respect to the current library $L$.  If $o$ is an instance of \code{Type} but $e$ is not a constant type literal, then if $f$ is a method that forwards (\ref{functionDeclarations}) to a static method,  method lookup fails. If method lookup succeeds then $i$ evaluates to the closurization of method $f$ on object $o$ (\ref{ordinaryMemberClosurization}).
+First, the expression $e$ is evaluated to an object $o$.
+Let $f$ be the result of looking up (\ref{methodLookup}) method (\ref{instanceMethods}) $m$ in $o$ with respect to the current library $L$.
+If $o$ is an instance of \code{Type} but $e$ is not a constant type literal, then if $f$ is a method that forwards (\ref{functionDeclarations}) to a static method, method lookup fails.
+If method lookup succeeds then $i$ evaluates to the closurization of method $f$ on object $o$ (\ref{ordinaryMemberClosurization}).
 
-\commentary {
-Note that $f$ is never an abstract method, because method lookup skips abstract methods. Hence, if $m$ refers to an abstract method, we will continue to the next step. However, since methods and getters never override each other, getter lookup will necessarily fail as well, and \cd{noSuchMethod()} will ultimately be invoked. The regrettable implication is that the error will refer to a missing getter rather than an attempt to closurize an abstract method.
+\commentary{
+Note that $f$ is never an abstract method, because method lookup skips abstract methods.
+Hence, if $m$ refers to an abstract method, we will continue to the next step.
+However, since methods and getters never override each other, getter lookup will necessarily fail as well, and \code{noSuchMethod()} will ultimately be invoked.
+The regrettable implication is that the error will refer to a missing getter rather than an attempt to closurize an abstract method.
 }
 
 \LMHash{}
-Otherwise, $i$ is a getter invocation.  Let $f$ be the result of looking up
-(\ref{getterAndSetterLookup}) getter (\ref{getters}) $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 $f$ is a getter that forwards  to a static getter,  getter lookup fails. Otherwise, the body of $f$ is executed with \THIS{} bound to $o$.  The value of $i$ is the result returned by the call to the getter function.
+Otherwise, $i$ is a getter invocation.
+Let $f$ be the result of looking up (\ref{getterAndSetterLookup}) getter (\ref{getters}) $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 $f$ is a getter that forwards to a static getter, getter lookup fails.
+Otherwise, the body of $f$ is executed with \THIS{} bound to $o$.
+The value of $i$ is the result returned by the call to the getter function.
 
 \LMHash{}
-If the getter lookup has failed, then a new instance $im$  of the predefined class \code{Invocation} is created, such that :
+If the getter lookup has failed, then a new instance $im$ of the predefined class \code{Invocation} is created, such that :
 \begin{itemize}
 \item \code{im.isGetter} evaluates to \code{\TRUE{}}.
 \item \code{im.memberName} evaluates to the symbol \code{m}.
@@ -4320,23 +4727,24 @@
 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{}
-It is a compile-time error if $m$ is a member of class \cd{Object} and $e$ is either a prefix object (\ref{imports}) or a constant type literal.
+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.
 
-\commentary {
+\commentary{
 This precludes \code{int.toString} but not \code{(int).toString} because in the latter case, $e$ is a parenthesized expression.
 }
 
 \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$.
+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$.
 
 \LMHash{}
 The static type of $i$ is:
 \begin{itemize}
-\item The declared return type of $T.m$, if $T$  has an accessible instance getter named $m$.
-\item The declared return type of $m$, if  $T$ is \code{Type}, $e$ is a constant type literal and the class corresponding to $e$ declares an accessible static getter named $m$.
+\item The declared return type of $T.m$, if $T$ has an accessible instance getter named $m$.
+\item The declared return type of $m$, if $T$ is \code{Type}, $e$ is a constant type literal and the class corresponding to $e$ declares an accessible static getter named $m$.
 \item The static type of function $T.m$ if $T$ has an accessible instance method named $m$.
-\item The static type of function $m$, if  $T$ is \code{Type}, $e$ is a constant type literal and the class corresponding to $e$ declares an accessible static method named $m$.
-\item  The type \DYNAMIC{} otherwise.
+\item The static type of function $m$, if $T$ is \code{Type}, $e$ is a constant type literal and the class corresponding to $e$ declares an accessible static method named $m$.
+\item The type \DYNAMIC{} otherwise.
 \end{itemize}
 
 
@@ -4347,23 +4755,30 @@
 Evaluation of a property extraction $i$ of the form $\SUPER.m$ proceeds as follows:
 
 \LMHash{}
-Let $g$ be the method currently executing, and let $C$ be the class in which $g$ was looked up.  Let $S_{dynamic}$ be the superclass of $C$. Let $f$ be the result of looking up method $m$ in $S_{dynamic}$ with respect to the current library $L$.  If method lookup succeeds then $i$ evaluates to the closurization of method $f$ with respect to superclass $S_{dynamic}$ (\ref{superClosurization}).
+Let $g$ be the method currently executing, and let $C$ be the class in which $g$ was looked up.
+Let $S_{dynamic}$ be the superclass of $C$.
+Let $f$ be the result of looking up method $m$ in $S_{dynamic}$ with respect to the current library $L$.
+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.  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.
+ 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.
 
 \LMHash{}
 If the getter lookup has failed, then a new instance $im$ of the predefined class \code{Invocation} is created, such that:
 \begin{itemize}
-\item  \code{im.isGetter} evaluates to \code{\TRUE{}}.
-\item  \code{im.memberName} evaluates to the symbol \code{m}.
+\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>}.
 \end{itemize}
-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$.
+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$.
 
 \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$.
+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$.
 
 The static type of $i$ is:
 \begin{itemize}
@@ -4380,7 +4795,7 @@
 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:
 \begin{itemize}
-%\item $(a) \{\RETURN{}$ $u$ $op$ $a;$\} if $f$ is named $op$ and $op$ is one of  \code{<, >, <=, >=, ==,  -, +, /, \~{}/, *, \%, $|$, \^{}, \&, $<<$, $>>$} (this precludes closurization of unary -).
+%\item $(a) \{\RETURN{}$ $u$ $op$ $a;$\} if $f$ is named $op$ and $op$ is one of \code{<, >, <=, >=, ==, -, +, /, \~{}/, *, \%, $|$, \^{}, \&, $<<$, $>>$} (this precludes closurization of unary -).
 %\item $() \{\RETURN{}$ \~{} $u;$\} if $f$ is named \~{}.
 %\item $(a) \{\RETURN{}$ $u[a];$\} if $f$ is named $[]$.
 %\item $(a, b) \{\RETURN{}$ $u[a] = b;$\} if $f$ is named $[]=$.
@@ -4401,18 +4816,21 @@
 \end{itemize}
 
 \LMHash{}
-Except that iff  \code{identical($o_1, o_2$)}  then \cd{$o_1.m$ == $o_2.m$}.
+Except that if{}f \code{identical($o_1, o_2$)} then \code{$o_1.m$ == $o_2.m$}.
 %\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 \cd{identical($o_1.m, o_2.m$)}. Dart implementations are not required to canonicalize these or any other closures.
+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.
 }
 % local functions that have a closure extracted are always different
 
 \rationale{
-The special treatment of equality in this case facilitates the use of extracted property functions in APIs where callbacks such as event listeners must often be registered and later unregistered. A common example is the DOM API in web browsers.
+The special treatment of equality in this case facilitates the use of extracted property functions in APIs where callbacks such as event listeners must often be registered and later unregistered.
+A common example is the DOM API in web browsers.
 }
 
+
 \subsubsection{Super Closurization}
 \LMLabel{superClosurization}
 
@@ -4421,7 +4839,7 @@
 
 \LMHash{}
 \begin{itemize}
-%\item $(a) \{\RETURN{}$ \SUPER{} $op$ $a;$\} if $f$ is named $op$ and $op$ is one of  \code{<, >, <=, >=, ==,  -, +, /, \~{}/, *, \%, $|$, \^{}, \&, $<<$, $>>$}.
+%\item $(a) \{\RETURN{}$ \SUPER{} $op$ $a;$\} if $f$ is named $op$ and $op$ is one of \code{<, >, <=, >=, ==, -, +, /, \~{}/, *, \%, $|$, \^{}, \&, $<<$, $>>$}.
 %\item $() \{\RETURN{}$ \~{}\SUPER;\} if $f$ is named \~{}.
 %\item $(a) \{\RETURN{}$ $\SUPER[a];$\} if $f$ is named $[]$.
 %\item $(a, b) \{\RETURN{}$ $\SUPER[a] = b;$\} if $f$ is named $[]=$.
@@ -4442,10 +4860,10 @@
 \end{itemize}
 
 \LMHash{}
-Except that iff two closurizations were created by code declared in the same class with identical bindings of \THIS{} then \cd{\SUPER$_1.m$ == \SUPER$_2.m$}.
+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$}.
 
 
-\subsection{ Assignment}
+\subsection{Assignment}
 \LMLabel{assignment}
 
 \LMHash{}
@@ -4453,18 +4871,17 @@
 
 \begin{grammar}
 {\bf assignmentOperator:}`=' ;
-      compoundAssignmentOperator
-    .
+  compoundAssignmentOperator
+  .
 \end{grammar}
 
 \LMHash{}
 Evaluation of an assignment $a$ of the form $v$ \code{=} $e$ proceeds as follows:
 
-
 %If there is neither a local variable declaration with name $v$ nor a setter declaration with name $v=$ in the lexical scope enclosing $a$, then:
 %\begin{itemize}
-% \item If  $a$ occurs inside a top level or static function (be it function, method, getter,  or setter) or variable initializer, evaluation of $a$ causes $e$ to be evaluated, after which a \code{NoSuchMethodError} is thrown.
-% \item Otherwise, the assignment is equivalent to the assignment \code{ \THIS{}.$v$ = $e$}.
+% \item If $a$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer, evaluation of $a$ causes $e$ to be evaluated, after which a \code{NoSuchMethodError} is thrown.
+% \item Otherwise, the assignment is equivalent to the assignment \code{\THIS{}.$v$ = $e$}.
 % \end{itemize}
 
 %Otherwise
@@ -4474,28 +4891,32 @@
 It is a compile-time error if $d$ denotes a prefix object.
 
 \LMHash{}
-If $d$ is the declaration of a local variable, the expression $e$ is evaluated to an object $o$. Then, the variable $v$ is bound to $o$ unless $v$ is \FINAL{} or \CONST{}, in which case a dynamic error occurs.
+If $d$ is the declaration of a local variable, the expression $e$ is evaluated to an object $o$.
+Then, the variable $v$ is bound to $o$ unless $v$ is \FINAL{} or \CONST{}, in which case a dynamic error occurs.
 If no error occurs, the value of the assignment expression is $o$.
 
 % add local functions per bug 23218
 
 \LMHash{}
-If $d$ is the declaration of a library variable, top level getter or top level setter, the expression $e$ is evaluated to an object $o$. Then the setter $v=$ is invoked with its formal parameter bound to $o$. The value of the assignment expression is $o$.
+If $d$ is the declaration of a library variable, top level getter or top level setter, the expression $e$ is evaluated to an object $o$.
+Then the setter $v=$ is invoked with its formal parameter bound to $o$.
+The value of the assignment expression is $o$.
 
 \LMHash{}
 Otherwise, if $d$ is the declaration of a static variable, static getter or static setter in class $C$, then the assignment is equivalent to the assignment \code{$C.v$ = $e$}.
 
 \LMHash{}
-Otherwise, If  $a$ occurs inside a top level or static function (be it function, method, getter,  or setter) or variable initializer, evaluation of $a$ causes $e$ to be evaluated, after which a \code{NoSuchMethodError} is thrown.
+Otherwise, If $a$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer, evaluation of $a$ causes $e$ to be evaluated, after which a \code{NoSuchMethodError} is thrown.
 
 \LMHash{}
-Otherwise, the assignment is equivalent to the assignment \code{ \THIS{}.$v$ = $e$}.
+Otherwise, the assignment is equivalent to the assignment \code{\THIS{}.$v$ = $e$}.
 
 \LMHash{}
 In checked mode, it is a dynamic type error if $o$ is not the null object (\ref{null}) and the interface of the class of $o$ is not a subtype of the actual type (\ref{actualTypeOfADeclaration}) of $v$.
 
 \LMHash{}
-It is a static type warning if the static type of $e$ may not be assigned to the static type of $v$. The static type of the expression $v$ \code{=} $e$ is the static type of $e$.
+It is a static type warning if the static type of $e$ may not be assigned to the static type of $v$.
+The static type of the expression $v$ \code{=} $e$ is the static type of $e$.
 
 \LMHash{}
 Evaluation of an assignment $a$ of the form \code{$e_1$?.$v$ = $e_2$}
@@ -4512,13 +4933,19 @@
 Then $a$ evaluates to $r$.
 
 \LMHash{}
-The static type of $a$ is the static type of $e_2$. Let $T$ be the static type of $e_1$ and let $y$ be a fresh variable of type $T$. Exactly the same static warnings that would be caused by \code{$y$.$v$ = $e_2$} are also generated in the case of \code{$e_1$?.$v$ = $e_2$}.
+The static type of $a$ is the static type of $e_2$.
+Let $T$ be the static type of $e_1$ and let $y$ be a fresh variable of type $T$.
+Exactly the same static warnings that would be caused by \code{$y$.$v$ = $e_2$} are also generated in the case of \code{$e_1$?.$v$ = $e_2$}.
 
 \LMHash{}
 Evaluation of an assignment of the form \code{$e_1$.$v$ = $e_2$} proceeds as follows:
 
 \LMHash{}
-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. Otherwise, the body  of $v=$ is executed with its formal parameter bound to $o_2$ and \THIS{} bound to $o_1$.
+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.
+Otherwise, the body of $v=$ is executed with its formal parameter bound to $o_2$ and \THIS{} bound to $o_1$.
 
 \LMHash{}
 If the setter lookup has failed, then a new instance $im$ of the predefined class \code{Invocation} is created, such that:
@@ -4530,7 +4957,7 @@
 \end{itemize}
 
 \LMHash{}
-Then the method \code{noSuchMethod()} is looked up in $o_1$ and invoked  with argument $im$.
+Then the method \code{noSuchMethod()} is looked up in $o_1$ and invoked with argument $im$.
 
 \LMHash{}
 The value of the assignment expression is $o_2$ irrespective of whether setter lookup has failed or succeeded.
@@ -4539,18 +4966,22 @@
 In checked mode, it is a dynamic type error if $o_2$ is not the null object (\ref{null}) and the interface of the class of $o_2$ is not a subtype of the actual type of $e_1.v$.
 
 \LMHash{}
-Let $T$ be the static type of $e_1$. It is a static type warning if $T$ does not have an accessible instance setter named $v=$ unless $T$ is \code{Type}, $e_1$ is a constant type literal and the class corresponding to $e_1$ has a static setter named $v=$.
-
+Let $T$ be the static type of $e_1$.
+It is a static type warning if $T$ does not have an accessible instance setter named $v=$ unless $T$ is \code{Type}, $e_1$ is a constant type literal and the class corresponding to $e_1$ has a static setter named $v=$.
 
 \LMHash{}
-It is a static type warning if the static type of $e_2$ may not be assigned to the static type of the formal parameter of the setter $v=$.   The static type of the expression $e_1.v$ \code{=} $e_2$ is the static type of $e_2$.
+It is a static type warning if the static type of $e_2$ may not be assigned to the static type of the formal parameter of the setter $v=$.
+The static type of the expression $e_1.v$ \code{=} $e_2$ is the static type of $e_2$.
 
 \LMHash{}
 Evaluation of an assignment of the form $\SUPER.v$ \code{=} $e$ proceeds as follows:
 
 \LMHash{}
-Let $g$ be the method currently executing, and let $C$ be the class in which $g$ was looked up.  Let $S_{dynamic}$ be the superclass of $C$.
-The expression $e$ is evaluated to an object $o$.  Then, the setter $v=$ is looked up (\ref{getterAndSetterLookup}) in $S_{dynamic}$ with respect to the current library.  The body  of $v=$ is executed with its formal parameter bound to $o$ and \THIS{} bound to \THIS{}.
+Let $g$ be the method currently executing, and let $C$ be the class in which $g$ was looked up.
+Let $S_{dynamic}$ be the superclass of $C$.
+The expression $e$ is evaluated to an object $o$.
+Then, the setter $v=$ is looked up (\ref{getterAndSetterLookup}) in $S_{dynamic}$ with respect to the current library.
+The body of $v=$ is executed with its formal parameter bound to $o$ and \THIS{} bound to \THIS{}.
 
 \LMHash{}
 If the setter lookup has failed, then a new instance $im$ of the predefined class \code{Invocation} is created, such that:
@@ -4571,10 +5002,12 @@
 In checked mode, it is a dynamic type error if $o$ is not the null object (\ref{null}) and the interface of the class of $o$ is not a subtype of the actual type of $S.v$.
 
 \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 setter named $v=$ unless $S_{static}$.
+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 setter named $v=$ unless $S_{static}$.
 
 \LMHash{}
-It is a static type warning if the static type of $e$ may not be assigned to the static type of the formal parameter of the setter $v=$.   The static type of the expression $\SUPER.v$ \code{=} $e$ is the static type of $e$.
+It is a static type warning if the static type of $e$ may not be assigned to the static type of the formal parameter of the setter $v=$.
+The static type of the expression $\SUPER.v$ \code{=} $e$ is the static type of $e$.
 
 \LMHash{}
 Evaluation of an assignment $e$ of the form \code{$e_1$[$e_2$] = $e_3$}
@@ -4589,17 +5022,16 @@
 The static type of the expression \code{$e_1$[$e_2$] = $e_3$} is the static type of $e_3$.
 
 \LMHash{}
-An assignment of the form \code{\SUPER[$e_1$] = $e_2$} is equivalent to the expression \code{\SUPER.[$e_1$] = $e_2$}.  The static type of the expression \code{\SUPER[$e_1$] = $e_2$} is the static type of $e_2$.
+An assignment of the form \code{\SUPER[$e_1$] = $e_2$} is equivalent to the expression \code{\SUPER.[$e_1$] = $e_2$}.
+The static type of the expression \code{\SUPER[$e_1$] = $e_2$} is the static type of $e_2$.
 
-
-% Should we add: It is a dynamic error if $e_1$ evaluates to an  constant list or map.
+% Should we add: It is a dynamic error if $e_1$ evaluates to an constant list or map.
 
 \LMHash{}
-It is a static warning if an assignment of the form $v = e$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer and there is neither a local variable declaration with name $v$  nor setter declaration with name $v=$ in the lexical scope enclosing the assignment.
+It is a static warning if an assignment of the form $v = e$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer and there is neither a local variable declaration with name $v$ nor setter declaration with name $v=$ in the lexical scope enclosing the assignment.
 
 \LMHash{}
-It is a compile-time error to invoke any of the setters of class \cd{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 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}
@@ -4624,7 +5056,7 @@
 Otherwise evaluate \code{$C$.$v$ = $e$} to a value $r$,
 and then $a$ evaluates to $r$.
 
-\commentary {
+\commentary{
 The two rules above also apply when the variable v or the type C is prefixed.
 }
 
@@ -4676,25 +5108,32 @@
 % But what about C?.v ??= e
 
 \LMHash{}
-A compound assignment of the form $C?.v$  {\em ??=} $e_2$ is equivalent to the expression $C.v$ {\em ??=} $e$.
+A compound assignment of the form $C?.v$ {\em ??=} $e_2$ is equivalent to the expression $C.v$ {\em ??=} $e$.
 
 \LMHash{}
-The static type of a compound assignment of the form $v$ {\em ??=} $e$ is the least upper bound of the static type of $v$ and the static type of $e$.  Exactly the same static warnings that would be caused by $v = e$ are also generated in the case of $v$ {\em ??=} $e$.
+The static type of a compound assignment of the form $v$ {\em ??=} $e$ is the least upper bound of the static type of $v$ and the static type of $e$.
+Exactly the same static warnings that would be caused by $v = e$ are also generated in the case of $v$ {\em ??=} $e$.
 
 \LMHash{}
-The static type of a compound assignment of the form  $C.v$ {\em ??=} $e$  is the least upper bound of the static type of $C.v$ and the static type of $e$.  Exactly the same static warnings that would be caused by $C.v = e$ are also generated in the case of $C.v$ {\em ??=} $e$.
+The static type of a compound assignment of the form $C.v$ {\em ??=} $e$ is the least upper bound of the static type of $C.v$ and the static type of $e$.
+Exactly the same static warnings that would be caused by $C.v = e$ are also generated in the case of $C.v$ {\em ??=} $e$.
 
 \LMHash{}
-The static type of a compound assignment of the form $e_1.v$  {\em ??=} $e_2$ is the least upper bound of the static type of $e_1.v$ and the static type of $e_2$. Let $T$ be the static type of $e_1$ and let $z$ be a fresh variable of type $T$. Exactly the same static warnings that would be caused by $z.v = e_2$ are also generated in the case of $e_1.v$  {\em ??=} $e_2$.
+The static type of a compound assignment of the form $e_1.v$ {\em ??=} $e_2$ is the least upper bound of the static type of $e_1.v$ and the static type of $e_2$.
+Let $T$ be the static type of $e_1$ and let $z$ be a fresh variable of type $T$.
+Exactly the same static warnings that would be caused by $z.v = e_2$ are also generated in the case of $e_1.v$ {\em ??=} $e_2$.
 
 \LMHash{}
-The static type of a compound assignment of the form $e_1[e_2]$  {\em ??=} $e_3$  is the least upper bound of the static type of $e_1[e_2]$ and the static type of $e_3$. Exactly the same static warnings that would be caused by $e_1[e_2] = e_3$ are also generated in the case of $e_1[e_2]$  {\em ??=} $e_3$.
+The static type of a compound assignment of the form $e_1[e_2]$ {\em ??=} $e_3$ is the least upper bound of the static type of $e_1[e_2]$ and the static type of $e_3$.
+Exactly the same static warnings that would be caused by $e_1[e_2] = e_3$ are also generated in the case of $e_1[e_2]$ {\em ??=} $e_3$.
 
 \LMHash{}
-The static type of a compound assignment of the form $\SUPER.v$  {\em ??=} $e$  is the least upper bound of the static type of $\SUPER.v$ and the static type of $e$. Exactly the same static warnings that would be caused by $\SUPER.v = e$ are also generated in the case of $\SUPER.v$  {\em ??=} $e$.
+The static type of a compound assignment of the form $\SUPER.v$ {\em ??=} $e$ is the least upper bound of the static type of $\SUPER.v$ and the static type of $e$.
+Exactly the same static warnings that would be caused by $\SUPER.v = e$ are also generated in the case of $\SUPER.v$ {\em ??=} $e$.
 
 \LMHash{}
-For any other valid operator $op$, a compound assignment of the form \code{$v$ $op$= $e$} is equivalent to \code{$v$ = $v$ $op$ $e$}. A compound assignment of the form \code{$C$.$v$ $op$= $e$} is equivalent to \code{$C$.$v$ = $C$.$v$ $op$ $e$}.
+For any other valid operator $op$, a compound assignment of the form \code{$v$ $op$= $e$} is equivalent to \code{$v$ = $v$ $op$ $e$}.
+A compound assignment of the form \code{$C$.$v$ $op$= $e$} is equivalent to \code{$C$.$v$ = $C$.$v$ $op$ $e$}.
 
 \LMHash{}
 Evaluation of a compound assignment $a$ of the form \code{$e_1$.$v$ $op$= $e_2$} proceeds as follows:
@@ -4720,7 +5159,8 @@
 Then $a$ evaluates to $r$.
 
 \LMHash{}
-The static type of \code{$e_1$?.$v$ $op$= $e_2$} is the static type of \code{$e_1$.$v$ $op$ $e_2$}. Exactly the same static warnings that would be caused by \code{$e_1$.$v$ $op$= $e_2$} are also generated in the case of \code{$e_1$?.$v$ $op$= $e_2$}.
+The static type of \code{$e_1$?.$v$ $op$= $e_2$} is the static type of \code{$e_1$.$v$ $op$ $e_2$}.
+Exactly the same static warnings that would be caused by \code{$e_1$.$v$ $op$= $e_2$} are also generated in the case of \code{$e_1$?.$v$ $op$= $e_2$}.
 
 \LMHash{}
 A compound assignment of the form $C?.v$ $op = e_2$ is equivalent to the expression
@@ -4728,39 +5168,42 @@
 
 \begin{grammar}
 {\bf compoundAssignmentOperator:}`*=';
-      `/=';
-      `\~{}/=';
-      `\%=';
-      `+=';
-      `-=';
-      `{\escapegrammar \lt \lt}=';
-      `{\escapegrammar \gt \gt}=';
-      `{\escapegrammar \gt \gt \gt}=';
-      `\&=';
-      `\^{}=';
-      `$|$=';
-      `??=';
-    .
+  `/=';
+  `\~{}/=';
+  `\%=';
+  `+=';
+  `-=';
+  `{\escapegrammar \lt \lt}=';
+  `{\escapegrammar \gt \gt}=';
+  `{\escapegrammar \gt \gt \gt}=';
+  `\&=';
+  `\^{}=';
+  `$|$=';
+  `??=';
+  .
 \end{grammar}
 
 
-\subsection{ Conditional}
+\subsection{Conditional}
 \LMLabel{conditional}
 
 \LMHash{}
 A {\em conditional expression} evaluates one of two expressions based on a boolean condition.
 
 \begin{grammar}
-  {\bf conditionalExpression:}
-     ifNullExpression (`?' expressionWithoutCascade `{\escapegrammar :}' expressionWithoutCascade)?
-    . % the first  branches could  top level expressions, it seems, but certainly NOT the second
+{\bf conditionalExpression:}ifNullExpression
+  \gnewline{} (`?' expressionWithoutCascade `{\escapegrammar :}' expressionWithoutCascade)?
+  .
 \end{grammar}
 
 \LMHash{}
 Evaluation of a conditional expression $c$ of the form $e_1 ? e_2 : e_3$ proceeds as follows:
 
 \LMHash{}
-First, $e_1$ is evaluated to an object $o_1$.  Then, $o_1$ is  subjected to boolean conversion (\ref{booleanConversion}) producing an object $r$.  If $r$ is \TRUE, then the value of $c$ is the result of evaluating the expression $e_2$. Otherwise the value of $c$ is the result of evaluating the expression $e_3$.
+First, $e_1$ is evaluated to an object $o_1$.
+Then, $o_1$ is subjected to boolean conversion (\ref{booleanConversion}) producing an object $r$.
+If $r$ is \TRUE, then the value of $c$ is the result of evaluating the expression $e_2$.
+Otherwise the value of $c$ is the result of evaluating the expression $e_3$.
 
 \LMHash{}
 If all of the following hold:
@@ -4772,9 +5215,9 @@
 
 then the type of $v$ is known to be $T$ in $e_2$.
 
-
 \LMHash{}
-It is a static type warning if the static type of $e_1$ may not be assigned to \code{bool}.  The static type of $c$ is the least upper bound (\ref{leastUpperBounds}) of the static type of $e_2$ and the static type of $e_3$.
+It is a static type warning if the static type of $e_1$ may not be assigned to \code{bool}.
+The static type of $c$ is the least upper bound (\ref{leastUpperBounds}) of the static type of $e_2$ and the static type of $e_3$.
 
 
 \subsection{If-null Expressions}
@@ -4784,8 +5227,8 @@
 An {\em if-null expression} evaluates an expression and if the result is the null object (\ref{null}), evaluates another.
 
 \begin{grammar}
-{\bf ifNullExpression:}
-  logicalOrExpression (`??' logicalOrExpression)*
+{\bf ifNullExpression:}logicalOrExpression (`??' logicalOrExpression)*
+  .
 \end{grammar}
 
 \LMHash{}
@@ -4802,32 +5245,28 @@
 The static type of $e$ is the least upper bound (\ref{leastUpperBounds}) of the static type of $e_1$ and the static type of $e_2$.
 
 
-\subsection{ Logical Boolean Expressions}
+\subsection{Logical Boolean Expressions}
 \LMLabel{logicalBooleanExpressions}
 
 \LMHash{}
 The logical boolean expressions combine boolean objects using the boolean conjunction and disjunction operators.
 
 \begin{grammar}
-{\bf logicalOrExpression:}
-      logicalAndExpression (`$||$' logicalAndExpression)*
-    .
+{\bf logicalOrExpression:}logicalAndExpression (`$||$' logicalAndExpression)*
+  .
 
-
-{\bf logicalAndExpression:}
-      equalityExpression (`\&\&' equalityExpression)*
-%      bitwiseOrExpression (`\&\&' bitwiseOrExpression)*
-    .
- \end{grammar}
+{\bf logicalAndExpression:}equalityExpression (`\&\&' equalityExpression)*
+  .
+\end{grammar}
 
 \LMHash{}
 A {\em logical boolean expression} is either an equality expression (\ref{equality}), or an invocation of a logical boolean operator on an expression $e_1$ with argument $e_2$.
 
 \LMHash{}
-Evaluation of a logical boolean expression $b$ of the form $e_1 || e_2$ causes the evaluation of $e_1$ which is then  subjected to boolean conversion, producing an object $o_1$; if $o_1$ is \TRUE, the result of evaluating $b$ is \TRUE, otherwise $e_2$ is evaluated to an object $o_2$, which is then subjected to boolean conversion (\ref{booleanConversion}) producing an object $r$, which is the value of $b$.
+Evaluation of a logical boolean expression $b$ of the form $e_1 || e_2$ causes the evaluation of $e_1$ which is then subjected to boolean conversion, producing an object $o_1$; if $o_1$ is \TRUE, the result of evaluating $b$ is \TRUE, otherwise $e_2$ is evaluated to an object $o_2$, which is then subjected to boolean conversion (\ref{booleanConversion}) producing an object $r$, which is the value of $b$.
 
 \LMHash{}
-Evaluation of a logical boolean expression $b$ of the form $e_1 \&\& e_2$ causes the evaluation of $e_1$ which is then subjected to boolean conversion, producing an object $o_1$; if $o_1$ is not  \TRUE, the result of evaluating $b$ is \FALSE, otherwise $e_2$ is evaluated to an object $o_2$, which is then subjected to boolean conversion evaluating to an object $r$, which is the value of $b$.
+Evaluation of a logical boolean expression $b$ of the form $e_1 \&\& e_2$ causes the evaluation of $e_1$ which is then subjected to boolean conversion, producing an object $o_1$; if $o_1$ is not \TRUE, the result of evaluating $b$ is \FALSE, otherwise $e_2$ is evaluated to an object $o_2$, which is then subjected to boolean conversion evaluating to an object $r$, which is the value of $b$.
 
 \LMHash{}
 A logical boolean expression $b$ of the form $e_1 \&\& e_2$ shows that a variable $v$ has type
@@ -4848,115 +5287,117 @@
 then the type of $v$ is known to be $T$ in $e_2$.
 
 \LMHash{}
-It is a static warning if the static type of $e_1$ may not be assigned to \cd{bool} or if the static type of $e_2$ may not be assigned to \cd{bool}. The static type of a logical boolean expression is \code{bool}.
+It is a static warning if the static type of $e_1$ may not be assigned to \code{bool} or if the static type of $e_2$ may not be assigned to \code{bool}.
+The static type of a logical boolean expression is \code{bool}.
 
 
- \subsection{ Equality}
- \LMLabel{equality}
+\subsection{Equality}
+\LMLabel{equality}
 
 \LMHash{}
 Equality expressions test objects for equality.
 
- \begin{grammar}
+\begin{grammar}
 {\bf equalityExpression:}relationalExpression (equalityOperator relationalExpression)?;
-      \SUPER{} equalityOperator relationalExpression
-    .
+  \SUPER{} equalityOperator relationalExpression
+  .
 
 {\bf equalityOperator:}`==';
-      `!='
-    .
- \end{grammar}
+  `!='
+  .
+\end{grammar}
 
 \LMHash{}
 An {\em equality expression} is either a relational expression (\ref{relationalExpressions}), or an invocation of an equality operator on either \SUPER{} or an expression $e_1$, with argument $e_2$.
 
-
 \LMHash{}
 Evaluation of an equality expression $ee$ of the form \code{$e_1$ == $e_2$} proceeds as follows:
 \begin{itemize}
 \item The expression $e_1$ is evaluated to an object $o_1$.
 \item The expression $e_2$ is evaluated to an object $o_2$.
-\item If either $o_1$ or $o_2$ is the null object (\ref{null}), then $ee$ evaluates to \TRUE{} if both $o_1$ and $o_2$ are the null object and to \FALSE{} otherwise.  Otherwise,
+\item If either $o_1$ or $o_2$ is the null object (\ref{null}), then $ee$ evaluates to \TRUE{} if both $o_1$ and $o_2$ are the null object and to \FALSE{} otherwise.
+Otherwise,
 \item evaluation of $ee$ is equivalent to the method invocation \code{$o_1$.==($o_2$)}.
 \end{itemize}
 
-
 \LMHash{}
 Evaluation of an equality expression $ee$ of the form \code{\SUPER{} == $e$} proceeds as follows:
 \begin{itemize}
 \item The expression $e$ is evaluated to an object $o$.
-\item If either \THIS{} or $o$ is the null object (\ref{null}), then $ee$ evaluates to evaluates to \TRUE{} if both \THIS{} and $o$ are the null object and to \FALSE{} otherwise. Otherwise,
+\item If either \THIS{} or $o$ is the null object (\ref{null}), then $ee$ evaluates to evaluates to \TRUE{} if both \THIS{} and $o$ are the null object and to \FALSE{} otherwise.
+Otherwise,
 \item evaluation of $ee$ is equivalent to the method invocation \code{\SUPER{}.==($o$)}.
 \end{itemize}
 
-\commentary{As a result of the above definition, user defined \code{==} methods can assume that their argument is non-null, and avoid the standard boiler-plate prelude:
+\commentary{
+As a result of the above definition, user defined \code{==} methods can assume that their argument is non-null, and avoid the standard boiler-plate prelude:
 
- \code{if (identical(\NULL{}, arg)) return \FALSE{};}
+\code{if (identical(\NULL{}, arg)) return \FALSE{};}
 
 Another implication is that there is never a need to use \code{identical()} to test against \NULL{}, nor should anyone ever worry about whether to write \NULL{} == $e$ or $e$ == \NULL{}.
 }
 
 \LMHash{}
-An equality expression of the form \code{$e_1$ != $e_2$}  is equivalent to the expression \code{!($e_1$ == $e_2$)}. An equality expression of the form \code{\SUPER{} != $e$} is equivalent to the expression \code{!(\SUPER{} == $e$)}.
+An equality expression of the form \code{$e_1$ != $e_2$} is equivalent to the expression \code{!($e_1$ == $e_2$)}.
+An equality expression of the form \code{\SUPER{} != $e$} is equivalent to the expression \code{!(\SUPER{} == $e$)}.
 
-
-
- %The expression $e_1$ is evaluated to an object $o_1$; then the expression $e_2$ is evaluated to an object $o_2$.  Next, if $o_1$ and $o_2$ are the same object, then $ee$ evaluates to \TRUE{}, otherwise $ee$ evaluates to \FALSE{}.
-
+%The expression $e_1$ is evaluated to an object $o_1$; then the expression $e_2$ is evaluated to an object $o_2$.  Next, if $o_1$ and $o_2$ are the same object, then $ee$ evaluates to \TRUE{}, otherwise $ee$ evaluates to \FALSE{}.
 
 \LMHash{}
- The static type of an equality expression is \code{bool}.
+The static type of an equality expression is \code{bool}.
 
 
-\subsection{ Relational Expressions}
+\subsection{Relational Expressions}
 \LMLabel{relationalExpressions}
 
 \LMHash{}
 Relational expressions invoke the relational operators on objects.
 
- \begin{grammar}
-{\bf relationalExpression:}bitwiseOrExpression (typeTest $|$ typeCast $|$  relationalOperator bitwiseOrExpression)?;
-      \SUPER{} relationalOperator bitwiseOrExpression
-    .
-
+\begin{grammar}
+{\bf relationalExpression:}bitwiseOrExpression (typeTest $|$ typeCast $|$
+  \gnewline{} relationalOperator bitwiseOrExpression)?;
+  \SUPER{} relationalOperator bitwiseOrExpression
+  .
 
 {\bf relationalOperator:}`{\escapegrammar \gt=}';
-      `{\escapegrammar \gt}';
-      `{\escapegrammar \lt}=';
-      `{\escapegrammar \lt}'
-    .
- \end{grammar}
+  `{\escapegrammar \gt}';
+  `{\escapegrammar \lt}=';
+  `{\escapegrammar \lt}'
+  .
+\end{grammar}
 
 \LMHash{}
 A {\em relational expression} is either a bitwise expression (\ref{bitwiseExpressions}), or an invocation of a relational operator on either \SUPER{} or an expression $e_1$, with argument $e_2$.
 
 \LMHash{}
-A relational expression of the form  $e_1$ $op$ $e_2$ is equivalent to the method invocation \code{$e_1$.$op$($e_2$)}. A relational expression of the form  \SUPER{} $op$ $e_2$ is equivalent to the method invocation \code{\SUPER{}.$op$($e_2$)}.
+A relational expression of the form $e_1$ $op$ $e_2$ is equivalent to the method invocation \code{$e_1$.$op$($e_2$)}.
+A relational expression of the form \SUPER{} $op$ $e_2$ is equivalent to the method invocation \code{\SUPER{}.$op$($e_2$)}.
 
-\subsection{ Bitwise Expressions}
+
+\subsection{Bitwise Expressions}
 \LMLabel{bitwiseExpressions}
 
 \LMHash{}
 Bitwise expressions invoke the bitwise operators on objects.
 
- \begin{grammar}
+\begin{grammar}
 {\bf bitwiseOrExpression:}bitwiseXorExpression (`$|$' bitwiseXorExpression)*;
-      \SUPER{} (`$|$' bitwiseXorExpression)+
-    .
+  \SUPER{} (`$|$' bitwiseXorExpression)+
+  .
 
 {\bf bitwiseXorExpression:}bitwiseAndExpression (`\^{}' bitwiseAndExpression)*;
-      \SUPER{} (`\^{}' bitwiseAndExpression)+
-    .
+  \SUPER{} (`\^{}' bitwiseAndExpression)+
+  .
 
 {\bf bitwiseAndExpression:}shiftExpression (`\&' shiftExpression)*;
-      \SUPER{} (`\&' shiftExpression)+
-    .
+  \SUPER{} (`\&' shiftExpression)+
+  .
 
 {\bf bitwiseOperator:}`\&';
-      `\^{}';
-      `$|$'
-    .
- \end{grammar}
+  `\^{}';
+  `$|$'
+  .
+\end{grammar}
 
 \LMHash{}
 A {\em bitwise expression} is either a shift expression (\ref{shift}), or an invocation of a bitwise operator on either \SUPER{} or an expression $e_1$, with argument $e_2$.
@@ -4966,97 +5407,110 @@
 A bitwise expression of the form \code{\SUPER{} $op$ $e_2$} is equivalent to the method invocation \code{\SUPER{}.$op$($e_2$)}.
 
 \commentary{
-It should be obvious that the static type rules for these expressions are defined by the equivalence above - ergo, by the type rules for method invocation and the signatures of the operators on the type $e_1$. The same holds in similar situations throughout this specification.
+It should be obvious that the static type rules for these expressions are defined by the equivalence above - ergo, by the type rules for method invocation and the signatures of the operators on the type $e_1$.
+The same holds in similar situations throughout this specification.
 }
 
 
-\subsection{ Shift}
+\subsection{Shift}
 \LMLabel{shift}
 
 \LMHash{}
 Shift expressions invoke the shift operators on objects.
 
- \begin{grammar}
+\begin{grammar}
 {\bf shiftExpression:}additiveExpression (shiftOperator additiveExpression)*;
-      \SUPER{} (shiftOperator additiveExpression)+
-    .
+  \SUPER{} (shiftOperator additiveExpression)+
+  .
 
 {\bf shiftOperator:}`{\escapegrammar \lt\lt'};
-       `{\escapegrammar \gt \gt}';
-       `{\escapegrammar \gt \gt \gt}'
-    .
- \end{grammar}
+  `{\escapegrammar \gt\gt}';
+  `{\escapegrammar \gt \gt \gt}'
+  .
+\end{grammar}
 
 \LMHash{}
 A {\em shift expression} is either an additive expression (\ref{additiveExpressions}), or an invocation of a shift operator on either \SUPER{} or an expression $e_1$, with argument $e_2$.
 
 \LMHash{}
- A shift expression of the form  $e_1$ $op$ $e_2$ is equivalent to the method invocation \code{$e_1$.$op$($e_2$)}. A shift expression of the form  \SUPER{} $op$ $e_2$ is equivalent to the method invocation \code{\SUPER{}.$op$($e_2$)}.
+A shift expression of the form $e_1$ $op$ $e_2$ is equivalent to the method invocation \code{$e_1$.$op$($e_2$)}.
+A shift expression of the form \SUPER{} $op$ $e_2$ is equivalent to the method invocation \code{\SUPER{}.$op$($e_2$)}.
 
 \commentary{
 Note that this definition implies left-to-right evaluation order among shift expressions:
 
 $e_1 << e_2 << e_3$
 
-is evaluated as  $(e_1 << e_2 ).<< (e_3)$  which is equivalent to $(e_1 << e_2) << e_3$.
+is evaluated as $(e_1 << e_2 ).<< (e_3)$ which is equivalent to $(e_1 << e_2) << e_3$.
 The same holds for additive and multiplicative expressions.
 }
 
- \subsection{ Additive Expressions}
+
+\subsection{Additive Expressions}
 \LMLabel{additiveExpressions}
 
 \LMHash{}
 Additive expressions invoke the addition operators on objects.
 
- \begin{grammar}
-{\bf additiveExpression:}multiplicativeExpression (additiveOperator multiplicativeExpression)*;
-      \SUPER{} (additiveOperator multiplicativeExpression)+
-    .
+\begin{grammar}
+{\bf additiveExpression:}multiplicativeExpression
+  \gnewline{} (additiveOperator multiplicativeExpression)*;
+  \SUPER{} (additiveOperator multiplicativeExpression)+
+  .
 
 {\bf additiveOperator:}`+';
-      `-'
-    .
- \end{grammar}
+  `-'
+  .
+\end{grammar}
 
 \LMHash{}
 An {\em additive expression} is either a multiplicative expression (\ref{multiplicativeExpressions}), or an invocation of an additive operator on either \SUPER{} or an expression $e_1$, with argument $e_2$.
 
 \LMHash{}
-An additive expression of the form  $e_1$ $op$ $e_2$ is equivalent to the method invocation \code{$e_1$.$op$($e_2$)}. An additive expression of the form  \SUPER{} $op$ $e_2$ is equivalent to the method invocation \code{\SUPER{}.$op$($e_2$)}.
+An additive expression of the form $e_1$ $op$ $e_2$ is equivalent to the method invocation \code{$e_1$.$op$($e_2$)}.
+An additive expression of the form \SUPER{} $op$ $e_2$ is equivalent to the method invocation \code{\SUPER{}.$op$($e_2$)}.
 
 \LMHash{}
-The static type of an additive expression is usually determined by the signature given in the declaration of the operator used. However, invocations of the operators \cd{+}  and \cd{-} of class \cd{int} are treated specially by the typechecker. The static type of an expression $e_1 + e_2$ where $e_1$ has static type \cd{int} is \cd{int} if the static type of $e_2$ is \cd{int}, and \cd{double} if the static type of $e_2$ is \cd{double}. The static type of an expression $e_1 - e_2$ where $e_1$ has static type \cd{int} is \cd{int} if the static type of $e_2$ is \cd{int}, and \cd{double} if the static type of $e_2$ is \cd{double}.
+The static type of an additive expression is usually determined by the signature given in the declaration of the operator used.
+However, invocations of the operators \code{+} and \code{-} of class \code{int} are treated specially by the typechecker.
+The static type of an expression $e_1 + e_2$ where $e_1$ has static type \code{int} is \code{int} if the static type of $e_2$ is \code{int}, and \code{double} if the static type of $e_2$ is \code{double}.
+The static type of an expression $e_1 - e_2$ where $e_1$ has static type \code{int} is \code{int} if the static type of $e_2$ is \code{int}, and \code{double} if the static type of $e_2$ is \code{double}.
 
 
-\subsection{ Multiplicative Expressions}
+\subsection{Multiplicative Expressions}
 \LMLabel{multiplicativeExpressions}
 
 \LMHash{}
 Multiplicative expressions invoke the multiplication operators on objects.
 
- \begin{grammar}
+\begin{grammar}
 {\bf multiplicativeExpression:}unaryExpression (multiplicativeOperator unaryExpression)*;
-      \SUPER{} (multiplicativeOperator unaryExpression)+
-    .
+  \SUPER{} (multiplicativeOperator unaryExpression)+
+  .
 
 {\bf multiplicativeOperator:}`*';
-      `/';
-      `\%';
-      `\~{}/'
-    .
-
- \end{grammar}
+  `/';
+  `\%';
+  `\~{}/'
+  .
+\end{grammar}
 
 \LMHash{}
  A {\em multiplicative expression} is either a unary expression (\ref{unaryExpressions}), or an invocation of a multiplicative operator on either \SUPER{} or an expression $e_1$, with argument $e_2$.
 
 \LMHash{}
- A multiplicative expression of the form  $e_1$ $op$ $e_2$ is equivalent to the method invocation \code{$e_1$.$op$($e_2$)}. A multiplicative expression of the form  \SUPER{} $op$ $e_2$ is equivalent to the method invocation \code{\SUPER{}.$op$($e_2$)}.
+A multiplicative expression of the form $e_1$ $op$ $e_2$ is equivalent to the method invocation \code{$e_1$.$op$($e_2$)}.
+A multiplicative expression of the form \SUPER{} $op$ $e_2$ is equivalent to the method invocation \code{\SUPER{}.$op$($e_2$)}.
 
 \LMHash{}
-The static type of an multiplicative expression is usually determined by the signature given in the declaration of the operator used. However, invocations of the operators \cd{*}, \cd{\%}  and \cd{\~{}/} of class \cd{int} are treated specially by the typechecker. The static type of an expression $e_1 * e_2$ where $e_1$ has static type \cd{int} is \cd{int} if the static type of $e_2$ is \cd{int}, and \cd{double} if the static type of $e_2$ is \cd{double}. The static type of an expression $e_1 \% e_2$ where $e_1$ has static type \cd{int} is \cd{int} if the static type of $e_2$ is \cd{int}, and \cd{double} if the static type of $e_2$ is \cd{double}.  The static type of an expression \cd{$e_1$ \~{}/ $e_2$} where $e_1$ has static type \cd{int} is \cd{int} if the static type of $e_2$ is \cd{int}.
+The static type of an multiplicative expression is usually determined by the signature given in the declaration of the operator used.
+However, invocations of the operators \code{*}, \code{\%} and \code{\~{}/} of class \code{int} are treated specially by the typechecker.
+The static type of an expression $e_1 * e_2$ where $e_1$ has static type \code{int} is \code{int} if the static type of $e_2$ is \code{int}, and \code{double} if the static type of $e_2$ is \code{double}.
+The static type of an expression $e_1 \% e_2$ where $e_1$ has static type \code{int} is \code{int} if the static type of $e_2$ is \code{int}, and \code{double} if the static type of $e_2$ is \code{double}.
+The static type of an expression \code{$e_1$ \~{}/ $e_2$} where $e_1$ has static type \code{int} is \code{int} if the static type of $e_2$ is \code{int}.
 
-\subsection{ Unary Expressions}
+
+\subsection{Unary Expressions}
 \LMLabel{unaryExpressions}
 
 \LMHash{}
@@ -5064,54 +5518,54 @@
 
 \begin{grammar}
 {\bf unaryExpression:}prefixOperator unaryExpression;
-      awaitExpression;
-      postfixExpression;
-      (minusOperator $|$ tildeOperator) \SUPER{};
-      incrementOperator assignableExpression
-    .
+  awaitExpression;
+  postfixExpression;
+  (minusOperator $|$ tildeOperator) \SUPER{};
+  incrementOperator assignableExpression
+  .
 
- {\bf prefixOperator:}minusOperator;
-      negationOperator;
-      tildeOperator
-    .
+{\bf prefixOperator:}minusOperator;
+  negationOperator;
+  tildeOperator
+  .
 
+{\bf minusOperator:}`-'
+  .
 
-  {\bf minusOperator:}`-';  .
+{\bf negationOperator:}`!'
+  .
 
-
-    {\bf negationOperator:}`!' ;
-      .
-
-    {\bf tildeOperator:}  `\~{}'
-    .
-
-
+{\bf tildeOperator:}`\~{}'
+  .
 \end{grammar}
 
 \LMHash{}
-A {\em unary expression} is either a postfix expression  (\ref{postfixExpressions}), an await expression (\ref{awaitExpressions}) or an invocation of a prefix operator on an expression or an invocation of a unary operator on either \SUPER{} or an expression $e$.
+A {\em unary expression} is either a postfix expression (\ref{postfixExpressions}), an await expression (\ref{awaitExpressions}) or an invocation of a prefix operator on an expression or an invocation of a unary operator on either \SUPER{} or an expression $e$.
 
 \LMHash{}
 The expression $!e$ is equivalent to the expression \code{$e$ ? \FALSE{} : \TRUE{}}.
 
 \LMHash{}
-Evaluation of an expression of the form \code{++$e$} is equivalent to \code{$e$ += 1}.  Evaluation of an expression of the form \code{-{}-$e$} is equivalent to \code{$e$ -= 1}.
+Evaluation of an expression of the form \code{++$e$} is equivalent to \code{$e$ += 1}.
+Evaluation of an expression of the form \code{-{}-$e$} is equivalent to \code{$e$ -= 1}.
 
-%The expression $-e$ is equivalent to the method invocation \code{$e$.-()}.  The expression \code{-\SUPER{}} is equivalent  to the method invocation \code{\SUPER{}.-()}.
+%The expression $-e$ is equivalent to the method invocation \code{$e$.-()}.  The expression \code{-\SUPER{}} is equivalent to the method invocation \code{\SUPER{}.-()}.
 
 \LMHash{}
-An expression of the form \code{$op$ $e$} is equivalent to the method invocation \code{$e.op()$}. An expression of the form \code{$op$ \SUPER{}} is equivalent to the method invocation  (\ref{superInvocation}) \code{\SUPER{}.$op()$}.
+An expression of the form \code{$op$ $e$} is equivalent to the method invocation \code{$e.op()$}.
+An expression of the form \code{$op$ \SUPER{}} is equivalent to the method invocation (\ref{superInvocation}) \code{\SUPER{}.$op()$}.
 
-\subsection{ Await Expressions}
+
+\subsection{Await Expressions}
 \LMLabel{awaitExpressions}
 
 \LMHash{}
 An {\em await expression} allows code to yield control until an asynchronous operation (\ref{functions}) completes.
 
- \begin{grammar}
-{\bf awaitExpression:}
-      \AWAIT{} unaryExpression
- \end{grammar}
+\begin{grammar}
+{\bf awaitExpression:}\AWAIT{} unaryExpression
+  .
+\end{grammar}
 
 \LMHash{}
 Evaluation of an await expression $a$ of the form \AWAIT{} $e$ proceeds as follows:
@@ -5124,54 +5578,58 @@
 Then, if $o$ is not an instance of \code{Future}, then let $f$ be the result of creating a new object using the constructor \code{Future.value()} with $o$ as its argument; otherwise let $f$ be $o$.
 
 \LMHash{}
-Next, the stream associated with the innermost enclosing asynchronous for loop (\ref{asynchronousFor-in}), if any, is paused. The current invocation of the function body immediately enclosing $a$ is suspended until after $f$ completes. At some time after $f$ is completed, control returns to the current invocation. If $f$ has completed with an error $x$ and stack trace $t$, $a$ throws $x$ and $t$ (\ref{evaluation}). If $f$ completes with a value $v$, $a$ evaluates to $v$.
+Next, the stream associated with the innermost enclosing asynchronous for loop (\ref{asynchronousFor-in}), if any, is paused.
+The current invocation of the function body immediately enclosing $a$ is suspended until after $f$ completes.
+At some time after $f$ is completed, control returns to the current invocation.
+If $f$ has completed with an error $x$ and stack trace $t$, $a$ throws $x$ and $t$ (\ref{evaluation}).
+If $f$ completes with a value $v$, $a$ evaluates to $v$.
 
 %Otherwise, the value of $a$ is the value of $e$. If evaluation of $e$ raises an exception $x$, $a$ raises $x$.
 
 \commentary{
-It is a compile-time error if  the function  immediately enclosing  $a$  is not declared asynchronous.  However, this error is simply a syntax error, because in the context of a normal function, \AWAIT{} has no special meaning.
+It is a compile-time error if the function immediately enclosing $a$ is not declared asynchronous.
+However, this error is simply a syntax error, because in the context of a normal function, \AWAIT{} has no special meaning.
 % TODO(lrn): Update this, it's not actually correct,
 % the expression "await(expr)" is valid non-async syntax *and* a valid
 % async await expression.
 }
 
 \rationale{
-An await expression has no meaning in a synchronous function. If such a function were to suspend waiting for a future, it would no longer be synchronous.
+An await expression has no meaning in a synchronous function.
+If such a function were to suspend waiting for a future, it would no longer be synchronous.
 }
 
 \commentary{
-It is not a static warning if the type of $e$ is not a subtype of \code{Future}. Tools may choose to give a hint in such cases.
+It is not a static warning if the type of $e$ is not a subtype of \code{Future}.
+Tools may choose to give a hint in such cases.
 }
 
 \LMHash{}
 The static type of $a$ is $flatten(T)$ (the $flatten$ function is defined in section \ref{functionExpressions}) where $T$ is the static type of $e$.
 
 
-
-\subsection{ Postfix Expressions}
+\subsection{Postfix Expressions}
 \LMLabel{postfixExpressions}
 
 \LMHash{}
 Postfix expressions invoke the postfix operators on objects.
 
- \begin{grammar}
+\begin{grammar}
 {\bf postfixExpression:}assignableExpression postfixOperator;
-      primary selector*
-    .
+  primary selector*
+  .
 
-{\bf postfixOperator:}
-      incrementOperator
-    .
+{\bf postfixOperator:}incrementOperator
+  .
 
 {\bf selector:}assignableSelector;
-      arguments
-    .
+  arguments
+  .
 
 {\bf incrementOperator:}`++';
-      `-{}-'
-    .
-
- \end{grammar}
+  `-{}-'
+  .
+\end{grammar}
 
 \LMHash{}
  A {\em postfix expression} is either a primary expression, a function, method or getter invocation, or an invocation of a postfix operator on an expression $e$.
@@ -5205,7 +5663,6 @@
 \LMHash{}
 The static type of such an expression is the static type of \code{$C$.$v$}.
 
-
 \LMHash{}
 Evaluation of a postfix expression $e$ of the form \code{$e_1$.$v$++}
 proceeds as follows:
@@ -5220,7 +5677,6 @@
 \LMHash{}
 The static type of such an expression is the static type of \code{$e_1$.$v$}.
 
-
 \LMHash{}
 Evaluation of a postfix expression $e$ of the form \code{$e_1$[$e_2$]++}
 proceeds as follows:
@@ -5236,7 +5692,6 @@
 \LMHash{}
 The static type of such an expression is the static type of \code{$e_1$[$e_2$]}.
 
-
 \LMHash{}
 Evaluation of a postfix expression $e$ of the form \code{$v$-{}-}, where $v$ is an identifier, proceeds as follows:
 
@@ -5249,7 +5704,6 @@
 \LMHash{}
 The static type of such an expression is the static type of $v$.
 
-
 \LMHash{}
 Evaluation of a postfix expression $e$ of the form \code{$C$.$v$-{}-}
 proceeds as follows:
@@ -5263,7 +5717,6 @@
 \LMHash{}
 The static type of such an expression is the static type of \code{$C$.$v$}.
 
-
 \LMHash{}
 Evaluation of a postfix expression of the form \code{$e_1$.$v$-{}-}
 proceeds as follows:
@@ -5275,11 +5728,9 @@
 Evaluate \code{$x$.$v$ = $y$ - 1}.
 Then $e$ evaluates to $r$.
 
-
 \LMHash{}
 The static type of such an expression is the static type of \code{$e_1$.$v$}.
 
-
 \LMHash{}
 Evaluation of a postfix expression $e$ of the form \code{$e_1$[$e_2$]-{}-}
 proceeds as follows:
@@ -5326,12 +5777,11 @@
 Evaluate \code{$x$.$v$-{}-} to an object $o$.
 Then $e$ evaluates to $o$.
 
-
 \LMHash{}
 The static type of such an expression is the static type of \code{$e_1$.$v$}.
 
 
-\subsection{ Assignable Expressions}
+\subsection{Assignable Expressions}
 \LMLabel{assignableExpressions}
 
 \LMHash{}
@@ -5339,113 +5789,104 @@
 This section describes how to evaluate these expressions when they do not constitute the complete left hand side of an assignment.
 
 \rationale{
-Of course, if assignable expressions always appeared {\em as} the left hand side, one would have no need for their value, and the rules for evaluating them would be unnecessary. However,  assignable expressions can be subexpressions of other expressions and therefore must be evaluated.
+Of course, if assignable expressions always appeared {\em as} the left hand side, one would have no need for their value, and the rules for evaluating them would be unnecessary.
+However, assignable expressions can be subexpressions of other expressions and therefore must be evaluated.
 }
 
-
-
 \begin{grammar}
-
 {\bf assignableExpression:}primary (arguments* assignableSelector)+;
-      \SUPER{} unconditionalAssignableSelector;
-      identifier
-    .
+  \SUPER{} unconditionalAssignableSelector;
+  identifier
+  .
 
-{\bf unconditionalAssignableSelector:}`[' expression `]'; % again, could be top level
-         `{\escapegrammar .}' identifier
-    .
+{\bf unconditionalAssignableSelector:}`[' expression `]';
+  `{\escapegrammar .}' identifier
+  .
 
-{\bf assignableSelector:}
-         unconditionalAssignableSelector;
-         `{\escapegrammar ?.}' identifier
-    .
-
+{\bf assignableSelector:}unconditionalAssignableSelector;
+  `{\escapegrammar ?.}' identifier
+  .
 \end{grammar}
 
-
 \LMHash{}
 An {\em assignable expression} is either:
 \begin{itemize}
- \item An identifier.
+\item An identifier.
 \item An invocation (possibly conditional) of a getter (\ref{getters}) or list access operator on an expression $e$.
-\item An invocation of a getter or list access operator on  \SUPER{}.
+\item An invocation of a getter or list access operator on \SUPER{}.
 \end{itemize}
 
-
 \LMHash{}
 An assignable expression of the form $id$ is evaluated as an identifier expression (\ref{identifierReference}).
 
 %An assignable expression of the form $e.id(a_1, \ldots, a_n)$ is evaluated as a method invocation (\ref{methodInvocation}).
 
 \LMHash{}
-An assignable expression of the form $e.id$ or $e?.id$ is evaluated as a property extraction  (\ref{propertyExtraction}).
+An assignable expression of the form $e.id$ or $e?.id$ is evaluated as a property extraction (\ref{propertyExtraction}).
 
 \LMHash{}
 An assignable expression of the form \code{$e_1$[$e_2$]} is evaluated as a method invocation of the operator method \code{[]} on $e_1$ with argument $e_2$.
 
 \LMHash{}
-An assignable expression of the form \code{\SUPER{}.id}  is evaluated as a property extraction.
+An assignable expression of the form \code{\SUPER{}.id} is evaluated as a property extraction.
 
 \LMHash{}
-Evaluation of an assignable expression of the form \code{\SUPER{}[$e_2$]} is equivalent to evaluation of the method invocation  \code{\SUPER{}.[]($e_2$)}.
+Evaluation of an assignable expression of the form \code{\SUPER{}[$e_2$]} is equivalent to evaluation of the method invocation \code{\SUPER{}.[]($e_2$)}.
 
-\subsection{ Identifier Reference}
+
+\subsection{Identifier Reference}
 \LMLabel{identifierReference}
 
 \LMHash{}
 An {\em identifier expression} consists of a single identifier; it provides access to an object via an unqualified name.
 
 \begin{grammar}
-{\bf identifier:}
-      IDENTIFIER
-    .
+{\bf identifier:}IDENTIFIER
+  .
 
-{\bf IDENTIFIER\_NO\_DOLLAR:}
-      IDENTIFIER\_START\_NO\_DOLLAR IDENTIFIER\_PART\_NO\_DOLLAR*
-    .
+{\bf IDENTIFIER\_NO\_DOLLAR:}IDENTIFIER\_START\_NO\_DOLLAR IDENTIFIER\_PART\_NO\_DOLLAR*
+  .
 
-{\bf IDENTIFIER:}
-      IDENTIFIER\_START IDENTIFIER\_PART*
-    .
+{\bf IDENTIFIER:}IDENTIFIER\_START IDENTIFIER\_PART*
+  .
 
 {\bf BUILT\_IN\_IDENTIFIER:}\ABSTRACT{};
-      \AS{};
-      \COVARIANT{};
-      \DEFERRED{};
-      \DYNAMIC{};
-      \EXPORT{};
-      \EXTERNAL{};
-      \FACTORY{};
-      \GET{};
-      \IMPLEMENTS{};
-      \IMPORT{};
-      \LIBRARY{};
-      \OPERATOR{};
-      \PART{};
-      \SET{};
-      \STATIC{};
-      \TYPEDEF{}
-    .
+  \AS{};
+  \COVARIANT{};
+  \DEFERRED{};
+  \DYNAMIC{};
+  \EXPORT{};
+  \EXTERNAL{};
+  \FACTORY{};
+  \GET{};
+  \IMPLEMENTS{};
+  \IMPORT{};
+  \LIBRARY{};
+  \OPERATOR{};
+  \PART{};
+  \SET{};
+  \STATIC{};
+  \TYPEDEF{}
+  .
 
- {\bf IDENTIFIER\_START:}IDENTIFIER\_START\_NO\_DOLLAR;
-      `\$'
-    .
+{\bf IDENTIFIER\_START:}IDENTIFIER\_START\_NO\_DOLLAR;
+  `\$'
+  .
 
 {\bf IDENTIFIER\_START\_NO\_DOLLAR:}LETTER;
-      `\_'
-    .
+  `\_'
+  .
 
-{\bf  IDENTIFIER\_PART\_NO\_DOLLAR:}IDENTIFIER\_START\_NO\_DOLLAR;
-      DIGIT
-    .
+{\bf IDENTIFIER\_PART\_NO\_DOLLAR:}IDENTIFIER\_START\_NO\_DOLLAR;
+  DIGIT
+  .
 
 {\bf IDENTIFIER\_PART:}IDENTIFIER\_START;
-      DIGIT
-    .
+  DIGIT
+  .
 
-{\bf qualified:}
-      identifier (`{\escapegrammar .}' identifier)?
-    .
+{\bf qualified:}identifier (`{\escapegrammar .}' identifier)?
+  .
 \end{grammar}
 
 \LMHash{}
@@ -5454,34 +5895,43 @@
 It is a compile-time error to use a built-in identifier other than \DYNAMIC{} in a type annotation or type parameter.
 
 \rationale{
-Built-in identifiers are identifiers that are used as keywords in Dart, but are not reserved words in Javascript. To minimize incompatibilities when porting Javascript code to Dart, we do not make these into reserved words. A built-in identifier may not be used to name a class or type. In other words, they are treated as reserved words when used as types.  This eliminates many confusing situations without causing compatibility problems. After all, a Javascript program has no type declarations or annotations so no clash can occur.  Furthermore, types should begin with an uppercase letter (see the appendix) and so no clash should occur in any Dart user program anyway.
+Built-in identifiers are identifiers that are used as keywords in Dart, but are not reserved words in Javascript.
+To minimize incompatibilities when porting Javascript code to Dart, we do not make these into reserved words.
+A built-in identifier may not be used to name a class or type.
+In other words, they are treated as reserved words when used as types.
+This eliminates many confusing situations without causing compatibility problems.
+After all, a Javascript program has no type declarations or annotations so no clash can occur.
+Furthermore, types should begin with an uppercase letter (see the appendix) and so no clash should occur in any Dart user program anyway.
 }
 
 \LMHash{}
 It is a compile-time error if any of the identifiers \ASYNC, \AWAIT{} or \YIELD{} is used as an identifier in a function body marked with either \ASYNC{}, \ASYNC* or \SYNC*.
 
 \rationale{
-For compatibility reasons, new constructs cannot  rely upon new reserved words or even built-in identifiers. However, the constructs above are only usable in contexts that require special markers introduced concurrently with these constructs, so no old code could use them. Hence the restriction, which treats these names as reserved words in a limited context.
+For compatibility reasons, new constructs cannot rely upon new reserved words or even built-in identifiers.
+However, the constructs above are only usable in contexts that require special markers introduced concurrently with these constructs, so no old code could use them.
+Hence the restriction, which treats these names as reserved words in a limited context.
 }
 
 \LMHash{}
 Evaluation of an identifier expression $e$ of the form $id$ proceeds as follows:
 
-
 \LMHash{}
-Let $d$ be the innermost declaration in the enclosing lexical scope whose name is $id$ or $id=$.  If no such declaration exists in the lexical scope, let $d$ be the declaration of the inherited member named $id$ if it exists.
+Let $d$ be the innermost declaration in the enclosing lexical scope whose name is $id$ or $id=$.
+If no such declaration exists in the lexical scope, let $d$ be the declaration of the inherited member named $id$ if it exists.
 %If no such member exists, let $d$ be the declaration of the static member name $id$ declared in a superclass of the current class, if it exists.
 
 \begin{itemize}
 \item if $d$ is a prefix $p$, a compile-time error occurs unless the token immediately following $d$ is \code{'.'}.
-\item If $d$ is a class or type alias $T$, the value of $e$ is an instance of  class \code{Type} (or a subclass thereof) reifying $T$.
-\item If $d$ is a type parameter $T$, then the value of $e$ is the value of the actual type argument corresponding to $T$ that was  passed to the generative constructor that created the current binding of \THIS{}. If, however, $e$ occurs inside a static member, a compile-time error occurs.
+\item If $d$ is a class or type alias $T$, the value of $e$ is an instance of class \code{Type} (or a subclass thereof) reifying $T$.
+\item If $d$ is a type parameter $T$, then the value of $e$ is the value of the actual type argument corresponding to $T$ that was passed to the generative constructor that created the current binding of \THIS{}.
+If, however, $e$ occurs inside a static member, a compile-time error occurs.
 
-%\commentary{ We are assured that \THIS{} is well defined, because if we were in a static member the reference to $T$ is a compile-time error (\ref{generics}.)}
+%\commentary{We are assured that \THIS{} is well defined, because if we were in a static member the reference to $T$ is a compile-time error (\ref{generics}.)}
 %\item If $d$ is a library variable then:
 %  \begin{itemize}
-%  \item If $d$ is of one of the forms \code{\VAR{} $v$ = $e_i$;} , \code{$T$ $v$ = $e_i$;} , \code{\FINAL{} $v$ = $e_i$;}  or \code{\FINAL{} $T$ $v$ = $e_i$;} and no value has yet been stored into $v$ then the initializer expression $e_i$ is evaluated. If, during the evaluation of $e_i$, the getter for $v$ is referenced, a \code{CyclicInitializationError} is thrown. If the evaluation succeeded yielding an object $o$, let $r$ be $o$, otherwise let $r$ be the null object (\ref{null}). In any case, $r$ is stored into $v$. The value of $e$ is $r$.
- \item  If $d$ is a constant variable of one of the forms  \code{\CONST{} $v$ = $e$;} or \code{\CONST{} $T$ $v$ = $e$;} then the value $id$ is the value of the compile-time constant $e$.
+%  \item If $d$ is of one of the forms \code{\VAR{} $v$ = $e_i$;} , \code{$T$ $v$ = $e_i$;} , \code{\FINAL{} $v$ = $e_i$;} or \code{\FINAL{} $T$ $v$ = $e_i$;} and no value has yet been stored into $v$ then the initializer expression $e_i$ is evaluated. If, during the evaluation of $e_i$, the getter for $v$ is referenced, a \code{CyclicInitializationError} is thrown. If the evaluation succeeded yielding an object $o$, let $r$ be $o$, otherwise let $r$ be the null object (\ref{null}). In any case, $r$ is stored into $v$. The value of $e$ is $r$.
+\item If $d$ is a constant variable of one of the forms \code{\CONST{} $v$ = $e$;} or \code{\CONST{} $T$ $v$ = $e$;} then the value $id$ is the value of the compile-time constant $e$.
 %  Otherwise
 %  \item $e$ evaluates to the current binding of $id$.
 %  \end{itemize}
@@ -5490,7 +5940,7 @@
 \item If $d$ is a static method, top-level function or local function then $e$ evaluates to the function defined by $d$.
 \item If $d$ is the declaration of a static variable, static getter or static setter declared in class $C$, then evaluation of $e$ is equivalent to evaluation of the property extraction (\ref{propertyExtraction}) $C.id$.
 \item If $d$ is the declaration of a library variable, top-level getter or top-level setter, then evaluation of $e$ is equivalent to evaluation of the top level getter invocation (\ref{topLevelGetterInvocation}) $id$.
-\item Otherwise, if $e$ occurs inside a top level or static function (be it function, method, getter,  or setter) or variable initializer, evaluation of $e$ causes a \code{NoSuchMethod} to be thrown.
+\item Otherwise, if $e$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer, evaluation of $e$ causes a \code{NoSuchMethod} to be thrown.
 \item Otherwise, evaluation of $e$ is equivalent to evaluation of the property extraction (\ref{propertyExtraction}) \THIS{}.$id$.
 % This implies that referring to an undefined static getter by simple name is an error, whereas doing so by qualified name is only a warning. Same with assignments.  Revise?
 \end{itemize}
@@ -5503,46 +5953,54 @@
 \item If $d$ is a local variable or formal parameter the static type of $e$ is the type of the variable $id$, unless $id$ is known to have some type $T$, in which case the static type of $e$ is $T$, provided that $T$ is more specific than any other type $S$ such that $v$ is known to have type $S$.
 \item If $d$ is a static method, top-level function or local function the static type of $e$ is the function type defined by $d$.
 \item If $d$ is the declaration of a static variable, static getter or static setter declared in class $C$, the static type of $e$ is the static type of the getter invocation (\ref{propertyExtraction}) $C.id$.
-\item If $d$ is the declaration of a library variable, top-level getter or top-level setter, the static type of $e$  is the static type of the top level getter invocation $id$.
-\item Otherwise, if $e$ occurs inside a top level or static function (be it function, method, getter,  or setter) or variable initializer, the static type of $e$ is \DYNAMIC{}.
+\item If $d$ is the declaration of a library variable, top-level getter or top-level setter, the static type of $e$ is the static type of the top level getter invocation $id$.
+\item Otherwise, if $e$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer, the static type of $e$ is \DYNAMIC{}.
 \item Otherwise, the static type of $e$ is the type of the property extraction (\ref{propertyExtraction}) \THIS{}.$id$.
 \end{itemize}
 
- \commentary{Note that if one declares a setter, we bind to the corresponding getter even if it does not exist.}
+\commentary{
+Note that if one declares a setter, we bind to the corresponding getter even if it does not exist.
+}
 
- \rationale{
- This prevents situations where one uses uncorrelated setters and getters. The intent is to prevent errors when a  getter in a surrounding scope is used accidentally.
- }
+\rationale{
+ This prevents situations where one uses uncorrelated setters and getters.
+The intent is to prevent errors when a getter in a surrounding scope is used accidentally.
+}
 
 \LMHash{}
 It is a static warning if an identifier expression $id$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer and there is no declaration $d$ with name $id$ in the lexical scope enclosing the expression.
 
-\subsection{ Type Test}
+
+\subsection{Type Test}
 \LMLabel{typeTest}
 
 \LMHash{}
 The {\em is-expression} tests if an object is a member of a type.
 
- \begin{grammar}
- {\bf typeTest:}
- isOperator type
- .
+\begin{grammar}
+{\bf typeTest:}isOperator type
+  .
 
-
-{\bf isOperator:}
-\IS{} `!'?
-    .
- \end{grammar}
+{\bf isOperator:}\IS{} `!'?
+  .
+\end{grammar}
 
 \LMHash{}
- Evaluation of the is-expression \code{$e$ \IS{} $T$} proceeds as follows:
+Evaluation of the is-expression \code{$e$ \IS{} $T$} proceeds as follows:
 
 \LMHash{}
-The expression $e$ is evaluated to a value $v$. Then, if $T$ is a malformed or deferred type (\ref{staticTypes}), a dynamic error occurs. Otherwise, if the interface of the class of $v$ is a subtype of $T$, the is-expression evaluates to \TRUE. Otherwise it evaluates to \FALSE.
+The expression $e$ is evaluated to a value $v$.
+Then, if $T$ is a malformed or deferred type (\ref{staticTypes}), a dynamic error occurs.
+Otherwise, if the interface of the class of $v$ is a subtype of $T$, the is-expression evaluates to \TRUE.
+Otherwise it evaluates to \FALSE.
 
-\commentary{It follows that \code{$e$ \IS{} Object} is always true. This makes sense in a language where everything is an object.
+\commentary{
+It follows that \code{$e$ \IS{} Object} is always true.
+This makes sense in a language where everything is an object.
 
-Also note that \code{\NULL{} \IS{} $T$} is false unless $T = \code{Object}$, $T = \code{\DYNAMIC{}}$ or $T = \code{Null}$.  The former two are useless, as is anything of the form \code{$e$ \IS{} Object} or \code{$e$ \IS{} \DYNAMIC{}}.  Users should test for the null object (\ref{null}) directly rather than via type tests.
+Also note that \code{\NULL{} \IS{} $T$} is false unless $T = \code{Object}$, $T = \code{\DYNAMIC{}}$ or $T = \code{Null}$.
+The former two are useless, as is anything of the form \code{$e$ \IS{} Object} or \code{$e$ \IS{} \DYNAMIC{}}.
+Users should test for the null object (\ref{null}) directly rather than via type tests.
 }
 
 \LMHash{}
@@ -5550,9 +6008,9 @@
 
 % Add flow dependent types
 
-
 \LMHash{}
-Let $v$  be a local variable or a formal parameter. An is-expression of the form \code{$v$ \IS{} $T$} shows that $v$  has type $T$ iff $T$ is more specific than the type $S$ of the expression $v$ and  both $T \ne \DYNAMIC{}$ and $S \ne \DYNAMIC{}$.
+Let $v$ be a local variable or a formal parameter.
+An is-expression of the form \code{$v$ \IS{} $T$} shows that $v$ has type $T$ if{}f $T$ is more specific than the type $S$ of the expression $v$ and both $T \ne \DYNAMIC{}$ and $S \ne \DYNAMIC{}$.
 
 \rationale{
 The motivation for the ``shows that v has type T" relation is to reduce spurious warnings thereby enabling a more natural coding style.
@@ -5573,38 +6031,40 @@
 The static type of an is-expression is \code{bool}.
 
 
-\subsection{ Type Cast}
+\subsection{Type Cast}
 \LMLabel{typeCast}
 
 \LMHash{}
 The {\em cast expression} ensures that an object is a member of a type.
 
- \begin{grammar}
- {\bf typeCast:}
- asOperator type
- .
+\begin{grammar}
+{\bf typeCast:}asOperator type
+  .
 
-
-{\bf asOperator:}
-\AS{}
-    .
- \end{grammar}
+{\bf asOperator:}\AS{}
+  .
+\end{grammar}
 
 \LMHash{}
  Evaluation of the cast expression \code{$e$ \AS{} $T$} proceeds as follows:
 
 \LMHash{}
-The expression $e$ is evaluated to a value $v$. Then, if $T$ is a malformed or deferred type (\ref{staticTypes}), a dynamic error occurs. Otherwise, if the interface of the class of $v$ is a subtype of $T$, the cast expression evaluates to $v$. Otherwise, if $v$ is the null object (\ref{null}), the cast expression evaluates to $v$.
-In all other cases,  a \code{CastError} is thrown.
+The expression $e$ is evaluated to a value $v$.
+Then, if $T$ is a malformed or deferred type (\ref{staticTypes}), a dynamic error occurs.
+Otherwise, if the interface of the class of $v$ is a subtype of $T$, the cast expression evaluates to $v$.
+Otherwise, if $v$ is the null object (\ref{null}), the cast expression evaluates to $v$.
+In all other cases, a \code{CastError} is thrown.
 
 \LMHash{}
-The static type of a cast expression  \code{$e$ \AS{} $T$}  is $T$.
+The static type of a cast expression \code{$e$ \AS{} $T$} is $T$.
+
 
 \section{Statements}
 \LMLabel{statements}
 
 \LMHash{}
-A {\em statement} is a fragment of Dart code that can be executed at run time. Statements, unlike expressions, do not evaluate to a value, but are instead executed for their effect on the program state and control flow.
+A {\em statement} is a fragment of Dart code that can be executed at run time.
+Statements, unlike expressions, do not evaluate to a value, but are instead executed for their effect on the program state and control flow.
 
 \label{completion}
 Execution of a statement {\em completes} in one of five ways: either it {\em completes normally}, it {\em breaks} or it {\em continues} (either to a label or without a label), it {\em returns} (with or without a value), or it {\em throws} an exception object and an associated stack trace.
@@ -5627,49 +6087,48 @@
 at that point and throws the same exception object and stack trace.
 \commentary{
 For example, if evaluation of the condition expression of an \IF{} statement throws,
-then so does execution of the \IF{} statement. Likewise, if evaluation of the expression of a \RETURN{} statement throws, so does execution of the \RETURN{} statement.
+then so does execution of the \IF{} statement.
+Likewise, if evaluation of the expression of a \RETURN{} statement throws, so does execution of the \RETURN{} statement.
 }
 
 \LMHash{}
 
- \begin{grammar}
-{\bf statements:}
-      statement*
-    .
+\begin{grammar}
+{\bf statements:}statement*
+  .
 
-
-{\bf statement:}
-      label* nonLabelledStatement
-    .
+{\bf statement:}label* nonLabelledStatement
+  .
 
 {\bf nonLabelledStatement:}block;
-      localVariableDeclaration;
-      forStatement;
-      whileStatement;
-      doStatement;
-      switchStatement;
-      ifStatement;
-      rethrowStatement;
-      tryStatement;
-      breakStatement;
-      continueStatement;
-      returnStatement;
-      yieldStatement;
-      yieldEachStatement;
-      expressionStatement;
-      assertStatement;
-      localFunctionDeclaration
-    .
- \end{grammar}
+  localVariableDeclaration;
+  forStatement;
+  whileStatement;
+  doStatement;
+  switchStatement;
+  ifStatement;
+  rethrowStatement;
+  tryStatement;
+  breakStatement;
+  continueStatement;
+  returnStatement;
+  yieldStatement;
+  yieldEachStatement;
+  expressionStatement;
+  assertStatement;
+  localFunctionDeclaration
+  .
+\end{grammar}
 
- \subsection{Blocks}
- \LMLabel{blocks}
+
+\subsection{Blocks}
+\LMLabel{blocks}
 
 \LMHash{}
 A {\em block statement} supports sequencing of code.
 
 \LMHash{}
-Execution of a block statement $\{s_1, \ldots,  s_n\}$ proceeds as follows:
+Execution of a block statement $\{s_1, \ldots, s_n\}$ proceeds as follows:
 
 \LMHash{}
 For $i \in 1 .. n, s_i$ is executed.
@@ -5685,14 +6144,13 @@
 An {\em expression statement} consists of an expression other than a non-constant map literal (\ref{maps}) that has no explicit type arguments.
 
 \rationale{
-The restriction on maps  is designed to resolve an ambiguity in the grammar, when a statement begins with \{.
+The restriction on maps is designed to resolve an ambiguity in the grammar, when a statement begins with \{.
 }
 
- \begin{grammar}
-{\bf expressionStatement:}
-  expression? `{\escapegrammar ;}'
+\begin{grammar}
+{\bf expressionStatement:}expression? `{\escapegrammar ;}'
   .
- \end{grammar}
+\end{grammar}
 
 \LMHash{}
 Execution of an expression statement \code{$e$;} proceeds by evaluating $e$.
@@ -5700,43 +6158,46 @@
 \LMHash{}
 It is a compile-time error if a non-constant map literal that has no explicit type arguments appears in a place where a statement is expected.
 
+
 \subsection{Local Variable Declaration}
 \LMLabel{localVariableDeclaration}
 
-
 \LMHash{}
 A {\em variable declaration statement }declares a new local variable.
 
- \begin{grammar}
-{\bf localVariableDeclaration:}
-    initializedVariableDeclaration `{\escapegrammar ;}'
+\begin{grammar}
+{\bf localVariableDeclaration:}initializedVariableDeclaration `{\escapegrammar ;}'
   .
- \end{grammar}
+\end{grammar}
 
 \LMHash{}
- Executing a variable declaration statement of one of the forms  \VAR{} $v = e;$, $T$ $v = e; $, \CONST{}  $v = e;$, \CONST{} $T$ $v = e;$, \FINAL{}  $v = e;$ or \FINAL{} $T$ $v = e;$ proceeds as follows:
+ Executing a variable declaration statement of one of the forms \VAR{} $v = e;$, $T$ $v = e; $, \CONST{} $v = e;$, \CONST{} $T$ $v = e;$, \FINAL{} $v = e;$ or \FINAL{} $T$ $v = e;$ proceeds as follows:
 
 \LMHash{}
-The expression $e$ is evaluated to an object $o$. Then, the variable $v$ is set to $o$.
+The expression $e$ is evaluated to an object $o$.
+Then, the variable $v$ is set to $o$.
 
 \LMHash{}
-A variable declaration statement of the form \code{\VAR{} $v$;} is equivalent to \code{\VAR{} $v$ = \NULL{};}. A variable declaration statement of the form \code{$T$ $v$;} is equivalent to \code{$T$ $v$ = \NULL{};}.
+A variable declaration statement of the form \code{\VAR{} $v$;} is equivalent to \code{\VAR{} $v$ = \NULL{};}.
+A variable declaration statement of the form \code{$T$ $v$;} is equivalent to \code{$T$ $v$ = \NULL{};}.
 
 \commentary{
-This holds regardless of the type $T$. For example, \code{int i;} does not cause \code{i} to be initialized to zero. Instead, \code{i} is initialized to the null object (\ref{null}), just as if we had written \VAR{} \code{i;} or \code{Object i;} or \code{Collection<String> i;}.
+This holds regardless of the type $T$.
+For example, \code{int i;} does not cause \code{i} to be initialized to zero.
+Instead, \code{i} is initialized to the null object (\ref{null}), just as if we had written \VAR{} \code{i;} or \code{Object i;} or \code{Collection<String> i;}.
 }
 
 \rationale{
 To do otherwise would undermine the optionally typed nature of Dart, causing type annotations to modify program behavior.
 }
 
-%A variable declaration statement of one of the forms $T$ $v;$, $T$ $v = e;$, \CONST{} $T$ $v = e;$,  or \FINAL{} $T$ $v = e;$ causes a new getter named $v$ with static return type $T$ to be added to the innermost enclosing scope at the point following the variable declaration statement. The result of executing this getter is the value stored in $v$.
+%A variable declaration statement of one of the forms $T$ $v;$, $T$ $v = e;$, \CONST{} $T$ $v = e;$, or \FINAL{} $T$ $v = e;$ causes a new getter named $v$ with static return type $T$ to be added to the innermost enclosing scope at the point following the variable declaration statement. The result of executing this getter is the value stored in $v$.
 
-%A variable declaration statement \VAR{} $v;$, \VAR{} $v = e;$, \CONST{}  $v = e;$ or  \FINAL{}  $v = e;$ causes a new getter named $v$ with static return type  \DYNAMIC{} to be added to the innermost enclosing scope at the point following the variable declaration statement. The result of executing this getter  is the value stored in $v$.
+%A variable declaration statement \VAR{} $v;$, \VAR{} $v = e;$, \CONST{} $v = e;$ or \FINAL{} $v = e;$ causes a new getter named $v$ with static return type \DYNAMIC{} to be added to the innermost enclosing scope at the point following the variable declaration statement. The result of executing this getter is the value stored in $v$.
 
-%A variable declaration statement of one of the forms $T$ $v;$, or $T$ $v = e;$ causes a new setter named $v=$ with argument type $T$ to be added to the innermost enclosing scope at the point following the variable declaration statement. The effect of executing this setter  is to store its argument in $v$.
+%A variable declaration statement of one of the forms $T$ $v;$, or $T$ $v = e;$ causes a new setter named $v=$ with argument type $T$ to be added to the innermost enclosing scope at the point following the variable declaration statement. The effect of executing this setter is to store its argument in $v$.
 
-%A variable declaration statement \VAR{} $v;$, \VAR{} $v = e;$, \CONST{}  $v = e;$ or  \FINAL{}  $v = e;$ causes a new setter named $v=$ with  argument type  \DYNAMIC{} to be added to the innermost enclosing scope at the point following the variable declaration statement. The effect of executing this setter  is to store its argument in $v$.
+%A variable declaration statement \VAR{} $v;$, \VAR{} $v = e;$, \CONST{} $v = e;$ or \FINAL{} $v = e;$ causes a new setter named $v=$ with argument type \DYNAMIC{} to be added to the innermost enclosing scope at the point following the variable declaration statement. The effect of executing this setter is to store its argument in $v$.
 
 %\rationale{
  %The use of getters and setters here is a device to help make the specification more uniform. Introducing getters and setters for local variables has no performance consequences, since they can never be overridden, and so can always be optimized away.  It is not possible to declare a local getter or setter explicitly, since there is little reason to ever do so.
@@ -5749,24 +6210,25 @@
 \LMHash{}
 A function declaration statement declares a new local function (\ref{functionDeclarations}).
 
- \begin{grammar}
-{\bf localFunctionDeclaration:}
-    functionSignature functionBody
+\begin{grammar}
+{\bf localFunctionDeclaration:}functionSignature functionBody
   .
- \end{grammar}
+\end{grammar}
 
 \LMHash{}
-A function declaration statement of one of the forms $id$ $signature$ $\{ statements \}$ or $T$ $id$ $signature$ $\{ statements \}$ causes a new function named $id$ to be added to the innermost enclosing scope. It is a compile-time error to reference a local function before its declaration.
+A function declaration statement of one of the forms $id$ $signature$ $\{ statements \}$ or $T$ $id$ $signature$ $\{ statements \}$ causes a new function named $id$ to be added to the innermost enclosing scope.
+It is a compile-time error to reference a local function before its declaration.
 
-
-\commentary{ This implies that local functions can be directly recursive, but not mutually recursive. Consider these examples:
+\commentary{
+This implies that local functions can be directly recursive, but not mutually recursive.
+Consider these examples:
 }
 
 \begin{dartCode}
-f(x) => x++;  // a top level function
+f(x) => x++; // a top level function
 top() \{ // another top level function
   f(3); // illegal
-  f(x) => x > 0? x*f(x-1): 1;  // recursion is legal
+  f(x) => x > 0? x*f(x-1): 1; // recursion is legal
   g1(x) => h(x, 1); // error: h is not declared yet
   h(x, n) => x > 1? h(x-1, n*x): n; // again, recursion is fine
   g2(x) => h(x, 1); // legal
@@ -5780,24 +6242,27 @@
 \end{dartCode}
 
 \commentary{
-There is no way to write a pair of mutually recursive local functions, because one always has to come before the other is declared. These cases are quite rare, and can always be managed by defining a pair of variables first, then assigning them appropriate closures:
+There is no way to write a pair of mutually recursive local functions, because one always has to come before the other is declared.
+These cases are quite rare, and can always be managed by defining a pair of variables first, then assigning them appropriate closures:
 }
 
 \begin{dartCode}
 top2() \{ // a top level function
- \VAR{} p, q;
+  \VAR{} p, q;
   p = (x) => q(x,x);
   q = (a, b) => a > 0 ? p(a-1): b;
-
 \}
 \end{dartCode}
 
 \rationale{
-The  rules for local functions differ slightly from those for local variables in that a function can be accessed within its declaration but a variable can only be accessed after its declaration. This is because recursive functions are useful whereas recursively defined variables are almost always errors.  It therefore makes sense to harmonize the rules for local functions with those for functions in general rather than with the rules for local variables.
+The rules for local functions differ slightly from those for local variables in that a function can be accessed within its declaration but a variable can only be accessed after its declaration.
+This is because recursive functions are useful whereas recursively defined variables are almost always errors.
+It therefore makes sense to harmonize the rules for local functions with those for functions in general rather than with the rules for local variables.
 }
 
 % elaborate on function identity and equality, run-time type. Likewsie in function expressions (closures) and declarations
 
+
 \subsection{If}
 \LMLabel{if}
 
@@ -5805,14 +6270,13 @@
 The {\em if statement} allows for conditional execution of statements.
 
 \begin{grammar}
-{\bf ifStatement:}
-      \IF{} `(' expression `)' statement ( \ELSE{} statement)?
-    .
+{\bf ifStatement:}\IF{} `(' expression `)' statement ( \ELSE{} statement)?
+  .
 \end{grammar}
 An if statement of the form \code{\IF{} ($e$) $s_1$ \ELSE{} $s_2$} where $s_1$ is not a block statement is equivalent to the statement \code{\IF{} ($e$) \{$s_1$\} \ELSE{} $s_2$}.
 An if statement of the form \code{\IF{} ($e$) $s_1$ \ELSE{} $s_2$} where $s_2$ is not a block statement is equivalent to the statement \code{\IF{} ($e$) $s_1$ \ELSE{} \{$s_2$\}}.
 
-\rationale {
+\rationale{
 The reason for this equivalence is to catch errors such as
 }
 \begin{dartCode}
@@ -5823,16 +6287,24 @@
 \}
 \end{dartCode}
 
-\rationale {
-Under reasonable scope rules  such code is problematic. If we assume that \code{v} is declared in the scope of the method \code{main()}, then when \code{somePredicate} is false, \code{v} will be uninitialized when accessed.  The cleanest approach would be to require a block following the test, rather than an arbitrary statement. However, this goes against long standing custom, undermining Dart's goal of familiarity.  Instead, we choose to insert a block, introducing a scope,  around the statement following the predicate (and similarly for \ELSE{} and loops). This will cause both a warning and a run-time error in the case above.  Of course, if there is a declaration of \code{v} in the surrounding scope, programmers might still be surprised. We expect tools to highlight cases of shadowing to help avoid such situations.
+\rationale{
+Under reasonable scope rules such code is problematic.
+If we assume that \code{v} is declared in the scope of the method \code{main()}, then when \code{somePredicate} is false, \code{v} will be uninitialized when accessed.
+The cleanest approach would be to require a block following the test, rather than an arbitrary statement.
+However, this goes against long standing custom, undermining Dart's goal of familiarity.
+Instead, we choose to insert a block, introducing a scope, around the statement following the predicate (and similarly for \ELSE{} and loops).
+This will cause both a warning and a run-time error in the case above.
+Of course, if there is a declaration of \code{v} in the surrounding scope, programmers might still be surprised.
+We expect tools to highlight cases of shadowing to help avoid such situations.
 }
 
-
 \LMHash{}
 Execution of an if statement of the form \code{\IF{} ($b$) $s_1$ \ELSE{} $s_2$} where $s_1$ and $s_2$ are block statements, proceeds as follows:
 
 \LMHash{}
-First, the expression $b$ is evaluated to an object $o$. Then, $o$ is subjected to boolean conversion (\ref{booleanConversion}), producing an object $r$. If $r$ is \TRUE{}, then the block statement $s_1$ is executed, otherwise the block statement $s_2$ is executed.
+First, the expression $b$ is evaluated to an object $o$.
+Then, $o$ is subjected to boolean conversion (\ref{booleanConversion}), producing an object $r$.
+If $r$ is \TRUE{}, then the block statement $s_1$ is executed, otherwise the block statement $s_2$ is executed.
 
 \LMHash{}
 It is a static type warning if the type of the expression $b$ may not be assigned to \code{bool}.
@@ -5857,42 +6329,44 @@
 The {\em for statement} supports iteration.
 
 \begin{grammar}
-{\bf forStatement:}
-     \AWAIT? \FOR{} `(' forLoopParts `)' statement
-    .
+{\bf forStatement:}\AWAIT? \FOR{} `(' forLoopParts `)' statement
+  .
 
 {\bf forLoopParts:}forInitializerStatement expression? `{\escapegrammar ;}' expressionList?;
-      declaredIdentifier \IN{} expression;
-      identifier \IN{} expression
-    .
+  declaredIdentifier \IN{} expression;
+  identifier \IN{} expression
+  .
 
 {\bf forInitializerStatement:}localVariableDeclaration;
-      expression? `{\escapegrammar ;}'
-    .
- \end{grammar}
+  expression? `{\escapegrammar ;}'
+  .
+\end{grammar}
 
 \LMHash{}
  The for statement has three forms - the traditional for loop and two forms of the for-in statement - synchronous and asynchronous.
 
+
 \subsubsection{For Loop}
 \LMLabel{forLoop}
 
+\LMHash{}
+Execution of a for statement of the form \code{\FOR{} (\VAR{} $v$ = $e_0$ ; $c$; $e$) $s$} proceeds as follows:
 
 \LMHash{}
-Execution of a for statement of the form \code{ \FOR{} (\VAR{} $v$ = $e_0$ ; $c$; $e$) $s$} proceeds as follows:
+If $c$ is empty then let $c^\prime$ be \TRUE{} otherwise let $c^\prime$ be $c$.
 
 \LMHash{}
-If $c$ is empty then let $c^\prime$ be \TRUE{} otherwise let  $c^\prime$ be $c$.
-
-\LMHash{}
-First the variable declaration statement \VAR{} $v = e_0$ is executed. Then:
+First the variable declaration statement \VAR{} $v = e_0$ is executed.
+Then:
 \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^\prime$ be $v$.
+Otherwise, let $v^\prime$ be the variable $v^{\prime\prime}$ 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}). If the result is \FALSE{}, the for loop completes normally. Otherwise, execution continues at step
-\ref{beginIteration}.
+The expression $[v^\prime/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.
@@ -5902,22 +6376,24 @@
 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^{\prime\prime}$ be a fresh variable.
+$v^{\prime\prime}$ is bound to the value of $v^\prime$.
 \item
-The expression $[v^{\prime\prime}/v]e$ is evaluated, and the process recurses at step
-  \ref{beginFor}.
+The expression $[v^{\prime\prime}/v]e$ is evaluated, and the process recurses at step \ref{beginFor}.
 \end{enumerate}
 
 \rationale{
 The definition above is intended to prevent the common error where users create a closure inside a for loop, intending to close over the current binding of the loop variable, and find (usually after a painful process of debugging and learning) that all the created closures have captured the same value - the one current in the last iteration executed.
 
-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.
+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.
 }
 
 \LMHash{}
-It is a static warning if the static type of $c$ may not be assigned to \cd{bool}.
+It is a static warning if the static type of $c$ may not be assigned to \code{bool}.
 
-%A for statement of the form \code{ \FOR{} ($d$ ; $c$; $e$) $s$} is equivalent to the following code:
+%A for statement of the form \code{\FOR{} ($d$ ; $c$; $e$) $s$} is equivalent to the following code:
 
 %\code{
 %\{$d$;
@@ -5929,6 +6405,7 @@
 
 %If $c$ is empty, it is interpreted as \TRUE{}.
 
+
 \subsubsection{For-in}
 \LMLabel{for-in}
 
@@ -5954,11 +6431,14 @@
 and a dynamic error will then occur if the body is executed.
 }
 
+
 \subsubsection{Asynchronous For-in}
 \LMLabel{asynchronousFor-in}
 
 \LMHash{}
-A for-in statement may be asynchronous. The asynchronous form is designed to iterate over streams. An asynchronous for loop is distinguished by the keyword \AWAIT{} immediately preceding the keyword \FOR.
+A for-in statement may be asynchronous.
+The asynchronous form is designed to iterate over streams.
+An asynchronous for loop is distinguished by the keyword \AWAIT{} immediately preceding the keyword \FOR.
 
 \LMHash{}
 Let $D$ be derived from \code{finalConstVarOrType?}.
@@ -5993,7 +6473,6 @@
 For each {\em data event} from $u$,
 the statement $s$ is executed with $id$ bound to the value of the current data event.
 
-\LMHash{}
 \commentary{
 Either execution of $s$ is completely synchronous, or it contains an
 asynchronous construct (\AWAIT{}, \AWAIT{} \FOR{}, \YIELD{} or \YIELD*)
@@ -6015,7 +6494,8 @@
 Otherwise the execution of $f$ is suspended again, waiting for the next stream subscription event, and $u$ is resumed if it has been paused.
 \commentary{
 The \code{resume} call can throw, in which case the asynchronous for
-loop also throws. That should never happen for a correctly implemented stream.
+loop also throws.
+That should never happen for a correctly implemented stream.
 }
 
 \LMHash{}
@@ -6031,9 +6511,12 @@
 When $u$ is done, execution of $f$ completes normally.
 
 \LMHash{}
-It is a compile-time error if an asynchronous for-in statement appears inside a synchronous function (\ref{functions}). It is a compile-time error if a traditional for loop  (\ref{forLoop}) is prefixed by the \AWAIT{}  keyword.
+It is a compile-time error if an asynchronous for-in statement appears inside a synchronous function (\ref{functions}).
+It is a compile-time error if a traditional for loop (\ref{forLoop}) is prefixed by the \AWAIT{} keyword.
 
-\rationale{An asynchronous loop would make no sense within a synchronous function, for the same reasons that an await expression makes no sense in a synchronous function.}
+\rationale{
+An asynchronous loop would make no sense within a synchronous function, for the same reasons that an await expression makes no sense in a synchronous function.
+}
 
 
 \subsection{While}
@@ -6043,20 +6526,19 @@
 The while statement supports conditional iteration, where the condition is evaluated prior to the loop.
 
 \begin{grammar}
-{\bf whileStatement:}
-      \WHILE{} `(' expression `)' statement  % could do top level here, and in for
-.
- \end{grammar}
+{\bf whileStatement:}\WHILE{} `(' expression `)' statement
+  .
+\end{grammar}
 
 \LMHash{}
 Execution of a while statement of the form \code{\WHILE{} ($e$) $s$;} proceeds as follows:
 
 \LMHash{}
-The expression $e$ is evaluated to an object $o$. Then, $o$ is subjected to boolean conversion (\ref{booleanConversion}), producing an object $r$.
+The expression $e$ is evaluated to an object $o$.
+Then, $o$ is subjected to boolean conversion (\ref{booleanConversion}), producing an object $r$.
 
 \LMHash{}
-If $r$ is \FALSE{}, then execution of the while statement completes normally
-(\ref{completion}).
+If $r$ is \FALSE{}, then execution of the while statement completes normally (\ref{completion}).
 
 \LMHash{}
 Otherwise $r$ is \TRUE{} and then the statement $\{s\}$ is executed.
@@ -6078,11 +6560,9 @@
 The do statement supports conditional iteration, where the condition is evaluated after the loop.
 
 \begin{grammar}
-{\bf doStatement:}
-    \DO{} statement \WHILE{} `(' expression `)' `{\escapegrammar ;}'% could do top level here
-      .
- \end{grammar}
-
+{\bf doStatement:}\DO{} statement \WHILE{} `(' expression `)' `{\escapegrammar ;}'
+  .
+\end{grammar}
 
 \LMHash{}
 Execution of a do statement of the form \code{\DO{} $s$ \WHILE{} ($e$);} proceeds as follows:
@@ -6092,13 +6572,15 @@
 If that execution continues with no label, or to a label (\ref{labels}) that prefixes the do statement (\ref{completion}), then the execution of $s$ is treated as if it had completed normally.
 
 \LMHash{}
-Then, the expression $e$ is evaluated to an object $o$. Then, $o$ is subjected to boolean conversion (\ref{booleanConversion}), producing an object $r$.
+Then, the expression $e$ is evaluated to an object $o$.
+Then, $o$ is subjected to boolean conversion (\ref{booleanConversion}), producing an object $r$.
 If $r$ is \FALSE{}, execution of the do statement completes normally (\ref{completion}).
 If $r$ is \TRUE{}, then the do statement is re-executed.
 
 \LMHash{}
 It is a static type warning if the static type of $e$ may not be assigned to \code{bool}.
 
+
 \subsection{Switch}
 \LMLabel{switch}
 
@@ -6106,19 +6588,15 @@
 The {\em switch statement} supports dispatching control among a large number of cases.
 
 \begin{grammar}
-{\bf switchStatement:}
-      \SWITCH{} `(' expression `)' `\{' switchCase* defaultCase? `\}'% could do top level here and in cases
-    .
+{\bf switchStatement:}\SWITCH{} `(' expression `)' `\{' switchCase* defaultCase? `\}'
+  .
 
+{\bf switchCase:}label* \CASE{} expression `{\escapegrammar :}' statements
+  .
 
-{\bf switchCase:}
-      label* \CASE{} expression `{\escapegrammar :}' statements
-    .
-
-{\bf defaultCase:}
-      label*  \DEFAULT{} `{\escapegrammar :}' statements
-    .
- \end{grammar}
+{\bf defaultCase:}label* \DEFAULT{} `{\escapegrammar :}' statements
+  .
+\end{grammar}
 
 \LMHash{}
  Given a switch statement of the form
@@ -6142,26 +6620,30 @@
 \}
 \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 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
- \item instances of a class that implements \cd{int}, for all $k \in 1..n$,  or
- \item instances of a class that implements \cd{String}, for all $k \in 1..n$.
- \end{itemize}
+ 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
+\item instances of a class that implements \code{int}, for all $k \in 1 .. n$, or
+\item instances of a class that implements \code{String}, for all $k \in 1 .. n$.
+\end{itemize}
 
-\commentary{In other words,  all the expressions in the cases evaluate to constants of the exact same user defined class or are of certain known types.  Note that the values of the expressions are known at compile time, and are independent of any static type annotations.
+\commentary{
+In other words, all the expressions in the cases evaluate to constants of the exact same user defined class or are of certain known types.
+Note that the values of the expressions are known at compile time, and are independent of any static type annotations.
 }
 
 \LMHash{}
-It is a compile-time error if the class $C$ has an implementation of the operator $==$ other than the one inherited from \code{Object} unless the value of the expression is a string, an integer, literal symbol or the result of invoking a constant constructor of class \cd{Symbol}.
+It is a compile-time error if the class $C$ has an implementation of the operator $==$ other than the one inherited from \code{Object} unless the value of the expression is a string, an integer, literal symbol or the result of invoking a constant constructor of class \code{Symbol}.
 
- \rationale{
- The prohibition on user defined equality allows us to implement the switch efficiently for user defined types. We could formulate matching in terms of identity instead with the same efficiency. However, if a type defines an equality operator, programmers would find it quite surprising that equal objects did not match.
-
- }
+\rationale{
+The prohibition on user defined equality allows us to implement the switch efficiently for user defined types.
+We could formulate matching in terms of identity instead with the same efficiency.
+However, if a type defines an equality operator, programmers would find it quite surprising that equal objects did not match.
+}
 
 \commentary{
-The \SWITCH{}  statement should only be used in very limited situations (e.g., interpreters or scanners).
+The \SWITCH{} statement should only be used in very limited situations (e.g., interpreters or scanners).
 }
 
 \LMHash{}
@@ -6189,12 +6671,16 @@
 proceeds as follows:
 
 \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$.
+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$.
 
-\commentary{Note that if there are no case clauses ($n = 0$), the type of $e$ does not matter.}
+\commentary{
+Note that if there are no case clauses ($n = 0$), the type of $e$ does not matter.
+}
 
 \LMHash{}
-Next, the case clause \CASE{} $e_{1}$: $s_{1}$ is matched against $id$, if $n > 0$. Otherwise if there is a \DEFAULT{} clause, the case statements $s_{n+1}$ are executed (\ref{case-execute}).
+Next, the case clause \CASE{} $e_{1}$: $s_{1}$ is matched against $id$, if $n > 0$.
+Otherwise if there is a \DEFAULT{} clause, the case statements $s_{n+1}$ are executed (\ref{case-execute}).
 
 \LMHash{}
 Matching of a \CASE{} clause \CASE{} $e_{k}: s_{k}$ of a switch statement
@@ -6212,8 +6698,11 @@
 
 \LMHash{}
 The expression \code{$e_k$ == $id$} is evaluated to an object $o$ which is then subjected to boolean conversion evaluating to a value $v$.
-If $v$ is not \TRUE{} the following case, \CASE{} $e_{k+1}: s_{k+1}$ is matched against $id$ if $k < n$. If $k = n$, then the \DEFAULT{} clause's statements are executed (\ref{case-execute}).
-If $v$ is \TRUE{}, let $h$ be the smallest number such that $h \ge k$ and $s_h$ is non-empty. If no such $h$ exists, let $h = n + 1$. The case statements $s_h$ are then executed (\ref{case-execute}).
+If $v$ is not \TRUE{} the following case, \CASE{} $e_{k+1}: s_{k+1}$ is matched against $id$ if $k < n$.
+If $k = n$, then the \DEFAULT{} clause's statements are executed (\ref{case-execute}).
+If $v$ is \TRUE{}, let $h$ be the smallest number such that $h \ge k$ and $s_h$ is non-empty.
+If no such $h$ exists, let $h = n + 1$.
+The case statements $s_h$ are then executed (\ref{case-execute}).
 
 \LMHash{}
 Matching of a \CASE{} clause \CASE{} $e_{k}: s_{k}$ of a switch statement
@@ -6231,9 +6720,9 @@
 \LMHash{}
 The expression \code{$e_k$ == $id$} is evaluated to an object $o$ which is then subjected to boolean conversion evaluating to a value $v$.
 If $v$ is not \TRUE{} the following case, \CASE{} $e_{k+1}: s_{k+1}$ is matched against $id$ if $k < n$.
-If $v$ is \TRUE{}, let $h$ be the smallest integer such that $h \ge k$ and $s_h$ is non-empty. If such a $h$ exists, the case statements $s_h$ are executed (\ref{case-execute}). Otherwise the switch statement completes normally (
-ref{completion}).
-
+If $v$ is \TRUE{}, let $h$ be the smallest integer such that $h \ge k$ and $s_h$ is non-empty.
+If such a $h$ exists, the case statements $s_h$ are executed (\ref{case-execute}).
+Otherwise the switch statement completes normally (\ref{completion}).
 
 \LMHash{}
 It is a static warning if the type of $e$ may not be assigned to the type of $e_k$.
@@ -6242,9 +6731,21 @@
 It is a static warning $s$ is not a \BREAK{}, \CONTINUE{}, \RETHROW{} or \RETURN{} statement or an expression statement where the expression is a \THROW{} expression.
 
 \rationale{
-The behavior of switch cases intentionally differs from the C tradition.  Implicit fall through is a known cause of programming errors and therefore disallowed.  Why not simply break the flow implicitly at the end of every case, rather than requiring explicit code to do so?  This would indeed be cleaner.  It would also be cleaner to insist that each case have a single (possibly compound) statement.  We have chosen not to do so in order to facilitate porting of switch statements from other languages.  Implicitly breaking the control flow at the end of a case would silently alter the meaning of ported code that relied on fall-through, potentially forcing the programmer to deal with subtle bugs. Our design ensures that the difference is immediately brought to the coder's attention.  The programmer will be notified at compile time if they forget to end a case with a statement that terminates the straight-line control flow. We could make this warning a compile-time error, but refrain from doing so because do not wish to force the programmer to deal with this issue immediately while porting code.  If developers ignore the warning and run their code, a run-time error will prevent the program from misbehaving in hard-to-debug ways (at least with respect to this issue).
+The behavior of switch cases intentionally differs from the C tradition.
+Implicit fall through is a known cause of programming errors and therefore disallowed.
+Why not simply break the flow implicitly at the end of every case, rather than requiring explicit code to do so?
+This would indeed be cleaner.
+It would also be cleaner to insist that each case have a single (possibly compound) statement.
+We have chosen not to do so in order to facilitate porting of switch statements from other languages.
+Implicitly breaking the control flow at the end of a case would silently alter the meaning of ported code that relied on fall-through, potentially forcing the programmer to deal with subtle bugs.
+Our design ensures that the difference is immediately brought to the coder's attention.
+The programmer will be notified at compile time if they forget to end a case with a statement that terminates the straight-line control flow.
+We could make this warning a compile-time error, but refrain from doing so because do not wish to force the programmer to deal with this issue immediately while porting code.
+If developers ignore the warning and run their code, a run-time error will prevent the program from misbehaving in hard-to-debug ways (at least with respect to this issue).
 
-The sophistication of the analysis of fall-through is another issue. For now, we have opted for a very straightforward syntactic requirement. There are obviously situations where code does not fall through, and yet does not conform to these simple rules, e.g.:
+The sophistication of the analysis of fall-through is another issue.
+For now, we have opted for a very straightforward syntactic requirement.
+There are obviously situations where code does not fall through, and yet does not conform to these simple rules, e.g.:
 }
 
 \begin{dartCode}
@@ -6258,18 +6759,18 @@
 }
 
 \LMHash{}
- It is a static warning if all of the following conditions hold:
- \begin{itemize}
-\item  The switch statement does not have a default clause.
- \item The static type of $e$ is an enumerated typed with elements $id_1, \ldots, id_n$.
-\item The sets $\{e_1, \ldots,  e_k\} $ and $\{id_1, \ldots, id_n\}$ are not the same.
+It is a static warning if all of the following conditions hold:
+\begin{itemize}
+\item The switch statement does not have a default clause.
+\item The static type of $e$ is an enumerated typed with elements $id_1, \ldots, id_n$.
+\item The sets $\{e_1, \ldots, e_k\} $ and $\{id_1, \ldots, id_n\}$ are not the same.
 \end{itemize}
 
 \commentary{
 In other words, a warning will be issued if a switch statement over an enum is not exhaustive.
 }
 
-\LMHash{}
+
 \subsubsection{Switch case statements}
 \LMLabel{case-execute}
 
@@ -6308,71 +6809,69 @@
 and execution of the switch case completes normally.
 
 \commentary{
-In other words, there is no implicit fall-through between non-empty cases. The last case in a switch (default or otherwise) can `fall-through' to the end of the statement.
+In other words, there is no implicit fall-through between non-empty cases.
+The last case in a switch (default or otherwise) can `fall-through' to the end of the statement.
 }
 
 If execution of $\{s_h\}$ breaks with no label (\ref{completion}), then the execution of the switch statement completes normally.
 
 If execution of $\{s_h\}$ continues to a label (\ref{completion}), and the label is $label_{ij}$, where $1 \le i \le n+1$ if the \SWITCH{} statement has a \DEFAULT{}, or $1 \le i \le n$ if there is no \DEFAULT{}, and where $1 \le j \le j_{i}$, then
-let $h$ be the smallest number such that $h \ge i$ and $s_h$ is non-empty. If no such $h$ exists, let $h = n + 1$ if the \SWITCH{} statement has a \DEFAULT{}, otherwise let $h = n$.
+let $h$ be the smallest number such that $h \ge i$ and $s_h$ is non-empty.
+If no such $h$ exists, let $h = n + 1$ if the \SWITCH{} statement has a \DEFAULT{}, otherwise let $h = n$.
 The case statements $s_h$ are then executed (\ref{case-execute}).
 
 If execution of $\{s_h\}$ completes in any other way, execution of the \SWITCH{} statement completes in the same way.
 
 
-\subsection{ Rethrow}
+\subsection{Rethrow}
 \LMLabel{rethrow}
 
-
 \LMHash{}
-The {\em rethrow statement}  is used to re-throw an exception and its associated stack trace.
+The {\em rethrow statement} is used to re-throw an exception and its associated stack trace.
 
- \begin{grammar}
-{\bf rethrowStatement:}
-     \RETHROW{}  `{\escapegrammar ;}'
-    .
- \end{grammar}
+\begin{grammar}
+{\bf rethrowStatement:}\RETHROW{} `{\escapegrammar ;}'
+  .
+\end{grammar}
 
 \LMHash{}
 Execution of a \code{\RETHROW{}} statement proceeds as follows:
 
 \LMHash{}
-Let $f$ be the immediately enclosing function, and let \code{\ON{} $T$ \CATCH{} ($p_1$, $p_2$)}  be the immediately enclosing catch clause (\ref{try}).
+Let $f$ be the immediately enclosing function, and let \code{\ON{} $T$ \CATCH{} ($p_1$, $p_2$)} be the immediately enclosing catch clause (\ref{try}).
 
 \rationale{
-A \RETHROW{} statement always appears inside a \CATCH{} clause, and any \CATCH{} clause is semantically equivalent to some \CATCH{} clause of the form \code{\ON{} $T$ \CATCH{} (p1, p2)}.  So we can assume that the \RETHROW{} is enclosed in a \CATCH{} clause of that form.
+A \RETHROW{} statement always appears inside a \CATCH{} clause, and any \CATCH{} clause is semantically equivalent to some \CATCH{} clause of the form \code{\ON{} $T$ \CATCH{} (p1, p2)}.
+So we can assume that the \RETHROW{} is enclosed in a \CATCH{} clause of that form.
 }
 
 \LMHash{}
 The \RETHROW{} statement {\em throws} (\ref{completion}) with $p_1$ as the exception object and $p_2$ as the stack trace.
 
 \LMHash{}
-It is a compile-time error if a  \code{\RETHROW{}} statement is not enclosed within an \ON-\CATCH{} clause.
+It is a compile-time error if a \code{\RETHROW{}} statement is not enclosed within an \ON-\CATCH{} clause.
 
 
-\subsection{ Try}
+\subsection{Try}
 \LMLabel{try}
 
 \LMHash{}
 The try statement supports the definition of exception handling code in a structured way.
 
 \begin{grammar}
-{\bf tryStatement:}
-      \TRY{} block (onPart+ finallyPart? $|$ finallyPart)
-    .
+{\bf tryStatement:}\TRY{} block (onPart+ finallyPart? $|$ finallyPart)
+  .
 
- {\bf onPart:}catchPart block;
-    \ON{} type catchPart? block
-   .
+{\bf onPart:}catchPart block;
+  \ON{} type catchPart? block
+  .
 
-{\bf catchPart:}
-      \CATCH{} `(' identifier (`,' identifier)? `)'
-    .
+{\bf catchPart:}\CATCH{} `(' identifier (\gcomma{} identifier)? `)'
+  .
 
-{\bf finallyPart:}
-      \FINALLY{} block
-    .
- \end{grammar}
+{\bf finallyPart:}\FINALLY{} block
+  .
+\end{grammar}
 
 \LMHash{}
 A try statement consists of a block statement, followed by at least one of:
@@ -6384,25 +6883,28 @@
 \end{enumerate}
 
 \rationale{
-The syntax is designed to be upward compatible with existing Javascript programs. The \ON{} clause can be omitted, leaving what looks like a Javascript catch clause.
+The syntax is designed to be upward compatible with existing Javascript programs.
+The \ON{} clause can be omitted, leaving what looks like a Javascript catch clause.
 }
 
 \LMHash{}
 A try statement of the form \code{\TRY{} $s_1$ $on-catch_1 \ldots on-catch_n$;} is equivalent to the statement \code{\TRY{} $s_1$ $on-catch_1 \ldots on-catch_n$ \FINALLY{} $\{\}$}.
 
 \LMHash{}
-An \ON{}-\CATCH{} clause of the form  \code{\ON{} $T$ \CATCH{} ($p_1$) $s$} is equivalent to an \ON{}-\CATCH{} clause  \code{\ON{} $T$ \CATCH{} ($p_1$, $p_2$) $s$} where $p_2$ is a fresh identifier.
+An \ON{}-\CATCH{} clause of the form \code{\ON{} $T$ \CATCH{} ($p_1$) $s$} is equivalent to an \ON{}-\CATCH{} clause \code{\ON{} $T$ \CATCH{} ($p_1$, $p_2$) $s$} where $p_2$ is a fresh identifier.
 
 \LMHash{}
-An \ON{}-\CATCH{} clause of the form  \code{\ON{} $T$ $s$} is equivalent to an \ON{}-\CATCH{} clause  \code{\ON{} $T$ \CATCH{} ($p_1$, $p_2$) $s$} where $p_1$ and $p_2$ are fresh identifiers.
+An \ON{}-\CATCH{} clause of the form \code{\ON{} $T$ $s$} is equivalent to an \ON{}-\CATCH{} clause \code{\ON{} $T$ \CATCH{} ($p_1$, $p_2$) $s$} where $p_1$ and $p_2$ are fresh identifiers.
 
 \LMHash{}
-An \ON{}-\CATCH{} clause of the form  \code{\CATCH{} ($p$) $s$} is equivalent to an \ON{}-\CATCH{} clause \code{\ON{} \DYNAMIC{} \CATCH{} ($p$, $p_2$) $s$} where $p_2$ is a fresh identifier.
+An \ON{}-\CATCH{} clause of the form \code{\CATCH{} ($p$) $s$} is equivalent to an \ON{}-\CATCH{} clause \code{\ON{} \DYNAMIC{} \CATCH{} ($p$, $p_2$) $s$} where $p_2$ is a fresh identifier.
 
 An \ON{}-\CATCH{} clause of the form \code{\CATCH{} ($p_1$, $p_2$) $s$} is equivalent to an \ON{}-\CATCH{} clause \code{\ON{} \DYNAMIC{} \CATCH{} ($p_1$, $p_2$) $s$}.
 
 \LMHash{}
-An \ON{}-\CATCH{} clause of the form   \code{\ON{} $T$ \CATCH{} ($p_1$, $p_2$) $s$} introduces a new scope $CS$ in which final local variables specified by $p_1$ and $p_2$ are defined. The statement $s$ is enclosed within $CS$. The static type of $p_1$ is $T$ and the static type of $p_2$ is \code{StackTrace}.
+An \ON{}-\CATCH{} clause of the form \code{\ON{} $T$ \CATCH{} ($p_1$, $p_2$) $s$} introduces a new scope $CS$ in which final local variables specified by $p_1$ and $p_2$ are defined.
+The statement $s$ is enclosed within $CS$.
+The static type of $p_1$ is $T$ and the static type of $p_2$ is \code{StackTrace}.
 
 \LMHash{}
 Execution of a \TRY{} statement $s$ of the form:
@@ -6430,6 +6932,7 @@
 If $T_1$ is a malformed or deferred type (\ref{staticTypes}), then performing a match causes a run-time error.
 It is a static warning if $T_i$, $1 \le i \le n$ is a deferred or malformed type.
 
+
 \subsubsection{\ON{}-\CATCH{} clauses}
 \LMLabel{on-catch}
 
@@ -6461,53 +6964,59 @@
 \end{dartCode}
 
 
-\subsection{ Return}
+\subsection{Return}
 \LMLabel{return}
 
 \LMHash{}
 The {\em return statement} returns a result to the caller of a synchronous function, completes the future associated with an asynchronous function or terminates the stream or iterable associated with a generator (\ref{functions}).
 
-
- \begin{grammar}
-{\bf returnStatement:}
-    \RETURN{} expression? `{\escapegrammar ;}' % could do top level here
-    .
- \end{grammar}
+\begin{grammar}
+{\bf returnStatement:}\RETURN{} expression? `{\escapegrammar ;}'
+  .
+\end{grammar}
 
 \LMHash{}
 Executing a return statement \code{\RETURN{} $e$;} proceeds as follows:
 
 \LMHash{}
+Let $T$ be the static type of $e$, let $f$ be the immediately enclosing function, and let $S$ be the actual return type (\ref{actualTypeOfADeclaration}) of $f$.
+
+\LMHash{}
 First the expression $e$ is evaluated, producing an object $o$.
-Then the return statement returns the value $o$ (\ref{completion}).
+If the body of $f$ is marked \ASYNC{} (\ref{functions}) and the run-time type of $o$ is a subtype of \code{Future<$flatten(S)$>}, then let $r$ be the result of evaluating \code{await $v$} where $v$ is a fresh variable bound to $o$. Otherwise let $r$ be $o$.
+Then the return statement returns the value $r$ (\ref{completion}).
 
 \LMHash{}
-Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing function.
+It is a static type warning if the body of $f$ is marked \ASYNC{} and the type \code{Future<$flatten(T)$>} (\ref{functionExpressions}) may not be assigned to the declared return type of $f$.
+Otherwise, it is a static type warning if $T$ may not be assigned to the declared return type of $f$.
 
 \LMHash{}
-It is a static type warning if the body of $f$ is marked \ASYNC{} and the type \code{Future<$flatten$(T)>} (\ref{functionExpressions}) may not be assigned to the declared return type of $f$.    Otherwise, it is a static type warning if $T$ may not be assigned to the declared return type of $f$.
-
-\LMHash{}
-Let $S$ be the run-time type of $o$. In checked mode:
+Let $S$ be the run-time type of $o$.
+In checked mode:
 \begin{itemize}
-\item  If the body of $f$ is marked \ASYNC{} (\ref{functions})
+\item If the body of $f$ is marked \ASYNC{} (\ref{functions})
 it is a dynamic type error if $o$ is not the null object (\ref{null}),
+% TODO(lrn): Remove the next line when void is a proper supertype of all types.
 the actual return type (\ref{actualTypeOfADeclaration}) of $f$ is not \VOID,
-and \code{Future<$flatten$(S)>} is not a subtype of the actual return type of $f$.
+and \code{Future<$flatten(S)$>} is not a subtype of the actual return type of $f$.
 % TODO(lrn): The "void foo() async { return e }" case is somewhat speculative.
 % When we disallow "return e" in a void function, we might also want to revisit
 % this rule. Currently it also covers the "void foo() async => e;" case, which
 % we might want to allow.
 \item Otherwise, it is a dynamic type error if $o$ is not the null object (\ref{null}),
+% TODO(lrn): Remove the next line when void is a proper supertype of all types.
 the actual return type of $f$ is not \VOID{},
-and the run-time type of $o$ is not a subtype of the actual return type of $f$.
+and $S$ is not a subtype of the actual return type of $f$.
 \end{itemize}
 
 \LMHash{}
 It is a compile-time error if a return statement of the form \code{\RETURN{} $e$;} appears in a generative constructor (\ref{generativeConstructors}).
 
 \rationale{
-It is quite easy to forget to add the factory prefix for a constructor, accidentally converting a factory into a generative constructor. The static checker may detect a type mismatch in some, but not all, of these cases. The rule above helps catch such errors, which can otherwise be very hard to recognize. There is no real downside to it, as returning a value from a generative constructor is meaningless.
+It is quite easy to forget to add the factory prefix for a constructor, accidentally converting a factory into a generative constructor.
+The static checker may detect a type mismatch in some, but not all, of these cases.
+The rule above helps catch such errors, which can otherwise be very hard to recognize.
+There is no real downside to it, as returning a value from a generative constructor is meaningless.
 }
 
 \LMHash{}
@@ -6521,16 +7030,22 @@
 Let $f$ be the function immediately enclosing a return statement of the form \RETURN{};.
 It is a static warning if $f$ is neither a generator nor a generative constructor and either:
 \begin{itemize}
-\item  $f$ is synchronous and the return type of $f$ may not be assigned to \VOID{} (\ref{typeVoid}) or,
-\item  $f$ is asynchronous and the return type of $f$ may not be assigned to \code{Future<Null>}.
+\item $f$ is synchronous and the return type of $f$ may not be assigned to \VOID{} (\ref{typeVoid}) or,
+\item $f$ is asynchronous and the return type of $f$ may not be assigned to \code{Future<Null>}.
 \end{itemize}
 
- \commentary{
-Hence, a static warning will not be issued if $f$ has no declared return type, since the return type would be  \DYNAMIC{} and  \DYNAMIC{} may be assigned to \VOID{} and to \code{Future<Null>}. However, any synchronous non-generator function that declares a return type must return an expression explicitly.
+\commentary{
+Hence, a static warning will not be issued if $f$ has no declared return type, since the return type would be \DYNAMIC{} and \DYNAMIC{} may be assigned to \VOID{} and to \code{Future<Null>}.
+However, any synchronous non-generator function that declares a return type must return an expression explicitly.
 }
-\rationale{This helps catch situations where users forget to return a value in a return statement.}
+\rationale{
+This helps catch situations where users forget to return a value in a return statement.
+}
 
-\rationale{ An asynchronous non-generator always returns a future of some sort. If no expression is given, the future will be completed with the null object (\ref{null}) and this motivates the requirement above.}
+\rationale{
+An asynchronous non-generator always returns a future of some sort.
+If no expression is given, the future will be completed with the null object (\ref{null}) and this motivates the requirement above.
+}
 
 \commentary{
 Leaving the return type of a function marked \ASYNC{} blank will be interpreted as \DYNAMIC{} as always, and cause no type error.
@@ -6539,26 +7054,26 @@
 \LMHash{}
 Executing a return statement with no expression, \code{\RETURN;} returns with no value (\ref{completion}).
 
-
 \LMHash{}
-It is a static warning if a  function contains both one or more explicit return statements of the form \code{\RETURN;} and one or more return statements of the form \code{\RETURN{} $e$;}.
+It is a static warning if a function contains both one or more explicit return statements of the form \code{\RETURN;} and one or more return statements of the form \code{\RETURN{} $e$;}.
 
 
-\subsection{ Labels}
+\subsection{Labels}
 \LMLabel{labels}
 
 \LMHash{}
-A {\em label} is an identifier followed by a colon. A {\em labeled statement} is a statement prefixed by a label $L$.  A {\em labeled case clause} is a case clause within a switch statement (\ref{switch}) prefixed by a label $L$.
+A {\em label} is an identifier followed by a colon.
+A {\em labeled statement} is a statement prefixed by a label $L$.
+A {\em labeled case clause} is a case clause within a switch statement (\ref{switch}) prefixed by a label $L$.
 
-\rationale{The sole role of labels is to provide targets for the break (\ref{break}) and continue (\ref{continue}) statements.}
+\rationale{
+The sole role of labels is to provide targets for the break (\ref{break}) and continue (\ref{continue}) statements.
+}
 
-%\Q{Are labels in a separate namespace? Bug 49774299}
-
- \begin{grammar}
-{\bf label:}
-      identifier `{\escapegrammar :}'
-    .
- \end{grammar}
+\begin{grammar}
+{\bf label:}identifier `{\escapegrammar :}'
+  .
+\end{grammar}
 
 \LMHash{}
 Execution a labeled statement $s$, $label: s_l$, consists of executing $s_l$.
@@ -6570,23 +7085,25 @@
 The namespace of labels is distinct from the one used for types, functions and variables.
 
 \LMHash{}
-The scope of a label that labels a statement $s$ is $s$. The scope of a label that labels a case clause of a switch statement $s$ is $s$.
+The scope of a label that labels a statement $s$ is $s$.
+The scope of a label that labels a case clause of a switch statement $s$ is $s$.
 
-\rationale{Labels should be avoided by programmers at all costs. The motivation for including labels in the language is primarily making Dart a better target for code generation.
+\rationale{
+Labels should be avoided by programmers at all costs.
+The motivation for including labels in the language is primarily making Dart a better target for code generation.
 }
 
 
-\subsection{ Break}
+\subsection{Break}
 \LMLabel{break}
 
 \LMHash{}
 The {\em break statement} consists of the reserved word \BREAK{} and an optional label (\ref{labels}).
 
 \begin{grammar}
-{\bf breakStatement:}
-     \BREAK{} identifier? `{\escapegrammar ;}'
-    .
- \end{grammar}
+{\bf breakStatement:}\BREAK{} identifier? `{\escapegrammar ;}'
+  .
+\end{grammar}
 
 \LMHash{}
 Let $s_b$ be a \BREAK{} statement.
@@ -6601,21 +7118,19 @@
 
 \LMHash{}
 Execution of a \BREAK{} statement \code{\BREAK{} $L$;} breaks to the label $L$ (\ref{completion}).
-
 Execution of a \BREAK{} statement \code{\BREAK{};} breaks without a label (\ref{completion}).
 
 
-\subsection{ Continue}
+\subsection{Continue}
 \LMLabel{continue}
 
 \LMHash{}
 The {\em continue statement} consists of the reserved word \CONTINUE{} and an optional label (\ref{labels}).
 
 \begin{grammar}
-{\bf continueStatement:}
-    \CONTINUE{} identifier? `{\escapegrammar ;}'
-        .
- \end{grammar}
+{\bf continueStatement:}\CONTINUE{} identifier? `{\escapegrammar ;}'
+  .
+\end{grammar}
 
 \LMHash{}
 Let $s_c$ be a \CONTINUE{} statement.
@@ -6631,31 +7146,32 @@
 \DO{} (\ref{do}), \FOR{} (\ref{for}), or \WHILE{} (\ref{while}) statement
 within the innermost function in which $s_c$ occurs.
 
+\LMHash{}
 Execution of a \CONTINUE{} statement \code{\CONTINUE{} $L$;} continues to the label $L$ (\ref{completion}).
-
 Execution of a \CONTINUE{} statement \code{\CONTINUE{};} continues without a label (\ref{completion}).
 
 
-\subsection{ Yield and Yield-Each}
+\subsection{Yield and Yield-Each}
 \LMLabel{yieldAndYieldEach}
 
-\subsubsection{ Yield}
+
+\subsubsection{Yield}
 \LMLabel{yield}
 
 \LMHash{}
 The {\em yield statement} adds an element to the result of a generator function (\ref{functions}).
 
 \begin{grammar}
-{\bf yieldStatement:}
-   \YIELD{} expression `{\escapegrammar ;}'
-      .
+{\bf yieldStatement:}\YIELD{} expression `{\escapegrammar ;}'
+  .
 \end{grammar}
 
 \LMHash{}
-Execution of a statement $s$ of the form \code{\YIELD{} $e$;}  proceeds as follows:
+Execution of a statement $s$ of the form \code{\YIELD{} $e$;} proceeds as follows:
 
 \LMHash{}
-First, the expression $e$ is evaluated to an object $o$. If the enclosing function $m$ is marked \ASYNC* (\ref{functions}) and the stream $u$ associated with $m$ has been paused, then the nearest enclosing asynchronous for loop (\ref{asynchronousFor-in}), if any, is paused and execution of $m$ is suspended until $u$ is resumed or canceled.
+First, the expression $e$ is evaluated to an object $o$.
+If the enclosing function $m$ is marked \ASYNC* (\ref{functions}) and the stream $u$ associated with $m$ has been paused, then the nearest enclosing asynchronous for loop (\ref{asynchronousFor-in}), if any, is paused and execution of $m$ is suspended until $u$ is resumed or canceled.
 
 \LMHash{}
 Next, $o$ is added to the iterable or stream associated with the immediately enclosing function.
@@ -6664,17 +7180,24 @@
 If the enclosing function $m$ is marked \ASYNC* and the stream $u$ associated with $m$ has been canceled, then the \YIELD{} statement returns without a value (\ref{completion}), otherwise it completes normally.
 
 \rationale{
-The stream associated with an asynchronous generator could be canceled by any code with a reference to that stream at any point where the generator was passivated.  Such a cancellation constitutes an irretrievable error for the generator. At this point, the only plausible action for the generator is to clean up after itself via its \FINALLY{} clauses.
+The stream associated with an asynchronous generator could be canceled by any code with a reference to that stream at any point where the generator was passivated.
+Such a cancellation constitutes an irretrievable error for the generator.
+At this point, the only plausible action for the generator is to clean up after itself via its \FINALLY{} clauses.
 }
 
 \LMHash{}
 Otherwise, if the enclosing function $m$ is marked \ASYNC* (\ref{functions}) then the enclosing function may suspend, in which case the nearest enclosing asynchronous for loop (\ref{asynchronousFor-in}), if any, is paused first.
 
-\rationale {
-If a \YIELD{} occurred inside an infinite loop and the enclosing function never suspended, there might not be an opportunity for consumers of the  enclosing stream to run and access the data in the stream.  The stream might then accumulate an unbounded number of elements. Such a situation is untenable. Therefore, we allow the enclosing function to be suspended when a new value is added to its associated stream. However, it is not essential (and in fact, can be quite costly) to suspend the function on every \YIELD{}. The implementation is free to decide how often to suspend the enclosing function. The only requirement is that consumers are not blocked indefinitely.
+\rationale{
+If a \YIELD{} occurred inside an infinite loop and the enclosing function never suspended, there might not be an opportunity for consumers of the enclosing stream to run and access the data in the stream.
+The stream might then accumulate an unbounded number of elements.
+Such a situation is untenable.
+Therefore, we allow the enclosing function to be suspended when a new value is added to its associated stream.
+However, it is not essential (and in fact, can be quite costly) to suspend the function on every \YIELD{}.
+The implementation is free to decide how often to suspend the enclosing function.
+The only requirement is that consumers are not blocked indefinitely.
 }
 
-
 \LMHash{}
 If the enclosing function $m$ is marked \SYNC* (\ref{functions}) then:
 \begin{itemize}
@@ -6688,29 +7211,29 @@
 It is a compile-time error if a yield statement appears in a function that is not a generator function.
 
 \LMHash{}
-Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing function.  It is a static type warning if either:
+Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing function.
+It is a static type warning if either:
 \begin{itemize}
 \item
- the body of $f$ is marked \ASYNC* and the type \code{Stream<T>} may not be assigned to the declared return type of $f$.
- \item
- the body of $f$ is marked \SYNC* and the type \code{Iterable<T>} may not be assigned to the declared return type of $f$.
- \end{itemize}
+the body of $f$ is marked \ASYNC* and the type \code{Stream<T>} may not be assigned to the declared return type of $f$.
+\item
+the body of $f$ is marked \SYNC* and the type \code{Iterable<T>} may not be assigned to the declared return type of $f$.
+\end{itemize}
 
 
- \subsubsection{ Yield-Each}
- \LMLabel{yieldEach}
+\subsubsection{Yield-Each}
+\LMLabel{yieldEach}
 
 \LMHash{}
- The {\em yield-each statement} adds a series of values to the result of a generator function (\ref{functions}).
+The {\em yield-each statement} adds a series of values to the result of a generator function (\ref{functions}).
 
- \begin{grammar}
-{\bf yieldEachStatement:}
-   \YIELD* expression `{\escapegrammar ;}'
-      .
+\begin{grammar}
+{\bf yieldEachStatement:}\YIELD* expression `{\escapegrammar ;}'
+  .
 \end{grammar}
 
 \LMHash{}
-Execution of a statement $s$ of the form \code{\YIELD* $e$;}  proceeds as follows:
+Execution of a statement $s$ of the form \code{\YIELD* $e$;} proceeds as follows:
 
 \LMHash{}
 First, the expression $e$ is evaluated to an object $o$.
@@ -6718,10 +7241,15 @@
 \LMHash{}
 If the immediately enclosing function $m$ is marked \SYNC* (\ref{functions}), then:
 \begin{enumerate}
-\item It is a dynamic error if the class of $o$ does not implement \code{Iterable}.  Otherwise
-\item The method \cd{iterator} is invoked upon $o$ returning an object $i$.
-\item \label{moveNext} The \cd{moveNext} method of $i$ is invoked on it with no arguments. If \cd{moveNext} returns \FALSE{} execution of $s$ is complete. Otherwise
-\item The getter \cd{current} is invoked on $i$. If the invocation throws (\ref{evaluation}), execution of $s$ throws the same exception object and stack trace (\ref{completion}). Otherwise, the result $x$ of the getter invocation is added to the iterable associated with $m$.
+\item It is a dynamic error if the class of $o$ does not implement \code{Iterable}.
+Otherwise
+\item The method \code{iterator} is invoked upon $o$ returning an object $i$.
+\item \label{moveNext} The \code{moveNext} method of $i$ is invoked on it with no arguments.
+If \code{moveNext} returns \FALSE{} execution of $s$ is complete.
+Otherwise
+\item The getter \code{current} is invoked on $i$.
+If the invocation throws (\ref{evaluation}), execution of $s$ throws the same exception object and stack trace (\ref{completion}).
+Otherwise, the result $x$ of the getter invocation is added to the iterable associated with $m$.
 Execution of the function $m$ immediately enclosing $s$ is suspended until the nullary method \code{moveNext()} is invoked upon the iterator used to initiate the current invocation of $m$, at which point execution of $s$ continues at \ref{moveNext}.
 \item
 The current call to \code{moveNext()} returns \TRUE.
@@ -6730,7 +7258,8 @@
 \LMHash{}
 If $m$ is marked \ASYNC* (\ref{functions}), then:
 \begin{itemize}
-\item  It is a dynamic error if the class of $o$ does not implement \code{Stream}. Otherwise
+\item It is a dynamic error if the class of $o$ does not implement \code{Stream}.
+Otherwise
 \item The nearest enclosing asynchronous for loop (\ref{asynchronousFor-in}), if any, is paused.
 \item The $o$ stream is listened to, creating a subscription $s$, and for each event $x$, or error $e$ with stack trace $t$, of $s$:
 \begin{itemize}
@@ -6741,17 +7270,20 @@
 then $s$ is canceled by evaluating \code{\AWAIT{} v.cancel()} where $v$ is a fresh variable referencing the stream subscription $s$.
 Then, if the cancel completed normally, the stream execution of $s$ returns without a value (\ref{completion}).
 \item
-Otherwise, $x$, or $e$ with $t$, are added to the stream associated with $m$ in the order they appear in $o$.  The function $m$ may suspend.
+Otherwise, $x$, or $e$ with $t$, are added to the stream associated with $m$ in the order they appear in $o$.
+The function $m$ may suspend.
 \end{itemize}
 \item If the stream $o$ is done, execution of $s$ completes normally.
 \end{itemize}
 
-
 \LMHash{}
 It is a compile-time error if a yield-each statement appears in a function that is not a generator function.
 
 \LMHash{}
-Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing function.  It is a static type warning if $T$ may not be assigned to the declared return type of $f$.  If $f$ is synchronous it is a static  type warning if $T$ may not be assigned to \code{Iterable}.  If $f$ is asynchronous it is a static  type warning if $T$ may not be assigned to \code{Stream}.
+Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing function.
+It is a static type warning if $T$ may not be assigned to the declared return type of $f$.
+If $f$ is synchronous it is a static type warning if $T$ may not be assigned to \code{Iterable}.
+If $f$ is asynchronous it is a static type warning if $T$ may not be assigned to \code{Stream}.
 
 
 \subsection{Assert}
@@ -6761,19 +7293,18 @@
 An {\em assert statement} is used to disrupt normal execution if a given boolean condition does not hold.
 
 \begin{grammar}
-{\bf assertStatement:}
-    assertion `{\escapegrammar ;}'
-    .
-{\bf assertion:}
-    \ASSERT{} `(' expression ( `,' expression )? `,'? `)'
-    .
+{\bf assertStatement:}assertion `{\escapegrammar ;}'
+  .
+
+{\bf assertion:}\ASSERT{} `(' expression (\gcomma{} expression )? \gcomma{}? `)'
+  .
 \end{grammar}
 
 \LMHash{}
 The grammar allows a trailing comma before the closing parenthesis,
-similarly to an argument list. That comma, if present, has no effect.
-An assertion with a trailing comma is equivalent to one with that
-comma removed.
+similarly to an argument list.
+That comma, if present, has no effect.
+An assertion with a trailing comma is equivalent to one with that comma removed.
 
 \LMHash{}
 An assertion of the form \code{\ASSERT($e$))} is equivalent to an assertion of the form \code{\ASSERT($e$, \NULL{})}.
@@ -6791,7 +7322,9 @@
 \LMHash{}
 The expression $c$ is evaluated to an object $r$.
 It is a dynamic type error if $r$ is not of type \code{bool}.
-\commentary{Hence it is a compile-time error if that situation arises during evaluation of an assertion in a \CONST{} constructor invocation.}
+\commentary{
+Hence it is a compile-time error if that situation arises during evaluation of an assertion in a \CONST{} constructor invocation.
+}
 If $r$ is \TRUE{} then execution of the assert statement completes normally (\ref{completion}).
 Otherwise, $e$ is evaluated to an object $m$
 and then the execution of the assert statement throws (\ref{completion}) an \code{AssertionError} containing $m$ and with a stack trace corresponding to the current execution state at the assertion.
@@ -6799,7 +7332,10 @@
 \LMHash{}
 It is a static type warning if the type of $e$ may not be assigned to \code{bool}.
 
-\rationale{Why is this a statement, not a built in function call? Because it is handled magically so it has no effect and no overhead in production mode. Also, in the absence of final methods, one could not prevent it being overridden (though there is no real harm in that). It cannot be viewed as a function call that is being optimized away because the arguments might have side effects.
+\rationale{
+Why is this a statement, not a built in function call? Because it is handled magically so it has no effect and no overhead in production mode.
+Also, in the absence of final methods, one could not prevent it being overridden (though there is no real harm in that).
+It cannot be viewed as a function call that is being optimized away because the arguments might have side effects.
 }
 
 %If a lexically visible declaration named \code{assert} is in scope, an assert statement
@@ -6825,88 +7361,91 @@
 
 %\rationale{therefore, we opt for the second option. Alternately, one could insist that assert be a reserved word, which may have an undesirable effect with respect to compatibility of Javascript code ported to Dart.}
 
+
 \section{Libraries and Scripts}
 \LMLabel{librariesAndScripts}
 
 \LMHash{}
-A Dart program consists of one or more libraries, and may be built out of one or more {\em compilation units}. A compilation unit may be a library or a part (\ref{parts}).
+A Dart program consists of one or more libraries, and may be built out of one or more {\em compilation units}.
+A compilation unit may be a library or a part (\ref{parts}).
 
 \LMHash{}
-A library consists of (a possibly empty) set of imports, a set of exports,  and a set of top-level declarations. A top-level declaration is either a class (\ref{classes}), a type alias declaration (\ref{typedef}), a function (\ref{functions}) or a variable declaration (\ref{variables}). The members of a library $L$ are those top level declarations given within $L$.
+A library consists of (a possibly empty) set of imports, a set of exports, and a set of top-level declarations.
+A top-level declaration is either a class (\ref{classes}), a type alias declaration (\ref{typedef}), a function (\ref{functions}) or a variable declaration (\ref{variables}).
+The members of a library $L$ are those top level declarations given within $L$.
 
- \begin{grammar}
+\begin{grammar}
 {\bf topLevelDefinition:}classDefinition;
-     enumType;
-%      classDefinitionOrInterfaceInjection;
-%      interfaceDefinitionOrInterfaceInjection;
- %     mixinApplication;
-      typeAlias;
-      \EXTERNAL{}? functionSignature `{\escapegrammar ;}';
-      \EXTERNAL{}? getterSignature `{\escapegrammar ;}';
-      \EXTERNAL{}? setterSignature `{\escapegrammar ;}';
-      functionSignature functionBody;
-      returnType? \GET{} identifier functionBody;
-      returnType? \SET{} identifier formalParameterList functionBody;
-      (\FINAL{} $|$ \CONST{}) type? staticFinalDeclarationList `{\escapegrammar ;}';
-      variableDeclaration `{\escapegrammar ;}'
-    .
+  enumType;
+  typeAlias;
+  \EXTERNAL{}? functionSignature `{\escapegrammar ;}';
+  \EXTERNAL{}? getterSignature `{\escapegrammar ;}';
+  \EXTERNAL{}? setterSignature `{\escapegrammar ;}';
+  functionSignature functionBody;
+  returnType? \GET{} identifier functionBody;
+  returnType? \SET{} identifier formalParameterList functionBody;
+  (\FINAL{} $|$ \CONST{}) type? staticFinalDeclarationList `{\escapegrammar ;}';
+  variableDeclaration `{\escapegrammar ;}'
+  .
 
-    {\bf getOrSet:} \GET{};
-      \SET{}
-    .
+{\bf getOrSet:}\GET{};
+  \SET{}
+  .
 
-%    classDefinitionOrInterfaceInjection:
- %     classDefinition;
-  %    classInterfaceInjection
- %   .
+{\bf libraryDefinition:}scriptTag? libraryName? importOrExport* partDirective*
+  \gnewline{} topLevelDefinition*
+  .
 
-%interfaceDefinitionOrInterfaceInjection:
- %     interfaceDefinition;
-     % interfaceInterfaceInjection
-  %  .
+{\bf scriptTag:}`\#!' {\escapegrammar (\~{}NEWLINE)*} NEWLINE
+  .
 
-{\bf libraryDefinition:}
-%      library '\{' libraryBody '\}'
-      scriptTag? libraryName? importOrExport* partDirective* topLevelDefinition*
-    .
+{\bf libraryName:}metadata \LIBRARY{} identifier (`{\escapegrammar .}' identifier)* `{\escapegrammar ;}'
+  .
 
-    {\bf     scriptTag:}
-   `\#!' {\escapegrammar (\~{}NEWLINE)*} NEWLINE
- .
-
-{\bf libraryName:}
-   metadata \LIBRARY{} identifier (`{\escapegrammar .}' identifier)* `{\escapegrammar ;}'
-   .
-
-{\bf importOrExport:}libraryImport ;
+{\bf importOrExport:}libraryImport;
   libraryExport
- \end{grammar}
+  .
+\end{grammar}
 
 \LMHash{}
- Libraries may be {\em explicitly named} or {\em implicitly named}. An explicitly named library begins with  the  word \LIBRARY{} (possibly prefaced with any applicable metadata annotations), followed by a qualified identifier that gives the name of the library.
+Libraries may be {\em explicitly named} or {\em implicitly named}.
+An explicitly named library begins with the word \LIBRARY{} (possibly prefaced with any applicable metadata annotations), followed by a qualified identifier that gives the name of the library.
 
- \commentary{
- Technically, each dot and identifier is a separate token and so spaces between them are acceptable. However, the actual library name is the concatenation of the simple identifiers and dots and contains no spaces.
- }
+\commentary{
+Technically, each dot and identifier is a separate token and so spaces between them are acceptable.
+However, the actual library name is the concatenation of the simple identifiers and dots and contains no spaces.
+}
 
 \LMHash{}
 An implicitly named library has the empty string as its name.
 
- \rationale{
-The name of a library is used to tie it to separately compiled parts of the library (called parts) and  can be used for printing and, more generally, reflection. The name may be relevant for further language evolution.
- }
+\rationale{
+The name of a library is used to tie it to separately compiled parts of the library (called parts) and can be used for printing and, more generally, reflection.
+The name may be relevant for further language evolution.
+}
 
- \commentary{
-Libraries intended for widespread use should avoid name collisions.  Dart's \code{pub} package management system provides a mechanism for doing so.  Each pub package is guaranteed a unique name, effectively enforcing a global namespace.
- }
+\commentary{
+Libraries intended for widespread use should avoid name collisions.
+Dart's \code{pub} package management system provides a mechanism for doing so.
+Each pub package is guaranteed a unique name, effectively enforcing a global namespace.
+}
 
 \LMHash{}
- A library may optionally begin with a {\em script tag}. Script tags are intended for use with scripts (\ref{scripts}).  A script tag can be used to identify the interpreter of the script to whatever computing environment the script is embedded in. The script tag must appear before any whitespace or comments.  A script  tag begins with the characters \#! and ends at the end of the line. Any characters that follow \#!  in the script tag are ignored by the Dart implementation.
+A library may optionally begin with a {\em script tag}.
+Script tags are intended for use with scripts (\ref{scripts}).
+A script tag can be used to identify the interpreter of the script to whatever computing environment the script is embedded in.
+The script tag must appear before any whitespace or comments.
+A script tag begins with the characters \#! and ends at the end of the line.
+Any characters that follow \#! in the script tag are ignored by the Dart implementation.
 
 \LMHash{}
-Libraries are units of privacy. A private declaration declared within a library $L$ can only be accessed by code within $L$. Any attempt to access a private member declaration from outside $L$ will cause a method, getter or setter lookup failure.
+Libraries are units of privacy.
+A private declaration declared within a library $L$ can only be accessed by code within $L$.
+Any attempt to access a private member declaration from outside $L$ will cause a method, getter or setter lookup failure.
 
-\commentary{Since top level privates are not imported, using the top level privates of another library is never possible. }
+\commentary{
+Since top level privates are not imported, using the top level privates of another library is never possible.
+}
 
 \LMHash{}
 The {\em public namespace} of library $L$ is the mapping that maps the simple name of each public top-level member $m$ of $L$ to $m$.
@@ -6919,74 +7458,92 @@
 \LMHash{}
 An {\em import} specifies a library to be used in the scope of another library.
 \begin{grammar}
-{\bf libraryImport:}
-   metadata importSpecification
-    .
+{\bf libraryImport:}metadata importSpecification
+  .
 
- {\bf importSpecification:}
-    \IMPORT{}  uri (\AS{} identifier)?  combinator* `{\escapegrammar ;}';
-     \IMPORT{}  uri \DEFERRED{} \AS{} identifier  combinator* `{\escapegrammar ;}'
-    .
+{\bf importSpecification:}\IMPORT{} uri (\AS{} identifier)? combinator* `{\escapegrammar ;}';
+  \IMPORT{} uri \DEFERRED{} \AS{} identifier combinator* `{\escapegrammar ;}'
+  .
 
 {\bf combinator:}\SHOW{} identifierList;
-\HIDE{} identifierList
-    .
+  \HIDE{} identifierList
+  .
 
-    {\bf identifierList:}
-      identifier (, identifier)*
- \end{grammar}
-
+{\bf identifierList:}identifier (, identifier)*
+  .
+\end{grammar}
 
 \LMHash{}
 An import specifies a URI $x$ where the declaration of an imported library is to be found.
 
 \LMHash{}
-Imports may be {\em deferred} or {\em immediate}. A deferred import is distinguished by the appearance of the built-in identifier \DEFERRED{} after the URI. Any import that is not deferred is immediate.
+Imports may be {\em deferred} or {\em immediate}.
+A deferred import is distinguished by the appearance of the built-in identifier \DEFERRED{} after the URI.
+Any import that is not deferred is immediate.
 
 \LMHash{}
-It is a compile-time error if  the specified URI of an immediate import does not refer to a library declaration.  The interpretation of URIs is described in section \ref{uris} below.
+It is a compile-time error if the specified URI of an immediate import does not refer to a library declaration.
+The interpretation of URIs is described in section \ref{uris} below.
 
 \LMHash{}
 It is a static warning if the specified URI of a deferred import does not refer to a library declaration.
 
 \rationale{
- One cannot detect the problem at compile time because compilation often occurs during execution and  one does not know what the URI refers to.  However the development environment should detect the problem.
- }
-
+One cannot detect the problem at compile time because compilation often occurs during execution and one does not know what the URI refers to.
+However the development environment should detect the problem.
+}
 
 \LMHash{}
-The {\em current library} is the library currently being compiled. The import modifies the  namespace of the current library in a manner that is determined by the imported library and by the optional elements of  the import.
+The {\em current library} is the library currently being compiled.
+The import modifies the namespace of the current library in a manner that is determined by the imported library and by the optional elements of the import.
 
 \LMHash{}
-An immediate import directive $I$ may optionally include a prefix clause of the form \code{\AS{} $id$} used to prefix names imported by $I$. A deferred import must include a prefix clause or a compile-time error occurs. It is a compile-time error if a prefix used in a deferred import is used in another import clause.
+An immediate import directive $I$ may optionally include a prefix clause of the form \code{\AS{} $id$} used to prefix names imported by $I$.
+A deferred import must include a prefix clause or a compile-time error occurs.
+It is a compile-time error if a prefix used in a deferred import is used in another import clause.
 
 \LMHash{}
-An import directive $I$ may optionally include a namespace combinator clauses used to restrict the set of names imported by $I$. Currently, two namespace combinators are supported: \HIDE{} and \SHOW{}.
+An import directive $I$ may optionally include a namespace combinator clauses used to restrict the set of names imported by $I$.
+Currently, two namespace combinators are supported: \HIDE{} and \SHOW{}.
 
 \LMHash{}
-Let $I$ be an import directive that refers to a URI via the string $s_1$. Evaluation of $I$  proceeds as follows:
+Let $I$ be an import directive that refers to a URI via the string $s_1$.
+Evaluation of $I$ proceeds as follows:
 
 \LMHash{}
-If $I$ is a deferred import, no evaluation takes place. Instead, a mapping of the name of the prefix, $p$ to a {\em deferred prefix object} is added to the scope of the current library $L$.
+If $I$ is a deferred import, no evaluation takes place.
+Instead, a mapping of the name of the prefix, $p$ to a {\em deferred prefix object} is added to the scope of the current library $L$.
 The deferred prefix object has the following methods:
 
 \begin{itemize}
-\item \code{loadLibrary}. This method returns a future $f$. When called, the method causes an immediate import $I'$ to be executed at some future time, where $I'$ is derived from $I$ by eliding the word \DEFERRED{} and adding a \HIDE{} \code{loadLibrary}  combinator clause. When $I'$ executes without error, $f$ completes successfully. If $I'$ executes without error, we say that the call to \code{loadLibrary} has succeeded, otherwise we say the call has failed.
-\item  For every top level function $f$ named $id$ in the imported library $B$, a corresponding method named $id$ with the same signature as $f$. Calling the method results in a run-time error.
-\item For every top level getter $g$ named $id$ in $B$, a corresponding getter named $id$ with the same signature as $g$.  Calling the method results in a run-time error.
-\item For every top level setter $s$ named $id$ in $B$, a corresponding setter named $id$ with the same signature as $s$.  Calling the method results in a run-time error.
-\item For every type $T$ named $id$ in $B$, a corresponding getter named $id$ with return type \code{Type}.  Calling the method results in a run-time error.
+\item \code{loadLibrary}.
+This method returns a future $f$.
+When called, the method causes an immediate import $I'$ to be executed at some future time, where $I'$ is derived from $I$ by eliding the word \DEFERRED{} and adding a \HIDE{} \code{loadLibrary} combinator clause.
+When $I'$ executes without error, $f$ completes successfully.
+If $I'$ executes without error, we say that the call to \code{loadLibrary} has succeeded, otherwise we say the call has failed.
+\item For every top level function $f$ named $id$ in the imported library $B$, a corresponding method named $id$ with the same signature as $f$.
+Calling the method results in a run-time error.
+\item For every top level getter $g$ named $id$ in $B$, a corresponding getter named $id$ with the same signature as $g$.
+Calling the method results in a run-time error.
+\item For every top level setter $s$ named $id$ in $B$, a corresponding setter named $id$ with the same signature as $s$.
+Calling the method results in a run-time error.
+\item For every type $T$ named $id$ in $B$, a corresponding getter named $id$ with return type \code{Type}.
+Calling the method results in a run-time error.
 \end{itemize}
 
-\rationale {
-The purpose of adding members of $B$ to $p$ is to ensure that any warnings  issued when using $p$ are correct, and no spurious warnings are generated.  In fact, at run time we cannot add these members until $B$ is loaded; but any such invocations will fail at run time as specified by virtue of being completely absent.
+\rationale{
+The purpose of adding members of $B$ to $p$ is to ensure that any warnings issued when using $p$ are correct, and no spurious warnings are generated.
+In fact, at run time we cannot add these members until $B$ is loaded; but any such invocations will fail at run time as specified by virtue of being completely absent.
 }
 %But this is still a lie detectable by reflection. Probably revise so the type of p has these members but p does not.
 
 The static type of the prefix object $p$ is a unique interface type that has those members whose names and signatures are listed above.
 
 \LMHash{}
-After a call succeeds, the name $p$ is mapped to a non-deferred prefix object as described below. In addition, the prefix object also supports the \code{loadLibrary} method, and so it is possible to call \code{loadLibrary} again. If a call fails, nothing happens, and one again has the option to call \code{loadLibrary} again. Whether a repeated call to \code{loadLibrary} succeeds will vary as described below.
+After a call succeeds, the name $p$ is mapped to a non-deferred prefix object as described below.
+In addition, the prefix object also supports the \code{loadLibrary} method, and so it is possible to call \code{loadLibrary} again.
+If a call fails, nothing happens, and one again has the option to call \code{loadLibrary} again.
+Whether a repeated call to \code{loadLibrary} succeeds will vary as described below.
 
 \LMHash{}
 The effect of a repeated call to \code{$p$.loadLibrary} is as follows:
@@ -6995,7 +7552,7 @@
 If another call to \code{$p$.loadLibrary} has already succeeded, the repeated call also succeeds.
 Otherwise,
 \item
-If another call to  to \code{$p$.loadLibrary} has failed:
+If another call to \code{$p$.loadLibrary} has failed:
 \begin{itemize}
 \item
 If the failure is due to a compilation error, the repeated call fails for the same reason.
@@ -7013,16 +7570,18 @@
 \LMHash{}
 If $I$ is an immediate import then, first
 
- \begin{itemize}
- \item
-If  the URI that is the value of $s_1$ has not yet been accessed by an import or export (\ref{exports}) directive  in the current isolate then the contents of the URI  are compiled to yield a library $B$. \commentary{Because libraries may have mutually recursive imports, care must be taken to avoid an infinite regress.
+\begin{itemize}
+\item
+If the URI that is the value of $s_1$ has not yet been accessed by an import or export (\ref{exports}) directive in the current isolate then the contents of the URI are compiled to yield a library $B$.
+\commentary{
+Because libraries may have mutually recursive imports, care must be taken to avoid an infinite regress.
 }
 \item Otherwise, the contents of the URI denoted by $s_1$ have been compiled into a library $B$ within the current isolate.
 \end{itemize}
 
-
 \LMHash{}
-Let $NS_0$ be the exported namespace (\ref{exports}) of $B$. Then, for each combinator clause $C_i, i \in 1..n$ in $I$:
+Let $NS_0$ be the exported namespace (\ref{exports}) of $B$.
+Then, for each combinator clause $C_i, i \in 1 .. n$ in $I$:
 \begin{itemize}
 \item If $C_i$ is of the form
 
@@ -7030,7 +7589,9 @@
 
 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. Otherwise the resulting mapping is undefined.
+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.
+Otherwise the resulting mapping is undefined.
 
 \item If $C_i$ is of the form
 
@@ -7042,12 +7603,12 @@
 \end{itemize}
 
 \LMHash{}
-Next, if $I$ includes a prefix clause of the form \AS{} $p$, let $NS =  NS_n \cup \{p: prefixObject(NS_n)\}$ where $prefixObject(NS_n)$ is a {\em prefix object} for the namespace $NS_n$, which is an object that has the following members:
+Next, if $I$ includes a prefix clause of the form \AS{} $p$, let $NS = NS_n \cup \{p: prefixObject(NS_n)\}$ where $prefixObject(NS_n)$ is a {\em prefix object} for the namespace $NS_n$, which is an object that has the following members:
 
 \begin{itemize}
-\item  For every top level function $f$ named $id$ in $NS_n$, a corresponding method with the same name and signature as $f$ that forwards  (\ref{functionDeclarations}) to $f$.
-\item For every top level getter  with the same name and signature as $g$ named $id$ in $NS_n$, a corresponding getter  that forwards to $g$.
-\item For every top level setter $s$  with the same name and signature as named $id$ in $NS_n$, a corresponding setter  that forwards to  $s$.
+\item For every top level function $f$ named $id$ in $NS_n$, a corresponding method with the same name and signature as $f$ that forwards (\ref{functionDeclarations}) to $f$.
+\item For every top level getter with the same name and signature as $g$ named $id$ in $NS_n$, a corresponding getter that forwards to $g$.
+\item For every top level setter $s$ with the same name and signature as named $id$ in $NS_n$, a corresponding setter that forwards to $s$.
 \item For every type $T$ named $id$ in $NS_n$, a corresponding getter named $id$ with return type \code{Type}, that, when invoked, returns the type object for $T$.
 \end{itemize}
 
@@ -7062,37 +7623,43 @@
 % either. After all, p isn't actually available as a stand alone name.
 
 \LMHash{}
-Then, for each entry mapping key $k$ to declaration $d$ in $NS$,  $d$ is made available in the top level scope of $L$ under the name $k$ unless either:
+Then, for each entry mapping key $k$ to declaration $d$ in $NS$, $d$ is made available in the top level scope of $L$ under the name $k$ unless either:
 \begin{itemize}
 \item
 a top-level declaration with the name $k$ exists in $L$, OR
-\item a prefix clause of the form  \AS{} $k$ is used in $L$.
+\item a prefix clause of the form \AS{} $k$ is used in $L$.
 \end{itemize}
 
-\rationale{The greatly increases the chance that a member can be added to a library without breaking its importers.}
+\rationale{
+The greatly increases the chance that a member can be added to a library without breaking its importers.
+}
 
 \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
+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:
+%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}
 
-\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.  Thus, conflicts with \code{dart:} libraries can arise at run time, outside the developer's control. To avoid breaking deployed applications in this way, conflicts with the \code{dart:} libraries are treated specially.
+\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.
+Thus, conflicts with \code{dart:} libraries can arise at run time, outside the developer's control.
+To avoid breaking deployed applications in this way, conflicts with the \code{dart:} libraries are treated specially.
 
 It is recommended that tools that deploy Dart code produce output in which all imports use show clauses to ensure that additions to the namespace of a library never impact deployed code.
 }
 
 \LMHash{}
-If a name $N$ is referenced by a library $L$ and $N$ is  introduced into  the top level scope of $L$ by more than one import, and not all the imports denote the same declaration, then:
+If a name $N$ is referenced by a library $L$ and $N$ is introduced into the top level scope of $L$ by more than one import, and not all the imports denote the same declaration, then:
 \begin{itemize}
 \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.
+\item If $N$ is referenced as a type, it is treated as a malformed type.
 
 \end{itemize}
 
@@ -7100,35 +7667,41 @@
 We say that the namespace $NS$ {\em has been imported into} $L$.
 
 \commentary{
-It is neither an error nor a warning if  $N$ is introduced by two or more imports but never referred to.
+It is neither an error nor a warning if $N$ is introduced by two or more imports but never referred to.
 }
 
 \rationale{
 The policy above makes libraries more robust in the face of additions made to their imports.
 
-A clear distinction needs to be made between this approach, and seemingly similar policies with respect to classes or interfaces.  The use of a class or interface, and of its members, is separate from its declaration. The usage and declaration may occur in widely separated places in the code, and may in fact be authored by different people or organizations.  It is important that errors are given at the offending declaration so that the party that receives the error can respond to it a meaningful way.
+A clear distinction needs to be made between this approach, and seemingly similar policies with respect to classes or interfaces.
+The use of a class or interface, and of its members, is separate from its declaration.
+The usage and declaration may occur in widely separated places in the code, and may in fact be authored by different people or organizations.
+It is important that errors are given at the offending declaration so that the party that receives the error can respond to it a meaningful way.
 
 In contrast a library comprises both imports and their usage; the library is under the control of a single party and so any problem stemming from the import can be resolved even if it is reported at the use site.
 
-%On a related note, the provenance of the conflicting elements is not considered. An  element that is imported via distinct paths may conflict with itself. This avoids variants of the well known "diamond" problem.
+%On a related note, the provenance of the conflicting elements is not considered. An element that is imported via distinct paths may conflict with itself. This avoids variants of the well known "diamond" problem.
 }
 
 \LMHash{}
 It is a static warning to import two different libraries with the same name unless their name is the empty string.
 
 \commentary{
-A widely disseminated library should be given a name that will not conflict with other such libraries. The preferred mechanism for this is using pub, the Dart package manager, which provides a global namespace for libraries, and conventions that leverage that namespace.
+A widely disseminated library should be given a name that will not conflict with other such libraries.
+The preferred mechanism for this is using pub, the Dart package manager, which provides a global namespace for libraries, and conventions that leverage that namespace.
 }
 
-\commentary{Note that no errors or warnings are given if one hides or shows a name that is not in a namespace.}
+\commentary{
+Note that no errors or warnings are given if one hides or shows a name that is not in a namespace.
+}
 \rationale{
 This prevents situations where removing a name from a library would cause breakage of a client library.
 }
 
 \LMHash{}
-The dart core library \code{dart:core} is implicitly imported into every dart library other than itself via an  import clause of the form
+The dart core library \code{dart:core} is implicitly imported into every dart library other than itself via an import clause of the form
 
-\code{\IMPORT{}  `dart:core';}
+\code{\IMPORT{} `dart:core';}
 
 unless the importing library explicitly imports \code{dart:core}.
 
@@ -7137,45 +7710,54 @@
 }
 
 \rationale{
-It would be nice if there was nothing special about \code{dart:core}. However, its use is pervasive, which leads to the decision to import it automatically.  However, some library $L$  may wish to define entities with names used by \code{dart:core} (which it can easily do, as the names declared by a library take precedence). Other libraries may wish to use $L$ and may want to use members of $L$ that conflict with the core library without having to use a prefix and without encountering warnings. The above rule makes this possible, essentially canceling \code{dart:core}'s special treatment by means of yet another special rule.
+It would be nice if there was nothing special about \code{dart:core}.
+However, its use is pervasive, which leads to the decision to import it automatically.
+However, some library $L$ may wish to define entities with names used by \code{dart:core} (which it can easily do, as the names declared by a library take precedence).
+Other libraries may wish to use $L$ and may want to use members of $L$ that conflict with the core library without having to use a prefix and without encountering warnings.
+The above rule makes this possible, essentially canceling \code{dart:core}'s special treatment by means of yet another special rule.
 }
 
+
 \subsection{Exports}
 \LMLabel{exports}
 
 \LMHash{}
-A library $L$ exports a namespace (\ref{scoping}), meaning that the declarations in the namespace are made available to other libraries if they choose to import $L$ (\ref{imports}).  The namespace that $L$ exports is known as its {\em exported namespace}.
+A library $L$ exports a namespace (\ref{scoping}), meaning that the declarations in the namespace are made available to other libraries if they choose to import $L$ (\ref{imports}).
+The namespace that $L$ exports is known as its {\em exported namespace}.
 
 \begin{grammar}
-{\bf libraryExport:}
-   metadata \EXPORT{}  uri  combinator* `{\escapegrammar ;}'
-    .
- \end{grammar}
+{\bf libraryExport:}metadata \EXPORT{} uri combinator* `{\escapegrammar ;}'
+  .
+\end{grammar}
 
 \LMHash{}
- An export specifies a URI $x$ where the declaration of an exported library is to be found.  It is a compile-time error if  the specified URI does not refer to a library declaration.
+An export specifies a URI $x$ where the declaration of an exported library is to be found.
+It is a compile-time error if the specified URI does not refer to a library declaration.
 
 \LMHash{}
-We say that a name {\em is exported by a library} (or equivalently, that a library {\em exports a name}) if the name is in the library's exported namespace. We say that a declaration {\em is exported by a library} (or equivalently, that a library {\em exports a declaration}) if the declaration is in the library's exported namespace.
+We say that a name {\em is exported by a library} (or equivalently, that a library {\em exports a name}) if the name is in the library's exported namespace.
+We say that a declaration {\em is exported by a library} (or equivalently, that a library {\em exports a declaration}) if the declaration is in the library's exported namespace.
 
 \LMHash{}
-A library always exports all names and all declarations in its public namespace. In addition, a library may choose to re-export additional libraries via {\em export directives}, often referred to simply as {\em exports}.
+A library always exports all names and all declarations in its public namespace.
+In addition, a library may choose to re-export additional libraries via {\em export directives}, often referred to simply as {\em exports}.
 
 \LMHash{}
-Let $E$ be an export directive that refers to a URI via the string $s_1$. Evaluation of $E$  proceeds as follows:
+Let $E$ be an export directive that refers to a URI via the string $s_1$.
+Evaluation of $E$ proceeds as follows:
 
 \LMHash{}
 First,
 
- \begin{itemize}
- \item
-If  the URI that is the value of $s_1$ has not yet been accessed by an import or export directive  in the current isolate then the contents of the URI  are compiled to yield a library $B$.
+\begin{itemize}
+\item
+If the URI that is the value of $s_1$ has not yet been accessed by an import or export directive in the current isolate then the contents of the URI are compiled to yield a library $B$.
 \item Otherwise, the contents of the URI denoted by $s_1$ have been compiled into a library $B$ within the current isolate.
 \end{itemize}
 
-
 \LMHash{}
-Let $NS_0$ be the exported namespace of $B$. Then, for each combinator clause $C_i, i \in 1..n$ in $E$:
+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
 
@@ -7187,7 +7769,7 @@
 
 \LMHash{}
 For each
-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$.
+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:
@@ -7202,44 +7784,49 @@
 }
 
 \LMHash{}
-We say that $L$ {\em re-exports library } $B$, and also that $L$ {\em re-exports namespace } $NS_n$. When no confusion can arise, we may simply state that $L$ {\em re-exports }$B$, or that $L$ {\em re-exports }$NS_n$.
+We say that $L$ {\em re-exports library } $B$, and also that $L$ {\em re-exports namespace } $NS_n$.
+When no confusion can arise, we may simply state that $L$ {\em re-exports }$B$, or that $L$ {\em re-exports }$NS_n$.
 
 \LMHash{}
-It is a compile-time error if a name $N$ is re-exported by a library $L$ and $N$ is  introduced into the export namespace of $L$ by more than one export, unless all  exports refer to same declaration for the name $N$.  It is a static warning to export two different libraries with the same name unless their name is the empty string.
-
+It is a compile-time error if a name $N$ is re-exported by a library $L$ and $N$ is introduced into the export namespace of $L$ by more than one export, unless all exports refer to same declaration for the name $N$.
+It is a static warning to export two different libraries with the same name unless their name is the empty string.
 
 
 \subsection{Parts}
 \LMLabel{parts}
 
 \LMHash{}
-A library may be divided into {\em parts}, each of which can be stored in a separate location. A library identifies its parts by listing them via \PART{} directives.
+A library may be divided into {\em parts}, each of which can be stored in a separate location.
+A library identifies its parts by listing them via \PART{} directives.
 
 \LMHash{}
 A {\em part directive} specifies a URI where a Dart compilation unit that should be incorporated into the current library may be found.
 
 \begin{grammar}
-{\bf partDirective:}
-   metadata \PART{}   uri `{\escapegrammar ;}'
-    .
+{\bf partDirective:}metadata \PART{} uri `{\escapegrammar ;}'
+  .
 
-{\bf partHeader:}
-      metadata \PART{} \OF{} identifier (`{\escapegrammar .}' identifier)* `{\escapegrammar ;}'
-    .
-{\bf partDeclaration:}
-      partHeader topLevelDefinition* EOF
-    .
+{\bf partHeader:}metadata \PART{} \OF{} identifier (`{\escapegrammar .}' identifier)* `{\escapegrammar ;}'
+  .
+
+{\bf partDeclaration:}partHeader topLevelDefinition* EOF
+  .
 \end{grammar}
 
 \LMHash{}
-A {\em part header} begins with  \PART{} \OF{}  followed by the name of the library the part belongs to.  A part declaration consists of a part header followed by a sequence of top-level declarations.
+A {\em part header} begins with \PART{} \OF{} followed by the name of the library the part belongs to.
+A part declaration consists of a part header followed by a sequence of top-level declarations.
 
 \LMHash{}
-Compiling a part directive of the form \code{\PART{} $s$;} causes the Dart system to attempt to compile the contents of the URI that is the value of $s$. The top-level declarations at that URI are then compiled by the Dart compiler in the scope of the current library. It is a compile-time error if the contents of the URI are not a valid part declaration. It is a static warning if the referenced part declaration $p$ names a library other than the current library as the library to which $p$ belongs.
+Compiling a part directive of the form \code{\PART{} $s$;} causes the Dart system to attempt to compile the contents of the URI that is the value of $s$.
+The top-level declarations at that URI are then compiled by the Dart compiler in the scope of the current library.
+It is a compile-time error if the contents of the URI are not a valid part declaration.
+It is a static warning if the referenced part declaration $p$ names a library other than the current library as the library to which $p$ belongs.
 
 \LMHash{}
 It's a compile-time error if the same library contains two part directives with the same URI.
 
+
 \subsection{Scripts}
 \LMLabel{scripts}
 
@@ -7285,6 +7872,7 @@
 As such, it should be reported as a compile-time error,
 even if that library compiles successfully as a non-script library.
 
+
 \subsection{URIs}
 \LMLabel{uris}
 
@@ -7292,20 +7880,21 @@
 URIs are specified by means of string literals:
 
 \begin{grammar}
-{\bf uri:}
-      stringLiteral
-    .
+{\bf uri:}stringLiteral
+  .
 \end{grammar}
 
 \LMHash{}
-It is a compile-time error if  the string literal $x$ that describes a URI is not a compile-time constant, or if $x$ involves string interpolation.
+It is a compile-time error if the string literal $x$ that describes a URI is not a compile-time constant, or if $x$ involves string interpolation.
 
 \LMHash{}
 This specification does not discuss the interpretation of URIs, with the following exceptions.
 
- \rationale{
- The interpretation of URIs is mostly left to the surrounding computing environment. For example, if Dart is running in a web browser, that browser will likely interpret some URIs. While it might seem attractive to specify, say, that URIs are interpreted with respect to a standard such as IETF RFC 3986, in practice this will usually depend on the browser and cannot be relied upon.
- }
+\rationale{
+The interpretation of URIs is mostly left to the surrounding computing environment.
+For example, if Dart is running in a web browser, that browser will likely interpret some URIs.
+While it might seem attractive to specify, say, that URIs are interpreted with respect to a standard such as IETF RFC 3986, in practice this will usually depend on the browser and cannot be relied upon.
+}
 
 \LMHash{}
 A URI of the form \code{dart:$s$} is interpreted as a reference to a system library (\ref{imports}) $s$.
@@ -7318,9 +7907,12 @@
 }
 
 \LMHash{}
-Otherwise, any relative URI is interpreted as relative to the location of the current library. All further interpretation of URIs is implementation dependent.
+Otherwise, any relative URI is interpreted as relative to the location of the current library.
+All further interpretation of URIs is implementation dependent.
 
-\commentary{This means it is dependent on the embedder.}
+\commentary{
+This means it is dependent on the embedder.
+}
 
 
 \section{Types}
@@ -7329,68 +7921,74 @@
 \LMHash{}
 Dart supports optional typing based on interface types.
 
-\rationale{The type system is unsound, due to the covariance of generic types. This is a deliberate choice (and undoubtedly controversial).  Experience has shown that sound type rules for generics fly in the face of programmer intuition. It is easy for tools to provide a sound type analysis if they choose, which may be useful for tasks like refactoring.
+\rationale{
+The type system is unsound, due to the covariance of generic types.
+This is a deliberate choice (and undoubtedly controversial).
+Experience has shown that sound type rules for generics fly in the face of programmer intuition.
+It is easy for tools to provide a sound type analysis if they choose, which may be useful for tasks like refactoring.
 }
 
+
 \subsection{Static Types}
 \LMLabel{staticTypes}
 
 \LMHash{}
-Static type annotations are used in variable declarations (\ref{variables}) (including formal parameters (\ref{formalParameters})), in the return types of functions (\ref{functions}) and in the bounds of type variables.  Static type annotations are used during static  checking and when running programs in checked mode. They have no effect whatsoever in production mode.
+Static type annotations are used in variable declarations (\ref{variables}) (including formal parameters (\ref{formalParameters})), in the return types of functions (\ref{functions}) and in the bounds of type variables.
+Static type annotations are used during static checking and when running programs in checked mode.
+They have no effect whatsoever in production mode.
 
- \begin{grammar}
-{\bf type:}
-      typeName typeArguments?
-    .
+\begin{grammar}
+{\bf type:}typeName typeArguments?
+  .
 
-{\bf typeName:}
-      qualified
-    .
+{\bf typeName:}qualified
+  .
 
-{\bf typeArguments:}
-      `<' typeList `>'
-    .
+{\bf typeArguments:}`<' typeList `>'
+  .
 
-{\bf typeList:}
-      type (`,' type)*
-    .
- \end{grammar}
+{\bf typeList:}type (\gcomma{} type)*
+  .
+\end{grammar}
 
 \LMHash{}
-A Dart implementation must provide a static checker that detects and reports exactly those situations this specification identifies as static warnings and only those situations. However:
+A Dart implementation must provide a static checker that detects and reports exactly those situations this specification identifies as static warnings and only those situations.
+However:
 \begin{itemize}
-\item Running  the static checker on a program $P$ is not required for compiling and running $P$.
+\item Running the static checker on a program $P$ is not required for compiling and running $P$.
 \item Running the static checker on a program $P$ must not prevent successful compilation of $P$ nor may it prevent the execution of $P$, regardless of whether any static warnings occur.
 \end{itemize}
 
-\commentary{Nothing precludes additional tools that implement alternative static analyses (e.g., interpreting the existing type annotations in a sound manner such as either non-variant generics, or inferring declaration based variance from the actual declarations). However, using these tools must not preclude successful compilation and execution of Dart code.
+\commentary{
+Nothing precludes additional tools that implement alternative static analyses (e.g., interpreting the existing type annotations in a sound manner such as either non-variant generics, or inferring declaration based variance from the actual declarations).
+However, using these tools must not preclude successful compilation and execution of Dart code.
 }
 
-%\Q{Should we do something with respect to non-nullable types?}
-
 \LMHash{}
-A type $T$ is {\em malformed} iff:
+A type $T$ is {\em malformed} if{}f:
 \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 $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$.
-%  \end{itemize}
+%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$.
+% \end{itemize}
 \end{itemize}
 
 \LMHash{}
- Any use of a malformed  type gives rise to a static warning. A malformed type is then interpreted as \DYNAMIC{} by the static type checker and the run-time system unless explicitly specified otherwise.
+ Any use of a malformed type gives rise to a static warning.
+A malformed type is then interpreted as \DYNAMIC{} by the static type checker and the run-time system unless explicitly specified otherwise.
 
- \rationale{
+\rationale{
 This ensures that the developer is spared a series of cascading warnings as the malformed type interacts with other types.
 }
 
 \LMHash{}
-A type $T$ is {\em deferred} iff it is of the form $p.T$ where $p$ is a deferred prefix.
-It is a static warning to use a deferred type in a type annotation, type test, type cast or as a type parameter. However, all other static warnings must be issued under the assumption that all deferred libraries have successfully been loaded.
+A type $T$ is {\em deferred} if{}f it is of the form $p.T$ where $p$ is a deferred prefix.
+It is a static warning to use a deferred type in a type annotation, type test, type cast or as a type parameter.
+However, all other static warnings must be issued under the assumption that all deferred libraries have successfully been loaded.
 
 % Now, when passed to a generic, p.T also has to be treated as dynamic - otherwise we have to fail immediately. Where do we say that? And how does this fit with idea that as a type object it fails? Should we say that the accessor on p returns dynamic instead of failing? Do we distinguish its use in a constructor vs its use in an annotation? It's not that we evaluate type objects in constructor args - these cannot represent parameterized types.
 
@@ -7399,40 +7997,47 @@
 \LMLabel{typePromotion}
 
 \LMHash{}
-The static type system ascribes a static type to every expression.  In some cases, the types of local variables and formal parameters may be promoted from their declared types based on control flow.
+The static type system ascribes a static type to every expression.
+In some cases, the types of local variables and formal parameters may be promoted from their declared types based on control flow.
 
 \LMHash{}
-We say that a variable $v$ is known to have type $T$ whenever we allow the type of $v$ to be promoted. The exact circumstances when type promotion is allowed are given in the relevant sections of the specification (\ref{logicalBooleanExpressions}, \ref{conditional} and \ref{if}).
+We say that a variable $v$ is known to have type $T$ whenever we allow the type of $v$ to be promoted.
+The exact circumstances when type promotion is allowed are given in the relevant sections of the specification (\ref{logicalBooleanExpressions}, \ref{conditional} and \ref{if}).
 
 \LMHash{}
-Type promotion for a variable $v$ is allowed only when we can deduce that such promotion is valid based on an analysis of certain boolean expressions. In such cases, we say that the boolean expression $b$ shows that $v$ has type $T$. As a rule, for all variables $v$ and types $T$, a boolean expression does not show that $v$ has type $T$. Those situations where an expression does show that a variable has a type are mentioned explicitly in the relevant sections of this specification (\ref{typeTest} and \ref{logicalBooleanExpressions}).
+Type promotion for a variable $v$ is allowed only when we can deduce that such promotion is valid based on an analysis of certain boolean expressions.
+In such cases, we say that the boolean expression $b$ shows that $v$ has type $T$.
+As a rule, for all variables $v$ and types $T$, a boolean expression does not show that $v$ has type $T$.
+Those situations where an expression does show that a variable has a type are mentioned explicitly in the relevant sections of this specification (\ref{typeTest} and \ref{logicalBooleanExpressions}).
 
 
 \subsection{Dynamic Type System}
 \LMLabel{dynamicTypeSystem}
 
 \LMHash{}
-A Dart implementation must support execution in both {\em production mode} and {\em checked mode}.  Those dynamic checks specified as occurring specifically in checked mode must be performed iff the code is executed in checked mode.
+A Dart implementation must support execution in both {\em production mode} and {\em checked mode}.
+Those dynamic checks specified as occurring specifically in checked mode must be performed if{}f the code is executed in checked mode.
 
 \commentary{
-Note that this is the case even if the deferred type belongs to a prefix that has already been loaded. This is regrettable, since it strongly discourages the use of type annotations that involve deferred types because Dart programmers use checked mode much of the time.
+Note that this is the case even if the deferred type belongs to a prefix that has already been loaded.
+This is regrettable, since it strongly discourages the use of type annotations that involve deferred types because Dart programmers use checked mode much of the time.
 
-In practice, many scenarios involving deferred loading involve deferred loading of classes that implement eagerly loaded interfaces, so the situation is often less onerous than it seems. The current semantics were adopted based on considerations of ease of implementation.
+In practice, many scenarios involving deferred loading involve deferred loading of classes that implement eagerly loaded interfaces, so the situation is often less onerous than it seems.
+The current semantics were adopted based on considerations of ease of implementation.
 
-Clearly, if a deferred type has not yet been loaded, it is impossible to do a correct subtype test involving it, and one would expect a dynamic failure, as is the case with type tests and casts. By the same token, one would expect checked mode to work seamlessly once a type had been loaded. We hope to adopt these semantics in the future; such a change would be upwardly compatible.
-
+Clearly, if a deferred type has not yet been loaded, it is impossible to do a correct subtype test involving it, and one would expect a dynamic failure, as is the case with type tests and casts.
+By the same token, one would expect checked mode to work seamlessly once a type had been loaded.
+We hope to adopt these semantics in the future; such a change would be upwardly compatible.
 }
 
-%It is a run-time type error to access an undeclared type outside .
-
 \LMHash{}
-%It is a dynamic type error if a malformed type is used in a subtype test.
-In checked mode, it is a dynamic type error if a deferred, malformed or malbounded (\ref{parameterizedTypes})
-type is used in a subtype test.
+In checked mode, it is a dynamic type error if a deferred, malformed or malbounded (\ref{parameterizedTypes}) type is used in a subtype test.
 
 %In production mode, an undeclared type is treated as an instance of type \DYNAMIC{}.
 
-\commentary{Consider the following program}
+\commentary{
+Consider the following program:
+}
 
 \begin{dartCode}
 \TYPEDEF{} F(bool x);
@@ -7445,24 +8050,28 @@
 \end{dartCode}
 
 \commentary{
-The type of the formal parameter of $f$ is $foo$, which is undeclared in the lexical scope. This will lead to a static type warning. At run time the program will print \cd{yoyoma}, because $foo$ is treated as \DYNAMIC{}.
+The type of the formal parameter of $f$ is $foo$, which is undeclared in the lexical scope.
+This will lead to a static type warning.
+At run time the program will print \code{yoyoma}, because $foo$ is treated as \DYNAMIC{}.
 %fail when executing the type test on the first line of $main()$ because it leads to a subtype comparison involving a malformed type ($foo$).
 
-As another example take}
+As another example take
+}
 
 \begin{dartCode}
 \VAR{} i;
-i  j; //  a variable j of type i (supposedly)
+i j; // a variable j of type i (supposedly)
 main() \{
-     j =  'I am not an i';
+     j = 'I am not an i';
 \}
 \end{dartCode}
 
 \commentary{
-Since $i$ is not a type, a static warning will be issue at the declaration of $j$. However, the program can be executed without incident in production mode because the undeclared type $i$ is treated as \DYNAMIC{}. However, in checked mode, the implicit subtype test at the assignment will trigger an error at run time.
+Since $i$ is not a type, a static warning will be issue at the declaration of $j$.
+However, the program can be executed without incident in production mode because the undeclared type $i$ is treated as \DYNAMIC{}.
+However, in checked mode, the implicit subtype test at the assignment will trigger an error at run time.
 }
 
-
 \commentary{
 Here is an example involving malbounded types:
 }
@@ -7471,19 +8080,24 @@
 \CLASS{} I<T \EXTENDS{} num> \{\}
 \CLASS{} J \{\}
 
-\CLASS{} A<T> \IMPLEMENTS{} J,  I<T> // type warning: T is not a subtype of num
+\CLASS{} A<T> \IMPLEMENTS{} J, I<T> // type warning: T is not a subtype of num
 \{ ...
 \}
 \end{dartCode}
 
-\commentary{Given the declarations above, the following}
+\commentary{
+Given the declarations above, the following
+}
 
 \begin{dartCode}
 I x = \NEW{} A<String>();
 \end{dartCode}
 
 \commentary{
-will cause a dynamic type error in checked mode, because the assignment requires a subtype test A<String> <: I. To show that this holds, we need to show that A<String>  $<<$ I<String>, but I<String> is a malbounded type, causing the dynamic error.  No error is thrown in production mode. Note that
+will cause a dynamic type error in checked mode, because the assignment requires a subtype test A<String> <: I.
+To show that this holds, we need to show that A<String> $<<$ I<String>, but I<String> is a malbounded type, causing the dynamic error.
+No error is thrown in production mode.
+Note that
 }
 
 \begin{dartCode}
@@ -7505,73 +8119,58 @@
 }
 
 
-
 \subsection{Type Declarations}
 \LMLabel{typeDeclarations}
 
+
 \subsubsection{Typedef}
 \LMLabel{typedef}
 
 \LMHash{}
 A {\em type alias} declares a name for a type expression.
 
-
 \begin{grammar}
+{\bf typeAlias:}metadata \TYPEDEF{} typeAliasBody
+  .
 
-{\bf typeAlias:}
- 	metadata  \TYPEDEF{} typeAliasBody
-	.
+{\bf typeAliasBody:}functionTypeAlias
+  .
 
-{\bf typeAliasBody:}
-	functionTypeAlias
-	.
+{\bf functionTypeAlias:}functionPrefix typeParameters? formalParameterList `{\escapegrammar ;}'
+  .
 
-{\bf functionTypeAlias:}
-       functionPrefix  typeParameters? formalParameterList `{\escapegrammar ;}'
-    .
-
-    {\bf functionPrefix:}
-    returnType? identifier
-    .
-
- \end{grammar}
+{\bf functionPrefix:}returnType? identifier
+  .
+\end{grammar}
 
 \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$.
-In either case, iff 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{}.
+ 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$.
+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{}.
 
 \LMHash{}
 It is a compile-time error if any default values are specified in the signature of a function type alias.
-%A typedef may only refer to itself  via the bounds of its generic parameters.
-Any  self reference in a typedef, either directly, or recursively via another typedef, is a compile-time error.
+%A typedef may only refer to itself via the bounds of its generic parameters.
+Any self reference in a typedef, either directly, or recursively via another typedef, is a compile-time error.
 %via a chain of references that does not include a class declaration.
 
 
-
 \subsection{Interface Types}
 \LMLabel{interfaceTypes}
 
 \LMHash{}
-The implicit interface of class $I$ is a direct supertype of the implicit interface of class  $J$ iff:
+The implicit interface of class $I$ is a direct supertype of the implicit interface of class $J$ if{}f:
 \begin{itemize}
-\item
-If $I$ is \code{Object}, and $J$ has no \EXTENDS{} clause% and no interface injection declaration has extended $J.
-\item
-If $I$ is listed in the \EXTENDS{} clause of $J$% or an interface injection declaration has extended $J$ with $I$
-.
-\item If $I$ is listed in the \IMPLEMENTS{} clause of $J$
-
-\item If $I$ is listed in the \WITH{} clause of $J$
-
-\item If $J$ is a mixin application (\ref{mixinApplication}) of the mixin of $I$.
+\item $I$ is \code{Object}, and $J$ has no \EXTENDS{} clause.
+\item $I$ is listed in the \EXTENDS{} clause of $J$.
+\item $I$ is listed in the \IMPLEMENTS{} clause of $J$.
+\item $I$ is listed in the \WITH{} clause of $J$.
+\item $J$ is a mixin application (\ref{mixinApplication}) of the mixin of $I$.
 \end{itemize}
 
-%\Q{Can wacky stuff happen with interface injection, e.g., a direct superinterface becomes indirect? What about side effects - loading order can affect type relationships.
-%}
-
 \LMHash{}
-A type $T$ is more specific than a type $S$, written $T << S$,  if one of the following conditions is met:
+A type $T$ is more specific than a type $S$, written $T << S$, if one of the following conditions is met:
 \begin{itemize}
 \item $T$ is $S$.
 \item $T$ is $\bot$.
@@ -7579,22 +8178,26 @@
 \item $S$ is \DYNAMIC{}.
 \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 \cd{Object}.
+\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:
 $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 \cd{Function}.
+\item $T$ is a function type and $S$ is \code{Function}.
 \item $T << U$ and $U << S$.
 \end{itemize}
 
 \LMHash{}
 $<<$ is a partial order on types.
-$T$ is a subtype of $S$, written $T <: S$, iff $[\bot/\DYNAMIC{}]T << S$.
+$T$ is a subtype of $S$, written $T <: S$, if{}f $[\bot/\DYNAMIC{}]T << S$.
 
 \rationale{
-Note that $<:$ is not a partial order on types, it is only binary relation on types. This is because $<:$ is not transitive. If it was, the subtype rule would have a cycle. For example:
+Note that $<:$ is not a partial order on types, it is only binary relation on types.
+This is because $<:$ is not transitive.
+If it was, the subtype rule would have a cycle.
+For example:
 $List <: List<String>$ and $List<int> <: List$, but $List<int>$ is not a subtype of $List<String>$.
-Although $<:$ is not a partial order on types, it does contain a partial order, namely $<<$. This means that, barring raw types, intuition about classical subtype rules does apply.
+Although $<:$ is not a partial order on types, it does contain a partial order, namely $<<$.
+This means that, barring raw types, intuition about classical subtype rules does apply.
 }
 
 \commentary{
@@ -7605,18 +8208,24 @@
 }
 
 \LMHash{}
-$S$ is a supertype of $T$, written $S :> T$, iff $T$ is a subtype of $S$.
+$S$ is a supertype of $T$, written $S :> T$, if{}f $T$ is a subtype of $S$.
 
-\commentary{The supertypes of an interface are its direct supertypes and their supertypes. }
+\commentary{
+The supertypes of an interface are its direct supertypes and their supertypes.
+}
 
 \LMHash{}
-An interface type $T$ may be assigned to a type $S$, written  $T \Longleftrightarrow S$, iff either $T <: S$, $S <: T$.
+An interface type $T$ may be assigned to a type $S$, written $T \Longleftrightarrow S$, if{}f either $T <: S$, $S <: T$.
 
-\rationale{This rule may surprise readers accustomed to conventional typechecking. The intent of the $\Longleftrightarrow$ relation is not to ensure that an assignment is correct. Instead, it aims to only flag assignments that are almost certain to be erroneous, without precluding assignments that may work.
+\rationale{
+This rule may surprise readers accustomed to conventional typechecking.
+The intent of the $\Longleftrightarrow$ relation is not to ensure that an assignment is correct.
+Instead, it aims to only flag assignments that are almost certain to be erroneous, without precluding assignments that may work.
 
 For example, assigning a value of static type Object to a variable with static type String, while not guaranteed to be correct, might be fine if the run-time value happens to be a string.
 }
 
+
 \subsection{Function Types}
 \LMLabel{functionTypes}
 
@@ -7624,53 +8233,54 @@
 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$.
+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$.
 \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$.
+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$.
 \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}
 %\item $S$ is \VOID{}, Or
-%\item  $T  \Longleftrightarrow S$.
+%\item $T \Longleftrightarrow S$.
 %\end{itemize}
 %\item$ \forall i \in 1 .. n, T_i \Longleftrightarrow S_i$.
 %\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
+%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
+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:
 \begin{enumerate}
 \item Either
 \begin{itemize}
 \item $S$ is \VOID{}, Or
-\item  $T  \Longleftrightarrow S$.
+\item $T \Longleftrightarrow S$.
 \end{itemize}
 \item $\forall i \in 1 .. n, T_i \Longleftrightarrow S_i$.
 \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:
 \begin{enumerate}
 \item Either
 \begin{itemize}
 \item $S$ is \VOID{}, Or
-\item  $T  \Longleftrightarrow S$.
+\item $T \Longleftrightarrow S$.
 \end{itemize}
 \item $\forall i \in 1 .. n, T_i \Longleftrightarrow S_i$.
-\item $k \ge m$ and $y_i \in \{x_1,  \ldots, x_k\}, i \in 1 .. m$.
-%\{x_1,  \ldots, x_k\}$ is a superset of $\{y_1,  \ldots, y_m\}$.
-\item For all $y_i \in \{y_1,  \ldots, y_m\}, y_i = x_j \Rightarrow T_{x_j} \Longleftrightarrow S_{y_i}$
+\item $k \ge m$ and $y_i \in \{x_1, \ldots, x_k\}, i \in 1 .. m$.
+%\{x_1, \ldots, x_k\}$ is a superset of $\{y_1, \ldots, y_m\}$.
+\item For all $y_i \in \{y_1, \ldots, y_m\}, y_i = x_j \Rightarrow T_{x_j} \Longleftrightarrow S_{y_i}$
 \end{enumerate}
 
 %In addition, a function type $(T_1, \ldots, Tn, [T_{n+1} x_{n+1}, \ldots, T_{n+k} x_{n+k}]) \rightarrow T$ is a subtype of the function type $(T_1, \ldots, T_n, T_{n+1} , [T_{n+2} x_{n+2}, \ldots, T_{n+k} x_{n+k}]) \rightarrow T$.
 
-%\rationale{This second rule is attractive to web developers, who are used to this sort of flexibility from Javascript. However, it may be costly to implement efficiently.} \Q{Should we do this or not?}
+%\rationale{This second rule is attractive to web developers, who are used to this sort of flexibility from Javascript. However, it may be costly to implement efficiently.}
 
 %We write $(T_1, \ldots, T_n) \rightarrow T$ as a shorthand for the type $(T_1, \ldots, T_n, []) \rightarrow T$.
 
@@ -7680,7 +8290,6 @@
 \LMHash{}
 In addition, the following subtype rules apply:
 
-
 $(T_1, \ldots, T_n, []) \rightarrow T <: (T_1, \ldots, T_n) \rightarrow T$.
 
 $(T_1, \ldots, T_n) \rightarrow T <: (T_1, \ldots, T_n, \{\}) \rightarrow T$.
@@ -7690,47 +8299,46 @@
 $(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. However, they induce  useful relationships between function types that declare no optional parameters and those that do.
+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.
+However, they induce useful relationships between function types that declare no optional parameters and those that do.
 }
 
 \LMHash{}
-A function type $T$ may be assigned to a function type $S$, written  $T \Longleftrightarrow S$, iff  $T <: S$.
+A function type $T$ may be assigned to a function type $S$, written $T \Longleftrightarrow S$, if{}f $T <: S$.
 
 \LMHash{}
-% ensure that Object  and dynamic may be assign dot a function type
-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 \cd{Function} and does not have a concrete method named \CALL{} unless that class has an implementation of \cd{noSuchMethod()} distinct from the one declared in class \cd{Object}.
-
-
-
+% ensure that Object and dynamic may be assign dot a function type
+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}.
 
 %\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
+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:
 \begin{enumerate}
 \item Either
 \begin{itemize}
 \item $S$ is \VOID{}, Or
-\item  $T << S$.
+\item $T << S$.
 \end{itemize}
 \item $\forall i \in 1 .. n, T_i << S_i$.
 \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:
 \begin{enumerate}
 \item Either
 \begin{itemize}
 \item $S$ is \VOID{}, Or
-\item  $T  << S$.
+\item $T << S$.
 \end{itemize}
 \item $\forall i \in 1 .. n, T_i << S_i$.
-\item $k \ge m$ and $y_i \in \{x_1,  \ldots, x_k\}, i \in 1 .. m$.
-%\{x_1,  \ldots, x_k\}$ is a superset of $\{y_1,  \ldots, y_m\}$.
-\item For all $y_i \in \{y_1,  \ldots, y_m\}, y_i = x_j \Rightarrow T_j << S_i$
+\item $k \ge m$ and $y_i \in \{x_1, \ldots, x_k\}, i \in 1 .. m$.
+%\{x_1, \ldots, x_k\}$ is a superset of $\{y_1, \ldots, y_m\}$.
+\item For all $y_i \in \{y_1, \ldots, y_m\}, y_i = x_j \Rightarrow T_j << S_i$
 \end{enumerate}
 
 \LMHash{}
@@ -7741,39 +8349,51 @@
 \LMLabel{typeDynamic}
 
 \LMHash{}
-The type  \DYNAMIC{}  denotes the unknown type.
+The type \DYNAMIC{} denotes the unknown type.
 
 \LMHash{}
-If no static type annotation has been provided the type system assumes the declaration has the unknown type. If a generic type is used but type arguments are not provided, then the  type arguments default to the unknown type.
+If no static type annotation has been provided the type system assumes the declaration has the unknown type.
+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{}>$.
+\commentary{
+This means that given a generic declaration $G<T_1, \ldots, T_n>$, the type $G$ is equivalent to $G< \DYNAMIC{}, \ldots, \DYNAMIC{}>$.
 }
 
 \LMHash{}
-Type  \DYNAMIC{} has methods for every possible identifier and arity, with every possible combination of named parameters. These methods all have  \DYNAMIC{} as their return type, and their formal parameters all have type  \DYNAMIC{}.
-Type  \DYNAMIC{} has properties for every possible identifier. These properties all have type  \DYNAMIC{}.
+Type \DYNAMIC{} has methods for every possible identifier and arity, with every possible combination of named parameters.
+These methods all have \DYNAMIC{} as their return type, and their formal parameters all have type \DYNAMIC{}.
+Type \DYNAMIC{} has properties for every possible identifier.
+These properties all have type \DYNAMIC{}.
 
-\rationale{From a usability perspective, we want to ensure that the checker does not issue errors everywhere an unknown type is used. The definitions above ensure that no secondary errors are reported when accessing an unknown type.
+\rationale{
+From a usability perspective, we want to ensure that the checker does not issue errors everywhere an unknown type is used.
+The definitions above ensure that no secondary errors are reported when accessing an unknown type.
 
-The current rules say that missing type arguments are treated as if they were the type  \DYNAMIC{}.  An alternative is to consider them as meaning \code{Object}.  This would lead to earlier error detection in checked mode, and more aggressive errors during static typechecking. For example:
+The current rules say that missing type arguments are treated as if they were the type \DYNAMIC{}.
+An alternative is to consider them as meaning \code{Object}.
+This would lead to earlier error detection in checked mode, and more aggressive errors during static typechecking.
+For example:
 
-(1)  \code{typedAPI(G\lt{String}\gt g)\{...\}}
+(1) \code{typedAPI(G\lt{String}\gt g)\{...\}}
 
+(2) \code{typedAPI(new G()); }
 
-(2)  \code{typedAPI(new G()); }
-
-
-Under the alternative rules, (2) would cause a run-time error in checked mode. This seems desirable from the perspective of error localization. However, when a dynamic error is thrown at (2), the only way to keep running is rewriting (2) into
+Under the alternative rules, (2) would cause a run-time error in checked mode.
+This seems desirable from the perspective of error localization.
+However, when a dynamic error is thrown at (2), the only way to keep running is rewriting (2) into
 
 (3) \code{typedAPI(new G\lt{String}\gt());}
 
-This forces users to write type information in their client code just because they are calling a typed API.  We do not want to impose this on Dart programmers, some of which may be blissfully unaware of types in general, and genericity in particular.
+This forces users to write type information in their client code just because they are calling a typed API.
+We do not want to impose this on Dart programmers, some of which may be blissfully unaware of types in general, and genericity in particular.
 
-What of static checking? Surely we would want to flag (2) when users have explicitly asked for static typechecking? Yes, but the reality is that the Dart static checker is likely to be running in the background by default. Engineering teams typically desire a ``clean build'' free of warnings and so the checker is designed to be extremely charitable. Other tools can interpret the type information more aggressively and warn about violations of conventional (and sound) static type discipline.
+What of static checking? Surely we would want to flag (2) when users have explicitly asked for static typechecking? Yes, but the reality is that the Dart static checker is likely to be running in the background by default.
+Engineering teams typically desire a ``clean build'' free of warnings and so the checker is designed to be extremely charitable.
+Other tools can interpret the type information more aggressively and warn about violations of conventional (and sound) static type discipline.
 }
 
 \LMHash{}
-The name \DYNAMIC{} denotes a \cd{Type} object even though \DYNAMIC{} is not a class.
+The name \DYNAMIC{} denotes a \code{Type} object even though \DYNAMIC{} is not a class.
 
 \LMHash{}
 The built-in type declaration \code{FutureOr},
@@ -7788,13 +8408,13 @@
 the same warnings are issued for \code{FutureOr},
 even though the type arguments are otherwise ignored.
 The name \code{FutureOr} as an expression
-denotes the same \cd{Type} object as \DYNAMIC{}.
+denotes the same \code{Type} object as \DYNAMIC{}.
 
 \rationale{
 The \code{FutureOr} type is reserved for future use,
 for cases where a value can be either an instance of the type \metavar{type}
-or the type \code{Future<\metavar{type}>}. Such cases occur naturally
-in asynchronous code.
+or the type \code{Future<\metavar{type}>}.
+Such cases occur naturally in asynchronous code.
 Using \code{FutureOr} instead of \DYNAMIC{} will allow some tools
 to provide a more precise type analysis.
 }
@@ -7802,6 +8422,7 @@
 %Type objects reify the run-time types of instances. No instance ever has type \DYNAMIC{}.
 %}
 
+
 \subsection{Type Void}
 \LMLabel{typeVoid}
 
@@ -7820,25 +8441,31 @@
 \item
 $\bot <: \VOID{}$ (as bottom is a subtype of all types).
 \item
-$\VOID{} <:   \DYNAMIC{}$ (as \DYNAMIC{} is a supertype of all types)
+$\VOID{} <: \DYNAMIC{}$ (as \DYNAMIC{} is a supertype of all types)
 \end{itemize}
 
-The analogous rules also hold for the $<<$ relation for  similar reasons.
+The analogous rules also hold for the $<<$ relation for similar reasons.
 
-Hence, the static checker will issue warnings if one attempts to access a member of the result of a void method invocation (even for members of the null object (\ref{null}), such as \code{==}).  Likewise, passing the result of a void method as a parameter or assigning it to a variable will cause a warning unless the variable/formal parameter has type dynamic.
+Hence, the static checker will issue warnings if one attempts to access a member of the result of a void method invocation (even for members of the null object (\ref{null}), such as \code{==}).
+Likewise, passing the result of a void method as a parameter or assigning it to a variable will cause a warning unless the variable/formal parameter has type dynamic.
 
-On the other hand, it is possible to return the result of a void method from within a void method. One can also return the null object (\ref{null}); or a value of type \DYNAMIC{}. Returning any other result will cause a type warning. In checked mode, a dynamic type error would arise if a non-null object was returned from a void method (since no object has run-time type \DYNAMIC{}).
+On the other hand, it is possible to return the result of a void method from within a void method.
+One can also return the null object (\ref{null}); or a value of type \DYNAMIC{}.
+Returning any other result will cause a type warning.
+In checked mode, a dynamic type error would arise if a non-null object was returned from a void method (since no object has run-time type \DYNAMIC{}).
 }
 
-\commentary {The name \VOID{} does not denote a \cd{Type} object.}
+\commentary{
+The name \VOID{} does not denote a \code{Type} object.
+}
 
-\rationale {
+\rationale{
 It is syntacticly illegal to use \VOID{} as an expression, and it would make no sense to do so.
-Type objects reify the run-time types of instances. No instance ever has type \VOID{}.
+Type objects reify the run-time types of instances.
+No instance ever has type \VOID{}.
 }
 
 
-
 \subsection{Parameterized Types}
 \LMLabel{parameterizedTypes}
 
@@ -7846,14 +8473,18 @@
 A {\em parameterized type} is an invocation of a generic type declaration.
 
 \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{}.
+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{}.
 
-\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{}. Of course, a static warning will be issued.
+\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{}.
+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} iff 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 $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$.
 
 \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}.
@@ -7863,30 +8494,32 @@
 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$. It is a static type warning if $G$ is not a generic type with exactly $n$ type parameters.
-
-
-
+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$.
+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$ iff:
+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}
 
 \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.
+The {\em actual type} of $d$ is
 
 \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 $[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}
 
+
 \subsubsection{Least Upper Bounds}
 \LMLabel{leastUpperBounds}
 
@@ -7909,7 +8542,8 @@
 The least upper bound of \DYNAMIC{} and any type $T$ is \DYNAMIC{}.
 The least upper bound of \VOID{} and any type $T \ne \DYNAMIC{}$ is \VOID{}.
 The least upper bound of $\bot$ and any type $T$ is $T$.
-Let $U$ be a type variable with upper bound $B$. The least upper bound of $U$ and a type $T \ne \bot$ is the least upper bound of $B$ and $T$.
+Let $U$ be a type variable with upper bound $B$.
+The least upper bound of $U$ and a type $T \ne \bot$ is the least upper bound of $B$ and $T$.
 
 \LMHash{}
 The least upper bound operation is commutative and idempotent,
@@ -7918,8 +8552,10 @@
 % Function types
 
 \LMHash{}
-The least upper bound of a function type and an interface type $T$ is the least upper bound of \cd{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 \cd{Function}.  Otherwise:
+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}.
+Otherwise:
 \begin{itemize}
 \item If
 
@@ -7931,7 +8567,7 @@
 
 $(L_1 \ldots L_r, [L_{r+1}, \ldots, L_k]) \longrightarrow L_0$
 
-where $L_i$ is the least upper bound of $T_i$ and $S_i, i \in 0..k$.
+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$,
@@ -7943,30 +8579,34 @@
 $(L_1 \ldots L_r) \longrightarrow L_0$
 
 where $L_i$
-is the least upper bound of $T_i$ and $S_i, i \in 0..r$.
+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$,
+$F= (T_1 \ldots T_r, \{T_{r+1}$ $p_{r+1}, \ldots, T_f$ $p_f\}) \longrightarrow T_0$,
 
-$G= (S_1 \ldots S_r, \{ S_{r+1}$  $q_{r+1}, \ldots, S_g$ $q_g\}) \longrightarrow S_0$
+$G= (S_1 \ldots S_r, \{ S_{r+1}$ $q_{r+1}, \ldots, S_g$ $q_g\}) \longrightarrow 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
-the least upper bound of $F$ and $G$ is
+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$
 
-where $L_i$ is the least upper bound of $T_i$ and $S_i, i \in 0..r$
+where $L_i$ is the least upper bound of $T_i$ and $S_i, i \in 0 .. r$
 \end{itemize}
 
 
 \section{Reference}
 \LMLabel{reference}
 
+
 \subsection{Lexical Rules}
 \LMLabel{lexicalRules}
 
 \LMHash{}
-Dart source text is represented as a sequence of Unicode code points.  This sequence is first converted into a sequence of tokens according to the lexical rules given in this specification.  At any point in the tokenization process, the longest possible token is recognized.
+Dart source text is represented as a sequence of Unicode code points.
+This sequence is first converted into a sequence of tokens according to the lexical rules given in this specification.
+At any point in the tokenization process, the longest possible token is recognized.
+
 
 \subsubsection{Reserved Words}
 \LMLabel{reservedWords}
@@ -7976,128 +8616,129 @@
 
 \ASSERT{}, \BREAK{}, \CASE{}, \CATCH{}, \CLASS{}, \CONST{}, \CONTINUE{}, \DEFAULT{}, \DO{}, \ELSE{}, \ENUM{}, \EXTENDS{}, \FALSE{}, \FINAL{}, \FINALLY{}, \FOR{}, \IF{}, \IN{}, \IS{}, \NEW{}, \NULL{}, \RETHROW, \RETURN{}, \SUPER{}, \SWITCH{}, \THIS{}, \THROW{}, \TRUE{}, \TRY{}, \VAR{}, \VOID{}, \WHILE{}, \WITH{}.
 
-
-
-%\Q{Unicode characters.}
-
 \begin{grammar}
- {\bf LETTER:}`a' {\escapegrammar ..} `z';
-     `A' {\escapegrammar ..}`Z'
-    .
+{\bf LETTER:}`a' {\escapegrammar ..} `z';
+  `A' {\escapegrammar ..}`Z'
+  .
 
-{\bf DIGIT:}
-      `0' {\escapegrammar ..} `9'
-    .
+{\bf DIGIT:}`0' {\escapegrammar ..} `9'
+  .
 
-{\bf WHITESPACE:}
-      (`$\backslash$t' $|$ ` ' $|$ NEWLINE)+
-    .
+{\bf WHITESPACE:}(`$\backslash$t' $|$ ` ' $|$ NEWLINE)+
+  .
 \end{grammar}
 
+
 \subsubsection{Comments}
 \LMLabel{comments}
 
 \LMHash{}
 {\em Comments} are sections of program text that are used for documentation.
 
-\begin{grammar}{\bf SINGLE\_LINE\_COMMENT:}
-      `//' \~{}(NEWLINE)* (NEWLINE)?
-    .
+\begin{grammar}
+{\bf SINGLE\_LINE\_COMMENT:}`//' \~{}(NEWLINE)* (NEWLINE)?
+  .
 
-{\bf MULTI\_LINE\_COMMENT:}
-      `/*' (MULTI\_LINE\_COMMENT $|$ \~{} `*/')* `*/'
-    .
- \end{grammar}
+{\bf MULTI\_LINE\_COMMENT:}`/*' (MULTI\_LINE\_COMMENT $|$ \~{} `*/')* `*/'
+  .
+\end{grammar}
 
 \LMHash{}
-Dart supports both single-line and multi-line comments. A {\em single line comment} begins with the token \code{//}. Everything between \code{//} and the end of line must be ignored by the Dart compiler unless the comment is a documentation comment. .
+Dart supports both single-line and multi-line comments.
+A {\em single line comment} begins with the token \code{//}.
+Everything between \code{//} and the end of line must be ignored by the Dart compiler unless the comment is a documentation comment.
 
 \LMHash{}
-A {\em multi-line comment} begins with the token \code{/*} and ends with the token \code{*/}.  Everything between \code{/}* and \code{*}/ must be ignored by the Dart compiler unless the comment is a documentation comment. Comments may nest.
+A {\em multi-line comment} begins with the token \code{/*} and ends with the token \code{*/}.
+Everything between \code{/}* and \code{*}/ must be ignored by the Dart compiler unless the comment is a documentation comment.
+Comments may nest.
 
 \LMHash{}
-{\em Documentation comments} are comments that begin with the tokens  \code{///} or  \code{/**}. Documentation comments are intended to be processed by a tool that produces human readable documentation.
-
+{\em Documentation comments} are comments that begin with the tokens \code{///} or \code{/**}.
+Documentation comments are intended to be processed by a tool that produces human readable documentation.
 
 \LMHash{}
 The scope of a documentation comment immediately preceding the declaration of a class $C$ is the instance scope of $C$.
 
 \LMHash{}
-The scope of a documentation comment immediately preceding the declaration of a function $f$  is the  scope in force at the very beginning of the body of $f$.
+The scope of a documentation comment immediately preceding the declaration of a function $f$ is the scope in force at the very beginning of the body of $f$.
 
 
-
-
-
-%\subsection{Grammar}
-%\LMLabel{grammar}
 \subsection{Operator Precedence}
 \LMLabel{operatorPrecedence}
 
 \LMHash{}
 Operator precedence is given implicitly by the grammar.
 
-\commentary{The following non-normative table may be helpful
+\commentary{
+The following non-normative table may be helpful
 \newline
 
 \begin{tabular}{| r | r | r | r |}
 \hline
-Description &  Operator & Associativity & Precedence \\
+Description & Operator & Associativity & Precedence \\
 \hline
-Unary postfix &  ., ?., e++, e--, e1[e2], e1() , () & None & 16 \\
+Unary postfix & ., ?., e++, e--, e1[e2], e1() , () & None & 16 \\
 \hline
 Unary prefix & -e, !e, \~{}e, ++e, --e & None & 15\\
 \hline
-Multiplicative & *, /, \~/,  \%  & Left & 14\\
+Multiplicative & *, /, \~/, \% & Left & 14\\
 \hline
 Additive & +, - & Left & 13\\
 \hline
-Shift &  $<<$, $>>$, $>>>$&  Left & 12\\
+Shift & $<<$, $>>$, $>>>$& Left & 12\\
 \hline
 Bitwise AND & \& & Left & 11\\
 \hline
 Bitwise XOR & \^{} & Left & 10\\
 \hline
-Bitwise Or &  $|$ & Left & 9\\
+Bitwise Or & $|$ & Left & 9\\
 \hline
-Relational & <, >, $<=$, $>=$, \AS{}, \IS{}, \IS{}! &  None & 8\\
+Relational & <, >, $<=$, $>=$, \AS{}, \IS{}, \IS{}! & None & 8\\
 \hline
-Equality &  ==, != & None & 7\\
+Equality & ==, != & None & 7\\
 \hline
 Logical AND & \&\& & Left & 6\\
 \hline
-Logical Or &  $||$ & Left & 5\\
+Logical Or & $||$ & Left & 5\\
 \hline
 If-null & ?? & Left & 4\\
 \hline
-Conditional &  e1? e2: e3 & Right & 3\\
+Conditional & e1? e2: e3 & Right & 3\\
 \hline
-Cascade & ..  & Left & 2\\
+Cascade & .. & Left & 2\\
 \hline
-Assignment &  =, *=, /=, +=, -= ,\&=, \^{}= etc.  &  Right &  1\\
+Assignment & =, *=, /=, +=, -= ,\&=, \^{}= etc. & Right & 1\\
 \hline
 \end{tabular}
 }
-%\subsection{Glossary}
-%\LMLabel{glossary}
 
-%\bibliographystyle{alpha}
-%\bibliography{/users/gilad/research/bibs/master}
+
 \section*{Appendix: Naming Conventions}
 \LMLabel{namingConventions}
 
 \commentary{
 The following naming conventions are customary in Dart programs.
 \begin{itemize}
-\item The names of compile-time constant variables never use lower case letters. If they consist of multiple words, those words are separated by underscores. Examples: PI,  I\_AM\_A\_CONSTANT.
-\item The names of functions (including getters, setters, methods and local or library functions) and non-constant variables begin with a lowercase letter. If the name consists of multiple words, each  word (except the first) begins with an uppercase letter.  No other uppercase letters are used. Examples: camlCase, dart4TheWorld
-\item The names of types (including classes and type aliases) begin with an upper case letter.  If the name consists of multiple words, each  word  begins with an uppercase letter.  No other uppercase letters are used. Examples: CamlCase, Dart4TheWorld.
-\item The names of type variables are short (preferably single letter). Examples: T, S, K, V , E.
-\item The names of libraries or library prefixes never use upper case letters. If they consist of multiple words, those words are separated by underscores. Example: my\_favorite\_library.
+\item The names of compile-time constant variables never use lower case letters.
+If they consist of multiple words, those words are separated by underscores.
+Examples: PI, I\_AM\_A\_CONSTANT.
+\item The names of functions (including getters, setters, methods and local or library functions) and non-constant variables begin with a lowercase letter.
+If the name consists of multiple words, each word (except the first) begins with an uppercase letter.
+No other uppercase letters are used.
+Examples: camlCase, dart4TheWorld
+\item The names of types (including classes and type aliases) begin with an upper case letter.
+If the name consists of multiple words, each word begins with an uppercase letter.
+No other uppercase letters are used.
+Examples: CamlCase, Dart4TheWorld.
+\item The names of type variables are short (preferably single letter).
+Examples: T, S, K, V , E.
+\item The names of libraries or library prefixes never use upper case letters.
+If they consist of multiple words, those words are separated by underscores.
+Example: my\_favorite\_library.
 \end{itemize}
 }
 
-
 \end{document}
 
 [Text after \end{document} is ignored, hence we do not need "%"]
diff --git a/docs/language/informal/nosuchmethod-forwarding.md b/docs/language/informal/nosuchmethod-forwarding.md
index 60cc2f6..8feaf68 100644
--- a/docs/language/informal/nosuchmethod-forwarding.md
+++ b/docs/language/informal/nosuchmethod-forwarding.md
@@ -1,16 +1,16 @@
-## Feature: No Such Method Forwarding
+## NoSuchMethod Forwarding
 
 Author: eernst@
 
-**Status**: Under discussion.
+**Status**: Under implementation.
 
-**Version**: 0.3 (2017-10-05)
+**Version**: 0.5 (2017-11-27)
 
 **This document** is an informal specification of the support in Dart 2 for
 invoking `noSuchMethod` in situations where an attempt is made to invoke a
 method that does not exist.
 
-**The feature** described here, *no such method forwarding*, is a particular
+**The feature** described here, *noSuchMethod forwarding*, is a particular
 approach whereby an implementation of `noSuchMethod` in a class _C_ causes
 _C_ to be extended with a set of compiler generated forwarding methods, such
 that an invocation of any method in the static interface of _C_ will become
@@ -25,13 +25,12 @@
 In other words, consider an instance method invocation of a member named
 _m_ on a receiver _o_ whose class _C_ does not have a member named _m_ (or
 it has a member named _m_, but it does not admit the given invocation,
-e.g., because the number of arguments is wrong). If _C_ declares or inherits
-an implementation of the method `noSuchMethod` which is distinct from the
-one in the built-in class `Object`, the properties of the invocation are
-specified using an instance _i_ of `Invocation`, and `noSuchMethod` is then
-invoked with _i_ as the actual argument. Among other things, _i_ specifies
-whether the invocation was a method call or an invocation of a getter or a
-setter, and it specifies which actual arguments were passed.
+e.g., because the number of arguments is wrong). The properties of the
+invocation are then specified using an instance _i_ of `Invocation`, and
+`noSuchMethod` is then invoked with _i_ as the actual argument. Among other
+things, _i_ specifies whether the invocation was a method call or an
+invocation of a getter or a setter, and it specifies which actual arguments
+were passed.
 
 One difficulty with this design is that it requires developers to take
 both method invocations and getter invocations into account, in order to
@@ -74,8 +73,8 @@
 inconvenient if the mock behavior is simple and largely independent of
 all those types.
 
-The no such method forwarding approach eliminates much of this tedium
-by means of compiler-generated forwarding methods corresponding to all
+The noSuchMethod forwarding approach eliminates much of this tedium
+by means of compiler generated forwarding methods corresponding to all
 the unimplemented methods. The example could then be expressed as
 follows:
 ```dart
@@ -96,7 +95,7 @@
   }
 }
 ```
-With no such method forwarding, this causes a `foo` forwarding
+With noSuchMethod forwarding, this causes a `foo` forwarding
 method to be generated, with the signature declared in `Foo`
 and with the necessary code to create and initialize a suitable
 `Invocation` which will be passed to `noSuchMethod`.
@@ -104,7 +103,7 @@
 
 ## Syntax
 
-This feature does not include any grammar modifications.
+The grammar remains unchanged.
 
 
 ## Static Analysis
@@ -116,40 +115,61 @@
 *Note that such a declaration cannot be a getter or setter, and it must
 accept one positional argument of type `Invocation`, due to the
 requirement that it must correctly override the declaration of
-`noSuchMethod` in `Object`.*
+`noSuchMethod` in the class `Object`. For instance, in addition to the
+obvious choice `noSuchMethod(Invocation i)` it can be
+`noSuchMethod(Object i, [String s])`, but not
+`noSuchMethod(Invocation i, String s)`.*
 
-*We introduce the notion of methods which are 'considered to be
-implemented'. These methods are exactly the ones that we will generate
-forwarders for, except that we keep the language slightly more abstract,
-such that the ability to use a different implementation technique remains
-open. During static analysis, "considering" these methods to be implemented
-allows the enclosing class to be non-abstract, with no errors.*
+If a non-abstract class _C_ has a non-trivial `noSuchMethod` then each
+method signature (including getters and setters) which is a member of _C_'s
+interface and for which _C_ does not have a non-abstract declaration is
+_noSuchMethod forwarded_. No other situations give rise to a noSuchMethod
+forwarded method signature.
 
-If a non-abstract class _C_ has a non-trivial `noSuchMethod`, _C_ is
-_considered to declare an implementation_ for each method, getter, and
-setter which is a member of _C_'s interface, unless _C_ declares or
-inherits an implementation of it.
+*This means that whenever it is stated that a class has a noSuchMethod
+forwarded method signature it is guaranteed to be a non-abstract class with
+a non-trivial `noSuchMethod`.*
 
-*Note that it is a compile-time error if a class _C_ has multiple
-superinterfaces with a member named _m_, declared by declarations _D1
-.. Dk_, and there is no declaration of _m_ in _C_, and there is no
-declaration among _D1 .. Dk_ which is a correct override of every
-declaration in _D1 .. Dk_. In other words, we ignore the situation where a
-class is considered to implement a member _m_, but the signature of _m_ is
-ambiguous, because it is based on a set of declarations that does not
-contain a "most specific" element: That situation is an error, so we do not
-need to handle it.*
+If a class _C_ has a noSuchMethod forwarded signature then an implicit
+method implementation implementing that method signature is induced in _C_.
+In the case where _C_ already contains an abstract declaration with the
+same name, the induced method implementation replaces the abstract
+declaration.
 
-It is a compile-time error if _C_ is considered to declare an
-implementation of a method declaration _D_, and such an implementation
-would override an inherited non-abstract declaration.
+It is a compile-time error if a non-abstract class _C_ has a non-trivial
+`noSuchMethod`, and a name `m` has a set of method signatures in the
+superinterfaces of _C_ where none is most specific, and there is no
+declaration in _C_ which provides such a most specific method signature.
 
-*This can only happen if the given implementation satisfies some, but not
-all requirements. In the example below, a `foo(int i)` implementation is
-inherited and a superinterface declares `foo([int i])`. This is a
-compile-time error because it would be error prone to generate a forwarder
-in `C` which will silently override an implementation which "almost"
-satisfies the requirement in the superinterface.*
+*This means that even in the situation where everything else implies that a
+noSuchMethod forwarder should be induced, signature ambiguities must still
+be resolved by a developer-written declaration, it cannot be a consequence
+of implicitly inducing a noSuchMethod forwarder. However, that
+developer-written declaration could be an abstract method in the
+non-abstract class itself.*
+
+*Note that there is no most specific method signature if there are several
+method signatures which are equally specific with respect to the argument
+types and return type, but an optional formal parameter in these signatures
+has different default values in different signatures.*
+
+It is a compile-time error if a class _C_ has a noSuchMethod forwarded
+method signature _S_ for a method named _m_, as well as an implementation
+of _m_.
+
+*This can only happen if that implementation is inherited and satisfies
+some, but not all requirements of the noSuchMethod forwarded method
+signature. In the example below, a `foo(int i)` implementation is inherited
+and a superinterface declares `foo([int i])`. This is a compile-time error
+because `C` does not have a method implementation with signature
+`foo([int])`, but if one were to be implicitly induced it would override
+`A.foo` (which is capable of accepting some but not all of the argument
+lists that an implementation of `foo([int])` would allow). We have made
+this an error because it would be error prone to induce a forwarder in `C`
+which will silently override an `A.foo` which "almost" satisfies the
+requirement in the superinterface. In particular, developers are likely to
+be surprised if `A.foo` is not called even when it is passed a single
+`int` argument, which precisely matches the declaration of `A.foo`.*
 
 ```dart
 class A {
@@ -166,98 +186,105 @@
 }
 ```
 
-*This error can be eliminated by adding a disambiguating abstract method
-declaration to `C` for `foo`.*
+*Note that this makes it a breaking change, in situations where such a
+signature conflict exists in some subtype like `C`, to change an abstract
+method declaration to a method implementation: If `A` had been an abstract
+class and `A.foo` an abstract method which was replaced by an `A.foo`
+declaration which implements the method, the error on `foo` in class `C`
+would be introduced because `A.foo` was implemented. There is a reasonably
+practical workaround, though: implement `C.foo` with a signature that
+resolves the conflict. That implementation might invoke `A.foo` in a
+superinvocation, or it might forward to `noSuchMethod`, or some times one
+and some times the other, that is up to the developer who writes `C.foo`.*
 
-```dart
-// class A and B are unchanged from the previous example.
+*Note that it is _not_ a compile-time error if the interface of _C_ has a
+noSuchMethod forwarded method signature _S_ with name _m_, and a superclass
+of _C_ also has a noSuchMethod forwarded method signature named _m_, such
+that the implicitly induced implementation of the former overrides the
+implicitly induced implementation of the  latter. In other words, it is OK
+for a generated forwarder to override another generated forwarder.*
 
-class C extends A implements B {
-  noSuchMethod(Invocation i) => ...;
-  foo([int i]); // No ambiguity; will forward to `noSuchMethod`.
-}
-```
-
-*Note that it is _not_ a compile-time error if _C_ is considered to declare an
-implementation of a method declaration _D_, and such an implementation
-would override an inherited declaration with the same name that some
-superclass is considered to have. In other words, it is OK for a generated
-forwarder to override another generated forwarder.*
-
-*Note that when a class _C_ is considered to declare an implementation of a
-given member, it allows superinvocations in subclasses.*
+*Note that when a class _C_ has an implicitly induced implementation of a
+method, superinvocations in subclasses are allowed, just like they would
+have been for a developer-written implementation.*
 
 ```dart
 abstract class D { baz(); }
-class E implements D {}
+class E implements D {
+  noSuchMethod(Invocation i) => null;
+}
 class F extends E { baz() { super.baz(); }} // OK
 ```
 
 
 ## Dynamic Semantics
 
-Consider a program _P_ that contains a non-abstract class _C_ which has a
-non-trivial `noSuchMethod`, and for which some methods, getters, or setters
-_m1 .. mk_ are considered to be implemented, as defined in the previous
-section.
+Assume that a class _C_ has an implicitly induced implementation of a
+method _m_ with positional formal parameters
+_T<sub>1</sub> a<sub>1</sub>..., T<sub>k</sub> a<sub>k</sub>_
+and named formal parameters
+_T<sub>k+1</sub> n<sub>1</sub>..., T<sub>k+m</sub> n<sub>m</sub>_.
+Said implementation will then create an instance _i_ of the predefined
+class `Invocation` such that its
 
-*This means that _m1 .. mk_ are present in the interface of _C_, but they
-do not have an implementation, except for special cases like when the
-implementation is a generated forwarder in a superclass of _C_ which
-is not a correct override of the method in the interface of _C_.*
+-   `isGetter` evaluates to true iff _m_ is a getter,
+    `isSetter` evaluates to true iff _m_ is a setter,
+    `isMethod` evaluates to true iff _m_ is a method.
+-   `memberName` evaluates to the symbol for the name _m_.
+-   `positionalArguments` evaluates to an immutable list whose
+    values are _a<sub>1</sub>..., a<sub>k</sub>_.
+-   `namedArguments` evaluates to an immutable map with the same keys
+    and values as
+    _{n<sub>1</sub>: n<sub>1</sub>..., n<sub>m</sub>: n<sub>m</sub>}_
 
-The semantics of _P_ is then such that it behaves as if _C_ had been
-modified by adding declarations of _m1 .. mk_ with the signatures
-declared in the interface of _C_, and with an implementation of each
-member _mj_. That implementation will invoke `noSuchMethod` on `this`
-with an `Invocation` as argument which specifies the bindings of the
-formal parameters to the actual arguments, and indicates whether _mj_ is a
-method, getter, or setter.
+*Note that the number of named arguments can be zero, in which case some of
+the positional parameters can be optional. We do not need to mention
+optional positional arguments separately, because they receive the same
+treatment as required parameters (which are of course always positional).*
+
+Finally the induced method implementation will invoke `noSuchMethod` with
+_i_ as the actual argument, and return the result obtained from there.
+
+*This determines the dynamic semantics of implicitly induced methods: The
+declared return type and the formal parameters, with type annotations and
+default values, are uniquely determined by the noSuchMethod forwarded
+method signatures, and invocation of an implicitly induced method has the
+same semantics of invocation of other methods. In particular, dynamic type
+checks are performed on the actual arguments upon invocation when the
+corresponding formal parameter is covariant.*
 
 *This ensures, relying on the heap soundness and expression soundness of
 Dart (which ensures that every expression of type _T_ will evaluate to an
 entity of type _T_), that all statically type safe invocations will invoke
-regular method implementations, user-written or generated. In other words,
-with statically checked calls there is no need for dynamic support for
-`noSuchMethod` at all.*
-
-*The generated forwarding methods behave in the same way as user-written
-method declarations. For instance, dynamic type checks are performed on the
-actual arguments when the corresponding formal parameter is covariant. A
-generated forwarding method may have optional arguments with default
-values. Given that there is always exactly one user-written signature which
-is selected to be the signature of the forwarding method, these default
-values are uniquely determined, and they work the same way as default
-values do in a user-written method.*
+a method implementation, user-written or implicitly induced. In other
+words, with statically checked calls there is no need for dynamic support
+for `noSuchMethod` at all.*
 
 For a dynamic invocation of a member _m_ on a receiver _o_ that has a
 non-trivial `noSuchMethod`, the semantics is such that an attempt to invoke
 _m_ with the given actual arguments (including possibly some type
-arguments) is made at first; if that fails (*because _o_ has no
+arguments) is made at first. If that fails (*because _o_ has no
 implementation of _m_ which can be invoked with the given argument list
-shape, be it a regular method or a generated forwarder*) `noSuchMethod` is
-invoked with an actual argument which is an `Invocation` describing the
-actual arguments and invocation.
+shape, be it a developer-written method or an implicitly induced
+implementation*) `noSuchMethod` is invoked with an actual argument which is
+an `Invocation` describing the actual arguments and invocation.
 
 *This implies that dynamic invocations on receivers having a non-trivial
 `noSuchMethod` will simply invoke the forwarders whenever possible.
-Similarly, the "automatic" support for tearing off a method in the static
-interface of the receiver which is not implemented, but supported via
-`noSuchMethod` and a generated forwarder will still work for dynamic
-invocations, as well as static ones.*
+Similarly, it will work for dynamic invocations as well as statically
+checked ones to tear off a method which is in the interface of the receiver
+and implemented as a generated forwarder.*
 
 *The only remaining situation is when a dynamic invocation invokes a method
 which is not present in the static interface of the receiver, or when a
 method with that name is present, but its signature does not allow for the
-given invocation (e.g., because there are too few positional arguments).
-In this situation, the regular instance method invocation has failed (there
-is no such regular method, and no such generated forwarder). Such a dynamic
-invocation must then dynamically determine whether the given receiver has a
-non-trivial `noSuchMethod` and invoke it, rather than just invoking the
-behavior of `noSuchMethod` in `Object` immediately (that is, throwing a
-`NoSuchMethodError`). In this situation, `noSuchMethod` must also support
-both method invocations and tear-offs, because there is no generated
-forwarder to do that.*
+given invocation (e.g., because some required arguments are omitted). In
+this situation, the regular instance method invocation has failed (there is
+no such regular method, and no such generated forwarder). Such a dynamic
+invocation will then invoke `noSuchMethod`. In this situation, a
+developer-written implementation of `noSuchMethod` should also support both
+method invocations and tear-offs explicitly (as it should before this
+feature was added), because there is no generated forwarder to do that.*
 
 *This approach may incur a certain performance penalty, but only for these
 invocations (which are dynamic, and have already failed to invoke an
@@ -267,18 +294,17 @@
 statically checked and dynamic invocations: Whenever an instance method is
 invoked, and no such method exists, `noSuchMethod` will be invoked.*
 
-*Note that this allows dynamic code to support types that have conflicting
-signatures. For instance, it would be possible to create a class having a
-non-trivial `noSuchMethod` that accepts dynamic invocations corresponding
-to having both a getter `int get foo` and a method `int foo()`, even though
-that could never be achieved for the actual interface of the class of an
-instance. This will allow dynamic code to be more generic than typed code
-could be, of course, at the expense of being forced to remain dynamically
-typed as long as these conflicting interfaces are used together.*
-
 
 ## Updates
 
+*   Nov 27th 2017, version 0.5: Changed terminology to use 'implicitly
+    induced method implementations'. Helped achieving a major simplifaction
+    of the dynamic semantics.
+
+*   Nov 22nd 2017, version 0.4: Removed support for explicitly requesting
+    generated forwarder in conflict case. Improved the clarity of many
+    parts.
+
 *   Oct 5th 2017, version 0.3: Clarified that generated forwarders must
     pass an `Invocation` to `noSuchMethod` which specifies the bindings
     of formal arguments to actual arguments. Clarified the treatment of
diff --git a/pkg/analysis_server/benchmark/benchmarks.dart b/pkg/analysis_server/benchmark/benchmarks.dart
index 63eb672..815fe24 100644
--- a/pkg/analysis_server/benchmark/benchmarks.dart
+++ b/pkg/analysis_server/benchmark/benchmarks.dart
@@ -73,6 +73,9 @@
         help: 'Benchmark against the Dart 2.0 front end implementation.');
     argParser.addOption('repeat',
         defaultsTo: '10', help: 'The number of times to repeat the benchmark.');
+    argParser.addFlag('verbose',
+        negatable: false,
+        help: 'Print all communication to and from the analysis server.');
   }
 
   @override
@@ -94,6 +97,7 @@
     final int repeatCount = int.parse(argResults['repeat']);
     final bool quick = argResults['quick'];
     final bool previewDart2 = argResults['preview-dart-2'];
+    final bool verbose = argResults['verbose'];
 
     final Benchmark benchmark =
         benchmarks.firstWhere((b) => b.id == benchmarkId, orElse: () {
@@ -115,6 +119,7 @@
         BenchMarkResult newResult = await benchmark.run(
           quick: quick,
           previewDart2: previewDart2,
+          verbose: verbose,
         );
         print('  $newResult');
         result = result == null ? newResult : result.combine(newResult);
@@ -142,7 +147,11 @@
 
   Benchmark(this.id, this.description, {this.enabled: true, this.kind: 'cpu'});
 
-  Future<BenchMarkResult> run({bool quick: false, bool previewDart2: false});
+  Future<BenchMarkResult> run({
+    bool quick: false,
+    bool previewDart2: false,
+    bool verbose: false,
+  });
 
   int get maxIterations => 0;
 
diff --git a/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart b/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
index 9a42862..f035551 100644
--- a/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
+++ b/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
@@ -26,8 +26,11 @@
   int get maxIterations => 3;
 
   @override
-  Future<BenchMarkResult> run(
-      {bool quick: false, bool previewDart2: false}) async {
+  Future<BenchMarkResult> run({
+    bool quick: false,
+    bool previewDart2: false,
+    bool verbose: false,
+  }) async {
     if (!quick) {
       deleteServerCache();
     }
@@ -68,11 +71,17 @@
             kind: 'group');
 
   @override
-  Future<BenchMarkResult> run(
-      {bool quick: false, bool previewDart2: false}) async {
+  Future<BenchMarkResult> run({
+    bool quick: false,
+    bool previewDart2: false,
+    bool verbose: false,
+  }) async {
     Stopwatch stopwatch = new Stopwatch()..start();
 
     AnalysisServerMemoryUsageTest test = new AnalysisServerMemoryUsageTest();
+    if (verbose) {
+      test.debugStdio();
+    }
     await test.setUp(previewDart2: previewDart2);
     await test.subscribeToStatusNotifications();
     await test.sendAnalysisSetAnalysisRoots(getProjectRoots(quick: quick), []);
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 4002f8f..2df2b21 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -65,7 +65,7 @@
 import 'package:analyzer/src/util/glob.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
 import 'package:analyzer_plugin/src/utilities/navigation/navigation.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:telemetry/crash_reporting.dart';
 import 'package:telemetry/telemetry.dart' as telemetry;
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index 25902ea..5eb1038 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -186,8 +186,8 @@
     AnalysisResult result = await driver.getResult(path);
     if (result == null) {
       p(
-          'An AST could not be produced for the file <code>${escape(
-          path)}</code>.',
+          'An AST could not be produced for the file '
+          '<code>${escape(path)}</code>.',
           raw: true);
       return;
     }
@@ -764,8 +764,8 @@
     AnalysisResult result = await driver.getResult(path);
     if (result == null) {
       p(
-          'An element model could not be produced for the file <code>${escape(
-          path)}</code>.',
+          'An element model could not be produced for the file '
+          '<code>${escape(path)}</code>.',
           raw: true);
       return;
     }
@@ -1161,10 +1161,14 @@
 
   @override
   void generateContent(Map<String, String> params) {
+    DiagnosticsSite diagnosticsSite = site;
+
     buf.writeln('<div class="columns">');
 
     buf.writeln('<div class="column one-half">');
     h3('Status');
+    buf.writeln(writeOption('Preview-dart-2',
+        diagnosticsSite.socketServer.analysisServerOptions.previewDart2));
     buf.writeln(writeOption('Instrumentation enabled',
         AnalysisEngine.instance.instrumentationService.isActive));
     buf.writeln(writeOption('Server process ID', pid));
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 850f2ca..18b897d 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -17,7 +17,7 @@
 import 'package:analyzer/src/generated/engine.dart' as engine;
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source_io.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 
 import 'mock_sdk.dart';
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index f63eaf8..566c06c 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -26,7 +26,7 @@
 import 'package:analyzer/src/services/lint.dart';
 import 'package:analyzer/src/summary/summary_file_builder.dart';
 import 'package:analyzer/src/util/glob.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:linter/src/rules.dart';
 import 'package:linter/src/rules/avoid_as.dart';
diff --git a/pkg/analysis_server/test/integration/support/integration_tests.dart b/pkg/analysis_server/test/integration/support/integration_tests.dart
index e025849..5f2504d 100644
--- a/pkg/analysis_server/test/integration/support/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/support/integration_tests.dart
@@ -574,7 +574,7 @@
       if (trimmedLine.startsWith('Observatory listening on ')) {
         return;
       }
-      _recordStdio('RECV: $trimmedLine');
+      _recordStdio('<== $trimmedLine');
       var message;
       try {
         message = JSON.decoder.convert(trimmedLine);
@@ -646,7 +646,7 @@
         new Completer<Map<String, dynamic>>();
     _pendingCommands[id] = completer;
     String line = JSON.encode(command);
-    _recordStdio('SEND: $line');
+    _recordStdio('==> $line');
     _process.stdin.add(UTF8.encoder.convert("$line\n"));
     return completer.future;
   }
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 7f65d45..6c3bb33 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -14,7 +14,7 @@
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart b/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart
index 4d8291c..27f99f5 100644
--- a/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart
+++ b/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart
@@ -17,7 +17,7 @@
 import 'package:analyzer/src/dart/analysis/session.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
 import 'package:analyzer/src/generated/source.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
diff --git a/pkg/analyzer/lib/src/context/builder.dart b/pkg/analyzer/lib/src/context/builder.dart
index d7e6f68..4d06fb1 100644
--- a/pkg/analyzer/lib/src/context/builder.dart
+++ b/pkg/analyzer/lib/src/context/builder.dart
@@ -33,7 +33,7 @@
 import 'package:analyzer/src/summary/summary_sdk.dart';
 import 'package:analyzer/src/task/options.dart';
 import 'package:args/args.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:package_config/packages.dart';
 import 'package:package_config/packages_file.dart';
diff --git a/pkg/analyzer/lib/src/dart/analysis/byte_store.dart b/pkg/analyzer/lib/src/dart/analysis/byte_store.dart
index 1ad08cc..ba051918 100644
--- a/pkg/analyzer/lib/src/dart/analysis/byte_store.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/byte_store.dart
@@ -5,5 +5,5 @@
 // This library re-exports the parts of front_end's byte_store.dart whose API is
 // stable enough to be relied upon by clients.
 
-export 'package:front_end/byte_store.dart'
+export 'package:front_end/src/api_prototype/byte_store.dart'
     show ByteStore, MemoryByteStore, MemoryCachingByteStore;
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 6d59142..1bf15ab 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -40,7 +40,7 @@
 import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/api_signature.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:front_end/src/incremental/kernel_driver.dart' show KernelDriver;
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_byte_store.dart b/pkg/analyzer/lib/src/dart/analysis/file_byte_store.dart
index 84090be..54ddf7e 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_byte_store.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_byte_store.dart
@@ -5,4 +5,4 @@
 // This library re-exports the parts of front_end's file_byte_store.dart whose
 // API is stable enough to be relied upon by clients.
 
-export 'package:front_end/byte_store.dart' show FileByteStore;
+export 'package:front_end/src/api_prototype/byte_store.dart' show FileByteStore;
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index c714c66..2d1ae3d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -27,7 +27,7 @@
 import 'package:analyzer/src/summary/summarize_ast.dart';
 import 'package:convert/convert.dart';
 import 'package:crypto/crypto.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/api_signature.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:front_end/src/fasta/scanner/token.dart';
diff --git a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
index 3836149..09bf570 100644
--- a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
@@ -1,5 +1,5 @@
 import 'package:analyzer/src/fasta/resolution_storer.dart';
-import 'package:front_end/file_system.dart';
+import 'package:front_end/src/api_prototype/file_system.dart';
 import 'package:front_end/src/fasta/builder/builder.dart';
 import 'package:front_end/src/fasta/builder/library_builder.dart';
 import 'package:front_end/src/fasta/dill/dill_target.dart';
@@ -17,6 +17,7 @@
 import 'package:kernel/kernel.dart' as kernel;
 
 class AnalyzerDietListener extends DietListener {
+  final Uri _requestedLibraryFileUri;
   final List<CollectedResolution> _resolutions;
 
   AnalyzerDietListener(
@@ -24,50 +25,66 @@
       ClassHierarchy hierarchy,
       CoreTypes coreTypes,
       TypeInferenceEngine typeInferenceEngine,
+      this._requestedLibraryFileUri,
       this._resolutions)
       : super(library, hierarchy, coreTypes, typeInferenceEngine);
 
   StackListener createListener(
       ModifierBuilder builder, Scope memberScope, bool isInstanceMember,
       [Scope formalParameterScope, TypeInferenceListener listener]) {
-    var resolution = new CollectedResolution();
-    _resolutions.add(resolution);
-    var storer = new InstrumentedResolutionStorer(
-        resolution.kernelDeclarations,
-        resolution.kernelReferences,
-        resolution.kernelTypes,
-        resolution.declarationOffsets,
-        resolution.referenceOffsets,
-        resolution.typeOffsets);
+    InstrumentedResolutionStorer storer;
+    if (_isInRequestedLibrary(builder)) {
+      var resolution = new CollectedResolution();
+      _resolutions.add(resolution);
+      storer = new InstrumentedResolutionStorer(
+          resolution.kernelDeclarations,
+          resolution.kernelReferences,
+          resolution.kernelTypes,
+          resolution.declarationOffsets,
+          resolution.referenceOffsets,
+          resolution.typeOffsets);
+    }
     return super.createListener(
         builder, memberScope, isInstanceMember, formalParameterScope, storer);
   }
+
+  /// Return `true` if the given [builder] is in the requested library.
+  bool _isInRequestedLibrary(Builder builder) {
+    return builder.computeLibraryUri() == _requestedLibraryFileUri;
+  }
 }
 
 class AnalyzerLoader<L> extends SourceLoader<L> {
+  final Uri _requestedLibraryFileUri;
   final List<CollectedResolution> _resolutions;
 
-  AnalyzerLoader(
-      FileSystem fileSystem, TargetImplementation target, this._resolutions)
+  AnalyzerLoader(FileSystem fileSystem, TargetImplementation target,
+      this._requestedLibraryFileUri, this._resolutions)
       : super(fileSystem, false, target);
 
   @override
   AnalyzerDietListener createDietListener(LibraryBuilder library) {
-    return new AnalyzerDietListener(
-        library, hierarchy, coreTypes, typeInferenceEngine, _resolutions);
+    return new AnalyzerDietListener(library, hierarchy, coreTypes,
+        typeInferenceEngine, _requestedLibraryFileUri, _resolutions);
   }
 }
 
 class AnalyzerTarget extends KernelTarget {
+  final Uri requestedLibraryFileUri;
   final List<CollectedResolution> resolutions = [];
 
-  AnalyzerTarget(FileSystem fileSystem, DillTarget dillTarget,
-      UriTranslator uriTranslator, bool strongMode)
+  AnalyzerTarget(
+      FileSystem fileSystem,
+      DillTarget dillTarget,
+      UriTranslator uriTranslator,
+      bool strongMode,
+      this.requestedLibraryFileUri)
       : super(fileSystem, false, dillTarget, uriTranslator);
 
   @override
   AnalyzerLoader<kernel.Library> createLoader() {
-    return new AnalyzerLoader<kernel.Library>(fileSystem, this, resolutions);
+    return new AnalyzerLoader<kernel.Library>(
+        fileSystem, this, requestedLibraryFileUri, resolutions);
   }
 }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/kernel_context.dart b/pkg/analyzer/lib/src/dart/analysis/kernel_context.dart
index 5949de4..47ebc2e 100644
--- a/pkg/analyzer/lib/src/dart/analysis/kernel_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/kernel_context.dart
@@ -18,9 +18,9 @@
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/kernel/resynthesize.dart';
-import 'package:front_end/byte_store.dart';
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/file_system.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/file_system.dart';
 import 'package:front_end/src/base/libraries_specification.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:front_end/src/base/processed_options.dart';
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index e09624f..7998638 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -38,6 +38,7 @@
 import 'package:front_end/src/dependency_walker.dart';
 import 'package:front_end/src/incremental/kernel_driver.dart';
 import 'package:kernel/kernel.dart' as kernel;
+import 'package:kernel/type_algebra.dart' as kernel;
 
 /**
  * Analyzer of a single library.
@@ -51,7 +52,6 @@
   final bool _enableKernelDriver;
   final bool _previewDart2;
   final KernelDriver _kernelDriver;
-  final KernelResynthesizer _kernelResynthesizer;
 
   final bool Function(Uri) _isLibraryUri;
   final AnalysisContextImpl _context;
@@ -84,9 +84,7 @@
       : _typeProvider = _context.typeProvider,
         _enableKernelDriver = enableKernelDriver,
         _previewDart2 = previewDart2,
-        _kernelDriver = kernelDriver,
-        _kernelResynthesizer =
-            (_resynthesizer is KernelResynthesizer) ? _resynthesizer : null;
+        _kernelDriver = kernelDriver;
 
   /**
    * Compute analysis results for all units of the library.
@@ -202,7 +200,7 @@
           (fileSystem, bool includeComments, dillTarget, uriTranslator,
                   {metadataCollector}) =>
               analyzerTarget ??= new AnalyzerTarget(fileSystem, dillTarget,
-                  uriTranslator, _analysisOptions.strongMode),
+                  uriTranslator, _analysisOptions.strongMode, _library.uri),
           _library.uri);
 
       var resolutions = new _ResolutionProvider(analyzerTarget.resolutions);
@@ -427,97 +425,9 @@
   /// type parameters from the enclosing scopes.
   ResolutionApplier _createResolutionApplier(
       ElementImpl context, CollectedResolution resolution) {
-    // Convert local declarations into elements.
-    List<Element> declaredElements = [];
-    Map<kernel.Statement, Element> declarationToElement = {};
-    for (var declaredNode in resolution.kernelDeclarations) {
-      var element = _translateKernelDeclaration(context, declaredNode);
-      declaredElements.add(element);
-      declarationToElement[declaredNode] = element;
-    }
-
-    // TODO(scheglov) Add tests for using the context element.
-    var astTypes = <DartType>[];
-    for (var kernelType in resolution.kernelTypes) {
-      DartType astType;
-      if (kernelType is kernel.FunctionReferenceDartType) {
-        kernel.VariableDeclaration variable = kernelType.function.variable;
-        FunctionElement element = declarationToElement[variable];
-        astType = element.type;
-      } else if (kernelType is kernel.MemberReferenceDartType) {
-        ExecutableElementImpl element = _kernelResynthesizer
-            .getElementFromCanonicalName(kernelType.member.canonicalName);
-        // TODO(scheglov) Instantiate the executable type with arguments.
-        assert(kernelType.typeArguments.isEmpty);
-        astType = element.type;
-      } else if (kernelType is kernel.IndexAssignNullFunctionType) {
-        astType = null;
-      } else {
-        astType = _kernelResynthesizer.getType(context, kernelType);
-      }
-      astTypes.add(astType);
-    }
-
-    // Convert referenced nodes into elements.
-    List<Element> referencedElements = [];
-    for (var referencedNode in resolution.kernelReferences) {
-      Element element;
-      if (referencedNode is kernel.VariableDeclaration) {
-        kernel.TreeNode parent = referencedNode.parent;
-        if (parent is kernel.Statement) {
-          element = declarationToElement[referencedNode];
-        } else {
-          assert(parent is kernel.FunctionNode);
-          ExecutableElementImpl contextExecutable = context;
-          for (var parameter in contextExecutable.parameters) {
-            if (parameter.name == referencedNode.name) {
-              element = parameter;
-              break;
-            }
-          }
-        }
-        assert(element != null);
-      } else if (referencedNode is kernel.NamedNode) {
-        element = _kernelResynthesizer
-            .getElementFromCanonicalName(referencedNode.canonicalName);
-        assert(element != null);
-      } else if (referencedNode is kernel.MemberGetterNode) {
-        var memberElement = _kernelResynthesizer
-            .getElementFromCanonicalName(referencedNode.member.canonicalName);
-        assert(memberElement != null);
-        if (memberElement is PropertyInducingElementImpl) {
-          element = memberElement.getter;
-          assert(element != null);
-        } else {
-          element = memberElement;
-        }
-      } else if (referencedNode is kernel.MemberSetterNode) {
-        var memberElement = _kernelResynthesizer
-            .getElementFromCanonicalName(referencedNode.member.canonicalName);
-        assert(memberElement != null);
-        if (memberElement is PropertyInducingElementImpl) {
-          element = memberElement.setter;
-          assert(element != null);
-        } else {
-          element = memberElement;
-        }
-      } else if (referencedNode is kernel.NullAssignmentCombinerNode) {
-        element = null;
-      } else {
-        // TODO(scheglov) Add more supported nodes.
-        throw new UnimplementedError(
-            'Declaration: (${referencedNode.runtimeType}) $referencedNode');
-      }
-      referencedElements.add(element);
-    }
-
-    return new ValidatingResolutionApplier(
-        declaredElements,
-        referencedElements,
-        astTypes,
-        resolution.declarationOffsets,
-        resolution.referenceOffsets,
-        resolution.typeOffsets);
+    return new _ResolutionApplierContext(
+            _resynthesizer, _typeProvider, resolution, context)
+        .applier;
   }
 
   /**
@@ -826,9 +736,9 @@
             member.fields.variables[0].initializer?.accept(applier);
             applier.checkDone();
           } else if (member is MethodDeclaration) {
-            // TODO(scheglov) Pass in the actual context element.
+            ExecutableElementImpl context = member.element;
             var resolution = resolutions.next();
-            var applier = _createResolutionApplier(null, resolution);
+            var applier = _createResolutionApplier(context, resolution);
             member.body.accept(applier);
             applier.checkDone();
           } else {
@@ -840,7 +750,6 @@
         var context = declaration.element as ExecutableElementImpl;
         var resolution = resolutions.next();
         var applier = _createResolutionApplier(context, resolution);
-        applier.enclosingExecutable = context;
         declaration.functionExpression.parameters?.accept(applier);
         declaration.functionExpression.body.accept(applier);
         applier.checkDone();
@@ -921,63 +830,6 @@
     }
   }
 
-  /// Return the local [Element] for the given local kernel [declaration].
-  Element _translateKernelDeclaration(
-      ElementImpl context, kernel.Statement declaration) {
-    if (declaration is kernel.VariableDeclaration) {
-      kernel.TreeNode functionDeclaration = declaration.parent;
-      if (functionDeclaration is kernel.FunctionDeclaration) {
-        var element =
-            new FunctionElementImpl(declaration.name, declaration.fileOffset);
-        kernel.FunctionType kernelType = declaration.type;
-
-        // Set formal parameters.
-        {
-          var astParameters = <ParameterElement>[];
-          var kernelFunction = functionDeclaration.function;
-
-          // Add positional parameters
-          var kernelPositionalParameters = kernelFunction.positionalParameters;
-          for (var i = 0; i < kernelPositionalParameters.length; i++) {
-            var kernelParameter = kernelPositionalParameters[i];
-            var astParameter = new ParameterElementImpl(
-                kernelParameter.name, kernelParameter.fileOffset);
-            astParameter.parameterKind =
-                i < kernelFunction.requiredParameterCount
-                    ? ParameterKind.REQUIRED
-                    : ParameterKind.POSITIONAL;
-            astParameter.type =
-                _kernelResynthesizer.getType(context, kernelParameter.type);
-            astParameters.add(astParameter);
-          }
-
-          // Add named parameters.
-          for (var kernelParameter in kernelFunction.namedParameters) {
-            var astParameter = new ParameterElementImpl(
-                kernelParameter.name, kernelParameter.fileOffset);
-            astParameter.parameterKind = ParameterKind.NAMED;
-            astParameter.type =
-                _kernelResynthesizer.getType(context, kernelParameter.type);
-            astParameters.add(astParameter);
-          }
-
-          element.parameters = astParameters;
-        }
-
-        element.returnType =
-            _kernelResynthesizer.getType(context, kernelType.returnType);
-        element.type = new FunctionTypeImpl(element);
-        return element;
-      } else {
-        return new LocalVariableElementImpl(
-            declaration.name, declaration.fileOffset);
-      }
-    } else {
-      throw new UnimplementedError(
-          'Declaration: (${declaration.runtimeType}) $declaration');
-    }
-  }
-
   /**
    * Check the given [directive] to see if the referenced source exists and
    * report an error if it does not.
@@ -1116,6 +968,285 @@
   _NameOrSource(this.name, this.source);
 }
 
+/// Concrete implementation of [TypeContext].
+class _ResolutionApplierContext implements TypeContext {
+  final KernelResynthesizer resynthesizer;
+  final TypeProvider typeProvider;
+  final CollectedResolution resolution;
+
+  @override
+  ClassElement enclosingClassElement;
+
+  List<ElementImpl> contextStack = [];
+  ElementImpl context;
+
+  List<Element> declaredElements = [];
+  Map<kernel.Statement, Element> declarationToElement = {};
+  Map<FunctionElementImpl, kernel.VariableDeclaration>
+      functionElementToDeclaration = {};
+  Map<ParameterElementImpl, kernel.VariableDeclaration>
+      parameterElementToDeclaration = {};
+
+  ResolutionApplier applier;
+
+  _ResolutionApplierContext(
+      this.resynthesizer, this.typeProvider, this.resolution, this.context) {
+    for (Element element = context;
+        element != null;
+        element = element.enclosingElement) {
+      if (element is ClassElement) {
+        enclosingClassElement = element;
+        break;
+      }
+    }
+
+    // Convert local declarations into elements.
+    for (var declaredNode in resolution.kernelDeclarations) {
+      translateKernelDeclaration(declaredNode);
+    }
+
+    // Convert referenced nodes into elements.
+    List<Element> referencedElements = [];
+    for (var referencedNode in resolution.kernelReferences) {
+      Element element;
+      if (referencedNode is kernel.VariableDeclaration) {
+        kernel.TreeNode parent = referencedNode.parent;
+        if (parent is kernel.Statement) {
+          element = declarationToElement[referencedNode];
+        } else {
+          assert(parent is kernel.FunctionNode);
+          // Might be a parameter of a local function.
+          element = declarationToElement[referencedNode];
+          // If no element, then it is a parameter of the context executable.
+          if (element == null) {
+            ExecutableElementImpl contextExecutable = context;
+            for (var parameter in contextExecutable.parameters) {
+              if (parameter.name == referencedNode.name) {
+                element = parameter;
+                break;
+              }
+            }
+          }
+        }
+        assert(element != null);
+      } else if (referencedNode is kernel.NamedNode) {
+        element = resynthesizer
+            .getElementFromCanonicalName(referencedNode.canonicalName);
+        assert(element != null);
+      } else if (referencedNode is kernel.MemberGetterNode) {
+        var memberElement = resynthesizer
+            .getElementFromCanonicalName(referencedNode.member.canonicalName);
+        assert(memberElement != null);
+        if (memberElement is PropertyInducingElementImpl) {
+          element = memberElement.getter;
+          assert(element != null);
+        } else {
+          element = memberElement;
+        }
+      } else if (referencedNode is kernel.MemberSetterNode) {
+        var memberElement = resynthesizer
+            .getElementFromCanonicalName(referencedNode.member.canonicalName);
+        assert(memberElement != null);
+        if (memberElement is PropertyInducingElementImpl) {
+          element = memberElement.setter;
+          assert(element != null);
+        } else {
+          element = memberElement;
+        }
+      } else if (referencedNode is kernel.NullNode) {
+        element = null;
+      } else {
+        throw new UnimplementedError(
+            'Declaration: (${referencedNode.runtimeType}) $referencedNode');
+      }
+      referencedElements.add(element);
+    }
+
+    applier = new ValidatingResolutionApplier(
+        this,
+        declaredElements,
+        referencedElements,
+        resolution.kernelTypes,
+        resolution.declarationOffsets,
+        resolution.referenceOffsets,
+        resolution.typeOffsets);
+  }
+
+  @override
+  DartType get typeType => typeProvider.typeType;
+
+  @override
+  void encloseVariable(ElementImpl element) {
+    context.encloseElement(element);
+  }
+
+  @override
+  void enterLocalFunction(FunctionElementImpl element) {
+    context.encloseElement(element);
+
+    // The function is the new resolution context.
+    contextStack.add(context);
+    context = element;
+
+    var declaration = functionElementToDeclaration[element];
+    kernel.FunctionType kernelType = declaration.type;
+
+    element.returnType = resynthesizer.getType(context, kernelType.returnType);
+
+    for (var parameter in element.parameters) {
+      ParameterElementImpl parameterImpl = parameter;
+      var kernelParameter = parameterElementToDeclaration[parameter];
+      parameterImpl.type = resynthesizer.getType(context, kernelParameter.type);
+    }
+
+    element.type = new FunctionTypeImpl(element);
+  }
+
+  @override
+  void exitLocalFunction(FunctionElementImpl element) {
+    assert(identical(context, element));
+    context = contextStack.removeLast();
+  }
+
+  /// Given the [executable] element that corresponds to the [kernelNode],
+  /// and the [kernelType] that is the instantiated type of [kernelNode],
+  /// return the instantiated type of the [executable].
+  FunctionType instantiateFunctionType(ExecutableElement executable,
+      kernel.FunctionNode kernelNode, kernel.FunctionType kernelType) {
+    // Prepare all kernel type parameters.
+    var kernelTypeParameters = <kernel.TypeParameter>[];
+    for (kernel.TreeNode node = kernelNode; node != null; node = node.parent) {
+      if (node is kernel.Class) {
+        kernelTypeParameters.addAll(node.typeParameters);
+      } else if (node is kernel.FunctionNode) {
+        kernelTypeParameters.addAll(node.typeParameters);
+      }
+    }
+
+    // If no type parameters, the raw type of the element will do.
+    FunctionTypeImpl rawType = executable.type;
+    if (kernelTypeParameters.isEmpty) {
+      return rawType;
+    }
+
+    // Compute type arguments for kernel type parameters.
+    var kernelMap = kernel.unifyTypes(
+        kernelNode.functionType.withoutTypeParameters,
+        kernelType,
+        kernelTypeParameters.toSet());
+
+    // Prepare Analyzer type parameters, in the same order as kernel ones.
+    var astTypeParameters = <TypeParameterElement>[];
+    for (Element element = executable;
+        element != null;
+        element = element.enclosingElement) {
+      if (element is TypeParameterizedElement) {
+        astTypeParameters.addAll(element.typeParameters);
+      }
+    }
+
+    // Convert kernel type arguments into Analyzer types.
+    var astTypeArguments = new List<DartType>(astTypeParameters.length);
+    for (var i = 0; i < astTypeParameters.length; i++) {
+      var kernelParameter = kernelTypeParameters[i];
+      var kernelArgument = kernelMap[kernelParameter];
+      astTypeArguments[i] = resynthesizer.getType(null, kernelArgument);
+    }
+
+    // Replace Analyzer type parameters with type arguments.
+    return rawType.substitute4(astTypeParameters, astTypeArguments);
+  }
+
+  /// Translate the given [declaration].
+  void translateKernelDeclaration(kernel.Statement declaration) {
+    if (declaration is kernel.VariableDeclaration) {
+      kernel.TreeNode functionDeclaration = declaration.parent;
+      if (functionDeclaration is kernel.FunctionDeclaration) {
+        var kernelFunction = functionDeclaration.function;
+
+        var element =
+            new FunctionElementImpl(declaration.name, declaration.fileOffset);
+        functionElementToDeclaration[element] = declaration;
+
+        // Set type parameters.
+        {
+          var astParameters = <TypeParameterElement>[];
+          for (var kernelParameter in kernelFunction.typeParameters) {
+            var astParameter = new TypeParameterElementImpl(
+                kernelParameter.name, kernelParameter.fileOffset);
+            astParameter.type = new TypeParameterTypeImpl(astParameter);
+            // TODO(scheglov) remember mapping to set bounds later
+            astParameters.add(astParameter);
+          }
+          element.typeParameters = astParameters;
+        }
+
+        // Set formal parameters.
+        {
+          var astParameters = <ParameterElement>[];
+
+          // Add positional parameters
+          var kernelPositionalParameters = kernelFunction.positionalParameters;
+          for (var i = 0; i < kernelPositionalParameters.length; i++) {
+            var kernelParameter = kernelPositionalParameters[i];
+            var astParameter = new ParameterElementImpl(
+                kernelParameter.name, kernelParameter.fileOffset);
+            astParameter.parameterKind =
+                i < kernelFunction.requiredParameterCount
+                    ? ParameterKind.REQUIRED
+                    : ParameterKind.POSITIONAL;
+            astParameters.add(astParameter);
+            declarationToElement[kernelParameter] = astParameter;
+            parameterElementToDeclaration[astParameter] = kernelParameter;
+          }
+
+          // Add named parameters.
+          for (var kernelParameter in kernelFunction.namedParameters) {
+            var astParameter = new ParameterElementImpl(
+                kernelParameter.name, kernelParameter.fileOffset);
+            astParameter.parameterKind = ParameterKind.NAMED;
+            astParameters.add(astParameter);
+            declarationToElement[kernelParameter] = astParameter;
+            parameterElementToDeclaration[astParameter] = kernelParameter;
+          }
+
+          element.parameters = astParameters;
+
+          declaredElements.add(element);
+          declarationToElement[declaration] = element;
+        }
+      } else {
+        // TODO(scheglov) Do we need ConstLocalVariableElementImpl?
+        var element = new LocalVariableElementImpl(
+            declaration.name, declaration.fileOffset);
+        declaredElements.add(element);
+        declarationToElement[declaration] = element;
+      }
+    } else {
+      throw new UnimplementedError(
+          'Declaration: (${declaration.runtimeType}) $declaration');
+    }
+  }
+
+  @override
+  DartType translateType(kernel.DartType kernelType) {
+    if (kernelType is kernel.FunctionReferenceDartType) {
+      kernel.VariableDeclaration variable = kernelType.function.variable;
+      FunctionElement element = declarationToElement[variable];
+      return element.type;
+    } else if (kernelType is kernel.MemberInvocationDartType) {
+      ExecutableElementImpl element = resynthesizer
+          .getElementFromCanonicalName(kernelType.member.canonicalName);
+      return instantiateFunctionType(
+          element, kernelType.member.function, kernelType.type);
+    } else if (kernelType is kernel.IndexAssignNullFunctionType) {
+      return null;
+    } else {
+      return resynthesizer.getType(context, kernelType);
+    }
+  }
+}
+
 /// [Iterator] like object that provides [CollectedResolution]s.
 class _ResolutionProvider {
   final List<CollectedResolution> resolutions;
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index 1491667..fa670bb 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -17,7 +17,7 @@
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/link.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 
 /**
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index edeb37c..a73324f 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -191,6 +191,12 @@
   FunctionTypeImpl substitute3(List<DartType> argumentTypes) => this;
 
   @override
+  FunctionType substitute4(
+      List<TypeParameterElement> typeParameters, List<DartType> typeArguments) {
+    return this;
+  }
+
+  @override
   void _forEachParameterType(
       ParameterKind kind, callback(String name, DartType type)) {
     // There are no parameters.
@@ -1016,6 +1022,20 @@
       substitute2(argumentTypes, typeArguments);
 
   /**
+   * Perform simple substitution of [typeParameters] with [typeArguments].
+   */
+  FunctionType substitute4(
+      List<TypeParameterElement> typeParameters, List<DartType> typeArguments) {
+    if (typeArguments.length != typeParameters.length) {
+      throw new ArgumentError(
+          "typeArguments.length (${typeArguments.length}) != '"
+          "'typeParameters.length (${typeParameters.length})");
+    }
+    return new FunctionTypeImpl._(element, name, [], typeArguments,
+        typeParameters, _returnType, _parameters, true);
+  }
+
+  /**
    * Invokes [callback] for each parameter of [kind] with the parameter's [name]
    * and type after any type parameters have been applied.
    */
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index ae408f3..794a3c6 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -2073,7 +2073,9 @@
     }
 
     if (name is SimpleIdentifier) {
-      if (name.name == classDeclaration.name.name) {
+      if (name.name == classDeclaration.name.name && getOrSet == null) {
+        constructor(name, null, null);
+      } else if (initializers.isNotEmpty) {
         constructor(name, null, null);
       } else {
         method(null, name);
@@ -2397,6 +2399,16 @@
     errorReporter.reportMessage(message, offset, length);
   }
 
+  @override
+  void addWarning(Message message, int charOffset, int length) {
+    library.addWarning(message, charOffset, uri);
+  }
+
+  @override
+  void addNit(Message message, int charOffset) {
+    library.addNit(message, charOffset, uri);
+  }
+
   /// Return `true` if [token] is either `null` or is the symbol or keyword
   /// [value].
   bool optionalOrNull(String value, Token token) {
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index bf3d80d..d3e73a5 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -151,6 +151,10 @@
             offset,
             length);
         return;
+      case "EXPECTED_CLASS_MEMBER":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.EXPECTED_CLASS_MEMBER, offset, length);
+        return;
       case "EXPECTED_EXECUTABLE":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.EXPECTED_EXECUTABLE, offset, length);
diff --git a/pkg/analyzer/lib/src/fasta/resolution_applier.dart b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
index e6d553a..fca1a17 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_applier.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
@@ -13,24 +13,25 @@
 import 'package:analyzer/src/fasta/resolution_storer.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:front_end/src/base/syntactic_entity.dart';
+import 'package:front_end/src/scanner/token.dart';
+import 'package:kernel/kernel.dart' as kernel;
 
 /// Visitor that applies resolution data from the front end (obtained via
 /// [ResolutionStorer]) to an analyzer AST.
 class ResolutionApplier extends GeneralizingAstVisitor {
+  final TypeContext _typeContext;
+
   final List<Element> _declaredElements;
   int _declaredElementIndex = 0;
 
   final List<Element> _referencedElements;
   int _referencedElementIndex = 0;
 
-  final List<DartType> _types;
+  final List<kernel.DartType> _types;
   int _typeIndex = 0;
 
-  /// The [ExecutableElementImpl] inside of which resolution is being applied.
-  ExecutableElementImpl enclosingExecutable;
-
-  ResolutionApplier(
-      this._declaredElements, this._referencedElements, this._types);
+  ResolutionApplier(this._typeContext, this._declaredElements,
+      this._referencedElements, this._types);
 
   /// Verifies that all types passed to the constructor have been applied.
   void checkDone() {
@@ -49,26 +50,20 @@
   }
 
   @override
+  void visitAsExpression(AsExpression node) {
+    node.expression.accept(this);
+    applyToTypeAnnotation(_getTypeFor(node.asOperator), node.type);
+    node.staticType = _getTypeFor(node.asOperator);
+  }
+
+  @override
   void visitAssignmentExpression(AssignmentExpression node) {
     node.leftHandSide.accept(this);
     node.rightHandSide.accept(this);
 
-    // Assignment reference and type are recorded recorded for LHS.
-    SyntacticEntity assignmentEntity;
-    Expression left = node.leftHandSide;
-    if (left is SimpleIdentifier) {
-      assignmentEntity = left;
-    } else if (left is PrefixedIdentifier) {
-      assignmentEntity = left.identifier;
-    } else if (left is PropertyAccess) {
-      assignmentEntity = left.propertyName;
-    } else if (left is IndexExpressionImpl) {
-      assignmentEntity = left.leftBracket;
-    } else {
-      throw new StateError('Unexpected LHS (${left.runtimeType}) $left');
-    }
-    node.staticElement = _getReferenceFor(assignmentEntity);
-    node.staticType = _getTypeFor(assignmentEntity);
+    SyntacticEntity entity = _getAssignmentEntity(node.leftHandSide);
+    node.staticElement = _getReferenceFor(entity);
+    node.staticType = _getTypeFor(entity);
   }
 
   @override
@@ -84,6 +79,19 @@
     node.staticType = _getTypeFor(node.operator);
 
     node.rightOperand.accept(this);
+
+    // Skip the synthetic Not for `!=`.
+    if (node.operator.type == TokenType.BANG_EQ) {
+      _getTypeFor(node.operator, synthetic: true);
+    }
+  }
+
+  @override
+  void visitConditionalExpression(ConditionalExpression node) {
+    node.condition.accept(this);
+    node.thenExpression.accept(this);
+    node.elseExpression.accept(this);
+    node.staticType = _getTypeFor(node.question);
   }
 
   @override
@@ -111,29 +119,39 @@
     FunctionExpression functionExpression = node.functionExpression;
     FormalParameterList parameterList = functionExpression.parameters;
 
-    // Apply resolution to default values of formal parameters.
+    // Apply resolution to default values.
     parameterList.accept(this);
 
-    DartType returnType = _getTypeFor(node);
-    if (node.returnType != null) {
-      applyToTypeAnnotation(returnType, node.returnType);
+    FunctionElementImpl element = _getDeclarationFor(node);
+    _typeContext.enterLocalFunction(element);
+
+    if (node.returnType != null && element != null) {
+      applyToTypeAnnotation(element.returnType, node.returnType);
     }
 
     // Associate the elements with the nodes.
-    FunctionElementImpl element = _getDeclarationFor(node);
-    if (element != null && enclosingExecutable != null) {
-      enclosingExecutable.encloseElement(element);
+    if (element != null) {
+      functionExpression.element = element;
 
       node.name.staticElement = element;
       node.name.staticType = element.type;
 
+      TypeParameterList typeParameterList = functionExpression.typeParameters;
+      if (typeParameterList != null) {
+        List<TypeParameter> typeParameters = typeParameterList.typeParameters;
+        for (var i = 0; i < typeParameters.length; i++) {
+          TypeParameter typeParameter = typeParameters[i];
+          assert(typeParameter.bound == null);
+          typeParameter.name.staticElement = element.typeParameters[i];
+          typeParameter.name.staticType = _typeContext.typeType;
+        }
+      }
+
       _applyParameters(element.parameters, parameterList.parameters);
     }
 
-    // Visit components of the FunctionExpression.
-    functionExpression.element = element;
-    functionExpression.typeParameters?.accept(this);
     functionExpression.body?.accept(this);
+    _typeContext.exitLocalFunction(element);
   }
 
   @override
@@ -195,7 +213,14 @@
       constructorName.name.staticElement = element;
     }
 
-    _associateArgumentsWithParameters(element, node.argumentList);
+    _associateArgumentsWithParameters(element?.parameters, node.argumentList);
+  }
+
+  @override
+  void visitIsExpression(IsExpression node) {
+    node.expression.accept(this);
+    applyToTypeAnnotation(_getTypeFor(node.isOperator), node.type);
+    node.staticType = _getTypeFor(node.isOperator);
   }
 
   @override
@@ -224,16 +249,21 @@
 
     ArgumentList argumentList = node.argumentList;
 
-    ExecutableElement calleeElement = _getReferenceFor(node.methodName);
+    _getReferenceFor(node.methodName); // raw element
     DartType invokeType = _getTypeFor(node.methodName);
     DartType resultType = _getTypeFor(argumentList);
 
     node.staticInvokeType = invokeType;
-    node.methodName.staticElement = calleeElement;
-    node.methodName.staticType = invokeType;
-    // TODO(paulberry): store resolution of node.typeArguments.
-
     node.staticType = resultType;
+    node.methodName.staticElement = invokeType.element;
+    node.methodName.staticType = invokeType;
+
+    if (invokeType is FunctionType) {
+      if (node.typeArguments != null) {
+        _applyTypeArgumentsToList(invokeType, node.typeArguments.arguments);
+      }
+      _associateArgumentsWithParameters(invokeType.parameters, argumentList);
+    }
 
     // Apply resolution to arguments.
     // Skip names of named arguments.
@@ -244,8 +274,6 @@
         argument.accept(this);
       }
     }
-
-    _associateArgumentsWithParameters(calleeElement, argumentList);
   }
 
   @override
@@ -260,6 +288,14 @@
   }
 
   @override
+  void visitPostfixExpression(PostfixExpression node) {
+    node.operand.accept(this);
+    SyntacticEntity entity = _getAssignmentEntity(node.operand);
+    node.staticElement = _getReferenceFor(entity);
+    node.staticType = _getTypeFor(entity);
+  }
+
+  @override
   void visitPrefixedIdentifier(PrefixedIdentifier node) {
     node.prefix.accept(this);
     node.identifier.accept(this);
@@ -267,6 +303,29 @@
   }
 
   @override
+  void visitPrefixExpression(PrefixExpression node) {
+    node.operand.accept(this);
+    TokenType tokenType = node.operator.type;
+    if (tokenType.isIncrementOperator) {
+      // ++v;
+      // This is an assignment, it is associated with the operand.
+      SyntacticEntity entity = _getAssignmentEntity(node.operand);
+      node.staticElement = _getReferenceFor(entity);
+      node.staticType = _getTypeFor(entity);
+    } else if (tokenType == TokenType.BANG) {
+      // !boolExpression;
+      node.staticType = _getTypeFor(node);
+    } else {
+      // ~v;
+      // This is a method invocation, it is associated with the operator.
+      SyntacticEntity entity = node.operator;
+      node.staticElement = _getReferenceFor(entity);
+      _getTypeFor(entity); // The function type of the operator.
+      node.staticType = _getTypeFor(entity);
+    }
+  }
+
+  @override
   void visitPropertyAccess(PropertyAccess node) {
     node.target?.accept(this);
     node.propertyName.accept(this);
@@ -280,6 +339,30 @@
   }
 
   @override
+  void visitStringInterpolation(StringInterpolation node) {
+    for (var element in node.elements) {
+      if (element is InterpolationString) {
+        if (element.value.isNotEmpty) {
+          _getTypeFor(element);
+        }
+      } else if (element is InterpolationExpression) {
+        element.expression.accept(this);
+      }
+    }
+    node.staticType = _getTypeFor(node.endToken.next);
+  }
+
+  @override
+  void visitSuperExpression(SuperExpression node) {
+    node.staticType = _typeContext.enclosingClassElement?.type;
+  }
+
+  @override
+  void visitThisExpression(ThisExpression node) {
+    node.staticType = _typeContext.enclosingClassElement?.type;
+  }
+
+  @override
   void visitTypeAnnotation(TypeAnnotation node) {
     applyToTypeAnnotation(_getTypeFor(node), node);
   }
@@ -296,10 +379,10 @@
       node.name.staticType = type;
 
       VariableElementImpl element = _getDeclarationFor(node.name);
-      if (element != null && enclosingExecutable != null) {
+      if (element != null) {
+        _typeContext.encloseVariable(element);
         node.name.staticElement = element;
         element.type = type;
-        enclosingExecutable.encloseElement(element);
       }
     }
     node.initializer?.accept(this);
@@ -329,18 +412,17 @@
     }
   }
 
-  /// Associate arguments of the [argumentList] with parameters of the
-  /// given [executable].
+  /// Associate arguments of the [argumentList] with the [parameters].
   void _associateArgumentsWithParameters(
-      ExecutableElement executable, ArgumentList argumentList) {
-    if (executable != null) {
+      List<ParameterElement> parameters, ArgumentList argumentList) {
+    if (parameters != null) {
       List<Expression> arguments = argumentList.arguments;
       var correspondingParameters =
           new List<ParameterElement>(arguments.length);
       for (int i = 0; i < arguments.length; i++) {
         var argument = arguments[i];
         if (argument is NamedExpression) {
-          for (var parameter in executable.parameters) {
+          for (var parameter in parameters) {
             SimpleIdentifier label = argument.name.label;
             if (parameter.parameterKind == ParameterKind.NAMED &&
                 parameter.name == label.name) {
@@ -350,13 +432,30 @@
             }
           }
         } else {
-          correspondingParameters[i] = executable.parameters[i];
+          correspondingParameters[i] = parameters[i];
         }
       }
       argumentList.correspondingStaticParameters = correspondingParameters;
     }
   }
 
+  /// Return the [SyntacticEntity] with which the front-end associates
+  /// assignment to the given [leftHandSide].
+  SyntacticEntity _getAssignmentEntity(Expression leftHandSide) {
+    if (leftHandSide is SimpleIdentifier) {
+      return leftHandSide;
+    } else if (leftHandSide is PrefixedIdentifier) {
+      return leftHandSide.identifier;
+    } else if (leftHandSide is PropertyAccess) {
+      return leftHandSide.propertyName;
+    } else if (leftHandSide is IndexExpressionImpl) {
+      return leftHandSide.leftBracket;
+    } else {
+      throw new StateError(
+          'Unexpected LHS (${leftHandSide.runtimeType}) $leftHandSide');
+    }
+  }
+
   /// Return the element associated with the declaration represented by the
   /// given [node].
   Element _getDeclarationFor(AstNode node) {
@@ -376,7 +475,8 @@
   /// optional parameter (i.e. [Null]).
   DartType _getTypeFor(SyntacticEntity entity, {bool synthetic: false}) {
     assert(!synthetic || entity == null);
-    return _types[_typeIndex++];
+    kernel.DartType kernelType = _types[_typeIndex++];
+    return _typeContext.translateType(kernelType);
   }
 
   /// Apply the [type] to the [typeAnnotation] by setting the type of the
@@ -457,10 +557,14 @@
   }
 
   /// Recursively apply each of the type arguments of the [type] to the
-  /// corresponding type arguments of the [typeAnnotation].
+  /// corresponding type arguments of the [typeArguments].
   static void _applyTypeArgumentsToList(
-      DartType type, NodeList<TypeAnnotation> typeArguments) {
-    if (type is InterfaceType) {
+      DartType type, List<TypeAnnotation> typeArguments) {
+    if (type != null && type.isUndefined) {
+      for (TypeAnnotation argument in typeArguments) {
+        applyToTypeAnnotation(type, argument);
+      }
+    } else if (type is ParameterizedType) {
       List<DartType> argumentTypes = type.typeArguments;
       int argumentCount = argumentTypes.length;
       if (argumentCount != typeArguments.length) {
@@ -470,16 +574,34 @@
       for (int i = 0; i < argumentCount; i++) {
         applyToTypeAnnotation(argumentTypes[i], typeArguments[i]);
       }
-    } else if (type is FunctionType) {
-      // TODO(brianwilkerson) Add support for function types.
-      throw new StateError('Support for function types is not yet implemented');
     } else {
-      throw new StateError('Attempting to apply a non-interface type '
+      throw new StateError('Attempting to apply a non-parameterized type '
           '(${type.runtimeType}) to type arguments');
     }
   }
 }
 
+/// Context for translating types.
+abstract class TypeContext {
+  /// The enclosing [ClassElement], or `null` if not in a class.
+  ClassElement get enclosingClassElement;
+
+  DartType get typeType;
+
+  /// Attach the variable [element] to the current executable.
+  void encloseVariable(ElementImpl element);
+
+  /// Finalize the given function [element] - set all types for it.
+  /// Then make it the current executable.
+  void enterLocalFunction(FunctionElementImpl element);
+
+  /// Restore the current executable that was before the [element].
+  void exitLocalFunction(FunctionElementImpl element);
+
+  /// Return the Analyzer [DartType] for the given [kernelType].
+  DartType translateType(kernel.DartType kernelType);
+}
+
 /// Visitor that applies resolution data from the front end (obtained via
 /// [ResolutionStorer]) to an analyzer AST, and also checks file offsets to
 /// verify that the types are applied to the correct subexpressions.
@@ -492,13 +614,14 @@
   final List<int> _typeOffsets;
 
   ValidatingResolutionApplier(
+      TypeContext typeContext,
       List<Element> declaredElements,
       List<Element> referencedElements,
-      List<DartType> types,
+      List<kernel.DartType> types,
       this._declaredElementOffsets,
       this._referencedElementOffsets,
       this._typeOffsets)
-      : super(declaredElements, referencedElements, types);
+      : super(typeContext, declaredElements, referencedElements, types);
 
   @override
   void checkDone() {
diff --git a/pkg/analyzer/lib/src/fasta/resolution_storer.dart b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
index 90fcf2d..8ebf0ed 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_storer.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
@@ -5,6 +5,7 @@
 import 'package:analyzer/src/fasta/resolution_applier.dart';
 import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
 import 'package:kernel/ast.dart';
+import 'package:kernel/type_algebra.dart';
 
 /// TODO(scheglov) document
 class FunctionReferenceDartType implements DartType {
@@ -141,18 +142,18 @@
   }
 }
 
-/// TODO(scheglov) document
-class MemberReferenceDartType implements DartType {
+/// Information about invocation of the [member] and its instantiated [type].
+class MemberInvocationDartType implements DartType {
   final Member member;
-  final List<DartType> typeArguments;
+  final FunctionType type;
 
-  MemberReferenceDartType(this.member, this.typeArguments);
+  MemberInvocationDartType(this.member, this.type);
 
   noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 
   @override
   String toString() {
-    return '<${typeArguments.join(', ')}>$member';
+    return '($member, $type)';
   }
 }
 
@@ -171,16 +172,17 @@
   }
 }
 
-/// The type of [TreeNode] node that is used as a marker for using `null`
-/// combiner for not compound assignments.
-class NullAssignmentCombinerNode implements TreeNode {
-  const NullAssignmentCombinerNode();
+/// The type of [TreeNode] node that is used as a marker for `null`.
+class NullNode implements TreeNode {
+  final String kind;
+
+  const NullNode(this.kind);
 
   noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 
   @override
   String toString() {
-    return '(null-assignment-combiner)';
+    return '(null-$kind)';
   }
 }
 
@@ -200,6 +202,12 @@
   ResolutionStorer(this._declarations, this._references, this._types);
 
   @override
+  void asExpressionExit(AsExpression expression, DartType inferredType) {
+    _recordType(expression.type, expression.fileOffset);
+    _recordType(inferredType, expression.fileOffset);
+  }
+
+  @override
   bool constructorInvocationEnter(
       InvocationExpression expression, DartType typeContext) {
     return super.constructorInvocationEnter(expression, typeContext);
@@ -223,11 +231,9 @@
     assert(_deferredTypeSlots.isEmpty);
   }
 
-  @override
-  void functionDeclarationExit(FunctionDeclaration statement) {
+  void functionDeclarationEnter(FunctionDeclaration statement) {
     _recordDeclaration(statement.variable, statement.fileOffset);
-    _recordType(statement.function.returnType, statement.fileOffset);
-    super.functionDeclarationExit(statement);
+    super.functionDeclarationEnter(statement);
   }
 
   @override
@@ -257,11 +263,17 @@
     _replaceReference(writeMember);
     _replaceType(inferredType);
     _recordReference(
-        combiner ?? const NullAssignmentCombinerNode(), write.fileOffset);
+        combiner ?? const NullNode('assign-combiner'), write.fileOffset);
     _recordType(inferredType, write.fileOffset);
   }
 
   @override
+  void isExpressionExit(IsExpression expression, DartType inferredType) {
+    _recordType(expression.type, expression.fileOffset);
+    _recordType(inferredType, expression.fileOffset);
+  }
+
+  @override
   void methodInvocationBeforeArgs(Expression expression, bool isImplicitCall) {
     if (!isImplicitCall) {
       // When the invocation target is `VariableGet`, we record the target
@@ -286,8 +298,14 @@
   }
 
   @override
-  void methodInvocationExit(Expression expression, Arguments arguments,
-      bool isImplicitCall, Object interfaceMember, DartType inferredType) {
+  void methodInvocationExit(
+      Expression expression,
+      Arguments arguments,
+      bool isImplicitCall,
+      Member interfaceMember,
+      FunctionType calleeType,
+      Substitution substitution,
+      DartType inferredType) {
     _replaceType(
         inferredType,
         arguments.fileOffset != -1
@@ -295,8 +313,24 @@
             : expression.fileOffset);
     if (!isImplicitCall) {
       _replaceReference(interfaceMember);
-      _replaceType(new MemberReferenceDartType(
-          interfaceMember as Member, arguments.types));
+      FunctionType invokeType = substitution == null
+          ? calleeType
+          : substitution.substituteType(calleeType.withoutTypeParameters);
+      _replaceType(new MemberInvocationDartType(interfaceMember, invokeType));
+    }
+    super.genericExpressionExit("methodInvocation", expression, inferredType);
+  }
+
+  @override
+  void methodInvocationExitCall(Expression expression, Arguments arguments,
+      bool isImplicitCall, DartType inferredType) {
+    _replaceType(
+        inferredType,
+        arguments.fileOffset != -1
+            ? arguments.fileOffset
+            : expression.fileOffset);
+    if (!isImplicitCall) {
+      throw new UnimplementedError(); // TODO(scheglov): handle this case
     }
     super.genericExpressionExit("methodInvocation", expression, inferredType);
   }
@@ -320,18 +354,24 @@
     _replaceReference(new MemberSetterNode(writeMember));
     _replaceType(writeContext);
     _recordReference(
-        combiner ?? const NullAssignmentCombinerNode(), write.fileOffset);
+        combiner ?? const NullNode('assign-combiner'), write.fileOffset);
     _recordType(inferredType, write.fileOffset);
   }
 
   @override
   void propertyGetExit(
-      Expression expression, Object member, DartType inferredType) {
+      Expression expression, Member member, DartType inferredType) {
     _recordReference(new MemberGetterNode(member), expression.fileOffset);
     super.propertyGetExit(expression, member, inferredType);
   }
 
   @override
+  void propertyGetExitCall(Expression expression, DartType inferredType) {
+    throw new UnimplementedError(); // TODO(scheglov): handle this case
+    // super.propertyGetExitCall(expression, inferredType);
+  }
+
+  @override
   void staticGetExit(StaticGet expression, DartType inferredType) {
     _recordReference(expression.target, expression.fileOffset);
     super.staticGetExit(expression, inferredType);
@@ -362,37 +402,45 @@
 
   @override
   void staticInvocationExit(
-      StaticInvocation expression, DartType inferredType) {
+      StaticInvocation expression,
+      FunctionType calleeType,
+      Substitution substitution,
+      DartType inferredType) {
     _replaceType(inferredType);
     _replaceReference(expression.target);
-    // TODO(paulberry): get the actual callee function type from the inference
-    // engine
-    var calleeType = const DynamicType();
-    _replaceType(calleeType);
+    FunctionType invokeType = substitution == null
+        ? calleeType
+        : substitution.substituteType(calleeType.withoutTypeParameters);
+    _replaceType(new MemberInvocationDartType(expression.target, invokeType));
     super.genericExpressionExit("staticInvocation", expression, inferredType);
   }
 
+  @override
+  void thisExpressionExit(ThisExpression expression, DartType inferredType) {}
+
   void typeLiteralExit(TypeLiteral expression, DartType inferredType) {
     _recordReference(expression.type, expression.fileOffset);
     super.typeLiteralExit(expression, inferredType);
   }
 
   @override
-  bool variableAssignEnter(Expression expression, DartType typeContext) {
-    _deferReference(expression.fileOffset);
-    _deferType(expression.fileOffset);
-    return super.variableAssignEnter(expression, typeContext);
+  bool variableAssignEnter(
+      Expression expression, DartType typeContext, Expression write) {
+    _deferReference(write.fileOffset);
+    _deferType(write.fileOffset);
+    return super.variableAssignEnter(expression, typeContext, write);
   }
 
   @override
   void variableAssignExit(Expression expression, DartType writeContext,
-      Procedure combiner, DartType inferredType) {
-    VariableSet variableSet = expression;
-    _replaceReference(variableSet.variable);
+      Expression write, Procedure combiner, DartType inferredType) {
+    _replaceReference(write is VariableSet
+        ? write.variable
+        : const NullNode('writable-variable'));
     _replaceType(writeContext);
     _recordReference(
-        combiner ?? const NullAssignmentCombinerNode(), variableSet.fileOffset);
-    super.variableAssignExit(expression, writeContext, combiner, inferredType);
+        combiner ?? const NullNode('assign-combiner'), write.fileOffset);
+    _recordType(inferredType, write.fileOffset);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/generated/parser_fasta.dart b/pkg/analyzer/lib/src/generated/parser_fasta.dart
index 95da9ff..75740fd 100644
--- a/pkg/analyzer/lib/src/generated/parser_fasta.dart
+++ b/pkg/analyzer/lib/src/generated/parser_fasta.dart
@@ -174,7 +174,9 @@
 
   @override
   Expression parseExpression2() {
-    currentToken = fastaParser.parseExpression(currentToken).next;
+    currentToken = fastaParser
+        .parseExpression(fastaParser.syntheticPreviousToken(currentToken))
+        .next;
     return astBuilder.pop();
   }
 
diff --git a/pkg/analyzer/lib/src/kernel/loader.dart b/pkg/analyzer/lib/src/kernel/loader.dart
index ce18e6e..525e5aa 100644
--- a/pkg/analyzer/lib/src/kernel/loader.dart
+++ b/pkg/analyzer/lib/src/kernel/loader.dart
@@ -144,7 +144,7 @@
       library = new ast.Library(uri)
         ..isExternal = true
         ..name = getLibraryName(element)
-        ..fileUri = '${element.source.uri}';
+        ..fileUri = element.source.uri;
       program.libraries.add(library..parent = program);
       _libraries[element] = library;
     }
@@ -304,7 +304,7 @@
     _classes[element] = classNode = new ast.Class(
         name: element.name,
         isAbstract: element.isAbstract,
-        fileUri: '${element.source.uri}')
+        fileUri: element.source.uri)
       ..fileOffset = element.nameOffset;
     classNode.level = ast.ClassLevel.Temporary;
     var library = getLibraryReference(element.library);
@@ -520,7 +520,7 @@
               isStatic: true,
               isExternal: constructor.isExternal,
               isConst: constructor.isConst,
-              fileUri: '${element.source.uri}')
+              fileUri: element.source.uri)
             ..fileOffset = element.nameOffset;
         }
         return new ast.Constructor(scope.buildFunctionInterface(constructor),
@@ -538,7 +538,7 @@
             isFinal: variable.isFinal,
             isConst: variable.isConst,
             type: scope.buildType(variable.type),
-            fileUri: '${element.source.uri}')
+            fileUri: element.source.uri)
           ..fileOffset = element.nameOffset;
 
       case ElementKind.METHOD:
@@ -558,7 +558,7 @@
             isAbstract: executable.isAbstract,
             isStatic: executable.isStatic,
             isExternal: executable.isExternal,
-            fileUri: '${element.source.uri}')
+            fileUri: element.source.uri)
           ..fileOffset = element.nameOffset;
 
       default:
@@ -858,7 +858,7 @@
           // The source's contents could not be accessed.
           sourceCode = const <int>[];
         }
-        program.uriToSource['${source.uri}'] =
+        program.uriToSource[source.uri] =
             new ast.Source(lineInfo.lineStarts, sourceCode);
       }
     }
diff --git a/pkg/analyzer/lib/src/kernel/resynthesize.dart b/pkg/analyzer/lib/src/kernel/resynthesize.dart
index 01f88a8..105dc52 100644
--- a/pkg/analyzer/lib/src/kernel/resynthesize.dart
+++ b/pkg/analyzer/lib/src/kernel/resynthesize.dart
@@ -201,7 +201,7 @@
       var parts = new List<CompilationUnitElementImpl>(kernel.parts.length);
       for (int i = 0; i < kernel.parts.length; i++) {
         var fileUri = kernel.parts[i].fileUri;
-        var unitContext = libraryContext._buildUnit(fileUri);
+        var unitContext = libraryContext._buildUnit("$fileUri");
         parts[i] = unitContext.unit;
       }
       libraryElement.parts = parts;
@@ -354,21 +354,11 @@
       return initializer;
     }
 
-    if (k is kernel.LocalInitializer) {
-      var invocation = k.variable.initializer;
-      if (invocation is kernel.MethodInvocation) {
-        var receiver = invocation.receiver;
-        if (receiver is kernel.FunctionExpression &&
-            invocation.name.name == 'call') {
-          var body = receiver.function.body;
-          if (body is kernel.AssertStatement) {
-            var condition = build(body.condition);
-            var message = body.message != null ? build(body.message) : null;
-            return AstTestFactory.assertInitializer(condition, message);
-          }
-        }
-      }
-      throw new StateError('Expected assert initializer $k');
+    if (k is kernel.AssertInitializer) {
+      var body = k.statement;
+      var condition = build(body.condition);
+      var message = body.message != null ? build(body.message) : null;
+      return AstTestFactory.assertInitializer(condition, message);
     }
 
     if (k is kernel.RedirectingInitializer) {
@@ -773,7 +763,7 @@
   LibraryElementImpl libraryElement;
 
   _KernelLibraryResynthesizerContextImpl(this.resynthesizer, this.library) {
-    libraryDirectoryUri = pathos.url.dirname(library.fileUri);
+    libraryDirectoryUri = pathos.url.dirname("${library.fileUri}");
   }
 
   @override
@@ -829,7 +819,7 @@
 
   _KernelUnitResynthesizerContextImpl _buildUnit(String fileUri) {
     var unitContext = new _KernelUnitResynthesizerContextImpl(
-        this, fileUri ?? library.fileUri);
+        this, fileUri ?? "${library.fileUri}");
     var unitElement = new CompilationUnitElementImpl.forKernel(
         libraryElement, unitContext, '<no name>');
     unitContext.unit = unitElement;
@@ -874,7 +864,7 @@
   List<kernel.Expression> get annotations {
     if (_annotations == null) {
       for (var part in context.libraryContext.library.parts) {
-        if (part.fileUri == context.fileUri) {
+        if ("${part.fileUri}" == context.fileUri) {
           return _annotations = part.annotations;
         }
       }
@@ -885,25 +875,25 @@
   @override
   List<kernel.Class> get classes =>
       _classes ??= context.libraryContext.library.classes
-          .where((n) => n.fileUri == context.fileUri)
+          .where((n) => "${n.fileUri}" == context.fileUri)
           .toList(growable: false);
 
   @override
   List<kernel.Field> get fields =>
       _fields ??= context.libraryContext.library.fields
-          .where((n) => n.fileUri == context.fileUri)
+          .where((n) => "${n.fileUri}" == context.fileUri)
           .toList(growable: false);
 
   @override
   List<kernel.Procedure> get procedures =>
       _procedures ??= context.libraryContext.library.procedures
-          .where((n) => n.fileUri == context.fileUri)
+          .where((n) => "${n.fileUri}" == context.fileUri)
           .toList(growable: false);
 
   @override
   List<kernel.Typedef> get typedefs =>
       _typedefs ??= context.libraryContext.library.typedefs
-          .where((n) => n.fileUri == context.fileUri)
+          .where((n) => "${n.fileUri}" == context.fileUri)
           .toList(growable: false);
 }
 
diff --git a/pkg/analyzer/lib/src/lint/analysis.dart b/pkg/analyzer/lib/src/lint/analysis.dart
index 4f9bbb4..dce18a5 100644
--- a/pkg/analyzer/lib/src/lint/analysis.dart
+++ b/pkg/analyzer/lib/src/lint/analysis.dart
@@ -24,7 +24,7 @@
 import 'package:analyzer/src/lint/registry.dart';
 import 'package:analyzer/src/services/lint.dart';
 import 'package:analyzer/src/util/sdk.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:package_config/packages.dart' show Packages;
 import 'package:package_config/packages_file.dart' as pkgfile show parse;
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index 1e9986b..391bf75 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -72,22 +72,6 @@
     with ErrorParserTestMixin {
   @override
   @failingTest
-  void test_annotationOnEnumConstant_first() {
-    // TODO(brianwilkerson) Fix highlight region.
-    // This is highlighting the '@', but should highlight the whole annotation.
-    super.test_annotationOnEnumConstant_first();
-  }
-
-  @override
-  @failingTest
-  void test_annotationOnEnumConstant_middle() {
-    // TODO(brianwilkerson) Fix highlight region.
-    // This is highlighting the '@', but should highlight the whole annotation.
-    super.test_annotationOnEnumConstant_middle();
-  }
-
-  @override
-  @failingTest
   void test_breakOutsideOfLoop_breakInIfStatement() {
     // TODO(brianwilkerson) Wrong errors:
     // Expected 1 errors of type ParserErrorCode.BREAK_OUTSIDE_OF_LOOP, found 0
@@ -104,13 +88,6 @@
 
   @override
   @failingTest
-  void test_classTypeAlias_abstractAfterEq() {
-    // TODO(brianwilkerson) Does not recover.
-    super.test_classTypeAlias_abstractAfterEq();
-  }
-
-  @override
-  @failingTest
   void test_constConstructorWithBody() {
     // TODO(brianwilkerson) Wrong errors:
     // Expected 1 errors of type ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, found 0
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 2411078..39121f4 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -2375,10 +2375,12 @@
     createParser('class A = abstract B with C;');
     CompilationUnitMember member = parseFullCompilationUnitMember();
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 0),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 0)
-    ]);
+    listener.assertErrors(usingFastaParser
+        ? [expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 10, 8)]
+        : [
+            expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 0),
+            expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 0)
+          ]);
   }
 
   void test_colonInPlaceOfIn() {
diff --git a/pkg/analyzer/test/generated/resolver_test_case.dart b/pkg/analyzer/test/generated/resolver_test_case.dart
index a6b1ab8..f040574 100644
--- a/pkg/analyzer/test/generated/resolver_test_case.dart
+++ b/pkg/analyzer/test/generated/resolver_test_case.dart
@@ -27,7 +27,7 @@
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
 import 'package:analyzer/src/generated/testing/element_factory.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:test/test.dart';
 
diff --git a/pkg/analyzer/test/src/context/mock_sdk.dart b/pkg/analyzer/test/src/context/mock_sdk.dart
index e839d00..9599777 100644
--- a/pkg/analyzer/test/src/context/mock_sdk.dart
+++ b/pkg/analyzer/test/src/context/mock_sdk.dart
@@ -266,6 +266,7 @@
   Iterator<E> get iterator;
   bool get isEmpty;
   E get first;
+  int get length;
 
   Iterable<R> map<R>(R f(E e));
 
@@ -324,6 +325,7 @@
 
 class _ConstantExpressionError {
   const _ConstantExpressionError();
+  external _throw(error);
 }
 
 class _DuplicatedFieldInitializerError {
diff --git a/pkg/analyzer/test/src/dart/analysis/base.dart b/pkg/analyzer/test/src/dart/analysis/base.dart
index 8d20476..33f83e8 100644
--- a/pkg/analyzer/test/src/dart/analysis/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/base.dart
@@ -14,7 +14,7 @@
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
index 6a92b36..234d071 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
@@ -62,13 +62,6 @@
   @failingTest
   @potentialAnalyzerProblem
   @override
-  test_changeFile_selfConsistent() async {
-    await super.test_changeFile_selfConsistent();
-  }
-
-  @failingTest
-  @potentialAnalyzerProblem
-  @override
   test_const_annotation_withArgs() async {
     await super.test_const_annotation_withArgs();
   }
@@ -226,13 +219,6 @@
   }
 
   @failingTest
-  @potentialAnalyzerProblem
-  @override
-  test_getResult_selfConsistent() async {
-    await super.test_getResult_selfConsistent();
-  }
-
-  @failingTest
   @FastaProblem('https://github.com/dart-lang/sdk/issues/30959')
   @override
   test_part_getResult_noLibrary() async {
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 2143138..f76b383 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -28,7 +28,7 @@
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
@@ -47,6 +47,8 @@
   });
 }
 
+Matcher isUndefinedType = new isInstanceOf<UndefinedTypeImpl>();
+
 /**
  * Returns a [Future] that completes after pumping the event queue [times]
  * times. By default, this should pump the event queue enough times to allow
@@ -217,6 +219,46 @@
     }
   }
 
+  test_asExpression() async {
+    String content = r'''
+void main() {
+  num v = 42;
+  v as int;
+}
+''';
+    addTestFile(content);
+
+    AnalysisResult result = await driver.getResult(testFile);
+    expect(result.path, testFile);
+    expect(result.errors, isEmpty);
+
+    var typeProvider = result.unit.element.context.typeProvider;
+    NodeList<Statement> statements = _getMainStatements(result);
+
+    // num v = 42;
+    VariableElement vElement;
+    {
+      VariableDeclarationStatement statement = statements[0];
+      vElement = statement.variables.variables[0].name.staticElement;
+      expect(vElement.type, typeProvider.numType);
+    }
+
+    // v as int;
+    {
+      ExpressionStatement statement = statements[1];
+      AsExpression asExpression = statement.expression;
+      expect(asExpression.staticType, typeProvider.intType);
+
+      SimpleIdentifier target = asExpression.expression;
+      expect(target.staticElement, vElement);
+      expect(target.staticType, typeProvider.numType);
+
+      TypeName intName = asExpression.type;
+      expect(intName.name.staticElement, typeProvider.intType.element);
+      expect(intName.name.staticType, typeProvider.intType);
+    }
+  }
+
   test_assignmentExpression_compound_indexExpression() async {
     String content = r'''
 main() {
@@ -407,6 +449,44 @@
     }
   }
 
+  test_assignmentExpression_nullAware_local() async {
+    String content = r'''
+main() {
+  String v;
+  v ??= 'test';
+}
+''';
+    addTestFile(content);
+
+    AnalysisResult result = await driver.getResult(testFile);
+    CompilationUnit unit = result.unit;
+    var typeProvider = unit.element.context.typeProvider;
+
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    VariableElement v;
+    {
+      VariableDeclarationStatement statement = mainStatements[0];
+      v = statement.variables.variables[0].element;
+    }
+
+    {
+      ExpressionStatement statement = mainStatements[1];
+
+      AssignmentExpression assignment = statement.expression;
+      expect(assignment.operator.type, TokenType.QUESTION_QUESTION_EQ);
+      expect(assignment.staticElement, isNull);
+      expect(assignment.staticType, typeProvider.stringType);
+
+      SimpleIdentifier left = assignment.leftHandSide;
+      expect(left.staticElement, same(v));
+      expect(left.staticType, typeProvider.stringType);
+
+      Expression right = assignment.rightHandSide;
+      expect(right.staticType, typeProvider.stringType);
+    }
+  }
+
   test_assignmentExpression_simple_indexExpression() async {
     String content = r'''
 main() {
@@ -717,6 +797,76 @@
     expect(value.staticType, typeProvider.intType);
   }
 
+  test_binaryExpression_notEqual() async {
+    // TODO(scheglov) Add similar test for `v is! T`.
+    String content = r'''
+main() {
+  1 != 2;
+}
+''';
+    addTestFile(content);
+
+    AnalysisResult result = await driver.getResult(testFile);
+    CompilationUnit unit = result.unit;
+    var typeProvider = unit.element.context.typeProvider;
+
+    List<Statement> statements = _getMainStatements(result);
+    ExpressionStatement statement = statements[0];
+    BinaryExpression expression = statement.expression;
+    expect(expression.operator.type, TokenType.BANG_EQ);
+    expect(expression.leftOperand.staticType, typeProvider.intType);
+    expect(expression.rightOperand.staticType, typeProvider.intType);
+    expect(expression.staticElement.name, '==');
+    expect(expression.staticType, typeProvider.boolType);
+  }
+
+  test_conditionalExpression() async {
+    String content = r'''
+void main() {
+  true ? 1 : 2.3;
+}
+''';
+    addTestFile(content);
+    AnalysisResult result = await driver.getResult(testFile);
+    var typeProvider = result.unit.element.context.typeProvider;
+
+    List<Statement> statements = _getMainStatements(result);
+
+    ExpressionStatement statement = statements[0];
+    ConditionalExpression expression = statement.expression;
+    expect(expression.staticType, typeProvider.numType);
+    expect(expression.condition.staticType, typeProvider.boolType);
+    expect(expression.thenExpression.staticType, typeProvider.intType);
+    expect(expression.elseExpression.staticType, typeProvider.doubleType);
+  }
+
+  test_error_unresolvedTypeAnnotation() async {
+    String content = r'''
+main() {
+  Foo<int> v = null;
+}
+''';
+    addTestFile(content);
+    AnalysisResult result = await driver.getResult(testFile);
+    var typeProvider = result.unit.element.context.typeProvider;
+
+    var statements = _getMainStatements(result);
+
+    VariableDeclarationStatement statement = statements[0];
+
+    TypeName typeName = statement.variables.type;
+    expect(typeName.type, isUndefinedType);
+    if (previewDart2) {
+      expect(typeName.typeArguments.arguments[0].type, isUndefinedType);
+    } else {
+      expect(typeName.typeArguments.arguments[0].type, typeProvider.intType);
+    }
+
+    VariableDeclaration vNode = statement.variables.variables[0];
+    expect(vNode.name.staticType, isUndefinedType);
+    expect(vNode.element.type, isUndefinedType);
+  }
+
   test_indexExpression() async {
     String content = r'''
 main() {
@@ -756,6 +906,45 @@
     expect(actualElement.parameters[0].type, intType);
   }
 
+  test_isExpression() async {
+    String content = r'''
+void main() {
+  var v = 42;
+  v is num;
+}
+''';
+    addTestFile(content);
+
+    AnalysisResult result = await driver.getResult(testFile);
+    expect(result.path, testFile);
+    expect(result.errors, isEmpty);
+
+    var typeProvider = result.unit.element.context.typeProvider;
+    NodeList<Statement> statements = _getMainStatements(result);
+
+    // var v = 42;
+    VariableElement vElement;
+    {
+      VariableDeclarationStatement statement = statements[0];
+      vElement = statement.variables.variables[0].name.staticElement;
+    }
+
+    // v;
+    {
+      ExpressionStatement statement = statements[1];
+      IsExpression isExpression = statement.expression;
+      expect(isExpression.staticType, typeProvider.boolType);
+
+      SimpleIdentifier target = isExpression.expression;
+      expect(target.staticElement, vElement);
+      expect(target.staticType, typeProvider.intType);
+
+      TypeName numName = isExpression.type;
+      expect(numName.name.staticElement, typeProvider.numType.element);
+      expect(numName.name.staticType, typeProvider.numType);
+    }
+  }
+
   test_local_function() async {
     addTestFile(r'''
 void main() {
@@ -818,6 +1007,87 @@
     expect(fInvocation.staticInvokeType.toString(), fTypeString);
   }
 
+  test_local_function_generic() async {
+    addTestFile(r'''
+void main() {
+  T f<T, U>(T a, U b) {}
+  var v = f(1, '2');
+}
+''');
+    AnalysisResult result = await driver.getResult(testFile);
+    var typeProvider = result.unit.element.context.typeProvider;
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    FunctionDeclarationStatement fStatement = mainStatements[0];
+    FunctionDeclaration fNode = fStatement.functionDeclaration;
+    FunctionExpression fExpression = fNode.functionExpression;
+    FunctionElement fElement = fNode.element;
+
+    TypeParameterElement tElement = fElement.typeParameters[0];
+    TypeParameterElement uElement = fElement.typeParameters[1];
+
+    {
+      var fTypeParameters = fExpression.typeParameters.typeParameters;
+      expect(fTypeParameters, hasLength(2));
+
+      TypeParameter tNode = fTypeParameters[0];
+      expect(tNode.element, same(tElement));
+      expect(tNode.name.staticElement, same(tElement));
+      expect(tNode.name.staticType, typeProvider.typeType);
+
+      TypeParameter uNode = fTypeParameters[1];
+      expect(uNode.element, same(uElement));
+      expect(uNode.name.staticElement, same(uElement));
+      expect(uNode.name.staticType, typeProvider.typeType);
+    }
+
+    expect(fElement, isNotNull);
+    expect(fElement.type.toString(), '<T,U>(T, U) → T');
+
+    expect(fNode.name.staticElement, same(fElement));
+    expect(fNode.name.staticType, fElement.type);
+
+    TypeName fReturnTypeNode = fNode.returnType;
+    expect(fReturnTypeNode.name.staticElement, same(tElement));
+    expect(fReturnTypeNode.type, tElement.type);
+
+    expect(fExpression.element, same(fElement));
+
+    {
+      List<ParameterElement> elements = fElement.parameters;
+      expect(elements, hasLength(2));
+
+      List<FormalParameter> nodes = fExpression.parameters.parameters;
+      expect(nodes, hasLength(2));
+
+      _assertSimpleParameter(nodes[0], elements[0],
+          name: 'a',
+          offset: 28,
+          kind: ParameterKind.REQUIRED,
+          type: tElement.type);
+
+      _assertSimpleParameter(nodes[1], elements[1],
+          name: 'b',
+          offset: 33,
+          kind: ParameterKind.REQUIRED,
+          type: uElement.type);
+    }
+
+    VariableDeclarationStatement vStatement = mainStatements[1];
+    VariableDeclaration vDeclaration = vStatement.variables.variables[0];
+    expect(vDeclaration.element.type, typeProvider.intType);
+
+    MethodInvocation fInvocation = vDeclaration.initializer;
+    expect(fInvocation.methodName.staticElement, same(fElement));
+    expect(fInvocation.staticType, typeProvider.intType);
+    // TODO(scheglov) We don't support invoke types well.
+//    if (previewDart2) {
+//      String fInstantiatedType = '(int, String) → int';
+//      expect(fInvocation.methodName.staticType.toString(), fInstantiatedType);
+//      expect(fInvocation.staticInvokeType.toString(), fInstantiatedType);
+//    }
+  }
+
   test_local_function_namedParameters() async {
     addTestFile(r'''
 void main() {
@@ -1036,6 +1306,66 @@
     }
   }
 
+  test_local_parameter_ofLocalFunction() async {
+    addTestFile(r'''
+void main() {
+  void f(int a) {
+    a;
+    void g(double b) {
+      b;
+    }
+  }
+}
+''');
+    AnalysisResult result = await driver.getResult(testFile);
+
+    var typeProvider = result.unit.element.context.typeProvider;
+
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    // f(int a) {}
+    FunctionDeclarationStatement fStatement = mainStatements[0];
+    FunctionDeclaration fNode = fStatement.functionDeclaration;
+    FunctionExpression fExpression = fNode.functionExpression;
+    FunctionElement fElement = fNode.element;
+    ParameterElement aElement = fElement.parameters[0];
+    _assertSimpleParameter(fExpression.parameters.parameters[0], aElement,
+        name: 'a',
+        offset: 27,
+        kind: ParameterKind.REQUIRED,
+        type: typeProvider.intType);
+
+    BlockFunctionBody fBody = fExpression.body;
+    List<Statement> fStatements = fBody.block.statements;
+
+    // a;
+    ExpressionStatement aStatement = fStatements[0];
+    SimpleIdentifier aNode = aStatement.expression;
+    expect(aNode.staticElement, same(aElement));
+    expect(aNode.staticType, typeProvider.intType);
+
+    // g(double b) {}
+    FunctionDeclarationStatement gStatement = fStatements[1];
+    FunctionDeclaration gNode = gStatement.functionDeclaration;
+    FunctionExpression gExpression = gNode.functionExpression;
+    FunctionElement gElement = gNode.element;
+    ParameterElement bElement = gElement.parameters[0];
+    _assertSimpleParameter(gExpression.parameters.parameters[0], bElement,
+        name: 'b',
+        offset: 57,
+        kind: ParameterKind.REQUIRED,
+        type: typeProvider.doubleType);
+
+    BlockFunctionBody gBody = gExpression.body;
+    List<Statement> gStatements = gBody.block.statements;
+
+    // b;
+    ExpressionStatement bStatement = gStatements[0];
+    SimpleIdentifier bNode = bStatement.expression;
+    expect(bNode.staticElement, same(bElement));
+    expect(bNode.staticType, typeProvider.doubleType);
+  }
+
   test_local_variable() async {
     String content = r'''
 void main() {
@@ -1083,6 +1413,250 @@
     }
   }
 
+  test_local_variable_ofLocalFunction() async {
+    addTestFile(r'''
+void main() {
+  void f() {
+    int a;
+    a;
+    void g() {
+      double b;
+      a;
+      b;
+    }
+  }
+}
+''');
+    AnalysisResult result = await driver.getResult(testFile);
+
+    var typeProvider = result.unit.element.context.typeProvider;
+
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    // f() {}
+    FunctionDeclarationStatement fStatement = mainStatements[0];
+    FunctionDeclaration fNode = fStatement.functionDeclaration;
+    BlockFunctionBody fBody = fNode.functionExpression.body;
+    List<Statement> fStatements = fBody.block.statements;
+
+    // int a;
+    VariableDeclarationStatement aDeclaration = fStatements[0];
+    VariableElement aElement = aDeclaration.variables.variables[0].element;
+
+    // a;
+    {
+      ExpressionStatement aStatement = fStatements[1];
+      SimpleIdentifier aNode = aStatement.expression;
+      expect(aNode.staticElement, same(aElement));
+      expect(aNode.staticType, typeProvider.intType);
+    }
+
+    // g(double b) {}
+    FunctionDeclarationStatement gStatement = fStatements[2];
+    FunctionDeclaration gNode = gStatement.functionDeclaration;
+    BlockFunctionBody gBody = gNode.functionExpression.body;
+    List<Statement> gStatements = gBody.block.statements;
+
+    // double b;
+    VariableDeclarationStatement bDeclaration = gStatements[0];
+    VariableElement bElement = bDeclaration.variables.variables[0].element;
+
+    // a;
+    {
+      ExpressionStatement aStatement = gStatements[1];
+      SimpleIdentifier aNode = aStatement.expression;
+      expect(aNode.staticElement, same(aElement));
+      expect(aNode.staticType, typeProvider.intType);
+    }
+
+    // b;
+    {
+      ExpressionStatement bStatement = gStatements[2];
+      SimpleIdentifier bNode = bStatement.expression;
+      expect(bNode.staticElement, same(bElement));
+      expect(bNode.staticType, typeProvider.doubleType);
+    }
+  }
+
+  test_methodInvocation_instanceMethod_generic() async {
+    addTestFile(r'''
+main() {
+  new C<int>().m(1, 2.3);
+}
+class C<T> {
+  Map<T, U> m<U>(T a, U b) => null;
+}
+''');
+    AnalysisResult result = await driver.getResult(testFile);
+    var typeProvider = result.unit.element.context.typeProvider;
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    ClassDeclaration cNode = result.unit.declarations[1];
+    MethodDeclaration mNode = cNode.members[0];
+    MethodElement mElement = mNode.element;
+
+    {
+      ExpressionStatement statement = mainStatements[0];
+      MethodInvocation invocation = statement.expression;
+      List<Expression> arguments = invocation.argumentList.arguments;
+
+      var invokeTypeStr = '(int, double) → Map<int, double>';
+      expect(invocation.staticType.toString(), 'Map<int, double>');
+      expect(invocation.staticInvokeType.toString(), invokeTypeStr);
+      if (previewDart2) {
+        expect(invocation.staticInvokeType.element, same(mElement));
+        expect(invocation.methodName.staticElement, same(mElement));
+        expect(invocation.methodName.staticType.toString(), invokeTypeStr);
+      }
+
+      Expression aArgument = arguments[0];
+      ParameterMember aArgumentParameter = aArgument.staticParameterElement;
+      ParameterElement aElement = mElement.parameters[0];
+      expect(aArgumentParameter.type, typeProvider.intType);
+      expect(aArgumentParameter.baseElement, same(aElement));
+
+      Expression bArgument = arguments[1];
+      ParameterMember bArgumentParameter = bArgument.staticParameterElement;
+      ParameterElement bElement = mElement.parameters[1];
+      expect(bArgumentParameter.type, typeProvider.doubleType);
+      if (previewDart2) {
+        expect(bArgumentParameter.baseElement, same(bElement));
+      }
+    }
+  }
+
+  test_methodInvocation_topLevelFunction() async {
+    addTestFile(r'''
+void main() {
+  f(1, '2');
+}
+double f(int a, String b) {}
+''');
+    String fTypeString = '(int, String) → double';
+
+    AnalysisResult result = await driver.getResult(testFile);
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    var typeProvider = result.unit.element.context.typeProvider;
+    InterfaceType doubleType = typeProvider.doubleType;
+
+    FunctionDeclaration fNode = result.unit.declarations[1];
+    FunctionElement fElement = fNode.element;
+
+    ExpressionStatement statement = mainStatements[0];
+    MethodInvocation invocation = statement.expression;
+    List<Expression> arguments = invocation.argumentList.arguments;
+
+    expect(invocation.methodName.staticElement, same(fElement));
+    expect(invocation.methodName.staticType.toString(), fTypeString);
+    expect(invocation.staticType, same(doubleType));
+    expect(invocation.staticInvokeType.toString(), fTypeString);
+
+    Expression aArgument = arguments[0];
+    ParameterElement aElement = fElement.parameters[0];
+    expect(aArgument.staticParameterElement, same(aElement));
+
+    Expression bArgument = arguments[1];
+    ParameterElement bElement = fElement.parameters[1];
+    expect(bArgument.staticParameterElement, same(bElement));
+  }
+
+  test_methodInvocation_topLevelFunction_generic() async {
+    addTestFile(r'''
+void main() {
+  f<bool, String>(true, 'str');
+  f(1, 2.3);
+}
+void f<T, U>(T a, U b) {}
+''');
+    AnalysisResult result = await driver.getResult(testFile);
+    var typeProvider = result.unit.element.context.typeProvider;
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    FunctionDeclaration fNode = result.unit.declarations[1];
+    FunctionElement fElement = fNode.element;
+
+    // f<bool, String>(true, 'str');
+    {
+      String fTypeString = '(bool, String) → void';
+      ExpressionStatement statement = mainStatements[0];
+      MethodInvocation invocation = statement.expression;
+
+      List<TypeAnnotation> typeArguments = invocation.typeArguments.arguments;
+      expect(typeArguments, hasLength(2));
+      {
+        TypeName typeArgument = typeArguments[0];
+        InterfaceType boolType = typeProvider.boolType;
+        expect(typeArgument.type, boolType);
+        expect(typeArgument.name.staticElement, boolType.element);
+        expect(typeArgument.name.staticType, boolType);
+      }
+      {
+        TypeName typeArgument = typeArguments[1];
+        InterfaceType stringType = typeProvider.stringType;
+        expect(typeArgument.type, stringType);
+        expect(typeArgument.name.staticElement, stringType.element);
+        expect(typeArgument.name.staticType, stringType);
+      }
+
+      List<Expression> arguments = invocation.argumentList.arguments;
+
+      expect(invocation.methodName.staticElement, same(fElement));
+      if (previewDart2) {
+        expect(invocation.methodName.staticType.toString(), fTypeString);
+      }
+      expect(invocation.staticType, VoidTypeImpl.instance);
+      expect(invocation.staticInvokeType.toString(), fTypeString);
+
+      Expression aArgument = arguments[0];
+      ParameterMember aArgumentParameter = aArgument.staticParameterElement;
+      ParameterElement aElement = fElement.parameters[0];
+      expect(aArgumentParameter.type, typeProvider.boolType);
+      if (previewDart2) {
+        expect(aArgumentParameter.baseElement, same(aElement));
+      }
+
+      Expression bArgument = arguments[1];
+      ParameterMember bArgumentParameter = bArgument.staticParameterElement;
+      ParameterElement bElement = fElement.parameters[1];
+      expect(bArgumentParameter.type, typeProvider.stringType);
+      if (previewDart2) {
+        expect(bArgumentParameter.baseElement, same(bElement));
+      }
+    }
+
+    // f(1, 2.3);
+    {
+      String fTypeString = '(int, double) → void';
+      ExpressionStatement statement = mainStatements[1];
+      MethodInvocation invocation = statement.expression;
+      List<Expression> arguments = invocation.argumentList.arguments;
+
+      expect(invocation.methodName.staticElement, same(fElement));
+      if (previewDart2) {
+        expect(invocation.methodName.staticType.toString(), fTypeString);
+      }
+      expect(invocation.staticType, VoidTypeImpl.instance);
+      expect(invocation.staticInvokeType.toString(), fTypeString);
+
+      Expression aArgument = arguments[0];
+      ParameterMember aArgumentParameter = aArgument.staticParameterElement;
+      ParameterElement aElement = fElement.parameters[0];
+      expect(aArgumentParameter.type, typeProvider.intType);
+      if (previewDart2) {
+        expect(aArgumentParameter.baseElement, same(aElement));
+      }
+
+      Expression bArgument = arguments[1];
+      ParameterMember bArgumentParameter = bArgument.staticParameterElement;
+      ParameterElement bElement = fElement.parameters[1];
+      expect(bArgumentParameter.type, typeProvider.doubleType);
+      if (previewDart2) {
+        expect(bArgumentParameter.baseElement, same(bElement));
+      }
+    }
+  }
+
   test_namedArgument() async {
     addTestFile(r'''
 void main() {
@@ -1115,6 +1689,221 @@
     expect(cArgument.staticParameterElement, same(cElement));
   }
 
+  test_postfixExpression_local() async {
+    String content = r'''
+main() {
+  int v = 0;
+  v++;
+}
+''';
+    addTestFile(content);
+
+    AnalysisResult result = await driver.getResult(testFile);
+    CompilationUnit unit = result.unit;
+    var typeProvider = unit.element.context.typeProvider;
+
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    VariableElement v;
+    {
+      VariableDeclarationStatement statement = mainStatements[0];
+      v = statement.variables.variables[0].element;
+      expect(v.type, typeProvider.intType);
+    }
+
+    {
+      ExpressionStatement statement = mainStatements[1];
+
+      PostfixExpression postfix = statement.expression;
+      expect(postfix.operator.type, TokenType.PLUS_PLUS);
+      expect(postfix.staticElement.name, '+');
+      expect(postfix.staticType, typeProvider.intType);
+
+      SimpleIdentifier operand = postfix.operand;
+      expect(operand.staticElement, same(v));
+      expect(operand.staticType, typeProvider.intType);
+    }
+  }
+
+  test_postfixExpression_propertyAccess() async {
+    String content = r'''
+main() {
+  new C().f++;
+}
+class C {
+  int f;
+}
+''';
+    addTestFile(content);
+
+    AnalysisResult result = await driver.getResult(testFile);
+    CompilationUnit unit = result.unit;
+    var typeProvider = unit.element.context.typeProvider;
+
+    ClassDeclaration cClassDeclaration = unit.declarations[1];
+    ClassElement cClassElement = cClassDeclaration.element;
+    FieldElement fElement = cClassElement.getField('f');
+
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    {
+      ExpressionStatement statement = mainStatements[0];
+
+      PostfixExpression postfix = statement.expression;
+      expect(postfix.operator.type, TokenType.PLUS_PLUS);
+      expect(postfix.staticElement.name, '+');
+      expect(postfix.staticType, typeProvider.intType);
+
+      PropertyAccess propertyAccess = postfix.operand;
+      expect(propertyAccess.staticType, typeProvider.intType);
+
+      SimpleIdentifier propertyName = propertyAccess.propertyName;
+      expect(propertyName.staticElement, same(fElement.setter));
+      expect(propertyName.staticType, typeProvider.intType);
+    }
+  }
+
+  test_prefixExpression_local() async {
+    String content = r'''
+main() {
+  int v = 0;
+  ++v;
+  ~v;
+}
+''';
+    addTestFile(content);
+
+    AnalysisResult result = await driver.getResult(testFile);
+    CompilationUnit unit = result.unit;
+    var typeProvider = unit.element.context.typeProvider;
+
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    VariableElement v;
+    {
+      VariableDeclarationStatement statement = mainStatements[0];
+      v = statement.variables.variables[0].element;
+      expect(v.type, typeProvider.intType);
+    }
+
+    {
+      ExpressionStatement statement = mainStatements[1];
+
+      PrefixExpression prefix = statement.expression;
+      expect(prefix.operator.type, TokenType.PLUS_PLUS);
+      expect(prefix.staticElement.name, '+');
+      expect(prefix.staticType, typeProvider.intType);
+
+      SimpleIdentifier operand = prefix.operand;
+      expect(operand.staticElement, same(v));
+      expect(operand.staticType, typeProvider.intType);
+    }
+
+    {
+      ExpressionStatement statement = mainStatements[2];
+
+      PrefixExpression prefix = statement.expression;
+      expect(prefix.operator.type, TokenType.TILDE);
+      expect(prefix.staticElement.name, '~');
+      expect(prefix.staticType, typeProvider.intType);
+
+      SimpleIdentifier operand = prefix.operand;
+      expect(operand.staticElement, same(v));
+      expect(operand.staticType, typeProvider.intType);
+    }
+  }
+
+  test_prefixExpression_local_not() async {
+    String content = r'''
+main() {
+  bool v = true;
+  !v;
+}
+''';
+    addTestFile(content);
+
+    AnalysisResult result = await driver.getResult(testFile);
+    CompilationUnit unit = result.unit;
+    var typeProvider = unit.element.context.typeProvider;
+
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    VariableElement v;
+    {
+      VariableDeclarationStatement statement = mainStatements[0];
+      v = statement.variables.variables[0].element;
+      expect(v.type, typeProvider.boolType);
+    }
+
+    {
+      ExpressionStatement statement = mainStatements[1];
+
+      PrefixExpression prefix = statement.expression;
+      expect(prefix.operator.type, TokenType.BANG);
+      expect(prefix.staticElement, isNull);
+      expect(prefix.staticType, typeProvider.boolType);
+
+      SimpleIdentifier operand = prefix.operand;
+      expect(operand.staticElement, same(v));
+      expect(operand.staticType, typeProvider.boolType);
+    }
+  }
+
+  test_prefixExpression_propertyAccess() async {
+    String content = r'''
+main() {
+  ++new C().f;
+  ~new C().f;
+}
+class C {
+  int f;
+}
+''';
+    addTestFile(content);
+
+    AnalysisResult result = await driver.getResult(testFile);
+    CompilationUnit unit = result.unit;
+    var typeProvider = unit.element.context.typeProvider;
+
+    ClassDeclaration cClassDeclaration = unit.declarations[1];
+    ClassElement cClassElement = cClassDeclaration.element;
+    FieldElement fElement = cClassElement.getField('f');
+
+    List<Statement> mainStatements = _getMainStatements(result);
+
+    {
+      ExpressionStatement statement = mainStatements[0];
+
+      PrefixExpression prefix = statement.expression;
+      expect(prefix.operator.type, TokenType.PLUS_PLUS);
+      expect(prefix.staticElement.name, '+');
+      expect(prefix.staticType, typeProvider.intType);
+
+      PropertyAccess propertyAccess = prefix.operand;
+      expect(propertyAccess.staticType, typeProvider.intType);
+
+      SimpleIdentifier propertyName = propertyAccess.propertyName;
+      expect(propertyName.staticElement, same(fElement.setter));
+      expect(propertyName.staticType, typeProvider.intType);
+    }
+
+    {
+      ExpressionStatement statement = mainStatements[1];
+
+      PrefixExpression prefix = statement.expression;
+      expect(prefix.operator.type, TokenType.TILDE);
+      expect(prefix.staticElement.name, '~');
+      expect(prefix.staticType, typeProvider.intType);
+
+      PropertyAccess propertyAccess = prefix.operand;
+      expect(propertyAccess.staticType, typeProvider.intType);
+
+      SimpleIdentifier propertyName = propertyAccess.propertyName;
+      expect(propertyName.staticElement, same(fElement.getter));
+      expect(propertyName.staticType, typeProvider.intType);
+    }
+  }
+
   test_propertyAccess_field() async {
     String content = r'''
 main() {
@@ -1185,6 +1974,302 @@
     }
   }
 
+  test_stringInterpolation() async {
+    String content = r'''
+void main() {
+  var v = 42;
+  '$v$v $v';
+  ' ${v + 1} ';
+}
+''';
+    addTestFile(content);
+
+    AnalysisResult result = await driver.getResult(testFile);
+    expect(result.path, testFile);
+    expect(result.errors, isEmpty);
+
+    var typeProvider = result.unit.element.context.typeProvider;
+
+    FunctionDeclaration main = result.unit.declarations[0];
+    expect(main.element, isNotNull);
+    expect(main.name.staticElement, isNotNull);
+    expect(main.name.staticType.toString(), '() → void');
+
+    BlockFunctionBody body = main.functionExpression.body;
+    NodeList<Statement> statements = body.block.statements;
+
+    // var v = 42;
+    VariableElement vElement;
+    {
+      VariableDeclarationStatement statement = statements[0];
+      vElement = statement.variables.variables[0].name.staticElement;
+    }
+
+    {
+      ExpressionStatement statement = statements[1];
+      StringInterpolation interpolation = statement.expression;
+
+      InterpolationExpression element_1 = interpolation.elements[1];
+      SimpleIdentifier expression_1 = element_1.expression;
+      expect(expression_1.staticElement, same(vElement));
+      expect(expression_1.staticType, typeProvider.intType);
+
+      InterpolationExpression element_3 = interpolation.elements[3];
+      SimpleIdentifier expression_3 = element_3.expression;
+      expect(expression_3.staticElement, same(vElement));
+      expect(expression_3.staticType, typeProvider.intType);
+
+      InterpolationExpression element_5 = interpolation.elements[5];
+      SimpleIdentifier expression_5 = element_5.expression;
+      expect(expression_5.staticElement, same(vElement));
+      expect(expression_5.staticType, typeProvider.intType);
+    }
+
+    {
+      ExpressionStatement statement = statements[2];
+      StringInterpolation interpolation = statement.expression;
+
+      InterpolationExpression element_1 = interpolation.elements[1];
+      BinaryExpression expression = element_1.expression;
+      expect(expression.staticType, typeProvider.intType);
+
+      SimpleIdentifier left = expression.leftOperand;
+      expect(left.staticElement, same(vElement));
+      expect(left.staticType, typeProvider.intType);
+    }
+  }
+
+  test_super() async {
+    String content = r'''
+class A {
+  void method(int p) {}
+  int get getter => 0;
+  void set setter(int p) {}
+  int operator+(int p) => 0;
+}
+class B extends A {
+  void test() {
+    method(1);
+    super.method(2);
+    getter;
+    super.getter;
+    setter = 3;
+    super.setter = 4;
+    this + 5;
+  }
+}
+''';
+    addTestFile(content);
+    AnalysisResult result = await driver.getResult(testFile);
+    var typeProvider = result.unit.element.context.typeProvider;
+
+    ClassDeclaration aNode = result.unit.declarations[0];
+    ClassDeclaration bNode = result.unit.declarations[1];
+
+    MethodElement methodElement = aNode.members[0].element;
+    PropertyAccessorElement getterElement = aNode.members[1].element;
+    PropertyAccessorElement setterElement = aNode.members[2].element;
+    MethodElement operatorElement = aNode.members[3].element;
+
+    MethodDeclaration testNode = bNode.members[0];
+    BlockFunctionBody testBody = testNode.body;
+    List<Statement> testStatements = testBody.block.statements;
+
+    // method(1);
+    {
+      ExpressionStatement statement = testStatements[0];
+      MethodInvocation invocation = statement.expression;
+
+      expect(invocation.target, isNull);
+
+      expect(invocation.methodName.staticElement, same(methodElement));
+    }
+
+    // super.method(2);
+    {
+      ExpressionStatement statement = testStatements[1];
+      MethodInvocation invocation = statement.expression;
+
+      SuperExpression target = invocation.target;
+      expect(target.staticType, bNode.element.type); // raw
+
+      expect(invocation.methodName.staticElement, same(methodElement));
+    }
+
+    // getter;
+    {
+      ExpressionStatement statement = testStatements[2];
+      SimpleIdentifier identifier = statement.expression;
+
+      expect(identifier.staticElement, same(getterElement));
+      expect(identifier.staticType, same(typeProvider.intType));
+    }
+
+    // super.getter;
+    {
+      ExpressionStatement statement = testStatements[3];
+      PropertyAccess propertyAccess = statement.expression;
+      expect(propertyAccess.staticType, same(typeProvider.intType));
+
+      SuperExpression target = propertyAccess.target;
+      expect(target.staticType, bNode.element.type); // raw
+
+      expect(propertyAccess.propertyName.staticElement, same(getterElement));
+      expect(
+          propertyAccess.propertyName.staticType, same(typeProvider.intType));
+    }
+
+    // setter = 3;
+    {
+      ExpressionStatement statement = testStatements[4];
+      AssignmentExpression assignment = statement.expression;
+
+      SimpleIdentifier identifier = assignment.leftHandSide;
+      expect(identifier.staticElement, same(setterElement));
+      expect(identifier.staticType, same(typeProvider.intType));
+    }
+
+    // this.setter = 4;
+    {
+      ExpressionStatement statement = testStatements[5];
+      AssignmentExpression assignment = statement.expression;
+
+      PropertyAccess propertyAccess = assignment.leftHandSide;
+
+      SuperExpression target = propertyAccess.target;
+      expect(target.staticType, bNode.element.type); // raw
+
+      expect(propertyAccess.propertyName.staticElement, same(setterElement));
+      expect(
+          propertyAccess.propertyName.staticType, same(typeProvider.intType));
+    }
+
+    // super + 5;
+    {
+      ExpressionStatement statement = testStatements[6];
+      BinaryExpression binary = statement.expression;
+
+      ThisExpression target = binary.leftOperand;
+      expect(target.staticType, bNode.element.type); // raw
+
+      expect(binary.staticElement, same(operatorElement));
+      expect(binary.staticType, typeProvider.intType);
+    }
+  }
+
+  test_this() async {
+    String content = r'''
+class A {
+  void method(int p) {}
+  int get getter => 0;
+  void set setter(int p) {}
+  int operator+(int p) => 0;
+  void test() {
+    method(1);
+    this.method(2);
+    getter;
+    this.getter;
+    setter = 3;
+    this.setter = 4;
+    this + 5;
+  }
+}
+''';
+    addTestFile(content);
+    AnalysisResult result = await driver.getResult(testFile);
+    var typeProvider = result.unit.element.context.typeProvider;
+
+    ClassDeclaration aNode = result.unit.declarations[0];
+
+    MethodElement methodElement = aNode.members[0].element;
+    PropertyAccessorElement getterElement = aNode.members[1].element;
+    PropertyAccessorElement setterElement = aNode.members[2].element;
+    MethodElement operatorElement = aNode.members[3].element;
+
+    MethodDeclaration testNode = aNode.members[4];
+    BlockFunctionBody testBody = testNode.body;
+    List<Statement> testStatements = testBody.block.statements;
+
+    // method(1);
+    {
+      ExpressionStatement statement = testStatements[0];
+      MethodInvocation invocation = statement.expression;
+
+      expect(invocation.target, isNull);
+
+      expect(invocation.methodName.staticElement, same(methodElement));
+    }
+
+    // this.method(2);
+    {
+      ExpressionStatement statement = testStatements[1];
+      MethodInvocation invocation = statement.expression;
+
+      ThisExpression target = invocation.target;
+      expect(target.staticType, aNode.element.type); // raw
+
+      expect(invocation.methodName.staticElement, same(methodElement));
+    }
+
+    // getter;
+    {
+      ExpressionStatement statement = testStatements[2];
+      SimpleIdentifier identifier = statement.expression;
+
+      expect(identifier.staticElement, same(getterElement));
+      expect(identifier.staticType, typeProvider.intType);
+    }
+
+    // this.getter;
+    {
+      ExpressionStatement statement = testStatements[3];
+      PropertyAccess propertyAccess = statement.expression;
+      expect(propertyAccess.staticType, typeProvider.intType);
+
+      ThisExpression target = propertyAccess.target;
+      expect(target.staticType, aNode.element.type); // raw
+
+      expect(propertyAccess.propertyName.staticElement, same(getterElement));
+      expect(propertyAccess.propertyName.staticType, typeProvider.intType);
+    }
+
+    // setter = 3;
+    {
+      ExpressionStatement statement = testStatements[4];
+      AssignmentExpression assignment = statement.expression;
+
+      SimpleIdentifier identifier = assignment.leftHandSide;
+      expect(identifier.staticElement, same(setterElement));
+      expect(identifier.staticType, typeProvider.intType);
+    }
+
+    // this.setter = 4;
+    {
+      ExpressionStatement statement = testStatements[5];
+      AssignmentExpression assignment = statement.expression;
+
+      PropertyAccess propertyAccess = assignment.leftHandSide;
+
+      ThisExpression target = propertyAccess.target;
+      expect(target.staticType, aNode.element.type); // raw
+
+      expect(propertyAccess.propertyName.staticElement, same(setterElement));
+      expect(propertyAccess.propertyName.staticType, typeProvider.intType);
+    }
+
+    // this + 5;
+    {
+      ExpressionStatement statement = testStatements[6];
+      BinaryExpression binary = statement.expression;
+
+      ThisExpression target = binary.leftOperand;
+      expect(target.staticType, aNode.element.type); // raw
+
+      expect(binary.staticElement, same(operatorElement));
+      expect(binary.staticType, typeProvider.intType);
+    }
+  }
+
   test_top_executables_class() async {
     String content = r'''
 class C {
diff --git a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
index 7d8544f..bda6454 100644
--- a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
@@ -15,7 +15,7 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:convert/convert.dart';
 import 'package:crypto/crypto.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
diff --git a/pkg/analyzer/test/src/fasta/ast_builder_test.dart b/pkg/analyzer/test/src/fasta/ast_builder_test.dart
new file mode 100644
index 0000000..9f0485d
--- /dev/null
+++ b/pkg/analyzer/test/src/fasta/ast_builder_test.dart
@@ -0,0 +1,69 @@
+// 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:analyzer/dart/ast/ast.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../generated/parser_fasta_test.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(AstBuilderTest);
+  });
+}
+
+@reflectiveTest
+class AstBuilderTest extends FastaParserTestCase {
+  void test_constructor_factory_misnamed() {
+    CompilationUnit unit = parseCompilationUnit('''
+class A {
+  factory B() => null;
+}
+''');
+    expect(unit, isNotNull);
+    expect(unit.declarations, hasLength(1));
+    ClassDeclaration declaration = unit.declarations[0];
+    expect(declaration, isNotNull);
+    expect(declaration.members, hasLength(1));
+    ConstructorDeclaration member = declaration.members[0];
+    expect(member, isNotNull);
+    expect(member.factoryKeyword, isNotNull);
+    expect(member.name, isNull);
+    expect(member.returnType.name, 'B');
+  }
+
+  void test_constructor_wrongName() {
+    CompilationUnit unit = parseCompilationUnit('''
+class A {
+  B() : super();
+}
+''');
+    expect(unit, isNotNull);
+    expect(unit.declarations, hasLength(1));
+    ClassDeclaration declaration = unit.declarations[0];
+    expect(declaration, isNotNull);
+    expect(declaration.members, hasLength(1));
+    ConstructorDeclaration member = declaration.members[0];
+    expect(member, isNotNull);
+    expect(member.initializers, hasLength(1));
+  }
+
+  void test_getter_sameNameAsClass() {
+    CompilationUnit unit = parseCompilationUnit('''
+class A {
+  get A => 0;
+}
+''');
+    expect(unit, isNotNull);
+    expect(unit.declarations, hasLength(1));
+    ClassDeclaration declaration = unit.declarations[0];
+    expect(declaration, isNotNull);
+    expect(declaration.members, hasLength(1));
+    MethodDeclaration member = declaration.members[0];
+    expect(member, isNotNull);
+    expect(member.isGetter, isTrue);
+    expect(member.name.name, 'A');
+  }
+}
diff --git a/pkg/analyzer/test/src/fasta/recovery/code_order_test.dart b/pkg/analyzer/test/src/fasta/recovery/code_order_test.dart
index 2c42a31..b53098b 100644
--- a/pkg/analyzer/test/src/fasta/recovery/code_order_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/code_order_test.dart
@@ -13,6 +13,7 @@
     defineReflectiveTests(ClassDeclarationTest);
     defineReflectiveTests(CompilationUnitMemberTest);
     defineReflectiveTests(ImportDirectiveTest);
+    defineReflectiveTests(MisplacedMetadataTest);
     defineReflectiveTests(TryStatementTest);
   });
 }
@@ -311,6 +312,34 @@
 }
 
 /**
+ * Test how well the parser recovers when metadata appears in invalid places.
+ */
+@reflectiveTest
+class MisplacedMetadataTest extends AbstractRecoveryTest {
+  @failingTest
+  void test_field_afterType() {
+    // This test fails because `findMemberName` doesn't recognize that the `@`
+    // isn't a valid token in the stream leading up to a member name. That
+    // causes `parseMethod` to attempt to parse from the `x` as a function body.
+    testRecovery('''
+class A {
+  const A([x]);
+}
+class B {
+  dynamic @A(const A()) x;
+}
+''', [ParserErrorCode.UNEXPECTED_TOKEN], '''
+class A {
+  const A([x]);
+}
+class B {
+  @A(const A()) dynamic x;
+}
+''');
+  }
+}
+
+/**
  * Test how well the parser recovers when the clauses in a try statement are
  * out of order.
  */
diff --git a/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart b/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
index 06a8edb..6f29b7a 100644
--- a/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
@@ -11,6 +11,7 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(MiscellaneousTest);
     defineReflectiveTests(ModifiersTest);
+    defineReflectiveTests(PunctuationTest);
   });
 }
 
@@ -36,6 +37,22 @@
 int get g => 0;
 ''');
   }
+
+  void test_multipleRedirectingInitializers() {
+    testRecovery('''
+class A {
+  A() : this.a(), this.b();
+  A.a() {}
+  A.b() {}
+}
+''', [], '''
+class A {
+  A() : this.a(), this.b();
+  A.a() {}
+  A.b() {}
+}
+''');
+  }
 }
 
 /**
@@ -54,3 +71,76 @@
 ''');
   }
 }
+
+/**
+ * Test how well the parser recovers when there is extra punctuation.
+ */
+@reflectiveTest
+class PunctuationTest extends AbstractRecoveryTest {
+  void test_extraSemicolon_afterLastClassMember() {
+    testRecovery('''
+class C {
+  foo() {};
+}
+''', [ParserErrorCode.EXPECTED_CLASS_MEMBER], '''
+class C {
+  foo() {}
+}
+''');
+  }
+
+  void test_extraSemicolon_afterLastTopLevelMember() {
+    testRecovery('''
+foo() {};
+''', [ParserErrorCode.EXPECTED_EXECUTABLE], '''
+foo() {}
+''');
+  }
+
+  void test_extraSemicolon_beforeFirstClassMember() {
+    testRecovery('''
+class C {
+  ;foo() {}
+}
+''', [ParserErrorCode.EXPECTED_CLASS_MEMBER], '''
+class C {
+  foo() {}
+}
+''');
+  }
+
+  @failingTest
+  void test_extraSemicolon_beforeFirstTopLevelMember() {
+    // This test fails because the beginning token for the invalid unit is the
+    // semicolon, despite the fact that it was skipped.
+    testRecovery('''
+;foo() {}
+''', [ParserErrorCode.EXPECTED_EXECUTABLE], '''
+foo() {}
+''');
+  }
+
+  void test_extraSemicolon_betweenClassMembers() {
+    testRecovery('''
+class C {
+  foo() {};
+  bar() {}
+}
+''', [ParserErrorCode.EXPECTED_CLASS_MEMBER], '''
+class C {
+  foo() {}
+  bar() {}
+}
+''');
+  }
+
+  void test_extraSemicolon_betweenTopLevelMembers() {
+    testRecovery('''
+foo() {};
+bar() {}
+''', [ParserErrorCode.EXPECTED_EXECUTABLE], '''
+foo() {}
+bar() {}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/instance_creation_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/instance_creation_test.dart
new file mode 100644
index 0000000..0cb2e50
--- /dev/null
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/instance_creation_test.dart
@@ -0,0 +1,69 @@
+// 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:analyzer/src/dart/error/syntactic_errors.dart';
+
+import 'partial_code_support.dart';
+
+main() {
+  new InstanceCreationTest().buildAll();
+}
+
+class InstanceCreationTest extends PartialCodeTest {
+  buildAll() {
+    buildTests(
+        'instance_creation_expression',
+        <TestDescriptor>[]
+          ..addAll(forKeyword('const'))
+          ..addAll(forKeyword('new')),
+        <TestSuffix>[],
+        head: 'f() => ',
+        tail: ';');
+  }
+
+  List<TestDescriptor> forKeyword(String keyword) {
+    return <TestDescriptor>[
+      new TestDescriptor(
+          '${keyword}_keyword',
+          '$keyword',
+          [
+            ParserErrorCode.MISSING_IDENTIFIER,
+            ParserErrorCode.EXPECTED_TOKEN,
+            ParserErrorCode.EXPECTED_TOKEN,
+          ],
+          "$keyword _s_()",
+          allFailing: true),
+      new TestDescriptor(
+          '${keyword}_name_unnamed',
+          '$keyword A',
+          [
+            ParserErrorCode.UNEXPECTED_TOKEN,
+          ],
+          "$keyword A()"),
+      new TestDescriptor(
+          '${keyword}_name_named',
+          '$keyword A.b',
+          [
+            ParserErrorCode.UNEXPECTED_TOKEN,
+          ],
+          "$keyword A.b()"),
+      new TestDescriptor(
+          '${keyword}_leftParen_unnamed',
+          '$keyword A(',
+          [
+            ParserErrorCode.EXPECTED_TOKEN,
+          ],
+          "$keyword A()",
+          allFailing: true),
+      new TestDescriptor(
+          '${keyword}_leftParen_named',
+          '$keyword A.b(',
+          [
+            ParserErrorCode.EXPECTED_TOKEN,
+          ],
+          "$keyword A.b()",
+          allFailing: true),
+    ];
+  }
+}
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/test_all.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/test_all.dart
index bdde0a8..4344138 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/test_all.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/test_all.dart
@@ -11,6 +11,7 @@
 import 'export_directive_test.dart' as export_directive;
 import 'if_statement_test.dart' as if_statement;
 import 'import_directive_test.dart' as import_directive;
+import 'instance_creation_test.dart' as instance_creation;
 import 'library_directive_test.dart' as library_directive;
 import 'local_variable_test.dart' as local_variable;
 import 'part_directive_test.dart' as part_directive;
@@ -29,6 +30,7 @@
     export_directive.main();
     if_statement.main();
     import_directive.main();
+    instance_creation.main();
     library_directive.main();
     local_variable.main();
     part_directive.main();
diff --git a/pkg/analyzer/test/src/fasta/resolution_applier_test.dart b/pkg/analyzer/test/src/fasta/resolution_applier_test.dart
index 37dac69..47da543 100644
--- a/pkg/analyzer/test/src/fasta/resolution_applier_test.dart
+++ b/pkg/analyzer/test/src/fasta/resolution_applier_test.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/src/fasta/resolution_applier.dart';
 import 'package:analyzer/src/generated/testing/test_type_provider.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
+import 'package:kernel/kernel.dart' as kernel;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -41,10 +42,11 @@
     expect(unit.declarations, hasLength(1));
     FunctionDeclaration function = unit.declarations[0];
     FunctionBody body = function.functionExpression.body;
-    ResolutionApplier applier =
-        new ResolutionApplier(declaredElements, referencedElements, types);
-    applier.enclosingExecutable =
-        new FunctionElementImpl(function.name.name, function.name.offset);
+    ResolutionApplier applier = new ResolutionApplier(
+        new _TestTypeContext(),
+        declaredElements,
+        referencedElements,
+        types.map((type) => new _KernelWrapperOfType(type)).toList());
 
     body.accept(applier);
     applier.checkDone();
@@ -244,7 +246,6 @@
     ]);
   }
 
-  @failingTest
   void test_methodInvocation_method() {
     applyTypes(r'''
 f(String s) {
@@ -306,3 +307,35 @@
     return typeParameter;
   }
 }
+
+/// Kernel wrapper around the Analyzer [type].
+class _KernelWrapperOfType implements kernel.DartType {
+  final DartType type;
+
+  _KernelWrapperOfType(this.type);
+
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+/// Test implementation of [TypeContext].
+class _TestTypeContext implements TypeContext {
+  @override
+  ClassElement get enclosingClassElement => null;
+
+  @override
+  DartType get typeType => null;
+
+  @override
+  void encloseVariable(ElementImpl element) {}
+
+  @override
+  void enterLocalFunction(FunctionElementImpl element) {}
+
+  @override
+  void exitLocalFunction(FunctionElementImpl element) {}
+
+  @override
+  DartType translateType(kernel.DartType kernelType) {
+    return (kernelType as _KernelWrapperOfType).type;
+  }
+}
diff --git a/pkg/analyzer/test/src/fasta/test_all.dart b/pkg/analyzer/test/src/fasta/test_all.dart
index c421363..036a911 100644
--- a/pkg/analyzer/test/src/fasta/test_all.dart
+++ b/pkg/analyzer/test/src/fasta/test_all.dart
@@ -4,12 +4,14 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import 'ast_builder_test.dart' as ast_builder;
 import 'message_coverage_test.dart' as message_coverage;
 import 'recovery/test_all.dart' as recovery;
 import 'resolution_applier_test.dart' as resolution_applier;
 
 main() {
   defineReflectiveSuite(() {
+    ast_builder.main();
     message_coverage.main();
     recovery.main();
     resolution_applier.main();
diff --git a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
index 533777a..840e620 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
@@ -14,9 +14,9 @@
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/kernel/resynthesize.dart';
-import 'package:front_end/byte_store.dart';
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/file_system.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/file_system.dart';
 import 'package:front_end/src/base/libraries_specification.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:front_end/src/base/processed_options.dart';
diff --git a/pkg/analyzer/test/src/task/strong/front_end_inference_test.dart b/pkg/analyzer/test/src/task/strong/front_end_inference_test.dart
deleted file mode 100644
index eb4772f..0000000
--- a/pkg/analyzer/test/src/task/strong/front_end_inference_test.dart
+++ /dev/null
@@ -1,351 +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:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/dart/ast/visitor.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/src/generated/resolver.dart';
-import 'package:front_end/src/base/instrumentation.dart' as fasta;
-import 'package:front_end/src/fasta/compiler_context.dart' as fasta;
-import 'package:front_end/src/fasta/testing/validating_instrumentation.dart'
-    as fasta;
-import 'package:kernel/kernel.dart' as fasta;
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'front_end_test_common.dart';
-
-main() {
-  // Use a group() wrapper to specify the timeout.
-  group('front_end_inference_test', () {
-    defineReflectiveSuite(() {
-      defineReflectiveTests(RunFrontEndInferenceTest);
-    });
-  }, timeout: new Timeout(const Duration(seconds: 120)));
-}
-
-@reflectiveTest
-class RunFrontEndInferenceTest extends RunFrontEndTest {
-  @override
-  get testSubdir => 'inference';
-
-  @override
-  void visitUnit(TypeProvider typeProvider, CompilationUnit unit,
-      fasta.ValidatingInstrumentation validation, Uri uri) {
-    unit.accept(new _InstrumentationVisitor(validation, uri));
-  }
-}
-
-/**
- * Visitor for ASTs that reports instrumentation for types.
- */
-class _InstrumentationVisitor extends RecursiveAstVisitor<Null> {
-  final fasta.Instrumentation _instrumentation;
-  final Uri uri;
-  ElementNamer elementNamer = new ElementNamer(null);
-
-  _InstrumentationVisitor(this._instrumentation, this.uri);
-
-  visitBinaryExpression(BinaryExpression node) {
-    super.visitBinaryExpression(node);
-    _recordTarget(node.operator.charOffset, node.staticElement);
-  }
-
-  @override
-  visitConstructorDeclaration(ConstructorDeclaration node) {
-    ElementNamer oldElementNamer = elementNamer;
-    if (node.factoryKeyword != null) {
-      // Factory constructors are represented in kernel as static methods, so
-      // their type parameters get replicated, e.g.:
-      //     class C<T> {
-      //       factory C.ctor() {
-      //         T t; // Refers to C::T
-      //         ...
-      //       }
-      //     }
-      // gets converted to:
-      //     class C<T> {
-      //       static C<T> C.ctor<T>() {
-      //         T t; // Refers to C::ctor::T
-      //         ...
-      //       }
-      //     }
-      // So to match kernel behavior, we have to arrange for this renaming to
-      // happen during output.
-      elementNamer = new ElementNamer(node.element);
-    }
-    super.visitConstructorDeclaration(node);
-    elementNamer = oldElementNamer;
-  }
-
-  @override
-  visitDeclaredIdentifier(DeclaredIdentifier node) {
-    super.visitDeclaredIdentifier(node);
-    if (node.type == null) {
-      _recordType(node.identifier.offset, node.element.type);
-    }
-  }
-
-  @override
-  visitFunctionDeclaration(FunctionDeclaration node) {
-    super.visitFunctionDeclaration(node);
-
-    bool isSetter = node.element.kind == ElementKind.SETTER;
-    bool isLocalFunction = node.element is LocalElement &&
-        node.element.enclosingElement is! CompilationUnitElement;
-
-    if (isSetter || isLocalFunction) {
-      if (node.returnType == null) {
-        _instrumentation.record(
-            uri,
-            node.name.offset,
-            isSetter ? 'topType' : 'returnType',
-            new InstrumentationValueForType(
-                node.element.returnType, elementNamer));
-      }
-      var parameters = node.functionExpression.parameters;
-      for (var parameter in parameters.parameters) {
-        // Note: it's tempting to check `parameter.type == null`, but that
-        // doesn't work because of function-typed formal parameter syntax.
-        if (parameter.element.hasImplicitType) {
-          _recordType(parameter.identifier.offset, parameter.element.type);
-        }
-      }
-    }
-  }
-
-  visitFunctionExpression(FunctionExpression node) {
-    super.visitFunctionExpression(node);
-    if (node.parent is! FunctionDeclaration) {
-      DartType type = node.staticType;
-      if (type is FunctionType) {
-        _instrumentation.record(uri, node.parameters.offset, 'returnType',
-            new InstrumentationValueForType(type.returnType, elementNamer));
-        List<FormalParameter> parameters = node.parameters.parameters;
-        for (int i = 0; i < parameters.length; i++) {
-          FormalParameter parameter = parameters[i];
-          NormalFormalParameter normalParameter =
-              parameter is DefaultFormalParameter
-                  ? parameter.parameter
-                  : parameter;
-          if (normalParameter is SimpleFormalParameter &&
-              normalParameter.type == null) {
-            _recordType(parameter.offset, type.parameters[i].type);
-          }
-        }
-      }
-    }
-  }
-
-  @override
-  visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
-    super.visitFunctionExpressionInvocation(node);
-    var receiverType = node.function.staticType;
-    if (receiverType is InterfaceType) {
-      // This is a hack since analyzer doesn't record .call targets
-      var target = receiverType.element.lookUpMethod('call', null) ??
-          receiverType.element.lookUpGetter('call', null);
-      if (target != null) {
-        _recordTarget(node.argumentList.offset, target);
-      }
-    }
-    if (node.typeArguments == null) {
-      var inferredTypeArguments = _getInferredFunctionTypeArguments(
-              node.function.staticType,
-              node.staticInvokeType,
-              node.typeArguments)
-          .toList();
-      if (inferredTypeArguments.isNotEmpty) {
-        _recordTypeArguments(node.argumentList.offset, inferredTypeArguments);
-      }
-    }
-  }
-
-  visitIndexExpression(IndexExpression node) {
-    super.visitIndexExpression(node);
-    _recordTarget(node.leftBracket.charOffset, node.staticElement);
-  }
-
-  visitInstanceCreationExpression(InstanceCreationExpression node) {
-    super.visitInstanceCreationExpression(node);
-    DartType type = node.staticType;
-    if (type is InterfaceType) {
-      if (type.typeParameters.isNotEmpty &&
-          node.constructorName.type.typeArguments == null) {
-        _recordTypeArguments(node.constructorName.offset, type.typeArguments);
-      }
-    }
-  }
-
-  visitListLiteral(ListLiteral node) {
-    super.visitListLiteral(node);
-    if (node.typeArguments == null) {
-      DartType type = node.staticType;
-      if (type is InterfaceType) {
-        _recordTypeArguments(node.offset, type.typeArguments);
-      }
-    }
-  }
-
-  visitMapLiteral(MapLiteral node) {
-    super.visitMapLiteral(node);
-    if (node.typeArguments == null) {
-      DartType type = node.staticType;
-      if (type is InterfaceType) {
-        _recordTypeArguments(node.offset, type.typeArguments);
-      }
-    }
-  }
-
-  @override
-  visitMethodDeclaration(MethodDeclaration node) {
-    super.visitMethodDeclaration(node);
-    if (node.returnType == null) {
-      _recordTopType(node.name.offset, node.element.returnType);
-    }
-    if (node.element.enclosingElement is ClassElement && !node.isStatic) {
-      if (node.parameters != null) {
-        for (var parameter in node.parameters.parameters) {
-          // Note: it's tempting to check `parameter.type == null`, but that
-          // doesn't work because of function-typed formal parameter syntax.
-          if (parameter.element.hasImplicitType) {
-            _recordTopType(parameter.identifier.offset, parameter.element.type);
-          }
-        }
-      }
-    }
-  }
-
-  visitMethodInvocation(MethodInvocation node) {
-    super.visitMethodInvocation(node);
-    if (node.typeArguments == null) {
-      var inferredTypeArguments = _getInferredFunctionTypeArguments(
-              node.function.staticType,
-              node.staticInvokeType,
-              node.typeArguments)
-          .toList();
-      if (inferredTypeArguments.isNotEmpty) {
-        _recordTypeArguments(node.methodName.offset, inferredTypeArguments);
-      }
-    }
-    var methodElement = node.methodName.staticElement;
-    if (node.target is SuperExpression &&
-        methodElement is PropertyAccessorElement) {
-      // This is a hack since analyzer doesn't record .call targets
-      var getterClass = methodElement.returnType.element;
-      if (getterClass is ClassElement) {
-        var target = getterClass.lookUpMethod('call', null) ??
-            getterClass.lookUpGetter('call', null);
-        if (target != null) {
-          _recordTarget(node.argumentList.offset, target);
-        }
-      }
-    }
-  }
-
-  visitPrefixExpression(PrefixExpression node) {
-    super.visitPrefixExpression(node);
-    if (node.operator.type != TokenType.PLUS_PLUS &&
-        node.operator.type != TokenType.MINUS_MINUS) {
-      _recordTarget(node.operator.charOffset, node.staticElement);
-    }
-  }
-
-  visitSimpleIdentifier(SimpleIdentifier node) {
-    super.visitSimpleIdentifier(node);
-    Element element = node.staticElement;
-    if (_elementRequiresMethodDispatch(element) &&
-        !node.inDeclarationContext() &&
-        (node.inGetterContext() || node.inSetterContext())) {
-      _recordTarget(node.offset, element);
-    }
-    void recordPromotions(DartType elementType) {
-      if (node.inGetterContext() && !node.inDeclarationContext()) {
-        int offset = node.offset;
-        DartType type = node.staticType;
-        if (!identical(type, elementType)) {
-          _instrumentation.record(uri, offset, 'promotedType',
-              new InstrumentationValueForType(type, elementNamer));
-        }
-      }
-    }
-
-    if (element is LocalVariableElement) {
-      recordPromotions(element.type);
-    } else if (element is ParameterElement) {
-      recordPromotions(element.type);
-    }
-  }
-
-  visitVariableDeclarationList(VariableDeclarationList node) {
-    super.visitVariableDeclarationList(node);
-    if (node.type == null) {
-      for (VariableDeclaration variable in node.variables) {
-        VariableElement element = variable.element;
-        if (element is LocalVariableElement) {
-          _recordType(variable.name.offset, element.type);
-        } else if (!element.isStatic || element.initializer != null) {
-          _recordTopType(variable.name.offset, element.type);
-        }
-      }
-    }
-  }
-
-  bool _elementRequiresMethodDispatch(Element element) {
-    if (element is ConstructorElement) {
-      return false;
-    } else if (element is ClassMemberElement) {
-      return !element.isStatic;
-    } else if (element is ExecutableElement &&
-        element.enclosingElement is ClassElement) {
-      return !element.isStatic;
-    } else {
-      return false;
-    }
-  }
-
-  /// Based on DDC code generator's `_emitFunctionTypeArguments`
-  Iterable<DartType> _getInferredFunctionTypeArguments(
-      DartType g, DartType f, TypeArgumentList typeArgs) {
-    if (g is FunctionType &&
-        g.typeFormals.isNotEmpty &&
-        f is FunctionType &&
-        f.typeFormals.isEmpty) {
-      return _recoverTypeArguments(g, f);
-    } else {
-      return const [];
-    }
-  }
-
-  void _recordTarget(int offset, Element element) {
-    if (element is ExecutableElement) {
-      _instrumentation.record(uri, offset, 'target',
-          new InstrumentationValueForExecutableElement(element, elementNamer));
-    }
-  }
-
-  void _recordTopType(int offset, DartType type) {
-    _instrumentation.record(uri, offset, 'topType',
-        new InstrumentationValueForType(type, elementNamer));
-  }
-
-  void _recordType(int offset, DartType type) {
-    _instrumentation.record(uri, offset, 'type',
-        new InstrumentationValueForType(type, elementNamer));
-  }
-
-  void _recordTypeArguments(int offset, List<DartType> typeArguments) {
-    _instrumentation.record(uri, offset, 'typeArgs',
-        new InstrumentationValueForTypeArgs(typeArguments, elementNamer));
-  }
-
-  /// Based on DDC code generator's `_recoverTypeArguments`
-  Iterable<DartType> _recoverTypeArguments(FunctionType g, FunctionType f) {
-    assert(g.typeFormals.isNotEmpty && f.typeFormals.isEmpty);
-    assert(g.typeFormals.length <= f.typeArguments.length);
-    return f.typeArguments.skip(f.typeArguments.length - g.typeFormals.length);
-  }
-}
diff --git a/pkg/analyzer/test/src/task/strong/front_end_test_common.dart b/pkg/analyzer/test/src/task/strong/front_end_test_common.dart
index 94bedc7..7bb563b 100644
--- a/pkg/analyzer/test/src/task/strong/front_end_test_common.dart
+++ b/pkg/analyzer/test/src/task/strong/front_end_test_common.dart
@@ -22,7 +22,6 @@
 import 'package:front_end/src/fasta/compiler_context.dart' as fasta;
 import 'package:front_end/src/fasta/testing/validating_instrumentation.dart'
     as fasta;
-import 'package:front_end/src/fasta/util/relativize.dart' show relativizeUri;
 import 'package:front_end/src/testing/package_root.dart' as package_root;
 import 'package:kernel/kernel.dart' as fasta;
 import 'package:path/path.dart' as pathos;
@@ -268,7 +267,7 @@
       Uri uri = provider.pathContext.toUri(path);
 
       List<int> lineStarts = new LineInfo.fromContent(code).lineStarts;
-      fasta.CompilerContext.current.uriToSource[relativizeUri(uri).toString()] =
+      fasta.CompilerContext.current.uriToSource[uri] =
           new fasta.Source(lineStarts, UTF8.encode(code));
 
       var validation = new fasta.ValidatingInstrumentation();
diff --git a/pkg/analyzer/test/src/task/strong/strong_test_helper.dart b/pkg/analyzer/test/src/task/strong/strong_test_helper.dart
index 0d861df7..b27ef2e 100644
--- a/pkg/analyzer/test/src/task/strong/strong_test_helper.dart
+++ b/pkg/analyzer/test/src/task/strong/strong_test_helper.dart
@@ -23,7 +23,7 @@
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:source_span/source_span.dart';
 import 'package:test/test.dart';
diff --git a/pkg/analyzer/test/src/task/strong/test_all.dart b/pkg/analyzer/test/src/task/strong/test_all.dart
index f9f8831..3798be4 100644
--- a/pkg/analyzer/test/src/task/strong/test_all.dart
+++ b/pkg/analyzer/test/src/task/strong/test_all.dart
@@ -5,7 +5,6 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'checker_test.dart' as checker_test;
-import 'front_end_inference_test.dart' as front_end_inference_test;
 import 'front_end_runtime_check_test.dart' as front_end_runtime_check_test;
 import 'inferred_type_test.dart' as inferred_type_test;
 import 'non_null_checker_test.dart' as non_null_checker_test;
@@ -13,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     checker_test.main();
-    front_end_inference_test.main();
     front_end_runtime_check_test.main();
     inferred_type_test.main();
     non_null_checker_test.main();
diff --git a/pkg/analyzer/tool/summary/mini_ast.dart b/pkg/analyzer/tool/summary/mini_ast.dart
index 9155d58..5a966ec 100644
--- a/pkg/analyzer/tool/summary/mini_ast.dart
+++ b/pkg/analyzer/tool/summary/mini_ast.dart
@@ -161,6 +161,16 @@
   }
 
   @override
+  void addWarning(Message message, int charOffset, int length) {
+    // Ignore warnings.
+  }
+
+  @override
+  void addNit(Message message, int charOffset) {
+    // Ignore warnings.
+  }
+
+  @override
   void beginMetadata(Token token) {
     inMetadata = true;
   }
diff --git a/pkg/analyzer/tool/task_dependency_graph/generate.dart b/pkg/analyzer/tool/task_dependency_graph/generate.dart
index 27a9b08a..dbb7b1d 100644
--- a/pkg/analyzer/tool/task_dependency_graph/generate.dart
+++ b/pkg/analyzer/tool/task_dependency_graph/generate.dart
@@ -37,7 +37,7 @@
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/source_io.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:front_end/src/codegen/tools.dart';
 import 'package:front_end/src/testing/package_root.dart' as package_root;
diff --git a/pkg/analyzer_cli/lib/src/build_mode.dart b/pkg/analyzer_cli/lib/src/build_mode.dart
index 9dd40fc..b5bfbcd 100644
--- a/pkg/analyzer_cli/lib/src/build_mode.dart
+++ b/pkg/analyzer_cli/lib/src/build_mode.dart
@@ -31,7 +31,7 @@
 import 'package:bazel_worker/bazel_worker.dart';
 import 'package:collection/collection.dart';
 import 'package:convert/convert.dart';
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:front_end/src/byte_store/cache.dart';
 
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index cace64a..0f54ab7 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -39,7 +39,7 @@
 import 'package:analyzer_cli/src/options.dart';
 import 'package:analyzer_cli/src/perf_report.dart';
 import 'package:analyzer_cli/starter.dart' show CommandLineStarter;
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:linter/src/rules.dart' as linter;
 import 'package:meta/meta.dart';
diff --git a/pkg/compiler/lib/src/io/kernel_source_information.dart b/pkg/compiler/lib/src/io/kernel_source_information.dart
index 12ff3d5..ac8d64d 100644
--- a/pkg/compiler/lib/src/io/kernel_source_information.dart
+++ b/pkg/compiler/lib/src/io/kernel_source_information.dart
@@ -244,7 +244,14 @@
   }
 
   @override
-  SourceInformation buildBinary(ir.Node node) => null;
+  SourceInformation buildBinary(ir.Node node) {
+    return _buildTreeNode(node);
+  }
+
+  @override
+  SourceInformation buildUnary(ir.Node node) {
+    return _buildTreeNode(node);
+  }
 
   @override
   SourceInformation buildIndexSet(ir.Node node) => null;
@@ -400,6 +407,6 @@
   final Uri sourceUri;
 
   KernelSourceLocation(ir.Location location, this.offset, this.sourceName)
-      : sourceUri = Uri.base.resolve(location.file),
+      : sourceUri = location.file,
         super.fromLocation(location);
 }
diff --git a/pkg/compiler/lib/src/io/multi_information.dart b/pkg/compiler/lib/src/io/multi_information.dart
index 44219fb..821fd71 100644
--- a/pkg/compiler/lib/src/io/multi_information.dart
+++ b/pkg/compiler/lib/src/io/multi_information.dart
@@ -127,6 +127,12 @@
   }
 
   @override
+  SourceInformation buildUnary(T node) {
+    return new MultiSourceInformation(
+        builders.map((b) => b.buildUnary(node)).toList());
+  }
+
+  @override
   SourceInformation buildIndexSet(T node) {
     return new MultiSourceInformation(
         builders.map((b) => b.buildIndexSet(node)).toList());
diff --git a/pkg/compiler/lib/src/io/position_information.dart b/pkg/compiler/lib/src/io/position_information.dart
index 85107bf..9630474 100644
--- a/pkg/compiler/lib/src/io/position_information.dart
+++ b/pkg/compiler/lib/src/io/position_information.dart
@@ -331,6 +331,9 @@
   SourceInformation buildBinary(Node node) => buildBegin(node);
 
   @override
+  SourceInformation buildUnary(Node node) => buildBegin(node);
+
+  @override
   SourceInformation buildTry(Node node) => buildBegin(node);
 
   @override
diff --git a/pkg/compiler/lib/src/io/source_information.dart b/pkg/compiler/lib/src/io/source_information.dart
index fc07f14..011c6b1 100644
--- a/pkg/compiler/lib/src/io/source_information.dart
+++ b/pkg/compiler/lib/src/io/source_information.dart
@@ -149,6 +149,9 @@
   /// Generate [SourceInformation] for the binary operation in [node].
   SourceInformation buildBinary(T node) => null;
 
+  /// Generate [SourceInformation] for the unary operation in [node].
+  SourceInformation buildUnary(T node) => null;
+
   /// Generate [SourceInformation] for the try statement in [node].
   SourceInformation buildTry(T node) => null;
 
diff --git a/pkg/compiler/lib/src/io/start_end_information.dart b/pkg/compiler/lib/src/io/start_end_information.dart
index 11759ad..d67d6a2 100644
--- a/pkg/compiler/lib/src/io/start_end_information.dart
+++ b/pkg/compiler/lib/src/io/start_end_information.dart
@@ -15,7 +15,7 @@
     show MemberElement, ResolvedAst, ResolvedAstKind;
 import '../js/js.dart' as js;
 import '../js/js_source_mapping.dart';
-import '../tree/tree.dart' show Node;
+import '../tree/tree.dart' show Node, Send;
 import 'source_file.dart';
 import 'source_information.dart';
 
@@ -252,6 +252,13 @@
   }
 
   @override
+  SourceInformation buildAs(Node node) {
+    // 'as' is a Send with Operator 'as' for the selector.
+    if (node is Send) return buildGeneric(node.selector ?? node);
+    return buildGeneric(node);
+  }
+
+  @override
   SourceInformation buildIf(Node node) => buildGeneric(node);
 
   @override
diff --git a/pkg/compiler/lib/src/js_model/locals.dart b/pkg/compiler/lib/src/js_model/locals.dart
index 9ea67ce..f0bd765 100644
--- a/pkg/compiler/lib/src/js_model/locals.dart
+++ b/pkg/compiler/lib/src/js_model/locals.dart
@@ -43,15 +43,13 @@
 }
 
 class KernelToLocalsMapImpl implements KernelToLocalsMap {
-  final List<MemberEntity> _members = <MemberEntity>[];
+  final MemberEntity currentMember;
   final EntityDataMap<JLocal, LocalData> _locals =
       new EntityDataMap<JLocal, LocalData>();
   Map<ir.VariableDeclaration, JLocal> _map = <ir.VariableDeclaration, JLocal>{};
   Map<ir.TreeNode, JJumpTarget> _jumpTargetMap;
   Set<ir.BreakStatement> _breaksAsContinue;
 
-  MemberEntity get currentMember => _members.last;
-
   // TODO(johnniwinther): Compute this eagerly from the root of the member.
   void _ensureJumpMap(ir.TreeNode node) {
     if (_jumpTargetMap == null) {
@@ -68,20 +66,7 @@
     }
   }
 
-  KernelToLocalsMapImpl(MemberEntity member) {
-    _members.add(member);
-  }
-
-  @override
-  void enterInlinedMember(MemberEntity member) {
-    _members.add(member);
-  }
-
-  @override
-  void leaveInlinedMember(MemberEntity member) {
-    assert(member == currentMember);
-    _members.removeLast();
-  }
+  KernelToLocalsMapImpl(this.currentMember);
 
   @override
   JumpTarget getJumpTargetForBreak(ir.BreakStatement node) {
diff --git a/pkg/compiler/lib/src/kernel/element_map.dart b/pkg/compiler/lib/src/kernel/element_map.dart
index cb67040..9360a77 100644
--- a/pkg/compiler/lib/src/kernel/element_map.dart
+++ b/pkg/compiler/lib/src/kernel/element_map.dart
@@ -413,14 +413,6 @@
   /// The member currently being built.
   MemberEntity get currentMember;
 
-  // TODO(johnniwinther): Make these return the [KernelToLocalsMap] to use from
-  // now on.
-  /// Call to notify that [member] is currently being inlined.
-  void enterInlinedMember(covariant MemberEntity member);
-
-  /// Call to notify that [member] is no longer being inlined.
-  void leaveInlinedMember(covariant MemberEntity member);
-
   /// Returns the [Local] for [node].
   Local getLocalVariable(ir.VariableDeclaration node);
 
@@ -496,7 +488,7 @@
   while (node != null) {
     if (node.fileOffset != ir.TreeNode.noOffset) {
       offset = node.fileOffset;
-      uri = Uri.parse(node.location.file);
+      uri = node.location.file;
       break;
     }
     node = node.parent;
@@ -506,3 +498,55 @@
   }
   return null;
 }
+
+/// Returns the [ir.FunctionNode] that defines [member] or `null` if [member]
+/// is not a constructor, method or local function.
+ir.FunctionNode getFunctionNode(
+    KernelToElementMapForBuilding elementMap, MemberEntity member) {
+  MemberDefinition definition = elementMap.getMemberDefinition(member);
+  switch (definition.kind) {
+    case MemberKind.regular:
+      ir.Node node = definition.node;
+      if (node is ir.Procedure) {
+        return node.function;
+      }
+      break;
+    case MemberKind.constructor:
+    case MemberKind.constructorBody:
+      ir.Node node = definition.node;
+      if (node is ir.Procedure) {
+        return node.function;
+      } else if (node is ir.Constructor) {
+        return node.function;
+      }
+      break;
+    case MemberKind.closureCall:
+      ir.Node node = definition.node;
+      if (node is ir.FunctionDeclaration) {
+        return node.function;
+      } else if (node is ir.FunctionExpression) {
+        return node.function;
+      }
+      break;
+    default:
+  }
+  return null;
+}
+
+/// Returns the `AsyncMarker` corresponding to `node.asyncMarker`.
+AsyncMarker getAsyncMarker(ir.FunctionNode node) {
+  switch (node.asyncMarker) {
+    case ir.AsyncMarker.Async:
+      return AsyncMarker.ASYNC;
+    case ir.AsyncMarker.AsyncStar:
+      return AsyncMarker.ASYNC_STAR;
+    case ir.AsyncMarker.Sync:
+      return AsyncMarker.SYNC;
+    case ir.AsyncMarker.SyncStar:
+      return AsyncMarker.SYNC_STAR;
+    case ir.AsyncMarker.SyncYielding:
+    default:
+      throw new UnsupportedError(
+          "Async marker ${node.asyncMarker} is not supported.");
+  }
+}
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 8595221..5d2530f 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -901,23 +901,6 @@
     });
   }
 
-  AsyncMarker _getAsyncMarker(ir.FunctionNode node) {
-    switch (node.asyncMarker) {
-      case ir.AsyncMarker.Async:
-        return AsyncMarker.ASYNC;
-      case ir.AsyncMarker.AsyncStar:
-        return AsyncMarker.ASYNC_STAR;
-      case ir.AsyncMarker.Sync:
-        return AsyncMarker.SYNC;
-      case ir.AsyncMarker.SyncStar:
-        return AsyncMarker.SYNC_STAR;
-      case ir.AsyncMarker.SyncYielding:
-      default:
-        throw new UnsupportedError(
-            "Async marker ${node.asyncMarker} is not supported.");
-    }
-  }
-
   FunctionEntity _getMethod(ir.Procedure node) {
     return _methodMap.putIfAbsent(node, () {
       LibraryEntity library;
@@ -933,7 +916,7 @@
       bool isExternal = node.isExternal;
       // TODO(johnniwinther): Remove `&& !node.isExternal` when #31233 is fixed.
       bool isAbstract = node.isAbstract && !node.isExternal;
-      AsyncMarker asyncMarker = _getAsyncMarker(node.function);
+      AsyncMarker asyncMarker = getAsyncMarker(node.function);
       IndexedFunction function;
       switch (node.kind) {
         case ir.ProcedureKind.Factory:
@@ -1573,6 +1556,12 @@
   @override
   DartType visitInterfaceType(ir.InterfaceType node) {
     ClassEntity cls = elementMap.getClass(node.classNode);
+    // TODO(johnniwinther): We currently encode 'FutureOr' as a dynamic type.
+    // Update the subtyping implementations to handle 'FutureOr' correctly.
+    if (cls.name == 'FutureOr' &&
+        cls.library == elementMap.commonElements.asyncLibrary) {
+      return const DynamicType();
+    }
     return new InterfaceType(cls, visitTypes(node.typeArguments));
   }
 
@@ -2324,7 +2313,7 @@
         recordFieldsVisibleInScope, memberMap);
 
     FunctionEntity callMethod = new JClosureCallMethod(
-        cls, _getParameterStructure(node), _getAsyncMarker(node));
+        cls, _getParameterStructure(node), getAsyncMarker(node));
     _members.register<IndexedFunction, FunctionData>(
         callMethod,
         new ClosureFunctionData(
diff --git a/pkg/compiler/lib/src/kernel/element_map_mixins.dart b/pkg/compiler/lib/src/kernel/element_map_mixins.dart
index 367be82..9954ca1 100644
--- a/pkg/compiler/lib/src/kernel/element_map_mixins.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_mixins.dart
@@ -884,6 +884,15 @@
       } else if (initializer is ir.RedirectingInitializer) {
         superConstructorInvocation = _computeConstructorInvocation(
             initializer.target, initializer.arguments);
+      } else if (initializer is ir.AssertInitializer) {
+        // Assert in initializer is currently not supported in dart2js.
+        // TODO(johnniwinther): Support assert in initializer.
+        String constructorName = '${cls.name}.${node.name}';
+        elementMap.reporter.reportErrorMessage(
+            computeSourceSpanFromTreeNode(initializer),
+            MessageKind.INVALID_CONSTANT_CONSTRUCTOR,
+            {'constructorName': constructorName});
+        return new ErroneousConstantConstructor();
       } else if (initializer is ir.InvalidInitializer) {
         String constructorName = '${cls.name}.${node.name}';
         elementMap.reporter.reportErrorMessage(
@@ -894,9 +903,7 @@
       } else if (initializer is ir.LocalInitializer) {
         // TODO(johnniwinther): Support this where it makes sense. Currently
         // invalid initializers are currently encoded as local initializers with
-        // a throwing initializer. Also, assert in initializer is encoded as a
-        // local initializer with a called closure containing the assertion.
-        // Assert in initializer is currently not supported in dart2js.
+        // a throwing initializer.
         // TODO(johnniwinther): Use [_ErroneousInitializerVisitor] in
         // `ssa/builder_kernel.dart` to identify erroneous initializer.
         // TODO(johnniwinther) Handle local initializers that are valid as
diff --git a/pkg/compiler/lib/src/kernel/front_end_adapter.dart b/pkg/compiler/lib/src/kernel/front_end_adapter.dart
index 5a631fd..bb70bb5 100644
--- a/pkg/compiler/lib/src/kernel/front_end_adapter.dart
+++ b/pkg/compiler/lib/src/kernel/front_end_adapter.dart
@@ -8,7 +8,7 @@
 
 import 'dart:async';
 
-import 'package:front_end/front_end.dart' as fe;
+import 'package:front_end/src/api_prototype/front_end.dart' as fe;
 
 import '../../compiler_new.dart' as api;
 
diff --git a/pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart b/pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart
index cf310d1..ac1f34c 100644
--- a/pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart
@@ -92,22 +92,22 @@
 
   @override
   HGraph build(CodegenWorkItem work, ClosedWorld closedWorld) {
-    KernelSsaGraphBuilder builder = new KernelSsaGraphBuilder(
-        work.element,
-        _elementMap.getMemberThisType(work.element),
-        _compiler,
-        _elementMap,
-        _compiler.globalInference.results,
-        _globalLocalsMap,
-        closedWorld,
-        _compiler.codegenWorldBuilder,
-        work.registry,
-        _compiler.backendStrategy.closureDataLookup,
-        _compiler.backend.emitter.nativeEmitter,
-        _compiler.backend.sourceInformationStrategy
-            .createBuilderForContext(work.element),
-        null); // Function node used as capture scope id.
-    return builder.build();
+    return task.measure(() {
+      KernelSsaGraphBuilder builder = new KernelSsaGraphBuilder(
+          work.element,
+          _elementMap.getMemberThisType(work.element),
+          _compiler,
+          _elementMap,
+          _compiler.globalInference.results,
+          _globalLocalsMap,
+          closedWorld,
+          _compiler.codegenWorldBuilder,
+          work.registry,
+          _compiler.backendStrategy.closureDataLookup,
+          _compiler.backend.emitter.nativeEmitter,
+          _compiler.backend.sourceInformationStrategy);
+      return builder.build();
+    });
   }
 }
 
diff --git a/pkg/compiler/lib/src/library_loader.dart b/pkg/compiler/lib/src/library_loader.dart
index 04c3538..59a50e4 100644
--- a/pkg/compiler/lib/src/library_loader.dart
+++ b/pkg/compiler/lib/src/library_loader.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 
-import 'package:front_end/front_end.dart' as fe;
+import 'package:front_end/src/api_prototype/front_end.dart' as fe;
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;
 import 'package:kernel/kernel.dart' hide LibraryDependency, Combinator;
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index cf9e1e8..69fc945 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -1335,15 +1335,15 @@
         constructorArguments.add(typeInfo);
       }
 
-      newObject = new HCreate(classElement, constructorArguments, ssaType,
-          instantiatedTypes: instantiatedTypes, hasRtiInput: hasRtiInput);
-      if (function != null) {
-        newObject.sourceInformation =
-            sourceInformationBuilder.buildCreate(function);
-      } else {
-        newObject.sourceInformation =
-            sourceInformationBuilder.buildDeclaration(functionElement);
-      }
+      newObject = new HCreate(
+          classElement,
+          constructorArguments,
+          ssaType,
+          function != null
+              ? sourceInformationBuilder.buildCreate(function)
+              : sourceInformationBuilder.buildDeclaration(functionElement),
+          instantiatedTypes: instantiatedTypes,
+          hasRtiInput: hasRtiInput);
       add(newObject);
     } else {
       // Bulk assign to the initialized fields.
@@ -1594,7 +1594,8 @@
       return typeBuilder.potentiallyCheckOrTrustType(value, boolType,
           kind: HTypeConversion.BOOLEAN_CONVERSION_CHECK);
     }
-    HInstruction result = new HBoolify(value, commonMasks.boolType);
+    HInstruction result = new HBoolify(value, commonMasks.boolType)
+      ..sourceInformation = value.sourceInformation;
     add(result);
     return result;
   }
@@ -1910,8 +1911,8 @@
 
     TypeMask type = new TypeMask.nonNullExact(closureClassEntity, closedWorld);
     push(new HCreate(closureClassEntity, capturedVariables, type,
-        callMethod: closureInfo.callMethod)
-      ..sourceInformation = sourceInformationBuilder.buildCreate(node));
+        sourceInformationBuilder.buildCreate(node),
+        callMethod: closureInfo.callMethod));
   }
 
   visitFunctionDeclaration(ast.FunctionDeclaration node) {
@@ -1981,8 +1982,8 @@
   ///       t3 = phi(t2, false);
   ///     }
   ///     result = phi(t3, false);
-  void handleLogicalBinaryWithLeftNode(
-      ast.Node left, void visitRight(), SsaBranchBuilder branchBuilder,
+  void handleLogicalBinaryWithLeftNode(ast.Node left, void visitRight(),
+      SsaBranchBuilder branchBuilder, SourceInformation sourceInformation,
       {bool isAnd}) {
     ast.Send send = left.asSend();
     if (send != null && (isAnd ? send.isLogicalAnd : send.isLogicalOr)) {
@@ -1992,13 +1993,15 @@
       ast.Node middle = link.head;
       handleLogicalBinaryWithLeftNode(
           newLeft,
-          () => handleLogicalBinaryWithLeftNode(
-              middle, visitRight, branchBuilder,
+          () => handleLogicalBinaryWithLeftNode(middle, visitRight,
+              branchBuilder, sourceInformationBuilder.buildBinary(middle),
               isAnd: isAnd),
           branchBuilder,
+          sourceInformation,
           isAnd: isAnd);
     } else {
-      branchBuilder.handleLogicalBinary(() => visit(left), visitRight,
+      branchBuilder.handleLogicalBinary(
+          () => visit(left), visitRight, sourceInformation,
           isAnd: isAnd);
     }
   }
@@ -2007,6 +2010,7 @@
   void visitLogicalAnd(ast.Send node, ast.Node left, ast.Node right, _) {
     SsaBranchBuilder branchBuilder = new SsaBranchBuilder(this, node);
     handleLogicalBinaryWithLeftNode(left, () => visit(right), branchBuilder,
+        sourceInformationBuilder.buildBinary(node),
         isAnd: true);
   }
 
@@ -2014,6 +2018,7 @@
   void visitLogicalOr(ast.Send node, ast.Node left, ast.Node right, _) {
     SsaBranchBuilder branchBuilder = new SsaBranchBuilder(this, node);
     handleLogicalBinaryWithLeftNode(left, () => visit(right), branchBuilder,
+        sourceInformationBuilder.buildBinary(node),
         isAnd: false);
   }
 
@@ -3178,7 +3183,8 @@
         typeMask: commonMasks.dynamicType);
 
     var inputs = <HInstruction>[pop()];
-    push(buildInvokeSuper(Selectors.noSuchMethod_, element, inputs));
+    push(buildInvokeSuper(Selectors.noSuchMethod_, element, inputs,
+        sourceInformationBuilder.buildGeneric(node)));
   }
 
   /// Generate a call to a super method or constructor.
@@ -4286,9 +4292,8 @@
     }
   }
 
-  HInstruction buildInvokeSuper(
-      Selector selector, MemberElement element, List<HInstruction> arguments,
-      [SourceInformation sourceInformation]) {
+  HInstruction buildInvokeSuper(Selector selector, MemberElement element,
+      List<HInstruction> arguments, SourceInformation sourceInformation) {
     HInstruction receiver =
         localsHandler.readThis(sourceInformation: sourceInformation);
     // TODO(5346): Try to avoid the need for calling [declaration] before
@@ -4350,7 +4355,8 @@
         generateSuperNoSuchMethodSend(node, setterSelector, setterInputs);
         pop();
       } else {
-        add(buildInvokeSuper(setterSelector, element, setterInputs));
+        add(buildInvokeSuper(setterSelector, element, setterInputs,
+            sourceInformationBuilder.buildAssignment(node)));
       }
     }
 
@@ -4380,8 +4386,8 @@
         generateSuperNoSuchMethodSend(node, getterSelector, getterInputs);
         getterInstruction = pop();
       } else {
-        getterInstruction =
-            buildInvokeSuper(getterSelector, getter, getterInputs);
+        getterInstruction = buildInvokeSuper(getterSelector, getter,
+            getterInputs, sourceInformationBuilder.buildGet(node));
         add(getterInstruction);
       }
 
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index a8f33a9..e3a2cdf 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -34,7 +34,6 @@
 import '../kernel/kernel_backend_strategy.dart';
 import '../native/native.dart' as native;
 import '../resolution/tree_elements.dart';
-import '../tree/nodes.dart' show Node;
 import '../types/masks.dart';
 import '../types/types.dart';
 import '../universe/selector.dart';
@@ -53,27 +52,29 @@
 import 'switch_continue_analysis.dart';
 import 'type_builder.dart';
 
+// TODO(johnniwinther): Merge this with [KernelInliningState].
+class StackFrame {
+  final StackFrame parent;
+  final MemberEntity member;
+  final AsyncMarker asyncMarker;
+  final KernelToLocalsMap localsMap;
+  final KernelToTypeInferenceMap typeInferenceMap;
+  final SourceInformationBuilder<ir.Node> sourceInformationBuilder;
+
+  StackFrame(this.parent, this.member, this.asyncMarker, this.localsMap,
+      this.typeInferenceMap, this.sourceInformationBuilder);
+}
+
 class KernelSsaGraphBuilder extends ir.Visitor
     with GraphBuilder, SsaBuilderFieldMixin {
   final MemberEntity targetElement;
 
-  /// The root node of [targetElement]. This is used as the key into the
-  /// [startFunction] of the locals handler.
-  // TODO(johnniwinther,efortuna): Avoid the need for AST nodes in the locals
-  // handler.
-  final Node functionNode;
   final ClosedWorld closedWorld;
   final CodegenWorldBuilder _worldBuilder;
   final CodegenRegistry registry;
   final ClosureDataLookup closureDataLookup;
 
-  /// Helper accessor for all kernel function-like targets (Procedure,
-  /// FunctionExpression, FunctionDeclaration) of the inner FunctionNode itself.
-  /// If the current target is not a function-like target, _targetFunction will
-  /// be null.
-  ir.FunctionNode _targetFunction;
-
-  /// A stack of [ResolutionDartType]s that have been seen during inlining of
+  /// A stack of [InterfaceType]s that have been seen during inlining of
   /// factory constructors.  These types are preserved in [HInvokeStatic]s and
   /// [HCreate]s inside the inline code and registered during code generation
   /// for these nodes.
@@ -96,12 +97,10 @@
   TreeElements get elements =>
       throw new UnsupportedError('KernelSsaGraphBuilder.elements');
 
-  SourceInformationBuilder<ir.Node> _sourceInformationBuilder;
+  final SourceInformationStrategy<ir.Node> _sourceInformationStrategy;
   final KernelToElementMapForBuilding _elementMap;
   final GlobalTypeInferenceResults _globalInferenceResults;
   final GlobalLocalsMap _globalLocalsMap;
-  KernelToTypeInferenceMap _typeInferenceMap;
-  KernelToLocalsMap _localsMap;
   LoopHandler<ir.Node> loopHandler;
   TypeBuilder typeBuilder;
 
@@ -115,13 +114,13 @@
   /// this is a slow path.
   bool _inExpressionOfThrow = false;
 
-  // TODO(johnniwinther): Normalize the use of properties that are updated
-  // for inlining.
   final List<KernelInliningState> _inliningStack = <KernelInliningState>[];
   Local _returnLocal;
   DartType _returnType;
   bool _inLazyInitializerExpression = false;
 
+  StackFrame _currentFrame;
+
   KernelSsaGraphBuilder(
       this.targetElement,
       InterfaceType instanceType,
@@ -134,13 +133,9 @@
       this.registry,
       this.closureDataLookup,
       this.nativeEmitter,
-      // TODO(het): Should sourceInformationBuilder be in GraphBuilder?
-      this._sourceInformationBuilder,
-      this.functionNode)
+      this._sourceInformationStrategy)
       : _infoReporter = compiler.dumpInfoTask {
-    _localsMap = _globalLocalsMap.getLocalsMap(targetElement);
-    _typeInferenceMap = new KernelToTypeInferenceMapImpl(
-        targetElement, _globalInferenceResults);
+    _enterFrame(targetElement);
     this.loopHandler = new KernelLoopHandler(this);
     typeBuilder = new KernelTypeBuilder(this, _elementMap, _globalLocalsMap);
     graph.element = targetElement;
@@ -148,13 +143,39 @@
         _sourceInformationBuilder.buildVariableDeclaration();
     this.localsHandler = new LocalsHandler(this, targetElement, targetElement,
         instanceType, nativeData, interceptorData);
-    _targetStack.add(targetElement);
   }
 
-  KernelToLocalsMap get localsMap => _localsMap;
+  KernelToLocalsMap get localsMap => _currentFrame.localsMap;
 
   CommonElements get _commonElements => _elementMap.commonElements;
 
+  KernelToTypeInferenceMap get _typeInferenceMap =>
+      _currentFrame.typeInferenceMap;
+
+  SourceInformationBuilder get _sourceInformationBuilder =>
+      _currentFrame.sourceInformationBuilder;
+
+  void _enterFrame(MemberEntity member) {
+    AsyncMarker asyncMarker = AsyncMarker.SYNC;
+    ir.FunctionNode function = getFunctionNode(_elementMap, member);
+    if (function != null) {
+      asyncMarker = getAsyncMarker(function);
+    }
+    _currentFrame = new StackFrame(
+        _currentFrame,
+        member,
+        asyncMarker,
+        _globalLocalsMap.getLocalsMap(member),
+        new KernelToTypeInferenceMapImpl(member, _globalInferenceResults),
+        _currentFrame != null
+            ? _currentFrame.sourceInformationBuilder.forContext(member)
+            : _sourceInformationStrategy.createBuilderForContext(member));
+  }
+
+  void _leaveFrame() {
+    _currentFrame = _currentFrame.parent;
+  }
+
   HGraph build() {
     return reporter.withCurrentElement(localsMap.currentMember, () {
       // TODO(het): no reason to do this here...
@@ -167,11 +188,11 @@
         case MemberKind.closureCall:
           ir.Node target = definition.node;
           if (target is ir.Procedure) {
-            _targetFunction = target.function;
             if (target.isExternal) {
-              buildExternalFunctionNode(_targetFunction);
+              buildExternalFunctionNode(
+                  _ensureDefaultArgumentValues(target.function));
             } else {
-              buildFunctionNode(_targetFunction);
+              buildFunctionNode(_ensureDefaultArgumentValues(target.function));
             }
           } else if (target is ir.Field) {
             if (handleConstantField(targetElement, registry, closedWorld)) {
@@ -183,11 +204,9 @@
             }
             buildField(target);
           } else if (target is ir.FunctionExpression) {
-            _targetFunction = target.function;
-            buildFunctionNode(_targetFunction);
+            buildFunctionNode(_ensureDefaultArgumentValues(target.function));
           } else if (target is ir.FunctionDeclaration) {
-            _targetFunction = target.function;
-            buildFunctionNode(_targetFunction);
+            buildFunctionNode(_ensureDefaultArgumentValues(target.function));
           } else {
             throw 'No case implemented to handle target: '
                 '$target for $targetElement';
@@ -195,12 +214,12 @@
           break;
         case MemberKind.constructor:
           ir.Constructor constructor = definition.node;
-          _targetFunction = constructor.function;
+          _ensureDefaultArgumentValues(constructor.function);
           buildConstructor(constructor);
           break;
         case MemberKind.constructorBody:
           ir.Constructor constructor = definition.node;
-          _targetFunction = constructor.function;
+          _ensureDefaultArgumentValues(constructor.function);
           buildConstructorBody(constructor);
           break;
         case MemberKind.closureField:
@@ -208,9 +227,6 @@
           break;
       }
       assert(graph.isValid());
-      if (_targetFunction != null) {
-        _ensureDefaultArgumentValues(_targetFunction);
-      }
 
       if (backend.tracer.isEnabled) {
         MemberEntity member = definition.member;
@@ -231,7 +247,7 @@
     });
   }
 
-  void _ensureDefaultArgumentValues(ir.FunctionNode function) {
+  ir.FunctionNode _ensureDefaultArgumentValues(ir.FunctionNode function) {
     // Register all [function]'s default argument values.
     //
     // Default values might be (or contain) functions that are not referenced
@@ -259,6 +275,7 @@
         .skip(function.requiredParameterCount)
         .forEach(registerDefaultValue);
     function.namedParameters.forEach(registerDefaultValue);
+    return function;
   }
 
   @override
@@ -452,10 +469,9 @@
       }
 
       newObject = new HCreate(cls, constructorArguments,
-          new TypeMask.nonNullExact(cls, closedWorld),
+          new TypeMask.nonNullExact(cls, closedWorld), sourceInformation,
           instantiatedTypes: <InterfaceType>[thisType],
-          hasRtiInput: hasRtiInput)
-        ..sourceInformation = sourceInformation;
+          hasRtiInput: hasRtiInput);
 
       add(newObject);
     }
@@ -480,46 +496,46 @@
 
       ConstructorEntity constructorElement = _elementMap.getConstructor(body);
 
-      KernelToLocalsMap oldLocalsMap = _localsMap;
-      _localsMap = _globalLocalsMap.getLocalsMap(constructorElement);
-
-      void handleParameter(ir.VariableDeclaration node) {
-        Local parameter = localsMap.getLocalVariable(node);
-        // If [parameter] is boxed, it will be a field in the box passed as the
-        // last parameter. So no need to directly pass it.
-        if (!localsHandler.isBoxed(parameter)) {
-          bodyCallInputs.add(localsHandler.readLocal(parameter));
+      inlinedFrom(constructorElement, () {
+        void handleParameter(ir.VariableDeclaration node) {
+          Local parameter = localsMap.getLocalVariable(node);
+          // If [parameter] is boxed, it will be a field in the box passed as
+          // the last parameter. So no need to directly pass it.
+          if (!localsHandler.isBoxed(parameter)) {
+            bodyCallInputs.add(localsHandler.readLocal(parameter));
+          }
         }
-      }
 
-      // Provide the parameters to the generative constructor body.
-      body.function.positionalParameters.forEach(handleParameter);
-      body.function.namedParameters.toList()
-        ..sort(namedOrdering)
-        ..forEach(handleParameter);
+        // Provide the parameters to the generative constructor body.
+        body.function.positionalParameters.forEach(handleParameter);
+        body.function.namedParameters.toList()
+          ..sort(namedOrdering)
+          ..forEach(handleParameter);
 
-      // If there are locals that escape (i.e. mutated in closures), we pass the
-      // box to the constructor.
-      CapturedScope scopeData =
-          closureDataLookup.getCapturedScope(constructorElement);
-      if (scopeData.requiresContextBox) {
-        bodyCallInputs.add(localsHandler.readLocal(scopeData.context));
-      }
-
-      // Pass type arguments.
-      ir.Class currentClass = body.enclosingClass;
-      if (closedWorld.rtiNeed
-          .classNeedsRti(_elementMap.getClass(currentClass))) {
-        for (ir.DartType typeParameter in currentClass.thisType.typeArguments) {
-          HInstruction argument = localsHandler.readLocal(localsHandler
-              .getTypeVariableAsLocal(_elementMap.getDartType(typeParameter)));
-          bodyCallInputs.add(argument);
+        // If there are locals that escape (i.e. mutated in closures), we pass the
+        // box to the constructor.
+        CapturedScope scopeData =
+            closureDataLookup.getCapturedScope(constructorElement);
+        if (scopeData.requiresContextBox) {
+          bodyCallInputs.add(localsHandler.readLocal(scopeData.context));
         }
-      }
 
-      // TODO(redemption): Try to inline [body].
-      _invokeConstructorBody(body, bodyCallInputs);
-      _localsMap = oldLocalsMap;
+        // Pass type arguments.
+        ir.Class currentClass = body.enclosingClass;
+        if (closedWorld.rtiNeed
+            .classNeedsRti(_elementMap.getClass(currentClass))) {
+          for (ir.DartType typeParameter
+              in currentClass.thisType.typeArguments) {
+            HInstruction argument = localsHandler.readLocal(
+                localsHandler.getTypeVariableAsLocal(
+                    _elementMap.getDartType(typeParameter)));
+            bodyCallInputs.add(argument);
+          }
+        }
+
+        // TODO(redemption): Try to inline [body].
+        _invokeConstructorBody(body, bodyCallInputs);
+      });
     }
 
     if (_inliningStack.isEmpty) {
@@ -550,18 +566,9 @@
   /// [inlinedTarget].
   inlinedFrom(MemberEntity inlinedTarget, f()) {
     reporter.withCurrentElement(inlinedTarget, () {
-      SourceInformationBuilder oldSourceInformationBuilder =
-          _sourceInformationBuilder;
-      // TODO(sra): Update sourceInformationBuilder to Kernel.
-      // _sourceInformationBuilder =
-      //   _sourceInformationBuilder.forContext(resolvedAst);
-
-      localsMap.enterInlinedMember(inlinedTarget);
-      _targetStack.add(inlinedTarget);
+      _enterFrame(inlinedTarget);
       var result = f();
-      _sourceInformationBuilder = oldSourceInformationBuilder;
-      _targetStack.removeLast();
-      localsMap.leaveInlinedMember(inlinedTarget);
+      _leaveFrame();
       return result;
     });
   }
@@ -647,6 +654,9 @@
         HInstruction value = pop();
         // TODO(sra): Apply inferred type information.
         letBindings[variable] = value;
+      } else if (initializer is ir.AssertInitializer) {
+        // Assert in initializer is currently not supported in dart2js.
+        // TODO(johnniwinther): Support assert in initializer.
       } else if (initializer is ir.InvalidInitializer) {
         assert(false, 'ir.InvalidInitializer not handled');
       } else {
@@ -799,35 +809,32 @@
       ir.Constructor caller) {
     var index = 0;
 
-    KernelToLocalsMap oldLocalsMap = _localsMap;
     ConstructorEntity element = _elementMap.getConstructor(constructor);
-    _localsMap = _globalLocalsMap.getLocalsMap(element);
-    void handleParameter(ir.VariableDeclaration node) {
-      Local parameter = localsMap.getLocalVariable(node);
-      HInstruction argument = arguments[index++];
-      // Because we are inlining the initializer, we must update
-      // what was given as parameter. This will be used in case
-      // there is a parameter check expression in the initializer.
-      parameters[parameter] = argument;
-      localsHandler.updateLocal(parameter, argument);
-    }
-
-    constructor.function.positionalParameters.forEach(handleParameter);
-    constructor.function.namedParameters.toList()
-      ..sort(namedOrdering)
-      ..forEach(handleParameter);
-
-    // Set the locals handler state as if we were inlining the constructor.
     ScopeInfo oldScopeInfo = localsHandler.scopeInfo;
-    ScopeInfo newScopeInfo = closureDataLookup.getScopeInfo(element);
-    localsHandler.scopeInfo = newScopeInfo;
-    localsHandler.enterScope(closureDataLookup.getCapturedScope(element),
-        _sourceInformationBuilder.buildDeclaration(element));
     inlinedFrom(element, () {
+      void handleParameter(ir.VariableDeclaration node) {
+        Local parameter = localsMap.getLocalVariable(node);
+        HInstruction argument = arguments[index++];
+        // Because we are inlining the initializer, we must update
+        // what was given as parameter. This will be used in case
+        // there is a parameter check expression in the initializer.
+        parameters[parameter] = argument;
+        localsHandler.updateLocal(parameter, argument);
+      }
+
+      constructor.function.positionalParameters.forEach(handleParameter);
+      constructor.function.namedParameters.toList()
+        ..sort(namedOrdering)
+        ..forEach(handleParameter);
+
+      // Set the locals handler state as if we were inlining the constructor.
+      ScopeInfo newScopeInfo = closureDataLookup.getScopeInfo(element);
+      localsHandler.scopeInfo = newScopeInfo;
+      localsHandler.enterScope(closureDataLookup.getCapturedScope(element),
+          _sourceInformationBuilder.buildDeclaration(element));
       _buildInitializers(constructor, constructorChain, fieldValues);
     });
     localsHandler.scopeInfo = oldScopeInfo;
-    _localsMap = oldLocalsMap;
   }
 
   /// Builds generative constructor body.
@@ -1058,9 +1065,7 @@
   // TODO(sra): Re-implement type builder using Kernel types and the
   // `target` for context.
   @override
-  MemberEntity get sourceElement => _targetStack.last;
-
-  List<MemberEntity> _targetStack = <MemberEntity>[];
+  MemberEntity get sourceElement => _currentFrame.member;
 
   @override
   void visitCheckLibraryIsLoaded(ir.CheckLibraryIsLoaded checkLoad) {
@@ -1155,10 +1160,9 @@
     if (node.expression == null) {
       value = graph.addConstantNull(closedWorld);
     } else {
-      assert(_targetFunction != null && _targetFunction is ir.FunctionNode);
       node.expression.accept(this);
       value = pop();
-      if (_targetFunction.asyncMarker == ir.AsyncMarker.Async) {
+      if (_currentFrame.asyncMarker == AsyncMarker.ASYNC) {
         if (options.enableTypeAssertions &&
             !isValidAsyncReturnType(_returnType)) {
           generateTypeError(
@@ -2258,8 +2262,8 @@
     // ir.LogicalExpression claims to allow '??' as an operator but currently
     // that is expanded into a let-tree.
     assert(operator == '&&' || operator == '||');
-    _handleLogicalExpression(
-        node.left, () => node.right.accept(this), brancher, operator);
+    _handleLogicalExpression(node.left, () => node.right.accept(this), brancher,
+        operator, _sourceInformationBuilder.buildBinary(node));
   }
 
   /// Optimizes logical binary expression where the left has the same logical
@@ -2271,19 +2275,25 @@
   ///
   /// For example, `(x && y) && z` is transformed into `x && (y && z)`:
   ///
-  void _handleLogicalExpression(ir.Expression left, void visitRight(),
-      SsaBranchBuilder brancher, String operator) {
+  void _handleLogicalExpression(
+      ir.Expression left,
+      void visitRight(),
+      SsaBranchBuilder brancher,
+      String operator,
+      SourceInformation sourceInformation) {
     if (left is ir.LogicalExpression && left.operator == operator) {
       ir.Expression innerLeft = left.left;
       ir.Expression middle = left.right;
       _handleLogicalExpression(
           innerLeft,
-          () =>
-              _handleLogicalExpression(middle, visitRight, brancher, operator),
+          () => _handleLogicalExpression(middle, visitRight, brancher, operator,
+              _sourceInformationBuilder.buildBinary(middle)),
           brancher,
-          operator);
+          operator,
+          sourceInformation);
     } else {
-      brancher.handleLogicalBinary(() => left.accept(this), visitRight,
+      brancher.handleLogicalBinary(
+          () => left.accept(this), visitRight, sourceInformation,
           isAnd: operator == '&&');
     }
   }
@@ -3654,9 +3664,9 @@
 
     TypeMask type = new TypeMask.nonNullExact(closureClassEntity, closedWorld);
     // TODO(efortuna): Add source information here.
-    push(new HCreate(closureClassEntity, capturedVariables, type,
-        callMethod: closureInfo.callMethod)
-      ..sourceInformation = sourceInformation);
+    push(new HCreate(
+        closureClassEntity, capturedVariables, type, sourceInformation,
+        callMethod: closureInfo.callMethod));
   }
 
   @override
@@ -4024,9 +4034,10 @@
   }
 
   @override
-  void visitNot(ir.Not not) {
-    not.operand.accept(this);
-    push(new HNot(popBoolified(), commonMasks.boolType));
+  void visitNot(ir.Not node) {
+    node.operand.accept(this);
+    push(new HNot(popBoolified(), commonMasks.boolType)
+      ..sourceInformation = _sourceInformationBuilder.buildUnary(node));
   }
 
   @override
@@ -4093,6 +4104,12 @@
       ir.Node currentNode,
       SourceInformation sourceInformation,
       {InterfaceType instanceType}) {
+    // TODO(johnniwinther,sra): Remove this when inlining is more mature.
+    if (function.library.canonicalUri.scheme == 'dart') {
+      // Temporarily disable inlining of platform libraries.
+      return false;
+    }
+
     if (nativeData.isJsInteropMember(function) &&
         !(function is ConstructorEntity && function.isFactoryConstructor)) {
       // We only inline factory JavaScript interop constructors.
@@ -4116,6 +4133,7 @@
           selector != null ||
               function.isStatic ||
               function.isTopLevel ||
+              function.isConstructor ||
               function is ConstructorBodyEntity,
           failedAt(function, "Missing selector for inlining of $function."));
       if (selector != null) {
@@ -4157,7 +4175,7 @@
 
     bool doesNotContainCode() {
       // A function with size 1 does not contain any code.
-      return InlineWeeder.canBeInlined(function, 1,
+      return InlineWeeder.canBeInlined(_elementMap, function, 1,
           enableUserAssertions: options.enableUserAssertions);
     }
 
@@ -4165,7 +4183,7 @@
       // The call is on a path which is executed rarely, so inline only if it
       // does not make the program larger.
       if (_isCalledOnce(function)) {
-        return InlineWeeder.canBeInlined(function, null,
+        return InlineWeeder.canBeInlined(_elementMap, function, null,
             enableUserAssertions: options.enableUserAssertions);
       }
       // TODO(sra): Measure if inlining would 'reduce' the size.  One desirable
@@ -4184,6 +4202,7 @@
         return false;
       }
 
+      // TODO(redemption): Do we still need this?
       //if (function.isSynthesized) return true;
 
       // Don't inline across deferred import to prevent leaking code. The only
@@ -4203,9 +4222,14 @@
       if (cachedCanBeInlined == true) {
         // We may have forced the inlining of some methods. Therefore check
         // if we can inline this method regardless of size.
-        assert(InlineWeeder.canBeInlined(function, null,
-            allowLoops: true,
-            enableUserAssertions: options.enableUserAssertions));
+        String reason;
+        assert(
+            (reason = InlineWeeder.cannotBeInlinedReason(
+                    _elementMap, function, null,
+                    allowLoops: true,
+                    enableUserAssertions: options.enableUserAssertions)) ==
+                null,
+            failedAt(function, "Cannot inline $function: $reason"));
         return true;
       }
 
@@ -4225,7 +4249,8 @@
       if (_isCalledOnce(function)) {
         maxInliningNodes = null;
       }
-      bool canInline = InlineWeeder.canBeInlined(function, maxInliningNodes,
+      bool canInline = InlineWeeder.canBeInlined(
+          _elementMap, function, maxInliningNodes,
           enableUserAssertions: options.enableUserAssertions);
       if (canInline) {
         inlineCache.markAsInlinable(function, insideLoop: insideLoop);
@@ -4375,10 +4400,7 @@
         stack,
         localsHandler,
         inTryStatement,
-        _isCalledOnce(function),
-        _typeInferenceMap);
-    _typeInferenceMap =
-        new KernelToTypeInferenceMapImpl(function, _globalInferenceResults);
+        _isCalledOnce(function));
     _inliningStack.add(state);
 
     // Setting up the state of the (AST) builder is performed even when the
@@ -4455,7 +4477,6 @@
     localsHandler = state.oldLocalsHandler;
     _returnLocal = state.oldReturnLocal;
     inTryStatement = state.inTryStatement;
-    _typeInferenceMap = state.oldTypeInferenceMap;
     _returnType = state.oldReturnType;
     assert(stack.isEmpty);
     stack = state.oldStack;
@@ -4490,8 +4511,8 @@
 
     MemberDefinition definition = _elementMap.getMemberDefinition(function);
     switch (definition.kind) {
-      case MemberKind.constructorBody:
-        buildConstructorBody(definition.node);
+      case MemberKind.constructor:
+        buildConstructor(definition.node);
         return;
       case MemberKind.regular:
         ir.Node node = definition.node;
@@ -4567,7 +4588,6 @@
   final LocalsHandler oldLocalsHandler;
   final bool inTryStatement;
   final bool allFunctionsCalledOnce;
-  final KernelToTypeInferenceMap oldTypeInferenceMap;
 
   KernelInliningState(
       this.function,
@@ -4576,21 +4596,73 @@
       this.oldStack,
       this.oldLocalsHandler,
       this.inTryStatement,
-      this.allFunctionsCalledOnce,
-      this.oldTypeInferenceMap);
+      this.allFunctionsCalledOnce);
 }
 
-class InlineWeeder {
+class InlineWeeder extends ir.Visitor {
   // Invariant: *INSIDE_LOOP* > *OUTSIDE_LOOP*
   static const INLINING_NODES_OUTSIDE_LOOP = 18;
   static const INLINING_NODES_OUTSIDE_LOOP_ARG_FACTOR = 3;
   static const INLINING_NODES_INSIDE_LOOP = 42;
   static const INLINING_NODES_INSIDE_LOOP_ARG_FACTOR = 4;
 
-  static bool canBeInlined(FunctionEntity function, int maxInliningNodes,
+  static bool canBeInlined(KernelToElementMapForBuilding elementMap,
+      FunctionEntity function, int maxInliningNodes,
+      {bool allowLoops: false, bool enableUserAssertions: null}) {
+    return cannotBeInlinedReason(elementMap, function, maxInliningNodes,
+            allowLoops: allowLoops,
+            enableUserAssertions: enableUserAssertions) ==
+        null;
+  }
+
+  static String cannotBeInlinedReason(KernelToElementMapForBuilding elementMap,
+      FunctionEntity function, int maxInliningNodes,
       {bool allowLoops: false, bool enableUserAssertions: null}) {
     // TODO(redemption): Implement inlining heuristic.
-    return true;
+    MemberDefinition memberDefinition =
+        elementMap.getMemberDefinition(function);
+    InlineWeeder visitor = new InlineWeeder();
+    memberDefinition.node.accept(visitor);
+    return visitor.tooDifficultReason;
+  }
+
+  bool seenReturn = false;
+  String tooDifficultReason;
+  bool get tooDifficult => tooDifficultReason != null;
+
+  defaultNode(ir.Node node) {
+    if (tooDifficult) return;
+    if (seenReturn) {
+      tooDifficultReason = 'code after return';
+      return;
+    }
+    node.visitChildren(this);
+  }
+
+  visitReturnStatement(ir.ReturnStatement node) {
+    if (seenReturn) {
+      tooDifficultReason = 'multiple returns';
+    } else {
+      seenReturn = true;
+    }
+  }
+
+  visitThrow(ir.Throw node) {
+    if (seenReturn) {
+      tooDifficultReason = 'multiple returns';
+    } else {
+      seenReturn = true;
+    }
+  }
+
+  visitTryCatch(ir.TryCatch node) {
+    if (tooDifficult) return;
+    tooDifficultReason = 'try/catch';
+  }
+
+  visitTryFinally(ir.TryFinally node) {
+    if (tooDifficult) return;
+    tooDifficultReason = 'try/finally';
   }
 }
 
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index b4ffd7e..c8cec3a 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -593,8 +593,8 @@
         collectedVariableDeclarations.contains(variableName);
   }
 
-  js.Expression generateExpressionAssignment(
-      String variableName, js.Expression value) {
+  js.Expression generateExpressionAssignment(String variableName,
+      js.Expression value, SourceInformation sourceInformation) {
     if (value is js.Binary) {
       js.Binary binary = value;
       String op = binary.op;
@@ -620,7 +620,7 @@
       }
     }
     return new js.Assignment(new js.VariableUse(variableName), value)
-        .withSourceInformation(value.sourceInformation);
+        .withSourceInformation(value.sourceInformation ?? sourceInformation);
   }
 
   void assignVariable(String variableName, js.Expression value,
@@ -631,7 +631,8 @@
       if (!isVariableDeclared(variableName)) {
         collectedVariableDeclarations.add(variableName);
       }
-      push(generateExpressionAssignment(variableName, value));
+      push(
+          generateExpressionAssignment(variableName, value, sourceInformation));
       // Otherwise if we are trying to declare inline and we are in a statement
       // then we declare (unless it was already declared).
     } else if (!shouldGroupVarDeclarations &&
@@ -654,7 +655,8 @@
         collectedVariableDeclarations.add(variableName);
       }
       pushExpressionAsStatement(
-          generateExpressionAssignment(variableName, value), sourceInformation);
+          generateExpressionAssignment(variableName, value, sourceInformation),
+          sourceInformation);
     }
   }
 
@@ -1246,16 +1248,33 @@
     blockQueue.add(node);
   }
 
-  void emitAssignment(String destination, String source) {
-    assignVariable(destination, new js.VariableUse(source), null);
+  void emitAssignment(
+      String destination, String source, SourceInformation sourceInformation) {
+    assignVariable(destination, new js.VariableUse(source), sourceInformation);
   }
 
   /**
    * Sequentialize a list of conceptually parallel copies. Parallel
    * copies may contain cycles, that this method breaks.
    */
-  void sequentializeCopies(Iterable<Copy> copies, String tempName,
-      void doAssignment(String target, String source)) {
+  void sequentializeCopies(
+      Iterable<Copy<HInstruction>> instructionCopies,
+      String tempName,
+      void doAssignment(
+          String target, String source, SourceInformation sourceInformation)) {
+    Map<String, SourceInformation> sourceInformationMap =
+        <String, SourceInformation>{};
+
+    // Map the instructions to strings.
+    Iterable<Copy<String>> copies =
+        instructionCopies.map((Copy<HInstruction> copy) {
+      String sourceName = variableNames.getName(copy.source);
+      sourceInformationMap[sourceName] = copy.source.sourceInformation;
+      String destinationName = variableNames.getName(copy.destination);
+      sourceInformationMap[sourceName] = copy.destination.sourceInformation;
+      return new Copy<String>(sourceName, destinationName);
+    });
+
     // Map to keep track of the current location (ie the variable that
     // holds the initial value) of a variable.
     Map<String, String> currentLocation = new Map<String, String>();
@@ -1271,8 +1290,8 @@
     List<String> ready = <String>[];
 
     // Prune [copies] by removing self-copies.
-    List<Copy> prunedCopies = <Copy>[];
-    for (Copy copy in copies) {
+    List<Copy<String>> prunedCopies = <Copy<String>>[];
+    for (Copy<String> copy in copies) {
       if (copy.source != copy.destination) {
         prunedCopies.add(copy);
       }
@@ -1282,7 +1301,7 @@
     // For each copy, set the current location of the source to
     // itself, and the initial value of the destination to the source.
     // Add the destination to the list of copies to make.
-    for (Copy copy in copies) {
+    for (Copy<String> copy in copies) {
       currentLocation[copy.source] = copy.source;
       initialValue[copy.destination] = copy.source;
       worklist.add(copy.destination);
@@ -1290,7 +1309,7 @@
 
     // For each copy, if the destination does not have a current
     // location, then we can safely assign to it.
-    for (Copy copy in copies) {
+    for (Copy<String> copy in copies) {
       if (currentLocation[copy.destination] == null) {
         ready.add(copy.destination);
       }
@@ -1303,7 +1322,8 @@
         // Since [source] might have been updated, use the current
         // location of [source]
         String copy = currentLocation[source];
-        doAssignment(destination, copy);
+        doAssignment(destination, copy,
+            sourceInformationMap[copy] ?? sourceInformationMap[destination]);
         // Now [destination] is the current location of [source].
         currentLocation[source] = destination;
         // If [source] hasn't been updated and needs to have a value,
@@ -1321,7 +1341,7 @@
       // cycle that we break by using a temporary name.
       if (currentLocation[current] != null &&
           current != currentLocation[initialValue[current]]) {
-        doAssignment(tempName, current);
+        doAssignment(tempName, current, sourceInformationMap[current]);
         currentLocation[current] = tempName;
         // [current] can now be safely updated. Copies of [current]
         // will now use [tempName].
@@ -1334,18 +1354,14 @@
     CopyHandler handler = variableNames.getCopyHandler(node);
     if (handler == null) return;
 
-    // Map the instructions to strings.
-    Iterable<Copy> copies = handler.copies.map((Copy copy) {
-      return new Copy(variableNames.getName(copy.source),
-          variableNames.getName(copy.destination));
-    });
+    sequentializeCopies(
+        handler.copies, variableNames.getSwapTemp(), emitAssignment);
 
-    sequentializeCopies(copies, variableNames.getSwapTemp(), emitAssignment);
-
-    for (Copy copy in handler.assignments) {
+    for (Copy<HInstruction> copy in handler.assignments) {
       String name = variableNames.getName(copy.destination);
       use(copy.source);
-      assignVariable(name, pop(), null);
+      assignVariable(name, pop(),
+          copy.source.sourceInformation ?? copy.destination.sourceInformation);
     }
   }
 
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index 0249673..45be84a 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -1630,8 +1630,11 @@
   FunctionEntity callMethod;
 
   HCreate(this.element, List<HInstruction> inputs, TypeMask type,
+      SourceInformation sourceInformation,
       {this.instantiatedTypes, this.hasRtiInput: false, this.callMethod})
-      : super(inputs, type);
+      : super(inputs, type) {
+    this.sourceInformation = sourceInformation;
+  }
 
   bool get isAllocation => true;
 
diff --git a/pkg/compiler/lib/src/ssa/ssa.dart b/pkg/compiler/lib/src/ssa/ssa.dart
index 07464c3..c87eae7 100644
--- a/pkg/compiler/lib/src/ssa/ssa.dart
+++ b/pkg/compiler/lib/src/ssa/ssa.dart
@@ -78,6 +78,8 @@
   SsaBuilderTask(this._backend, this._sourceInformationFactory)
       : super(_backend.compiler.measurer);
 
+  String get name => 'SSA builder';
+
   void onCodegenStart() {
     _builder = _backend.compiler.backendStrategy
         .createSsaBuilder(this, _backend, _sourceInformationFactory);
diff --git a/pkg/compiler/lib/src/ssa/ssa_branch_builder.dart b/pkg/compiler/lib/src/ssa/ssa_branch_builder.dart
index 0b5bf9e..537fd50 100644
--- a/pkg/compiler/lib/src/ssa/ssa_branch_builder.dart
+++ b/pkg/compiler/lib/src/ssa/ssa_branch_builder.dart
@@ -149,7 +149,9 @@
   ///       t1 = boolify(y);
   ///     }
   ///     result = phi(t1, true);
-  void handleLogicalBinary(void left(), void right(), {bool isAnd}) {
+  void handleLogicalBinary(
+      void left(), void right(), SourceInformation sourceInformation,
+      {bool isAnd}) {
     HInstruction boolifiedLeft;
     HInstruction boolifiedRight;
 
@@ -158,7 +160,8 @@
       boolifiedLeft = builder.popBoolified();
       builder.stack.add(boolifiedLeft);
       if (!isAnd) {
-        builder.push(new HNot(builder.pop(), builder.commonMasks.boolType));
+        builder.push(new HNot(builder.pop(), builder.commonMasks.boolType)
+          ..sourceInformation = sourceInformation);
       }
     }
 
@@ -167,13 +170,15 @@
       boolifiedRight = builder.popBoolified();
     }
 
-    handleIf(visitCondition, visitThen, null);
+    handleIf(visitCondition, visitThen, null,
+        sourceInformation: sourceInformation);
     HConstant notIsAnd =
         builder.graph.addConstantBool(!isAnd, builder.closedWorld);
     HPhi result = new HPhi.manyInputs(
         null,
         <HInstruction>[boolifiedRight, notIsAnd],
-        builder.commonMasks.dynamicType);
+        builder.commonMasks.dynamicType)
+      ..sourceInformation = sourceInformation;
     builder.current.addPhi(result);
     builder.stack.add(result);
   }
diff --git a/pkg/compiler/lib/src/ssa/variable_allocator.dart b/pkg/compiler/lib/src/ssa/variable_allocator.dart
index f9691cc..7575c22 100644
--- a/pkg/compiler/lib/src/ssa/variable_allocator.dart
+++ b/pkg/compiler/lib/src/ssa/variable_allocator.dart
@@ -389,10 +389,12 @@
  * also uses this class to represent a copy from one variable to
  * another.
  */
-class Copy {
-  final source;
-  final destination;
+class Copy<T> {
+  final T source;
+  final T destination;
+
   Copy(this.source, this.destination);
+
   String toString() => '$destination <- $source';
 }
 
@@ -404,27 +406,28 @@
   /**
    * The copies from an instruction to a phi of the successor.
    */
-  final List<Copy> copies;
+  final List<Copy<HInstruction>> copies;
 
   /**
    * Assignments from an instruction that does not need a name (e.g. a
    * constant) to the phi of a successor.
    */
-  final List<Copy> assignments;
+  final List<Copy<HInstruction>> assignments;
 
   CopyHandler()
-      : copies = new List<Copy>(),
-        assignments = new List<Copy>();
+      : copies = new List<Copy<HInstruction>>(),
+        assignments = new List<Copy<HInstruction>>();
 
   void addCopy(HInstruction source, HInstruction destination) {
-    copies.add(new Copy(source, destination));
+    copies.add(new Copy<HInstruction>(source, destination));
   }
 
   void addAssignment(HInstruction source, HInstruction destination) {
-    assignments.add(new Copy(source, destination));
+    assignments.add(new Copy<HInstruction>(source, destination));
   }
 
   String toString() => 'Copies: $copies, assignments: $assignments';
+
   bool get isEmpty => copies.isEmpty && assignments.isEmpty;
 }
 
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index f50a571..ef74950 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -4,6 +4,7 @@
 
 library dart2js.world;
 
+import 'dart:collection' show Queue;
 import 'closure.dart';
 import 'common.dart';
 import 'constants/constant_system.dart';
@@ -1155,14 +1156,21 @@
   static void emptyWorkList(Iterable<SideEffectsBuilder> sideEffectsBuilders) {
     // TODO(johnniwinther): Optimize this algorithm, possibly by using
     // `pkg/front_end/lib/src/dependency_walker.dart`.
-    Set<SideEffectsBuilder> workList =
-        new Set<SideEffectsBuilder>.from(sideEffectsBuilders);
-    while (workList.isNotEmpty) {
-      SideEffectsBuilder sideEffectsBuilder = workList.first;
-      workList.remove(sideEffectsBuilder);
+    Queue<SideEffectsBuilder> queue = new Queue<SideEffectsBuilder>();
+    Set<SideEffectsBuilder> inQueue = new Set<SideEffectsBuilder>();
+
+    for (SideEffectsBuilder builder in sideEffectsBuilders) {
+      queue.addLast(builder);
+      inQueue.add(builder);
+    }
+    while (queue.isNotEmpty) {
+      SideEffectsBuilder sideEffectsBuilder = queue.removeFirst();
+      inQueue.remove(sideEffectsBuilder);
       for (SideEffectsBuilder dependent in sideEffectsBuilder.depending) {
         if (dependent.add(sideEffectsBuilder.sideEffects)) {
-          workList.add(dependent);
+          if (inQueue.add(dependent)) {
+            queue.addLast(dependent);
+          }
         }
       }
     }
diff --git a/pkg/compiler/tool/generate_kernel.dart b/pkg/compiler/tool/generate_kernel.dart
index e9daff2..b8d1434 100644
--- a/pkg/compiler/tool/generate_kernel.dart
+++ b/pkg/compiler/tool/generate_kernel.dart
@@ -13,7 +13,7 @@
 import 'package:args/args.dart';
 import 'package:compiler/src/kernel/dart2js_target.dart';
 import 'package:compiler/src/filenames.dart';
-import 'package:front_end/front_end.dart';
+import 'package:front_end/src/api_prototype/front_end.dart';
 import 'package:front_end/src/compute_platform_binaries_location.dart'
     show computePlatformBinariesLocation;
 import 'package:front_end/src/fasta/util/relativize.dart';
diff --git a/pkg/dev_compiler/bin/dartdevk.dart b/pkg/dev_compiler/bin/dartdevk.dart
index 1cd989c..5f5f86c 100755
--- a/pkg/dev_compiler/bin/dartdevk.dart
+++ b/pkg/dev_compiler/bin/dartdevk.dart
@@ -10,12 +10,14 @@
 import 'dart:io';
 
 import 'package:dev_compiler/src/kernel/command.dart';
+import 'package:front_end/src/api_unstable/ddc.dart' as fe;
 
 Future main(List<String> args) async {
   if (args.isNotEmpty && args.last == "--batch") {
     await runBatch(args.sublist(0, args.length - 1));
   } else {
-    var succeeded = await compile(args);
+    var result = await compile(args);
+    var succeeded = result.result;
     exitCode = succeeded ? 0 : 1;
   }
 }
@@ -29,14 +31,17 @@
   print('>>> BATCH START');
 
   String line;
+  fe.InitializedCompilerState compilerState;
+
   while ((line = stdin.readLineSync(encoding: UTF8)).isNotEmpty) {
     tests++;
     var args = batchArgs.toList()..addAll(line.split(new RegExp(r'\s+')));
 
     String outcome;
     try {
-      // TODO(jmesserly): share SDK deserialization between compilations.
-      var succeeded = await compile(args);
+      var result = await compile(args, compilerState: compilerState);
+      compilerState = result.compilerState;
+      var succeeded = result.result;
       outcome = succeeded ? 'PASS' : 'FAIL';
     } catch (e, s) {
       outcome = 'CRASH';
diff --git a/pkg/dev_compiler/lib/src/js_ast/printer.dart b/pkg/dev_compiler/lib/src/js_ast/printer.dart
index dd41f6b..c54ea1a 100644
--- a/pkg/dev_compiler/lib/src/js_ast/printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/printer.dart
@@ -338,7 +338,9 @@
       out("else");
       if (elsePart is If) {
         pendingSpace = true;
+        context.enterNode(elsePart);
         ifOut(elsePart, false);
+        context.exitNode(elsePart);
       } else {
         blockBody(elsePart, needsSeparation: true, needsNewline: true);
       }
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index 630e11e..ea92956 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -5,21 +5,17 @@
 import 'dart:async';
 import 'dart:convert' show JSON;
 import 'dart:io';
+
 import 'package:args/args.dart';
 import 'package:dev_compiler/src/kernel/target.dart';
-import 'package:front_end/compilation_message.dart';
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/src/kernel_generator_impl.dart';
-import 'package:front_end/src/base/processed_options.dart';
-import 'package:kernel/kernel.dart';
+import 'package:front_end/src/api_unstable/ddc.dart' as fe;
 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';
 
-import '../compiler/module_builder.dart';
 import '../compiler/js_names.dart' as JS;
+import '../compiler/module_builder.dart';
 import '../js_ast/js_ast.dart' as JS;
 import 'compiler.dart';
 import 'native_types.dart';
@@ -30,9 +26,10 @@
 /// Invoke the compiler with [args].
 ///
 /// Returns `true` if the program compiled without any fatal errors.
-Future<bool> compile(List<String> args) async {
+Future<CompilerResult> compile(List<String> args,
+    {fe.InitializedCompilerState compilerState}) async {
   try {
-    return await _compile(args);
+    return await _compile(args, compilerState: compilerState);
   } catch (error) {
     print('''
 We're sorry, you've found a bug in our compiler.
@@ -54,7 +51,17 @@
     'Usage: $_binaryName [options...] <sources...>\n\n'
     '${ddcArgParser.usage}';
 
-Future<bool> _compile(List<String> args) async {
+class CompilerResult {
+  final fe.InitializedCompilerState compilerState;
+  final bool result;
+
+  CompilerResult(this.compilerState, this.result);
+
+  CompilerResult.noState(this.result) : compilerState = null;
+}
+
+Future<CompilerResult> _compile(List<String> args,
+    {fe.InitializedCompilerState compilerState}) async {
   var argParser = new ArgParser(allowTrailingOptions: true)
     ..addFlag('help',
         abbr: 'h', help: 'Display this message.', negatable: false)
@@ -73,7 +80,7 @@
 
   if (argResults['help'] || args.isEmpty) {
     print(_usageMessage(argParser));
-    return true;
+    return new CompilerResult.noState(true);
   }
 
   var moduleFormat = parseModuleFormatOption(argResults).first;
@@ -88,70 +95,54 @@
   var packageFile =
       argResults['packages'] ?? path.absolute(ddcPath, '..', '..', '.packages');
 
+  var inputs = argResults.rest.map(Uri.base.resolve).toList();
+
   var succeeded = true;
-  void errorHandler(CompilationMessage error) {
+  void errorHandler(fe.CompilationMessage error) {
     // TODO(jmesserly): front end warning levels do not seem to follow the
     // Strong Mode/Dart 2 spec. So for now, we treat all warnings as
     // compile time errors.
-    if (error.severity == Severity.error ||
-        error.severity == Severity.warning) {
+    if (error.severity == fe.Severity.error ||
+        error.severity == fe.Severity.warning) {
       succeeded = false;
     }
   }
 
-  var options = new CompilerOptions()
-    ..sdkSummary = path.toUri(sdkSummaryPath)
-    ..packagesFileUri = path.toUri(packageFile)
-    ..inputSummaries = summaryUris
-    ..target = new DevCompilerTarget()
-    ..onError = errorHandler
-    ..chaseDependencies = true
-    ..reportMessages = true;
-
-  var inputs = argResults.rest
-      .map((a) => a.startsWith('package:') || a.startsWith('dart:')
-          ? Uri.parse(a)
-          : path.toUri(path.absolute(a)))
-      .toList();
-  String output = argResults['out'];
-
-  //var program = await kernelForBuildUnit(inputs, options);
-  // TODO(jmesserly): use public APIs. For now we need this to access processed
-  // options, which has info needed to compute library -> module mapping without
-  // re-parsing inputs.
-  var processedOpts = new ProcessedOptions(options, true, inputs);
-
-  var compilerResult = await generateKernel(processedOpts);
-  var program = compilerResult?.program;
-
-  var sdkSummary = await processedOpts.loadSdkSummary(null);
-  var nameRoot = sdkSummary?.root ?? new CanonicalName.root();
-  var summaries = await processedOpts.loadInputSummaries(nameRoot);
-
-  if (succeeded) {
-    var file = new File(output);
-    if (!file.parent.existsSync()) file.parent.createSync(recursive: true);
-    // Useful for debugging:
-    writeProgramToText(program, path: output + '.txt');
-
-    // TODO(jmesserly): Save .dill file so other modules can link in this one.
-    //await writeProgramToBinary(program, output);
-    var jsModule =
-        compileToJSModule(program, summaries, summaryUris, declaredVariables);
-    var jsCode = jsProgramToCode(jsModule, moduleFormat,
-        buildSourceMap: argResults['source-map'],
-        jsUrl: path.toUri(output).toString(),
-        mapUrl: path.toUri(output + '.map').toString());
-    file.writeAsStringSync(jsCode.code);
-
-    if (jsCode.sourceMap != null) {
-      file = new File(output + '.map');
-      if (!file.parent.existsSync()) file.parent.createSync(recursive: true);
-      file.writeAsStringSync(JSON.encode(jsCode.sourceMap));
-    }
+  compilerState = await fe.initializeCompiler(
+      compilerState,
+      path.toUri(sdkSummaryPath),
+      path.toUri(packageFile),
+      summaryUris,
+      new DevCompilerTarget());
+  fe.DdcResult result = await fe.compile(compilerState, inputs, errorHandler);
+  if (result == null || !succeeded) {
+    return new CompilerResult(compilerState, false);
   }
 
-  return succeeded;
+  String output = argResults['out'];
+  var file = new File(output);
+  if (!file.parent.existsSync()) file.parent.createSync(recursive: true);
+
+  // Useful for debugging:
+  writeProgramToText(result.program, path: output + '.txt');
+
+  // TODO(jmesserly): Save .dill file so other modules can link in this one.
+  //await writeProgramToBinary(program, output);
+  var jsModule = compileToJSModule(
+      result.program, result.inputSummaries, summaryUris, declaredVariables);
+  var jsCode = jsProgramToCode(jsModule, moduleFormat,
+      buildSourceMap: argResults['source-map'],
+      jsUrl: path.toUri(output).toString(),
+      mapUrl: path.toUri(output + '.map').toString());
+  file.writeAsStringSync(jsCode.code);
+
+  if (jsCode.sourceMap != null) {
+    file = new File(output + '.map');
+    if (!file.parent.existsSync()) file.parent.createSync(recursive: true);
+    file.writeAsStringSync(JSON.encode(jsCode.sourceMap));
+  }
+
+  return new CompilerResult(compilerState, true);
 }
 
 JS.Program compileToJSModule(Program p, List<Program> summaries,
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index b905106..cdf4d77 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -1460,6 +1460,8 @@
           emitFieldInit(init.field, init.value, init);
         } else if (init is LocalInitializer) {
           body.add(visitVariableDeclaration(init.variable));
+        } else if (init is AssertInitializer) {
+          body.add(visitAssertStatement(init.statement));
         }
       }
     }
@@ -1480,7 +1482,7 @@
 
   JS.Expression notNull(Expression expr) {
     if (expr == null) return null;
-    var jsExpr = _visitExpression(expr);
+    var jsExpr = _visitAndMarkExpression(expr);
     if (!isNullable(expr)) return jsExpr;
     return _callHelper('notNull(#)', jsExpr);
   }
@@ -1562,8 +1564,9 @@
       }
     }
 
-    jsMethods.addAll(_classProperties.mockMembers.values
-        .map((e) => _implementMockMember(e, c)));
+    for (Member m in _classProperties.mockMembers.values) {
+      _addMockMembers(m, c, jsMethods);
+    }
 
     // If the type doesn't have an `iterator`, but claims to implement Iterable,
     // we inject the adaptor method here, as it's less code size to put the
@@ -1719,69 +1722,108 @@
   ///       return core.bool.as(this.noSuchMethod(
   ///           new dart.InvocationImpl.new('eatFood', args)));
   ///     }
-  JS.Method _implementMockMember(Procedure method, Class c) {
-    var invocationProps = <JS.Property>[];
-    addProperty(String name, JS.Expression value) {
-      invocationProps.add(new JS.Property(js.string(name), value));
-    }
+  ///
+  /// 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) {
+    JS.Method implementMockMember(
+        List<TypeParameter> typeParameters,
+        List<VariableDeclaration> namedParameters,
+        ProcedureKind mockMemberKind,
+        DartType returnType) {
+      assert(mockMemberKind != ProcedureKind.Factory);
 
-    var args = new JS.TemporaryId('args');
-    var function = method.function;
-    var typeParams = _emitTypeFormals(function.typeParameters);
-    var fnArgs = new List<JS.Parameter>.from(typeParams);
-    JS.Expression positionalArgs;
-
-    if (function.namedParameters.isNotEmpty) {
-      addProperty('namedArguments', _callHelper('extractNamedArgs(#)', [args]));
-    }
-
-    if (!method.isAccessor) {
-      addProperty('isMethod', js.boolean(true));
-
-      fnArgs.add(new JS.RestParameter(args));
-      positionalArgs = args;
-    } else {
-      if (method.isGetter) {
-        addProperty('isGetter', js.boolean(true));
-
-        positionalArgs = new JS.ArrayInitializer([]);
-      } else if (method.isSetter) {
-        addProperty('isSetter', js.boolean(true));
-
-        fnArgs.add(args);
-        positionalArgs = new JS.ArrayInitializer([args]);
+      var invocationProps = <JS.Property>[];
+      addProperty(String name, JS.Expression value) {
+        invocationProps.add(new JS.Property(js.string(name), value));
       }
+
+      var args = new JS.TemporaryId('args');
+      var typeParams = _emitTypeFormals(typeParameters);
+      var fnArgs = new List<JS.Parameter>.from(typeParams);
+      JS.Expression positionalArgs;
+
+      if (namedParameters.isNotEmpty) {
+        addProperty(
+            'namedArguments', _callHelper('extractNamedArgs(#)', [args]));
+      }
+
+      if (mockMemberKind != ProcedureKind.Getter &&
+          mockMemberKind != ProcedureKind.Setter) {
+        addProperty('isMethod', js.boolean(true));
+
+        fnArgs.add(new JS.RestParameter(args));
+        positionalArgs = args;
+      } else {
+        if (mockMemberKind == ProcedureKind.Getter) {
+          addProperty('isGetter', js.boolean(true));
+
+          positionalArgs = new JS.ArrayInitializer([]);
+        } else if (mockMemberKind == ProcedureKind.Setter) {
+          addProperty('isSetter', js.boolean(true));
+
+          fnArgs.add(args);
+          positionalArgs = new JS.ArrayInitializer([args]);
+        }
+      }
+
+      if (typeParams.isNotEmpty) {
+        addProperty('typeArguments', new JS.ArrayInitializer(typeParams));
+      }
+
+      var fnBody =
+          js.call('this.noSuchMethod(new #.InvocationImpl.new(#, #, #))', [
+        _runtimeModule,
+        _declareMemberName(member),
+        positionalArgs,
+        new JS.ObjectInitializer(invocationProps)
+      ]);
+
+      if (!types.isTop(returnType)) {
+        fnBody = js.call('#._check(#)', [_emitType(returnType), fnBody]);
+      }
+
+      var fn = new JS.Fun(fnArgs, js.statement('{ return #; }', [fnBody]),
+          typeParams: typeParams);
+
+      return new JS.Method(
+          _declareMemberName(member,
+              useExtension: _extensionTypes.isNativeClass(c)),
+          fn,
+          isGetter: mockMemberKind == ProcedureKind.Getter,
+          isSetter: mockMemberKind == ProcedureKind.Setter,
+          isStatic: false);
     }
 
-    if (typeParams.isNotEmpty) {
-      addProperty('typeArguments', new JS.ArrayInitializer(typeParams));
+    if (member is Field) {
+      jsMethods.add(implementMockMember(
+          const <TypeParameter>[],
+          const <VariableDeclaration>[],
+          ProcedureKind.Getter,
+          Substitution
+              .fromSupertype(
+                  hierarchy.getClassAsInstanceOf(c, member.enclosingClass))
+              .substituteType(member.type)));
+      if (!member.isFinal) {
+        jsMethods.add(implementMockMember(
+            const <TypeParameter>[],
+            const <VariableDeclaration>[],
+            ProcedureKind.Setter,
+            new DynamicType()));
+      }
+    } else {
+      Procedure procedure = member as Procedure;
+      FunctionNode function = procedure.function;
+      jsMethods.add(implementMockMember(
+          function.typeParameters,
+          function.namedParameters,
+          procedure.kind,
+          Substitution
+              .fromSupertype(
+                  hierarchy.getClassAsInstanceOf(c, member.enclosingClass))
+              .substituteType(function.returnType)));
     }
-
-    var fnBody =
-        js.call('this.noSuchMethod(new #.InvocationImpl.new(#, #, #))', [
-      _runtimeModule,
-      _declareMemberName(method),
-      positionalArgs,
-      new JS.ObjectInitializer(invocationProps)
-    ]);
-
-    var returnType = Substitution
-        .fromSupertype(hierarchy.getClassAsInstanceOf(c, method.enclosingClass))
-        .substituteType(method.function.functionType);
-    if (!types.isTop(returnType)) {
-      fnBody = js.call('#._check(#)', [_emitType(returnType), fnBody]);
-    }
-
-    var fn = new JS.Fun(fnArgs, js.statement('{ return #; }', [fnBody]),
-        typeParams: typeParams);
-
-    return new JS.Method(
-        _declareMemberName(method,
-            useExtension: _extensionTypes.isNativeClass(c)),
-        fn,
-        isGetter: method.isGetter,
-        isSetter: method.isSetter,
-        isStatic: false);
   }
 
   /// This is called whenever a derived class needs to introduce a new field,
@@ -2570,7 +2612,9 @@
 
     JS.Block code = isSync
         ? _emitFunctionBody(f)
-        : new JS.Block([_emitGeneratorFunction(f, name).toReturn()]);
+        : new JS.Block([
+            _emitGeneratorFunction(f, name).toReturn()..sourceInformation = f
+          ]);
 
     if (name != null && formals.isNotEmpty) {
       if (name == '[]=') {
@@ -2637,7 +2681,7 @@
       //
       // TODO(jmesserly): this will emit argument initializers (for default
       // values) inside the generator function body. Is that the best place?
-      var jsBody = _emitFunctionBody(function);
+      var jsBody = _emitFunctionBody(function)..sourceInformation = function;
       JS.Expression gen =
           new JS.Fun(getParameters(jsBody), jsBody, isGenerator: true);
 
@@ -2696,7 +2740,8 @@
       var gen = emitGeneratorFn((_) => [_asyncStarController]);
 
       var returnType = _getExpectedReturnType(function, coreTypes.streamClass);
-      return _callHelper('asyncStar(#, #)', [_emitType(returnType), gen]);
+      return _callHelper('asyncStar(#, #)', [_emitType(returnType), gen])
+        ..sourceInformation = function;
     }
 
     assert(function.asyncMarker == AsyncMarker.Async);
@@ -2930,7 +2975,7 @@
       if (op == '||') return shortCircuit('# || #');
     }
 
-    var result = _visitExpression(node);
+    var result = _visitAndMarkExpression(node);
     if (node.getStaticType(types) != coreTypes.boolClass.rawType) {
       return finish(_callHelper('dtest(#)', result));
     }
@@ -3157,7 +3202,7 @@
       var body = _visitScope(effectiveBodyOf(node, node.body));
 
       var v = _emitVariableRef(node.variable);
-      var init = js.call('let #', v);
+      var init = js.call('let #', v)..sourceInformation = node.variable;
       if (_annotatedNullCheck(node.variable.annotations)) {
         body = new JS.Block([_nullParameterCheck(v), body]);
       }
@@ -3190,7 +3235,8 @@
             streamIterator,
             _asyncStreamIteratorClass.procedures
                 .firstWhere((p) => p.isFactory && p.name.name == '')),
-        [_visitExpression(node.iterable)]);
+        [_visitExpression(node.iterable)])
+      ..sourceInformation = node.iterable;
 
     var iter = new JS.TemporaryId('iter');
     var init =
@@ -3205,10 +3251,12 @@
         [
           iter,
           createStreamIter,
-          new JS.Yield(js.call('#.moveNext()', iter)),
+          new JS.Yield(js.call('#.moveNext()', iter))
+            ..sourceInformation = node.variable,
           init,
           _visitStatement(node.body),
           new JS.Yield(js.call('#.cancel()', iter))
+            ..sourceInformation = node.variable
         ]);
   }
 
@@ -3322,13 +3370,15 @@
       var name = node.exception;
       if (name != null && name != _catchParameter) {
         body.add(js.statement('let # = #;',
-            [_emitVariableRef(name), _emitVariableRef(_catchParameter)]));
+            [_emitVariableRef(name), _emitVariableRef(_catchParameter)])
+          ..sourceInformation = name);
         _catchParameter = name;
       }
       if (node.stackTrace != null) {
         var stackVar = _emitVariableRef(node.stackTrace);
         body.add(js.statement('let # = #.stackTrace(#);',
-            [stackVar, _runtimeModule, _emitVariableRef(name)]));
+            [stackVar, _runtimeModule, _emitVariableRef(name)])
+          ..sourceInformation = node.stackTrace);
       }
     }
 
@@ -3344,7 +3394,8 @@
         js.call('#.is(#)',
             [_emitType(node.guard), _emitVariableRef(_catchParameter)]),
         then,
-        otherwise);
+        otherwise)
+      ..sourceInformation = node;
   }
 
   @override
@@ -3366,7 +3417,7 @@
 
   @override
   visitYieldStatement(YieldStatement node) {
-    var jsExpr = _visitExpression(node.expression);
+    var jsExpr = _visitAndMarkExpression(node.expression);
     var star = node.isYieldStar;
     if (_asyncStarController != null) {
       // async* yields are generated differently from sync* yields. `yield e`
@@ -3380,8 +3431,12 @@
       //     if (stream.addStream(e)) return;
       //     yield;
       var helperName = star ? 'addStream' : 'add';
-      return js.statement('{ if(#.#(#)) return; #; }',
-          [_asyncStarController, helperName, jsExpr, new JS.Yield(null)]);
+      return js.statement('{ if(#.#(#)) return; #; }', [
+        _asyncStarController,
+        helperName,
+        jsExpr,
+        new JS.Yield(null)..sourceInformation = node
+      ]);
     }
     // A normal yield in a sync*
     return jsExpr.toYieldStatement(star: star);
@@ -3459,7 +3514,7 @@
 
   // TODO(jmesserly): resugar operators for kernel, such as ++x, x++, x+=.
   @override
-  visitVariableSet(VariableSet node) => _visitExpression(node.value)
+  visitVariableSet(VariableSet node) => _visitAndMarkExpression(node.value)
       .toAssignExpression(_emitVariableRef(node.variable));
 
   @override
@@ -3554,7 +3609,7 @@
 
   @override
   visitStaticSet(StaticSet node) {
-    return _visitExpression(node.value)
+    return _visitAndMarkExpression(node.value)
         .toAssignExpression(_emitStaticTarget(node.target));
   }
 
@@ -3914,8 +3969,8 @@
     // a measurable performance effect (possibly the helper is simple enough to
     // be inlined).
     if (isNullable(left)) {
-      return _callHelper(
-          'equals(#, #)', [_visitExpression(left), _visitExpression(right)]);
+      return _callHelper('equals(#, #)',
+          [_visitAndMarkExpression(left), _visitAndMarkExpression(right)]);
     }
 
     // Otherwise we emit a call to the == method.
@@ -4246,7 +4301,10 @@
     }
     var left = args[0];
     var right = args[1];
-    var jsArgs = [_visitExpression(left), _visitExpression(right)];
+    var jsArgs = [
+      _visitAndMarkExpression(left),
+      _visitAndMarkExpression(right)
+    ];
     if (_tripleEqIsIdentity(left, right)) {
       return _emitJSTripleEq(jsArgs, negated: negated);
     }
@@ -4404,8 +4462,8 @@
   visitConditionalExpression(ConditionalExpression node) {
     return js.call('# ? # : #', [
       _visitTest(node.condition),
-      _visitExpression(node.then),
-      _visitExpression(node.otherwise)
+      _visitAndMarkExpression(node.then),
+      _visitAndMarkExpression(node.otherwise)
     ]);
   }
 
@@ -4435,7 +4493,7 @@
         expectString = false;
       } else {
         if (expectString) strings.add('');
-        interpolations.add(_visitExpression(e));
+        interpolations.add(_visitAndMarkExpression(e));
         expectString = true;
       }
     }
@@ -4449,7 +4507,7 @@
     // Generate `is` as `dart.is` or `typeof` depending on the RHS type.
     JS.Expression result;
     var type = node.type;
-    var lhs = _visitExpression(node.operand);
+    var lhs = _visitAndMarkExpression(node.operand);
     var typeofName = _jsTypeofName(type);
     // Inline primitives other than int (which requires a Math.floor check).
     if (typeofName != null && type != coreTypes.intClass.rawType) {
@@ -4584,7 +4642,7 @@
 
   @override
   visitThrow(Throw node) =>
-      _callHelper('throw(#)', _visitExpression(node.expression));
+      _callHelper('throw(#)', _visitAndMarkExpression(node.expression));
 
   @override
   visitListLiteral(ListLiteral node) {
@@ -4622,8 +4680,8 @@
     emitEntries() {
       var entries = <JS.Expression>[];
       for (var e in node.entries) {
-        entries.add(_visitExpression(e.key));
-        entries.add(_visitExpression(e.value));
+        entries.add(_visitAndMarkExpression(e.key));
+        entries.add(_visitAndMarkExpression(e.value));
       }
       return new JS.ArrayInitializer(entries);
     }
diff --git a/pkg/dev_compiler/lib/src/kernel/property_model.dart b/pkg/dev_compiler/lib/src/kernel/property_model.dart
index 2e16ad0..b589cc1 100644
--- a/pkg/dev_compiler/lib/src/kernel/property_model.dart
+++ b/pkg/dev_compiler/lib/src/kernel/property_model.dart
@@ -282,25 +282,12 @@
 
       for (var m in c.members) {
         if (m is Constructor) continue;
+        if (m is Procedure && m.isStatic) continue;
 
-        var isAbstract = classIsAbstract || m.isAbstract;
-        addMember(bool setter) {
-          var name = m.name.name;
-          if (setter) name += '=';
-          if (isAbstract) {
-            mockMembers[name] = m;
-          } else {
-            concreteMembers.add(name);
-          }
-        }
-
-        var name = m.name.name;
-        if (m is Field) {
-          addMember(false);
-          if (!m.isFinal) addMember(true);
+        if (classIsAbstract || m.isAbstract) {
+          mockMembers[m.name.name] = m;
         } else {
-          var p = m as Procedure;
-          if (!p.isStatic) addMember(p.isSetter);
+          concreteMembers.add(m.name.name);
         }
       }
     }
diff --git a/pkg/dev_compiler/lib/src/kernel/source_map_printer.dart b/pkg/dev_compiler/lib/src/kernel/source_map_printer.dart
index 93ea550..2a9c957 100644
--- a/pkg/dev_compiler/lib/src/kernel/source_map_printer.dart
+++ b/pkg/dev_compiler/lib/src/kernel/source_map_printer.dart
@@ -101,6 +101,7 @@
 
   void _mark(int offset, bool adjustColumn) {
     int adjustedColumn = _column - (adjustColumn ? 1 : 0);
+    if (adjustedColumn < 0) return;
     if ((_previousColumn == _column || _previousColumn == adjustedColumn) &&
         _previousLine == _line) return;
 
diff --git a/pkg/dev_compiler/test/sourcemap/README.md b/pkg/dev_compiler/test/sourcemap/README.md
index f8674cc..8562f98 100644
--- a/pkg/dev_compiler/test/sourcemap/README.md
+++ b/pkg/dev_compiler/test/sourcemap/README.md
@@ -1,49 +1,24 @@
-This folder contains a testing framework for validating the debugging behaviour of the generated js.
-It currently has 2 suits: One for (legacy) DDC and one for DDC with kernel (DDK).
+# Testing of source maps
+
+This folder contains two types of tests for validating sourcemaps:
+the debugging behavior and the stacktrace behavior.
+
+For both there are 2 suits: One for (legacy) DDC and one for DDC with kernel (DDK).
 
 Running the tests likely requires the compilation of the correct targets. DDK currently also
-requires `ddc_sdk.dill` inside `./out/ReleaseX64/gen/utils/dartdevc/ddc_sdk.dill`.
-This should be remedied at some point.
+requires `ddc_sdk.dill` inside
+`{sdkroot}/{out,xcodebuild}/ReleaseX64/gen/utils/dartdevc/ddc_sdk.dill`.
 
-All tests are plain Dart files and goes in "testfiles". They are automatically picked up by the
-testing framework.
+Except for that, running them should simply be a matter of executing the `*_suite.dart` files.
 
-The tests files should contain comments describing where to set breakpoints,
-and the expected breaking positions.
-This is done with comments as in `/*key*/` where `key` can be on of the following:
+All tests are plain Dart files and goes in "testfiles" (debugging tests) or "stacktrace_testfiles"
+(stacktrace tests). They are automatically picked up by the testing framework.
 
-* **fail**: Will fail the test. Useful for debugging.
-* **Debugger:stepOver**: Will step over breakpoints. Default (i.e. without this) is to step into.
-* **bl** (break line): insert a breakpoint on this line. This does not add any new expected breaks.
-* **s:{i}** (stop): adds an expected stop as the `i`th stop (1-indexed).
-* **sl:{i}** (stop at line): adds an expected stop as the `i`th stop (1-indexed). Only check the
-line number.
-* **nb** (no break): The debugger should never break on this line.
-* **nbc** (no break column): The debugger should never break on this line and column.
-* **nbb:{i}:{j}** (no break between): The debugger should not break on this line between expectation
-`i` and `j` (1-indexed). From can also be the special value 0 meaning from the beginning.
-For example `nbb:0:1` means not before first expected stop.
-* **nm** (no mapping): There's not allowed to be any mapping to this line.
-* **bc:{i}** (break column): inserts a breakpoint at this line and column and adds an expected stop
-as the `i`th stop (1-indexed).
+## Debugging tests (step tests)
 
-Note that in an ideal world `bc:{i}` would be unnecessary: Stopping at a line and stepping should
-generally be enough. Because of the current behaviour of d8 though, for instance
-```
-baz(foo(), bar())
-```
-will stop at `baz`, go into `foo`, stop at `bar`, go into `bar` and stop at `baz`.
-From a Dart perspective we would instead expect it to stop at `foo`, go into `foo`, stop at `bar`,
+See `README.md` in `pkg/sourcemap_testing`.
 
-go into `bar` and stop a `baz`.
-Having **bc:{i}** allows us to force this behaviour as d8 can actually stop at `foo` too.
-
-
-All of these annotations are removed before compiling to js and the expected output thus refers to
-the unannotated code.
-
-When the test confirms that the debugger broke at the expected locations it allows for additional
-breakpoints before, between and after the expected breakpoints.
+### Debugging a test
 
 One can filter which tests are run by running (from the sourcemap folder):
 ```
@@ -56,14 +31,36 @@
 dart sourcemaps_ddc_suite.dart -Ddebug=true -- sourcemaps_ddc//printing_class_fields
 ```
 
-Some of the logic comes from https://github.com/ChromeDevTools/devtools-frontend/, for instance see
-https://github.com/ChromeDevTools/devtools-frontend/blob/fa18d70a995f06cb73365b2e5b8ae974cf60bd3a/
-front_end/sources/JavaScriptSourceFrame.js#L1520-L1523
-for how a line breakpoint is resolved:
-Basically the line asked to break on in user code (e.g. in dart code) is asked for first and last
-javascript positions; these are then used to get possible breakpoints in that part. If there are
-none it tries the next line (etc for a number of lines). Once it finds something (in javascript
-positions) it converts that to user code position (e.g. in dart code), normalizes it by converting
-to javascript position and back to user code position again, then converts to javascript position
-and sets the breakpoint.
-This is to some extend mimicked here when setting a line break (though not a "column break").
+The latter is also useful in combination with `/*fail*/` when adding new tests to see all the places
+where the debugger stopped (both in JS positions and translated to dart positions).
+
+For instance `-Ddebug=true -- sourcemaps_ddk//next_through_catch_test` with a `/*fail*/`
+currently gives output like the following:
+
+```
+Stop #1
+
+test.main = function() {                            |  main() {
+  try {                                             |    try {
+    let value = /*STOP*/"world";                    |      var value = /*STOP*/"world";
+    dart.throw(dart.str`Hello, ${value}`);          |      // Comment
+  } catch (e) {                                     |      throw "Hello, $value";
+
+Stop #2
+
+  try {                                             |      var value = "world";
+    let value = "world";                            |      // Comment
+    /*STOP*/dart.throw(dart.str`Hello, ${value}`);  |      /*STOP*/throw "Hello, $value";
+  } catch (e) {                                     |    }
+    let st = dart.stackTrace(e);                    |    // Comment
+
+Stop #3
+
+    dart.throw(dart.str`Hello, ${value}`);          |    }
+  } catch (e) {                                     |    // Comment
+    let st = /*STOP*/dart.stackTrace(e);            |    catch (e, /*STOP*/st) {
+    {                                               |      print(e);
+      core.print(e);                                |      print(st);
+
+[...]
+```
diff --git a/pkg/dev_compiler/test/sourcemap/common.dart b/pkg/dev_compiler/test/sourcemap/common.dart
index 9b551d8..967c7ad 100644
--- a/pkg/dev_compiler/test/sourcemap/common.dart
+++ b/pkg/dev_compiler/test/sourcemap/common.dart
@@ -4,10 +4,9 @@
 
 import 'dart:io';
 
-import 'package:expect/minitest.dart';
 import 'package:path/path.dart' as path;
-import 'package:source_maps/source_maps.dart';
 import 'package:sourcemap_testing/src/annotated_code_helper.dart';
+import 'package:sourcemap_testing/src/stepping_helper.dart';
 import 'package:testing/testing.dart';
 
 class Data {
@@ -17,34 +16,6 @@
   List<String> d8Output;
 }
 
-class DartStackTraceDataEntry {
-  final String file;
-  final int line;
-  final int column;
-  final errorString;
-  final int jsLine;
-  final int jsColumn;
-
-  DartStackTraceDataEntry(
-      this.file, this.line, this.column, this.jsLine, this.jsColumn)
-      : errorString = null;
-  DartStackTraceDataEntry.error(this.errorString)
-      : file = null,
-        line = -1,
-        column = -1,
-        jsLine = -1,
-        jsColumn = -1;
-  DartStackTraceDataEntry.errorWithJsPosition(
-      this.errorString, this.jsLine, this.jsColumn)
-      : file = null,
-        line = -1,
-        column = -1;
-
-  get isError => errorString != null;
-
-  String toString() => isError ? errorString : "$file:$line:$column";
-}
-
 abstract class ChainContextWithCleanupHelper extends ChainContext {
   Map<TestDescription, Data> cleanupHelper = {};
 
@@ -82,8 +53,7 @@
 
   Future<Result<Data>> run(Data input, ChainContext context) async {
     // stacktrace_helper assumes CWD is the sdk root dir.
-    var outerDir = getD8File().parent.parent.parent.parent;
-    Directory.current = outerDir;
+    Directory.current = sdkRoot;
     return pass(input);
   }
 }
@@ -94,55 +64,10 @@
   String get name => "step";
 
   Future<Result<Data>> run(Data data, ChainContext context) async {
-    var outputPath = data.outDir.path;
-    var outputFilename = "js.js";
-    var outputFile = path.join(outputPath, outputFilename);
-    var outWrapperPath = path.join(outputPath, "wrapper.js");
-    var outInspectorPath = path.join(outputPath, "inspector.js");
-
-    SingleMapping sourceMap =
-        parse(new File("${outputFile}.map").readAsStringSync());
-
-    Set<int> mappedToLines = sourceMap.lines
-        .map((entry) => entry.entries.map((entry) => entry.sourceLine).toSet())
-        .fold(new Set<int>(), (prev, e) => prev..addAll(e));
-
-    for (Annotation annotation
-        in data.code.annotations.where((a) => a.text.trim() == "nm")) {
-      if (mappedToLines.contains(annotation.lineNo - 1)) {
-        fail("Was not allowed to have a mapping to line "
-            "${annotation.lineNo}, but did.\n"
-            "Sourcemap looks like this (note 0-indexed):\n"
-            "${sourceMap.debugString}");
-      }
-    }
-
-    List<String> breakpoints = [];
-    // Annotations are 1-based, js breakpoints are 0-based.
-    for (Annotation breakAt
-        in data.code.annotations.where((a) => a.text.trim() == "bl")) {
-      breakpoints.add(getJsBreakpointLine(sourceMap, breakAt.lineNo - 1));
-    }
-    for (Annotation breakAt in data.code.annotations
-        .where((a) => a.text.trim().startsWith("bc:"))) {
-      breakpoints.add(getJsBreakpointLineAndColumn(
-          sourceMap, breakAt.lineNo - 1, breakAt.columnNo - 1));
-    }
-
-    String inspectorPath = new File.fromUri(Platform.script).parent.path +
-        Platform.pathSeparator +
-        "jsHelpers" +
-        Platform.pathSeparator +
-        "inspector.js";
-    new File(inspectorPath).copySync(outInspectorPath);
-    String debugAction = "Debugger.stepInto";
-    if (data.code.annotations
-        .any((a) => a.text.trim() == "Debugger:stepOver")) {
-      debugAction = "Debugger.stepOver";
-    }
-
-    ProcessResult runResult =
-        runD8(outInspectorPath, outWrapperPath, debugAction, breakpoints);
+    var outWrapperPathRelative =
+        path.relative(path.join(data.outDir.path, "wrapper.js"));
+    ProcessResult runResult = runD8AndStep(
+        data.outDir.path, data.code, ['--module', outWrapperPathRelative]);
     data.d8Output = runResult.stdout.split("\n");
     return pass(data);
   }
@@ -156,348 +81,13 @@
   String get name => "check";
 
   Future<Result<Data>> run(Data data, ChainContext context) async {
-    var outputPath = data.outDir.path;
-    var outputFilename = "js.js";
-    var outputFile = path.join(outputPath, outputFilename);
-
-    SingleMapping sourceMap =
-        parse(new File("${outputFile}.map").readAsStringSync());
-
-    List<List<DartStackTraceDataEntry>> result =
-        extractStackTraces(data.d8Output, sourceMap, outputFilename);
-
-    List<DartStackTraceDataEntry> trace =
-        result.map((entry) => entry.first).toList();
-    if (debug) debugPrint(trace, outputPath);
-
-    List<String> recordStops = trace
-        .where((entry) => !entry.isError)
-        .map((entry) => "$entry")
-        .toList();
-
-    Set<int> recordStopLines = trace
-        .where((entry) => !entry.isError)
-        .map((entry) => entry.line)
-        .toSet();
-    Set<String> recordStopLineColumns = trace
-        .where((entry) => !entry.isError)
-        .map((entry) => "${entry.line}:${entry.column}")
-        .toSet();
-
-    List<String> expectedStops = [];
-    for (Annotation annotation in data.code.annotations.where((annotation) =>
-        annotation.text.trim().startsWith("s:") ||
-        annotation.text.trim().startsWith("sl:") ||
-        annotation.text.trim().startsWith("bc:"))) {
-      String text = annotation.text.trim();
-      int stopNum = int.parse(text.substring(text.indexOf(":") + 1));
-      if (expectedStops.length < stopNum) expectedStops.length = stopNum;
-      if (text.startsWith("sl:")) {
-        expectedStops[stopNum - 1] = "test.dart:${annotation.lineNo}:";
-      } else {
-        expectedStops[stopNum - 1] =
-            "test.dart:${annotation.lineNo}:${annotation.columnNo}:";
-      }
-    }
-
-    List<List<String>> noBreaksStart = [];
-    List<List<String>> noBreaksEnd = [];
-    for (Annotation annotation in data.code.annotations
-        .where((annotation) => annotation.text.trim().startsWith("nbb:"))) {
-      String text = annotation.text.trim();
-      var split = text.split(":");
-      int stopNum1 = int.parse(split[1]);
-      int stopNum2 = int.parse(split[2]);
-      if (noBreaksStart.length <= stopNum1) noBreaksStart.length = stopNum1 + 1;
-      noBreaksStart[stopNum1] ??= [];
-      if (noBreaksEnd.length <= stopNum2) noBreaksEnd.length = stopNum2 + 1;
-      noBreaksEnd[stopNum2] ??= [];
-
-      noBreaksStart[stopNum1].add("test.dart:${annotation.lineNo}:");
-      noBreaksEnd[stopNum2].add("test.dart:${annotation.lineNo}:");
-    }
-
-    checkRecordedStops(recordStops, expectedStops, noBreaksStart, noBreaksEnd);
-
-    for (Annotation annotation in data.code.annotations
-        .where((annotation) => annotation.text.trim() == "nb")) {
-      // Check that we didn't break where we're not allowed to.
-      if (recordStopLines.contains(annotation.lineNo)) {
-        fail("Was not allowed to stop on line ${annotation.lineNo}, but did!");
-      }
-    }
-    for (Annotation annotation in data.code.annotations
-        .where((annotation) => annotation.text.trim() == "nbc")) {
-      // Check that we didn't break where we're not allowed to.
-      if (recordStopLineColumns
-          .contains("${annotation.lineNo}:${annotation.columnNo}")) {
-        fail(
-            "Was not allowed to stop on line ${annotation.lineNo} column ${annotation.columnNo}, but did!");
-      }
-    }
-
-    if (data.code.annotations.any((a) => a.text.trim() == "fail")) {
-      fail("Test contains 'fail' annotation.");
-    }
-
+    checkD8Steps(data.outDir.path, data.d8Output, data.code, debug: debug);
     return pass(data);
   }
-
-  void debugPrint(List<DartStackTraceDataEntry> trace, String outputPath) {
-    StringBuffer sb = new StringBuffer();
-    var jsFile =
-        new File(path.join(outputPath, "js.js")).readAsStringSync().split("\n");
-    var dartFile = new File(path.join(outputPath, "test.dart"))
-        .readAsStringSync()
-        .split("\n");
-
-    List<String> getSnippet(List<String> data, int line, int column) {
-      List<String> result = new List<String>.filled(5, "");
-      if (line < 0 || column < 0) return result;
-
-      for (int i = 0; i < 5; ++i) {
-        int j = line - 2 + i;
-        if (j < 0 || j >= data.length) continue;
-        result[i] = data[j];
-      }
-      if (result[2].length >= column) {
-        result[2] = result[2].substring(0, column) +
-            "/*STOP*/" +
-            result[2].substring(column);
-      }
-      return result;
-    }
-
-    List<String> sideBySide(List<String> a, List<String> b, int columns) {
-      List<String> result = new List<String>(a.length);
-      for (int i = 0; i < a.length; ++i) {
-        String left = a[i].padRight(columns).substring(0, columns);
-        String right = b[i].padRight(columns).substring(0, columns);
-        result[i] = left + "  |  " + right;
-      }
-      return result;
-    }
-
-    for (int i = 0; i < trace.length; ++i) {
-      sb.write("\n\nStop #${i + 1}\n\n");
-      if (trace[i].isError && trace[i].jsLine < 0) {
-        sb.write("${trace[i].errorString}\n");
-        continue;
-      }
-      var jsSnippet = getSnippet(jsFile, trace[i].jsLine, trace[i].jsColumn);
-      var dartSnippet =
-          getSnippet(dartFile, trace[i].line - 1, trace[i].column - 1);
-      var view = sideBySide(jsSnippet, dartSnippet, 60);
-      sb.writeAll(view, "\n");
-    }
-
-    print(sb.toString());
-  }
-}
-
-class PointMapping {
-  final int fromLine;
-  final int fromColumn;
-  final int toLine;
-  final int toColumn;
-
-  PointMapping(this.fromLine, this.fromColumn, this.toLine, this.toColumn);
-}
-
-/**
- * Input and output is expected to be 0-based.
- *
- * The "magic 4" below is taken from https://github.com/ChromeDevTools/devtools-
- * frontend/blob/fa18d70a995f06cb73365b2e5b8ae974cf60bd3a/front_end/sources/
- * JavaScriptSourceFrame.js#L1520-L1523
- */
-String getJsBreakpointLine(SingleMapping sourceMap, int breakOnLine) {
-  List<PointMapping> mappingsOnLines = [];
-  for (var line in sourceMap.lines) {
-    for (var entry in line.entries) {
-      if (entry.sourceLine >= breakOnLine &&
-          entry.sourceLine < breakOnLine + 4) {
-        mappingsOnLines.add(new PointMapping(
-            entry.sourceLine, entry.sourceColumn, line.line, entry.column));
-      }
-    }
-  }
-
-  if (mappingsOnLines.isEmpty) return null;
-
-  mappingsOnLines.sort((a, b) {
-    if (a.fromLine != b.fromLine) return a.fromLine - b.fromLine;
-    if (a.fromColumn != b.fromColumn) return a.fromColumn - b.fromColumn;
-    if (a.toLine != b.toLine) return a.toLine - b.toLine;
-    return a.toColumn - b.toColumn;
-  });
-  PointMapping first = mappingsOnLines.first;
-  mappingsOnLines.retainWhere((p) => p.toLine >= first.toLine);
-
-  PointMapping last = mappingsOnLines.last;
-  return "${first.toLine}:${first.toColumn}:${last.toLine}:${first.toColumn}";
-}
-
-/**
- * Input and output is expected to be 0-based.
- */
-String getJsBreakpointLineAndColumn(
-    SingleMapping sourceMap, int breakOnLine, int breakOnColumn) {
-  for (var line in sourceMap.lines) {
-    for (var entry in line.entries) {
-      if (entry.sourceLine == breakOnLine &&
-          entry.sourceColumn == breakOnColumn)
-        return "${line.line}:${entry.column}";
-    }
-  }
-  return null;
-}
-
-ProcessResult runD8(String outInspectorPath, String outWrapperPath,
-    String debugAction, List<String> breakpoints) {
-  var outInspectorPathRelative = path.relative(outInspectorPath);
-  var outWrapperPathRelative = path.relative(outWrapperPath);
-  ProcessResult runResult = Process.runSync(
-      d8Executable,
-      [
-        '--enable-inspector',
-        outInspectorPathRelative,
-        '--module',
-        outWrapperPathRelative,
-        "--",
-        debugAction
-      ]..addAll(breakpoints.where((s) => s != null)));
-  if (runResult.exitCode != 0) {
-    print(runResult.stderr);
-    print(runResult.stdout);
-    throw "Exit code: ${runResult.exitCode} from d8";
-  }
-  return runResult;
-}
-
-List<List<DartStackTraceDataEntry>> extractStackTraces(
-    lines, SingleMapping sourceMap, String outputFilename) {
-  List<List<DartStackTraceDataEntry>> result = [];
-  bool inStackTrace = false;
-  List<String> currentStackTrace = <String>[];
-  for (var line in lines) {
-    if (line.trim() == "--- Debugger stacktrace start ---") {
-      inStackTrace = true;
-    } else if (line.trim() == "--- Debugger stacktrace end ---") {
-      result
-          .add(extractStackTrace(currentStackTrace, sourceMap, outputFilename));
-      currentStackTrace.clear();
-      inStackTrace = false;
-    } else if (inStackTrace) {
-      currentStackTrace.add(line.trim());
-    }
-  }
-  return result;
-}
-
-List<DartStackTraceDataEntry> extractStackTrace(
-    List<String> js, SingleMapping sourceMap, String wantedFile) {
-  List<DartStackTraceDataEntry> result = [];
-  for (String line in js) {
-    if (!line.contains("$wantedFile:")) {
-      result
-          .add(new DartStackTraceDataEntry.error("Not correct file @ '$line'"));
-      continue;
-    }
-    Iterable<Match> ms = new RegExp(r"(\d+):(\d+)").allMatches(line);
-    if (ms.isEmpty) {
-      result.add(new DartStackTraceDataEntry.error(
-          "Line and column not found for '$line'"));
-      continue;
-    }
-    Match m = ms.first;
-    int l = int.parse(m.group(1));
-    int c = int.parse(m.group(2));
-    SourceMapSpan span = sourceMap.spanFor(l, c);
-    if (span?.start == null) {
-      result.add(new DartStackTraceDataEntry.errorWithJsPosition(
-          "Source map not found for '$line'", l, c));
-      continue;
-    }
-    var file = span.sourceUrl?.pathSegments?.last ?? "(unknown file)";
-    result.add(new DartStackTraceDataEntry(
-        file, span.start.line + 1, span.start.column + 1, l, c));
-  }
-  return result;
-}
-
-void checkRecordedStops(List<String> recordStops, List<String> expectedStops,
-    List<List<String>> noBreaksStart, List<List<String>> noBreaksEnd) {
-  // We want to find all expected lines in recorded lines in order, but allow
-  // more in between in the recorded lines.
-  // noBreaksStart and noBreaksStart gives instructions on what's *NOT* allowed
-  // to be between those points though.
-
-  int expectedIndex = 0;
-  Set<String> aliveNoBreaks = new Set<String>();
-  if (noBreaksStart.length > 0 && noBreaksStart[0] != null) {
-    aliveNoBreaks.addAll(noBreaksStart[0]);
-  }
-  for (String recorded in recordStops) {
-    if (expectedIndex == expectedStops.length) break;
-    if ("$recorded:".contains(expectedStops[expectedIndex])) {
-      ++expectedIndex;
-      if (noBreaksStart.length > expectedIndex &&
-          noBreaksStart[expectedIndex] != null) {
-        aliveNoBreaks.addAll(noBreaksStart[expectedIndex]);
-      }
-      if (noBreaksEnd.length > expectedIndex &&
-          noBreaksEnd[expectedIndex] != null) {
-        aliveNoBreaks.removeAll(noBreaksEnd[expectedIndex]);
-      }
-    } else if (aliveNoBreaks
-        .contains("${(recorded.split(":")..removeLast()).join(":")}:")) {
-      fail("Break '$recorded' was found when it wasn't allowed");
-    }
-  }
-  if (expectedIndex != expectedStops.length) {
-    // Didn't find everything.
-    fail("Expected to find $expectedStops but found $recordStops");
-  }
-}
-
-File _cachedD8File;
-File getD8File() {
-  File attemptFileFromDir(Directory dir) {
-    if (Platform.isWindows) {
-      return new File(dir.path + Platform.pathSeparator + "d8/windows/d8.exe");
-    } else if (Platform.isLinux) {
-      return new File(dir.path + Platform.pathSeparator + "d8/linux/d8");
-    } else if (Platform.isMacOS) {
-      return new File(dir.path + Platform.pathSeparator + "d8/macos/d8");
-    }
-    throw new UnsupportedError('Unsupported platform.');
-  }
-
-  File search() {
-    Directory dir = new File.fromUri(Platform.script).parent;
-    while (dir.path.length > 1) {
-      for (var entry in dir.listSync()) {
-        if (entry is! Directory) continue;
-        if (entry.path.endsWith("third_party")) {
-          List<String> segments = entry.uri.pathSegments;
-          if (segments[segments.length - 2] == "third_party") {
-            File possibleD8 = attemptFileFromDir(entry);
-            if (possibleD8.existsSync()) return possibleD8;
-          }
-        }
-      }
-      dir = dir.parent;
-    }
-
-    throw "Cannot find D8 directory.";
-  }
-
-  return _cachedD8File ??= search();
 }
 
 File findInOutDir(String relative) {
-  var outerDir = getD8File().parent.parent.parent.parent.path;
+  var outerDir = sdkRoot.path;
   for (var outDir in const ["out/ReleaseX64", "xcodebuild/ReleaseX64"]) {
     var tryPath = path.join(outerDir, outDir, relative);
     File file = new File(tryPath);
@@ -506,10 +96,6 @@
   throw "Couldn't find $relative. Try building more targets.";
 }
 
-String get d8Executable {
-  return getD8File().path;
-}
-
 String get dartExecutable {
   return Platform.resolvedExecutable;
 }
diff --git a/pkg/dev_compiler/test/sourcemap/sourcemaps_ddc.status b/pkg/dev_compiler/test/sourcemap/sourcemaps_ddc.status
index 37c54ff..954a843 100644
--- a/pkg/dev_compiler/test/sourcemap/sourcemaps_ddc.status
+++ b/pkg/dev_compiler/test/sourcemap/sourcemaps_ddc.status
@@ -13,3 +13,18 @@
 /next_through_assign_call_test: Crash
 /method_call_with_named_parameters: Crash
 /method_call_with_named_parameters_no_given: Crash
+/call_on_field_in_class: Crash
+/next_through_assign_int_test: Crash
+/next_through_catch_test: Crash
+/next_through_for_each_loop_test: Crash
+/next_through_operator_bracket_on_this_test: Crash
+/next_through_operator_bracket_test: Crash
+/hello_async: Crash
+/next_through_is_and_as_test: Crash
+/next_through_multi_catch_test: Crash
+/step_through_async_star_yield: Crash
+/step_through_await_for: Crash
+/step_through_conditional_expression: Crash
+/step_through_if_and_identical: Crash
+/step_through_property_get_test: Crash
+/step_through_sync_star: Crash
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/call_on_field_in_class.dart b/pkg/dev_compiler/test/sourcemap/testfiles/call_on_field_in_class.dart
new file mode 100644
index 0000000..9ca2539
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/call_on_field_in_class.dart
@@ -0,0 +1,25 @@
+// 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.
+
+main() {
+  /* bl */ var foo = new /*s:1*/ Foo();
+  foo.foo = foo. /*s:2*/ fooMethod;
+  foo. /*s:3*/ fooMethod();
+  // Stepping into this doesn't really work because what it does is something
+  // like this:
+  // main -> dart.dsend -> dart.callMethod -> get foo ->
+  // (back in dart.callMethod) -> dart._checkAndCall -> fooMethod
+  // which seems unlikely to be something the user is going to step through.
+  // As a "fix" here a breakpoint has been set on the line in fooMethod.
+  foo. /*s:5*/ foo();
+}
+
+class Foo {
+  var foo;
+
+  void fooMethod() {
+    /*bl*/ /*s:4*/ /*s:6*/ print("Hello from fooMethod");
+    /*nbb:0:4*/
+  }
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/hello_async.dart b/pkg/dev_compiler/test/sourcemap/testfiles/hello_async.dart
index 11c1c30..a462a3b 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/hello_async.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/hello_async.dart
@@ -5,9 +5,10 @@
 main() {
   /*bl*/
   /*s:1*/ foo();
-/*s:2*/
+/*nbb:0:3*/ /*s:3*/
 }
 
 foo() async {
-  /*nbb:0:3*/ /*bc:3*/ print("hello from foo");
+  /*nbb:0:4*/ /*bc:4*/ print("hello from foo");
+/*s:2*/
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assert.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assert.dart
new file mode 100644
index 0000000..0b692fa
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assert.dart
@@ -0,0 +1,12 @@
+// 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.
+
+/*Debugger:stepOver*/
+main() {
+  assert(/*bc:1*/ foo());
+}
+
+foo() {
+  return true;
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assign_call_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assign_call_test.dart
index e51ce0a..7e78059 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assign_call_test.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assign_call_test.dart
@@ -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.
 
+/*Debugger:stepOver*/
 main() {
   /*nb*/ int a;
   /*nb*/ int b;
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assign_int_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assign_int_test.dart
new file mode 100644
index 0000000..bed6ec6
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_assign_int_test.dart
@@ -0,0 +1,21 @@
+// 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.
+
+/*Debugger:stepOver*/
+main() {
+  /*nb*/ int a;
+  /*nb*/ int b;
+  /*bl*/
+  /*s:1*/ a = b = 42;
+  /*s:2*/ print(a);
+  /*s:3*/ print(b);
+  /*s:4*/ a = 42;
+  /*s:5*/ print(a);
+  int d = /*s:6*/ 42;
+  /*s:7*/ print(d);
+  int e = /*s:8*/ 41, f, g = /*s:9*/ 42;
+  /*s:10*/ print(e);
+  /*s:11*/ print(f);
+  /*s:12*/ print(g);
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_catch_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_catch_test.dart
new file mode 100644
index 0000000..777af94
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_catch_test.dart
@@ -0,0 +1,25 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+main() {
+  /*bl*/
+  try {
+    /*sl:1*/ var value = "world";
+    // Comment
+    /*sl:2*/ /*nbb:2:7*/ throw "Hello, $value";
+  }
+  // Comment
+  catch (e, /*s:3*/ st) {
+    /*sl:4*/ print(e);
+    /*sl:5*/ print(st);
+  }
+  try {
+    // Comment
+    /*sl:6*/ /*nbb:6:7*/ throw "Hello, world";
+  } catch (e) {
+    /*sl:7*/ print(e);
+  }
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_for_each_loop_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_for_each_loop_test.dart
new file mode 100644
index 0000000..112a8fb
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_for_each_loop_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+/*Debugger:stepOver*/
+main() {
+  /*bl*/ /*sl:1*/ List<int> data = [1, 2, 3];
+  for (
+      // comment forcing formatting
+      /*sl:3*/ /*sl:5*/ /*sl:7*/ /*sl:8*/ int datapoint
+      // comment forcing formatting
+      in
+      // comment forcing formatting
+      /*sl:2*/ data
+      // comment forcing formatting
+      ) {
+    /*sl:4*/ /*sl:6*/ /*sl:8*/ print(datapoint);
+  }
+  /*sl:9 */ print("Done");
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_for_loop_with_break_and_continue_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_for_loop_with_break_and_continue_test.dart
new file mode 100644
index 0000000..c51f64f
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_for_loop_with_break_and_continue_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+/*Debugger:stepOver*/
+main() {
+  /*bl*/ /*sl:1*/ int count = 0;
+  for (/*sl:2*/ int i = 0;
+      /*sl:3*/ /*sl:8*/ /*sl:13*/ /*sl:17*/ /*nbb:18:21*/ i < 42;
+      /*sl:7*/ /*sl:12*/ /*sl:16*/ /*nbb:17:21*/ ++i) {
+    /*sl:4*/ /*sl:9*/ /*sl:14*/ /*sl:18*/ /*nbb:19:21*/ if (i == 2) {
+      /*sl:15*/ continue;
+    }
+    /*sl:5*/ /*sl:10*/ /*sl:19*/ if (i == 3) {
+      /*sl:20*/ break;
+    }
+    /*sl:6*/ /*sl:11*/ count++;
+  }
+  /*s:21*/ print(count);
+}
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
new file mode 100644
index 0000000..2af352e
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_is_and_as_test.dart
@@ -0,0 +1,34 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+main() {
+  /*bl*/
+  /*sl:1*/ var i = 42.42;
+  /*sl:2*/ var hex = 0x42;
+  if (/*bc:3*/ foo() /*bc:4*/ is int) {
+    /*bc:5*/ print("foo is int");
+  }
+  if (i /*bc:6*/ is int) {
+    print("i is int");
+  }
+  if (i /*bc:7*/ is! int) {
+    /*bc:8*/ print("i is not int");
+  }
+  if (hex /*bc:9*/ is int) {
+    /*bc:10*/ print("hex is int");
+    int x = hex /*bc:11*/ as int;
+    if (x. /*bc:12*/ isEven) {
+      /*bc:13*/ print("it's even even!");
+    } else {
+      print("but it's not even even!");
+    }
+  }
+  if (hex /*bc:14*/ is! int) {
+    print("hex is not int");
+  }
+}
+
+foo() => 42;
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_map_creation.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_map_creation.dart
new file mode 100644
index 0000000..83e19bb
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_map_creation.dart
@@ -0,0 +1,19 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+main() {
+  /*bl*/
+  var x = {/*bc:1*/ foo(): /*bc:2*/ bar() };
+  /*sl:3*/ print(x);
+}
+
+int foo() {
+  return 42;
+}
+
+int bar() {
+  return 2;
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_multi_catch_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_multi_catch_test.dart
new file mode 100644
index 0000000..e2c30d0
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_multi_catch_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+main() {
+  /*bl*/
+  try {
+    /*sl:1*/ throw "Boom!";
+  } /*bc:2*/ on StateError {
+    /*nb*/ print("StateError");
+  } /*bc:3*/ on ArgumentError catch (e) {
+    /*nb*/ print("ArgumentError: $e");
+  } catch (e) {
+    /*bc:4*/ print(e);
+  }
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_super_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_super_test.dart
new file mode 100644
index 0000000..ff8c7cd
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_super_test.dart
@@ -0,0 +1,27 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+class Class2 {
+  operator [](index) => index;
+
+  code() {
+    this[42];
+    return this[42];
+  }
+}
+
+class Class3 extends Class2 {
+  code() {
+    /*bl*/ /*sl:1*/ super[42];
+    /*sl:2*/ return super[42];
+  }
+}
+
+main() {
+  Class3 c = new Class3();
+  c[42];
+  c.code();
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_this_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_this_test.dart
new file mode 100644
index 0000000..83db815
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_this_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+class Class2 {
+  operator [](index) => index;
+
+  code() {
+    /*bl*/ this /*s:1*/ [42];
+    return this /*sl:2*/ [42];
+  }
+}
+
+main() {
+  Class2 c = new Class2();
+  c[42];
+  c.code();
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_test.dart
new file mode 100644
index 0000000..3f96857
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+class Class2 {
+  operator [](index) => index;
+
+  code() {
+    this[42];
+    return this[42];
+  }
+}
+
+main() {
+  /*bl*/ /*sl:1*/ Class2 c = new Class2();
+  c /*s:2*/ [42];
+  c. /*s:3*/ code();
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_static_set.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_static_set.dart
new file mode 100644
index 0000000..a621285
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_static_set.dart
@@ -0,0 +1,15 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+var bar = 0;
+
+main() {
+  bar = /*bc:1*/ foo();
+}
+
+int foo() {
+  return 42;
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_string_concatenation.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_string_concatenation.dart
new file mode 100644
index 0000000..2db6757
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_string_concatenation.dart
@@ -0,0 +1,15 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+main() {
+  var qux;
+  qux = "${/*bc:1*/foo()} x ${/*bc:2*/bar()} x ${/*bc:3*/baz()}";
+  print(qux);
+}
+
+String foo() => "a";
+String bar() => "b";
+String baz() => "c";
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_string_plus.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_string_plus.dart
new file mode 100644
index 0000000..382044e
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_string_plus.dart
@@ -0,0 +1,14 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+main() {
+  var qux;
+  qux = /*bc:1*/ foo() + /*bc:2*/ bar();
+  print(qux);
+}
+
+String foo() => "a";
+String bar() => "b";
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_throw.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_throw.dart
new file mode 100644
index 0000000..586d52d
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_throw.dart
@@ -0,0 +1,17 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+main() {
+  try {
+    throw /*bc:1*/ foo();
+  } catch (e) {
+    print(e);
+  }
+}
+
+foo() {
+  return 42;
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_variable_set.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_variable_set.dart
new file mode 100644
index 0000000..50177f2
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_variable_set.dart
@@ -0,0 +1,16 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+main() {
+  /*bl*/
+  /*sl:1*/ var x = 0;
+  x = /*bc:2*/ foo();
+  /*sl:3*/ print(x);
+}
+
+int foo() {
+  return 42;
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_yield.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_yield.dart
new file mode 100644
index 0000000..05ca943
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_yield.dart
@@ -0,0 +1,23 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+main() {
+  for (int i in naturalsTo(2)) {
+    print(i);
+  }
+}
+
+Iterable<int> naturalsTo(int n) sync* {
+  /*bl*/
+  /*sl:1*/ int k = 0;
+  /*sl:2*/ /*sl:4*/ /*sl:6*/ while (k < n) {
+    yield /*bc:3*/ /*bc:5*/ foo(++k);
+  }
+}
+
+int foo(int n) {
+  return n;
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_async_star_yield.dart b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_async_star_yield.dart
new file mode 100644
index 0000000..ec3cab3
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_async_star_yield.dart
@@ -0,0 +1,23 @@
+// 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.
+
+main() async {
+  await for (var i in foobar()) {
+    print(i);
+  }
+  print("Done!");
+}
+
+foobar() async* {
+  /*bc:4*/ yield /*bc:1*/ foo() /*bc:3*/ + /*bc:2*/ bar();
+  /*bc:8*/ yield /*bc:5*/ bar() /*bc:7*/ * /*bc:6*/ foo();
+}
+
+foo() {
+  return 42;
+}
+
+bar() {
+  return 3;
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_await_for.dart b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_await_for.dart
new file mode 100644
index 0000000..25bb182
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_await_for.dart
@@ -0,0 +1,22 @@
+// 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.
+
+main() async {
+  /* bl */
+  /*sl:1 */ print("About to loop!");
+  await for (var /*s:3*/ /*s:5*/ i in /*s:2*/ foobar()) {
+    /*s:4*/ /*s:6*/ /*nbb:6:7*/ print(i);
+  }
+  /*s:7*/ /*nbb:7:8*/ print("Done!");
+  /*nbb:0:7*/
+  /*s:8*/
+}
+
+foobar() async* {
+  // The testing framework should not step into the 'real body' at all.
+  /*nb*/
+  yield 1;
+  /*nb*/
+  yield 2;
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_conditional_expression.dart b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_conditional_expression.dart
new file mode 100644
index 0000000..8d68e54
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_conditional_expression.dart
@@ -0,0 +1,22 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+main() {
+  print(/*bc:1*/ foo() ? bar() : /*bc:2*/ baz());
+  print(/*bc:4*/ ! /*bc:3*/ foo() ? /*bc:5*/ bar() : baz());
+}
+
+foo() {
+  return false;
+}
+
+bar() {
+  return "bar";
+}
+
+baz() {
+  return "baz";
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_if_and_identical.dart b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_if_and_identical.dart
new file mode 100644
index 0000000..5a04d5a
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_if_and_identical.dart
@@ -0,0 +1,22 @@
+// 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.
+
+/*Debugger:stepOver*/
+
+main() {
+  if (/*bc:1*/ foo() /*bc:3*/ == /*bc:2*/ bar()) {
+    print("wat?!?");
+  }
+  if (identical(/*bc:4*/ foo(), /*bc:5*/ bar())) {
+    print("wat?!?");
+  }
+}
+
+foo() {
+  return 42;
+}
+
+bar() {
+  return 43;
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_property_get_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_property_get_test.dart
new file mode 100644
index 0000000..f24c928
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_property_get_test.dart
@@ -0,0 +1,40 @@
+// 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.
+
+main() {
+  Bar bar = new Bar();
+  bar.doStuff();
+}
+
+class Foo {
+  final List<String> /*s:7*/ /*s:9*/ /*s:12*/ /*s:14*/ data1;
+
+  Foo() : data1 = ["a", "b", "c"];
+
+  void doStuff() {
+    print(data1);
+    print(data1[1]);
+  }
+}
+
+class Bar extends Foo {
+  final List<String> /*s:2*/ /*s:4*/ data2;
+  Foo data3;
+
+  Bar() : data2 = ["d", "e", "f"] {
+    data3 = this;
+  }
+
+  void doStuff() {
+    /* bl */
+    /*s:1*/ print(data2);
+    /*s:3*/ print(data2 /*s:5*/ [1]);
+
+    /*s:6*/ print(data1);
+    /*s:8*/ print(data1 /*s:10*/ [1]);
+
+    /*s:11*/ print(super.data1);
+    /*s:13*/ print(super.data1 /*s:15*/ [1]);
+  }
+}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_sync_star.dart b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_sync_star.dart
new file mode 100644
index 0000000..84bb777
--- /dev/null
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_sync_star.dart
@@ -0,0 +1,18 @@
+// 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.
+
+main() {
+  /* bl */
+  /*sl:1*/ var iterator = naturalsTo(2);
+  for (int /*bc:3*/ /*bc:8*/ /*bc:12*/ i in /*bc:2*/ iterator) {
+    /*bc:7*/ /*bc:11*/ print(i);
+  }
+}
+
+Iterable<int> naturalsTo(int n) sync* {
+  /*sl:4*/ int k = 0;
+  /*sl:5*/ /*sl:9*/ /*sl:13*/ while (k < n) {
+    /*nbb:0:6*/ /*sl:6*/ /*sl:10*/ yield ++k;
+  }
+}
diff --git a/pkg/dev_compiler/tool/build_pkgs.dart b/pkg/dev_compiler/tool/build_pkgs.dart
index f9495b0..b67fbb2 100755
--- a/pkg/dev_compiler/tool/build_pkgs.dart
+++ b/pkg/dev_compiler/tool/build_pkgs.dart
@@ -3,9 +3,9 @@
 import 'dart:io';
 
 import 'package:args/args.dart';
-import 'package:front_end/compilation_message.dart';
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/summary_generator.dart';
+import 'package:front_end/src/api_prototype/compilation_message.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/summary_generator.dart';
 import 'package:path/path.dart' as p;
 
 import 'package:dev_compiler/src/analyzer/command.dart' as analyzer;
diff --git a/pkg/dev_compiler/tool/input_sdk/lib/html/dart2js/html_dart2js.dart b/pkg/dev_compiler/tool/input_sdk/lib/html/dart2js/html_dart2js.dart
index ace637d..8f5a4f5 100644
--- a/pkg/dev_compiler/tool/input_sdk/lib/html/dart2js/html_dart2js.dart
+++ b/pkg/dev_compiler/tool/input_sdk/lib/html/dart2js/html_dart2js.dart
@@ -31010,7 +31010,7 @@
   // Override default options, since IE returns SelectElement itself and it
   // does not operate as a List.
   List<OptionElement> get options {
-    var options = this.querySelectorAll<OptionElement>('option');
+    dynamic options = this.querySelectorAll<OptionElement>('option');
     return new UnmodifiableListView(options.toList());
   }
 
@@ -42008,7 +42008,8 @@
    */
   set height(dynamic newHeight) {
     if (newHeight is Dimension) {
-      if (newHeight.value < 0) newHeight = new Dimension.px(0);
+      Dimension newHeightAsDimension = newHeight;
+      if (newHeightAsDimension.value < 0) newHeight = new Dimension.px(0);
       _element.style.height = newHeight.toString();
     } else if (newHeight is num) {
       if (newHeight < 0) newHeight = 0;
@@ -42028,7 +42029,8 @@
    */
   set width(dynamic newWidth) {
     if (newWidth is Dimension) {
-      if (newWidth.value < 0) newWidth = new Dimension.px(0);
+      Dimension newWidthAsDimension = newWidth;
+      if (newWidthAsDimension.value < 0) newWidth = new Dimension.px(0);
       _element.style.width = newWidth.toString();
     } else if (newWidth is num) {
       if (newWidth < 0) newWidth = 0;
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/isolate_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/isolate_patch.dart
index b00c1d8..07293e6 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/isolate_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/isolate_patch.dart
@@ -8,8 +8,6 @@
 import 'dart:_isolate_helper'
     show CapabilityImpl, IsolateNatives, ReceivePortImpl, RawReceivePortImpl;
 
-typedef _UnaryFunction(arg);
-
 @patch
 class Isolate {
   static final _currentIsolateCache = IsolateNatives.currentIsolate;
@@ -38,7 +36,7 @@
   }
 
   @patch
-  static Future<Isolate> spawn(void entryPoint(message), var message,
+  static Future<Isolate> spawn<T>(void entryPoint(T message), T message,
       {bool paused: false,
       bool errorsAreFatal,
       SendPort onExit,
@@ -46,11 +44,6 @@
     bool forcePause =
         (errorsAreFatal != null) || (onExit != null) || (onError != null);
     try {
-      // Check for the type of `entryPoint` on the spawning isolate to make
-      // error-handling easier.
-      if (entryPoint is! _UnaryFunction) {
-        throw new ArgumentError(entryPoint);
-      }
       // TODO: Consider passing the errorsAreFatal/onExit/onError values
       //       as arguments to the internal spawnUri instead of setting
       //       them after the isolate has been created.
diff --git a/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart b/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart
index e75af52..20941a0 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart
@@ -936,7 +936,7 @@
   }
 
   static Future<List> spawnFunction(
-      void topLevelFunction(message), var message, bool startPaused) {
+      void topLevelFunction(Null message), var message, bool startPaused) {
     IsolateNatives.enableSpawnWorker = true;
     final name = _getJSFunctionName(topLevelFunction);
     if (name == null) {
diff --git a/pkg/dev_compiler/tool/kernel_sdk.dart b/pkg/dev_compiler/tool/kernel_sdk.dart
index 6a7452a..ac35ee2 100755
--- a/pkg/dev_compiler/tool/kernel_sdk.dart
+++ b/pkg/dev_compiler/tool/kernel_sdk.dart
@@ -8,8 +8,8 @@
 import 'package:dev_compiler/src/compiler/module_builder.dart';
 import 'package:dev_compiler/src/kernel/target.dart';
 import 'package:dev_compiler/src/kernel/command.dart';
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/kernel_generator.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/kernel_generator.dart';
 import 'package:kernel/kernel.dart';
 import 'package:path/path.dart' as path;
 import 'patch_sdk.dart' as patch_sdk;
diff --git a/pkg/front_end/example/incremental_reload/compiler_with_invalidation.dart b/pkg/front_end/example/incremental_reload/compiler_with_invalidation.dart
index 688fb24..f164c52 100644
--- a/pkg/front_end/example/incremental_reload/compiler_with_invalidation.dart
+++ b/pkg/front_end/example/incremental_reload/compiler_with_invalidation.dart
@@ -10,9 +10,9 @@
 import 'dart:io';
 import 'dart:async';
 
-import 'package:front_end/byte_store.dart';
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/incremental_kernel_generator.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/binary/limited_ast_to_binary.dart';
 import 'package:kernel/target/targets.dart';
diff --git a/pkg/front_end/lib/byte_store.dart b/pkg/front_end/lib/src/api_prototype/byte_store.dart
similarity index 100%
rename from pkg/front_end/lib/byte_store.dart
rename to pkg/front_end/lib/src/api_prototype/byte_store.dart
diff --git a/pkg/front_end/lib/compilation_message.dart b/pkg/front_end/lib/src/api_prototype/compilation_message.dart
similarity index 100%
rename from pkg/front_end/lib/compilation_message.dart
rename to pkg/front_end/lib/src/api_prototype/compilation_message.dart
diff --git a/pkg/front_end/lib/compiler_options.dart b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
similarity index 98%
rename from pkg/front_end/lib/compiler_options.dart
rename to pkg/front_end/lib/src/api_prototype/compiler_options.dart
index 205aaa2..4927af0 100644
--- a/pkg/front_end/lib/compiler_options.dart
+++ b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
@@ -4,7 +4,7 @@
 
 library front_end.compiler_options;
 
-import 'package:front_end/byte_store.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:kernel/target/targets.dart' show Target;
 
diff --git a/pkg/front_end/lib/dependency_grapher.dart b/pkg/front_end/lib/src/api_prototype/dependency_grapher.dart
similarity index 96%
rename from pkg/front_end/lib/dependency_grapher.dart
rename to pkg/front_end/lib/src/api_prototype/dependency_grapher.dart
index 6120490..fed5df9 100644
--- a/pkg/front_end/lib/dependency_grapher.dart
+++ b/pkg/front_end/lib/src/api_prototype/dependency_grapher.dart
@@ -4,7 +4,7 @@
 
 import 'dart:async';
 
-import 'package:front_end/compiler_options.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
 import 'package:front_end/src/base/processed_options.dart';
 import 'package:front_end/src/dependency_grapher_impl.dart' as impl;
 
diff --git a/pkg/front_end/lib/file_system.dart b/pkg/front_end/lib/src/api_prototype/file_system.dart
similarity index 100%
rename from pkg/front_end/lib/file_system.dart
rename to pkg/front_end/lib/src/api_prototype/file_system.dart
diff --git a/pkg/front_end/lib/front_end.dart b/pkg/front_end/lib/src/api_prototype/front_end.dart
similarity index 100%
rename from pkg/front_end/lib/front_end.dart
rename to pkg/front_end/lib/src/api_prototype/front_end.dart
diff --git a/pkg/front_end/lib/incremental_kernel_generator.dart b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
similarity index 96%
rename from pkg/front_end/lib/incremental_kernel_generator.dart
rename to pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
index c08284c..1f5afbf 100644
--- a/pkg/front_end/lib/incremental_kernel_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
@@ -138,8 +138,10 @@
   /// 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]);
+      {ProcessedOptions processedOptions,
+      WatchUsedFilesFn watch,
+      bool useMinimalGenerator: false}) async {
+    processedOptions ??= new ProcessedOptions(options, false, [entryPoint]);
     return await CompilerContext.runWithOptions(processedOptions, (_) async {
       var uriTranslator = await processedOptions.getUriTranslator();
       var sdkOutlineBytes = await processedOptions.loadSdkSummaryBytes();
diff --git a/pkg/front_end/lib/kernel_generator.dart b/pkg/front_end/lib/src/api_prototype/kernel_generator.dart
similarity index 94%
rename from pkg/front_end/lib/kernel_generator.dart
rename to pkg/front_end/lib/src/api_prototype/kernel_generator.dart
index aae71f0..e37423a 100644
--- a/pkg/front_end/lib/kernel_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/kernel_generator.dart
@@ -11,11 +11,11 @@
 import 'package:kernel/kernel.dart' show Program;
 
 import 'compiler_options.dart';
-import 'src/base/processed_options.dart';
-import 'src/fasta/fasta_codes.dart';
-import 'src/fasta/compiler_context.dart';
-import 'src/fasta/severity.dart';
-import 'src/kernel_generator_impl.dart';
+import '../base/processed_options.dart';
+import '../fasta/fasta_codes.dart';
+import '../fasta/compiler_context.dart';
+import '../fasta/severity.dart';
+import '../kernel_generator_impl.dart';
 
 /// Generates a kernel representation of the program whose main library is in
 /// the given [source].
diff --git a/pkg/front_end/lib/memory_file_system.dart b/pkg/front_end/lib/src/api_prototype/memory_file_system.dart
similarity index 100%
rename from pkg/front_end/lib/memory_file_system.dart
rename to pkg/front_end/lib/src/api_prototype/memory_file_system.dart
diff --git a/pkg/front_end/lib/physical_file_system.dart b/pkg/front_end/lib/src/api_prototype/physical_file_system.dart
similarity index 100%
rename from pkg/front_end/lib/physical_file_system.dart
rename to pkg/front_end/lib/src/api_prototype/physical_file_system.dart
diff --git a/pkg/front_end/lib/summary_generator.dart b/pkg/front_end/lib/src/api_prototype/summary_generator.dart
similarity index 95%
rename from pkg/front_end/lib/summary_generator.dart
rename to pkg/front_end/lib/src/api_prototype/summary_generator.dart
index 539cc2b..6557156 100644
--- a/pkg/front_end/lib/summary_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/summary_generator.dart
@@ -8,8 +8,8 @@
 import 'dart:async';
 import 'compiler_options.dart';
 
-import 'src/base/processed_options.dart';
-import 'src/kernel_generator_impl.dart';
+import '../base/processed_options.dart';
+import '../kernel_generator_impl.dart';
 
 /// Creates a summary representation of the build unit whose source files are in
 /// [sources].
diff --git a/pkg/front_end/lib/src/api_unstable/ddc.dart b/pkg/front_end/lib/src/api_unstable/ddc.dart
new file mode 100644
index 0000000..158fd59
--- /dev/null
+++ b/pkg/front_end/lib/src/api_unstable/ddc.dart
@@ -0,0 +1,98 @@
+// 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' show Future;
+
+import 'package:front_end/src/base/processed_options.dart';
+import 'package:front_end/src/fasta/scanner/token.dart' show StringToken;
+import 'package:front_end/src/kernel_generator_impl.dart';
+import 'package:kernel/kernel.dart' show Program;
+import 'package:kernel/target/targets.dart' show Target;
+
+import '../api_prototype/compiler_options.dart';
+
+export '../api_prototype/compilation_message.dart';
+
+class DdcResult {
+  final Program program;
+  final List<Program> inputSummaries;
+
+  DdcResult(this.program, this.inputSummaries);
+}
+
+class InitializedCompilerState {
+  final CompilerOptions options;
+  final ProcessedOptions processedOpts;
+
+  InitializedCompilerState(this.options, this.processedOpts);
+}
+
+Future<InitializedCompilerState> initializeCompiler(
+    InitializedCompilerState oldState,
+    Uri sdkSummary,
+    Uri packagesFile,
+    List<Uri> inputSummaries,
+    Target target) async {
+  inputSummaries.sort((a, b) => a.toString().compareTo(b.toString()));
+  bool listEqual(List<Uri> a, List<Uri> b) {
+    if (a.length != b.length) return false;
+    for (int i = 0; i < a.length; ++i) {
+      if (a[i] != b[i]) return false;
+    }
+    return true;
+  }
+
+  if (oldState != null &&
+      oldState.options.sdkSummary == sdkSummary &&
+      oldState.options.packagesFileUri == packagesFile &&
+      listEqual(oldState.options.inputSummaries, inputSummaries)) {
+    // Reuse old state.
+
+    // These libraries are marked external when compiling. If not un-marking
+    // them compilation will fail.
+    // Remove once [kernel_generator_impl.dart] no longer marks the libraries
+    // as external.
+    (await oldState.processedOpts.loadSdkSummary(null))
+        .libraries
+        .forEach((lib) => lib.isExternal = false);
+    (await oldState.processedOpts.loadInputSummaries(null))
+        .forEach((p) => p.libraries.forEach((lib) => lib.isExternal = false));
+
+    // Avoid static leak.
+    StringToken.canonicalizer.clear();
+
+    return oldState;
+  }
+
+  CompilerOptions options = new CompilerOptions()
+    ..sdkSummary = sdkSummary
+    ..packagesFileUri = packagesFile
+    ..inputSummaries = inputSummaries
+    ..target = target
+    ..chaseDependencies = true
+    ..reportMessages = true;
+
+  ProcessedOptions processedOpts = new ProcessedOptions(options, true, []);
+
+  return new InitializedCompilerState(options, processedOpts);
+}
+
+Future<DdcResult> compile(InitializedCompilerState compilerState,
+    List<Uri> inputs, ErrorHandler errorHandler) async {
+  CompilerOptions options = compilerState.options;
+  options..onError = errorHandler;
+
+  ProcessedOptions processedOpts = compilerState.processedOpts;
+  processedOpts.inputs.clear();
+  processedOpts.inputs.addAll(inputs);
+
+  var compilerResult = await generateKernel(processedOpts);
+
+  var program = compilerResult?.program;
+  if (program == null) return null;
+
+  // This should be cached.
+  var summaries = await processedOpts.loadInputSummaries(null);
+  return new DdcResult(program, summaries);
+}
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index 2fb8054..1e8a345 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -4,10 +4,10 @@
 
 import 'dart:async';
 
-import 'package:front_end/compilation_message.dart';
-import 'package:front_end/byte_store.dart';
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/file_system.dart';
+import 'package:front_end/src/api_prototype/compilation_message.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/file_system.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:front_end/src/fasta/fasta_codes.dart';
 import 'package:front_end/src/fasta/problems.dart' show unimplemented;
diff --git a/pkg/front_end/lib/src/dependency_grapher_impl.dart b/pkg/front_end/lib/src/dependency_grapher_impl.dart
index d763be2..f22f992 100644
--- a/pkg/front_end/lib/src/dependency_grapher_impl.dart
+++ b/pkg/front_end/lib/src/dependency_grapher_impl.dart
@@ -4,7 +4,7 @@
 
 import 'dart:async';
 
-import 'package:front_end/dependency_grapher.dart';
+import 'package:front_end/src/api_prototype/dependency_grapher.dart';
 import 'package:front_end/src/async_dependency_walker.dart';
 import 'package:front_end/src/base/processed_options.dart';
 import 'package:front_end/src/fasta/parser.dart';
@@ -22,7 +22,7 @@
 /// they are read directly from `options.fileSystem`.
 ///
 /// This is intended for internal use by the front end.  Clients should use
-/// package:front_end/dependency_grapher.dart.
+/// package:front_end/src/api_prototype/dependency_grapher.dart.
 Future<Graph> graphForProgram(List<Uri> sources, ProcessedOptions options,
     {FileReader fileReader}) async {
   UriTranslator uriTranslator = await options.getUriTranslator();
diff --git a/pkg/front_end/lib/src/external_state_snapshot.dart b/pkg/front_end/lib/src/external_state_snapshot.dart
new file mode 100644
index 0000000..c77c4486
--- /dev/null
+++ b/pkg/front_end/lib/src/external_state_snapshot.dart
@@ -0,0 +1,37 @@
+// 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.
+
+// TODO(ahe): Remove this file.
+
+import 'package:kernel/kernel.dart' show Library, LibraryDependency, Program;
+
+/// Helper class to work around modifications in [kernel_generator_impl.dart].
+class ExternalStateSnapshot {
+  final List<ExternalState> snapshots;
+
+  ExternalStateSnapshot(Program program)
+      : snapshots = new List<ExternalState>.from(program.libraries.map((l) =>
+            new ExternalState(l, l.dependencies.toList(), l.isExternal)));
+
+  void restore() {
+    for (ExternalState state in snapshots) {
+      state.restore();
+    }
+  }
+}
+
+class ExternalState {
+  final Library library;
+  final List<LibraryDependency> dependencies;
+  final bool isExternal;
+
+  ExternalState(this.library, this.dependencies, this.isExternal);
+
+  void restore() {
+    library.isExternal = isExternal;
+    library.dependencies
+      ..clear()
+      ..addAll(dependencies);
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/builder/builder.dart b/pkg/front_end/lib/src/fasta/builder/builder.dart
index 2a5d7d7..a23ee34 100644
--- a/pkg/front_end/lib/src/fasta/builder/builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/builder.dart
@@ -83,12 +83,6 @@
 
   Uri get fileUri => null;
 
-  // TODO(ahe): We can get rid of this if we switch to absolute URIs everywhere.
-  String get relativeFileUri {
-    throw "The relativeFileUri method should be only called on subclasses "
-        "which have an efficient implementation of `relativeFileUri`!";
-  }
-
   /// Resolve constructors (lookup names in scope) recorded in this builder and
   /// return the number of constructors resolved.
   int resolveConstructors(LibraryBuilder parent) => 0;
diff --git a/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart b/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart
index f5daee4..3ea7514 100644
--- a/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart
@@ -14,7 +14,7 @@
         Scope,
         TypeBuilder;
 
-import '../messages.dart' show templateConstructorNotFound, warning;
+import '../messages.dart' show templateConstructorNotFound;
 
 class ConstructorReferenceBuilder extends Builder {
   final Object name;
@@ -59,8 +59,10 @@
           suffix ?? "", charOffset, fileUri, accessingLibrary);
     }
     if (target == null) {
-      warning(templateConstructorNotFound.withArguments(fullNameForErrors),
-          charOffset, fileUri);
+      accessingLibrary.addWarning(
+          templateConstructorNotFound.withArguments(fullNameForErrors),
+          charOffset,
+          fileUri);
     }
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
index 5e451b8..b441474 100644
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
@@ -16,15 +16,9 @@
     show
         LocatedMessage,
         Message,
-        error,
-        nit,
-        report,
         templateInternalProblemConstructorNotFound,
         templateInternalProblemNotFoundIn,
-        templateInternalProblemPrivateConstructorAccess,
-        warning;
-
-import '../severity.dart' show Severity;
+        templateInternalProblemPrivateConstructorAccess;
 
 import 'builder.dart'
     show
@@ -35,8 +29,7 @@
         PrefixBuilder,
         Scope,
         ScopeBuilder,
-        TypeBuilder,
-        VoidTypeBuilder;
+        TypeBuilder;
 
 abstract class LibraryBuilder<T extends TypeBuilder, R>
     extends ModifierBuilder {
@@ -86,37 +79,24 @@
   /// arguments passed to this method.
   ///
   /// If [fileUri] is null, it defaults to `this.fileUri`.
-  void addCompileTimeError(Message message, int charOffset, Uri uri,
-      {bool silent: false, bool wasHandled: false, LocatedMessage context}) {
+  void addCompileTimeError(Message message, int charOffset, Uri fileUri,
+      {bool wasHandled: false, LocatedMessage context}) {
+    fileUri ??= this.fileUri;
     hasCompileTimeErrors = true;
-    loader.addCompileTimeError(message, charOffset, uri,
-        silent: silent, wasHandled: wasHandled, context: context);
+    loader.addCompileTimeError(message, charOffset, fileUri,
+        wasHandled: wasHandled, context: context);
   }
 
-  void addWarning(Message message, int charOffset, Uri uri,
-      {bool silent: false, LocatedMessage context}) {
-    if (!silent) {
-      warning(message, charOffset, uri);
-      if (context != null) {
-        report(context, Severity.warning);
-      }
-    }
+  void addWarning(Message message, int charOffset, Uri fileUri,
+      {LocatedMessage context}) {
+    fileUri ??= this.fileUri;
+    loader.addWarning(message, charOffset, fileUri, context: context);
   }
 
-  void addError(Message message, int charOffset, Uri uri,
-      {bool silent: false, LocatedMessage context}) {
-    if (!silent) {
-      error(message, charOffset, uri);
-      if (context != null) {
-        report(context, Severity.error);
-      }
-    }
-  }
-
-  void addNit(Message message, int charOffset, Uri uri, {bool silent: false}) {
-    if (!silent) {
-      nit(message, charOffset, uri);
-    }
+  void addNit(Message message, int charOffset, Uri fileUri,
+      {LocatedMessage context}) {
+    fileUri ??= this.fileUri;
+    loader.addNit(message, charOffset, fileUri, context: context);
   }
 
   /// Returns true if the export scope was modified.
@@ -200,10 +180,9 @@
 
   int finishTypeVariables(ClassBuilder object) => 0;
 
-  void becomeCoreLibrary(dynamicType, voidType) {
+  void becomeCoreLibrary(dynamicType) {
     addBuilder("dynamic",
         new DynamicTypeBuilder<T, dynamic>(dynamicType, this, -1), -1);
-    addBuilder("void", new VoidTypeBuilder<T, dynamic>(voidType, this, -1), -1);
   }
 
   void forEach(void f(String name, Builder builder)) {
@@ -219,10 +198,9 @@
   Builder operator [](String name) {
     return scope.local[name] ??
         internalProblem(
-            templateInternalProblemNotFoundIn.withArguments(
-                name, relativeFileUri),
+            templateInternalProblemNotFoundIn.withArguments(name, "$fileUri"),
             -1,
-            null);
+            fileUri);
   }
 
   Builder lookup(String name, int charOffset, Uri fileUri) {
diff --git a/pkg/front_end/lib/src/fasta/builder/modifier_builder.dart b/pkg/front_end/lib/src/fasta/builder/modifier_builder.dart
index 7e11f0b..2cb6afa 100644
--- a/pkg/front_end/lib/src/fasta/builder/modifier_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/modifier_builder.dart
@@ -14,33 +14,15 @@
         namedMixinApplicationMask,
         staticMask;
 
-import '../util/relativize.dart' show relativizeUri;
-
 import 'builder.dart' show Builder;
 
-String relativizeUriWithParent(Uri uri, Builder parent) {
-  // TODO(ahe): We should be able to get rid of this method if relativeFileUri
-  // is removed.
-  if (parent is ModifierBuilder && uri == parent.fileUri) {
-    return parent.relativeFileUri;
-  } else {
-    uri ??= parent?.fileUri;
-    return uri == null ? null : relativizeUri(uri);
-  }
-}
-
 abstract class ModifierBuilder extends Builder {
   final int charOffset;
 
-  // TODO(ahe): This can be shared with the underlying kernel node if we switch
-  // to using URIs everywhere.
   final Uri fileUri;
 
-  final String relativeFileUri;
-
   ModifierBuilder(Builder parent, this.charOffset, [Uri fileUri])
       : fileUri = fileUri ?? parent?.fileUri,
-        relativeFileUri = relativizeUriWithParent(fileUri, parent),
         super(parent, charOffset, fileUri ?? parent?.fileUri);
 
   int get modifiers;
diff --git a/pkg/front_end/lib/src/fasta/command_line_reporting.dart b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
index e52c225..531debb 100644
--- a/pkg/front_end/lib/src/fasta/command_line_reporting.dart
+++ b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
@@ -63,7 +63,7 @@
 
     if (uri != null) {
       String path = relativizeUri(uri);
-      Location location = offset == -1 ? null : getLocation(path, offset);
+      Location location = offset == -1 ? null : getLocation(uri, offset);
       String sourceLine = getSourceLine(location);
       if (sourceLine == null) {
         sourceLine = "";
@@ -74,8 +74,9 @@
         sourceLine = "\n$sourceLine\n"
             "${' ' * (location.column - 1)}^";
       }
-      String position = location?.toString() ?? path;
-      return "$position: $text$sourceLine";
+      String position =
+          location == null ? "" : ":${location.line}:${location.column}";
+      return "$path$position: $text$sourceLine";
     } else {
       return text;
     }
diff --git a/pkg/front_end/lib/src/fasta/compiler_context.dart b/pkg/front_end/lib/src/fasta/compiler_context.dart
index 04f3303..5a319d0 100644
--- a/pkg/front_end/lib/src/fasta/compiler_context.dart
+++ b/pkg/front_end/lib/src/fasta/compiler_context.dart
@@ -6,8 +6,8 @@
 
 import 'dart:async' show Zone, runZoned;
 
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/file_system.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/file_system.dart';
 import 'package:front_end/src/base/processed_options.dart';
 import 'package:front_end/src/fasta/fasta_codes.dart';
 import 'package:kernel/ast.dart' show Source;
@@ -39,7 +39,7 @@
   /// This is populated as the compiler reads files, and it is used for error
   /// reporting and to generate source location information in the compiled
   /// programs.
-  final Map<String, Source> uriToSource = <String, Source>{};
+  final Map<Uri, Source> uriToSource = <Uri, Source>{};
 
   FileSystem get fileSystem => options.fileSystem;
 
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
index 6b0f7af..3e122a4 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
@@ -23,7 +23,7 @@
   final libraries = <Library>[];
 
   /// Sources for all appended programs.
-  final Map<String, Source> uriToSource = <String, Source>{};
+  final Map<Uri, Source> uriToSource = <Uri, Source>{};
 
   DillLoader(TargetImplementation target) : super(target);
 
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes.dart b/pkg/front_end/lib/src/fasta/fasta_codes.dart
index 3423701..d596666 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes.dart
@@ -6,6 +6,8 @@
 
 import 'package:kernel/ast.dart' show DartType;
 
+import 'package:kernel/text/ast_to_text.dart' show NameSystem, Printer;
+
 import '../scanner/token.dart' show Token;
 
 import 'util/relativize.dart' as util show relativizeUri;
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index bc6c20e..a9acecf 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -1095,7 +1095,6 @@
 const Template<Message Function(String string)> templateExpectedButGot =
     const Template<Message Function(String string)>(
         messageTemplate: r"""Expected '#string' before this.""",
-        tipTemplate: r"""DONT_KNOW_HOW_TO_FIX,""",
         withArguments: _withArgumentsExpectedButGot);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1109,7 +1108,6 @@
 Message _withArgumentsExpectedButGot(String string) {
   return new Message(codeExpectedButGot,
       message: """Expected '$string' before this.""",
-      tip: """DONT_KNOW_HOW_TO_FIX,""",
       arguments: {'string': string});
 }
 
@@ -1154,6 +1152,26 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(Token token)> templateExpectedClassMember =
+    const Template<Message Function(Token token)>(
+        messageTemplate: r"""Expected a class member, but got '#lexeme'.""",
+        withArguments: _withArgumentsExpectedClassMember);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(Token token)> codeExpectedClassMember =
+    const Code<Message Function(Token token)>(
+        "ExpectedClassMember", templateExpectedClassMember,
+        analyzerCode: "EXPECTED_CLASS_MEMBER", dart2jsCode: "*fatal*");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsExpectedClassMember(Token token) {
+  String lexeme = token.lexeme;
+  return new Message(codeExpectedClassMember,
+      message: """Expected a class member, but got '$lexeme'.""",
+      arguments: {'token': token});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateExpectedDeclaration =
     const Template<Message Function(Token token)>(
         messageTemplate: r"""Expected a declaration, but got '#lexeme'.""",
@@ -2302,10 +2320,10 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
-        DartType type,
+        DartType _type,
         DartType
-            type2)> templateInvalidAssignment = const Template<
-        Message Function(DartType type, DartType type2)>(
+            _type2)> templateInvalidAssignment = const Template<
+        Message Function(DartType _type, DartType _type2)>(
     messageTemplate:
         r"""A value of type '#type' can't be assigned to a variable of type '#type2'.""",
     tipTemplate:
@@ -2313,19 +2331,28 @@
     withArguments: _withArgumentsInvalidAssignment);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(DartType type, DartType type2)>
+const Code<Message Function(DartType _type, DartType _type2)>
     codeInvalidAssignment =
-    const Code<Message Function(DartType type, DartType type2)>(
+    const Code<Message Function(DartType _type, DartType _type2)>(
         "InvalidAssignment", templateInvalidAssignment,
         analyzerCode: "INVALID_ASSIGNMENT", dart2jsCode: "*ignored*");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsInvalidAssignment(DartType type, DartType type2) {
+Message _withArgumentsInvalidAssignment(DartType _type, DartType _type2) {
+  NameSystem nameSystem = new NameSystem();
+  StringBuffer buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
+  String type = '$buffer';
+
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
+  String type2 = '$buffer';
+
   return new Message(codeInvalidAssignment,
       message:
           """A value of type '$type' can't be assigned to a variable of type '$type2'.""",
       tip: """Try changing the type of the left hand side, or casting the right hand side to '$type2'.""",
-      arguments: {'type': type, 'type2': type2});
+      arguments: {'type': _type, 'type2': _type2});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/front_end/lib/src/fasta/get_dependencies.dart b/pkg/front_end/lib/src/fasta/get_dependencies.dart
index e2c4bb1..b9d7999 100644
--- a/pkg/front_end/lib/src/fasta/get_dependencies.dart
+++ b/pkg/front_end/lib/src/fasta/get_dependencies.dart
@@ -10,9 +10,9 @@
 
 import 'package:kernel/target/targets.dart' show Target;
 
-import '../../compiler_options.dart' show CompilerOptions;
+import '../api_prototype/compiler_options.dart' show CompilerOptions;
 
-import '../../file_system.dart' show FileSystem;
+import '../api_prototype/file_system.dart' show FileSystem;
 
 import '../base/processed_options.dart' show ProcessedOptions;
 
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 8acb232..e2aebdf 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -454,14 +454,14 @@
         }
         field.initializer = initializer;
         _typeInferrer.inferFieldInitializer(
-            field.hasImplicitType ? null : field.builtType, initializer);
+            this, field.hasImplicitType ? null : field.builtType, initializer);
       }
     }
     pop(); // Type.
     pop(); // Modifiers.
     List annotations = pop();
     if (annotations != null) {
-      _typeInferrer.inferMetadata(annotations);
+      _typeInferrer.inferMetadata(this, annotations);
       Field field = fields.first.target;
       // The first (and often only field) will not get a clone.
       annotations.forEach((annotation) => field.addAnnotation(annotation));
@@ -577,7 +577,7 @@
       }
       initializer = buildInvalidInitializer(node, token.charOffset);
     }
-    _typeInferrer.inferInitializer(initializer);
+    _typeInferrer.inferInitializer(this, initializer);
     if (member is KernelConstructorBuilder && !member.isExternal) {
       member.addInitializer(initializer, _typeInferrer);
     } else {
@@ -613,12 +613,12 @@
             parameter.initializer ?? new ShadowNullLiteral();
         realParameter.initializer = initializer..parent = realParameter;
         _typeInferrer.inferParameterInitializer(
-            initializer, realParameter.type);
+            this, initializer, realParameter.type);
       }
     }
 
     _typeInferrer.inferFunctionBody(
-        _computeReturnTypeContext(member), asyncModifier, body);
+        this, _computeReturnTypeContext(member), asyncModifier, body);
     if (builder.kind == ProcedureKind.Setter) {
       bool oneParameter = formals != null &&
           formals.required.length == 1 &&
@@ -653,7 +653,7 @@
       }
     }
     Member target = builder.target;
-    _typeInferrer.inferMetadata(annotations);
+    _typeInferrer.inferMetadata(this, annotations);
     for (Expression annotation in annotations ?? const []) {
       target.addAnnotation(annotation);
     }
@@ -670,7 +670,7 @@
   @override
   List<Expression> finishMetadata() {
     List<Expression> expressions = pop();
-    _typeInferrer.inferMetadata(expressions);
+    _typeInferrer.inferMetadata(this, expressions);
     return expressions;
   }
 
@@ -994,9 +994,7 @@
     Name kernelName = new Name(name, library.library);
     LocatedMessage context;
     if (candidate != null) {
-      // TODO(ahe): Not sure `candidate.location.file` is guaranteed to be
-      // relative to Uri.base.
-      Uri uri = Uri.base.resolve(candidate.location.file);
+      Uri uri = candidate.location.file;
       int offset = candidate.fileOffset;
       Message message;
       if (offset == -1 && candidate is Constructor) {
@@ -1052,7 +1050,7 @@
         ? fasta.templateSuperclassHasNoGetter.withArguments(name.name)
         : fasta.templateGetterNotFound.withArguments(name.name);
     if (reportWarning) {
-      warning(message, charOffset, name.name.length, context: context);
+      addWarning(message, charOffset, name.name.length, context: context);
     }
     return message;
   }
@@ -1064,7 +1062,7 @@
         ? fasta.templateSuperclassHasNoSetter.withArguments(name.name)
         : fasta.templateSetterNotFound.withArguments(name.name);
     if (reportWarning) {
-      warning(message, charOffset, name.name.length, context: context);
+      addWarning(message, charOffset, name.name.length, context: context);
     }
     return message;
   }
@@ -1076,14 +1074,14 @@
         ? fasta.templateSuperclassHasNoMethod.withArguments(name.name)
         : fasta.templateMethodNotFound.withArguments(name.name);
     if (reportWarning) {
-      warning(message, charOffset, name.name.length, context: context);
+      addWarning(message, charOffset, name.name.length, context: context);
     }
     return message;
   }
 
   @override
   void warnTypeArgumentsMismatch(String name, int expected, int charOffset) {
-    warning(
+    addWarning(
         fasta.templateTypeArgumentMismatch.withArguments(name, '${expected}'),
         charOffset,
         name.length);
@@ -1962,7 +1960,8 @@
     Expression condition = pop();
     typePromoter.exitConditional();
     push(new ShadowConditionalExpression(
-        condition, thenExpression, elseExpression));
+        condition, thenExpression, elseExpression)
+      ..fileOffset = question.offset);
   }
 
   @override
@@ -2146,7 +2145,8 @@
         ]);
       }
     }
-    push(new Catch(exception, body, guard: type, stackTrace: stackTrace));
+    push(new Catch(exception, body, guard: type, stackTrace: stackTrace)
+      ..fileOffset = offsetForToken(onKeyword));
   }
 
   @override
@@ -2779,6 +2779,7 @@
     }
     VariableDeclaration variable;
     bool declaresVariable = false;
+    ShadowSyntheticExpression syntheticAssignment;
     if (lvalue is VariableDeclaration) {
       declaresVariable = true;
       variable = lvalue;
@@ -2797,18 +2798,23 @@
       ///       lvalue = #t;
       ///       body;
       ///     }
-      variable = new VariableDeclaration.forValue(null);
+      variable =
+          new ShadowVariableDeclaration.forValue(null, functionNestingLevel);
+      var fact = typePromoter.getFactForAccess(variable, functionNestingLevel);
+      var scope = typePromoter.currentScope;
+      syntheticAssignment = lvalue.buildAssignment(
+          new ShadowVariableGet(variable, fact, scope)
+            ..fileOffset = inKeyword.offset,
+          voidContext: true);
       body = combineStatements(
-          new ShadowExpressionStatement(lvalue
-              .buildAssignment(new VariableGet(variable), voidContext: true)),
-          body);
+          new ShadowLoopAssignmentStatement(syntheticAssignment), body);
     } else {
       variable = new VariableDeclaration.forValue(
           deprecated_buildCompileTimeError("Expected lvalue, but got ${lvalue}",
               forToken.next.next.charOffset));
     }
     Statement result = new ShadowForInStatement(
-        variable, expression, body, declaresVariable,
+        variable, expression, body, declaresVariable, syntheticAssignment,
         isAsync: awaitToken != null)
       ..fileOffset = awaitToken?.charOffset ?? forToken.charOffset
       ..bodyOffset = body.fileOffset;
@@ -2935,33 +2941,11 @@
         break;
 
       case Assert.Initializer:
-        push(buildAssertInitializer(statement));
+        push(new ShadowAssertInitializer(statement));
         break;
     }
   }
 
-  Initializer buildAssertInitializer(AssertStatement statement) {
-    // Since kernel only has asserts in statment form, we convert it to an
-    // expression by wrapping it in an anonymous function which we call
-    // immediately.
-    //
-    // Additionally, kernel has no initializer that evaluates an expression,
-    // but it does have `LocalInitializer` which requires a variable declartion.
-    //
-    // So we produce an initializer like this:
-    //
-    //    var #t0 = (() { statement; }) ()
-    return new ShadowAssertInitializer(
-        new VariableDeclaration.forValue(buildMethodInvocation(
-            new FunctionExpression(new FunctionNode(statement)),
-            callName,
-            new Arguments.empty(),
-            statement.fileOffset,
-            isConstantExpression: true,
-            isImplicitCall: true)),
-        statement);
-  }
-
   @override
   void endYieldStatement(Token yieldToken, Token starToken, Token endToken) {
     debugEvent("YieldStatement");
@@ -3254,15 +3238,13 @@
   @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
-    /// TODO(danrubel): Ignore this error until we deprecate `native` support.
     if (message == messageNativeClauseShouldBeAnnotation) {
+      // TODO(danrubel): Ignore this error until we deprecate `native` support.
       return;
     }
-    bool silent = hasParserError ||
-        message.code == fasta.codeFinalFieldWithoutInitializer ||
-        message.code == fasta.codeConstFieldWithoutInitializer;
-    deprecated_addCompileTimeError(offsetForToken(startToken), message.message,
-        silent: silent);
+    int start = offsetForToken(startToken);
+    int length = (start == -1) ? 1 : (offsetForToken(endToken) - start);
+    addCompileTimeError(message, start, length);
   }
 
   @override
@@ -3319,7 +3301,7 @@
     return new Throw(buildStaticInvocation(
         library.loader.coreTypes.fallThroughErrorUrlAndLineConstructor,
         new Arguments(<Expression>[
-          new StringLiteral(location?.file ?? uri.toString()),
+          new StringLiteral("${location?.file ?? uri}"),
           new IntLiteral(location?.line ?? 0)
         ]),
         charOffset: charOffset));
@@ -3328,7 +3310,7 @@
   Expression buildAbstractClassInstantiationError(
       Message message, String className,
       [int charOffset = -1]) {
-    warning(message, charOffset, className.length);
+    addWarning(message, charOffset, className.length);
     Builder constructor = library.loader.getAbstractClassInstantiationError();
     return new Throw(buildStaticInvocation(constructor.target,
         new ShadowArguments(<Expression>[new StringLiteral(className)])));
@@ -3460,12 +3442,12 @@
 
   @override
   dynamic deprecated_addCompileTimeError(int charOffset, String message,
-      {bool silent: false, bool wasHandled: false}) {
+      {bool wasHandled: false}) {
     // TODO(ahe): If constantExpressionRequired is set, set it to false to
     // avoid a long list of errors.
     return library.addCompileTimeError(
         fasta.templateUnspecified.withArguments(message), charOffset, uri,
-        silent: silent, wasHandled: wasHandled);
+        wasHandled: wasHandled);
   }
 
   @override
@@ -3480,25 +3462,6 @@
     }
   }
 
-  void warningNotError(Message message, int charOffset) {
-    library.addWarning(message, charOffset, uri);
-  }
-
-  @override
-  void warning(Message message, int offset, int length,
-      {LocatedMessage context}) {
-    if (constantExpressionRequired) {
-      addCompileTimeError(message, offset, length);
-    } else {
-      library.addWarning(message, offset, uri, context: context);
-    }
-  }
-
-  @override
-  void nit(Message message, int charOffset) {
-    library.addNit(message, charOffset, uri);
-  }
-
   @override
   DartType validatedTypeVariableUse(
       TypeParameterType type, int offset, bool nonInstanceAccessIsError) {
@@ -3508,7 +3471,7 @@
       if (nonInstanceAccessIsError) {
         addCompileTimeError(message, offset, length);
       } else {
-        warning(message, offset, length);
+        addWarning(message, offset, length);
       }
       return const InvalidType();
     } else if (constantExpressionRequired) {
@@ -3561,7 +3524,7 @@
           warnUnresolvedMethod(name, offset, isSuper: true);
         } else if (!areArgumentsCompatible(target.function, arguments)) {
           target = null;
-          warning(
+          addWarning(
               fasta.templateSuperclassMethodArgumentMismatch
                   .withArguments(name.name),
               offset,
@@ -3598,8 +3561,27 @@
   }
 
   @override
-  void addCompileTimeError(Message message, int offset, int length) {
-    library.addCompileTimeError(message, offset, uri);
+  void addCompileTimeError(Message message, int charOffset, int length) {
+    library.addCompileTimeError(message, charOffset, uri);
+  }
+
+  void warningNotError(Message message, int charOffset) {
+    library.addWarning(message, charOffset, uri);
+  }
+
+  @override
+  void addWarning(Message message, int charOffset, int length,
+      {LocatedMessage context}) {
+    if (constantExpressionRequired) {
+      addCompileTimeError(message, charOffset, length);
+    } else {
+      library.addWarning(message, charOffset, uri, context: context);
+    }
+  }
+
+  @override
+  void addNit(Message message, int charOffset) {
+    library.addNit(message, charOffset, uri);
   }
 
   @override
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 9f1f4e5..043cb46 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -89,6 +89,8 @@
 
   Expression buildCompileTimeError(Message message, int charOffset);
 
+  Expression wrapInCompileTimeError(Expression expression, Message message);
+
   Expression deprecated_buildCompileTimeError(String error, [int offset]);
 
   Initializer buildInvalidInitializer(Expression expression, [int offset]);
@@ -122,8 +124,7 @@
 
   StaticGet makeStaticGet(Member readTarget, Token token);
 
-  dynamic deprecated_addCompileTimeError(int charOffset, String message,
-      {bool silent});
+  dynamic deprecated_addCompileTimeError(int charOffset, String message);
 
   bool isIdentical(Member member);
 
@@ -138,7 +139,7 @@
   DartType validatedTypeVariableUse(
       TypeParameterType type, int offset, bool nonInstanceAccessIsError);
 
-  void warning(Message message, int offset, int length);
+  void addWarning(Message message, int charOffset, int length);
 
   Message warnUnresolvedGet(Name name, int charOffset, {bool isSuper});
 
@@ -792,7 +793,7 @@
 
   Expression doInvocation(int offset, Arguments arguments) {
     if (arguments.positional.length > 0 || arguments.named.length > 0) {
-      helper.warning(
+      helper.addWarning(
           messageLoadLibraryTakesNoArguments, offset, 'loadLibrary'.length);
     }
     return builder.createLoadLibrary(offset);
@@ -998,7 +999,7 @@
         KernelInvalidTypeBuilder declaration = this.declaration;
         helper.library.addWarning(
             declaration.message, declaration.charOffset, declaration.fileUri);
-        helper.warning(declaration.message, offset, token.length);
+        helper.addWarning(declaration.message, offset, token.length);
         super.expression = new Throw(
             new StringLiteral(declaration.message.message)
               ..fileOffset = offsetForToken(token))
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_builder.dart
index 50b7510..3f5fddd 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_builder.dart
@@ -67,7 +67,7 @@
 }
 
 int compareProcedures(Procedure a, Procedure b) {
-  int i = a.fileUri.compareTo(b.fileUri);
+  int i = "${a.fileUri}".compareTo("${b.fileUri}");
   if (i != 0) return i;
   return a.fileOffset.compareTo(b.fileOffset);
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
index 9599523..a97e69a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
@@ -31,7 +31,6 @@
 
 import '../fasta_codes.dart'
     show
-        messageEnumDeclarationEmpty,
         messageNoUnnamedConstructorInObject,
         templateDuplicatedName,
         templateEnumConstantSameNameAsEnclosing;
@@ -221,12 +220,6 @@
   @override
   Class build(KernelLibraryBuilder libraryBuilder, LibraryBuilder coreLibrary) {
     cls.isEnum = true;
-    if (constantNamesAndOffsetsAndDocs.isEmpty) {
-      // TODO(ahe): Remove this check when parser errors aren't silenced in
-      // outline builder.
-      libraryBuilder.addCompileTimeError(
-          messageEnumDeclarationEmpty, charOffset, fileUri);
-    }
     intType.resolveIn(coreLibrary.scope, charOffset, fileUri);
     stringType.resolveIn(coreLibrary.scope, charOffset, fileUri);
     objectType.resolveIn(coreLibrary.scope, charOffset, fileUri);
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
index b7a0052d..a6e179d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
@@ -49,7 +49,7 @@
       this.initializerTokenForInference,
       this.hasInitializer)
       : field = new ShadowField(null, type == null,
-            fileUri: compilationUnit?.relativeFileUri)
+            fileUri: compilationUnit?.fileUri)
           ..fileOffset = charOffset,
         super(name, modifiers, compilationUnit, charOffset);
 
@@ -111,7 +111,10 @@
             library.fileUri,
             typeInferrer);
         Parser parser = new Parser(bodyBuilder);
-        Token token = parser.parseExpression(initializerTokenForInference).next;
+        Token token = parser
+            .parseExpression(
+                parser.syntheticPreviousToken(initializerTokenForInference))
+            .next;
         Expression expression = bodyBuilder.popForValue();
         bodyBuilder.checkEmpty(token.charOffset);
         initializer = expression;
@@ -122,8 +125,8 @@
   @override
   void instrumentTopLevelInference(Instrumentation instrumentation) {
     if (isEligibleForInference) {
-      instrumentation.record(Uri.parse(field.fileUri), field.fileOffset,
-          'topType', new InstrumentationValueForType(field.type));
+      instrumentation.record(field.fileUri, field.fileOffset, 'topType',
+          new InstrumentationValueForType(field.type));
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
index df61289..723f871 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
@@ -44,8 +44,6 @@
 import '../source/source_library_builder.dart'
     show DeclarationBuilder, SourceLibraryBuilder;
 
-import '../util/relativize.dart' show relativizeUri;
-
 import 'kernel_builder.dart'
     show
         AccessErrorBuilder,
@@ -79,6 +77,7 @@
         Scope,
         TypeBuilder,
         TypeVariableBuilder,
+        VoidTypeBuilder,
         compareProcedures,
         toKernelCombinators;
 
@@ -112,8 +111,7 @@
   Map<String, String> unserializableExports;
 
   KernelLibraryBuilder(Uri uri, Uri fileUri, Loader loader, this.actualOrigin)
-      : library = actualOrigin?.library ??
-            new Library(uri, fileUri: relativizeUri(fileUri)),
+      : library = actualOrigin?.library ?? new Library(uri, fileUri: fileUri),
         super(loader, fileUri);
 
   @override
@@ -136,7 +134,8 @@
   }
 
   KernelTypeBuilder addVoidType(int charOffset) {
-    return addNamedType("void", null, charOffset);
+    return addNamedType("void", null, charOffset)
+      ..bind(new VoidTypeBuilder(const VoidType(), this, charOffset));
   }
 
   void addClass(
@@ -846,7 +845,7 @@
     }
 
     for (KernelLibraryBuilder part in parts) {
-      library.addPart(new LibraryPart(<Expression>[], part.relativeFileUri));
+      library.addPart(new LibraryPart(<Expression>[], part.fileUri));
       part.addDependencies(library, seen);
     }
   }
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 1f88e35..e247e2f 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
@@ -50,8 +50,7 @@
         messageNonInstanceTypeVariableUse,
         messagePatchDeclarationMismatch,
         messagePatchDeclarationOrigin,
-        messagePatchNonExternal,
-        warning;
+        messagePatchNonExternal;
 
 import '../problems.dart' show internalProblem, unexpected;
 
@@ -185,7 +184,8 @@
               substitution[parameter] = const DynamicType();
             }
           }
-          warning(messageNonInstanceTypeVariableUse, charOffset, fileUri);
+          library.addWarning(
+              messageNonInstanceTypeVariableUse, charOffset, fileUri);
           return substitute(type, substitution);
         }
 
@@ -270,7 +270,7 @@
       [String nativeMethodName,
       this.redirectionTarget])
       : procedure = new ShadowProcedure(null, kind, null, returnType == null,
-            fileUri: compilationUnit?.relativeFileUri)
+            fileUri: compilationUnit?.fileUri)
           ..fileOffset = charOffset
           ..fileEndOffset = charEndOffset,
         super(metadata, modifiers, returnType, name, typeVariables, formals,
@@ -339,10 +339,7 @@
   void instrumentTopLevelInference(Instrumentation instrumentation) {
     bool isEligibleForTopLevelInference = this.isEligibleForTopLevelInference;
     if ((isEligibleForTopLevelInference || isSetter) && returnType == null) {
-      instrumentation.record(
-          Uri.parse(procedure.fileUri),
-          procedure.fileOffset,
-          'topType',
+      instrumentation.record(procedure.fileUri, procedure.fileOffset, 'topType',
           new InstrumentationValueForType(procedure.function.returnType));
     }
     if (isEligibleForTopLevelInference) {
@@ -350,11 +347,8 @@
         for (var formal in formals) {
           if (formal.type == null) {
             VariableDeclaration formalTarget = formal.target;
-            instrumentation.record(
-                Uri.parse(procedure.fileUri),
-                formalTarget.fileOffset,
-                'topType',
-                new InstrumentationValueForType(formalTarget.type));
+            instrumentation.record(procedure.fileUri, formalTarget.fileOffset,
+                'topType', new InstrumentationValueForType(formalTarget.type));
           }
         }
       }
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 dc31a2c..baaa720 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
@@ -18,6 +18,8 @@
 /// kernel class, because multiple constructs in Dart may desugar to a tree
 /// with the same kind of root node.
 import 'package:front_end/src/base/instrumentation.dart';
+import 'package:front_end/src/fasta/kernel/body_builder.dart';
+import 'package:front_end/src/fasta/kernel/fasta_accessors.dart';
 import 'package:front_end/src/fasta/source/source_class_builder.dart';
 import 'package:front_end/src/fasta/source/source_library_builder.dart';
 import 'package:front_end/src/fasta/type_inference/interface_resolver.dart';
@@ -118,18 +120,14 @@
 }
 
 /// Concrete shadow object representing an assert initializer in kernel form.
-class ShadowAssertInitializer extends LocalInitializer
+class ShadowAssertInitializer extends AssertInitializer
     implements ShadowInitializer {
-  /// The assert statement performing the check
-  AssertStatement _statement;
-
-  ShadowAssertInitializer(VariableDeclaration variable, this._statement)
-      : super(variable);
+  ShadowAssertInitializer(AssertStatement statement) : super(statement);
 
   @override
   void _inferInitializer(ShadowTypeInferrer inferrer) {
     inferrer.listener.assertInitializerEnter(this);
-    inferrer.inferStatement(_statement);
+    inferrer.inferStatement(statement);
     inferrer.listener.assertInitializerExit(this);
   }
 }
@@ -412,6 +410,9 @@
     return parts;
   }
 
+  DartType _getWriteType(ShadowTypeInferrer inferrer) => unhandled(
+      '$runtimeType', 'ShadowComplexAssignment._getWriteType', -1, null);
+
   _ComplexAssignmentInferenceResult _inferRhs(
       ShadowTypeInferrer inferrer, DartType readType, DartType writeContext) {
     var writeOffset = write == null ? -1 : write.fileOffset;
@@ -704,12 +705,12 @@
 
   final bool _isImplicitlyTyped;
 
-  ShadowField(Name name, this._isImplicitlyTyped, {String fileUri})
+  ShadowField(Name name, this._isImplicitlyTyped, {Uri fileUri})
       : super(name, fileUri: fileUri) {}
 
   @override
   void setInferredType(
-      TypeInferenceEngineImpl engine, String uri, DartType inferredType) {
+      TypeInferenceEngineImpl engine, Uri uri, DartType inferredType) {
     type = inferredType;
   }
 
@@ -739,8 +740,10 @@
 class ShadowForInStatement extends ForInStatement implements ShadowStatement {
   final bool _declaresVariable;
 
+  final ShadowSyntheticExpression _syntheticAssignment;
+
   ShadowForInStatement(VariableDeclaration variable, Expression iterable,
-      Statement body, this._declaresVariable,
+      Statement body, this._declaresVariable, this._syntheticAssignment,
       {bool isAsync: false})
       : super(variable, iterable, body, isAsync: isAsync);
 
@@ -752,28 +755,33 @@
         : inferrer.coreTypes.iterableClass;
     DartType context;
     bool typeNeeded = false;
+    bool typeChecksNeeded = !inferrer.isTopLevel;
     ShadowVariableDeclaration variable;
+    var syntheticAssignment = _syntheticAssignment;
     if (_declaresVariable) {
       variable = this.variable;
       if (inferrer.strongMode && variable._implicitlyTyped) {
         typeNeeded = true;
-        // TODO(paulberry): In this case, should the context be `Iterable<?>`?
+        context = const UnknownType();
       } else {
-        context = inferrer.wrapType(variable.type, iterableClass);
+        context = variable.type;
       }
+    } else if (syntheticAssignment is ShadowComplexAssignment) {
+      context = syntheticAssignment._getWriteType(inferrer);
     } else {
-      // TODO(paulberry): In this case, should the context be based on the
-      // declared type of the loop variable?
-      // TODO(paulberry): Note that when [_declaresVariable] is `false`, the
-      // body starts with an assignment from the synthetic loop variable to
-      // another variable.  We need to make sure any type inference diagnostics
-      // that occur related to this assignment are reported at the correct
-      // locations.
+      context = const UnknownType();
     }
-    var inferredExpressionType = inferrer.resolveTypeParameter(
-        inferrer.inferExpression(iterable, context, typeNeeded));
-    if (typeNeeded) {
-      var inferredType = const DynamicType();
+    context = inferrer.wrapType(context, iterableClass);
+    var inferredExpressionType = inferrer.resolveTypeParameter(inferrer
+        .inferExpression(iterable, context, typeNeeded || typeChecksNeeded));
+    inferrer.checkAssignability(
+        inferrer.wrapType(const DynamicType(), iterableClass),
+        inferredExpressionType,
+        iterable,
+        iterable.fileOffset);
+    DartType inferredType;
+    if (typeNeeded || typeChecksNeeded) {
+      inferredType = const DynamicType();
       if (inferredExpressionType is InterfaceType) {
         InterfaceType supertype = inferrer.classHierarchy
             .getTypeAsInstanceOf(inferredExpressionType, iterableClass);
@@ -781,14 +789,29 @@
           inferredType = supertype.typeArguments[0];
         }
       }
-      inferrer.instrumentation?.record(
-          Uri.parse(inferrer.uri),
-          variable.fileOffset,
-          'type',
-          new InstrumentationValueForType(inferredType));
-      variable.type = inferredType;
+      if (typeNeeded) {
+        inferrer.instrumentation?.record(inferrer.uri, variable.fileOffset,
+            'type', new InstrumentationValueForType(inferredType));
+        variable.type = inferredType;
+      }
+      if (!_declaresVariable) {
+        this.variable.type = inferredType;
+      }
     }
     inferrer.inferStatement(body);
+    if (_declaresVariable) {
+      var tempVar =
+          new VariableDeclaration(null, type: inferredType, isFinal: true);
+      var variableGet = new VariableGet(tempVar)
+        ..fileOffset = this.variable.fileOffset;
+      var implicitDowncast = inferrer.checkAssignability(
+          variable.type, inferredType, variableGet, fileOffset);
+      if (implicitDowncast != null) {
+        this.variable = tempVar..parent = this;
+        variable.initializer = implicitDowncast..parent = variable;
+        body = combineStatements(variable, body)..parent = this;
+      }
+    }
     inferrer.listener.forInStatementExit(this);
   }
 }
@@ -938,6 +961,11 @@
   ShadowIllegalAssignment(Expression rhs) : super(rhs);
 
   @override
+  DartType _getWriteType(ShadowTypeInferrer inferrer) {
+    return const UnknownType();
+  }
+
+  @override
   DartType _inferExpression(
       ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
     if (write != null) {
@@ -966,7 +994,7 @@
       return invocation.arguments;
     } else {
       throw unhandled("${invocation.runtimeType}", "_getInvocationArguments",
-          fileOffset, Uri.parse(inferrer.uri));
+          fileOffset, inferrer.uri);
     }
   }
 
@@ -1183,10 +1211,7 @@
           typeContext,
           inferredTypes);
       inferredTypeArgument = inferredTypes[0];
-      inferrer.instrumentation?.record(
-          Uri.parse(inferrer.uri),
-          fileOffset,
-          'typeArgs',
+      inferrer.instrumentation?.record(inferrer.uri, fileOffset, 'typeArgs',
           new InstrumentationValueForTypeArgs([inferredTypeArgument]));
       typeArgument = inferredTypeArgument;
     }
@@ -1228,6 +1253,23 @@
   }
 }
 
+/// Shadow object for synthetic assignments added at the top of a for-in loop.
+///
+/// This covers the case where a for-in loop refers to a variable decleared
+/// elsewhere, so it is desugared into a for-in loop that assigns to the
+/// variable at the top of the loop body.
+class ShadowLoopAssignmentStatement extends ExpressionStatement
+    implements ShadowStatement {
+  ShadowLoopAssignmentStatement(Expression expression) : super(expression);
+
+  @override
+  void _inferStatement(ShadowTypeInferrer inferrer) {
+    inferrer.listener.loopAssignmentStatementEnter(this);
+    inferrer.inferExpression(expression, null, false);
+    inferrer.listener.loopAssignmentStatementExit(this);
+  }
+}
+
 /// Shadow object for [MapLiteral].
 class ShadowMapLiteral extends MapLiteral implements ShadowExpression {
   final DartType _declaredKeyType;
@@ -1296,7 +1338,7 @@
       inferredKeyType = inferredTypes[0];
       inferredValueType = inferredTypes[1];
       inferrer.instrumentation?.record(
-          Uri.parse(inferrer.uri),
+          inferrer.uri,
           fileOffset,
           'typeArgs',
           new InstrumentationValueForTypeArgs(
@@ -1325,14 +1367,14 @@
 
 /// Abstract shadow object representing a field or procedure in kernel form.
 abstract class ShadowMember implements Member {
-  String get fileUri;
+  Uri get fileUri;
 
   InferenceNode get _inferenceNode;
 
   void set _inferenceNode(InferenceNode value);
 
   void setInferredType(
-      TypeInferenceEngineImpl engine, String uri, DartType inferredType);
+      TypeInferenceEngineImpl engine, Uri uri, DartType inferredType);
 
   static void resolveInferenceNode(Member member) {
     if (member is ShadowMember) {
@@ -1497,12 +1539,12 @@
 
   ShadowProcedure(Name name, ProcedureKind kind, FunctionNode function,
       this._hasImplicitReturnType,
-      {String fileUri, bool isAbstract: false})
+      {Uri fileUri, bool isAbstract: false})
       : super(name, kind, function, fileUri: fileUri, isAbstract: isAbstract);
 
   @override
   void setInferredType(
-      TypeInferenceEngineImpl engine, String uri, DartType inferredType) {
+      TypeInferenceEngineImpl engine, Uri uri, DartType inferredType) {
     if (isSetter) {
       if (function.positionalParameters.length > 0) {
         function.positionalParameters[0].type = inferredType;
@@ -1510,7 +1552,7 @@
     } else if (isGetter) {
       function.returnType = inferredType;
     } else {
-      unhandled("setInferredType", "not accessor", fileOffset, Uri.parse(uri));
+      unhandled("setInferredType", "not accessor", fileOffset, uri);
     }
   }
 
@@ -1537,6 +1579,14 @@
   }
 
   @override
+  DartType _getWriteType(ShadowTypeInferrer inferrer) {
+    assert(receiver == null);
+    var receiverType = inferrer.thisType;
+    var writeMember = inferrer.findPropertySetMember(receiverType, write);
+    return inferrer.getSetterType(writeMember, receiverType);
+  }
+
+  @override
   DartType _inferExpression(
       ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
     var receiverType = _inferReceiver(inferrer);
@@ -1654,6 +1704,12 @@
   ShadowStaticAssignment(Expression rhs) : super(rhs);
 
   @override
+  DartType _getWriteType(ShadowTypeInferrer inferrer) {
+    StaticSet write = this.write;
+    return write.target.setterType;
+  }
+
+  @override
   DartType _inferExpression(
       ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
     typeNeeded = inferrer.listener.staticAssignEnter(desugared, typeContext) ||
@@ -1721,7 +1777,8 @@
     var calleeType = target.function.functionType;
     var inferredType = inferrer.inferInvocation(typeContext, typeNeeded,
         fileOffset, calleeType, calleeType.returnType, arguments);
-    inferrer.listener.staticInvocationExit(this, inferredType);
+    inferrer.listener.staticInvocationExit(
+        this, calleeType, inferrer.lastInferredSubstitution, inferredType);
     return inferredType;
   }
 }
@@ -1801,8 +1858,8 @@
   DartType _inferExpression(
       ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
     if (interfaceTarget != null) {
-      inferrer.instrumentation?.record(Uri.parse(inferrer.uri), fileOffset,
-          'target', new InstrumentationValueForMember(interfaceTarget));
+      inferrer.instrumentation?.record(inferrer.uri, fileOffset, 'target',
+          new InstrumentationValueForMember(interfaceTarget));
     }
     return inferrer.inferMethodInvocation(
         this, null, fileOffset, false, typeContext, typeNeeded,
@@ -1822,8 +1879,8 @@
   DartType _inferExpression(
       ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
     if (interfaceTarget != null) {
-      inferrer.instrumentation?.record(Uri.parse(inferrer.uri), fileOffset,
-          'target', new InstrumentationValueForMember(interfaceTarget));
+      inferrer.instrumentation?.record(inferrer.uri, fileOffset, 'target',
+          new InstrumentationValueForMember(interfaceTarget));
     }
     return inferrer.inferPropertyGet(
         this, null, fileOffset, typeContext, typeNeeded,
@@ -2040,7 +2097,7 @@
       InterfaceType thisType,
       SourceLibraryBuilder library) {
     return new ShadowTypeInferrer._(
-        this, uri.toString(), listener, false, thisType, library);
+        this, uri, listener, false, thisType, library);
   }
 
   @override
@@ -2064,7 +2121,7 @@
 
   ShadowTypeInferrer._(
       ShadowTypeInferenceEngine engine,
-      String uri,
+      Uri uri,
       TypeInferenceListener listener,
       bool topLevel,
       InterfaceType thisType,
@@ -2085,6 +2142,10 @@
     // with another, and we can only replace a node if it has a parent pointer.
     assert(expression.parent != null);
 
+    // For full (non-top level) inference, we need access to the BuilderHelper
+    // so that we can perform error recovery.
+    assert(isTopLevel || helper != null);
+
     // When doing top level inference, we skip subexpressions whose type isn't
     // needed so that we don't induce bogus dependencies on fields mentioned in
     // those subexpressions.
@@ -2114,19 +2175,25 @@
   }
 
   @override
-  void inferInitializer(Initializer initializer) {
+  void inferInitializer(BuilderHelper helper, Initializer initializer) {
     assert(initializer is ShadowInitializer);
+    this.helper = helper;
     // Use polymorphic dispatch on [KernelInitializer] to perform whatever
     // kind of type inference is correct for this kind of initializer.
     // TODO(paulberry): experiment to see if dynamic dispatch would be better,
     // so that the type hierarchy will be simpler (which may speed up "is"
     // checks).
     ShadowInitializer kernelInitializer = initializer;
-    return kernelInitializer._inferInitializer(this);
+    kernelInitializer._inferInitializer(this);
+    this.helper = null;
   }
 
   @override
   void inferStatement(Statement statement) {
+    // For full (non-top level) inference, we need access to the BuilderHelper
+    // so that we can perform error recovery.
+    if (!isTopLevel) assert(helper != null);
+
     if (statement is ShadowStatement) {
       // Use polymorphic dispatch on [KernelStatement] to perform whatever kind
       // of type inference is correct for this kind of statement.
@@ -2232,11 +2299,17 @@
   ShadowVariableAssignment(Expression rhs) : super(rhs);
 
   @override
+  DartType _getWriteType(ShadowTypeInferrer inferrer) {
+    VariableSet write = this.write;
+    return write.variable.type;
+  }
+
+  @override
   DartType _inferExpression(
       ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.variableAssignEnter(desugared, typeContext) ||
-            typeNeeded;
+    typeNeeded = inferrer.listener
+            .variableAssignEnter(desugared, typeContext, this.write) ||
+        typeNeeded;
     DartType readType;
     var read = this.read;
     if (read is VariableGet) {
@@ -2251,8 +2324,8 @@
       }
     }
     var inferredResult = _inferRhs(inferrer, readType, writeContext);
-    inferrer.listener.variableAssignExit(
-        desugared, writeContext, inferredResult.combiner, inferredResult.type);
+    inferrer.listener.variableAssignExit(desugared, writeContext, write,
+        inferredResult.combiner, inferredResult.type);
     _replaceWithDesugared();
     return inferredResult.type;
   }
@@ -2315,8 +2388,8 @@
       inferredType = const DynamicType();
     }
     if (inferrer.strongMode && _implicitlyTyped) {
-      inferrer.instrumentation?.record(Uri.parse(inferrer.uri), fileOffset,
-          'type', new InstrumentationValueForType(inferredType));
+      inferrer.instrumentation?.record(inferrer.uri, fileOffset, 'type',
+          new InstrumentationValueForType(inferredType));
       type = inferredType;
     }
     if (initializer != null) {
@@ -2358,8 +2431,8 @@
     DartType promotedType = inferrer.typePromoter
         .computePromotedType(_fact, _scope, mutatedInClosure);
     if (promotedType != null) {
-      inferrer.instrumentation?.record(Uri.parse(inferrer.uri), fileOffset,
-          'promotedType', new InstrumentationValueForType(promotedType));
+      inferrer.instrumentation?.record(inferrer.uri, fileOffset, 'promotedType',
+          new InstrumentationValueForType(promotedType));
     }
     this.promotedType = promotedType;
     var 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 f44026c..4c853da 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -42,7 +42,7 @@
 
 import 'package:kernel/type_algebra.dart' show substitute;
 
-import '../../../file_system.dart' show FileSystem;
+import '../../api_prototype/file_system.dart' show FileSystem;
 
 import '../compiler_context.dart' show CompilerContext;
 
@@ -70,8 +70,6 @@
 
 import '../uri_translator.dart' show UriTranslator;
 
-import '../util/relativize.dart' show relativizeUri;
-
 import 'kernel_builder.dart'
     show
         Builder,
@@ -102,7 +100,7 @@
   final DillTarget dillTarget;
 
   /// Shared with [CompilerContext].
-  final Map<String, Source> uriToSource;
+  final Map<Uri, Source> uriToSource;
 
   /// The [MetadataCollector] to write metadata to.
   final MetadataCollector metadataCollector;
@@ -121,7 +119,7 @@
 
   KernelTarget(this.fileSystem, this.includeComments, DillTarget dillTarget,
       UriTranslator uriTranslator,
-      {Map<String, Source> uriToSource, MetadataCollector metadataCollector})
+      {Map<Uri, Source> uriToSource, MetadataCollector metadataCollector})
       : dillTarget = dillTarget,
         uriToSource = uriToSource ?? CompilerContext.current.uriToSource,
         metadataCollector = metadataCollector,
@@ -135,8 +133,7 @@
 
   void addSourceInformation(
       Uri uri, List<int> lineStarts, List<int> sourceCode) {
-    String fileUri = relativizeUri(uri);
-    uriToSource[fileUri] = new Source(lineStarts, sourceCode);
+    uriToSource[uri] = new Source(lineStarts, sourceCode);
   }
 
   void read(Uri uri) {
@@ -240,8 +237,7 @@
     try {
       loader.createTypeInferenceEngine();
       await loader.buildOutlines();
-      loader.coreLibrary
-          .becomeCoreLibrary(const DynamicType(), const VoidType());
+      loader.coreLibrary.becomeCoreLibrary(const DynamicType());
       dynamicType.bind(loader.coreLibrary["dynamic"]);
       loader.resolveParts();
       loader.computeLibraryScopes();
@@ -359,16 +355,11 @@
   /// Creates a program by combining [libraries] with the libraries of
   /// `dillTarget.loader.program`.
   Program link(List<Library> libraries, {CanonicalName nameRoot}) {
-    Map<String, Source> uriToSource =
-        new Map<String, Source>.from(this.uriToSource);
+    Map<Uri, Source> uriToSource = new Map<Uri, Source>.from(this.uriToSource);
 
     libraries.addAll(dillTarget.loader.libraries);
     uriToSource.addAll(dillTarget.loader.uriToSource);
 
-    // TODO(ahe): Remove this line. Kernel seems to generate a default line map
-    // that used when there's no fileUri on an element. Instead, ensure all
-    // elements have a fileUri.
-    uriToSource[""] = new Source(<int>[0], const <int>[]);
     Program program = new Program(
         nameRoot: nameRoot, libraries: libraries, uriToSource: uriToSource);
     if (loader.first != null) {
@@ -645,14 +636,12 @@
     });
   }
 
-  /// Run all transformations that are needed when building a program for the
-  /// first time.
+  /// Run all transformations that are needed when building a bundle of
+  /// libraries for the first time.
   void runBuildTransformations() {
     backendTarget.performModularTransformationsOnLibraries(
         loader.coreTypes, loader.hierarchy, loader.libraries,
         logger: (String msg) => ticker.logMs(msg));
-    backendTarget.performGlobalTransformations(loader.coreTypes, program,
-        logger: (String msg) => ticker.logMs(msg));
   }
 
   void verify() {
diff --git a/pkg/front_end/lib/src/fasta/kernel/verifier.dart b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
index cc7fd12..401ae92 100644
--- a/pkg/front_end/lib/src/fasta/kernel/verifier.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
@@ -49,13 +49,13 @@
     implements TypeSchemaVisitor {
   final List<LocatedMessage> errors = <LocatedMessage>[];
 
-  String fileUri;
+  Uri fileUri;
 
   FastaVerifyingVisitor(bool isOutline) {
     this.isOutline = isOutline;
   }
 
-  String checkLocation(TreeNode node, String name, String fileUri) {
+  Uri checkLocation(TreeNode node, String name, Uri fileUri) {
     if (name == null || name.contains("#")) {
       // TODO(ahe): Investigate if these checks can be enabled:
       // if (node.fileUri != null && node is! Library) {
@@ -103,8 +103,8 @@
   problem(TreeNode node, String details, {TreeNode context}) {
     node ??= (context ?? this.context);
     int offset = node?.fileOffset ?? -1;
-    String file = node?.location?.file ?? fileUri;
-    Uri uri = file == null ? null : Uri.parse(file);
+    Uri file = node?.location?.file ?? fileUri;
+    Uri uri = file == null ? null : file;
     LocatedMessage message = templateInternalVerificationError
         .withArguments(details)
         .withLocation(uri, offset);
diff --git a/pkg/front_end/lib/src/fasta/loader.dart b/pkg/front_end/lib/src/fasta/loader.dart
index 9399b36..3ff76ab 100644
--- a/pkg/front_end/lib/src/fasta/loader.dart
+++ b/pkg/front_end/lib/src/fasta/loader.dart
@@ -44,6 +44,8 @@
   /// [handledErrors].
   final List<LocatedMessage> unhandledErrors = <LocatedMessage>[];
 
+  final Set<String> seenMessages = new Set<String>();
+
   LibraryBuilder coreLibrary;
 
   /// The first library that we've been asked to compile. When compiling a
@@ -178,22 +180,50 @@
 
   /// Register [message] as a compile-time error.
   ///
-  /// If [silent] is true, no error is printed as it is assumed the error has
-  /// been previously reported.
-  ///
   /// If [wasHandled] is true, this error is added to [handledErrors],
   /// otherwise it is added to [unhandledErrors].
   void addCompileTimeError(Message message, int charOffset, Uri fileUri,
-      {bool silent: false, bool wasHandled: false, LocatedMessage context}) {
-    if (!silent) {
-      target.context
-          .report(message.withLocation(fileUri, charOffset), Severity.error);
-      if (context != null) {
-        target.context.report(context, Severity.error);
-      }
+      {bool wasHandled: false, LocatedMessage context}) {
+    if (addMessage(message, charOffset, fileUri, Severity.error,
+        context: context)) {
+      (wasHandled ? handledErrors : unhandledErrors)
+          .add(message.withLocation(fileUri, charOffset));
     }
-    (wasHandled ? handledErrors : unhandledErrors)
-        .add(message.withLocation(fileUri, charOffset));
+  }
+
+  void addWarning(Message message, int charOffset, Uri fileUri,
+      {LocatedMessage context}) {
+    addMessage(message, charOffset, fileUri, Severity.warning,
+        context: context);
+  }
+
+  void addNit(Message message, int charOffset, Uri fileUri,
+      {LocatedMessage context}) {
+    addMessage(message, charOffset, fileUri, Severity.nit, context: context);
+  }
+
+  /// All messages reported by the compiler (errors, warnings, etc.) are routed
+  /// through this method.
+  ///
+  /// Returns true if the message is new, that is, not previously
+  /// reported. This is important as some parser errors may be reported up to
+  /// three times by `OutlineBuilder`, `DietListener`, and `BodyBuilder`.
+  bool addMessage(
+      Message message, int charOffset, Uri fileUri, Severity severity,
+      {LocatedMessage context}) {
+    String trace = """
+message: ${message.message}
+charOffset: $charOffset
+fileUri: $fileUri
+severity: $severity
+""";
+    if (!seenMessages.add(trace)) return false;
+    target.context.report(message.withLocation(fileUri, charOffset), severity);
+    if (context != null) {
+      target.context.report(context, severity);
+    }
+    recordMessage(severity, message, charOffset, fileUri, context: context);
+    return true;
   }
 
   Builder getAbstractClassInstantiationError() {
@@ -207,6 +237,10 @@
   }
 
   Builder getNativeAnnotation() => target.getNativeAnnotation(this);
+
+  void recordMessage(
+      Severity severity, Message message, int charOffset, Uri fileUri,
+      {LocatedMessage context}) {}
 }
 
 String format(double d, int fractionDigits, int width) {
diff --git a/pkg/front_end/lib/src/fasta/messages.dart b/pkg/front_end/lib/src/fasta/messages.dart
index 31da0d8..9c654de 100644
--- a/pkg/front_end/lib/src/fasta/messages.dart
+++ b/pkg/front_end/lib/src/fasta/messages.dart
@@ -6,43 +6,19 @@
 
 import 'package:kernel/ast.dart' show Library, Location, Program, TreeNode;
 
-import 'util/relativize.dart' show relativizeUri;
-
 import 'compiler_context.dart' show CompilerContext;
 
-import 'fasta_codes.dart' show LocatedMessage, Message;
-
-import 'severity.dart' show Severity;
-
 export 'fasta_codes.dart';
 
 bool get isVerbose => CompilerContext.current.options.verbose;
 
-void error(Message message, int charOffset, Uri uri) {
-  report(message.withLocation(uri, charOffset), Severity.error);
-}
-
-void warning(Message message, int charOffset, Uri uri) {
-  report(message.withLocation(uri, charOffset), Severity.warning);
-}
-
-void nit(Message message, int charOffset, Uri uri) {
-  report(message.withLocation(uri, charOffset), Severity.nit);
-}
-
-void report(LocatedMessage message, Severity severity) {
-  CompilerContext.current.report(message, severity);
-}
-
-Location getLocation(String path, int charOffset) {
-  return CompilerContext.current.uriToSource[path]
-      ?.getLocation(path, charOffset);
+Location getLocation(Uri uri, int charOffset) {
+  return CompilerContext.current.uriToSource[uri]?.getLocation(uri, charOffset);
 }
 
 Location getLocationFromUri(Uri uri, int charOffset) {
   if (charOffset == -1) return null;
-  String path = relativizeUri(uri);
-  return getLocation(path, charOffset);
+  return getLocation(uri, charOffset);
 }
 
 String getSourceLine(Location location) {
diff --git a/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart b/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart
index d129148..28904d0 100644
--- a/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart
@@ -21,9 +21,7 @@
 
   @override
   Token parseExpression(Token token) {
-    // TODO(brianwilkerson): Remove the invocation of `syntheticPreviousToken`
-    // when `parseExpression` accepts the last consumed token.
-    return skipExpression(syntheticPreviousToken(token));
+    return skipExpression(token);
   }
 
   @override
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 c3090a7..b8c2cb27 100644
--- a/pkg/front_end/lib/src/fasta/parser/modifier_context.dart
+++ b/pkg/front_end/lib/src/fasta/parser/modifier_context.dart
@@ -89,7 +89,7 @@
     }
     typeContinuation ??= TypeContinuation.Optional;
     modifierCount++;
-    return parser.parseModifier(token.next);
+    return parser.parseModifier(token);
   }
 
   Token parseCovariantOpt(Token token) {
@@ -112,7 +112,7 @@
 
       default:
         modifierCount++;
-        return parser.parseModifier(token.next);
+        return parser.parseModifier(token);
     }
   }
 
@@ -131,7 +131,7 @@
       case MemberKind.StaticMethod:
       case MemberKind.TopLevelMethod:
         modifierCount++;
-        return parser.parseModifier(token.next);
+        return parser.parseModifier(token);
 
       case MemberKind.StaticField:
       case MemberKind.NonStaticField:
@@ -154,7 +154,7 @@
     }
     typeContinuation ??= TypeContinuation.Optional;
     modifierCount++;
-    return parser.parseModifier(token.next);
+    return parser.parseModifier(token);
   }
 
   Token parseStaticOpt(Token token) {
@@ -175,11 +175,11 @@
       case MemberKind.NonStaticMethod:
         memberKind = MemberKind.StaticMethod;
         modifierCount++;
-        return parser.parseModifier(next);
+        return parser.parseModifier(token);
       case MemberKind.NonStaticField:
         memberKind = MemberKind.StaticField;
         modifierCount++;
-        return parser.parseModifier(next);
+        return parser.parseModifier(token);
       default:
         parser.reportRecoverableErrorWithToken(
             next, fasta.templateExtraneousModifier);
@@ -213,7 +213,7 @@
         break;
     }
     modifierCount++;
-    return parser.parseModifier(token.next);
+    return parser.parseModifier(token);
   }
 }
 
@@ -450,7 +450,7 @@
   ClassMethodModifierContext(this.parser);
 
   Token parseRecovery(Token token, Token externalToken, Token staticToken,
-      Token getOrSet, Token afterModifiers) {
+      Token getOrSet, Token lastModifier) {
     modifierCount = 0;
     this.getOrSet = getOrSet;
     if (externalToken != null) {
@@ -461,179 +461,191 @@
       this.staticToken = staticToken;
       ++modifierCount;
     }
-    while (token != afterModifiers) {
-      String value = token.stringValue;
+    while (token.next != lastModifier.next) {
+      String value = token.next.stringValue;
       if (identical(value, 'abstract')) {
         token = parseAbstractRecovery(token);
       } else if (identical(value, 'class')) {
         token = parseClassRecovery(token);
       } else if (identical(value, 'const')) {
-        parseConstRecovery(token);
-        token = token.next;
+        token = parseConstRecovery(token);
       } else if (identical(value, 'covariant')) {
-        parseCovariantRecovery(token);
-        token = token.next;
+        token = parseCovariantRecovery(token);
       } else if (identical(value, 'enum')) {
         token = parseEnumRecovery(token);
       } else if (identical(value, 'external')) {
-        parseExternalRecovery(token);
-        token = token.next;
+        token = parseExternalRecovery(token);
       } else if (identical(value, 'static')) {
-        parseStaticRecovery(token);
-        token = token.next;
+        token = parseStaticRecovery(token);
       } else if (identical(value, 'typedef')) {
-        parser.reportRecoverableError(token, fasta.messageTypedefInClass);
+        // TODO(brianwilkerson): Move this into a `parseTypedefRecovery` method
+        // that can be more sophisticated about skipping the rest of the typedef
+        // declaration.
+        parser.reportRecoverableError(token.next, fasta.messageTypedefInClass);
         token = token.next;
       } else if (identical(value, 'var')) {
-        parseVarRecovery(token);
-        token = token.next;
-      } else if (token.isModifier) {
+        token = parseVarRecovery(token);
+      } else if (token.next.isModifier) {
         parser.reportRecoverableErrorWithToken(
-            token, fasta.templateExtraneousModifier);
+            token.next, fasta.templateExtraneousModifier);
         token = token.next;
       } else {
         parser.reportRecoverableErrorWithToken(
-            token, fasta.templateUnexpectedToken);
+            token.next, fasta.templateUnexpectedToken);
         // We found something that doesn't look like a modifier,
         // so skip the rest of the tokens.
-        token = afterModifiers.next;
+        token = lastModifier.next;
         break;
       }
       if (endInvalidMemberToken != null) {
-        return afterModifiers;
+        return lastModifier.next;
       }
     }
-    return token;
-  }
-
-  Token parseAbstractRecovery(Token token) {
-    assert(optional('abstract', token));
-    if (optional('class', token.next)) {
-      return parseClassRecovery(token.next);
-    }
-    parser.reportRecoverableError(token, fasta.messageAbstractClassMember);
     return token.next;
   }
 
-  Token parseClassRecovery(Token token) {
-    assert(optional('class', token));
+  Token parseAbstractRecovery(Token token) {
     token = token.next;
-    parser.reportRecoverableError(token, fasta.messageClassInClass);
+    assert(optional('abstract', token));
+    if (optional('class', token.next)) {
+      return parseClassRecovery(token);
+    }
+    parser.reportRecoverableError(token, fasta.messageAbstractClassMember);
+    return token;
+  }
+
+  Token parseClassRecovery(Token token) {
+    token = token.next;
+    assert(optional('class', token));
+    Token next = token.next;
+    parser.reportRecoverableError(next, fasta.messageClassInClass);
     // If the declaration appears to be a valid class declaration
     // then skip the entire declaration so that we only generate the one
     // error (above) rather than a plethora of unhelpful errors.
-    if (token.isIdentifier) {
-      endInvalidMemberToken = token;
+    if (next.isIdentifier) {
+      endInvalidMemberToken = next;
       // skip class name
-      token = token.next;
+      token = next;
+      next = token.next;
       // TODO(danrubel): consider parsing (skipping) the class header
       // with a recovery listener so that no events are generated
-      if (optional('{', token) && token.endGroup != null) {
+      if (optional('{', next) && next.endGroup != null) {
         // skip class body
-        endInvalidMemberToken = token.endGroup;
-        token = endInvalidMemberToken.next;
+        token = endInvalidMemberToken = next.endGroup;
       }
     }
     return token;
   }
 
-  void parseConstRecovery(Token token) {
-    assert(optional('const', token));
+  Token parseConstRecovery(Token token) {
+    Token next = token.next;
+    assert(optional('const', next));
     if (constToken != null) {
       parser.reportRecoverableErrorWithToken(
-          token, fasta.templateDuplicatedModifier);
+          next, fasta.templateDuplicatedModifier);
     } else if (getOrSet != null) {
       parser.reportRecoverableErrorWithToken(
-          token, fasta.templateExtraneousModifier);
+          next, fasta.templateExtraneousModifier);
     } else {
-      constToken = token;
+      constToken = next;
       parser.parseModifier(token);
       ++modifierCount;
     }
+    return next;
   }
 
-  void parseCovariantRecovery(Token token) {
-    assert(optional('covariant', token));
+  Token parseCovariantRecovery(Token token) {
+    Token next = token.next;
+    assert(optional('covariant', next));
     if (covariantToken != null) {
       parser.reportRecoverableErrorWithToken(
-          token, fasta.templateDuplicatedModifier);
+          next, fasta.templateDuplicatedModifier);
     } else if (getOrSet == null || optional('get', getOrSet)) {
-      parser.reportRecoverableError(token, fasta.messageCovariantMember);
+      parser.reportRecoverableError(next, fasta.messageCovariantMember);
     } else if (staticToken != null) {
-      parser.reportRecoverableError(token, fasta.messageCovariantAndStatic);
+      parser.reportRecoverableError(next, fasta.messageCovariantAndStatic);
     } else {
-      covariantToken = token;
+      covariantToken = next;
       parser.parseModifier(token);
       ++modifierCount;
     }
+    return next;
   }
 
   Token parseEnumRecovery(Token token) {
-    assert(optional('enum', token));
-    parser.reportRecoverableError(token, fasta.messageEnumInClass);
-    token = token.next;
+    Token next = token.next;
+    assert(optional('enum', next));
+    parser.reportRecoverableError(next, fasta.messageEnumInClass);
+    token = next;
+    next = token.next;
     // If the declaration appears to be a valid enum declaration
     // then skip the entire declaration so that we only generate the one
     // error (above) rather than a plethora of unhelpful errors.
-    if (token.isIdentifier) {
-      endInvalidMemberToken = token;
+    if (next.isIdentifier) {
+      endInvalidMemberToken = next;
       // skip enum name
-      token = token.next;
-      if (optional('{', token) && token.endGroup != null) {
+      token = next;
+      next = token.next;
+      if (optional('{', next) && next.endGroup != null) {
         // TODO(danrubel): Consider replacing this `skip enum` functionality
         // with something that can parse and resolve the declaration
         // even though it is in a class context
-        endInvalidMemberToken = token.endGroup;
-        token = token.next;
+        token = endInvalidMemberToken = next.endGroup;
       }
     }
     return token;
   }
 
-  void parseExternalRecovery(Token token) {
-    assert(optional('external', token));
+  Token parseExternalRecovery(Token token) {
+    Token next = token.next;
+    assert(optional('external', next));
     if (externalToken != null) {
       parser.reportRecoverableErrorWithToken(
-          token, fasta.templateDuplicatedModifier);
+          next, fasta.templateDuplicatedModifier);
     } else {
       if (staticToken != null) {
-        parser.reportRecoverableError(token, fasta.messageExternalAfterStatic);
+        parser.reportRecoverableError(next, fasta.messageExternalAfterStatic);
         // Fall through to record token.
       } else if (constToken != null) {
-        parser.reportRecoverableError(token, fasta.messageExternalAfterConst);
+        parser.reportRecoverableError(next, fasta.messageExternalAfterConst);
         // Fall through to record token.
       }
-      externalToken = token;
+      externalToken = next;
       parser.parseModifier(token);
       ++modifierCount;
     }
+    return next;
   }
 
-  void parseStaticRecovery(Token token) {
-    assert(optional('static', token));
+  Token parseStaticRecovery(Token token) {
+    Token next = token.next;
+    assert(optional('static', next));
     if (staticToken != null) {
       parser.reportRecoverableErrorWithToken(
-          token, fasta.templateDuplicatedModifier);
+          next, fasta.templateDuplicatedModifier);
     } else if (covariantToken != null) {
-      parser.reportRecoverableError(token, fasta.messageCovariantAndStatic);
+      parser.reportRecoverableError(next, fasta.messageCovariantAndStatic);
     } else {
       if (constToken != null) {
-        parser.reportRecoverableError(token, fasta.messageStaticAfterConst);
+        parser.reportRecoverableError(next, fasta.messageStaticAfterConst);
         // Fall through to record token.
       }
-      staticToken = token;
+      staticToken = next;
       parser.parseModifier(token);
       ++modifierCount;
     }
+    return next;
   }
 
-  void parseVarRecovery(Token token) {
+  Token parseVarRecovery(Token token) {
+    token = token.next;
     if (token.next.isIdentifier && optional('(', token.next.next)) {
       parser.reportRecoverableError(token, fasta.messageVarReturnType);
     } else {
       parser.reportRecoverableErrorWithToken(
           token, fasta.templateExtraneousModifier);
     }
+    return token;
   }
 }
 
@@ -652,9 +664,9 @@
     while (true) {
       final value = next.stringValue;
       if (identical('const', value)) {
-        parseConst(next);
+        parseConst(token);
       } else if (identical('external', value)) {
-        parseExternal(next);
+        parseExternal(token);
       } else if (identical('factory', value)) {
         parseFactory(next);
       } else if (isModifier(next)) {
@@ -669,7 +681,7 @@
     while (isModifier(next)) {
       final value = next.stringValue;
       if (identical('const', value)) {
-        parseConst(next);
+        parseConst(token);
       } else {
         parser.reportRecoverableErrorWithToken(
             next, fasta.templateExtraneousModifier);
@@ -681,34 +693,36 @@
   }
 
   void parseConst(Token token) {
-    assert(optional('const', token));
+    Token next = token.next;
+    assert(optional('const', next));
     if (constToken == null) {
       if (factoryKeyword != null) {
-        parser.reportRecoverableError(token, fasta.messageConstAfterFactory);
+        parser.reportRecoverableError(next, fasta.messageConstAfterFactory);
       }
-      constToken = token;
+      constToken = next;
       parser.parseModifier(token);
       ++modifierCount;
     } else {
       parser.reportRecoverableErrorWithToken(
-          token, fasta.templateDuplicatedModifier);
+          next, fasta.templateDuplicatedModifier);
     }
   }
 
   void parseExternal(Token token) {
-    assert(optional('external', token));
+    Token next = token.next;
+    assert(optional('external', next));
     if (externalToken == null) {
       if (constToken != null) {
-        parser.reportRecoverableError(token, fasta.messageExternalAfterConst);
+        parser.reportRecoverableError(next, fasta.messageExternalAfterConst);
       } else if (factoryKeyword != null) {
-        parser.reportRecoverableError(token, fasta.messageExternalAfterFactory);
+        parser.reportRecoverableError(next, fasta.messageExternalAfterFactory);
       }
-      externalToken = token;
+      externalToken = next;
       parser.parseModifier(token);
       ++modifierCount;
     } else {
       parser.reportRecoverableErrorWithToken(
-          token, fasta.templateDuplicatedModifier);
+          next, fasta.templateDuplicatedModifier);
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index 50f6ccb..4d98840 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -513,12 +513,11 @@
       Token deferredToken = next;
       Token asKeyword = next.next;
       token = ensureIdentifier(
-          asKeyword.next, IdentifierContext.importPrefixDeclaration);
+          asKeyword, IdentifierContext.importPrefixDeclaration);
       listener.handleImportPrefix(deferredToken, asKeyword);
     } else if (optional('as', next)) {
       Token asKeyword = next;
-      token = ensureIdentifier(
-          next.next, IdentifierContext.importPrefixDeclaration);
+      token = ensureIdentifier(next, IdentifierContext.importPrefixDeclaration);
       listener.handleImportPrefix(null, asKeyword);
     } else {
       listener.handleImportPrefix(null, null);
@@ -696,12 +695,12 @@
   /// ;
   /// ```
   Token parseDottedName(Token token) {
-    token = ensureIdentifier(token.next, IdentifierContext.dottedName);
+    token = ensureIdentifier(token, IdentifierContext.dottedName);
     Token firstIdentifier = token;
     int count = 1;
     while (optional('.', token.next)) {
       token = ensureIdentifier(
-          token.next.next, IdentifierContext.dottedNameContinuation);
+          token.next, IdentifierContext.dottedNameContinuation);
       count++;
     }
     listener.handleDottedName(count, firstIdentifier);
@@ -785,10 +784,10 @@
   /// ;
   /// ```
   Token parseIdentifierList(Token token) {
-    token = ensureIdentifier(token.next, IdentifierContext.combinator);
+    token = ensureIdentifier(token, IdentifierContext.combinator);
     int count = 1;
     while (optional(',', token.next)) {
-      token = ensureIdentifier(token.next.next, IdentifierContext.combinator);
+      token = ensureIdentifier(token.next, IdentifierContext.combinator);
       count++;
     }
     listener.handleIdentifierList(count);
@@ -893,7 +892,7 @@
     Token atToken = token.next;
     assert(optional('@', atToken));
     listener.beginMetadata(atToken);
-    token = ensureIdentifier(atToken.next, IdentifierContext.metadataReference);
+    token = ensureIdentifier(atToken, IdentifierContext.metadataReference);
     token =
         parseQualifiedRestOpt(token, IdentifierContext.metadataContinuation);
     if (optional("<", token.next)) {
@@ -903,8 +902,8 @@
     Token period = null;
     if (optional('.', token.next)) {
       period = token.next;
-      token = ensureIdentifier(period.next,
-          IdentifierContext.metadataContinuationAfterTypeArguments);
+      token = ensureIdentifier(
+          period, IdentifierContext.metadataContinuationAfterTypeArguments);
     }
     token = parseArgumentsOpt(token);
     listener.endMetadata(atToken, period, token.next);
@@ -948,14 +947,13 @@
     Token afterType = parseType(typedefKeyword, TypeContinuation.Typedef);
     if (afterType == null) {
       token = ensureIdentifier(
-          typedefKeyword.next, IdentifierContext.typedefDeclaration);
+          typedefKeyword, IdentifierContext.typedefDeclaration);
       token = parseTypeVariablesOpt(token).next;
       equals = token;
       expect('=', token);
       token = parseType(token);
     } else {
-      token = ensureIdentifier(
-          afterType.next, IdentifierContext.typedefDeclaration);
+      token = ensureIdentifier(afterType, IdentifierContext.typedefDeclaration);
       token = parseTypeVariablesOpt(token);
       token =
           parseFormalParametersRequiredOpt(token, MemberKind.FunctionTypeAlias);
@@ -1253,7 +1251,7 @@
   /// ```
   Token parseQualified(Token token, IdentifierContext context,
       IdentifierContext continuationContext) {
-    token = ensureIdentifier(token.next, context);
+    token = ensureIdentifier(token, context);
     while (optional('.', token.next)) {
       token = parseQualifiedRest(token, continuationContext);
     }
@@ -1283,13 +1281,13 @@
     token = token.next;
     assert(optional('.', token));
     Token period = token;
-    token = ensureIdentifier(token.next, context);
+    token = ensureIdentifier(token, context);
     listener.handleQualified(period);
     return token;
   }
 
   Token skipBlock(Token token) {
-    // TODO(brianwilkerson) Accept the last consumed token.
+    token = token.next;
     if (!optional('{', token)) {
       token = recoverFromMissingBlock(token);
     }
@@ -1311,8 +1309,7 @@
     assert(optional('enum', enumKeyword));
     listener.beginEnum(enumKeyword);
     token =
-        ensureIdentifier(enumKeyword.next, IdentifierContext.enumDeclaration)
-            .next;
+        ensureIdentifier(enumKeyword, IdentifierContext.enumDeclaration).next;
     Token leftBrace = token;
     expect('{', token);
     int count = 0;
@@ -1327,11 +1324,11 @@
       }
       token = parseMetadataStar(token);
       if (!identical(token.next, next)) {
-        reportRecoverableError(next, fasta.messageAnnotationOnEnumConstant);
+        listener.handleRecoverableError(
+            fasta.messageAnnotationOnEnumConstant, next, token);
       }
       token =
-          ensureIdentifier(token.next, IdentifierContext.enumValueDeclaration)
-              .next;
+          ensureIdentifier(token, IdentifierContext.enumValueDeclaration).next;
       count++;
     } while (optional(',', token));
     expect('}', token);
@@ -1346,15 +1343,15 @@
     listener.beginClassOrNamedMixinApplication(token);
     Token begin = beforeAbstractToken?.next ?? token;
     if (beforeAbstractToken != null) {
-      token = parseModifier(beforeAbstractToken.next).next;
+      token = parseModifier(beforeAbstractToken).next;
       listener.handleModifiers(1);
     } else {
       listener.handleModifiers(0);
     }
     Token classKeyword = token;
     expect("class", token);
-    Token name = ensureIdentifier(
-        token.next, IdentifierContext.classOrNamedMixinDeclaration);
+    Token name =
+        ensureIdentifier(token, IdentifierContext.classOrNamedMixinDeclaration);
     token = parseTypeVariablesOpt(name);
     if (optional('=', token.next)) {
       listener.beginNamedMixinApplication(begin, name);
@@ -1570,14 +1567,12 @@
   /// was inserted.
   Token insertSyntheticIdentifier(Token token, IdentifierContext context,
       [String stringValue]) {
-    // TODO(brianwilkerson) Accept the last consumed token.
+    Token next = token.next;
     stringValue ??= '';
-    Message message = context.recoveryTemplate.withArguments(token);
+    Message message = context.recoveryTemplate.withArguments(next);
     Token identifier = new SyntheticStringToken(
-        TokenType.IDENTIFIER, stringValue, token.charOffset, 0);
-    // TODO(brianwilkerson): Remove the invocation of `previous` when this
-    // method accepts the last consumed token.
-    return rewriteAndRecover(token.previous, message, identifier);
+        TokenType.IDENTIFIER, stringValue, next.charOffset, 0);
+    return rewriteAndRecover(token, message, identifier);
   }
 
   /// Parse a simple identifier at the given [token], and return the identifier
@@ -1587,73 +1582,82 @@
   /// identifier in the given [context], create a synthetic identifier, report
   /// an error, and return the synthetic identifier.
   Token ensureIdentifier(Token token, IdentifierContext context) {
-    // TODO(brianwilkerson) Accept the last consumed token.
-    if (!token.isIdentifier) {
-      if (optional("void", token)) {
-        reportRecoverableError(token, fasta.messageInvalidVoid);
-      } else if (token is ErrorToken) {
+    Token next = token.next;
+    if (!next.isIdentifier) {
+      if (optional("void", next)) {
+        reportRecoverableError(next, fasta.messageInvalidVoid);
+        token = next;
+      } else if (next is ErrorToken) {
         // TODO(brianwilkerson): This preserves the current semantics, but the
         // listener should not be recovering from this case, so this needs to be
         // reworked to recover in this method (probably inside the outermost
         // if statement).
         token =
-            reportUnrecoverableErrorWithToken(token, context.recoveryTemplate)
+            reportUnrecoverableErrorWithToken(next, context.recoveryTemplate)
                 .next;
-      } else if (isIdentifierForRecovery(token, context)) {
-        reportRecoverableErrorWithToken(token, context.recoveryTemplate);
-      } else if (isPostIdentifierForRecovery(token, context) ||
-          isStartOfNextSibling(token, context)) {
+      } else if (isIdentifierForRecovery(next, context)) {
+        reportRecoverableErrorWithToken(next, context.recoveryTemplate);
+        token = next;
+      } else if (isPostIdentifierForRecovery(next, context) ||
+          isStartOfNextSibling(next, context)) {
         token = insertSyntheticIdentifier(token, context);
-      } else if (token.isKeywordOrIdentifier) {
-        reportRecoverableErrorWithToken(token, context.recoveryTemplate);
-      } else if (token.isUserDefinableOperator &&
+      } else if (next.isKeywordOrIdentifier) {
+        reportRecoverableErrorWithToken(next, context.recoveryTemplate);
+        token = next;
+      } else if (next.isUserDefinableOperator &&
           context == IdentifierContext.methodDeclaration) {
-        // If this is a user definable operator,
-        // then assume that the user has forgotten the `operator` keyword.
-        // TODO(brianwilkerson): Remove the invocation of `previous` when this
-        // method accepts the last consumed token.
-        token = rewriteAndRecover(
-            token.previous,
-            fasta.messageMissingOperatorKeyword,
-            new SyntheticKeywordToken(Keyword.OPERATOR, token.offset));
-        return parseOperatorName(token);
+        // If this is a user definable operator, then assume that the user has
+        // forgotten the `operator` keyword.
+        token = rewriteAndRecover(token, fasta.messageMissingOperatorKeyword,
+            new SyntheticKeywordToken(Keyword.OPERATOR, next.offset));
+        // TODO(brianwilkerson): Remove the invocation of `previous` when
+        // `rewriteAndRecover` returns the token before the new token.
+        return parseOperatorName(token.previous);
       } else {
-        reportRecoverableErrorWithToken(token, context.recoveryTemplate);
+        reportRecoverableErrorWithToken(next, context.recoveryTemplate);
         if (context == IdentifierContext.methodDeclaration) {
-          // Since the token is not a keyword or identifier,
-          // consume it to ensure forward progress in parseMethod.
-          token = token.next;
+          // Since the token is not a keyword or identifier, consume it to
+          // ensure forward progress in parseMethod.
+          token = next.next;
           // Supply a non-empty method name so that it does not accidentally
           // match the default constructor.
           token = insertSyntheticIdentifier(
-              token, context, '#synthetic_method_name_${token.offset}');
+              next, context, '#synthetic_method_name_${token.offset}');
         } else if (context == IdentifierContext.topLevelVariableDeclaration ||
             context == IdentifierContext.fieldDeclaration) {
-          // Since the token is not a keyword or identifier,
-          // consume it to ensure forward progress in parseField.
-          token = token.next;
+          // Since the token is not a keyword or identifier, consume it to
+          // ensure forward progress in parseField.
+          token = next.next;
           // Supply a non-empty method name so that it does not accidentally
           // match the default constructor.
           token = insertSyntheticIdentifier(
-              token, context, '#synthetic_field_name_${token.offset}');
+              next, context, '#synthetic_field_name_${token.offset}');
+        } else if (context == IdentifierContext.constructorReference) {
+          token = insertSyntheticIdentifier(token, context);
+        } else {
+          token = next;
         }
       }
-    } else if (token.type.isBuiltIn && !context.isBuiltInIdentifierAllowed) {
+    } else if (next.type.isBuiltIn && !context.isBuiltInIdentifierAllowed) {
       if (context.inDeclaration) {
         reportRecoverableErrorWithToken(
-            token, fasta.templateBuiltInIdentifierInDeclaration);
-      } else if (!optional("dynamic", token)) {
+            next, fasta.templateBuiltInIdentifierInDeclaration);
+      } else if (!optional("dynamic", next)) {
         reportRecoverableErrorWithToken(
-            token, fasta.templateBuiltInIdentifierAsType);
+            next, fasta.templateBuiltInIdentifierAsType);
       }
-    } else if (!inPlainSync && token.type.isPseudo) {
-      if (optional('await', token)) {
-        reportRecoverableError(token, fasta.messageAwaitAsIdentifier);
-      } else if (optional('yield', token)) {
-        reportRecoverableError(token, fasta.messageYieldAsIdentifier);
-      } else if (optional('async', token)) {
-        reportRecoverableError(token, fasta.messageAsyncAsIdentifier);
+      token = next;
+    } else if (!inPlainSync && next.type.isPseudo) {
+      if (optional('await', next)) {
+        reportRecoverableError(next, fasta.messageAwaitAsIdentifier);
+      } else if (optional('yield', next)) {
+        reportRecoverableError(next, fasta.messageYieldAsIdentifier);
+      } else if (optional('async', next)) {
+        reportRecoverableError(next, fasta.messageAsyncAsIdentifier);
       }
+      token = next;
+    } else {
+      token = next;
     }
     listener.handleIdentifier(token, context);
     return token;
@@ -1854,8 +1858,7 @@
   Token parseTypeVariable(Token token) {
     listener.beginTypeVariable(token.next);
     token = parseMetadataStar(token);
-    token =
-        ensureIdentifier(token.next, IdentifierContext.typeVariableDeclaration);
+    token = ensureIdentifier(token, IdentifierContext.typeVariableDeclaration);
     Token extendsOrSuper = null;
     Token next = token.next;
     if (optional('extends', next) || optional('super', next)) {
@@ -1910,6 +1913,9 @@
     /// True if we've seen the `var` keyword.
     bool hasVar = false;
 
+    /// The token before [token].
+    Token beforeToken;
+
     /// The token before the `begin` token.
     Token beforeBegin;
 
@@ -1951,31 +1957,38 @@
         // analyze the tokens following the const keyword.
         assert(optional("const", token.next));
         beforeBegin = token;
-        begin = token.next;
-        token = listener.injectGenericCommentTypeAssign(begin.next);
+        token = listener.injectGenericCommentTypeAssign(token.next.next);
+        // TODO(brianwilkerson): Remove the invocation of `previous` when
+        // `injectGenericCommentTypeAssign` returns the last consumed token.
+        begin = beforeToken = token.previous;
+        // TODO(brianwilkerson): Figure out how to remove the invocation of
+        // `previous`.
+        beforeBegin = begin.previous;
         assert(begin.next == token);
       } else {
         // Modify [begin] in case generic type are injected from a comment.
         begin = token = listener.injectGenericCommentTypeAssign(token.next);
         // TODO(brianwilkerson): Remove the invocation of `previous` when
         // `injectGenericCommentTypeAssign` returns the last consumed token.
-        beforeBegin = begin.previous;
+        beforeToken = beforeBegin = begin.previous;
       }
 
       if (optional("void", token)) {
         // `void` is a type.
         looksLikeType = true;
-        voidToken = token;
+        beforeToken = voidToken = token;
         token = token.next;
       } else if (isValidTypeReference(token) &&
           !isGeneralizedFunctionType(token)) {
         // We're looking at an identifier that could be a type (or `dynamic`).
         looksLikeType = true;
+        beforeToken = token;
         token = token.next;
         if (optional(".", token) && isValidTypeReference(token.next)) {
           // We're looking at `prefix '.' identifier`.
           context = IdentifierContext.prefixedTypeReference;
-          token = token.next.next;
+          beforeToken = token.next;
+          token = beforeToken.next;
         }
         if (optional("<", token)) {
           Token close = closeBraceTokenFor(token);
@@ -1983,9 +1996,14 @@
               (optional(">", close) || optional(">>", close))) {
             // We found some type arguments.
             typeArguments = token;
+            beforeToken = close;
             token = close.next;
           }
         }
+      } else if (token.isModifier && isValidTypeReference(token.next)) {
+        // Recovery - report error and skip modifier
+        reportRecoverableErrorWithToken(token, fasta.templateExpectedType);
+        return parseType(token, continuation, continuationContext, memberKind);
       }
 
       // If what we have seen so far looks like a type, that could be a return
@@ -1997,6 +2015,7 @@
         if (optional("<", token.next)) {
           Token close = closeBraceTokenFor(token.next);
           if (close != null && optional(">", close)) {
+            beforeToken = previousToken(token, close);
             token = close;
           } else {
             break; // Not a function type.
@@ -2010,6 +2029,7 @@
           functionTypes++;
           typeVariableStarters =
               typeVariableStarters.prepend(typeVariableStart);
+          beforeToken = close;
           token = close.next;
         } else {
           break; // Not a function type.
@@ -2039,7 +2059,7 @@
         listener.handleVoidKeyword(voidToken);
         token = voidToken.next;
       } else {
-        token = ensureIdentifier(beforeBegin.next, context);
+        token = ensureIdentifier(beforeBegin, context);
         token = parseQualifiedRestOpt(
             token, IdentifierContext.typeReferenceContinuation);
         assert(typeArguments == null || typeArguments == token.next);
@@ -2077,7 +2097,7 @@
       }
 
       // TODO(brianwilkerson): Remove the invocation of `previous` when
-      // this method accepts the last consumed token.
+      // `commitType` accepts the last consumed token.
       return token.previous;
     }
 
@@ -2125,9 +2145,7 @@
             reportRecoverableError(
                 begin, fasta.messageMissingConstFinalVarOrType);
             listener.handleNoType(begin);
-            // TODO(brianwilkerson): Remove the invocation of `previous` when
-            // this method accepts the last consumed token.
-            return begin.previous;
+            return beforeBegin;
           }
         }
         return commitType();
@@ -2147,9 +2165,7 @@
           }
         }
         listener.handleNoType(begin);
-        // TODO(brianwilkerson): Remove the invocation of `previous` when
-        // this method accepts the last consumed token.
-        return begin.previous;
+        return beforeBegin;
 
       case TypeContinuation.OptionalAfterVar:
         hasVar = true;
@@ -2164,7 +2180,7 @@
       case TypeContinuation.ExpressionStatementOrDeclaration:
         assert(begin.isIdentifier || identical(begin.stringValue, 'void'));
         if (!inPlainSync && optional("await", begin)) {
-          return parseExpressionStatement(begin);
+          return parseExpressionStatement(beforeBegin);
         }
 
         if (looksLikeType && token.isIdentifier) {
@@ -2177,9 +2193,7 @@
 
             // TODO(ahe): Generate type events and call
             // parseVariablesDeclarationRest instead.
-            // TODO(brianwilkerson): Remove the invocation of `previous` when
-            // this method accepts the last consumed token.
-            return parseVariablesDeclaration(begin.previous);
+            return parseVariablesDeclaration(beforeBegin);
           } else if (OPEN_PAREN_TOKEN == afterIdKind) {
             // We are looking at `type identifier '('`.
             if (looksLikeFunctionBody(closeBraceTokenFor(afterId).next)) {
@@ -2197,7 +2211,8 @@
               } else {
                 commitType();
               }
-              return parseNamedFunctionRest(begin, token, beforeFormals, false);
+              return parseNamedFunctionRest(
+                  begin, beforeToken, beforeFormals, false);
             }
           } else if (identical(afterIdKind, LT_TOKEN)) {
             // We are looking at `type identifier '<'`.
@@ -2217,15 +2232,16 @@
                   commitType();
                 }
                 return parseNamedFunctionRest(
-                    begin, token, beforeFormals, false);
+                    begin, beforeToken, beforeFormals, false);
               }
             }
           }
           // Fall-through to expression statement.
         } else {
+          beforeToken = beforeBegin;
           token = begin;
           if (optional(':', token.next)) {
-            return parseLabeledStatement(token);
+            return parseLabeledStatement(beforeToken);
           } else if (optional('(', token.next)) {
             if (looksLikeFunctionBody(closeBraceTokenFor(token.next).next)) {
               // We are looking at `identifier '(' ... ')'` followed by `'{'`,
@@ -2238,7 +2254,7 @@
               listener.beginLocalFunctionDeclaration(token);
               listener.handleModifiers(0);
               listener.handleNoType(token);
-              return parseNamedFunctionRest(begin, token, formals, false);
+              return parseNamedFunctionRest(begin, beforeToken, formals, false);
             }
           } else if (optional('<', token.next)) {
             Token gt = closeBraceTokenFor(token.next);
@@ -2250,13 +2266,13 @@
                 listener.beginLocalFunctionDeclaration(token);
                 listener.handleModifiers(0);
                 listener.handleNoType(token);
-                return parseNamedFunctionRest(begin, token, gt, false);
+                return parseNamedFunctionRest(begin, beforeToken, gt, false);
               }
             }
             // Fall through to expression statement.
           }
         }
-        return parseExpressionStatement(begin);
+        return parseExpressionStatement(beforeBegin);
 
       case TypeContinuation.ExpressionStatementOrConstDeclaration:
         Token identifier;
@@ -2272,28 +2288,29 @@
 
             // TODO(ahe): Generate type events and call
             // parseVariablesDeclarationRest instead.
-            // TODO(brianwilkerson): Remove the invocation of `previous` when
-            // this method accepts the last consumed token.
-            return parseVariablesDeclaration(begin.previous);
+            return parseVariablesDeclaration(beforeBegin);
           }
           // Fall-through to expression statement.
         }
 
-        return parseExpressionStatement(begin);
+        return parseExpressionStatement(beforeBegin);
 
       case TypeContinuation.SendOrFunctionLiteral:
+        Token beforeName;
         Token name;
         bool hasReturnType;
         if (looksLikeType && looksLikeFunctionDeclaration(token)) {
+          beforeName = beforeToken;
           name = token;
           hasReturnType = true;
           // Fall-through to parseNamedFunctionRest below.
         } else if (looksLikeFunctionDeclaration(begin)) {
+          beforeName = beforeBegin;
           name = begin;
           hasReturnType = false;
           // Fall-through to parseNamedFunctionRest below.
         } else {
-          return parseSend(begin, continuationContext);
+          return parseSend(beforeBegin, continuationContext);
         }
 
         Token formals = parseTypeVariablesOpt(name);
@@ -2310,7 +2327,9 @@
         } else {
           listener.handleNoType(begin);
         }
-        return parseNamedFunctionRest(begin, name, formals, true);
+        if (beforeName.next != name)
+          throw new StateError("beforeName.next != name");
+        return parseNamedFunctionRest(begin, beforeName, formals, true);
 
       case TypeContinuation.VariablesDeclarationOrExpression:
         if (looksLikeType &&
@@ -2318,11 +2337,9 @@
             isOneOf4(token.next, '=', ';', ',', 'in')) {
           // TODO(ahe): Generate type events and call
           // parseVariablesDeclarationNoSemicolonRest instead.
-          // TODO(brianwilkerson): Remove the invocation of `previous` when
-          // this method accepts the last consumed token.
-          return parseVariablesDeclarationNoSemicolon(begin.previous);
+          return parseVariablesDeclarationNoSemicolon(beforeBegin);
         }
-        return parseExpression(begin);
+        return parseExpression(beforeBegin);
 
       case TypeContinuation.NormalFormalParameter:
       case TypeContinuation.NormalFormalParameterAfterVar:
@@ -2351,19 +2368,23 @@
         bool untyped = false;
         if (!looksLikeType || optional("this", begin)) {
           untyped = true;
+          beforeToken = beforeBegin;
           token = begin;
         }
 
         Token thisKeyword;
         Token periodAfterThis;
+        Token beforeNameToken = beforeToken;
         Token nameToken = token;
         IdentifierContext nameContext =
             IdentifierContext.formalParameterDeclaration;
+        beforeToken = token;
         token = token.next;
         if (inFunctionType) {
           if (isNamedParameter) {
             nameContext = IdentifierContext.formalParameterDeclaration;
             if (!nameToken.isKeywordOrIdentifier) {
+              beforeToken = beforeNameToken;
               token = nameToken;
             }
           } else if (nameToken.isIdentifier) {
@@ -2371,6 +2392,7 @@
           } else {
             // No name required in a function type.
             nameContext = null;
+            beforeToken = beforeNameToken;
             token = nameToken;
           }
         } else if (optional('this', nameToken)) {
@@ -2384,24 +2406,28 @@
           } else {
             periodAfterThis = token;
           }
+          beforeToken = periodAfterThis;
           token = periodAfterThis.next;
           nameContext = IdentifierContext.fieldInitializer;
           if (!token.isIdentifier) {
             // Recover from a missing identifier by inserting one.
-            token = insertSyntheticIdentifier(token, nameContext);
+            token = insertSyntheticIdentifier(beforeToken, nameContext);
+            beforeToken = previousToken(periodAfterThis, token);
           }
-          nameToken = token;
+          beforeNameToken = beforeToken;
+          beforeToken = nameToken = token;
           token = token.next;
         } else if (!nameToken.isIdentifier) {
           if (optional('.', nameToken)) {
             // Looks like a prefixed type, but missing the type and param names.
             // Set the nameToken so that a synthetic identifier is inserted
             // after the `.` token.
-            nameToken = nameToken.next;
-            token = nameToken;
+            beforeToken = beforeNameToken = nameToken;
+            token = nameToken = nameToken.next;
           } else {
             untyped = true;
-            nameToken = begin;
+            beforeNameToken = beforeBegin;
+            beforeToken = nameToken = begin;
             token = nameToken.next;
           }
         }
@@ -2412,25 +2438,31 @@
 
         // TODO(brianwilkerson): Remove the invocation of `previous` when
         // `injectGenericCommentTypeList` returns the last consumed token.
-        Token previous = listener.injectGenericCommentTypeList(token).previous;
-        token = previous.next;
+        beforeToken = listener.injectGenericCommentTypeList(token).previous;
+        token = beforeToken.next;
 
         Token inlineFunctionTypeStart;
         if (optional("<", token)) {
           Token closer = closeBraceTokenFor(token);
           if (closer != null) {
             if (optional("(", closer.next)) {
-              inlineFunctionTypeStart = previous;
+              inlineFunctionTypeStart = beforeToken;
+              beforeToken = token;
               token = token.next;
             }
           }
         } else if (optional("(", token)) {
-          inlineFunctionTypeStart = previous;
-          token = closeBraceTokenFor(token).next;
+          inlineFunctionTypeStart = beforeToken;
+          beforeToken = closeBraceTokenFor(token);
+          token = beforeToken.next;
         }
 
         if (inlineFunctionTypeStart != null) {
           token = parseTypeVariablesOpt(inlineFunctionTypeStart);
+          // TODO(brianwilkerson): Figure out how to remove the invocation of
+          // `previous`. The method `parseTypeVariablesOpt` returns the last
+          // consumed token.
+          beforeToken = token.previous;
           listener
               .beginFunctionTypedFormalParameter(inlineFunctionTypeStart.next);
           if (!untyped) {
@@ -2440,13 +2472,17 @@
               Token saved = token;
               commitType();
               token = saved;
+              // We need to recompute the before tokens because [commitType] can
+              // cause synthetic tokens to be inserted.
+              beforeToken = previousToken(beforeToken, token);
+              beforeNameToken = previousToken(beforeNameToken, nameToken);
             }
           } else {
             listener.handleNoType(begin);
           }
-          token = parseFormalParametersRequiredOpt(
-                  token, MemberKind.FunctionTypedParameter)
-              .next;
+          beforeToken = parseFormalParametersRequiredOpt(
+              token, MemberKind.FunctionTypedParameter);
+          token = beforeToken.next;
           listener.endFunctionTypedFormalParameter();
 
           // Generalized function types don't allow inline function types.
@@ -2462,10 +2498,18 @@
           Token saved = token;
           commitType();
           token = saved;
+          // We need to recompute the before tokens because [commitType] can
+          // cause synthetic tokens to be inserted.
+          beforeToken = previousToken(beforeToken, token);
+          beforeNameToken = previousToken(beforeNameToken, nameToken);
         }
 
         if (nameContext != null) {
-          nameToken = ensureIdentifier(nameToken, nameContext);
+          nameToken = ensureIdentifier(beforeNameToken, nameContext);
+          // We need to recompute the before tokens because [ensureIdentifier]
+          // can cause synthetic tokens to be inserted.
+          beforeToken = previousToken(beforeToken, token);
+          beforeNameToken = previousToken(beforeNameToken, nameToken);
         } else {
           listener.handleNoName(nameToken);
         }
@@ -2473,7 +2517,8 @@
         String value = token.stringValue;
         if ((identical('=', value)) || (identical(':', value))) {
           Token equal = token;
-          token = parseExpression(token.next).next;
+          beforeToken = parseExpression(token);
+          token = beforeToken.next;
           listener.handleValuedFormalParameter(equal, token);
           if (isMandatoryFormalParameterKind(parameterKind)) {
             reportRecoverableError(
@@ -2493,10 +2538,7 @@
         }
         listener.endFormalParameter(
             thisKeyword, periodAfterThis, nameToken, parameterKind, memberKind);
-
-        // TODO(brianwilkerson): Remove the invocation of `previous` when this
-        // method accepts the last consumed token.
-        return token.previous;
+        return beforeToken;
     }
 
     throw "Internal error: Unhandled continuation '$continuation'.";
@@ -2663,12 +2705,12 @@
     IdentifierContext context = isTopLevel
         ? IdentifierContext.topLevelVariableDeclaration
         : IdentifierContext.fieldDeclaration;
-    token = ensureIdentifier(beforeName.next, context);
+    token = ensureIdentifier(beforeName, context);
 
     int fieldCount = 1;
     token = parseFieldInitializerOpt(token, name, varFinalOrConst, isTopLevel);
     while (optional(',', token.next)) {
-      name = ensureIdentifier(token.next.next, context);
+      name = ensureIdentifier(token.next, context);
       token = parseFieldInitializerOpt(name, name, varFinalOrConst, isTopLevel);
       ++fieldCount;
     }
@@ -2683,28 +2725,32 @@
 
   Token parseTopLevelMethod(Token start, Token afterModifiers, Token beforeType,
       Token getOrSet, Token beforeName) {
+    Token beforeToken = start;
     Token token = start = start.next;
     Token name = beforeName.next;
 
     // Parse modifiers
+    Token beforeExternalToken;
     Token externalToken;
     if (token == afterModifiers) {
       listener.beginTopLevelMethod(start, name);
       listener.handleModifiers(0);
     } else if (optional('external', token) && token.next == afterModifiers) {
       listener.beginTopLevelMethod(start, name);
+      beforeExternalToken = beforeToken;
       externalToken = token;
-      parseModifier(externalToken);
+      parseModifier(beforeToken);
       listener.handleModifiers(1);
       token = token.next;
     } else {
       // If there are modifiers other than or in addition to `external`
       // then we need to recover.
       final context = new TopLevelMethodModifierContext(this, name);
-      // TODO(brianwilkerson): This use of `syntheticPreviousToken` should be
-      // removed when `parseTopLevelMethod` accepts the last consumed token.
-      token =
-          context.parseRecovery(syntheticPreviousToken(token), afterModifiers);
+      token = context.parseRecovery(beforeToken, afterModifiers);
+      // TODO(brianwilkerson): Remove the invocation of `previous` when
+      // `parseRecovery` returns the last consumed token.
+      beforeToken = token.previous;
+      beforeExternalToken = beforeToken;
       externalToken = context.externalToken;
       name = context.name;
       // TODO(brianwilkerson): Remove the invocation of `previous` when
@@ -2724,7 +2770,7 @@
       if (externalToken == null) {
         listener.handleModifiers(0);
       } else {
-        parseModifier(externalToken);
+        parseModifier(beforeExternalToken);
         listener.handleModifiers(1);
       }
       // Fall through to continue parsing the top level method.
@@ -2736,7 +2782,7 @@
       parseType(beforeType, TypeContinuation.Optional);
     }
     name = ensureIdentifier(
-        beforeName.next, IdentifierContext.topLevelFunctionDeclaration);
+        beforeName, IdentifierContext.topLevelFunctionDeclaration);
 
     bool isGetter = false;
     if (getOrSet == null) {
@@ -2804,10 +2850,6 @@
     // In addition, the loop below will include things that can't be
     // identifiers. This may be desirable (for error recovery), or
     // not. Regardless, this method probably needs an overhaul.
-
-    // TODO(brianwilkerson) Return the tokens before the tokens that are
-    // currently being returned so that they can be passed in where the last
-    // consumed token is required.
     Link<Token> identifiers = const Link<Token>();
 
     // `true` if 'get' has been seen.
@@ -2984,7 +3026,7 @@
     if (optional('=', next)) {
       Token assignment = next;
       listener.beginFieldInitializer(next);
-      token = parseExpression(next.next);
+      token = parseExpression(next);
       listener.endFieldInitializer(assignment, token.next);
     } else {
       if (varFinalOrConst != null) {
@@ -3009,7 +3051,7 @@
     if (optional('=', token.next)) {
       Token assignment = token.next;
       listener.beginVariableInitializer(assignment);
-      token = parseExpression(assignment.next);
+      token = parseExpression(assignment);
       listener.endVariableInitializer(assignment);
     } else {
       listener.handleNoVariableInitializer(token.next);
@@ -3064,7 +3106,7 @@
     if (optional('assert', next)) {
       token = parseAssert(token, Assert.Initializer);
     } else {
-      token = parseExpression(token.next);
+      token = parseExpression(token);
     }
     listener.endInitializer(token.next);
     return token;
@@ -3191,7 +3233,7 @@
   }
 
   Token parseModifier(Token token) {
-    // TODO(brianwilkerson) Accept the last consumed token.
+    token = token.next;
     assert(token.isModifier);
     listener.handleModifier(token);
     return token;
@@ -3338,15 +3380,13 @@
 
     Link<Token> identifiers = findMemberName(start);
     if (identifiers.isEmpty) {
-      return reportUnrecoverableErrorWithToken(
-          token, fasta.templateExpectedDeclaration);
+      return recoverFromInvalidClassMember(start);
     }
     Token afterName = identifiers.head.next;
     identifiers = identifiers.tail;
 
     if (identifiers.isEmpty) {
-      return reportUnrecoverableErrorWithToken(
-          token, fasta.templateExpectedDeclaration);
+      return recoverFromInvalidClassMember(start);
     }
     Token beforeName = identifiers.head;
     identifiers = identifiers.tail;
@@ -3409,62 +3449,66 @@
       }
     }
 
-    Token afterModifiers =
-        identifiers.isNotEmpty ? identifiers.head.next.next : start.next;
+    Token lastModifier = identifiers.isNotEmpty ? identifiers.head.next : start;
     token = isField
         ? parseFields(
             start, identifiers.reverse(), beforeType?.next, beforeName, false)
-        : parseMethod(start, afterModifiers, beforeType, getOrSet, beforeName);
+        : parseMethod(start, lastModifier, beforeType, getOrSet, beforeName);
     listener.endMember();
     return token;
   }
 
-  Token parseMethod(Token token, Token afterModifiers, Token beforeType,
+  Token parseMethod(Token token, Token lastModifier, Token beforeType,
       Token getOrSet, Token beforeName) {
+    Token beforeToken = token;
     Token start = token = token.next;
     Token name = beforeName.next;
 
     Token externalModifier;
     Token staticModifier;
-    if (token != afterModifiers) {
+    if (token != lastModifier.next) {
       int modifierCount = 0;
       if (optional('external', token)) {
         externalModifier = token;
-        parseModifier(externalModifier);
+        parseModifier(beforeToken);
         ++modifierCount;
+        beforeToken = token;
         token = token.next;
       }
-      if (token != afterModifiers) {
+      if (token != lastModifier.next) {
         if (optional('static', token)) {
           staticModifier = token;
-          parseModifier(staticModifier);
+          parseModifier(beforeToken);
           ++modifierCount;
+          beforeToken = token;
           token = token.next;
         }
-        if (token != afterModifiers) {
+        if (token != lastModifier.next) {
           if (getOrSet == null) {
             if (optional("const", token)) {
-              if (token.next == afterModifiers) {
-                parseModifier(token);
+              if (token.next == lastModifier.next) {
+                parseModifier(beforeToken);
                 ++modifierCount;
+                beforeToken = token;
                 token = token.next;
               }
             }
           } else if (optional('set', getOrSet)) {
             if (staticModifier == null && optional('covariant', token)) {
-              if (token.next == afterModifiers) {
-                parseModifier(token);
+              if (token.next == lastModifier.next) {
+                parseModifier(beforeToken);
                 ++modifierCount;
+                beforeToken = token;
                 token = token.next;
               }
             }
           }
           // If the next token is a modifier,
           // then it's probably out of order and we need to recover from that.
-          if (token != afterModifiers) {
+          if (token != lastModifier.next) {
             final context = new ClassMethodModifierContext(this);
-            token = context.parseRecovery(token, externalModifier,
-                staticModifier, getOrSet, afterModifiers);
+            token = context.parseRecovery(beforeToken, externalModifier,
+                staticModifier, getOrSet, lastModifier);
 
             // If the modifiers form a partial top level directive
             // or declaration and we have found the start of a new top level
@@ -3493,13 +3537,12 @@
       parseType(beforeType, TypeContinuation.Optional);
     }
     if (getOrSet == null && optional('operator', name)) {
-      token = parseOperatorName(beforeName.next);
+      token = parseOperatorName(beforeName);
       if (staticModifier != null) {
         reportRecoverableError(staticModifier, fasta.messageStaticOperator);
       }
     } else {
-      token = ensureIdentifier(
-          beforeName.next, IdentifierContext.methodDeclaration);
+      token = ensureIdentifier(beforeName, IdentifierContext.methodDeclaration);
     }
 
     // TODO(brianwilkerson): Move the next statement inside the else above
@@ -3561,14 +3604,14 @@
       int modifierCount = 0;
       if (optional('external', next)) {
         externalToken = next;
-        parseModifier(next);
+        parseModifier(token);
         ++modifierCount;
         token = next;
         next = token.next;
       }
       if (optional('const', next)) {
         constToken = next;
-        parseModifier(next);
+        parseModifier(token);
         ++modifierCount;
         token = next;
         next = token.next;
@@ -3623,14 +3666,15 @@
   }
 
   Token parseOperatorName(Token token) {
-    // TODO(brianwilkerson) Accept the last consumed token.
+    Token beforeToken = token;
+    token = token.next;
     assert(optional('operator', token));
     Token next = token.next;
     if (next.isUserDefinableOperator) {
       listener.handleOperatorName(token, next);
       return next;
     } else if (optional('(', next)) {
-      return ensureIdentifier(token, IdentifierContext.operatorName);
+      return ensureIdentifier(beforeToken, IdentifierContext.operatorName);
     } else {
       // Recovery
       // The user has specified an invalid operator name.
@@ -3668,16 +3712,17 @@
   /// - Modifiers.
   /// - Return type.
   Token parseNamedFunctionRest(
-      Token begin, Token name, Token formals, bool isFunctionExpression) {
+      Token begin, Token beforeName, Token formals, bool isFunctionExpression) {
     // TODO(brianwilkerson): Move `name` to be the first parameter (and consider
     // renaming it to `token`).
-    // TODO(brianwilkerson) Accept the last consumed token.
-    Token token = name;
+    Token token = beforeName.next;
     listener.beginFunctionName(token);
-    token = ensureIdentifier(token, IdentifierContext.localFunctionDeclaration)
-        .next;
+    token =
+        ensureIdentifier(beforeName, IdentifierContext.localFunctionDeclaration)
+            .next;
     if (isFunctionExpression) {
-      reportRecoverableError(name, fasta.messageNamedFunctionExpression);
+      reportRecoverableError(
+          beforeName.next, fasta.messageNamedFunctionExpression);
     }
     listener.endFunctionName(begin, token);
     token = parseFormalParametersOpt(formals, MemberKind.Local);
@@ -3709,7 +3754,7 @@
 
   Token parseConstructorReference(Token token) {
     Token start =
-        ensureIdentifier(token.next, IdentifierContext.constructorReference);
+        ensureIdentifier(token, IdentifierContext.constructorReference);
     listener.beginConstructorReference(start);
     token = parseQualifiedRestOpt(
         start, IdentifierContext.constructorReferenceContinuation);
@@ -3717,7 +3762,7 @@
     Token period = null;
     if (optional('.', token.next)) {
       period = token.next;
-      token = ensureIdentifier(period.next,
+      token = ensureIdentifier(period,
           IdentifierContext.constructorReferenceContinuationAfterTypeArguments);
     } else {
       listener.handleNoConstructorReferenceContinuationAfterTypeArguments(
@@ -3739,7 +3784,6 @@
   }
 
   Token skipFunctionBody(Token token, bool isExpression, bool allowAbstract) {
-    // TODO(brianwilkerson) Return the last consumed token.
     assert(!isExpression);
     token = skipAsyncModifier(token);
     Token next = token.next;
@@ -3757,29 +3801,36 @@
       listener.handleNativeFunctionBodyIgnored(nativeToken, next);
       // Fall through to recover and skip function body
     }
-    token = next;
-    String value = token.stringValue;
+    String value = next.stringValue;
     if (identical(value, ';')) {
+      token = next;
       if (!allowAbstract) {
         reportRecoverableError(token, fasta.messageExpectedBody);
       }
       listener.handleNoFunctionBody(token);
-    } else {
-      if (identical(value, '=>')) {
-        token = parseExpression(token.next);
-        expectSemicolon(token.next);
+    } else if (identical(value, '=>')) {
+      token = parseExpression(next);
+      // There ought to be a semicolon following the expression, but we check
+      // before advancing in order to be consistent with the way the method
+      // [parseFunctionBody] recovers when the semicolon is missing.
+      if (optional(';', token.next)) {
         token = token.next;
-        listener.handleFunctionBodySkipped(token, true);
-      } else if (identical(value, '=')) {
-        reportRecoverableError(token, fasta.messageExpectedBody);
-        token = parseExpression(token.next);
-        expectSemicolon(token.next);
-        token = token.next;
-        listener.handleFunctionBodySkipped(token, true);
-      } else {
-        token = skipBlock(token);
-        listener.handleFunctionBodySkipped(token, false);
       }
+      listener.handleFunctionBodySkipped(token, true);
+    } else if (identical(value, '=')) {
+      token = next;
+      reportRecoverableError(token, fasta.messageExpectedBody);
+      token = parseExpression(token);
+      // There ought to be a semicolon following the expression, but we check
+      // before advancing in order to be consistent with the way the method
+      // [parseFunctionBody] recovers when the semicolon is missing.
+      if (optional(';', token.next)) {
+        token = token.next;
+      }
+      listener.handleFunctionBodySkipped(token, true);
+    } else {
+      token = skipBlock(token);
+      listener.handleFunctionBodySkipped(token, false);
     }
     return token;
   }
@@ -3813,7 +3864,7 @@
       return next;
     } else if (optional('=>', next)) {
       Token begin = next;
-      token = parseExpression(next.next);
+      token = parseExpression(next);
       if (!ofFunctionExpression) {
         token = ensureSemicolon(token);
         listener.handleExpressionFunctionBody(begin, token);
@@ -3829,7 +3880,7 @@
       Token begin = next;
       // Recover from a bad factory method.
       reportRecoverableError(next, fasta.messageExpectedBody);
-      token = parseExpression(next.next);
+      token = parseExpression(next);
       if (!ofFunctionExpression) {
         token = ensureSemicolon(token);
         listener.handleExpressionFunctionBody(begin, token);
@@ -3927,7 +3978,7 @@
       // This happens for degenerate programs, for example, a lot of nested
       // if-statements. The language test deep_nesting2_negative_test, for
       // example, provokes this.
-      return reportUnrecoverableError(token.next, fasta.messageStackOverflow);
+      return recoverFromStackOverflow(token.next);
     }
     Token result = parseStatementX(token);
     statementDepth--;
@@ -3994,7 +4045,7 @@
     } else if (identical(value, '@')) {
       return parseVariablesDeclaration(token);
     } else {
-      return parseExpressionStatement(token.next);
+      return parseExpressionStatement(token);
     }
   }
 
@@ -4011,7 +4062,7 @@
     if (optional('*', token.next)) {
       starToken = token = token.next;
     }
-    token = parseExpression(token.next);
+    token = parseExpression(token);
     token = ensureSemicolon(token);
     listener.endYieldStatement(begin, starToken, token);
     return token;
@@ -4031,7 +4082,7 @@
       listener.endReturnStatement(false, begin, next);
       return next;
     }
-    token = parseExpression(token.next);
+    token = parseExpression(token);
     token = ensureSemicolon(token);
     listener.endReturnStatement(true, begin, token);
     if (inGenerator) {
@@ -4062,11 +4113,10 @@
   /// ;
   /// ```
   Token parseLabel(Token token) {
-    // TODO(brianwilkerson) Accept the last consumed token.
     // TODO(brianwilkerson): Enable this assert.
     // `parseType` is allowing `void` to be a label.
-//    assert(token.isIdentifier);
-    assert(optional(':', token.next));
+//    assert(token.next.isIdentifier);
+    assert(optional(':', token.next.next));
     token = ensureIdentifier(token, IdentifierContext.labelDeclaration).next;
     expect(':', token);
     listener.handleLabel(token);
@@ -4079,20 +4129,19 @@
   /// ;
   /// ```
   Token parseLabeledStatement(Token token) {
-    // TODO(brianwilkerson) Accept the last consumed token.
+    Token next = token.next;
     // TODO(brianwilkerson): Enable this assert.
     // `parseType` is allowing `void` to be a label.
-//    assert(token.isIdentifier);
-    assert(optional(':', token.next));
+//    assert(next.isIdentifier);
+    assert(optional(':', next.next));
     int labelCount = 0;
     do {
-      token = parseLabel(token).next;
+      token = parseLabel(token);
+      next = token.next;
       labelCount++;
-    } while (token.isIdentifier && optional(':', token.next));
-    listener.beginLabeledStatement(token, labelCount);
-    // TODO(brianwilkerson): Remove the invocation of `previous` when this
-    // method accepts the last consumed token.
-    token = parseStatementOpt(token.previous);
+    } while (next.isIdentifier && optional(':', next.next));
+    listener.beginLabeledStatement(next, labelCount);
+    token = parseStatementOpt(token);
     listener.endLabeledStatement(labelCount);
     return token;
   }
@@ -4108,11 +4157,10 @@
   /// semicolon will be inserted before [token] and the semicolon will be
   /// returned.
   Token parseExpressionStatement(Token token) {
-    // TODO(brianwilkerson) Accept the last consumed token.
     // TODO(brianwilkerson): If the next token is not the start of a valid
     // expression, then this method shouldn't report that we have an expression
     // statement.
-    listener.beginExpressionStatement(token);
+    listener.beginExpressionStatement(token.next);
     token = parseExpression(token);
     token = ensureSemicolon(token);
     listener.endExpressionStatement(token);
@@ -4185,20 +4233,16 @@
   }
 
   Token parseRecoverExpression(Token token, Message message) {
-    return parseExpression(token.next);
+    return parseExpression(token);
   }
 
   int expressionDepth = 0;
   Token parseExpression(Token token) {
-    // TODO(brianwilkerson) Accept the last consumed token.
-    // TODO(brianwilkerson): Remove the invocation of `previous` when this
-    // method can accept the last consumed token.
-    token = token.previous;
     if (expressionDepth++ > 500) {
       // This happens in degenerate programs, for example, with a lot of nested
       // list literals. This is provoked by, for example, the language test
       // deep_nesting1_negative_test.
-      return reportUnrecoverableError(token.next, fasta.messageStackOverflow);
+      return reportUnmatchedToken(token.next);
     }
     Token result = optional('throw', token.next)
         ? parseThrowExpression(token, true)
@@ -4329,7 +4373,7 @@
     if (optional('[', token.next)) {
       token = parseArgumentOrIndexStar(token, null);
     } else if (token.next.isIdentifier) {
-      token = parseSend(token.next, IdentifierContext.expressionContinuation);
+      token = parseSend(token, IdentifierContext.expressionContinuation);
       listener.endBinaryExpression(cascadeOperator);
     } else {
       return reportUnexpectedToken(token.next);
@@ -4340,7 +4384,7 @@
       mark = token;
       if (optional('.', next)) {
         Token period = next;
-        token = parseSend(next.next, IdentifierContext.expressionContinuation);
+        token = parseSend(next, IdentifierContext.expressionContinuation);
         next = token.next;
         listener.endBinaryExpression(period);
       }
@@ -4414,7 +4458,7 @@
         Token openSquareBracket = next;
         bool old = mayParseFunctionExpressions;
         mayParseFunctionExpressions = true;
-        token = parseExpression(next.next);
+        token = parseExpression(next);
         next = token.next;
         mayParseFunctionExpressions = old;
         if (!optional(']', next)) {
@@ -4519,7 +4563,7 @@
       } while (token is ErrorToken);
       return parsePrimary(previous, context);
     } else {
-      return parseSend(token.next, context);
+      return parseSend(token, context);
     }
   }
 
@@ -4559,7 +4603,7 @@
       token = rewriter.insertToken(replacement, token);
     }
     BeginToken begin = token;
-    token = parseExpression(token.next).next;
+    token = parseExpression(token).next;
     if (!identical(begin.endGroup, token)) {
       reportUnexpectedToken(token).next;
       token = begin.endGroup;
@@ -4623,7 +4667,7 @@
           token = token.next;
           break;
         }
-        token = parseExpression(token.next).next;
+        token = parseExpression(token).next;
         ++count;
       } while (optional(',', token));
       mayParseFunctionExpressions = old;
@@ -4734,17 +4778,17 @@
     // Assume the listener rejects non-string keys.
     // TODO(brianwilkerson): Change the assumption above by moving error
     // checking into the parser, making it possible to recover.
-    token = parseExpression(token.next).next;
+    token = parseExpression(token).next;
     Token colon = token;
     expect(':', colon);
-    token = parseExpression(token.next);
+    token = parseExpression(token);
     listener.endLiteralMapEntry(colon, token.next);
     return token;
   }
 
   Token parseSendOrFunctionLiteral(Token token, IdentifierContext context) {
     if (!mayParseFunctionExpressions) {
-      return parseSend(token.next, context);
+      return parseSend(token, context);
     } else {
       return parseType(token, TypeContinuation.SendOrFunctionLiteral, context);
     }
@@ -4752,13 +4796,15 @@
 
   Token parseRequiredArguments(Token token) {
     Token next = token.next;
-    if (optional('(', next)) {
-      token = parseArguments(token);
-    } else {
-      listener.handleNoArguments(next);
-      // TODO(brianwilkerson): Consider recovering by inserting parentheses.
-      token = reportUnexpectedToken(next);
+    if (!optional('(', next)) {
+      reportRecoverableError(
+          token, fasta.templateExpectedButGot.withArguments('('));
+      BeginToken replacement = link(
+          new SyntheticBeginToken(TokenType.OPEN_PAREN, token.offset),
+          new SyntheticToken(TokenType.CLOSE_PAREN, token.offset));
+      rewriter.insertToken(replacement, next);
     }
+    token = parseArguments(token);
     return token;
   }
 
@@ -4895,11 +4941,11 @@
       return next;
     } else {
       int count = 1;
-      token = ensureIdentifier(token.next, IdentifierContext.literalSymbol);
+      token = ensureIdentifier(token, IdentifierContext.literalSymbol);
       while (optional('.', token.next)) {
         count++;
         token = ensureIdentifier(
-            token.next.next, IdentifierContext.literalSymbolContinuation);
+            token.next, IdentifierContext.literalSymbolContinuation);
       }
       listener.endLiteralSymbol(hashToken, count);
       return token;
@@ -4916,7 +4962,7 @@
     while (kind != EOF_TOKEN) {
       if (identical(kind, STRING_INTERPOLATION_TOKEN)) {
         // Parsing ${expression}.
-        token = parseExpression(token.next.next).next;
+        token = parseExpression(token.next).next;
         expect('}', token);
       } else if (identical(kind, STRING_INTERPOLATION_IDENTIFIER_TOKEN)) {
         // Parsing $identifier.
@@ -4939,7 +4985,7 @@
       listener.handleThisExpression(next, IdentifierContext.expression);
       return next;
     } else {
-      return parseSend(token.next, IdentifierContext.expression);
+      return parseSend(token, IdentifierContext.expression);
     }
   }
 
@@ -4969,7 +5015,6 @@
   }
 
   Token parseSend(Token token, IdentifierContext context) {
-    // TODO(brianwilkerson) Accept the last consumed token.
     Token beginToken = ensureIdentifier(token, context);
     // TODO(brianwilkerson): Remove the invocation of `previous` when
     // `injectGenericCommentTypeList` returns the last consumed token.
@@ -5034,16 +5079,16 @@
       }
       Token colon = null;
       if (optional(':', next.next)) {
-        token = ensureIdentifier(
-                token.next, IdentifierContext.namedArgumentReference)
-            .next;
+        token =
+            ensureIdentifier(token, IdentifierContext.namedArgumentReference)
+                .next;
         colon = token;
         hasSeenNamedArgument = true;
       } else if (hasSeenNamedArgument) {
         // Positional argument after named argument.
         reportRecoverableError(next, fasta.messagePositionalAfterNamedArgument);
       }
-      token = parseExpression(token.next);
+      token = parseExpression(token);
       next = token.next;
       if (colon != null) listener.handleNamedArgument(colon);
       ++argumentCount;
@@ -5161,8 +5206,8 @@
   }
 
   Token parseOptionallyInitializedIdentifier(Token token) {
-    Token nameToken = ensureIdentifier(
-        token.next, IdentifierContext.localVariableDeclaration);
+    Token nameToken =
+        ensureIdentifier(token, IdentifierContext.localVariableDeclaration);
     listener.beginInitializedIdentifier(nameToken);
     token = parseVariableInitializerOpt(nameToken);
     listener.endInitializedIdentifier(nameToken);
@@ -5265,7 +5310,7 @@
     if (optional(';', leftSeparator.next)) {
       token = parseEmptyStatement(leftSeparator);
     } else {
-      token = parseExpressionStatement(leftSeparator.next);
+      token = parseExpressionStatement(leftSeparator);
     }
     int expressionCount = 0;
     while (true) {
@@ -5274,7 +5319,7 @@
         token = next;
         break;
       }
-      token = parseExpression(token.next).next;
+      token = parseExpression(token).next;
       ++expressionCount;
       if (!optional(',', token)) {
         break;
@@ -5305,7 +5350,7 @@
     Token inKeyword = token.next;
     assert(optional('in', inKeyword) || optional(':', inKeyword));
     listener.beginForInExpression(inKeyword.next);
-    token = parseExpression(inKeyword.next).next;
+    token = parseExpression(inKeyword).next;
     listener.endForInExpression(token);
     expect(')', token);
     listener.beginForInBody(token.next);
@@ -5414,7 +5459,7 @@
     Token throwToken = token.next;
     assert(optional('throw', throwToken));
     token = allowCascades
-        ? parseExpression(throwToken.next)
+        ? parseExpression(throwToken)
         : parseExpressionWithoutCascade(throwToken);
     listener.handleThrowExpression(throwToken, token.next);
     return token;
@@ -5601,7 +5646,7 @@
       String value = peek.stringValue;
       if (identical(value, 'default')) {
         while (!identical(token.next, peek)) {
-          token = parseLabel(token.next);
+          token = parseLabel(token);
           labelCount++;
         }
         defaultKeyword = token.next;
@@ -5610,12 +5655,12 @@
         break;
       } else if (identical(value, 'case')) {
         while (!identical(token.next, peek)) {
-          token = parseLabel(token.next);
+          token = parseLabel(token);
           labelCount++;
         }
         Token caseKeyword = token.next;
         listener.beginCaseExpression(caseKeyword);
-        token = parseExpression(caseKeyword.next).next;
+        token = parseExpression(caseKeyword).next;
         listener.endCaseExpression(token);
         Token colonToken = token;
         expect(':', colonToken);
@@ -5671,7 +5716,7 @@
     assert(optional('break', breakKeyword));
     bool hasTarget = false;
     if (token.next.isIdentifier) {
-      token = ensureIdentifier(token.next, IdentifierContext.labelReference);
+      token = ensureIdentifier(token, IdentifierContext.labelReference);
       hasTarget = true;
     }
     token = ensureSemicolon(token);
@@ -5694,13 +5739,13 @@
     expect('(', token);
     bool old = mayParseFunctionExpressions;
     mayParseFunctionExpressions = true;
-    token = parseExpression(token.next).next;
+    token = parseExpression(token).next;
     if (optional(',', token)) {
       if (optional(')', token.next)) {
         token = token.next;
       } else {
         commaToken = token;
-        token = parseExpression(token.next).next;
+        token = parseExpression(token).next;
       }
     }
     if (optional(',', token)) {
@@ -5710,7 +5755,7 @@
       } else {
         while (optional(',', token)) {
           Token begin = token.next;
-          token = parseExpression(token.next).next;
+          token = parseExpression(token).next;
           listener.handleExtraneousExpression(
               begin, fasta.messageAssertExtraneousArgument);
         }
@@ -5749,7 +5794,7 @@
     assert(optional('continue', continueKeyword));
     bool hasTarget = false;
     if (token.next.isIdentifier) {
-      token = ensureIdentifier(token.next, IdentifierContext.labelReference);
+      token = ensureIdentifier(token, IdentifierContext.labelReference);
       hasTarget = true;
     }
     token = ensureSemicolon(token);
@@ -5769,6 +5814,35 @@
     return token;
   }
 
+  /// Given a token ([beforeToken]) that is known to be before another [token],
+  /// return the token that is immediately before the [token].
+  Token previousToken(Token beforeToken, Token token) {
+    Token next = beforeToken.next;
+    while (next != token && next != beforeToken) {
+      beforeToken = next;
+      next = beforeToken.next;
+    }
+    return beforeToken;
+  }
+
+  /// Recover from finding an invalid class member. The metadata for the member,
+  /// if any, has already been parsed (and events have already been generated).
+  /// The member was expected to start with the token after [beforeMember].
+  Token recoverFromInvalidClassMember(Token beforeMember) {
+    Token next = beforeMember.next;
+    if (optional(';', next)) {
+      // Report and skip extra semicolons that appear between members.
+      // TODO(brianwilkerson) Provide a more specific error message.
+      reportRecoverableError(
+          next, fasta.templateExpectedClassMember.withArguments(next));
+      listener.handleInvalidMember(next);
+      listener.endMember();
+      return next;
+    }
+    return reportUnrecoverableErrorWithToken(
+        next, fasta.templateExpectedClassMember);
+  }
+
   /// Report that the given [token] was expected to be the beginning of a block
   /// but isn't, insert a synthetic pair of curly braces, and return the opening
   /// curly brace.
@@ -5810,6 +5884,16 @@
     return replacement;
   }
 
+  /// Report that the nesting depth of the code being parsed is too large for
+  /// the parser to safely handle. Return the EOF token in order to cause the
+  /// parser to unwind and exit.
+  Token recoverFromStackOverflow(Token token) {
+    listener.handleRecoverableError(fasta.messageStackOverflow, token, token);
+    Token semicolon = new SyntheticToken(TokenType.SEMICOLON, token.offset);
+    listener.handleEmptyStatement(semicolon);
+    return skipToEof(token);
+  }
+
   /// Don't call this method. Should only be used as a last resort when there
   /// is no feasible way to recover from a parser error.
   Token reportUnrecoverableError(Token token, Message message) {
@@ -5899,7 +5983,15 @@
 
   /// Create and return a token whose next token is the given [token].
   Token syntheticPreviousToken(Token token) {
-    Token before = new Token.eof(0);
+    // Return the previous token if there is one so that any token inserted
+    // before `token` will be properly inserted into the token stream.
+    // TODO(danrubel): remove this once all methods have been converted to
+    // use and return the last token consumed and the `previous` field
+    // has been removed.
+    if (token.previous != null) {
+      return token.previous;
+    }
+    Token before = new Token.eof(-1);
     before.next = token;
     return before;
   }
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index e6df35a..6b3b16b 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -784,10 +784,18 @@
   }
 
   @override
-  void addCompileTimeError(Message message, int offset, int length) {
-    library.addCompileTimeError(message, offset, uri,
-        // We assume this error has already been reported by OutlineBuilder.
-        silent: true);
+  void addCompileTimeError(Message message, int charOffset, int length) {
+    library.addCompileTimeError(message, charOffset, uri);
+  }
+
+  @override
+  void addWarning(Message message, int charOffset, int length) {
+    library.addWarning(message, charOffset, uri);
+  }
+
+  @override
+  void addNit(Message message, int charOffset) {
+    library.addNit(message, charOffset, uri);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 707a7fb..b59d33a 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -58,12 +58,6 @@
   final bool enableNative;
   final bool stringExpectedAfterNative;
 
-  /// When true, recoverable parser errors are silently ignored. This is
-  /// because they will be reported by the BodyBuilder later. However, typedefs
-  /// are fully compiled by the outline builder, so parser errors are turned on
-  /// when parsing typedefs.
-  bool silenceParserErrors = true;
-
   String nativeMethodName;
 
   OutlineBuilder(SourceLibraryBuilder library)
@@ -779,7 +773,6 @@
   @override
   void beginFunctionTypeAlias(Token token) {
     library.beginNestedDeclaration("#typedef", hasMembers: false);
-    silenceParserErrors = false;
   }
 
   @override
@@ -859,7 +852,6 @@
     library.addFunctionTypeAlias(documentationComment, metadata, name,
         typeVariables, functionType, charOffset);
     checkEmpty(typedefKeyword.charOffset);
-    silenceParserErrors = true;
   }
 
   @override
@@ -1045,18 +1037,18 @@
   }
 
   @override
-  void handleRecoverableError(
-      Message message, Token startToken, Token endToken) {
-    if (silenceParserErrors) {
-      debugEvent("RecoverableError");
-    } else {
-      super.handleRecoverableError(message, startToken, endToken);
-    }
+  void addCompileTimeError(Message message, int charOffset, int length) {
+    library.addCompileTimeError(message, charOffset, uri);
   }
 
   @override
-  void addCompileTimeError(Message message, int offset, int length) {
-    library.addCompileTimeError(message, offset, uri);
+  void addWarning(Message message, int charOffset, int length) {
+    library.addWarning(message, charOffset, uri);
+  }
+
+  @override
+  void addNit(Message message, int charOffset) {
+    library.addNit(message, charOffset, uri);
   }
 
   /// Return the documentation comment for the entity that starts at the
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 2e9a4d1..e8d2bc3 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
@@ -8,8 +8,7 @@
 
 import '../../base/resolve_relative_uri.dart' show resolveRelativeUri;
 
-import '../../base/instrumentation.dart'
-    show Instrumentation, InstrumentationValueLiteral;
+import '../../base/instrumentation.dart' show Instrumentation;
 
 import '../../scanner/token.dart' show Token;
 
@@ -42,9 +41,6 @@
 
 import '../fasta_codes.dart'
     show
-        LocatedMessage,
-        Message,
-        codeTypeNotFound,
         messageExpectedUri,
         messagePartOfSelf,
         messageMemberWithSameNameAsClass,
@@ -610,7 +606,14 @@
       List<TypeVariableBuilder> original);
 
   @override
-  String get fullNameForErrors => name ?? "<library '$relativeFileUri'>";
+  String get fullNameForErrors {
+    // TODO(ahe): Consider if we should use relativizeUri here. The downside to
+    // doing that is that this URI may be used in an error message. Ideally, we
+    // should create a class that represents qualified names that we can
+    // relativize when printing a message, but still store the full URI in
+    // .dill files.
+    return name ?? "<library '$fileUri'>";
+  }
 
   @override
   void prepareTopLevelInference(
@@ -630,41 +633,6 @@
       member.instrumentTopLevelInference(instrumentation);
     });
   }
-
-  @override
-  void addWarning(Message message, int charOffset, Uri uri,
-      {bool silent: false, LocatedMessage context}) {
-    super
-        .addWarning(message, charOffset, uri, silent: silent, context: context);
-    if (!silent) {
-      // TODO(ahe): All warnings should have a charOffset, but currently, some
-      // unresolved type warnings lack them.
-      if (message.code != codeTypeNotFound && charOffset != -1) {
-        // TODO(ahe): Should I add a value for messages?
-        loader.instrumentation?.record(uri, charOffset, "warning",
-            new InstrumentationValueLiteral(message.code.name));
-        if (context != null) {
-          loader.instrumentation?.record(context.uri, context.charOffset,
-              "context", new InstrumentationValueLiteral(context.code.name));
-        }
-      }
-    }
-  }
-
-  @override
-  void addError(Message message, int charOffset, Uri uri,
-      {bool silent: false, LocatedMessage context}) {
-    super.addError(message, charOffset, uri, silent: silent, context: context);
-    if (!silent) {
-      // TODO(ahe): Should I add a value for messages?
-      loader.instrumentation?.record(uri, charOffset, "error",
-          new InstrumentationValueLiteral(message.code.name));
-      if (context != null) {
-        loader.instrumentation?.record(context.uri, context.charOffset,
-            "context", new InstrumentationValueLiteral(context.code.name));
-      }
-    }
-  }
 }
 
 /// Unlike [Scope], this scope is used during construction of builders to
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 1692708..27ae91b 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -20,9 +20,10 @@
 import 'package:kernel/src/incremental_class_hierarchy.dart'
     show IncrementalClassHierarchy;
 
-import '../../../file_system.dart';
+import '../../api_prototype/file_system.dart';
 
-import '../../base/instrumentation.dart' show Instrumentation;
+import '../../base/instrumentation.dart'
+    show Instrumentation, InstrumentationValueLiteral;
 
 import '../builder/builder.dart'
     show
@@ -43,6 +44,7 @@
 
 import '../fasta_codes.dart'
     show
+        LocatedMessage,
         Message,
         templateCyclicClassHierarchy,
         templateExtendingEnum,
@@ -52,6 +54,8 @@
         templateIllegalMixinDueToConstructorsCause,
         templateInternalProblemUriMissingScheme;
 
+import '../fasta_codes.dart' as fasta_codes;
+
 import '../kernel/kernel_shadow_ast.dart'
     show ShadowClass, ShadowTypeInferenceEngine;
 
@@ -623,4 +627,54 @@
         .format(message.withLocation(uri, offset), Severity.error);
     return target.backendTarget.buildCompileTimeError(coreTypes, text, offset);
   }
+
+  void recordMessage(
+      Severity severity, Message message, int charOffset, Uri fileUri,
+      {LocatedMessage context}) {
+    if (instrumentation == null) return;
+
+    if (charOffset == -1 &&
+        (severity == Severity.nit ||
+            message.code == fasta_codes.codeConstConstructorWithBody ||
+            message.code == fasta_codes.codeConstructorNotFound ||
+            message.code == fasta_codes.codeSuperclassHasNoDefaultConstructor ||
+            message.code == fasta_codes.codeSupertypeIsIllegal ||
+            message.code == fasta_codes.codeSupertypeIsTypeVariable ||
+            message.code == fasta_codes.codeTypeArgumentsOnTypeVariable ||
+            message.code == fasta_codes.codeTypeNotFound ||
+            message.code == fasta_codes.codeUnspecified)) {
+      // TODO(ahe): All warnings should have a charOffset, but currently, some
+      // warnings lack them.
+      return;
+    }
+
+    String severityString;
+    switch (severity) {
+      case Severity.error:
+        severityString = "error";
+        break;
+
+      case Severity.internalProblem:
+        severityString = "internal problem";
+        break;
+
+      case Severity.nit:
+        severityString = "nit";
+        break;
+
+      case Severity.warning:
+        severityString = "warning";
+        break;
+    }
+    instrumentation.record(
+        fileUri,
+        charOffset,
+        severityString,
+        // TODO(ahe): Should I add an InstrumentationValue for Message?
+        new InstrumentationValueLiteral(message.code.name));
+    if (context != null) {
+      instrumentation.record(context.uri, context.charOffset, "context",
+          new InstrumentationValueLiteral(context.code.name));
+    }
+  }
 }
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 8c77f57..940d362 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
@@ -14,8 +14,6 @@
         messageNativeClauseShouldBeAnnotation,
         templateInternalProblemStackNotEmpty;
 
-import '../messages.dart' as messages;
-
 import '../parser.dart' show Listener, MemberKind;
 
 import '../parser/identifier_context.dart' show IdentifierContext;
@@ -338,20 +336,16 @@
     addCompileTimeError(message, offset, endToken.end - offset);
   }
 
-  void addCompileTimeError(Message message, int offset, int length);
-
   @override
   Token handleUnrecoverableError(Token token, Message message) {
     throw deprecated_inputError(uri, token.charOffset, message.message);
   }
 
-  void nit(Message message, int charOffset) {
-    messages.nit(message, charOffset, uri);
-  }
+  void addCompileTimeError(Message message, int charOffset, int length);
 
-  void warning(Message message, int offset, int length) {
-    messages.warning(message, offset, uri);
-  }
+  void addWarning(Message message, int charOffset, int length);
+
+  void addNit(Message message, int charOffset);
 }
 
 class Stack {
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 4ad02ad..7cd7cd6 100644
--- a/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
+++ b/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
@@ -32,7 +32,7 @@
 import 'package:testing/testing.dart'
     show ChainContext, Result, StdioProcess, Step, TestDescription;
 
-import 'package:front_end/front_end.dart';
+import 'package:front_end/src/api_prototype/front_end.dart';
 
 import 'package:front_end/src/base/processed_options.dart'
     show ProcessedOptions;
@@ -120,15 +120,17 @@
     Library library = program.libraries
         .firstWhere((Library library) => library.importUri.scheme != "dart");
     Uri uri = library.importUri;
+    Uri base = uri.resolve(".");
     StringBuffer buffer = new StringBuffer();
     new Printer(buffer).writeLibraryFile(library);
+    String actual = "$buffer".replaceAll("$base", "org-dartlang-testcase:///");
 
     File expectedFile = new File("${uri.toFilePath()}$suffix");
     if (await expectedFile.exists()) {
       String expected = await expectedFile.readAsString();
-      if (expected.trim() != "$buffer".trim()) {
+      if (expected.trim() != actual.trim()) {
         if (!updateExpectations) {
-          String diff = await runDiff(expectedFile.uri, "$buffer");
+          String diff = await runDiff(expectedFile.uri, actual);
           return fail(null, "$uri doesn't match ${expectedFile.uri}\n$diff");
         }
       } else {
@@ -137,13 +139,13 @@
     }
     if (updateExpectations) {
       await openWrite(expectedFile.uri, (IOSink sink) {
-        sink.writeln("$buffer".trim());
+        sink.writeln(actual.trim());
       });
       return pass(program);
     } else {
       return fail(program, """
 Please create file ${expectedFile.path} with this content:
-$buffer""");
+$actual""");
     }
   }
 }
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 af8c0fe..2087b9d 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
@@ -336,7 +336,7 @@
     procedure.isAbstract = false;
     if (!procedure.isForwardingStub) {
       _interfaceResolver._instrumentation?.record(
-          Uri.parse(procedure.fileUri),
+          procedure.fileUri,
           procedure.fileOffset,
           'forwardingStub',
           new InstrumentationValueLiteral('implementation'));
@@ -742,7 +742,7 @@
           identical(resolution.enclosingClass, class_)) {
         if (strongMode) class_.addMember(resolution);
         _instrumentation?.record(
-            Uri.parse(class_.location.file),
+            class_.location.file,
             class_.fileOffset,
             'forwardingStub',
             new InstrumentationValueForForwardingStub(resolution));
@@ -884,7 +884,7 @@
   ///
   /// Caller is responsible for checking whether [_instrumentation] is `null`.
   void _recordInstrumentation(Class class_) {
-    var uri = Uri.parse(class_.fileUri);
+    var uri = class_.fileUri;
     void recordCovariance(int fileOffset, bool isExplicitlyCovariant,
         bool isGenericCovariantInterface, bool isGenericCovariantImpl) {
       var covariance = <String>[];
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
index bd82f5c..2404585 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
@@ -276,7 +276,7 @@
         if (location == null) {
           rethrow;
         } else {
-          throw new Crash(Uri.parse(location.file), formal.fileOffset, e, s);
+          throw new Crash(location.file, formal.fileOffset, e, s);
         }
       }
     }
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
index 9aa90d6..d77713c 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE.md file.
 
 import 'package:kernel/ast.dart';
+import 'package:kernel/type_algebra.dart';
 
 /// Base class for [TypeInferenceListener] that defines the API for debugging.
 ///
@@ -107,10 +108,10 @@
   void asExpressionExit(AsExpression expression, DartType inferredType) =>
       genericExpressionExit("asExpression", expression, inferredType);
 
-  void assertInitializerEnter(LocalInitializer initializer) =>
+  void assertInitializerEnter(AssertInitializer initializer) =>
       genericInitializerEnter("assertInitializer", initializer);
 
-  void assertInitializerExit(LocalInitializer initializer) =>
+  void assertInitializerExit(AssertInitializer initializer) =>
       genericInitializerExit("assertInitializer", initializer);
 
   void assertStatementEnter(AssertStatement statement) =>
@@ -237,11 +238,11 @@
   void ifStatementExit(IfStatement statement) =>
       genericStatementExit('ifStatement', statement);
 
+  void indexAssignAfterReceiver(Expression expression, DartType typeContext) {}
+
   bool indexAssignEnter(Expression expression, DartType typeContext) =>
       genericExpressionEnter("indexAssign", expression, typeContext);
 
-  void indexAssignAfterReceiver(Expression expression, DartType typeContext) {}
-
   void indexAssignExit(Expression expression, Expression write,
           Member writeMember, Procedure combiner, DartType inferredType) =>
       genericExpressionExit("indexAssign", expression, inferredType);
@@ -290,6 +291,12 @@
           LogicalExpression expression, DartType inferredType) =>
       genericExpressionExit("logicalExpression", expression, inferredType);
 
+  void loopAssignmentStatementEnter(ExpressionStatement statement) =>
+      genericStatementEnter('loopAssignmentStatement', statement);
+
+  void loopAssignmentStatementExit(ExpressionStatement statement) =>
+      genericStatementExit('loopAssignmentStatement', statement);
+
   bool mapLiteralEnter(MapLiteral expression, DartType typeContext) =>
       genericExpressionEnter("mapLiteral", expression, typeContext);
 
@@ -301,8 +308,18 @@
   bool methodInvocationEnter(Expression expression, DartType typeContext) =>
       genericExpressionEnter("methodInvocation", expression, typeContext);
 
-  void methodInvocationExit(Expression expression, Arguments arguments,
-          bool isImplicitCall, Object interfaceMember, DartType inferredType) =>
+  void methodInvocationExit(
+          Expression expression,
+          Arguments arguments,
+          bool isImplicitCall,
+          Member interfaceMember,
+          FunctionType calleeType,
+          Substitution substitution,
+          DartType inferredType) =>
+      genericExpressionExit("methodInvocation", expression, inferredType);
+
+  void methodInvocationExitCall(Expression expression, Arguments arguments,
+          bool isImplicitCall, DartType inferredType) =>
       genericExpressionExit("methodInvocation", expression, inferredType);
 
   bool namedFunctionExpressionEnter(Let expression, DartType typeContext) =>
@@ -342,7 +359,10 @@
       genericExpressionEnter("propertyGet", expression, typeContext);
 
   void propertyGetExit(
-          Expression expression, Object member, DartType inferredType) =>
+          Expression expression, Member member, DartType inferredType) =>
+      genericExpressionExit("propertyGet", expression, inferredType);
+
+  void propertyGetExitCall(Expression expression, DartType inferredType) =>
       genericExpressionExit("propertyGet", expression, inferredType);
 
   bool propertySetEnter(PropertySet expression, DartType typeContext) =>
@@ -386,7 +406,10 @@
       genericExpressionEnter("staticInvocation", expression, typeContext);
 
   void staticInvocationExit(
-          StaticInvocation expression, DartType inferredType) =>
+          StaticInvocation expression,
+          FunctionType calleeType,
+          Substitution substitution,
+          DartType inferredType) =>
       genericExpressionExit("staticInvocation", expression, inferredType);
 
   bool stringConcatenationEnter(
@@ -451,11 +474,12 @@
   void typeLiteralExit(TypeLiteral expression, DartType inferredType) =>
       genericExpressionExit("typeLiteral", expression, inferredType);
 
-  bool variableAssignEnter(Expression expression, DartType typeContext) =>
+  bool variableAssignEnter(
+          Expression expression, DartType typeContext, Expression write) =>
       genericExpressionEnter("variableAssign", expression, typeContext);
 
   void variableAssignExit(Expression expression, DartType writeContext,
-          Procedure combiner, DartType inferredType) =>
+          Expression write, Procedure combiner, DartType inferredType) =>
       genericExpressionExit("variableAssign", expression, inferredType);
 
   void variableDeclarationEnter(VariableDeclaration statement) =>
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 6fa2c50..23e4d98 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
@@ -4,6 +4,7 @@
 
 import 'package:front_end/src/base/instrumentation.dart';
 import 'package:front_end/src/fasta/fasta_codes.dart';
+import 'package:front_end/src/fasta/kernel/fasta_accessors.dart';
 import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart';
 import 'package:front_end/src/fasta/names.dart' show callName;
 import 'package:front_end/src/fasta/problems.dart' show unhandled;
@@ -91,10 +92,16 @@
 
   final bool _needToInferReturnType;
 
+  final bool _needImplicitDowncasts;
+
   DartType _inferredReturnType;
 
-  factory ClosureContext(TypeInferrerImpl inferrer, AsyncMarker asyncMarker,
-      DartType returnContext, bool needToInferReturnType) {
+  factory ClosureContext(
+      TypeInferrerImpl inferrer,
+      AsyncMarker asyncMarker,
+      DartType returnContext,
+      bool needToInferReturnType,
+      bool needImplicitDowncasts) {
     bool isAsync = asyncMarker == AsyncMarker.Async ||
         asyncMarker == AsyncMarker.AsyncStar;
     bool isGenerator = asyncMarker == AsyncMarker.SyncStar ||
@@ -111,12 +118,12 @@
       returnContext = inferrer.wrapFutureOrType(
           inferrer.typeSchemaEnvironment.flattenFutures(returnContext));
     }
-    return new ClosureContext._(
-        isAsync, isGenerator, returnContext, needToInferReturnType);
+    return new ClosureContext._(isAsync, isGenerator, returnContext,
+        needToInferReturnType, needImplicitDowncasts);
   }
 
   ClosureContext._(this.isAsync, this.isGenerator, this.returnContext,
-      this._needToInferReturnType);
+      this._needToInferReturnType, this._needImplicitDowncasts);
 
   /// Updates the inferred return type based on the presence of a return
   /// statement returning the given [type].
@@ -195,7 +202,8 @@
         _inferredReturnType = inferrer.typeSchemaEnvironment
             .getLeastUpperBound(_inferredReturnType, unwrappedType);
       }
-    } else {
+    }
+    if (_needImplicitDowncasts) {
       var expectedType = isYieldStar
           ? _wrapAsyncOrGenerator(inferrer, returnContext)
           : returnContext;
@@ -260,24 +268,26 @@
 
   /// The URI of the code for which type inference is currently being
   /// performed--this is used for testing.
-  String get uri;
+  Uri get uri;
 
   /// Performs full type inference on the given field initializer.
-  void inferFieldInitializer(DartType declaredType, Expression initializer);
+  void inferFieldInitializer(
+      BuilderHelper helper, DartType declaredType, Expression initializer);
 
   /// Performs type inference on the given function body.
-  void inferFunctionBody(
-      DartType returnType, AsyncMarker asyncMarker, Statement body);
+  void inferFunctionBody(BuilderHelper helper, DartType returnType,
+      AsyncMarker asyncMarker, Statement body);
 
   /// Performs type inference on the given constructor initializer.
-  void inferInitializer(Initializer initializer);
+  void inferInitializer(BuilderHelper helper, Initializer initializer);
 
   /// Performs type inference on the given metadata annotations.
-  void inferMetadata(List<Expression> annotations);
+  void inferMetadata(BuilderHelper helper, List<Expression> annotations);
 
   /// Performs type inference on the given function parameter initializer
   /// expression.
-  void inferParameterInitializer(Expression initializer, DartType declaredType);
+  void inferParameterInitializer(
+      BuilderHelper helper, Expression initializer, DartType declaredType);
 }
 
 /// Implementation of [TypeInferrer] which doesn't do any type inference.
@@ -294,24 +304,25 @@
   TypeInferrerDisabled(this.typeSchemaEnvironment);
 
   @override
-  String get uri => null;
+  Uri get uri => null;
 
   @override
-  void inferFieldInitializer(DartType declaredType, Expression initializer) {}
+  void inferFieldInitializer(
+      BuilderHelper helper, DartType declaredType, Expression initializer) {}
 
   @override
-  void inferFunctionBody(
-      DartType returnType, AsyncMarker asyncMarker, Statement body) {}
+  void inferFunctionBody(BuilderHelper helper, DartType returnType,
+      AsyncMarker asyncMarker, Statement body) {}
 
   @override
-  void inferInitializer(Initializer initializer) {}
+  void inferInitializer(BuilderHelper helper, Initializer initializer) {}
 
   @override
-  void inferMetadata(List<Expression> annotations) {}
+  void inferMetadata(BuilderHelper helper, List<Expression> annotations) {}
 
   @override
   void inferParameterInitializer(
-      Expression initializer, DartType declaredType) {}
+      BuilderHelper helper, Expression initializer, DartType declaredType) {}
 }
 
 /// Derived class containing generic implementations of [TypeInferrer].
@@ -326,7 +337,7 @@
   final TypeInferenceEngineImpl engine;
 
   @override
-  final String uri;
+  final Uri uri;
 
   /// Indicates whether the construct we are currently performing inference for
   /// is outside of a method body, and hence top level type inference rules
@@ -349,10 +360,16 @@
 
   final SourceLibraryBuilder library;
 
+  BuilderHelper helper;
+
   /// Context information for the current closure, or `null` if we are not
   /// inside a closure.
   ClosureContext closureContext;
 
+  /// The [Substitution] inferred by the last [inferInvocation], or `null` if
+  /// the last invocation didn't require any inference.
+  Substitution lastInferredSubstitution;
+
   TypeInferrerImpl(this.engine, this.uri, this.listener, bool topLevel,
       this.thisType, this.library)
       : coreTypes = engine.coreTypes,
@@ -380,22 +397,26 @@
       // Types are compatible.
       return null;
     } else {
-      // Insert an implicit downcast.
       if (strongMode) {
         if (!isTopLevel &&
             !typeSchemaEnvironment.isSubtypeOf(expectedType, actualType)) {
-          // Error: not assignable.
-          library.addError(
-              templateInvalidAssignment.withArguments(actualType, expectedType),
-              fileOffset,
-              Uri.parse(uri));
+          // Error: not assignable.  Perform error recovery.
+          var parent = expression.parent;
+          var errorNode = helper.wrapInCompileTimeError(
+              expression,
+              templateInvalidAssignment.withArguments(
+                  actualType, expectedType));
+          parent?.replaceChild(expression, errorNode);
+          return errorNode;
+        } else {
+          // Insert an implicit downcast.
+          var parent = expression.parent;
+          var typeCheck = new AsExpression(expression, expectedType)
+            ..isTypeError = true
+            ..fileOffset = fileOffset;
+          parent?.replaceChild(expression, typeCheck);
+          return typeCheck;
         }
-        var parent = expression.parent;
-        var typeCheck = new AsExpression(expression, expectedType)
-          ..isTypeError = true
-          ..fileOffset = fileOffset;
-        parent.replaceChild(expression, typeCheck);
-        return typeCheck;
       } else {
         return null;
       }
@@ -426,7 +447,7 @@
 
     var interfaceMember = _getInterfaceMember(classNode, name, setter);
     if (!silent && interfaceMember != null) {
-      instrumentation?.record(Uri.parse(uri), fileOffset, 'target',
+      instrumentation?.record(uri, fileOffset, 'target',
           new InstrumentationValueForMember(interfaceMember));
     }
     return interfaceMember;
@@ -456,11 +477,8 @@
       }
       return interfaceMember;
     } else {
-      throw unhandled(
-          "${methodInvocation.runtimeType}",
-          "findMethodInvocationMember",
-          methodInvocation.fileOffset,
-          Uri.parse(uri));
+      throw unhandled("${methodInvocation.runtimeType}",
+          "findMethodInvocationMember", methodInvocation.fileOffset, uri);
     }
   }
 
@@ -488,7 +506,7 @@
       return interfaceMember;
     } else {
       return unhandled("${propertyGet.runtimeType}", "findPropertyGetMember",
-          propertyGet.fileOffset, Uri.parse(uri));
+          propertyGet.fileOffset, uri);
     }
   }
 
@@ -514,7 +532,7 @@
       return interfaceMember;
     } else {
       throw unhandled("${propertySet.runtimeType}", "findPropertySetMember",
-          propertySet.fileOffset, Uri.parse(uri));
+          propertySet.fileOffset, uri);
     }
   }
 
@@ -655,7 +673,7 @@
           int offset = arguments.fileOffset == -1
               ? expression.fileOffset
               : arguments.fileOffset;
-          instrumentation.record(Uri.parse(uri), offset, 'checkReturn',
+          instrumentation.record(uri, offset, 'checkReturn',
               new InstrumentationValueForType(inferredType));
         }
         return replacement;
@@ -673,7 +691,7 @@
           int offset = arguments.fileOffset == -1
               ? expression.fileOffset
               : arguments.fileOffset;
-          instrumentation.record(Uri.parse(uri), offset, 'checkGetterReturn',
+          instrumentation.record(uri, offset, 'checkGetterReturn',
               new InstrumentationValueForType(functionType));
         }
         return replacement;
@@ -718,18 +736,18 @@
       int offset = expression.fileOffset;
       switch (callKind) {
         case DispatchCategory.dynamicDispatch:
-          instrumentation.record(Uri.parse(uri), offset, 'callKind',
+          instrumentation.record(uri, offset, 'callKind',
               new InstrumentationValueLiteral('dynamic'));
           break;
         case DispatchCategory.viaThis:
-          instrumentation.record(Uri.parse(uri), offset, 'callKind',
-              new InstrumentationValueLiteral('this'));
+          instrumentation.record(
+              uri, offset, 'callKind', new InstrumentationValueLiteral('this'));
           break;
         default:
           break;
       }
       if (checkReturn) {
-        instrumentation.record(Uri.parse(uri), offset, 'checkReturn',
+        instrumentation.record(uri, offset, 'checkReturn',
             new InstrumentationValueForType(inferredType));
       }
     }
@@ -762,14 +780,17 @@
       Expression expression, DartType typeContext, bool typeNeeded);
 
   @override
-  void inferFieldInitializer(DartType declaredType, Expression initializer) {
+  void inferFieldInitializer(
+      BuilderHelper helper, DartType declaredType, Expression initializer) {
     assert(closureContext == null);
+    this.helper = helper;
     var actualType =
         inferExpression(initializer, declaredType, declaredType != null);
     if (declaredType != null) {
       checkAssignability(
           declaredType, actualType, initializer, initializer.fileOffset);
     }
+    this.helper = null;
   }
 
   /// Performs type inference on the given [field]'s initializer expression.
@@ -780,12 +801,15 @@
       ShadowField field, DartType type, bool typeNeeded);
 
   @override
-  void inferFunctionBody(
-      DartType returnType, AsyncMarker asyncMarker, Statement body) {
+  void inferFunctionBody(BuilderHelper helper, DartType returnType,
+      AsyncMarker asyncMarker, Statement body) {
     assert(closureContext == null);
-    closureContext = new ClosureContext(this, asyncMarker, returnType, false);
+    this.helper = helper;
+    closureContext =
+        new ClosureContext(this, asyncMarker, returnType, false, true);
     inferStatement(body);
     closureContext = null;
+    this.helper = null;
   }
 
   /// Performs the type inference steps that are shared by all kinds of
@@ -796,6 +820,7 @@
       DartType receiverType,
       bool skipTypeArgumentInference: false,
       bool isConst: false}) {
+    lastInferredSubstitution = null;
     var calleeTypeParameters = calleeType.typeParameters;
     List<DartType> explicitTypeArguments = getExplicitTypeArguments(arguments);
     bool inferenceNeeded = !skipTypeArgumentInference &&
@@ -870,7 +895,7 @@
           inferredTypes);
       substitution =
           Substitution.fromPairs(calleeTypeParameters, inferredTypes);
-      instrumentation?.record(Uri.parse(uri), offset, 'typeArgs',
+      instrumentation?.record(uri, offset, 'typeArgs',
           new InstrumentationValueForTypeArgs(inferredTypes));
       arguments.types.clear();
       arguments.types.addAll(inferredTypes);
@@ -889,6 +914,7 @@
     }
     DartType inferredType;
     if (typeNeeded) {
+      lastInferredSubstitution = substitution;
       inferredType = substitution == null
           ? returnType
           : substitution.substituteType(returnType);
@@ -986,7 +1012,7 @@
         } else {
           inferredType = const DynamicType();
         }
-        instrumentation?.record(Uri.parse(uri), formal.fileOffset, 'type',
+        instrumentation?.record(uri, formal.fileOffset, 'type',
             new InstrumentationValueForType(inferredType));
         formal.type = inferredType;
       }
@@ -1004,8 +1030,13 @@
     bool isExpressionFunction = function.body is ReturnStatement;
     bool needToSetReturnType = hasImplicitReturnType && strongMode;
     ClosureContext oldClosureContext = this.closureContext;
+    bool needImplicitDowncasts = returnContext != null && !isExpressionFunction;
     ClosureContext closureContext = new ClosureContext(
-        this, function.asyncMarker, returnContext, needToSetReturnType);
+        this,
+        function.asyncMarker,
+        returnContext,
+        needToSetReturnType,
+        needImplicitDowncasts);
     this.closureContext = closureContext;
     inferStatement(function.body);
 
@@ -1024,7 +1055,7 @@
     // type `<T0, ..., Tn>(R0, ..., Rn) -> M’` (with some of the `Ri` and `xi`
     // denoted as optional or named parameters, if appropriate).
     if (needToSetReturnType) {
-      instrumentation?.record(Uri.parse(uri), fileOffset, 'returnType',
+      instrumentation?.record(uri, fileOffset, 'returnType',
           new InstrumentationValueForType(inferredReturnType));
       function.returnType = inferredReturnType;
     } else if (!strongMode && hasImplicitReturnType) {
@@ -1036,8 +1067,9 @@
   }
 
   @override
-  void inferMetadata(List<Expression> annotations) {
+  void inferMetadata(BuilderHelper helper, List<Expression> annotations) {
     if (annotations != null) {
+      this.helper = helper;
       // Place annotations in a temporary list literal so that they will have a
       // parent.  This is necessary in case any of the annotations need to get
       // replaced during type inference.
@@ -1045,6 +1077,7 @@
       for (var annotation in annotations) {
         inferExpression(annotation, null, false);
       }
+      this.helper = null;
     }
   }
 
@@ -1097,19 +1130,26 @@
         receiverType: receiverType);
     handleInvocationContravariance(checkKind, desugaredInvocation, arguments,
         expression, inferredType, calleeType, fileOffset);
-    listener.methodInvocationExit(
-        expression, arguments, isImplicitCall, interfaceMember, inferredType);
+    if (identical(interfaceMember, 'call')) {
+      listener.methodInvocationExitCall(
+          expression, arguments, isImplicitCall, inferredType);
+    } else {
+      listener.methodInvocationExit(expression, arguments, isImplicitCall,
+          interfaceMember, calleeType, lastInferredSubstitution, inferredType);
+    }
     return inferredType;
   }
 
   @override
   void inferParameterInitializer(
-      Expression initializer, DartType declaredType) {
+      BuilderHelper helper, Expression initializer, DartType declaredType) {
     assert(closureContext == null);
+    this.helper = helper;
     assert(declaredType != null);
     var actualType = inferExpression(initializer, declaredType, true);
     checkAssignability(
         declaredType, actualType, initializer, initializer.fileOffset);
+    this.helper = null;
   }
 
   /// Performs the core type inference algorithm for property gets (this handles
@@ -1140,7 +1180,11 @@
     // TODO(paulberry): Infer tear-off type arguments if appropriate.
     handlePropertyGetContravariance(receiver, interfaceMember, desugaredGet,
         expression, inferredType, fileOffset);
-    listener.propertyGetExit(expression, interfaceMember, inferredType);
+    if (identical(interfaceMember, 'call')) {
+      listener.propertyGetExitCall(expression, inferredType);
+    } else {
+      listener.propertyGetExit(expression, interfaceMember, inferredType);
+    }
     return typeNeeded ? inferredType : null;
   }
 
@@ -1217,16 +1261,16 @@
           : arguments.fileOffset;
       switch (callKind) {
         case DispatchCategory.closure:
-          instrumentation.record(Uri.parse(uri), offset, 'callKind',
+          instrumentation.record(uri, offset, 'callKind',
               new InstrumentationValueLiteral('closure'));
           break;
         case DispatchCategory.dynamicDispatch:
-          instrumentation.record(Uri.parse(uri), offset, 'callKind',
+          instrumentation.record(uri, offset, 'callKind',
               new InstrumentationValueLiteral('dynamic'));
           break;
         case DispatchCategory.viaThis:
-          instrumentation.record(Uri.parse(uri), offset, 'callKind',
-              new InstrumentationValueLiteral('this'));
+          instrumentation.record(
+              uri, offset, 'callKind', new InstrumentationValueLiteral('this'));
           break;
         default:
           break;
diff --git a/pkg/front_end/lib/src/fasta/uri_translator.dart b/pkg/front_end/lib/src/fasta/uri_translator.dart
index e227406..d2f32ff 100644
--- a/pkg/front_end/lib/src/fasta/uri_translator.dart
+++ b/pkg/front_end/lib/src/fasta/uri_translator.dart
@@ -4,7 +4,7 @@
 
 library fasta.uri_translator;
 
-import 'package:front_end/file_system.dart' show FileSystem;
+import 'package:front_end/src/api_prototype/file_system.dart' show FileSystem;
 
 /// Instances of [UriTranslator] translate absolute URIs into corresponding
 /// file URIs in a [FileSystem]. Translated URIs are typically `file:` URIs,
diff --git a/pkg/front_end/lib/src/incremental/file_state.dart b/pkg/front_end/lib/src/incremental/file_state.dart
index a2af642..88a24b0 100644
--- a/pkg/front_end/lib/src/incremental/file_state.dart
+++ b/pkg/front_end/lib/src/incremental/file_state.dart
@@ -8,8 +8,8 @@
 
 import 'package:convert/convert.dart';
 import 'package:crypto/crypto.dart';
-import 'package:front_end/byte_store.dart';
-import 'package:front_end/file_system.dart';
+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/base/api_signature.dart';
 import 'package:front_end/src/base/resolve_relative_uri.dart';
 import 'package:front_end/src/dependency_walker.dart' as graph;
diff --git a/pkg/front_end/lib/src/incremental/kernel_driver.dart b/pkg/front_end/lib/src/incremental/kernel_driver.dart
index a590d9d..8ee0578 100644
--- a/pkg/front_end/lib/src/incremental/kernel_driver.dart
+++ b/pkg/front_end/lib/src/incremental/kernel_driver.dart
@@ -4,8 +4,8 @@
 
 import 'dart:async';
 
-import 'package:front_end/byte_store.dart';
-import 'package:front_end/file_system.dart';
+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/base/api_signature.dart';
 import 'package:front_end/src/base/performance_logger.dart';
 import 'package:front_end/src/base/processed_options.dart';
@@ -431,8 +431,8 @@
       {
         var urisToRemoveSources = <String>[];
         for (var uri in program.uriToSource.keys) {
-          if (!cycleFileUris.contains(uri)) {
-            urisToRemoveSources.add(uri);
+          if (!cycleFileUris.contains("$uri")) {
+            urisToRemoveSources.add("$uri");
           }
         }
         urisToRemoveSources.forEach(program.uriToSource.remove);
@@ -593,7 +593,7 @@
   final String signature;
 
   /// Map from the [cycle] file URIs to their [Source]s.
-  final Map<String, Source> uriToSource;
+  final Map<Uri, Source> uriToSource;
 
   /// Kernel libraries for libraries in the [cycle].  Bodies of dependencies
   /// are not included, but but references to those dependencies are included.
diff --git a/pkg/front_end/lib/src/incremental/unlinked_unit.dart b/pkg/front_end/lib/src/incremental/unlinked_unit.dart
index 78b973e..645349f 100644
--- a/pkg/front_end/lib/src/incremental/unlinked_unit.dart
+++ b/pkg/front_end/lib/src/incremental/unlinked_unit.dart
@@ -114,7 +114,7 @@
       Token token, bool ofFunctionExpression, bool allowAbstract) {
     Token next = token.next;
     if (identical('{', next.lexeme)) {
-      Token close = skipBlock(next);
+      Token close = skipBlock(token);
       bodyRanges.add(new _BodyRange(next.charOffset, close.charOffset));
       return close;
     }
diff --git a/pkg/front_end/lib/src/incremental_kernel_generator_impl.dart b/pkg/front_end/lib/src/incremental_kernel_generator_impl.dart
index 89931e29..ddf8ab2 100644
--- a/pkg/front_end/lib/src/incremental_kernel_generator_impl.dart
+++ b/pkg/front_end/lib/src/incremental_kernel_generator_impl.dart
@@ -5,9 +5,9 @@
 import 'dart:async';
 import 'dart:convert';
 
-import 'package:front_end/byte_store.dart';
-import 'package:front_end/file_system.dart';
-import 'package:front_end/incremental_kernel_generator.dart';
+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';
@@ -99,15 +99,15 @@
 
   /// Each key is the file system URI of a library.
   /// Each value is the libraries that directly depend on the key library.
-  Map<String, Set<String>> _directLibraryDependencies = {};
+  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<String, Library> _uriToLibrary = {};
+  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<String, String> _partToLibrary = {};
+  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.
@@ -238,7 +238,7 @@
         });
 
         // Prepare libraries that changed relatively to the current state.
-        var changedLibraries = new Set<String>();
+        var changedLibraries = new Set<Uri>();
         for (var library in _program.libraries) {
           var uri = library.importUri;
           var file = _fsState.getFileOrNull(uri);
@@ -252,9 +252,9 @@
         // 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<String>();
+        final vmRequiredLibraries = new Set<Uri>();
 
-        void gatherVmRequiredLibraries(String libraryUri) {
+        void gatherVmRequiredLibraries(Uri libraryUri) {
           if (vmRequiredLibraries.add(libraryUri)) {
             var directUsers = _directLibraryDependencies[libraryUri];
             directUsers?.forEach(gatherVmRequiredLibraries);
@@ -333,7 +333,7 @@
       for (var changedLibrary in _changedLibrariesWithSameApi) {
         _testView.compiledUris.add(changedLibrary.uri);
         // Detach the old library.
-        var oldLibrary = _uriToLibrary[changedLibrary.fileUriStr];
+        var oldLibrary = _uriToLibrary[changedLibrary.fileUri];
         _program.root.removeChild(changedLibrary.uriStr);
         _program.libraries.remove(oldLibrary);
         _dillTarget.loader.builders.remove(changedLibrary.uri);
@@ -353,7 +353,7 @@
       _logger.run('Replace references', () {
         var builders = kernelTarget.loader.builders;
         for (var changedLibrary in _changedLibrariesWithSameApi) {
-          Library oldLibrary = _uriToLibrary[changedLibrary.fileUriStr];
+          Library oldLibrary = _uriToLibrary[changedLibrary.fileUri];
           Library newLibrary = builders[changedLibrary.uri].target;
 
           _program.root
@@ -364,7 +364,7 @@
           _program.root.adoptChild(newLibrary.canonicalName);
           _program.libraries.add(newLibrary);
 
-          _uriToLibrary[changedLibrary.fileUriStr] = newLibrary;
+          _uriToLibrary[changedLibrary.fileUri] = newLibrary;
           _referenceIndex.replaceLibrary(oldLibrary, newLibrary);
 
           // Schedule the new outline for loading.
@@ -410,7 +410,7 @@
       for (LibraryDependency dependency in library.dependencies) {
         Library targetLibrary = dependency.targetLibrary;
         _directLibraryDependencies
-            .putIfAbsent(targetLibrary.fileUri, () => new Set<String>())
+            .putIfAbsent(targetLibrary.fileUri, () => new Set<Uri>())
             .add(library.fileUri);
         processLibrary(targetLibrary);
       }
@@ -445,7 +445,7 @@
     if (removedFiles.isNotEmpty && _watchFn != null) {
       for (var removedFile in removedFiles) {
         // If a library, remove it from the program.
-        Library library = _uriToLibrary.remove(removedFile.fileUriStr);
+        Library library = _uriToLibrary.remove(removedFile.fileUri);
         if (library != null) {
           _currentSignatures.remove(library.importUri);
           _program.libraries.remove(library);
@@ -494,9 +494,8 @@
             filesWithDifferentApiSignature.add(file);
           } else {
             FileState libraryFile = file;
-            String libraryFileUriStr = _partToLibrary[file.fileUriStr];
-            if (libraryFileUriStr != null) {
-              var libraryFileUri = Uri.parse(libraryFileUriStr);
+            Uri libraryFileUri = _partToLibrary[file.fileUri];
+            if (libraryFileUri != null) {
               libraryFile = _fsState.getFileByFileUri(libraryFileUri);
             }
             _changedLibrariesWithSameApi.add(libraryFile);
@@ -510,7 +509,7 @@
 
         /// Invalidate the library with the given [libraryUri],
         /// and recursively all its clients.
-        void invalidateLibrary(String libraryUri) {
+        void invalidateLibrary(Uri libraryUri) {
           Library library = _uriToLibrary.remove(libraryUri);
           if (library == null) return;
 
@@ -522,15 +521,14 @@
           _referenceIndex.removeLibrary(library);
 
           // Recursively invalidate clients.
-          Set<String> directDependencies =
+          Set<Uri> directDependencies =
               _directLibraryDependencies.remove(libraryUri);
           directDependencies?.forEach(invalidateLibrary);
         }
 
         // TODO(scheglov): Some changes still might be incremental.
         for (var uri in invalidatedFiles) {
-          String uriStr = uri.toString();
-          String libraryUri = _partToLibrary.remove(uriStr) ?? uriStr;
+          Uri libraryUri = _partToLibrary.remove(uri) ?? uri;
           invalidateLibrary(libraryUri);
         }
       }
diff --git a/pkg/front_end/lib/src/kernel_generator_impl.dart b/pkg/front_end/lib/src/kernel_generator_impl.dart
index a772ccd..ab6e3e2 100644
--- a/pkg/front_end/lib/src/kernel_generator_impl.dart
+++ b/pkg/front_end/lib/src/kernel_generator_impl.dart
@@ -21,8 +21,9 @@
 import 'fasta/kernel/verifier.dart';
 import 'fasta/uri_translator.dart' show UriTranslator;
 
-/// Implementation for the `package:front_end/kernel_generator.dart` and
-/// `package:front_end/summary_generator.dart` APIs.
+/// Implementation for the
+/// `package:front_end/src/api_prototype/kernel_generator.dart` and
+/// `package:front_end/src/api_prototype/summary_generator.dart` APIs.
 Future<CompilerResult> generateKernel(ProcessedOptions options,
     {bool buildSummary: false,
     bool buildProgram: true,
@@ -78,6 +79,7 @@
 
     // All summaries are considered external and shouldn't include source-info.
     dillTarget.loader.libraries.forEach((lib) {
+      // TODO(ahe): Don't do this, and remove [external_state_snapshot.dart].
       lib.isExternal = true;
       lib.dependencies.clear();
     });
@@ -138,14 +140,6 @@
       options.ticker.logMs("Generated program");
     }
 
-    if (kernelTarget.errors.isNotEmpty) {
-      // TODO(sigmund): remove duplicate error reporting. Currently
-      // kernelTarget.errors contains recoverable and unrecoverable errors. We
-      // are reporting unrecoverable errors twice.
-      kernelTarget.errors.forEach((e) => options.report(e, Severity.error));
-      return null;
-    }
-
     return new CompilerResult(
         summary: summary,
         program: program,
diff --git a/pkg/front_end/lib/src/minimal_incremental_kernel_generator.dart b/pkg/front_end/lib/src/minimal_incremental_kernel_generator.dart
index 0e30c3c..a429e5d 100644
--- a/pkg/front_end/lib/src/minimal_incremental_kernel_generator.dart
+++ b/pkg/front_end/lib/src/minimal_incremental_kernel_generator.dart
@@ -4,8 +4,8 @@
 
 import 'dart:async';
 
-import 'package:front_end/file_system.dart';
-import 'package:front_end/incremental_kernel_generator.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/performance_logger.dart';
 import 'package:front_end/src/base/processed_options.dart';
 import 'package:front_end/src/fasta/compiler_context.dart';
@@ -55,15 +55,15 @@
 
   /// Each key is the file system URI of a library.
   /// Each value is the libraries that directly depend on the key library.
-  Map<String, Set<String>> _directLibraryDependencies = {};
+  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<String, Library> _uriToLibrary = {};
+  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<String, String> _partToLibrary = {};
+  Map<Uri, Uri> _partToLibrary = {};
 
   /// Whether [computeDelta] is executing.
   bool _isComputeDeltaExecuting = false;
@@ -74,12 +74,12 @@
   /// When we produce a new delta, we put newly compiled libraries into
   /// the [_lastLibraries] field, so [_currentLibraries] and [_lastLibraries]
   /// don't intersect.
-  final Set<String> _currentLibraries = new Set<String>();
+  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<String> _lastLibraries;
+  Set<Uri> _lastLibraries;
 
   /// The object that provides additional information for tests.
   _TestView _testView;
@@ -123,7 +123,7 @@
     if (_lastLibraries != null) {
       throw new StateError(MSG_HAS_LAST_DELTA);
     }
-    _lastLibraries = new Set<String>();
+    _lastLibraries = new Set<Uri>();
 
     _isComputeDeltaExecuting = true;
 
@@ -157,7 +157,7 @@
         var program = new Program(nameRoot: _program.root);
         _testView.compiledUris.clear();
         for (var library in _program.libraries) {
-          String uri = library.fileUri;
+          Uri uri = library.fileUri;
           if (_currentLibraries.contains(uri)) continue;
 
           _lastLibraries.add(uri);
@@ -183,24 +183,23 @@
 
   @override
   void invalidate(Uri uri) {
-    void invalidateLibrary(String libraryUri) {
+    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.root.removeChild("${library.importUri}");
       _program.uriToSource.remove(libraryUri);
       _currentLibraries.remove(libraryUri);
 
       // Recursively invalidate dependencies.
-      Set<String> directDependencies =
+      Set<Uri> directDependencies =
           _directLibraryDependencies.remove(libraryUri);
       directDependencies?.forEach(invalidateLibrary);
     }
 
-    String uriStr = uri.toString();
-    String libraryUri = _partToLibrary.remove(uriStr) ?? uriStr;
+    Uri libraryUri = _partToLibrary.remove(uri) ?? uri;
     invalidateLibrary(libraryUri);
   }
 
@@ -248,7 +247,7 @@
       for (LibraryDependency dependency in library.dependencies) {
         Library targetLibrary = dependency.targetLibrary;
         _directLibraryDependencies
-            .putIfAbsent(targetLibrary.fileUri, () => new Set<String>())
+            .putIfAbsent(targetLibrary.fileUri, () => new Set<Uri>())
             .add(library.fileUri);
         processLibrary(targetLibrary);
       }
@@ -284,7 +283,7 @@
   /// 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<String>();
+    var entryPointFiles = new Set<Uri>();
 
     // Don't remove SDK libraries.
     for (var library in _program.libraries) {
@@ -315,11 +314,10 @@
     if (_fileSystem is _WatchingFileSystem) {
       _WatchingFileSystem fileSystem = _fileSystem;
       for (Uri knownUri in fileSystem.knownFiles.toList()) {
-        var knownUriStr = knownUri.toString();
-        if (!entryPointFiles.contains(knownUriStr)) {
+        if (!entryPointFiles.contains(knownUri)) {
           await _watchFn(knownUri, false);
           fileSystem.knownFiles.remove(knownUri);
-          _program.uriToSource.remove(knownUriStr);
+          _program.uriToSource.remove(knownUri);
         }
       }
     }
diff --git a/pkg/front_end/lib/src/multi_root_file_system.dart b/pkg/front_end/lib/src/multi_root_file_system.dart
index 9cf5e90..a30e75f 100644
--- a/pkg/front_end/lib/src/multi_root_file_system.dart
+++ b/pkg/front_end/lib/src/multi_root_file_system.dart
@@ -7,7 +7,7 @@
 
 import 'dart:async';
 
-import 'package:front_end/file_system.dart';
+import 'package:front_end/src/api_prototype/file_system.dart';
 
 /// Wraps a file system to create an overlay of files from multiple roots.
 ///
diff --git a/pkg/front_end/lib/src/testing/compiler_common.dart b/pkg/front_end/lib/src/testing/compiler_common.dart
index 9fe8093..67eae73 100644
--- a/pkg/front_end/lib/src/testing/compiler_common.dart
+++ b/pkg/front_end/lib/src/testing/compiler_common.dart
@@ -9,8 +9,8 @@
 
 import 'dart:io' show Platform;
 
-import 'package:front_end/front_end.dart';
-import 'package:front_end/memory_file_system.dart';
+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';
 
diff --git a/pkg/front_end/lib/src/testing/hybrid_file_system.dart b/pkg/front_end/lib/src/testing/hybrid_file_system.dart
index 0a8bd75..18a7558 100644
--- a/pkg/front_end/lib/src/testing/hybrid_file_system.dart
+++ b/pkg/front_end/lib/src/testing/hybrid_file_system.dart
@@ -8,9 +8,9 @@
 
 import 'dart:async';
 
-import 'package:front_end/file_system.dart';
-import 'package:front_end/memory_file_system.dart';
-import 'package:front_end/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/file_system.dart';
+import 'package:front_end/src/api_prototype/memory_file_system.dart';
+import 'package:front_end/src/api_prototype/physical_file_system.dart';
 
 /// A file system that mixes files from memory and a physical file system. All
 /// memory entities take priotity over file system entities.
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 0ec9cbb..56a2e75 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -140,7 +140,6 @@
   # Consider the second example below: the parser expects a ')' before 'y', but
   # a ',' would also have worked. We don't have enough information to give a
   # good suggestion.
-  tip: DONT_KNOW_HOW_TO_FIX,
   analyzerCode: UNEXPECTED_TOKEN
   dart2jsCode: MISSING_TOKEN_BEFORE_THIS
   script:
@@ -214,6 +213,11 @@
   analyzerCode: EXPECTED_EXECUTABLE
   dart2jsCode: "*fatal*"
 
+ExpectedClassMember:
+  template: "Expected a class member, but got '#lexeme'."
+  analyzerCode: EXPECTED_CLASS_MEMBER
+  dart2jsCode: "*fatal*"
+
 ExpectedFunctionBody:
   template: "Expected a function body, but got '#lexeme'."
   analyzerCode: MISSING_FUNCTION_BODY
diff --git a/pkg/front_end/test/dependency_grapher_test.dart b/pkg/front_end/test/dependency_grapher_test.dart
index 39b8386..4d7e981 100644
--- a/pkg/front_end/test/dependency_grapher_test.dart
+++ b/pkg/front_end/test/dependency_grapher_test.dart
@@ -4,9 +4,9 @@
 
 import 'dart:async';
 
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/dependency_grapher.dart';
-import 'package:front_end/memory_file_system.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/dependency_grapher.dart';
+import 'package:front_end/src/api_prototype/memory_file_system.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
diff --git a/pkg/front_end/test/fasta/incremental_expectations.dart b/pkg/front_end/test/fasta/incremental_expectations.dart
new file mode 100644
index 0000000..efdb6ed
--- /dev/null
+++ b/pkg/front_end/test/fasta/incremental_expectations.dart
@@ -0,0 +1,77 @@
+// 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.
+
+library fasta.test.incremental_expectations;
+
+import "dart:convert" show JsonDecoder, JsonEncoder;
+
+const JsonEncoder json = const JsonEncoder.withIndent("  ");
+
+List<IncrementalExpectation> extractJsonExpectations(String source) {
+  return new List<IncrementalExpectation>.from(source
+      .split("\n")
+      .where((l) => l.startsWith("<<<< ") || l.startsWith("==== "))
+      .map((l) => l.substring("<<<< ".length))
+      .map((l) => new IncrementalExpectation.fromJson(l)));
+}
+
+class IncrementalExpectation {
+  final List<String> messages;
+
+  final bool commitChangesShouldFail;
+
+  final bool hasCompileTimeError;
+
+  const IncrementalExpectation(this.messages,
+      {this.commitChangesShouldFail: false, this.hasCompileTimeError: false});
+
+  factory IncrementalExpectation.fromJson(String json) {
+    var data = const JsonDecoder().convert(json);
+    if (data is String) {
+      data = <String>[data];
+    }
+    if (data is List) {
+      return new IncrementalExpectation(data);
+    }
+    return new IncrementalExpectation(extractMessages(data),
+        commitChangesShouldFail: extractCommitChangesShouldFail(data),
+        hasCompileTimeError: extractHasCompileTimeError(data));
+  }
+
+  toJson() {
+    if (!commitChangesShouldFail && !hasCompileTimeError) {
+      return messages.length == 1 ? messages.first : messages;
+    }
+    Map<String, dynamic> result = <String, dynamic>{
+      "messages": messages,
+    };
+    if (commitChangesShouldFail) {
+      result['commitChangesShouldFail'] = 1;
+    }
+    if (hasCompileTimeError) {
+      result['hasCompileTimeError'] = 1;
+    }
+    return result;
+  }
+
+  String toString() {
+    return """
+IncrementalExpectation(
+    ${json.convert(messages)},
+    commitChangesShouldFail: $commitChangesShouldFail,
+    hasCompileTimeError: $hasCompileTimeError)""";
+  }
+
+  static List<String> extractMessages(Map<String, dynamic> json) {
+    return new List<String>.from(json["messages"]);
+  }
+
+  static bool extractCommitChangesShouldFail(Map<String, dynamic> json) {
+    return json["commitChangesShouldFail"] == 1;
+  }
+
+  static bool extractHasCompileTimeError(Map<String, dynamic> json) {
+    return json["hasCompileTimeError"] == 1;
+  }
+}
diff --git a/pkg/front_end/test/fasta/incremental_source_files.dart b/pkg/front_end/test/fasta/incremental_source_files.dart
new file mode 100644
index 0000000..f830639
--- /dev/null
+++ b/pkg/front_end/test/fasta/incremental_source_files.dart
@@ -0,0 +1,87 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE.md file.
+
+library fasta.test.incremental_source_files;
+
+/// Expand a file with diffs in common merge conflict format into a [List] that
+/// can be passed to [expandUpdates].
+///
+/// For example:
+///     first
+///     <<<<
+///     v1
+///     ====
+///     v2
+///     ====
+///     v3
+///     >>>>
+///     last
+///
+/// Would be expanded to something equivalent to:
+///
+///     ["first\n", ["v1\n", "v2\n", "v3\n"], "last\n"]
+List expandDiff(String text) {
+  List result = [new StringBuffer()];
+  bool inDiff = false;
+  for (String line in splitLines(text)) {
+    if (inDiff) {
+      if (line.startsWith("====")) {
+        result.last.add(new StringBuffer());
+      } else if (line.startsWith(">>>>")) {
+        inDiff = false;
+        result.add(new StringBuffer());
+      } else {
+        result.last.last.write(line);
+      }
+    } else if (line.startsWith("<<<<")) {
+      inDiff = true;
+      result.add(<StringBuffer>[new StringBuffer()]);
+    } else {
+      result.last.write(line);
+    }
+  }
+  return result;
+}
+
+/// Returns [updates] expanded to full compilation units/source files.
+///
+/// [updates] is a convenient way to write updates/patches to a single source
+/// file without repeating common parts.
+///
+/// For example:
+///   ["head ", ["v1", "v2"], " tail"]
+/// expands to:
+///   ["head v1 tail", "head v2 tail"]
+List<String> expandUpdates(List updates) {
+  int outputCount = updates.firstWhere((e) => e is Iterable).length;
+  List<StringBuffer> result = new List<StringBuffer>(outputCount);
+  for (int i = 0; i < outputCount; i++) {
+    result[i] = new StringBuffer();
+  }
+  for (var chunk in updates) {
+    if (chunk is Iterable) {
+      int segmentCount = 0;
+      for (var segment in chunk) {
+        result[segmentCount++].write(segment);
+      }
+      if (segmentCount != outputCount) {
+        throw new ArgumentError("Expected ${outputCount} segments, "
+            "but found ${segmentCount} in $chunk");
+      }
+    } else {
+      for (StringBuffer buffer in result) {
+        buffer.write(chunk);
+      }
+    }
+  }
+
+  return result.map((e) => '$e').toList();
+}
+
+/// Split [text] into lines preserving trailing newlines (unlike
+/// String.split("\n"). Also, if [text] is empty, return an empty list (unlike
+/// String.split("\n")).
+List<String> splitLines(String text) {
+  return text.split(new RegExp('^', multiLine: true));
+}
diff --git a/pkg/front_end/test/fasta/incremental_test.dart b/pkg/front_end/test/fasta/incremental_test.dart
new file mode 100644
index 0000000..4ef487b
--- /dev/null
+++ b/pkg/front_end/test/fasta/incremental_test.dart
@@ -0,0 +1,223 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE.md file.
+
+library fasta.test.incremental_test;
+
+import "dart:async" show Future;
+
+import "dart:convert" show JsonEncoder;
+
+import "dart:io" show File;
+
+import "package:kernel/ast.dart" show Program;
+
+import "package:testing/testing.dart"
+    show Chain, ChainContext, Result, Step, TestDescription, runMe;
+
+import "package:yaml/yaml.dart" show YamlMap, loadYamlNode;
+
+import "package:front_end/src/api_prototype/front_end.dart"
+    show CompilationMessage, CompilerOptions, Severity;
+
+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/external_state_snapshot.dart'
+    show ExternalStateSnapshot;
+
+import 'package:front_end/src/base/processed_options.dart'
+    show ProcessedOptions;
+
+import "incremental_expectations.dart"
+    show IncrementalExpectation, extractJsonExpectations;
+
+import "incremental_source_files.dart" show expandDiff, expandUpdates;
+
+const JsonEncoder json = const JsonEncoder.withIndent("  ");
+
+final Uri base = Uri.parse('org-dartlang-test:///');
+
+class Context extends ChainContext {
+  final ProcessedOptions options;
+  final ExternalStateSnapshot snapshot;
+  final List<CompilationMessage> errors;
+
+  final List<Step> steps = const <Step>[
+    const ReadTest(),
+    const FullCompile(),
+    const IncrementalUpdates(),
+  ];
+
+  const Context(this.options, this.snapshot, this.errors);
+
+  void reset() {
+    errors.clear();
+    snapshot.restore();
+  }
+}
+
+class ReadTest extends Step<TestDescription, TestCase, Context> {
+  const ReadTest();
+
+  String get name => "read test";
+
+  Future<Result<TestCase>> run(
+      TestDescription description, Context context) async {
+    context.reset();
+    Uri uri = description.uri;
+    String contents = await new File.fromUri(uri).readAsString();
+    Map<String, List<String>> sources = <String, List<String>>{};
+    List<IncrementalExpectation> expectations;
+    bool firstPatch = true;
+    YamlMap map = loadYamlNode(contents, sourceUrl: uri);
+    map.forEach((_fileName, _contents) {
+      String fileName = _fileName; // Strong mode hurray!
+      String contents = _contents; // Strong mode hurray!
+      if (fileName.endsWith(".patch")) {
+        fileName = fileName.substring(0, fileName.length - ".patch".length);
+        if (firstPatch) {
+          expectations = extractJsonExpectations(contents);
+        }
+        sources[fileName] = expandUpdates(expandDiff(contents));
+        firstPatch = false;
+      } else {
+        sources[fileName] = <String>[contents];
+      }
+    });
+    final IncrementalKernelGenerator generator =
+        await IncrementalKernelGenerator.newInstance(
+            null, context.options.inputs.first,
+            processedOptions: context.options, useMinimalGenerator: true);
+    final TestCase test = new TestCase(description, sources, expectations,
+        context.options.fileSystem, generator, context.errors);
+    return test.validate(this);
+  }
+}
+
+class FullCompile extends Step<TestCase, TestCase, Context> {
+  String get name => "full compile";
+
+  const FullCompile();
+
+  Future<Result<TestCase>> run(TestCase test, Context context) async {
+    test.sources.forEach((String name, List<String> sources) {
+      Uri uri = base.resolve(name);
+      test.fs.entityForUri(uri).writeAsStringSync(sources.first);
+    });
+    test.program = (await test.generator.computeDelta()).newProgram;
+    List<CompilationMessage> errors = test.takeErrors();
+    if (errors.isNotEmpty && !test.expectations.first.hasCompileTimeError) {
+      return fail(test, errors.join("\n"));
+    } else {
+      return pass(test);
+    }
+  }
+}
+
+class IncrementalUpdates extends Step<TestCase, TestCase, Context> {
+  const IncrementalUpdates();
+
+  String get name => "incremental updates";
+
+  Future<Result<TestCase>> run(TestCase test, Context context) async {
+    return pass(test);
+  }
+}
+
+class TestCase {
+  final TestDescription description;
+
+  final Map<String, List<String>> sources;
+
+  final List<IncrementalExpectation> expectations;
+
+  final MemoryFileSystem fs;
+
+  final IncrementalKernelGenerator generator;
+
+  final List<CompilationMessage> errors;
+
+  Program program;
+
+  TestCase(this.description, this.sources, this.expectations, this.fs,
+      this.generator, this.errors);
+
+  String toString() {
+    return "TestCase(${json.convert(sources)}, ${json.convert(expectations)})";
+  }
+
+  Result<TestCase> validate(Step<dynamic, TestCase, ChainContext> step) {
+    print(this);
+    if (sources == null) {
+      return step.fail(this, "No sources.");
+    }
+    if (expectations == null || expectations.isEmpty) {
+      return step.fail(this, "No expectations.");
+    }
+    for (String name in sources.keys) {
+      List<String> versions = sources[name];
+      if (versions.length != 1 && versions.length != expectations.length) {
+        return step.fail(
+            this,
+            "Found ${versions.length} versions of $name,"
+            " but expected 1 or ${expectations.length}.");
+      }
+    }
+    return step.pass(this);
+  }
+
+  List<CompilationMessage> takeErrors() {
+    List<CompilationMessage> result = new List<CompilationMessage>.from(errors);
+    errors.clear();
+    return result;
+  }
+}
+
+Future<Context> createContext(
+    Chain suite, Map<String, String> environment) async {
+  /// The custom URI used to locate the dill file in the MemoryFileSystem.
+  final Uri sdkSummary = base.resolve("vm_platform.dill");
+
+  /// The actual location of the dill file.
+  final Uri sdkSummaryFile =
+      computePlatformBinariesLocation().resolve("vm_platform.dill");
+
+  final MemoryFileSystem fs = new MemoryFileSystem(base);
+
+  fs
+      .entityForUri(sdkSummary)
+      .writeAsBytesSync(await new File.fromUri(sdkSummaryFile).readAsBytes());
+
+  final List<CompilationMessage> errors = <CompilationMessage>[];
+
+  final CompilerOptions optionBuilder = new CompilerOptions()
+    ..strongMode = false
+    ..reportMessages = true
+    ..verbose = true
+    ..fileSystem = fs
+    ..sdkSummary = sdkSummary
+    ..onError = (CompilationMessage message) {
+      if (message.severity != Severity.nit &&
+          message.severity != Severity.warning) {
+        errors.add(message);
+      }
+    };
+
+  final ProcessedOptions options =
+      new ProcessedOptions(optionBuilder, false, [base.resolve("main.dart")]);
+
+  final ExternalStateSnapshot snapshot =
+      new ExternalStateSnapshot(await options.loadSdkSummary(null));
+
+  return new Context(options, snapshot, errors);
+}
+
+main([List<String> arguments = const []]) =>
+    runMe(arguments, createContext, "../../testing.json");
diff --git a/pkg/front_end/test/fasta/reexport_test.dart b/pkg/front_end/test/fasta/reexport_test.dart
index 48ca598..98a1ae7 100644
--- a/pkg/front_end/test/fasta/reexport_test.dart
+++ b/pkg/front_end/test/fasta/reexport_test.dart
@@ -6,7 +6,8 @@
 
 import "package:front_end/src/testing/compiler_common.dart" show compileUnit;
 
-import "package:front_end/front_end.dart" show CompilerOptions;
+import "package:front_end/src/api_prototype/front_end.dart"
+    show CompilerOptions;
 
 main() {
   asyncTest(() async {
diff --git a/pkg/front_end/test/fasta/shaker_test.dart b/pkg/front_end/test/fasta/shaker_test.dart
index d34a414..757e778 100644
--- a/pkg/front_end/test/fasta/shaker_test.dart
+++ b/pkg/front_end/test/fasta/shaker_test.dart
@@ -20,7 +20,7 @@
 import 'dart:io' show File;
 
 export 'package:testing/testing.dart' show Chain, runMe;
-import 'package:front_end/compiler_options.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
 import 'package:front_end/src/base/processed_options.dart';
 import 'package:front_end/src/compute_platform_binaries_location.dart';
 import 'package:front_end/src/fasta/compiler_context.dart';
diff --git a/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart b/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart
index fbb8447..af3fd2c 100644
--- a/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart
+++ b/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart
@@ -12,12 +12,14 @@
 
 import 'package:analyzer/dart/element/type.dart' as ast show DartType;
 
-import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/element.dart' as ast;
+
+import 'package:analyzer/src/dart/element/type.dart' as ast;
 
 import 'package:analyzer/src/fasta/ast_builder.dart' show AstBuilder;
 
 import 'package:analyzer/src/fasta/resolution_applier.dart'
-    show ValidatingResolutionApplier;
+    show TypeContext, ValidatingResolutionApplier;
 
 import 'package:analyzer/src/fasta/resolution_storer.dart'
     show InstrumentedResolutionStorer;
@@ -182,11 +184,11 @@
     // Now apply the resolution data and inferred types to the analyzer AST.
     var translatedDeclarations = _translateDeclarations(_kernelDeclarations);
     var translatedReferences = _translateReferences(_kernelReferences);
-    var translatedTypes = _translateTypes(_kernelTypes);
     var resolutionApplier = new ValidatingResolutionApplier(
+        new _TestTypeContext(),
         translatedDeclarations,
         translatedReferences,
-        translatedTypes,
+        _kernelTypes,
         _declarationOffsets,
         _referenceOffsets,
         _typeOffsets);
@@ -240,11 +242,11 @@
     // Now apply the resolution data and inferred types to the analyzer AST.
     var translatedDeclarations = _translateDeclarations(_kernelDeclarations);
     var translatedReferences = _translateReferences(_kernelReferences);
-    var translatedTypes = _translateTypes(_kernelTypes);
     var resolutionApplier = new ValidatingResolutionApplier(
+        new _TestTypeContext(),
         translatedDeclarations,
         translatedReferences,
-        translatedTypes,
+        _kernelTypes,
         _declarationOffsets,
         _referenceOffsets,
         _typeOffsets);
@@ -307,12 +309,27 @@
     // TODO(scheglov): implement proper translation of elements.
     return new List<ast.Element>.filled(kernelDeclarations.length, null);
   }
+}
 
-  /// Translates the given kernel types into analyzer types.
-  static List<ast.DartType> _translateTypes(List<kernel.DartType> kernelTypes) {
-    // For now we just translate everything to `dynamic`.
-    // TODO(paulberry): implement proper translation of types.
-    return new List<ast.DartType>.filled(
-        kernelTypes.length, DynamicTypeImpl.instance);
+/// Test implementation of [TypeContext].
+class _TestTypeContext implements TypeContext {
+  @override
+  ast.ClassElement get enclosingClassElement => null;
+
+  @override
+  ast.DartType get typeType => null;
+
+  @override
+  void encloseVariable(ast.ElementImpl element) {}
+
+  @override
+  void enterLocalFunction(ast.FunctionElementImpl element) {}
+
+  @override
+  void exitLocalFunction(ast.FunctionElementImpl element) {}
+
+  @override
+  ast.DartType translateType(kernel.DartType kernelType) {
+    return ast.UndefinedTypeImpl.instance;
   }
 }
diff --git a/pkg/front_end/test/fasta/testing/analyzer_loader.dart b/pkg/front_end/test/fasta/testing/analyzer_loader.dart
index 1478047..2d229b3 100644
--- a/pkg/front_end/test/fasta/testing/analyzer_loader.dart
+++ b/pkg/front_end/test/fasta/testing/analyzer_loader.dart
@@ -4,7 +4,7 @@
 
 library fasta.analyzer_loader;
 
-import 'package:front_end/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/physical_file_system.dart';
 import 'package:kernel/ast.dart' show Program;
 
 import 'package:front_end/src/fasta/builder/builder.dart' show LibraryBuilder;
diff --git a/pkg/front_end/test/fasta/testing/analyzer_target.dart b/pkg/front_end/test/fasta/testing/analyzer_target.dart
index ae7d292..f3dc25e 100644
--- a/pkg/front_end/test/fasta/testing/analyzer_target.dart
+++ b/pkg/front_end/test/fasta/testing/analyzer_target.dart
@@ -4,7 +4,7 @@
 
 library fasta.analyzer_target;
 
-import 'package:front_end/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/physical_file_system.dart';
 import 'package:kernel/ast.dart' show Library, Source;
 
 import 'package:front_end/src/fasta/kernel/kernel_target.dart'
@@ -19,7 +19,7 @@
 class AnalyzerTarget extends KernelTarget {
   AnalyzerTarget(
       DillTarget dillTarget, UriTranslator uriTranslator, bool strongMode,
-      [Map<String, Source> uriToSource])
+      [Map<Uri, Source> uriToSource])
       : super(PhysicalFileSystem.instance, false, dillTarget, uriTranslator,
             uriToSource: uriToSource);
 
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index 91abee9..dc9da3d 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -10,7 +10,8 @@
 
 import 'dart:convert' show JSON;
 
-import 'package:front_end/physical_file_system.dart' show PhysicalFileSystem;
+import 'package:front_end/src/api_prototype/physical_file_system.dart'
+    show PhysicalFileSystem;
 
 import 'package:front_end/src/base/libraries_specification.dart'
     show TargetLibrariesSpecification;
@@ -33,7 +34,8 @@
         TestDescription,
         StdioProcess;
 
-import 'package:front_end/compiler_options.dart' show CompilerOptions;
+import 'package:front_end/src/api_prototype/compiler_options.dart'
+    show CompilerOptions;
 
 import 'package:front_end/src/base/processed_options.dart'
     show ProcessedOptions;
diff --git a/pkg/front_end/test/incremental_kernel_generator_test.dart b/pkg/front_end/test/incremental_kernel_generator_test.dart
index e79e540..174b9d2 100644
--- a/pkg/front_end/test/incremental_kernel_generator_test.dart
+++ b/pkg/front_end/test/incremental_kernel_generator_test.dart
@@ -4,13 +4,13 @@
 
 import 'dart:async';
 
-import 'package:front_end/byte_store.dart';
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/incremental_kernel_generator.dart';
-import 'package:front_end/memory_file_system.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/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/summary_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';
@@ -123,7 +123,7 @@
 ''');
       // The main method is set.
       expect(program.mainMethod, isNotNull);
-      expect(program.mainMethod.enclosingLibrary.fileUri, cUri.toString());
+      expect(program.mainMethod.enclosingLibrary.fileUri, cUri);
     }
 
     // Update b.dart and recompile c.dart
@@ -151,7 +151,7 @@
 ''');
       // The main method is set even though not the entry point is updated.
       expect(program.mainMethod, isNotNull);
-      expect(program.mainMethod.enclosingLibrary.fileUri, cUri.toString());
+      expect(program.mainMethod.enclosingLibrary.fileUri, cUri);
     }
   }
 
@@ -401,8 +401,8 @@
     Program program = delta.newProgram;
 
     // Sources for library and its part must be present.
-    expect(program.uriToSource.keys, contains(aUri.toString()));
-    expect(program.uriToSource.keys, contains(bUri.toString()));
+    expect(program.uriToSource.keys, contains(aUri));
+    expect(program.uriToSource.keys, contains(bUri));
   }
 
   test_computeDelta_updateBody() async {
@@ -981,7 +981,7 @@
     Program program = delta.newProgram;
 
     // The Source object is present in the map, but is empty.
-    Source source = program.uriToSource[uri.toString()];
+    Source source = program.uriToSource[uri];
     expect(source, isNotNull);
     expect(source.source, isEmpty);
   }
@@ -1325,10 +1325,10 @@
 
   /// Resolve the given `dart` or `package` [inputUri] into the corresponding
   /// file URI, or return the same URI if it is already a file URI.
-  String _resolveUriToFileUri(Uri inputUri) {
+  Uri _resolveUriToFileUri(Uri inputUri) {
     var translator = generator.uriTranslator;
     var outputUri = translator.translate(inputUri) ?? inputUri;
-    return outputUri.toString();
+    return outputUri;
   }
 
   static Procedure _getMainProcedure(Library library) => library.procedures
diff --git a/pkg/front_end/test/kernel_generator_test.dart b/pkg/front_end/test/kernel_generator_test.dart
index b484278..f478b62 100644
--- a/pkg/front_end/test/kernel_generator_test.dart
+++ b/pkg/front_end/test/kernel_generator_test.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:front_end/front_end.dart';
+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:front_end/src/fasta/deprecated_problems.dart'
@@ -87,7 +87,8 @@
       // least one. Having more means that source-info is added.
       expect(program.uriToSource.keys.length, greaterThan(1));
       expect(
-          program.uriToSource['org-dartlang-test:///a/b/c/a.dart'], isNotNull);
+          program.uriToSource[Uri.parse('org-dartlang-test:///a/b/c/a.dart')],
+          isNotNull);
     });
 
     test('code from summary dependencies are marked external', () async {
diff --git a/pkg/front_end/test/memory_file_system_test.dart b/pkg/front_end/test/memory_file_system_test.dart
index 51747ef..f679d0b 100644
--- a/pkg/front_end/test/memory_file_system_test.dart
+++ b/pkg/front_end/test/memory_file_system_test.dart
@@ -8,8 +8,9 @@
 import 'dart:convert';
 import 'dart:io' as io;
 
-import 'package:front_end/file_system.dart' show FileSystemException;
-import 'package:front_end/memory_file_system.dart';
+import 'package:front_end/src/api_prototype/file_system.dart'
+    show FileSystemException;
+import 'package:front_end/src/api_prototype/memory_file_system.dart';
 import 'package:path/path.dart' as pathos;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/front_end/test/minimal_incremental_kernel_generator_test.dart b/pkg/front_end/test/minimal_incremental_kernel_generator_test.dart
index e4d8781..da533ed 100644
--- a/pkg/front_end/test/minimal_incremental_kernel_generator_test.dart
+++ b/pkg/front_end/test/minimal_incremental_kernel_generator_test.dart
@@ -4,14 +4,14 @@
 
 import 'dart:async';
 
-import 'package:front_end/byte_store.dart';
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/incremental_kernel_generator.dart';
-import 'package:front_end/memory_file_system.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/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/summary_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';
@@ -124,7 +124,7 @@
 ''');
       // The main method is set.
       expect(program.mainMethod, isNotNull);
-      expect(program.mainMethod.enclosingLibrary.fileUri, cUri.toString());
+      expect(program.mainMethod.enclosingLibrary.fileUri, cUri);
     }
 
     // Update b.dart and recompile c.dart
@@ -152,7 +152,7 @@
 ''');
       // The main method is set even though not the entry point is updated.
       expect(program.mainMethod, isNotNull);
-      expect(program.mainMethod.enclosingLibrary.fileUri, cUri.toString());
+      expect(program.mainMethod.enclosingLibrary.fileUri, cUri);
     }
   }
 
@@ -226,8 +226,8 @@
     Program program = delta.newProgram;
 
     // Sources for library and its part must be present.
-    expect(program.uriToSource.keys, contains(aUri.toString()));
-    expect(program.uriToSource.keys, contains(bUri.toString()));
+    expect(program.uriToSource.keys, contains(aUri));
+    expect(program.uriToSource.keys, contains(bUri));
   }
 
   test_compile_update_part() async {
@@ -373,7 +373,7 @@
     Program program = delta.newProgram;
 
     // The Source object is present in the map, but is empty.
-    Source source = program.uriToSource[uri.toString()];
+    Source source = program.uriToSource[uri];
     expect(source, isNotNull);
     expect(source.source, isEmpty);
   }
@@ -690,9 +690,9 @@
 
   /// Resolve the given `dart` or `package` [inputUri] into the corresponding
   /// file URI, or return the same URI if it is already a file URI.
-  String _resolveUriToFileUri(Uri inputUri) {
+  Uri _resolveUriToFileUri(Uri inputUri) {
     var translator = generator.uriTranslator;
     var outputUri = translator.translate(inputUri) ?? inputUri;
-    return outputUri.toString();
+    return outputUri;
   }
 }
diff --git a/pkg/front_end/test/mixin_export_test.dart b/pkg/front_end/test/mixin_export_test.dart
index c185b68..04107f5 100644
--- a/pkg/front_end/test/mixin_export_test.dart
+++ b/pkg/front_end/test/mixin_export_test.dart
@@ -5,7 +5,7 @@
 import 'package:async_helper/async_helper.dart' show asyncTest;
 
 import 'package:front_end/src/testing/compiler_common.dart';
-import 'package:front_end/front_end.dart';
+import 'package:front_end/src/api_prototype/front_end.dart';
 
 main() {
   asyncTest(() async {
diff --git a/pkg/front_end/test/physical_file_system_test.dart b/pkg/front_end/test/physical_file_system_test.dart
index 82a6e62..0b4438d 100644
--- a/pkg/front_end/test/physical_file_system_test.dart
+++ b/pkg/front_end/test/physical_file_system_test.dart
@@ -9,8 +9,8 @@
 import 'dart:convert';
 import 'dart:io' as io;
 
-import 'package:front_end/file_system.dart';
-import 'package:front_end/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/file_system.dart';
+import 'package:front_end/src/api_prototype/physical_file_system.dart';
 import 'package:path/path.dart' as p;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/front_end/test/src/base/processed_options_test.dart b/pkg/front_end/test/src/base/processed_options_test.dart
index 2c72eaf..1eb44b5 100644
--- a/pkg/front_end/test/src/base/processed_options_test.dart
+++ b/pkg/front_end/test/src/base/processed_options_test.dart
@@ -4,8 +4,8 @@
 
 import 'dart:async';
 
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/memory_file_system.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/memory_file_system.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/util/bytes_sink.dart' show BytesSink;
diff --git a/pkg/front_end/test/src/incremental/file_state_test.dart b/pkg/front_end/test/src/incremental/file_state_test.dart
index 36ab8ec..e9d8682 100644
--- a/pkg/front_end/test/src/incremental/file_state_test.dart
+++ b/pkg/front_end/test/src/incremental/file_state_test.dart
@@ -4,8 +4,8 @@
 
 import 'dart:async';
 
-import 'package:front_end/byte_store.dart';
-import 'package:front_end/memory_file_system.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
+import 'package:front_end/src/api_prototype/memory_file_system.dart';
 import 'package:front_end/src/fasta/uri_translator_impl.dart';
 import 'package:front_end/src/incremental/file_state.dart';
 import 'package:kernel/target/targets.dart';
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 9951398..a9cbc0b 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
@@ -11,11 +11,11 @@
 import 'dart:convert';
 import 'dart:io';
 
-import 'package:front_end/byte_store.dart';
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/file_system.dart';
-import 'package:front_end/incremental_kernel_generator.dart';
-import 'package:front_end/memory_file_system.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/file_system.dart';
+import 'package:front_end/src/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';
diff --git a/pkg/front_end/test/src/incremental/kernel_driver_test.dart b/pkg/front_end/test/src/incremental/kernel_driver_test.dart
index 9cb5d8e3..80eb87b 100644
--- a/pkg/front_end/test/src/incremental/kernel_driver_test.dart
+++ b/pkg/front_end/test/src/incremental/kernel_driver_test.dart
@@ -4,15 +4,15 @@
 
 import 'dart:async';
 
-import 'package:front_end/byte_store.dart';
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/memory_file_system.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/memory_file_system.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/kernel/utils.dart';
 import 'package:front_end/src/fasta/uri_translator_impl.dart';
 import 'package:front_end/src/incremental/kernel_driver.dart';
-import 'package:front_end/summary_generator.dart';
+import 'package:front_end/src/api_prototype/summary_generator.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/binary/ast_from_binary.dart';
 import 'package:kernel/target/targets.dart';
@@ -946,7 +946,7 @@
 
   void _assertLibraryUris(KernelSequenceResult result,
       {List<Uri> includes: const [], List<Uri> excludes: const []}) {
-    Map<String, Source> uriToSource = {};
+    Map<Uri, Source> uriToSource = {};
     List<Uri> libraryUris = [];
     for (LibraryCycleResult cycleResult in result.results) {
       uriToSource.addAll(cycleResult.uriToSource);
@@ -1022,10 +1022,10 @@
 
   /// Resolve the given `dart` or `package` [inputUri] into the corresponding
   /// file URI, or return the same URI if it is already a file URI.
-  String _resolveUriToFileUri(Uri inputUri) {
+  Uri _resolveUriToFileUri(Uri inputUri) {
     var translator = driver.uriTranslator;
     var outputUri = translator.translate(inputUri) ?? inputUri;
-    return outputUri.toString();
+    return outputUri;
   }
 
   /// Return the [Uri] for the given Posix [path].
diff --git a/pkg/front_end/test/src/incremental/mock_sdk.dart b/pkg/front_end/test/src/incremental/mock_sdk.dart
index f0f088c..f2b817e 100644
--- a/pkg/front_end/test/src/incremental/mock_sdk.dart
+++ b/pkg/front_end/test/src/incremental/mock_sdk.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:front_end/memory_file_system.dart';
+import 'package:front_end/src/api_prototype/memory_file_system.dart';
 import 'package:front_end/src/base/libraries_specification.dart';
 
 final _ASYNC = r'''
@@ -259,6 +259,7 @@
 
 class _ConstantExpressionError {
   const _ConstantExpressionError();
+  external _throw(error);
 }
 
 class _DuplicatedFieldInitializerError {
diff --git a/pkg/front_end/test/src/multi_root_file_system_test.dart b/pkg/front_end/test/src/multi_root_file_system_test.dart
index a1abf13..9a29993 100644
--- a/pkg/front_end/test/src/multi_root_file_system_test.dart
+++ b/pkg/front_end/test/src/multi_root_file_system_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 
-import 'package:front_end/memory_file_system.dart';
+import 'package:front_end/src/api_prototype/memory_file_system.dart';
 import 'package:front_end/src/multi_root_file_system.dart';
 
 import 'package:test/test.dart';
diff --git a/pkg/front_end/test/subpackage_relationships_test.dart b/pkg/front_end/test/subpackage_relationships_test.dart
index 4214be1..529da68 100644
--- a/pkg/front_end/test/subpackage_relationships_test.dart
+++ b/pkg/front_end/test/subpackage_relationships_test.dart
@@ -5,8 +5,8 @@
 import 'dart:async';
 import 'dart:io';
 
-import 'package:front_end/compiler_options.dart';
-import 'package:front_end/dependency_grapher.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/dependency_grapher.dart';
 import 'package:front_end/src/testing/package_root.dart' as package_root;
 import 'package:path/path.dart' as pathos;
 
@@ -35,18 +35,9 @@
 ///
 /// Each listed directory is considered a subpackage.  Each package contains all
 /// of its descendant files that are not in a more deeply nested subpackage.
-///
-/// TODO(paulberry): stuff in lib/src shouldn't depend on lib; lib should just
-/// re-export stuff in lib/src.
 final subpackageRules = {
-  'lib': new SubpackageRules(allowedDependencies: [
-    'lib/src',
-    'lib/src/base',
-    'lib/src/byte_store',
-    'lib/src/fasta',
-  ]),
   'lib/src': new SubpackageRules(allowedDependencies: [
-    'lib',
+    'lib/src/api_prototype',
     'lib/src/base',
     'lib/src/fasta',
     "lib/src/fasta/dill",
@@ -54,9 +45,21 @@
     'lib/src/fasta/source',
     'lib/src/incremental',
   ]),
-  'lib/src/base': new SubpackageRules(allowedDependencies: [
-    'lib',
+  'lib/src/api_prototype': new SubpackageRules(allowedDependencies: [
     'lib/src',
+    'lib/src/base',
+    'lib/src/byte_store',
+    'lib/src/fasta',
+  ]),
+  'lib/src/api_unstable': new SubpackageRules(allowedDependencies: [
+    'lib/src',
+    'lib/src/api_prototype',
+    'lib/src/base',
+    'lib/src/fasta/scanner',
+  ]),
+  'lib/src/base': new SubpackageRules(allowedDependencies: [
+    'lib/src',
+    'lib/src/api_prototype',
     'lib/src/fasta',
     'lib/src/fasta/util',
   ]),
@@ -65,7 +68,7 @@
   'lib/src/byte_store': new SubpackageRules(allowedDependencies: []),
   'lib/src/codegen': new SubpackageRules(),
   'lib/src/fasta': new SubpackageRules(allowedDependencies: [
-    'lib',
+    'lib/src/api_prototype',
     'lib/src/base',
     'lib/src/fasta/builder',
     'lib/src/fasta/dill',
@@ -80,14 +83,13 @@
     'lib/src/fasta',
     'lib/src/fasta/parser',
     'lib/src/fasta/source',
-    'lib/src/fasta/util',
   ]),
   'lib/src/fasta/dill': new SubpackageRules(allowedDependencies: [
     'lib/src/fasta',
     'lib/src/fasta/kernel',
   ]),
   'lib/src/fasta/kernel': new SubpackageRules(allowedDependencies: [
-    'lib',
+    'lib/src/api_prototype',
     'lib/src/fasta',
     'lib/src/base',
     'lib/src/fasta/builder',
@@ -96,7 +98,6 @@
     'lib/src/fasta/scanner',
     'lib/src/fasta/source',
     'lib/src/fasta/type_inference',
-    'lib/src/fasta/util',
     'lib/src/scanner',
   ]),
   'lib/src/fasta/parser': new SubpackageRules(allowedDependencies: [
@@ -112,7 +113,7 @@
     'lib/src/fasta/util',
   ]),
   'lib/src/fasta/source': new SubpackageRules(allowedDependencies: [
-    'lib',
+    'lib/src/api_prototype',
     'lib/src/fasta',
     'lib/src/base',
     'lib/src/fasta/builder',
@@ -123,7 +124,7 @@
     'lib/src/scanner',
   ]),
   'lib/src/fasta/testing': new SubpackageRules(allowedDependencies: [
-    'lib',
+    'lib/src/api_prototype',
     'lib/src',
     'lib/src/base',
     'lib/src/fasta',
@@ -139,7 +140,7 @@
   ]),
   'lib/src/fasta/util': new SubpackageRules(),
   'lib/src/incremental': new SubpackageRules(allowedDependencies: [
-    'lib',
+    'lib/src/api_prototype',
     'lib/src',
     'lib/src/base',
     'lib/src/fasta',
@@ -157,7 +158,7 @@
     'lib/src/fasta/scanner',
   ]),
   'lib/src/testing': new SubpackageRules(allowedDependencies: [
-    'lib',
+    'lib/src/api_prototype',
   ]),
 };
 
diff --git a/pkg/front_end/test/summary_generator_test.dart b/pkg/front_end/test/summary_generator_test.dart
index 5f6c6f2..92131af 100644
--- a/pkg/front_end/test/summary_generator_test.dart
+++ b/pkg/front_end/test/summary_generator_test.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:front_end/front_end.dart';
+import 'package:front_end/src/api_prototype/front_end.dart';
 import 'package:front_end/src/testing/compiler_common.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/kernel.dart';
@@ -16,7 +16,7 @@
 
     // Note: the kernel representation always has an empty '' key in the map,
     // but otherwise no other data is included here.
-    expect(program.uriToSource.keys.single, '');
+    expect(program.uriToSource.keys.single, Uri.parse(""));
   });
 
   test('summary includes declarations, but no method bodies', () async {
diff --git a/pkg/front_end/testcases/ast_builder.status b/pkg/front_end/testcases/ast_builder.status
index d74c7fc..f27e0c3 100644
--- a/pkg/front_end/testcases/ast_builder.status
+++ b/pkg/front_end/testcases/ast_builder.status
@@ -8,21 +8,16 @@
 accessors: Crash
 annotation_top: Crash
 argument_mismatch: Crash
-arithmetic: Crash
 bad_setter_abstract: Crash
 call: Crash
 cascade: Crash
-casts: Crash
 classes: Crash
-closure: Crash
-covariant_generic: Crash
 default_values: Crash
 duplicated_named_args_3: Crash
 escape: Crash
 expressions: Crash
 external: Crash
 fallthrough: Crash
-fibonacci: Crash
 for_in_scope: Crash
 function_type_is_check: Crash
 function_type_recovery: Crash
@@ -30,48 +25,20 @@
 illegal_named_function_expression: Crash
 illegal_named_function_expression_scope: Crash
 implicit_scope_test: Crash
-implicit_this: Crash
 inference/abstract_class_instantiation: Crash
 inference/assert_initializer: Crash
-inference/assign_local: Crash
-inference/block_bodied_lambdas_async_all_returns_are_futures: Crash
-inference/block_bodied_lambdas_async_all_returns_are_values: Crash
-inference/block_bodied_lambdas_async_mix_of_values_and_futures: Crash
 inference/block_bodied_lambdas_async_star: Crash
-inference/block_bodied_lambdas_basic: Crash
-inference/block_bodied_lambdas_basic_void: Crash
-inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference: Crash
-inference/block_bodied_lambdas_infer_bottom_async: Crash
-inference/block_bodied_lambdas_infer_bottom_async_star: Crash
-inference/block_bodied_lambdas_infer_bottom_sync_star: Crash
-inference/block_bodied_lambdas_lub: Crash
-inference/block_bodied_lambdas_no_return: Crash
-inference/block_bodied_lambdas_sync_star: Crash
-inference/block_bodied_lambdas_void_context: Crash
 inference/bug30251: Crash
 inference/bug30620: Crash
 inference/bug30620_b: Crash
 inference/bug30620_c: Crash
-inference/bug30620_d: Crash
 inference/bug30624: Crash
-inference/bug31132: Crash
 inference/bug31133: Crash
 inference/call_corner_cases: Crash
 inference/complex_predecrement: Crash
-inference/conditional_lub: Crash
-inference/conditional_upwards_inference: Crash
-inference/constructors_downwards_with_constraint: Crash
 inference/constructors_infer_from_arguments: Crash
-inference/constructors_infer_from_arguments_const_with_upper_bound: Crash
-inference/constructors_infer_from_arguments_downwards_from_constructor: Crash
-inference/constructors_infer_from_arguments_factory: Crash
-inference/constructors_infer_from_arguments_named: Crash
-inference/constructors_infer_from_arguments_named_factory: Crash
 inference/constructors_infer_from_arguments_redirecting: Crash
-inference/constructors_inference_f_bounded: Crash
-inference/constructors_reverse_type_parameters: Crash
 inference/constructors_too_many_positional_arguments: Crash
-inference/downward_inference_miscellaneous: Crash
 inference/downwards_inference_annotations: Crash
 inference/downwards_inference_annotations_class_members: Crash
 inference/downwards_inference_annotations_for_loop_variable: Crash
@@ -82,15 +49,11 @@
 inference/downwards_inference_annotations_type_variable: Fail
 inference/downwards_inference_annotations_type_variable_local: Crash
 inference/downwards_inference_annotations_typedef: Crash
-inference/downwards_inference_assignment_statements: Crash
-inference/downwards_inference_async_await: Crash
 inference/downwards_inference_for_each: Crash
 inference/downwards_inference_initializing_formal_default_formal: Crash
 inference/downwards_inference_inside_top_level: Crash
-inference/downwards_inference_inside_top_level_2: Crash
 inference/downwards_inference_on_constructor_arguments_infer_downwards: Crash
 inference/downwards_inference_on_function_arguments_infer_downwards: Crash
-inference/downwards_inference_on_function_expressions: Crash
 inference/downwards_inference_on_function_of_t_using_the_t: Crash
 inference/downwards_inference_on_generic_constructor_arguments_empty_list: Crash
 inference/downwards_inference_on_generic_constructor_arguments_infer_downwards: Crash
@@ -104,11 +67,9 @@
 inference/field_initializer_context_implicit: Crash
 inference/field_initializer_context_this: Crash
 inference/field_initializer_parameter: Crash
+inference/for_each_downcast_iterable: Crash
 inference/for_in_loop_promotion: Crash
-inference/for_loop_empty_condition: Crash
 inference/for_loop_initializer_expression: Crash
-inference/for_loop_promotion: Crash
-inference/future_or_subtyping: Crash
 inference/future_then: Crash
 inference/future_then_2: Crash
 inference/future_then_3: Crash
@@ -121,13 +82,11 @@
 inference/future_then_conditional_4: Crash
 inference/future_then_conditional_5: Crash
 inference/future_then_conditional_6: Crash
-inference/future_then_downwards_method_target: Crash
-inference/future_then_explicit_future: Crash
+inference/future_then_explicit_future: Fail
 inference/future_then_ifNull: Crash
 inference/future_then_upwards: Crash
 inference/future_then_upwards_2: Crash
 inference/future_then_upwards_3: Crash
-inference/future_then_upwards_from_block: Crash
 inference/future_union_async_conditional: Crash
 inference/future_union_async_conditional_2: Crash
 inference/future_union_downwards: Crash
@@ -135,40 +94,18 @@
 inference/future_union_downwards_3: Crash
 inference/future_union_downwards_4: Crash
 inference/future_union_downwards_generic_method_with_future_return: Crash
-inference/future_union_downwards_generic_method_with_generic_return: Crash
 inference/future_union_upwards_generic_methods: Crash
-inference/generic_functions_return_typedef: Crash
+inference/generic_functions_return_typedef: Fail
 inference/generic_methods_basic_downward_inference: Crash
-inference/generic_methods_correctly_recognize_generic_upper_bound: Crash
-inference/generic_methods_dart_math_min_max: Crash
 inference/generic_methods_downwards_inference_fold: Crash
-inference/generic_methods_handle_override_of_non_generic_with_generic: Crash
 inference/generic_methods_infer_generic_instantiation: Crash
 inference/generic_methods_infer_js_builtin: Fail
-inference/generic_methods_inference_error: Crash
 inference/generic_methods_iterable_and_future: Crash
 inference/generic_methods_nested_generic_instantiation: Crash
 inference/greatest_closure_multiple_params: Crash
-inference/infer_assign_to_implicit_this: Crash
-inference/infer_assign_to_implicit_this_upwards: Crash
 inference/infer_assign_to_index_full: Crash
-inference/infer_assign_to_index_super: Crash
-inference/infer_assign_to_index_this: Crash
-inference/infer_assign_to_local: Crash
-inference/infer_assign_to_local_upwards: Crash
-inference/infer_assign_to_property_full: Crash
-inference/infer_assign_to_property_null_aware: Crash
-inference/infer_assign_to_property_null_aware_upwards: Crash
-inference/infer_assign_to_property_super: Crash
-inference/infer_assign_to_property_super_upwards: Crash
-inference/infer_assign_to_property_upwards: Crash
 inference/infer_assign_to_static: Crash
 inference/infer_assign_to_static_upwards: Crash
-inference/infer_binary_double_double: Crash
-inference/infer_binary_double_int: Crash
-inference/infer_binary_int_double: Crash
-inference/infer_binary_int_int: Crash
-inference/infer_conditional: Crash
 inference/infer_correctly_on_multiple_variables_declared_together: Crash
 inference/infer_from_complex_expressions_if_outer_most_value_is_precise: Crash
 inference/infer_from_variables_in_cycle_libs_when_flag_is_on2: Crash
@@ -182,47 +119,28 @@
 inference/infer_generic_method_type_positional: Crash
 inference/infer_list_literal_nested_in_map_literal: Crash
 inference/infer_local_function_referenced_before_declaration: Crash
-inference/infer_local_function_return_type: Crash
 inference/infer_method_missing_params: Crash
-inference/infer_prefix_expression: Crash
-inference/infer_prefix_expression_custom: Crash
 inference/infer_rethrow: Crash
-inference/infer_return_of_statement_lambda: Crash
 inference/infer_statics_transitively3: Crash
 inference/infer_statics_transitively: Crash
 inference/infer_statics_transitively_2_a: Crash
 inference/infer_statics_transitively_a: Crash
 inference/infer_statics_with_method_invocations: Crash
 inference/infer_statics_with_method_invocations_a: Crash
-inference/infer_throw: Crash
-inference/infer_type_on_var_from_field: Crash
 inference/infer_typed_map_literal: Crash
-inference/infer_types_on_generic_instantiations_4: Crash
-inference/infer_types_on_generic_instantiations_in_library_cycle: Crash
-inference/infer_types_on_generic_instantiations_in_library_cycle_a: Crash
 inference/infer_types_on_loop_indices_for_each_loop: Crash
-inference/infer_types_on_loop_indices_for_loop_with_inference: Crash
+inference/infer_types_on_loop_indices_for_each_loop_async: Crash
 inference/inferred_initializing_formal_checks_default_value: Crash
 inference/inferred_type_cascade: Crash
 inference/inferred_type_custom_index_op: Crash
 inference/inferred_type_custom_index_op_via_interface: Crash
-inference/inferred_type_custom_unary_op: Crash
-inference/inferred_type_custom_unary_op_via_interface: Crash
 inference/inferred_type_is_enum: Crash
 inference/inferred_type_is_enum_values: Crash
 inference/inferred_type_is_typedef: Crash
 inference/inferred_type_is_typedef_parameterized: Crash
 inference/inferred_type_uses_synthetic_function_type_named_param: Crash
 inference/inferred_type_uses_synthetic_function_type_positional_param: Crash
-inference/instantiate_to_bounds_invoke_constructor_type_args_exact: Crash
 inference/lambda_does_not_have_propagated_type_hint: Crash
-inference/lambda_void_context: Crash
-inference/list_literal_typed: Crash
-inference/list_literals: Crash
-inference/list_literals_top_level: Crash
-inference/local_constructor_from_arguments: Crash
-inference/local_reference_upwards_local: Crash
-inference/local_return_and_yield: Crash
 inference/map_literals: Crash
 inference/map_literals_can_infer_null: Crash
 inference/map_literals_top_level: Crash
@@ -232,106 +150,50 @@
 inference/null_literal_should_not_infer_as_bottom: Crash
 inference/parameter_defaults_downwards: Crash
 inference/parameter_defaults_upwards: Crash
-inference/promote_bounds: Crash
 inference/promote_from_logical_rhs: Crash
-inference/promotion_subtype_check: Crash
-inference/property_set: Crash
-inference/refine_binary_expression_type_type_parameter_t_double: Crash
-inference/refine_binary_expression_type_type_parameter_t_int: Crash
-inference/refine_binary_expression_type_type_parameter_t_t: Crash
 inference/static_method_tear_off: Crash
 inference/string_literal: Crash
-inference/super_index_set: Crash
-inference/super_index_set_substitution: Crash
 inference/super_initializer: Crash
 inference/super_initializer_substitution: Crash
-inference/super_method_invocation: Crash
-inference/super_method_invocation_substitution: Crash
-inference/super_property_get: Crash
-inference/super_property_get_substitution: Crash
-inference/super_property_get_invoke_function_typed: Crash
-inference/super_property_get_invoke_implicit_call: Crash
-inference/super_property_get_tearoff: Crash
-inference/super_property_set_substitution: Crash
 inference/switch_continue: Crash
-inference/this_reference: Crash
 inference/top_level_return_and_yield: Fail
 inference/try_catch: Crash
 inference/try_catch_finally: Crash
 inference/try_catch_promotion: Crash
-inference/type_cast: Crash
-inference/type_promotion_ignores_local_functions: Crash
 inference/type_promotion_not_and_not: Crash
-inference/type_promotion_simple: Crash
-inference/type_promotion_stopped_by_access_in_a_closure: Crash
-inference/type_promotion_stopped_by_assignment_in_scope: Crash
-inference/type_promotion_stopped_by_mutation_in_a_closure: Crash
-inference/unresolved_super: Crash
 inference/unsafe_block_closure_inference_closure_call: Crash
-inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param: Crash
-inference/unsafe_block_closure_inference_constructor_call_explicit_type_param: Crash
-inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param: Crash
 inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1: Crash
 inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2: Crash
-inference/unsafe_block_closure_inference_function_call_explicit_type_param: Crash
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: Crash
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2: Crash
-inference/unsafe_block_closure_inference_function_call_implicit_type_param: Crash
 inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr: Crash
 inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr: Crash
-inference/unsafe_block_closure_inference_in_list_dynamic: Crash
-inference/unsafe_block_closure_inference_in_list_typed: Crash
 inference/unsafe_block_closure_inference_in_map_dynamic: Crash
 inference/unsafe_block_closure_inference_in_map_typed: Crash
-inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param: Crash
-inference/unsafe_block_closure_inference_method_call_explicit_type_param: Crash
-inference/unsafe_block_closure_inference_method_call_implicit_type_param: Crash
-inference/void_return_type_subtypes_dynamic: Crash
+inference_new/for_each_invalid_iterable: Crash
+inference_new/for_each_outer_var_type: Crash
 inference_new/indexed_assign_combiner: Crash
-inference_new/infer_assign_to_implicit_this: Crash
-inference_new/infer_assign_to_implicit_this_upwards: Crash
 inference_new/infer_assign_to_index: Crash
 inference_new/infer_assign_to_index_full: Crash
 inference_new/infer_assign_to_index_set_vs_get: Crash
-inference_new/infer_assign_to_index_super: Crash
-inference_new/infer_assign_to_index_super_upwards: Crash
-inference_new/infer_assign_to_index_this: Crash
-inference_new/infer_assign_to_index_this_upwards: Crash
 inference_new/infer_assign_to_index_upwards: Crash
-inference_new/infer_assign_to_local: Crash
-inference_new/infer_assign_to_local_upwards: Crash
-inference_new/infer_assign_to_property: Crash
-inference_new/infer_assign_to_property_custom: Crash
-inference_new/infer_assign_to_property_full: Crash
-inference_new/infer_assign_to_property_null_aware: Crash
-inference_new/infer_assign_to_property_null_aware_upwards: Crash
-inference_new/infer_assign_to_property_super: Crash
-inference_new/infer_assign_to_property_super_upwards: Crash
-inference_new/infer_assign_to_property_upwards: Crash
 inference_new/infer_assign_to_ref: Crash
 inference_new/infer_assign_to_static: Crash
 inference_new/infer_assign_to_static_upwards: Crash
 inference_new/infer_logical: Crash
 inference_new/invalid_assignment_during_toplevel_inference: Crash
-inference_new/property_assign_combiner: Crash
 inference_new/static_assign_combiner: Crash
-inference_new/strongly_connected_component: Crash
-inference_new/super_index_get: Crash
-inference_new/super_index_get_substitution: Crash
 inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2: Crash
 inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2: Crash
-invalid_assignment: Crash
 invocations: Crash
 local_generic_function: Crash
 metadata_enum: Crash
 metadata_named_mixin_application: Crash
 micro: Crash
-mixin: Crash
 named_parameters: Crash
 null_aware: Crash
 operators: Crash
 optional: Crash
-override: Crash
 qualified: Crash
 rasta/abstract_constructor: Crash
 rasta/bad_continue: Crash
@@ -342,28 +204,21 @@
 rasta/cascades: Crash
 rasta/class_hierarchy: Crash
 rasta/deferred_load: Crash
-rasta/external_factory_redirection: Crash
-rasta/for_loop: Crash
 rasta/generic_factory: Crash
 rasta/issue_000001: Crash
 rasta/issue_000002: Crash
 rasta/issue_000004: Crash
-rasta/issue_000012: Crash
 rasta/issue_000025: Crash
 rasta/issue_000031: Crash
 rasta/issue_000036: Crash
-rasta/issue_000039: Crash
-rasta/issue_000041: Crash
+rasta/issue_000039: VerificationError
 rasta/issue_000042: Crash
-rasta/issue_000043: Crash
 rasta/issue_000044: Crash
-rasta/issue_000052: Crash
-rasta/issue_000053: Crash
+rasta/issue_000045: Crash
 rasta/issue_000067: Crash
 rasta/issue_000068: Crash
 rasta/issue_000069: Crash
 rasta/issue_000070: Crash
-rasta/issue_000080: Crash
 rasta/issue_000081: Crash
 rasta/malformed_const_constructor: Crash
 rasta/malformed_function: Crash
@@ -375,7 +230,6 @@
 rasta/super: Crash
 rasta/super_initializer: Crash
 rasta/super_mixin: Crash
-rasta/super_operator: Crash
 rasta/supports_reflection: VerificationError
 rasta/this_invoke: Crash
 rasta/try_label: Crash
@@ -385,9 +239,7 @@
 rasta/unresolved_constructor: Crash
 rasta/unresolved_for_in: Crash
 rasta/unresolved_recovery: Crash
-redirecting_factory: Crash
-redirecting_factory_typeparam_test: Crash
-redirecting_factory_typeparambounds_test: Crash
+redirecting_factory_typeparambounds_test: VerificationError
 regress/issue_29937: Crash
 regress/issue_29941: Crash
 regress/issue_29942: Crash
@@ -405,23 +257,7 @@
 regress/issue_31187: Crash
 regress/issue_31198: Crash
 reorder_super: Crash
-runtime_checks/call_kinds: Crash
-runtime_checks/call_kinds_get: Crash
-runtime_checks/call_kinds_set: Crash
-runtime_checks/contravariant_generic_method_type_parameter: Crash
-runtime_checks/contravariant_generic_return: Crash
-runtime_checks/contravariant_generic_return_null_aware: Crash
-runtime_checks/contravariant_generic_return_tear_off: Crash
-runtime_checks/contravariant_getter: Crash
-runtime_checks/contravariant_getter_return: Crash
-runtime_checks/contravariant_getter_return_null_aware: Crash
-runtime_checks/covariant_generic_method_type_parameter: Crash
 runtime_checks/covariant_generic_parameter_in_interface: Crash
-runtime_checks/covariant_generic_parameter_tear_off: Crash
-runtime_checks/covariant_keyword: Crash
-runtime_checks/covariant_setter: Crash
-runtime_checks/dynamic_invocation: Crash
-runtime_checks/dynamic_invocation_generic: Crash
 runtime_checks/forwarding_stub_with_default_values: Crash
 runtime_checks/implicit_downcast_assert_initializer: Crash
 runtime_checks/implicit_downcast_assert_statement: Crash
@@ -431,10 +267,8 @@
 runtime_checks/implicit_downcast_if: Crash
 runtime_checks/implicit_downcast_not: Crash
 runtime_checks/implicit_downcast_while: Crash
-runtime_checks_new/call_through_this: Crash
 runtime_checks_new/contravariant_combiner: Crash
 runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: Crash
-runtime_checks_new/contravariant_getter_return_compound_assign: Crash
 runtime_checks_new/contravariant_index_assign: Crash
 runtime_checks_new/contravariant_index_get: Crash
 runtime_checks_new/derived_class_typed: Crash
@@ -445,13 +279,9 @@
 runtime_checks_new/stub_checked_via_target: Crash
 statements: Crash
 static_setter: Crash
-stringliteral: Crash
 super_rasta_copy: Crash
 top_level_accessors: Crash
 type_variable_as_super: Crash
 type_variable_prefix: Crash
-typedef: Crash
 uninitialized_fields: Crash
-unused_methods: Crash
 void_methods: Crash
-warn_unresolved_sends: Crash
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
index e65e89e..c3b8952 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
@@ -7,24 +7,24 @@
     : super core::Object::•()
     ;
   set a(dynamic #synthetic) → void
-    let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.\n  set a();\n       ^"));
+    let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.\n  set a();\n       ^"));
   set d(dynamic #synthetic) → void
-    let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.\n  set d(x, y);\n       ^"));
+    let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.\n  set d(x, y);\n       ^"));
 }
 abstract class B extends core::Object {
   default constructor •() → void
     : super core::Object::•()
     ;
   set a(dynamic #synthetic) → void
-    let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.\n  set a();\n       ^"));
+    let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.\n  set a();\n       ^"));
   set d(dynamic #synthetic) → void
-    let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.\n  set d(x, y);\n       ^"));
+    let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.\n  set d(x, y);\n       ^"));
 }
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.\nTry adding {}.\nset b();\n       ^", "pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.\nTry adding {}.\nset c(x, y);\n           ^"]/* from null */;
 static set b(dynamic #synthetic) → void
-  let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.\nset b();\n     ^"));
+  let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.\nset b();\n     ^"));
 static set c(dynamic #synthetic) → void
-  let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.\nset c(x, y);\n     ^"));
+  let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.\nset c(x, y);\n     ^"));
 static method main() → dynamic {
   core::bool threw;
   try {
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 be9b1dc..679d2ad 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
@@ -4,7 +4,7 @@
 
 main.dart.patch: |
   // 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/program_gc_with_processes.incremental.yaml b/pkg/front_end/testcases/dartino/program_gc_with_processes.incremental.yaml
deleted file mode 100644
index 4793ec0..0000000
--- a/pkg/front_end/testcases/dartino/program_gc_with_processes.incremental.yaml
+++ /dev/null
@@ -1,53 +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.md file.
-
-main.dart.patch: |
-  // Test that we can do a program rewrite (which implies a big GC) while there
-  // are multiple processes alive that depend on the program.
-  import 'dart:dartino';
-
-  class Comms {
-  <<<< "comms is null"
-  ==== "Hello world"
-    int late_arrival;
-  >>>>
-    var paused;
-    var pausedPort;
-    var resumePort;
-    Process process;
-  }
-
-  Comms comms;
-
-  void SubProcess(Port pausedPort) {
-    // This function, used by the spawned processes, does not exist after the
-    // rewrite, but it will be on the stack, so it is kept alive across the GC.
-    var c = new Channel();
-    pausedPort.send(new Port(c));
-    c.receive();
-    print("Hello world");
-  }
-
-  main() {
-    if (comms == null) {
-      print("comms is null");
-      // The setup takes place before the rewrite.
-      comms = new Comms();
-
-      comms.paused = new Channel();
-      var pausedPort = comms.pausedPort = new Port(comms.paused);
-
-      comms.process = Process.spawnDetached(() => SubProcess(pausedPort));
-    } else {
-      // After the rewrite we get the port from the sub-process and send the
-      // data it needs to resume running.
-      comms.resumePort = comms.paused.receive();
-
-      var monitor = new Channel();
-
-      comms.process.monitor(new Port(monitor));
-
-      comms.resumePort.send(null);
-    }
-  }
diff --git a/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect b/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
index bdde0f0..22a2efc 100644
--- a/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
+++ b/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
@@ -9,6 +9,6 @@
   static method m({core::int a = 0}) → dynamic {}
 }
 static method test() → void {
-  self::C::m(a: const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.\n  C.m(a: 1, a: 2, a: 3);\n                  ^")));
+  self::C::m(a: const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.\n  C.m(a: 1, a: 2, a: 3);\n                  ^")));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/dynamic_and_void.dart b/pkg/front_end/testcases/dynamic_and_void.dart
new file mode 100644
index 0000000..21800bd
--- /dev/null
+++ b/pkg/front_end/testcases/dynamic_and_void.dart
@@ -0,0 +1,15 @@
+// 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.
+
+/*@testedFeatures=warning*/
+
+// dynamic is treated as a name exported by dart:core.  void is not treated as a
+// name exported by dart:core.
+
+import 'dart:core' show int;
+
+/*@warning=TypeNotFound*/ dynamic testDynamic() => 0;
+void testVoid() {}
+
+main() {}
diff --git a/pkg/front_end/testcases/dynamic_and_void.dart.direct.expect b/pkg/front_end/testcases/dynamic_and_void.dart.direct.expect
new file mode 100644
index 0000000..4b7b5f6
--- /dev/null
+++ b/pkg/front_end/testcases/dynamic_and_void.dart.direct.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+
+static method testDynamic() → invalid-type
+  return 0;
+static method testVoid() → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/dynamic_and_void.dart.outline.expect b/pkg/front_end/testcases/dynamic_and_void.dart.outline.expect
new file mode 100644
index 0000000..61f4199
--- /dev/null
+++ b/pkg/front_end/testcases/dynamic_and_void.dart.outline.expect
@@ -0,0 +1,9 @@
+library;
+import self as self;
+
+static method testDynamic() → invalid-type
+  ;
+static method testVoid() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/dynamic_and_void.dart.strong.expect b/pkg/front_end/testcases/dynamic_and_void.dart.strong.expect
new file mode 100644
index 0000000..a38f5f7
--- /dev/null
+++ b/pkg/front_end/testcases/dynamic_and_void.dart.strong.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method testDynamic() → invalid-type
+  return let final dynamic #t1 = 0 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/dynamic_and_void.dart:12:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'invalid-type'.\nTry changing the type of the left hand side, or casting the right hand side to 'invalid-type'.\n/*@warning=TypeNotFound*/ dynamic testDynamic() => 0;\n                                                   ^"));
+static method testVoid() → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/fallthrough.dart.direct.expect b/pkg/front_end/testcases/fallthrough.dart.direct.expect
index e4d5493..bab6a77 100644
--- a/pkg/front_end/testcases/fallthrough.dart.direct.expect
+++ b/pkg/front_end/testcases/fallthrough.dart.direct.expect
@@ -10,7 +10,7 @@
     case 3:
       {
         x = 4;
-        throw new core::FallThroughError::_create("pkg/front_end/testcases/fallthrough.dart", 4);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 8);
       }
     #L3:
     case 5:
@@ -27,7 +27,7 @@
         else {
           return;
         }
-        throw new core::FallThroughError::_create("pkg/front_end/testcases/fallthrough.dart", 8);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 12);
       }
     #L5:
     case 4:
diff --git a/pkg/front_end/testcases/incremental.status b/pkg/front_end/testcases/incremental.status
new file mode 100644
index 0000000..d5feffe
--- /dev/null
+++ b/pkg/front_end/testcases/incremental.status
@@ -0,0 +1,5 @@
+# Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Status file for the test suite ../test/fasta/incremental_test.dart.
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.direct.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.direct.expect
index 37c1eed..602da12 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.direct.expect
@@ -4,14 +4,10 @@
 
 class C extends core::Object {
   constructor expressionOnly() → void
-    : final dynamic #t1 = (() → dynamic
-      assert(self::f<dynamic>());
-).call(), super core::Object::•()
+    : assert(self::f<dynamic>()), super core::Object::•()
     ;
   constructor expressionAndMessage() → void
-    : final dynamic #t2 = (() → dynamic
-      assert(self::f<dynamic>(), self::f<dynamic>());
-).call(), super core::Object::•()
+    : assert(self::f<dynamic>(), self::f<dynamic>()), super core::Object::•()
     ;
 }
 static method f<T extends core::Object>() → self::f::T
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.strong.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.strong.expect
index ecd205d..27f0c32 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.strong.expect
@@ -4,14 +4,10 @@
 
 class C extends core::Object {
   constructor expressionOnly() → void
-    : final dynamic #t1 = (() → dynamic
-      assert(self::f<core::bool>());
-).call(), super core::Object::•()
+    : assert(self::f<core::bool>()), super core::Object::•()
     ;
   constructor expressionAndMessage() → void
-    : final dynamic #t2 = (() → dynamic
-      assert(self::f<core::bool>(), self::f<dynamic>());
-).call(), super core::Object::•()
+    : assert(self::f<core::bool>(), self::f<dynamic>()), super core::Object::•()
     ;
 }
 static method f<T extends core::Object>() → self::f::T
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
index f922aab..bd755de 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
@@ -7,6 +7,6 @@
     return null;
   () → core::String g = f;
   g = () → core::String {
-    return 1;
+    return let final dynamic #t1 = 1 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n    return /*error:RETURN_OF_INVALID_TYPE*/ 1;\n                                            ^"));
   };
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
index 39c24bb..3d8d593 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
@@ -15,6 +15,6 @@
   self::C<core::num> c_num = new self::C::•<core::num>(123);
   self::C<core::num> c_num2 = let final self::C<core::num> #t1 = new self::C::•<core::num>(456) in let final dynamic #t2 = #t1.{self::C::t} = 1.0 in #t1;
   self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
-  x.{self::C::t} = "hello" as{TypeError} core::int;
+  x.{self::C::t} = let final dynamic #t3 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';\n                                                       ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
index b584c10..e4c1a19 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
@@ -15,6 +15,6 @@
 }
 static method test() → dynamic {
   self::C<core::int> x = self::C::•<core::int>(42);
-  x.{self::C::t} = "hello" as{TypeError} core::int;
+  x.{self::C::t} = let final dynamic #t1 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';\n                                                       ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
index a35ec88..343375c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static method test() → void {
   core::List<core::int> l;
-  l = <core::int>["hello" as{TypeError} core::int];
+  l = <core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];\n                                                                    ^"))];
   l = l = <core::int>[1];
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart
index 68c6a63..605c8f09 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart
@@ -16,16 +16,16 @@
 Future f() async {
   dynamic d;
   Object o;
-  for (var /*@type=dynamic*/ x in /*@typeArgs=dynamic*/ F()) {}
+  for (var /*@type=dynamic*/ x in /*@typeArgs=Iterable<dynamic>*/ F()) {}
   for (dynamic x in /*@typeArgs=Iterable<dynamic>*/ F()) {}
   for (Object x in /*@typeArgs=Iterable<Object>*/ F()) {}
-  for (d in /*@typeArgs=dynamic*/ F()) {}
-  for (o in /*@typeArgs=dynamic*/ F()) {}
-  await for (var /*@type=dynamic*/ x in /*@typeArgs=dynamic*/ F()) {}
+  for (d in /*@typeArgs=Iterable<dynamic>*/ F()) {}
+  for (o in /*@typeArgs=Iterable<Object>*/ F()) {}
+  await for (var /*@type=dynamic*/ x in /*@typeArgs=Stream<dynamic>*/ F()) {}
   await for (dynamic x in /*@typeArgs=Stream<dynamic>*/ F()) {}
   await for (Object x in /*@typeArgs=Stream<Object>*/ F()) {}
-  await for (d in /*@typeArgs=dynamic*/ F()) {}
-  await for (o in /*@typeArgs=dynamic*/ F()) {}
+  await for (d in /*@typeArgs=Stream<dynamic>*/ F()) {}
+  await for (o in /*@typeArgs=Stream<Object>*/ F()) {}
 }
 
 Future main() async {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.expect
index 901636c..86b9f5d 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.expect
@@ -12,28 +12,28 @@
 static method f() → asy::Future<dynamic> async {
   dynamic d;
   core::Object o;
-  for (dynamic x in self::F<dynamic>()) {
+  for (dynamic x in self::F<core::Iterable<dynamic>>()) {
   }
   for (dynamic x in self::F<core::Iterable<dynamic>>()) {
   }
   for (core::Object x in self::F<core::Iterable<core::Object>>()) {
   }
-  for (final dynamic #t1 in self::F<dynamic>()) {
+  for (final dynamic #t1 in self::F<core::Iterable<dynamic>>()) {
     d = #t1;
   }
-  for (final dynamic #t2 in self::F<dynamic>()) {
+  for (final core::Object #t2 in self::F<core::Iterable<core::Object>>()) {
     o = #t2;
   }
-  await for (dynamic x in self::F<dynamic>()) {
+  await for (dynamic x in self::F<asy::Stream<dynamic>>()) {
   }
   await for (dynamic x in self::F<asy::Stream<dynamic>>()) {
   }
   await for (core::Object x in self::F<asy::Stream<core::Object>>()) {
   }
-  await for (final dynamic #t3 in self::F<dynamic>()) {
+  await for (final dynamic #t3 in self::F<asy::Stream<dynamic>>()) {
     d = #t3;
   }
-  await for (final dynamic #t4 in self::F<dynamic>()) {
+  await for (final core::Object #t4 in self::F<asy::Stream<core::Object>>()) {
     o = #t4;
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
index 424247d..3854430 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
@@ -25,23 +25,23 @@
 static method test() → void {
   new self::F0::•(<core::int>[]);
   new self::F0::•(<core::int>[3]);
-  new self::F0::•(<core::int>["hello" as{TypeError} core::int]);
-  new self::F0::•(<core::int>["hello" as{TypeError} core::int, 3]);
+  new self::F0::•(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                    ^"))]);
+  new self::F0::•(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^")), 3]);
   new self::F1::•(a: <core::int>[]);
   new self::F1::•(a: <core::int>[3]);
-  new self::F1::•(a: <core::int>["hello" as{TypeError} core::int]);
-  new self::F1::•(a: <core::int>["hello" as{TypeError} core::int, 3]);
+  new self::F1::•(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                               ^"))]);
+  new self::F1::•(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^")), 3]);
   new self::F2::•(<core::int>[]);
   new self::F2::•(<core::int>[3]);
-  new self::F2::•(<core::int>["hello" as{TypeError} core::int]);
-  new self::F2::•(<core::int>["hello" as{TypeError} core::int, 3]);
+  new self::F2::•(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                    ^"))]);
+  new self::F2::•(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^")), 3]);
   new self::F3::•(<core::Iterable<core::int>>[]);
   new self::F3::•(<core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F3::•(<core::Iterable<core::int>>[<core::int>["hello" as{TypeError} core::int]]);
-  new self::F3::•(<core::Iterable<core::int>>[<core::int>["hello" as{TypeError} core::int], <core::int>[3]]);
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n                                                                  ^"))]]);
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n                                                                  ^"))], <core::int>[3]]);
   new self::F4::•(a: <core::Iterable<core::int>>[]);
   new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>["hello" as{TypeError} core::int]]);
-  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>["hello" as{TypeError} core::int], <core::int>[3]]);
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n                                                                  ^"))]]);
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n                                                                  ^"))], <core::int>[3]]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
index 3ea14ee..e9a6131 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
@@ -10,23 +10,23 @@
 static method test() → void {
   self::f0(<core::int>[]);
   self::f0(<core::int>[3]);
-  self::f0(<core::int>["hello" as{TypeError} core::int]);
-  self::f0(<core::int>["hello" as{TypeError} core::int, 3]);
+  self::f0(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                   ^"))]);
+  self::f0(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);\n                                                                   ^")), 3]);
   self::f1(a: <core::int>[]);
   self::f1(a: <core::int>[3]);
-  self::f1(a: <core::int>["hello" as{TypeError} core::int]);
-  self::f1(a: <core::int>["hello" as{TypeError} core::int, 3]);
+  self::f1(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                      ^"))]);
+  self::f1(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^")), 3]);
   self::f2(<core::int>[]);
   self::f2(<core::int>[3]);
-  self::f2(<core::int>["hello" as{TypeError} core::int]);
-  self::f2(<core::int>["hello" as{TypeError} core::int, 3]);
+  self::f2(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                   ^"))]);
+  self::f2(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);\n                                                                   ^")), 3]);
   self::f3(<core::Iterable<core::int>>[]);
   self::f3(<core::Iterable<core::int>>[<core::int>[3]]);
-  self::f3(<core::Iterable<core::int>>[<core::int>["hello" as{TypeError} core::int]]);
-  self::f3(<core::Iterable<core::int>>[<core::int>["hello" as{TypeError} core::int], <core::int>[3]]);
+  self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n                                                                  ^"))]]);
+  self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n                                                                  ^"))], <core::int>[3]]);
   self::f4(a: <core::Iterable<core::int>>[]);
   self::f4(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  self::f4(a: <core::Iterable<core::int>>[<core::int>["hello" as{TypeError} core::int]]);
-  self::f4(a: <core::Iterable<core::int>>[<core::int>["hello" as{TypeError} core::int], <core::int>[3]]);
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n                                                                  ^"))]]);
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n                                                                  ^"))], <core::int>[3]]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
index aa4e184..a30965f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
@@ -7,36 +7,36 @@
   {
     (core::int) → core::String l0 = (core::int x) → core::String => null;
     (core::int) → core::String l1 = (core::int x) → core::String => "hello";
-    (core::int) → core::String l2 = ((core::String x) → core::String => "hello") as{TypeError} (core::int) → core::String;
-    (core::int) → core::String l3 = ((core::int x) → core::int => 3) as{TypeError} (core::int) → core::String;
+    (core::int) → core::String l2 = let final dynamic #t1 = (core::String x) → core::String => "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::String'.\n        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>\n                                                                 ^"));
+    (core::int) → core::String l3 = let final dynamic #t2 = (core::int x) → core::int => 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:63: Error: A value of type '(dart.core::int) \u8594 dart.core::int' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::String'.\n        l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=int*/ (int x) => 3;\n                                                              ^"));
     (core::int) → core::String l4 = (core::int x) → core::String {
-      return 3;
+      return let final dynamic #t3 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      return /*error:RETURN_OF_INVALID_TYPE*/ 3;\n                                              ^"));
     };
   }
   {
     (core::int) → core::String l0 = (core::int x) → core::String => null;
     (core::int) → core::String l1 = (core::int x) → core::String => "hello";
-    (core::int) → core::String l2 = ((core::int x) → core::int => 3) as{TypeError} (core::int) → core::String;
+    (core::int) → core::String l2 = let final dynamic #t4 = (core::int x) → core::int => 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:91: Error: A value of type '(dart.core::int) \u8594 dart.core::int' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::String'.\n        l2 = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/ /*@returnType=int*/ (/*@type=int*/ x) =>\n                                                                                          ^"));
     (core::int) → core::String l3 = (core::int x) → core::String {
-      return 3;
+      return let final dynamic #t5 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:32:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      return /*error:RETURN_OF_INVALID_TYPE*/ 3;\n                                              ^"));
     };
     (core::int) → core::String l4 = (core::int x) → core::String {
-      return x;
+      return let final dynamic #t6 = x in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:35:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      return /*error:RETURN_OF_INVALID_TYPE*/ x;\n                                              ^"));
     };
   }
   {
     (core::int) → core::List<core::String> l0 = (core::int x) → core::List<core::String> => null;
     (core::int) → core::List<core::String> l1 = (core::int x) → core::List<core::String> => <core::String>["hello"];
-    (core::int) → core::List<core::String> l2 = ((core::String x) → core::List<core::String> => <core::String>["hello"]) as{TypeError} (core::int) → core::List<core::String>;
-    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[3 as{TypeError} core::String];
+    (core::int) → core::List<core::String> l2 = let final dynamic #t7 = (core::String x) → core::List<core::String> => <core::String>["hello"] in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:44:72: Error: A value of type '(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.\n        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String\n                                                                       ^"));
+    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[let final dynamic #t8 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:48:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n              /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n                                                         ^"))];
     (core::int) → core::List<core::String> l4 = (core::int x) → core::List<core::String> {
-      return <core::String>[3 as{TypeError} core::String];
+      return <core::String>[let final dynamic #t9 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:52:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n                                                   ^"))];
     };
   }
   {
     (core::int) → core::int l0 = (core::int x) → core::int => x;
     (core::int) → core::int l1 = (core::int x) → core::int => x.{core::num::+}(1);
-    (core::int) → core::String l2 = ((core::int x) → core::int => x) as{TypeError} (core::int) → core::String;
+    (core::int) → core::String l2 = let final dynamic #t10 = (core::int x) → core::int => x in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:61:63: Error: A value of type '(dart.core::int) \u8594 dart.core::int' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::String'.\n        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=int*/ (/*@type=int*/ x) =>\n                                                              ^"));
     (core::int) → core::String l3 = (core::int x) → core::String => x.substring(3);
     (core::String) → core::String l4 = (core::String x) → core::String => x.{core::String::substring}(3);
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
index e89db6e..7a2b86c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
@@ -25,24 +25,24 @@
 static method test() → void {
   new self::F0::•<core::int>(<core::int>[]);
   new self::F0::•<core::int>(<core::int>[3]);
-  new self::F0::•<core::int>(<core::int>["hello" as{TypeError} core::int]);
-  new self::F0::•<core::int>(<core::int>["hello" as{TypeError} core::int, 3]);
+  new self::F0::•<core::int>(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                    ^"))]);
+  new self::F0::•<core::int>(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^")), 3]);
   new self::F1::•<core::int>(a: <core::int>[]);
   new self::F1::•<core::int>(a: <core::int>[3]);
-  new self::F1::•<core::int>(a: <core::int>["hello" as{TypeError} core::int]);
-  new self::F1::•<core::int>(a: <core::int>["hello" as{TypeError} core::int, 3]);
+  new self::F1::•<core::int>(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                               ^"))]);
+  new self::F1::•<core::int>(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^")), 3]);
   new self::F2::•<core::int>(<core::int>[]);
   new self::F2::•<core::int>(<core::int>[3]);
-  new self::F2::•<core::int>(<core::int>["hello" as{TypeError} core::int]);
-  new self::F2::•<core::int>(<core::int>["hello" as{TypeError} core::int, 3]);
+  new self::F2::•<core::int>(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                    ^"))]);
+  new self::F2::•<core::int>(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^")), 3]);
   new self::F3::•<core::int>(<core::Iterable<core::int>>[]);
   new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>["hello" as{TypeError} core::int]]);
-  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>["hello" as{TypeError} core::int], <core::int>[3]]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n                                                                  ^"))]]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n                                                                  ^"))], <core::int>[3]]);
   new self::F4::•<core::int>(a: <core::Iterable<core::int>>[]);
   new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>["hello" as{TypeError} core::int]]);
-  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>["hello" as{TypeError} core::int], <core::int>[3]]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n                                                                  ^"))]]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n                                                                  ^"))], <core::int>[3]]);
   new self::F3::•<dynamic>(<core::Iterable<dynamic>>[]);
   self::F3<core::int> f31 = new self::F3::•<core::int>(<core::List<core::int>>[<core::int>[3]]);
   self::F3<core::String> f32 = new self::F3::•<core::String>(<core::List<core::String>>[<core::String>["hello"]]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
index 333bc47..feeb43f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
@@ -9,10 +9,10 @@
     <S extends core::Object>(core::int) → core::String v = f;
     v = <T extends core::Object>(core::int x) → core::String => null;
     v = <T extends core::Object>(core::int x) → core::String => "hello";
-    v = (<T extends core::Object>(core::String x) → core::String => "hello") as{TypeError} <S extends core::Object>(core::int) → core::String;
-    v = (<T extends core::Object>(core::int x) → core::int => 3) as{TypeError} <S extends core::Object>(core::int) → core::String;
+    v = let final dynamic #t1 = <T extends core::Object>(core::String x) → core::String => "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.\n    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>\n                                                                ^"));
+    v = let final dynamic #t2 = <T extends core::Object>(core::int x) → core::int => 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:62: Error: A value of type '<T extends dart.core::Object>(dart.core::int) \u8594 dart.core::int' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.\n    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=int*/ (int x) => 3;\n                                                             ^"));
     v = <T extends core::Object>(core::int x) → core::String {
-      return 3;
+      return let final dynamic #t3 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      return /*error:RETURN_OF_INVALID_TYPE*/ 3;\n                                              ^"));
     };
   }
   {
@@ -21,12 +21,12 @@
     <S extends core::Object>(core::int) → core::String v = f;
     v = <T extends core::Object>(core::int x) → core::String => null;
     v = <T extends core::Object>(core::int x) → core::String => "hello";
-    v = (<T extends core::Object>(core::int x) → core::int => 3) as{TypeError} <S extends core::Object>(core::int) → core::String;
+    v = let final dynamic #t4 = <T extends core::Object>(core::int x) → core::int => 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:27:36: Error: A value of type '<T extends dart.core::Object>(dart.core::int) \u8594 dart.core::int' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.\n            T> /*@returnType=int*/ (/*@type=int*/ x) =>\n                                   ^"));
     v = <T extends core::Object>(core::int x) → core::String {
-      return 3;
+      return let final dynamic #t5 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      return /*error:RETURN_OF_INVALID_TYPE*/ 3;\n                                              ^"));
     };
     v = <T extends core::Object>(core::int x) → core::String {
-      return x;
+      return let final dynamic #t6 = x in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      return /*error:RETURN_OF_INVALID_TYPE*/ x;\n                                              ^"));
     };
   }
   {
@@ -35,10 +35,10 @@
     <S extends core::Object>(core::int) → core::List<core::String> v = f;
     v = <T extends core::Object>(core::int x) → core::List<core::String> => null;
     v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>["hello"];
-    v = (<T extends core::Object>(core::String x) → core::List<core::String> => <core::String>["hello"]) as{TypeError} <S extends core::Object>(core::int) → core::List<core::String>;
-    v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>[3 as{TypeError} core::String];
+    v = let final dynamic #t7 = <T extends core::Object>(core::String x) → core::List<core::String> => <core::String>["hello"] in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.\n    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String\n                                                                      ^"));
+    v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>[let final dynamic #t8 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n          /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n                                                     ^"))];
     v = <T extends core::Object>(core::int x) → core::List<core::String> {
-      return <core::String>[3 as{TypeError} core::String];
+      return <core::String>[let final dynamic #t9 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n                                                   ^"))];
     };
   }
   {
@@ -52,7 +52,7 @@
     x = <T extends core::Object>(core::int x) → core::int => x;
     x = <T extends core::Object>(core::int x) → core::int => x.{core::num::+}(1);
     <T extends core::Object>(core::int) → core::String y = int2String;
-    y = (<T extends core::Object>(core::int x) → core::int => x) as{TypeError} <T extends core::Object>(core::int) → core::String;
+    y = let final dynamic #t10 = <T extends core::Object>(core::int x) → core::int => x in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:63:36: Error: A value of type '<T extends dart.core::Object>(dart.core::int) \u8594 dart.core::int' can't be assigned to a variable of type '<T extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to '<T extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.\n            T> /*@returnType=int*/ (/*@type=int*/ x) =>\n                                   ^"));
     y = <T extends core::Object>(core::int x) → core::String => x.substring(3);
     <T extends core::Object>(core::String) → core::String z = string2String;
     z = <T extends core::Object>(core::String x) → core::String => x.{core::String::substring}(3);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
index 2c24c39..018f066 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
@@ -60,55 +60,55 @@
     self::A<core::int, core::String> a5 = new self::A::named<dynamic, dynamic>(3, "hello") as{TypeError} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>("hello" as{TypeError} core::int, 3 as{TypeError} core::String);
-    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>("hello" as{TypeError} core::int, 3 as{TypeError} core::String);
+    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(let final dynamic #t1 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^")), let final dynamic #t2 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n                                               ^")));
+    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(let final dynamic #t3 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^")), let final dynamic #t4 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n                                               ^")));
   }
   {
     self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a2 = new self::B::•<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a3 = new self::B::named<core::String, core::int>("hello", 3);
-    self::A<core::int, core::String> a4 = new self::B::•<core::String, dynamic>("hello", 3) as{TypeError} self::A<core::int, core::String>;
-    self::A<core::int, core::String> a5 = new self::B::named<dynamic, dynamic>("hello", 3) as{TypeError} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a4 = let final dynamic #t5 = new self::B::•<core::String, dynamic>("hello", 3) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.\n        a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);\n                                              ^"));
+    self::A<core::int, core::String> a5 = let final dynamic #t6 = new self::B::named<dynamic, dynamic>("hello", 3) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.\n        a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(\n                                              ^"));
   }
   {
-    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(3 as{TypeError} core::String, "hello" as{TypeError} core::int);
-    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(3 as{TypeError} core::String, "hello" as{TypeError} core::int);
+    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(let final dynamic #t7 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,\n                                               ^")), let final dynamic #t8 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n                                               ^")));
+    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(let final dynamic #t9 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,\n                                               ^")), let final dynamic #t10 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n                                               ^")));
   }
   {
     self::A<core::int, core::int> a0 = new self::C::•<core::int>(3);
     self::A<core::int, core::int> a1 = new self::C::named<core::int>(3);
     self::A<core::int, core::int> a2 = new self::C::•<core::int>(3);
     self::A<core::int, core::int> a3 = new self::C::named<core::int>(3);
-    self::A<core::int, core::int> a4 = new self::C::•<dynamic>(3) as{TypeError} self::A<core::int, core::int>;
-    self::A<core::int, core::int> a5 = new self::C::named<dynamic>(3) as{TypeError} self::A<core::int, core::int>;
+    self::A<core::int, core::int> a4 = let final dynamic #t11 = new self::C::•<dynamic>(3) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.\n    A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);\n                                                      ^"));
+    self::A<core::int, core::int> a5 = let final dynamic #t12 = new self::C::named<dynamic>(3) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.\n    A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);\n                                                      ^"));
   }
   {
-    self::A<core::int, core::int> a0 = new self::C::•<core::int>("hello" as{TypeError} core::int);
-    self::A<core::int, core::int> a1 = new self::C::named<core::int>("hello" as{TypeError} core::int);
+    self::A<core::int, core::int> a0 = new self::C::•<core::int>(let final dynamic #t13 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n                                               ^")));
+    self::A<core::int, core::int> a1 = new self::C::named<core::int>(let final dynamic #t14 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n                                               ^")));
   }
   {
     self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>("hello");
     self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>("hello");
     self::A<core::int, core::String> a2 = new self::D::•<core::int, core::String>("hello");
     self::A<core::int, core::String> a3 = new self::D::named<core::String, core::String>("hello");
-    self::A<core::int, core::String> a4 = new self::D::•<core::num, dynamic>("hello") as{TypeError} self::A<core::int, core::String>;
-    self::A<core::int, core::String> a5 = new self::D::named<dynamic, dynamic>("hello") as{TypeError} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a4 = let final dynamic #t15 = new self::D::•<core::num, dynamic>("hello") in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.\n        a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");\n                                              ^"));
+    self::A<core::int, core::String> a5 = let final dynamic #t16 = new self::D::named<dynamic, dynamic>("hello") in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.\n        a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(\n                                              ^"));
   }
   {
-    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(3 as{TypeError} core::String);
-    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(3 as{TypeError} core::String);
+    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(let final dynamic #t17 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n                                               ^")));
+    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(let final dynamic #t18 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n                                               ^")));
   }
   {
     self::A<self::C<core::int>, core::String> a0 = new self::E::•<core::int, core::String>("hello");
   }
   {
     self::A<core::int, core::String> a0 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[3], b: <core::String>["hello"]);
-    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>["hello" as{TypeError} core::int], b: <core::String>[3 as{TypeError} core::String]);
+    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[let final dynamic #t19 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n          /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                                     ^"))], b: <core::String>[let final dynamic #t20 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n          /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n                                                     ^"))]);
     self::A<core::int, core::String> a2 = new self::F::named<core::int, core::String>(3, "hello", 3, "hello");
     self::A<core::int, core::String> a3 = new self::F::named<core::int, core::String>(3, "hello");
-    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", "hello" as{TypeError} core::int, 3 as{TypeError} core::String);
-    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", "hello" as{TypeError} core::int);
+    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t21 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^")), let final dynamic #t22 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n                                               ^")));
+    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t23 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n                                               ^")));
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
index 06cc24f..e50be8b 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[42 as{TypeError} core::String]]) → void {}
+static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[let final dynamic #t1 = 42 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42\n                                                                                        ^"))]]) → void {}
 static method main() → void {
   {
     core::List<core::int> l0 = <core::int>[];
     core::List<core::int> l1 = <core::int>[3];
-    core::List<core::int> l2 = <core::int>["hello" as{TypeError} core::int];
-    core::List<core::int> l3 = <core::int>["hello" as{TypeError} core::int, 3];
+    core::List<core::int> l2 = <core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                                 ^"))];
+    core::List<core::int> l3 = <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                                 ^")), 3];
   }
   {
     core::List<dynamic> l0 = <dynamic>[];
@@ -19,19 +19,19 @@
   {
     core::List<core::int> l0 = <core::num>[] as{TypeError} core::List<core::int>;
     core::List<core::int> l1 = <core::num>[3] as{TypeError} core::List<core::int>;
-    core::List<core::int> l2 = <core::num>["hello" as{TypeError} core::num] as{TypeError} core::List<core::int>;
-    core::List<core::int> l3 = <core::num>["hello" as{TypeError} core::num, 3] as{TypeError} core::List<core::int>;
+    core::List<core::int> l2 = <core::num>[let final dynamic #t4 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                                 ^"))] as{TypeError} core::List<core::int>;
+    core::List<core::int> l3 = <core::num>[let final dynamic #t5 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                                 ^")), 3] as{TypeError} core::List<core::int>;
   }
   {
     core::Iterable<core::int> i0 = <core::int>[];
     core::Iterable<core::int> i1 = <core::int>[3];
-    core::Iterable<core::int> i2 = <core::int>["hello" as{TypeError} core::int];
-    core::Iterable<core::int> i3 = <core::int>["hello" as{TypeError} core::int, 3];
+    core::Iterable<core::int> i2 = <core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                                 ^"))];
+    core::Iterable<core::int> i3 = <core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                                 ^")), 3];
   }
   {
     const core::List<core::int> c0 = const <core::int>[];
     const core::List<core::int> c1 = const <core::int>[3];
-    const core::List<core::int> c2 = const <core::int>["hello" as{TypeError} core::int];
-    const core::List<core::int> c3 = const <core::int>["hello" as{TypeError} core::int, 3];
+    const core::List<core::int> c2 = const <core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                                                                        ^"))];
+    const core::List<core::int> c3 = const <core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                                                                        ^")), 3];
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
index 97f6fe2..d7c8d42 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
@@ -2,14 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{"hello" as{TypeError} core::int: "world"}]) → void {}
+static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{let final dynamic #t1 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":\n                                                                              ^")): "world"}]) → void {}
 static method test() → void {
   {
     core::Map<core::int, core::String> l0 = <core::int, core::String>{};
     core::Map<core::int, core::String> l1 = <core::int, core::String>{3: "hello"};
-    core::Map<core::int, core::String> l2 = <core::int, core::String>{"hello" as{TypeError} core::int: "hello"};
-    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: 3 as{TypeError} core::String};
-    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", "hello" as{TypeError} core::int: 3 as{TypeError} core::String};
+    core::Map<core::int, core::String> l2 = <core::int, core::String>{let final dynamic #t2 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"\n                                            ^")): "hello"};
+    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: let final dynamic #t3 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n                                                 ^"))};
+    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", let final dynamic #t4 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":\n                                            ^")): let final dynamic #t5 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n                                                  ^"))};
   }
   {
     core::Map<dynamic, dynamic> l0 = <dynamic, dynamic>{};
@@ -22,15 +22,15 @@
     core::Map<dynamic, core::String> l0 = <dynamic, core::String>{};
     core::Map<dynamic, core::String> l1 = <dynamic, core::String>{3: "hello"};
     core::Map<dynamic, core::String> l2 = <dynamic, core::String>{"hello": "hello"};
-    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: 3 as{TypeError} core::String};
-    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": 3 as{TypeError} core::String};
+    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: let final dynamic #t6 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n                                                 ^"))};
+    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": let final dynamic #t7 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n                                                       ^"))};
   }
   {
     core::Map<core::int, dynamic> l0 = <core::int, dynamic>{};
     core::Map<core::int, dynamic> l1 = <core::int, dynamic>{3: "hello"};
-    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{"hello" as{TypeError} core::int: "hello"};
+    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{let final dynamic #t8 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"\n                                            ^")): "hello"};
     core::Map<core::int, dynamic> l3 = <core::int, dynamic>{3: 3};
-    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", "hello" as{TypeError} core::int: 3};
+    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", let final dynamic #t9 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3\n                                            ^")): 3};
   }
   {
     core::Map<core::int, core::String> l0 = <core::num, dynamic>{} as{TypeError} core::Map<core::int, core::String>;
@@ -40,9 +40,9 @@
   {
     const core::Map<core::int, core::String> l0 = const <core::int, core::String>{};
     const core::Map<core::int, core::String> l1 = const <core::int, core::String>{3: "hello"};
-    const core::Map<core::int, core::String> l2 = const <core::int, core::String>{"hello" as{TypeError} core::int: "hello"};
-    const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: 3 as{TypeError} core::String};
-    const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", "hello" as{TypeError} core::int: 3 as{TypeError} core::String};
+    const core::Map<core::int, core::String> l2 = const <core::int, core::String>{let final dynamic #t10 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":\n                                                                              ^")): "hello"};
+    const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: let final dynamic #t11 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n                                                                                     ^"))};
+    const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", let final dynamic #t12 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":\n                                                                              ^")): let final dynamic #t13 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n                                                                                      ^"))};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
index e95f529..544e036 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
@@ -9,14 +9,14 @@
 }
 static method foo() → asy::Stream<core::List<core::int>> async* {
   yield<core::int>[];
-  yield self::MyStream::•<dynamic>() as{TypeError} core::List<core::int>;
-  yield*<dynamic>[] as{TypeError} asy::Stream<core::List<core::int>>;
+  yield let final dynamic #t1 = self::MyStream::•<dynamic>() in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:67: Error: A value of type 'test::MyStream<dynamic>' can't be assigned to a variable of type 'dart.core::List<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dart.core::int>'.\n  yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ MyStream();\n                                                                  ^"));
+  yield* let final dynamic #t2 = <dynamic>[] in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.async::Stream<dart.core::List<dart.core::int>>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dart.core::List<dart.core::int>>'.\n  yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];\n                                                               ^"));
   yield* self::MyStream::•<core::List<core::int>>();
 }
 static method bar() → core::Iterable<core::Map<core::int, core::int>> sync* {
   yield<core::int, core::int>{};
-  yield core::List::_internal<dynamic>() as{TypeError} core::Map<core::int, core::int>;
-  yield*<dynamic, dynamic>{} as{TypeError} core::Iterable<core::Map<core::int, core::int>>;
+  yield let final dynamic #t3 = core::List::_internal<dynamic>() in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:67: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.core::Map<dart.core::int, dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dart.core::int, dart.core::int>'.\n  yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ List();\n                                                                  ^"));
+  yield* let final dynamic #t4 = <dynamic, dynamic>{} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:73: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.\n  yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic, dynamic*/ {};\n                                                                        ^"));
   yield* core::List::_internal<core::Map<core::int, core::int>>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart
new file mode 100644
index 0000000..f45a674
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart
@@ -0,0 +1,17 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+test() async {
+  Object o;
+  for (var /*@type=dynamic*/ x in o) {}
+  await for (var /*@type=dynamic*/ x in o) {}
+  int y;
+  for (y in o) {}
+  await for (y in o) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.direct.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.direct.expect
new file mode 100644
index 0000000..a06d112
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.direct.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic async {
+  core::Object o;
+  for (dynamic x in o) {
+  }
+  await for (dynamic x in o) {
+  }
+  core::int y;
+  for (final dynamic #t1 in o) {
+    y = #t1;
+  }
+  await for (final dynamic #t2 in o) {
+    y = #t2;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.outline.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.outline.expect
new file mode 100644
index 0000000..8e85697
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.expect
new file mode 100644
index 0000000..3e530e3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.expect
@@ -0,0 +1,20 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static method test() → dynamic async {
+  core::Object o;
+  for (dynamic x in o as{TypeError} core::Iterable<dynamic>) {
+  }
+  await for (dynamic x in o as{TypeError} asy::Stream<dynamic>) {
+  }
+  core::int y;
+  for (final dynamic #t1 in o as{TypeError} core::Iterable<dynamic>) {
+    y = #t1 as{TypeError} core::int;
+  }
+  await for (final dynamic #t2 in o as{TypeError} asy::Stream<dynamic>) {
+    y = #t2 as{TypeError} core::int;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect
index 10d1e1c..c4ae910 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect
@@ -16,11 +16,11 @@
   self::MyFuture<core::bool> f;
   asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async => x ?{core::int} 2 : await asy::Future::value<core::int>(3));
   asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async {
-    return await x ?{core::Object} 2 : asy::Future::value<core::int>(3);
+    return (await x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError} asy::FutureOr<core::int>;
   });
   asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>(((core::bool x) → core::Object => x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError} (core::bool) → asy::FutureOr<core::int>);
   asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::FutureOr<core::int> {
-    return x ?{core::Object} 2 : asy::Future::value<core::int>(3);
+    return (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError} asy::FutureOr<core::int>;
   });
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect
index 208c5ad..e0055d5 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect
@@ -16,11 +16,11 @@
   self::MyFuture<core::bool> f;
   asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async => x ?{core::int} 2 : await new self::MyFuture::value<core::int>(3));
   asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async {
-    return await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3);
+    return (await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError} asy::FutureOr<core::int>;
   });
   asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>(((core::bool x) → core::Object => x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError} (core::bool) → asy::FutureOr<core::int>);
   asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::FutureOr<core::int> {
-    return x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3);
+    return (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError} asy::FutureOr<core::int>;
   });
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect
index f69aaf3..1fb9e8e 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect
@@ -16,11 +16,11 @@
   self::MyFuture<core::bool> f;
   self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async => x ?{core::int} 2 : await asy::Future::value<core::int>(3));
   self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async {
-    return await x ?{core::Object} 2 : asy::Future::value<core::int>(3);
+    return (await x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError} asy::FutureOr<core::int>;
   });
   self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>(((core::bool x) → core::Object => x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError} (core::bool) → asy::FutureOr<core::int>);
   self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::FutureOr<core::int> {
-    return x ?{core::Object} 2 : asy::Future::value<core::int>(3);
+    return (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError} asy::FutureOr<core::int>;
   });
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect
index 7a368ac..4eb9386 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect
@@ -16,11 +16,11 @@
   self::MyFuture<core::bool> f;
   self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async => x ?{core::int} 2 : await new self::MyFuture::value<core::int>(3));
   self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async {
-    return await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3);
+    return (await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError} asy::FutureOr<core::int>;
   });
   self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>(((core::bool x) → core::Object => x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError} (core::bool) → asy::FutureOr<core::int>);
   self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::FutureOr<core::int> {
-    return x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3);
+    return (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError} asy::FutureOr<core::int>;
   });
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect
index c0eb368..3c15bac 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect
@@ -16,11 +16,11 @@
   asy::Future<core::bool> f;
   asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async => x ?{core::int} 2 : await new self::MyFuture::value<core::int>(3));
   asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async {
-    return await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3);
+    return (await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError} asy::FutureOr<core::int>;
   });
   asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>(((core::bool x) → core::Object => x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError} (core::bool) → asy::FutureOr<core::int>);
   asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((core::bool x) → asy::FutureOr<core::int> {
-    return x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3);
+    return (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError} asy::FutureOr<core::int>;
   });
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect
index bac0c2e..0cdcb94 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect
@@ -16,11 +16,11 @@
   asy::Future<core::bool> f;
   asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async => x ?{core::int} 2 : await asy::Future::value<core::int>(3));
   asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async {
-    return await x ?{core::Object} 2 : asy::Future::value<core::int>(3);
+    return (await x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError} asy::FutureOr<core::int>;
   });
   asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>(((core::bool x) → core::Object => x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError} (core::bool) → asy::FutureOr<core::int>);
   asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((core::bool x) → asy::FutureOr<core::int> {
-    return x ?{core::Object} 2 : asy::Future::value<core::int>(3);
+    return (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError} asy::FutureOr<core::int>;
   });
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect
index fc9d61e..05c6a6b 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect
@@ -16,11 +16,11 @@
   self::MyFuture<core::int> f;
   asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::int x) → asy::Future<core::int> async => let final core::int #t1 = x in #t1.==(null) ?{core::int} await asy::Future::value<core::int>(3) : #t1);
   asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::int x) → asy::Future<core::int> async {
-    return let final core::int #t2 = await x in #t2.==(null) ?{core::Object} asy::Future::value<core::int>(3) : #t2;
+    return (let final core::int #t2 = await x in #t2.==(null) ?{core::Object} asy::Future::value<core::int>(3) : #t2) as{TypeError} asy::FutureOr<core::int>;
   });
   asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>(((core::int x) → core::Object => let final core::int #t3 = x in #t3.==(null) ?{core::Object} asy::Future::value<core::int>(3) : #t3) as{TypeError} (core::int) → asy::FutureOr<core::int>);
   asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::int x) → asy::FutureOr<core::int> {
-    return let final core::int #t4 = x in #t4.==(null) ?{core::Object} asy::Future::value<core::int>(3) : #t4;
+    return (let final core::int #t4 = x in #t4.==(null) ?{core::Object} asy::Future::value<core::int>(3) : #t4) as{TypeError} asy::FutureOr<core::int>;
   });
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
index 3cfa113..7ce4694 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
@@ -14,7 +14,7 @@
 }
 static method main() → void {
   self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
-  asy::Future<core::int> f2 = f as{TypeError} asy::Future<core::int>;
+  asy::Future<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.\n  Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;\n                                                ^"));
   asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3) as asy::Future<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
index 35b9435..feb474b 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
@@ -14,7 +14,7 @@
 }
 static method main() → void {
   self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
-  self::MyFuture<core::int> f2 = f as{TypeError} self::MyFuture<core::int>;
+  self::MyFuture<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::MyFuture<dart.core::int>'.\n  MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;\n                                                  ^"));
   self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3) as self::MyFuture<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
index d3a1a45..c50c1d6 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
@@ -14,7 +14,7 @@
 }
 static method test() → void {
   asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3);
-  asy::Future<core::int> f2 = f as{TypeError} asy::Future<core::int>;
+  asy::Future<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.\n  Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;\n                                                ^"));
   asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3) as asy::Future<core::double>;
 }
 static method foo() → asy::Future<dynamic>
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
index 4c0e6cc..6f0d786 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
@@ -13,7 +13,7 @@
     return null;
 }
 static field self::MyFuture<dynamic> f;
-static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>("hi" as{TypeError} asy::FutureOr<core::int>));
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.\n        new /*@typeArgs=int*/ Future.value('hi'));\n                                           ^"))));
 static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]);
 static method g2() → asy::Future<core::List<core::int>> async {
   return <core::int>[3];
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
index 3db23f6..65a1eb4 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
@@ -13,7 +13,7 @@
     return null;
 }
 static field asy::Future<dynamic> f;
-static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>("hi" as{TypeError} asy::FutureOr<core::int>));
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.\n        new /*@typeArgs=int*/ Future.value('hi'));\n                                           ^"))));
 static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]);
 static method g2() → asy::Future<core::List<core::int>> async {
   return <core::int>[3];
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
index 3337f56..49bf492 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
@@ -16,10 +16,10 @@
   self::printDouble(math::min<core::double>(1.0, 2.0));
   self::printInt(self::myMax(1, 2) as{TypeError} core::int);
   self::printInt(self::myMax(1, 2) as core::int);
-  self::printInt(math::max<core::int>(1, 2.0 as{TypeError} core::int));
-  self::printInt(math::min<core::int>(1, 2.0 as{TypeError} core::int));
-  self::printDouble(math::max<core::double>(1 as{TypeError} core::double, 2.0));
-  self::printDouble(math::min<core::double>(1 as{TypeError} core::double, 2.0));
-  self::printInt(math::min<core::int>("hi" as{TypeError} core::int, "there" as{TypeError} core::int));
+  self::printInt(math::max<core::int>(1, let final dynamic #t1 = 2.0 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:29:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*@typeArgs=int*/ max(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));\n                                                                      ^"))));
+  self::printInt(math::min<core::int>(1, let final dynamic #t2 = 2.0 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:31:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*@typeArgs=int*/ min(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));\n                                                                      ^"))));
+  self::printDouble(math::max<core::double>(let final dynamic #t3 = 1 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:33:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n      /*@typeArgs=double*/ max(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));\n                                                                      ^")), 2.0));
+  self::printDouble(math::min<core::double>(let final dynamic #t4 = 1 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:35:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n      /*@typeArgs=double*/ min(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));\n                                                                      ^")), 2.0));
+  self::printInt(math::min<core::int>(let final dynamic #t5 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hi\",\n                                             ^")), let final dynamic #t6 = "there" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:40:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"there\"));\n                                             ^"))));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
index e999d13..7294101 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
@@ -6,6 +6,6 @@
   return null;
 static method test() → dynamic {
   core::String x = self::f<core::String>(<core::String>["hi"]);
-  core::String y = self::f<core::String>(<core::String>[42 as{TypeError} core::String]);
+  core::String y = self::f<core::String>(<core::String>[let final dynamic #t1 = 42 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n          /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);\n                                                                           ^"))]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
index 93890aa..1f6725e 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
@@ -11,48 +11,48 @@
     return null;
 }
 static method test() → dynamic {
-  self::takeIII(math::max as{TypeError} (core::int, core::int) → core::int);
-  self::takeDDD(math::max as{TypeError} (core::double, core::double) → core::double);
-  self::takeNNN(math::max as{TypeError} (core::num, core::num) → core::num);
-  self::takeIDN(math::max as{TypeError} (core::double, core::int) → core::num);
-  self::takeDIN(math::max as{TypeError} (core::int, core::double) → core::num);
-  self::takeIIN(math::max as{TypeError} (core::int, core::int) → core::num);
-  self::takeDDN(math::max as{TypeError} (core::double, core::double) → core::num);
-  self::takeIIO(math::max as{TypeError} (core::int, core::int) → core::Object);
-  self::takeDDO(math::max as{TypeError} (core::double, core::double) → core::Object);
-  self::takeOOI(math::max as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(math::max as{TypeError} (core::double, core::int) → core::int);
-  self::takeDID(math::max as{TypeError} (core::int, core::double) → core::double);
-  self::takeOON(math::max as{TypeError} (core::Object, core::Object) → core::num);
-  self::takeOOO(math::max as{TypeError} (core::Object, core::Object) → core::num);
-  self::takeIII(math::min as{TypeError} (core::int, core::int) → core::int);
-  self::takeDDD(math::min as{TypeError} (core::double, core::double) → core::double);
-  self::takeNNN(math::min as{TypeError} (core::num, core::num) → core::num);
-  self::takeIDN(math::min as{TypeError} (core::double, core::int) → core::num);
-  self::takeDIN(math::min as{TypeError} (core::int, core::double) → core::num);
-  self::takeIIN(math::min as{TypeError} (core::int, core::int) → core::num);
-  self::takeDDN(math::min as{TypeError} (core::double, core::double) → core::num);
-  self::takeIIO(math::min as{TypeError} (core::int, core::int) → core::Object);
-  self::takeDDO(math::min as{TypeError} (core::double, core::double) → core::Object);
-  self::takeOOI(math::min as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(math::min as{TypeError} (core::double, core::int) → core::int);
-  self::takeDID(math::min as{TypeError} (core::int, core::double) → core::double);
-  self::takeOON(math::min as{TypeError} (core::Object, core::Object) → core::num);
-  self::takeOOO(math::min as{TypeError} (core::Object, core::Object) → core::num);
-  self::takeIII(new self::C::•().{self::C::m} as{TypeError} (core::int, core::int) → core::int);
-  self::takeDDD(new self::C::•().{self::C::m} as{TypeError} (core::double, core::double) → core::double);
-  self::takeNNN(new self::C::•().{self::C::m} as{TypeError} (core::num, core::num) → core::num);
-  self::takeIDN(new self::C::•().{self::C::m} as{TypeError} (core::double, core::int) → core::num);
-  self::takeDIN(new self::C::•().{self::C::m} as{TypeError} (core::int, core::double) → core::num);
-  self::takeIIN(new self::C::•().{self::C::m} as{TypeError} (core::int, core::int) → core::num);
-  self::takeDDN(new self::C::•().{self::C::m} as{TypeError} (core::double, core::double) → core::num);
-  self::takeIIO(new self::C::•().{self::C::m} as{TypeError} (core::int, core::int) → core::Object);
-  self::takeDDO(new self::C::•().{self::C::m} as{TypeError} (core::double, core::double) → core::Object);
-  self::takeOON(new self::C::•().{self::C::m} as{TypeError} (core::Object, core::Object) → core::num);
-  self::takeOOO(new self::C::•().{self::C::m} as{TypeError} (core::Object, core::Object) → core::num);
-  self::takeOOI(new self::C::•().{self::C::m} as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(new self::C::•().{self::C::m} as{TypeError} (core::double, core::int) → core::int);
-  self::takeDID(new self::C::•().{self::C::m} as{TypeError} (core::int, core::double) → core::double);
+  self::takeIII(let final dynamic #t1 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:16:16: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::int, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::int) \u8594 dart.core::int'.\n  takeIII(math.max);\n               ^")));
+  self::takeDDD(let final dynamic #t2 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:17:16: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::double, dart.core::double) \u8594 dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::double) \u8594 dart.core::double'.\n  takeDDD(math.max);\n               ^")));
+  self::takeNNN(let final dynamic #t3 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:18:16: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::num, dart.core::num) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::num, dart.core::num) \u8594 dart.core::num'.\n  takeNNN(math.max);\n               ^")));
+  self::takeIDN(let final dynamic #t4 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:19:16: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::num'.\n  takeIDN(math.max);\n               ^")));
+  self::takeDIN(let final dynamic #t5 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:20:16: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::num'.\n  takeDIN(math.max);\n               ^")));
+  self::takeIIN(let final dynamic #t6 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:21:16: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::int, dart.core::int) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::int) \u8594 dart.core::num'.\n  takeIIN(math.max);\n               ^")));
+  self::takeDDN(let final dynamic #t7 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:22:16: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::double, dart.core::double) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::double) \u8594 dart.core::num'.\n  takeDDN(math.max);\n               ^")));
+  self::takeIIO(let final dynamic #t8 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:23:16: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::int, dart.core::int) \u8594 dart.core::Object'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::int) \u8594 dart.core::Object'.\n  takeIIO(math.max);\n               ^")));
+  self::takeDDO(let final dynamic #t9 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:24:16: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::double, dart.core::double) \u8594 dart.core::Object'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::double) \u8594 dart.core::Object'.\n  takeDDO(math.max);\n               ^")));
+  self::takeOOI(let final dynamic #t10 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:26:70: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::Object, dart.core::Object) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::Object, dart.core::Object) \u8594 dart.core::int'.\n  takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);\n                                                                     ^")));
+  self::takeIDI(let final dynamic #t11 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\n      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);\n                                                                        ^")));
+  self::takeDID(let final dynamic #t12 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\n      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);\n                                                                        ^")));
+  self::takeOON(let final dynamic #t13 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:31:70: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::Object, dart.core::Object) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::Object, dart.core::Object) \u8594 dart.core::num'.\n  takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);\n                                                                     ^")));
+  self::takeOOO(let final dynamic #t14 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:32:70: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::Object, dart.core::Object) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::Object, dart.core::Object) \u8594 dart.core::num'.\n  takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);\n                                                                     ^")));
+  self::takeIII(let final dynamic #t15 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:35:11: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::int, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::int) \u8594 dart.core::int'.\n  takeIII(min);\n          ^")));
+  self::takeDDD(let final dynamic #t16 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:36:11: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::double, dart.core::double) \u8594 dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::double) \u8594 dart.core::double'.\n  takeDDD(min);\n          ^")));
+  self::takeNNN(let final dynamic #t17 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:37:11: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::num, dart.core::num) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::num, dart.core::num) \u8594 dart.core::num'.\n  takeNNN(min);\n          ^")));
+  self::takeIDN(let final dynamic #t18 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:38:11: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::num'.\n  takeIDN(min);\n          ^")));
+  self::takeDIN(let final dynamic #t19 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:39:11: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::num'.\n  takeDIN(min);\n          ^")));
+  self::takeIIN(let final dynamic #t20 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:40:11: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::int, dart.core::int) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::int) \u8594 dart.core::num'.\n  takeIIN(min);\n          ^")));
+  self::takeDDN(let final dynamic #t21 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:41:11: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::double, dart.core::double) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::double) \u8594 dart.core::num'.\n  takeDDN(min);\n          ^")));
+  self::takeIIO(let final dynamic #t22 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:42:11: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::int, dart.core::int) \u8594 dart.core::Object'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::int) \u8594 dart.core::Object'.\n  takeIIO(min);\n          ^")));
+  self::takeDDO(let final dynamic #t23 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:43:11: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::double, dart.core::double) \u8594 dart.core::Object'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::double) \u8594 dart.core::Object'.\n  takeDDO(min);\n          ^")));
+  self::takeOOI(let final dynamic #t24 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:45:65: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::Object, dart.core::Object) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::Object, dart.core::Object) \u8594 dart.core::int'.\n  takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);\n                                                                ^")));
+  self::takeIDI(let final dynamic #t25 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\n  takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);\n                                                                       ^")));
+  self::takeDID(let final dynamic #t26 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\n  takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);\n                                                                       ^")));
+  self::takeOON(let final dynamic #t27 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:48:65: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::Object, dart.core::Object) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::Object, dart.core::Object) \u8594 dart.core::num'.\n  takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);\n                                                                ^")));
+  self::takeOOO(let final dynamic #t28 = math::min in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:49:65: Error: A value of type '<T extends dart.core::num>(dart.math::min::T, dart.math::min::T) \u8594 dart.math::min::T' can't be assigned to a variable of type '(dart.core::Object, dart.core::Object) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::Object, dart.core::Object) \u8594 dart.core::num'.\n  takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);\n                                                                ^")));
+  self::takeIII(let final dynamic #t29 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:52:37: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::int, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::int) \u8594 dart.core::int'.\n  takeIII(new C(). /*@target=C::m*/ m);\n                                    ^")));
+  self::takeDDD(let final dynamic #t30 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:53:37: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::double, dart.core::double) \u8594 dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::double) \u8594 dart.core::double'.\n  takeDDD(new C(). /*@target=C::m*/ m);\n                                    ^")));
+  self::takeNNN(let final dynamic #t31 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:54:37: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::num, dart.core::num) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::num, dart.core::num) \u8594 dart.core::num'.\n  takeNNN(new C(). /*@target=C::m*/ m);\n                                    ^")));
+  self::takeIDN(let final dynamic #t32 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:55:37: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::num'.\n  takeIDN(new C(). /*@target=C::m*/ m);\n                                    ^")));
+  self::takeDIN(let final dynamic #t33 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:56:37: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::num'.\n  takeDIN(new C(). /*@target=C::m*/ m);\n                                    ^")));
+  self::takeIIN(let final dynamic #t34 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:57:37: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::int, dart.core::int) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::int) \u8594 dart.core::num'.\n  takeIIN(new C(). /*@target=C::m*/ m);\n                                    ^")));
+  self::takeDDN(let final dynamic #t35 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:58:37: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::double, dart.core::double) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::double) \u8594 dart.core::num'.\n  takeDDN(new C(). /*@target=C::m*/ m);\n                                    ^")));
+  self::takeIIO(let final dynamic #t36 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:59:37: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::int, dart.core::int) \u8594 dart.core::Object'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::int) \u8594 dart.core::Object'.\n  takeIIO(new C(). /*@target=C::m*/ m);\n                                    ^")));
+  self::takeDDO(let final dynamic #t37 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:60:37: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::double, dart.core::double) \u8594 dart.core::Object'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::double) \u8594 dart.core::Object'.\n  takeDDO(new C(). /*@target=C::m*/ m);\n                                    ^")));
+  self::takeOON(let final dynamic #t38 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:73:26: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::Object, dart.core::Object) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::Object, dart.core::Object) \u8594 dart.core::num'.\n      . /*@target=C::m*/ m);\n                         ^")));
+  self::takeOOO(let final dynamic #t39 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:75:26: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::Object, dart.core::Object) \u8594 dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::Object, dart.core::Object) \u8594 dart.core::num'.\n      . /*@target=C::m*/ m);\n                         ^")));
+  self::takeOOI(let final dynamic #t40 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:82:26: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::Object, dart.core::Object) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::Object, dart.core::Object) \u8594 dart.core::int'.\n      . /*@target=C::m*/ m);\n                         ^")));
+  self::takeIDI(let final dynamic #t41 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\n          . /*@target=C::m*/ m);\n                             ^")));
+  self::takeDID(let final dynamic #t42 = new self::C::•().{self::C::m} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: A value of type '<T extends dart.core::num>(test::C::m::T, test::C::m::T) \u8594 test::C::m::T' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\n          . /*@target=C::m*/ m);\n                             ^")));
 }
 static method takeIII((core::int, core::int) → core::int fn) → void {}
 static method takeDDD((core::double, core::double) → core::double fn) → void {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
index d3a85ff..e15d852 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
@@ -4,6 +4,6 @@
 
 static method f() → void {
   core::List<core::String> y;
-  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>(((core::String z) → core::double => 1.0) as{TypeError} (core::String) → core::String);
+  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>(let final dynamic #t1 = (core::String z) → core::double => 1.0 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_inference_error.dart:11:69: Error: A value of type '(dart.core::String) \u8594 dart.core::double' can't be assigned to a variable of type '(dart.core::String) \u8594 dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::String) \u8594 dart.core::String'.\n      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=double*/ (String\n                                                                    ^")));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
index 689e8f7..3b152f3 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
@@ -9,6 +9,6 @@
   core::Iterable<asy::Future<core::int>> list = <core::int>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int>>(self::make);
   asy::Future<core::List<core::int>> results = asy::Future::wait<core::int>(list);
   asy::Future<core::String> results2 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", (asy::FutureOr<core::String> x, core::int y) → asy::FutureOr<core::String> => x.+(y.{core::int::toString}())));
-  asy::Future<core::String> results3 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", ((core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}())) as{TypeError} (asy::FutureOr<core::String>, core::int) → asy::FutureOr<core::String>));
+  asy::Future<core::String> results3 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", let final dynamic #t1 = (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}()) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: A value of type '(dart.core::String, dart.core::int) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.\n                  /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String\n                                                                                                           ^"))));
   asy::Future<core::String> results4 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → core::String => list.{core::Iterable::fold}<core::String>("", (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}())));
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.strong.expect
index 2416191..703cafd 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.strong.expect
@@ -18,6 +18,6 @@
 static method main() → dynamic {
   core::List<self::Trace> traces = <self::Trace>[];
   core::int longest = traces.{core::Iterable::map}<core::int>((self::Trace trace) → core::int {
-    return trace.{self::Trace::frames}.{core::Iterable::map}<core::int>((self::Frame frame) → core::int => frame.{self::Frame::location}.{core::String::length}).{core::Iterable::fold}<core::int>(0, math::max as{TypeError} (core::int, core::int) → core::int);
-  }).{core::Iterable::fold}<core::int>(0, math::max as{TypeError} (core::int, core::int) → core::int);
+    return trace.{self::Trace::frames}.{core::Iterable::map}<core::int>((self::Frame frame) → core::int => frame.{self::Frame::location}.{core::String::length}).{core::Iterable::fold}<core::int>(0, let final dynamic #t1 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart:28:69: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::int, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::int) \u8594 dart.core::int'.\n        . /*@typeArgs=int*/ /*@target=Iterable::fold*/ fold(0, math.max);\n                                                                    ^")));
+  }).{core::Iterable::fold}<core::int>(0, let final dynamic #t2 = math::max in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart:29:65: Error: A value of type '<T extends dart.core::num>(dart.math::max::T, dart.math::max::T) \u8594 dart.math::max::T' can't be assigned to a variable of type '(dart.core::int, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::int) \u8594 dart.core::int'.\n  }). /*@typeArgs=int*/ /*@target=Iterable::fold*/ fold(0, math.max);\n                                                                ^")));
 }
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
index f335ba4..9ce6a97 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
@@ -23,12 +23,12 @@
   core::String s;
   core::int i;
   s = new self::B::•().{self::B::x} as{TypeError} core::String;
-  s = new self::B::•().{self::B::y} as{TypeError} core::String;
+  s = let final dynamic #t1 = new self::B::•().{self::B::y} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;\n                                                             ^"));
   s = new self::B::•().{self::B::z};
-  s = new self::B::•().{self::B::w} as{TypeError} core::String;
+  s = let final dynamic #t2 = new self::B::•().{self::B::w} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;\n                                                             ^"));
   i = new self::B::•().{self::B::x} as{TypeError} core::int;
   i = new self::B::•().{self::B::y};
-  i = new self::B::•().{self::B::z} as{TypeError} core::int;
+  i = let final dynamic #t3 = new self::B::•().{self::B::z} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;\n                                                             ^"));
   i = new self::B::•().{self::B::w};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
index 9af2631..a7dfd05 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
@@ -27,27 +27,27 @@
 static field dynamic i = new self::A::•().unary-();
 static field self::B j = null as self::B;
 static method test1() → dynamic {
-  self::a = "hi" as{TypeError} self::A;
+  self::a = let final dynamic #t3 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\n  a = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^"));
   self::a = new self::B::•(3);
-  self::b = "hi" as{TypeError} self::B;
+  self::b = let final dynamic #t4 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B'.\n  b = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^"));
   self::b = new self::B::•(3);
   self::c1 = <dynamic>[];
-  self::c1 = <dynamic, dynamic>{} as{TypeError} core::List<dynamic>;
+  self::c1 = let final dynamic #t5 = <dynamic, dynamic>{} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.\n  c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};\n                                                                   ^"));
   self::c2 = <dynamic>[];
-  self::c2 = <dynamic, dynamic>{} as{TypeError} core::List<dynamic>;
+  self::c2 = let final dynamic #t6 = <dynamic, dynamic>{} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.\n  c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};\n                                                                   ^"));
   self::d = <dynamic, dynamic>{};
-  self::d = 3 as{TypeError} core::Map<dynamic, dynamic>;
+  self::d = let final dynamic #t7 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dynamic, dynamic>'.\n  d = /*error:INVALID_ASSIGNMENT*/ 3;\n                                   ^"));
   self::e = new self::A::•();
-  self::e = <dynamic, dynamic>{} as{TypeError} self::A;
+  self::e = let final dynamic #t8 = <dynamic, dynamic>{} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\n  e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};\n                                                                  ^"));
   self::f = 3;
-  self::f = false as{TypeError} core::int;
+  self::f = let final dynamic #t9 = false in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  f = /*error:INVALID_ASSIGNMENT*/ false;\n                                   ^"));
   self::g = 1;
-  self::g = false as{TypeError} core::int;
-  self::h = false as{TypeError} self::B;
+  self::g = let final dynamic #t10 = false in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  g = /*error:INVALID_ASSIGNMENT*/ false;\n                                   ^"));
+  self::h = let final dynamic #t11 = false in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B'.\n  h = /*error:INVALID_ASSIGNMENT*/ false;\n                                   ^"));
   self::h = new self::B::•("b");
   self::i = false;
   self::j = new self::B::•("b");
-  self::j = false as{TypeError} self::B;
-  self::j = <dynamic>[] as{TypeError} self::B;
+  self::j = let final dynamic #t12 = false in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B'.\n  j = /*error:INVALID_ASSIGNMENT*/ false;\n                                   ^"));
+  self::j = let final dynamic #t13 = <dynamic>[] in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B'.\n  j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];\n                                                         ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
index 82f7157..a1049d5 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
@@ -5,7 +5,7 @@
 
 static field core::int y = inf::x;
 static method test1() → dynamic {
-  inf::x = "hi" as{TypeError} core::int;
-  self::y = "hi" as{TypeError} core::int;
+  inf::x = let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^"));
+  self::y = let final dynamic #t2 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  y = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
index 76fbee4..9ea7a585 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
@@ -10,7 +10,7 @@
     ;
 }
 static method test1() → dynamic {
-  inf::A::x = "hi" as{TypeError} core::int;
-  self::B::y = "hi" as{TypeError} core::int;
+  inf::A::x = let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                     ^"));
+  self::B::y = let final dynamic #t2 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                     ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
index 7cc8195..0543e35 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
@@ -6,7 +6,7 @@
 static method test() → dynamic {
   function f() → dynamic
     return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
-  const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.\n  g() => 0;\n  ^"));
+  const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.\n  g() => 0;\n  ^"));
   () → dynamic v = f;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
index 7585775..90a895e 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
@@ -16,7 +16,7 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String y = new self::B::•().{self::B::x} as{TypeError} core::String;
+  core::String y = let final dynamic #t1 = new self::B::•().{self::B::x} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;\n                                                                    ^"));
   core::int z = new self::B::•().{self::B::x};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
index ddae95c..6037f63 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
@@ -16,7 +16,7 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String y = new self::B::•().{self::B::x} as{TypeError} core::String;
+  core::String y = let final dynamic #t1 = new self::B::•().{self::B::x} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;\n                                                                    ^"));
   core::int z = new self::B::•().{self::B::x};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
index 2d68628..c5b4f48 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
@@ -4,6 +4,6 @@
 
 static method test1() → dynamic {
   core::int x = 3;
-  x = "hi" as{TypeError} core::int;
+  x = let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
index 4e502e0..8ef2f58 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
@@ -4,6 +4,6 @@
 
 static method test2() → dynamic {
   core::int x = 3;
-  x = "hi" as{TypeError} core::int;
+  x = let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
index 074b91b..ca8a3db 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
@@ -11,13 +11,13 @@
     ;
   method test1() → dynamic {
     core::int a = this.{self::A::x};
-    a = "hi" as{TypeError} core::int;
+    a = let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    a = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                     ^"));
     a = 3;
     core::int b = this.{self::A::y};
-    b = "hi" as{TypeError} core::int;
+    b = let final dynamic #t2 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    b = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                     ^"));
     b = 4;
     core::int c = this.{self::A::z};
-    c = "hi" as{TypeError} core::int;
+    c = let final dynamic #t3 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    c = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                     ^"));
     c = 4;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
index f968811..b4093b9 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
@@ -7,13 +7,13 @@
 static final field core::int z = 42;
 static method test1() → dynamic {
   core::int a = self::x;
-  a = "hi" as{TypeError} core::int;
+  a = let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  a = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^"));
   a = 3;
   core::int b = self::y;
-  b = "hi" as{TypeError} core::int;
+  b = let final dynamic #t2 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  b = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^"));
   b = 4;
   core::int c = self::z;
-  c = "hi" as{TypeError} core::int;
+  c = let final dynamic #t3 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  c = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^"));
   c = 4;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
index 74a8ecd..36156bb 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
@@ -19,7 +19,7 @@
 }
 static method foo() → dynamic {
   core::int y = new self::C::•().{self::C::x};
-  core::String z = new self::C::•().{self::C::x} as{TypeError} core::String;
+  core::String z = let final dynamic #t1 = new self::C::•().{self::C::x} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C::x*/ x;\n                                                                    ^"));
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
index 31a3f99..3938452 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
@@ -16,10 +16,10 @@
   get x() → core::int
     return 3;
   get w() → core::int
-    return "hello" as{TypeError} core::int;
+    return let final dynamic #t1 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  get /*@topType=int*/ w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";\n                                                             ^"));
 }
 static method foo() → dynamic {
-  core::String y = new self::B::•().{self::B::x} as{TypeError} core::String;
+  core::String y = let final dynamic #t2 = new self::B::•().{self::B::x} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;\n                                                                    ^"));
   core::int z = new self::B::•().{self::B::x};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
index 6a493eb..bf205a4 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
@@ -17,7 +17,7 @@
     return this.{self::B::y};
 }
 static method foo() → dynamic {
-  core::int y = new self::B::•<core::String>().{self::B::x} as{TypeError} core::int;
+  core::int y = let final dynamic #t1 = new self::B::•<core::String>().{self::B::x} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B::x*/ x;\n                                                                         ^"));
   core::String z = new self::B::•<core::String>().{self::B::x};
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
index 4deb557..84d133b 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
@@ -29,7 +29,7 @@
   method m(dynamic a, (dynamic, self::B::E) → dynamic f) → core::String {}
 }
 static method foo() → dynamic {
-  core::int y = new self::B::•<dynamic>().{self::B::m}(null, null) as{TypeError} core::int;
+  core::int y = let final dynamic #t1 = new self::B::•<dynamic>().{self::B::m}(null, null) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      . /*@target=B::m*/ m(null, null);\n                         ^"));
   core::String z = new self::B::•<dynamic>().{self::B::m}(null, null);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
index d1a59bf..d980427 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
@@ -24,7 +24,7 @@
   method m(dynamic a, (dynamic, core::int) → dynamic f) → self::A<self::B::E> {}
 }
 static method foo() → dynamic {
-  core::int y = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value} as{TypeError} core::int;
+  core::int y = let final dynamic #t1 = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      . /*@target=A::value*/ value;\n                             ^"));
   core::String z = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
index 17f929b..c5b8a9c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
@@ -14,7 +14,7 @@
     ;
   method foo(generic-covariant-impl generic-covariant-interface self::Bar::T t) → void {
     for (core::String i in t) {
-      core::int x = i as{TypeError} core::int;
+      core::int x = let final dynamic #t1 = i in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      int x = /*error:INVALID_ASSIGNMENT*/ i;\n                                           ^"));
     }
   }
 }
@@ -24,7 +24,7 @@
     ;
   method foo(generic-covariant-impl generic-covariant-interface self::Baz::S t) → void {
     for (self::Baz::T i in t) {
-      core::int x = i as{TypeError} core::int;
+      core::int x = let final dynamic #t2 = i in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      int x = /*error:INVALID_ASSIGNMENT*/ i;\n                                           ^"));
       self::Baz::T y = i;
     }
   }
@@ -32,29 +32,32 @@
 static method test() → dynamic {
   core::List<self::Foo> list = <self::Foo>[];
   for (self::Foo x in list) {
-    core::String y = x as{TypeError} core::String;
+    core::String y = let final dynamic #t3 = x in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n    String y = /*error:INVALID_ASSIGNMENT*/ x;\n                                            ^"));
   }
   for (dynamic x in list) {
     core::String y = x as{TypeError} core::String;
   }
-  for (core::String x in list) {
+  for (final self::Foo #t4 in list) {
+    core::String x = let final dynamic #t5 = #t4 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {\n              ^"));
     core::String y = x;
   }
   dynamic z;
-  for (final dynamic #t1 in list) {
-    z = #t1;
+  for (final self::Foo #t6 in list) {
+    z = #t6;
     core::String y = z as{TypeError} core::String;
   }
   core::Iterable<dynamic> iter = list;
-  for (self::Foo x in iter) {
+  for (final dynamic #t7 in iter) {
+    self::Foo x = #t7 as{TypeError} self::Foo;
     self::Foo y = x;
   }
   dynamic iter2 = list;
-  for (self::Foo x in iter2) {
+  for (final dynamic #t8 in iter2 as{TypeError} core::Iterable<dynamic>) {
+    self::Foo x = #t8 as{TypeError} self::Foo;
     self::Foo y = x;
   }
   core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
-  for (dynamic x in map) {
+  for (dynamic x in let final dynamic #t9 = map in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.\n  for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {\n                                                                   ^"))) {
     core::String y = x as{TypeError} core::String;
   }
   for (core::String x in map.{core::Map::keys}) {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart
new file mode 100644
index 0000000..f2fc604
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart
@@ -0,0 +1,71 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+class Foo {
+  int bar = 42;
+}
+
+class Bar<T extends Stream<String>> {
+  /*@topType=dynamic*/ foo(T t) async {
+    await for (var /*@type=String*/ i in t) {
+      int x = /*error:INVALID_ASSIGNMENT*/ i;
+    }
+  }
+}
+
+class Baz<T, E extends Stream<T>, S extends E> {
+  /*@topType=dynamic*/ foo(S t) async {
+    await for (var /*@type=Baz::T*/ i in t) {
+      int x = /*error:INVALID_ASSIGNMENT*/ i;
+      T y = i;
+    }
+  }
+}
+
+abstract class MyStream<T> extends Stream<T> {
+  factory MyStream() => null;
+}
+
+test() async {
+  var /*@type=MyStream<Foo>*/ myStream = new MyStream<Foo>();
+  await for (var /*@type=Foo*/ x in myStream) {
+    String y = /*error:INVALID_ASSIGNMENT*/ x;
+  }
+
+  await for (dynamic x in myStream) {
+    String y = /*info:DYNAMIC_CAST*/ x;
+  }
+
+  await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
+    String y = x;
+  }
+
+  var /*@type=dynamic*/ z;
+  await for (z in myStream) {
+    String y = /*info:DYNAMIC_CAST*/ z;
+  }
+
+  Stream stream = myStream;
+  await for (Foo /*info:DYNAMIC_CAST*/ x in stream) {
+    var /*@type=Foo*/ y = x;
+  }
+
+  dynamic stream2 = myStream;
+  await for (Foo /*info:DYNAMIC_CAST*/ x in /*info:DYNAMIC_CAST*/ stream2) {
+    var /*@type=Foo*/ y = x;
+  }
+
+  var /*@type=Map<String, Foo>*/ map = <String, Foo>{};
+  // Error: map must be a Stream.
+  await for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
+    String y = /*info:DYNAMIC_CAST*/ x;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.expect
new file mode 100644
index 0000000..c4bcfc3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.expect
@@ -0,0 +1,66 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+class Foo extends core::Object {
+  field core::int bar = 42;
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Bar<T extends asy::Stream<core::String>> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(self::Bar::T t) → dynamic async {
+    await for (dynamic i in t) {
+      core::int x = i;
+    }
+  }
+}
+class Baz<T extends core::Object, E extends asy::Stream<self::Baz::T>, S extends self::Baz::E> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(self::Baz::S t) → dynamic async {
+    await for (dynamic i in t) {
+      core::int x = i;
+      self::Baz::T y = i;
+    }
+  }
+}
+abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+    return null;
+}
+static method test() → dynamic async {
+  dynamic myStream = self::MyStream::•<self::Foo>();
+  await for (dynamic x in myStream) {
+    core::String y = x;
+  }
+  await for (dynamic x in myStream) {
+    core::String y = x;
+  }
+  await for (core::String x in myStream) {
+    core::String y = x;
+  }
+  dynamic z;
+  await for (final dynamic #t1 in myStream) {
+    z = #t1;
+    core::String y = z;
+  }
+  asy::Stream<dynamic> stream = myStream;
+  await for (self::Foo x in stream) {
+    dynamic y = x;
+  }
+  dynamic stream2 = myStream;
+  await for (self::Foo x in stream2) {
+    dynamic y = x;
+  }
+  dynamic map = <core::String, self::Foo>{};
+  await for (dynamic x in map) {
+    core::String y = x;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
new file mode 100644
index 0000000..89add98
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
@@ -0,0 +1,30 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+class Foo extends core::Object {
+  field core::int bar;
+  default constructor •() → void
+    ;
+}
+class Bar<T extends asy::Stream<core::String>> extends core::Object {
+  default constructor •() → void
+    ;
+  method foo(self::Bar::T t) → dynamic
+    ;
+}
+class Baz<T extends core::Object, E extends asy::Stream<self::Baz::T>, S extends self::Baz::E> extends core::Object {
+  default constructor •() → void
+    ;
+  method foo(self::Baz::S t) → dynamic
+    ;
+}
+abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
new file mode 100644
index 0000000..7671fe8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
@@ -0,0 +1,69 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+class Foo extends core::Object {
+  field core::int bar = 42;
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Bar<T extends asy::Stream<core::String>> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(generic-covariant-impl generic-covariant-interface self::Bar::T t) → dynamic async {
+    await for (core::String i in t) {
+      core::int x = let final dynamic #t1 = i in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      int x = /*error:INVALID_ASSIGNMENT*/ i;\n                                           ^"));
+    }
+  }
+}
+class Baz<T extends core::Object, E extends asy::Stream<self::Baz::T>, S extends self::Baz::E> extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(generic-covariant-impl generic-covariant-interface self::Baz::S t) → dynamic async {
+    await for (self::Baz::T i in t) {
+      core::int x = let final dynamic #t2 = i in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      int x = /*error:INVALID_ASSIGNMENT*/ i;\n                                           ^"));
+      self::Baz::T y = i;
+    }
+  }
+}
+abstract class MyStream<T extends core::Object> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object>() → self::MyStream<self::MyStream::•::T>
+    return null;
+}
+static method test() → dynamic async {
+  self::MyStream<self::Foo> myStream = self::MyStream::•<self::Foo>();
+  await for (self::Foo x in myStream) {
+    core::String y = let final dynamic #t3 = x in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n    String y = /*error:INVALID_ASSIGNMENT*/ x;\n                                            ^"));
+  }
+  await for (dynamic x in myStream) {
+    core::String y = x as{TypeError} core::String;
+  }
+  await for (final self::Foo #t4 in myStream) {
+    core::String x = let final dynamic #t5 = #t4 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {\n                    ^"));
+    core::String y = x;
+  }
+  dynamic z;
+  await for (final self::Foo #t6 in myStream) {
+    z = #t6;
+    core::String y = z as{TypeError} core::String;
+  }
+  asy::Stream<dynamic> stream = myStream;
+  await for (final dynamic #t7 in stream) {
+    self::Foo x = #t7 as{TypeError} self::Foo;
+    self::Foo y = x;
+  }
+  dynamic stream2 = myStream;
+  await for (final dynamic #t8 in stream2 as{TypeError} asy::Stream<dynamic>) {
+    self::Foo x = #t8 as{TypeError} self::Foo;
+    self::Foo y = x;
+  }
+  core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
+  await for (dynamic x in let final dynamic #t9 = map in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.\n  await for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {\n                                                                         ^"))) {
+    core::String y = x as{TypeError} core::String;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
index 04da608..cabfadb 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class Foo extends core::Object {
   field core::int x = 1;
-  constructor •([core::int x = "1" as{TypeError} core::int]) → void
+  constructor •([core::int x = let final dynamic #t1 = "1" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);\n                                             ^"))]) → void
     : self::Foo::x = x, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/lambda_return_type.dart.strong.expect b/pkg/front_end/testcases/inference/lambda_return_type.dart.strong.expect
index 95a52e8..3863359 100644
--- a/pkg/front_end/testcases/inference/lambda_return_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/lambda_return_type.dart.strong.expect
@@ -12,7 +12,7 @@
     return i;
   };
   () → core::num d = () → core::num {
-    return o;
+    return o as{TypeError} core::num;
   };
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.strong.expect b/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
index 7d3fac5..530a778 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
@@ -4,14 +4,14 @@
 
 static method test1() → dynamic {
   core::List<core::int> x = <core::int>[1, 2, 3];
-  x.{core::List::add}("hi" as{TypeError} core::int);
-  x.{core::List::add}(4.0 as{TypeError} core::int);
+  x.{core::List::add}(let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');\n                                                                      ^")));
+  x.{core::List::add}(let final dynamic #t2 = 4.0 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);\n                                                                      ^")));
   x.{core::List::add}(4);
   core::List<core::num> y = x;
 }
 static method test2() → dynamic {
   core::List<core::num> x = <core::num>[1, 2.0, 3];
-  x.{core::List::add}("hi" as{TypeError} core::num);
+  x.{core::List::add}(let final dynamic #t3 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n  x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');\n                                                                      ^")));
   x.{core::List::add}(4.0);
   core::List<core::int> y = x as{TypeError} core::List<core::int>;
 }
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
index baa080c..4ebc1ee 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
@@ -5,13 +5,13 @@
 static field core::List<core::int> x1 = <core::int>[1, 2, 3];
 static field core::List<core::num> x2 = <core::num>[1, 2.0, 3];
 static method test1() → dynamic {
-  self::x1.{core::List::add}("hi" as{TypeError} core::int);
-  self::x1.{core::List::add}(4.0 as{TypeError} core::int);
+  self::x1.{core::List::add}(let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');\n                                                                       ^")));
+  self::x1.{core::List::add}(let final dynamic #t2 = 4.0 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);\n                                                                       ^")));
   self::x1.{core::List::add}(4);
   core::List<core::num> y = self::x1;
 }
 static method test2() → dynamic {
-  self::x2.{core::List::add}("hi" as{TypeError} core::num);
+  self::x2.{core::List::add}(let final dynamic #t3 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n  x2. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');\n                                                                       ^")));
   self::x2.{core::List::add}(4.0);
   core::List<core::int> y = self::x2 as{TypeError} core::List<core::int>;
 }
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
index b8dbbc5..4dc01e4 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
@@ -9,7 +9,7 @@
     return (core::int x) → core::int => x;
   }
   function b() → asy::Future<(core::int) → core::int> async {
-    return ((dynamic x) → dynamic => x) as{TypeError} asy::FutureOr<(core::int) → core::int>;
+    return let final dynamic #t1 = (dynamic x) → dynamic => x in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.\n    return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;\n                                   ^"));
   }
   function c() → core::Iterable<(core::int) → core::int> sync* {
     yield(core::int x) → core::int => x;
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.strong.expect b/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
index 97abfba..a918da1 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
@@ -5,17 +5,17 @@
 static method test1() → dynamic {
   core::Map<core::int, core::String> x = <core::int, core::String>{1: "x", 2: "y"};
   x.{core::Map::[]=}(3, "z");
-  x.{core::Map::[]=}("hi" as{TypeError} core::int, "w");
-  x.{core::Map::[]=}(4.0 as{TypeError} core::int, "u");
-  x.{core::Map::[]=}(3, 42 as{TypeError} core::String);
+  x.{core::Map::[]=}(let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';\n                                             ^")), "w");
+  x.{core::Map::[]=}(let final dynamic #t2 = 4.0 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';\n                                             ^")), "u");
+  x.{core::Map::[]=}(3, let final dynamic #t3 = 42 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;\n                                                            ^")));
   core::Map<core::num, core::String> y = x;
 }
 static method test2() → dynamic {
   core::Map<core::num, core::Pattern> x = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
   x.{core::Map::[]=}(3, "z");
-  x.{core::Map::[]=}("hi" as{TypeError} core::num, "w");
+  x.{core::Map::[]=}(let final dynamic #t4 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';\n                                             ^")), "w");
   x.{core::Map::[]=}(4.0, "u");
-  x.{core::Map::[]=}(3, 42 as{TypeError} core::Pattern);
+  x.{core::Map::[]=}(3, let final dynamic #t5 = 42 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.\n  x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;\n                                                            ^")));
   core::Pattern p = null;
   x.{core::Map::[]=}(2, p);
   core::Map<core::int, core::String> y = x as{TypeError} core::Map<core::int, core::String>;
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
index 58f9297..91043cc 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
@@ -6,16 +6,16 @@
 static field core::Map<core::num, core::Pattern> x2 = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
 static method test1() → dynamic {
   self::x1.{core::Map::[]=}(3, "z");
-  self::x1.{core::Map::[]=}("hi" as{TypeError} core::int, "w");
-  self::x1.{core::Map::[]=}(4.0 as{TypeError} core::int, "u");
-  self::x1.{core::Map::[]=}(3, 42 as{TypeError} core::String);
+  self::x1.{core::Map::[]=}(let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';\n                                                                  ^")), "w");
+  self::x1.{core::Map::[]=}(let final dynamic #t2 = 4.0 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';\n                                                                  ^")), "u");
+  self::x1.{core::Map::[]=}(3, let final dynamic #t3 = 42 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  x1 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;\n                                                             ^")));
   core::Map<core::num, core::String> y = self::x1;
 }
 static method test2() → dynamic {
   self::x2.{core::Map::[]=}(3, "z");
-  self::x2.{core::Map::[]=}("hi" as{TypeError} core::num, "w");
+  self::x2.{core::Map::[]=}(let final dynamic #t4 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n  x2 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';\n                                                                  ^")), "w");
   self::x2.{core::Map::[]=}(4.0, "u");
-  self::x2.{core::Map::[]=}(3, 42 as{TypeError} core::Pattern);
+  self::x2.{core::Map::[]=}(3, let final dynamic #t5 = 42 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.\n  x2 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;\n                                                             ^")));
   core::Pattern p = null;
   self::x2.{core::Map::[]=}(2, p);
   core::Map<core::int, core::String> y = self::x2 as{TypeError} core::Map<core::int, core::String>;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
index bf95de8..48ae27d 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
@@ -10,8 +10,8 @@
 }
 static method test5() → dynamic {
   self::A a1 = new self::A::•();
-  a1.{self::A::x} = "hi" as{TypeError} core::int;
+  a1.{self::A::x} = let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  a1. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                                        ^"));
   self::A a2 = new self::A::•();
-  a2.{self::A::x} = "hi" as{TypeError} core::int;
+  a2.{self::A::x} = let final dynamic #t2 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  a2. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                                        ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
index d551d88..734cbb2 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   set x(dynamic #synthetic) → void
-    let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:16: Error: A setter should have exactly one formal parameter.\n  void set x() {}\n               ^"));
+    let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:16: Error: A setter should have exactly one formal parameter.\n  void set x() {}\n               ^"));
 }
 static method f(self::A a) → void {
   core::int x = a.{self::A::x} = 0;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
index 23594d6..44c0bca 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
@@ -8,7 +8,7 @@
   return (core::int x) → core::int => x;
 }
 static method b() → asy::Future<(core::int) → core::int> async {
-  return ((dynamic x) → dynamic => x) as{TypeError} asy::FutureOr<(core::int) → core::int>;
+  return let final dynamic #t1 = (dynamic x) → dynamic => x in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.\n  return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;\n                                 ^"));
 }
 static method c() → core::Iterable<(core::int) → core::int> sync* {
   yield(core::int x) → core::int => x;
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart
new file mode 100644
index 0000000..5360fa7
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart
@@ -0,0 +1,17 @@
+// 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.
+
+/*@testedFeatures=inference,error*/
+library test;
+
+test() async {
+  String s;
+  for (int x in /*@error=InvalidAssignment*/ s) {}
+  await for (int x in /*@error=InvalidAssignment*/ s) {}
+  int y;
+  for (y in /*@error=InvalidAssignment*/ s) {}
+  await for (y in /*@error=InvalidAssignment*/ s) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.direct.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.direct.expect
new file mode 100644
index 0000000..3e7c8ee
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.direct.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic async {
+  core::String s;
+  for (core::int x in s) {
+  }
+  await for (core::int x in s) {
+  }
+  core::int y;
+  for (final dynamic #t1 in s) {
+    y = #t1;
+  }
+  await for (final dynamic #t2 in s) {
+    y = #t2;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.outline.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.outline.expect
new file mode 100644
index 0000000..8e85697
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
new file mode 100644
index 0000000..c5e0b7d
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
@@ -0,0 +1,21 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic async {
+  core::String s;
+  for (final dynamic #t1 in let final dynamic #t2 = s in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.\n  for (int x in /*@error=InvalidAssignment*/ s) {}\n                                             ^"))) {
+    core::int x = #t1 as{TypeError} core::int;
+  }
+  await for (final dynamic #t3 in let final dynamic #t4 = s in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:52: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.\n  await for (int x in /*@error=InvalidAssignment*/ s) {}\n                                                   ^"))) {
+    core::int x = #t3 as{TypeError} core::int;
+  }
+  core::int y;
+  for (final dynamic #t5 in let final dynamic #t6 = s in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:42: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.\n  for (y in /*@error=InvalidAssignment*/ s) {}\n                                         ^"))) {
+    y = #t5 as{TypeError} core::int;
+  }
+  await for (final dynamic #t7 in let final dynamic #t8 = s in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.\n  await for (y in /*@error=InvalidAssignment*/ s) {}\n                                               ^"))) {
+    y = #t7 as{TypeError} core::int;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart
new file mode 100644
index 0000000..06ba28b
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart
@@ -0,0 +1,32 @@
+// 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.
+
+/*@testedFeatures=inference,error*/
+library test;
+
+import 'dart:async';
+
+T f<T>() => null;
+
+class A {}
+
+class B extends A {}
+
+test() async {
+  Iterable<A> iterable;
+  Stream<A> stream;
+  A a;
+  B b;
+  int i;
+  for (a in iterable) {}
+  await for (a in stream) {}
+  for (b in iterable) {}
+  await for (b in stream) {}
+  for (i /*@error=InvalidAssignment*/ in iterable) {}
+  await for (i /*@error=InvalidAssignment*/ in stream) {}
+  for (a in /*@typeArgs=Iterable<A>*/ f()) {}
+  await for (a in /*@typeArgs=Stream<A>*/ f()) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.expect
new file mode 100644
index 0000000..2b4fcb0
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.expect
@@ -0,0 +1,49 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+class A extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  default constructor •() → void
+    : super self::A::•()
+    ;
+}
+static method f<T extends core::Object>() → self::f::T
+  return null;
+static method test() → dynamic async {
+  core::Iterable<self::A> iterable;
+  asy::Stream<self::A> stream;
+  self::A a;
+  self::B b;
+  core::int i;
+  for (final self::A #t1 in iterable) {
+    a = #t1;
+  }
+  await for (final self::A #t2 in stream) {
+    a = #t2;
+  }
+  for (final self::A #t3 in iterable) {
+    b = #t3;
+  }
+  await for (final self::A #t4 in stream) {
+    b = #t4;
+  }
+  for (final self::A #t5 in iterable) {
+    i = #t5;
+  }
+  await for (final self::A #t6 in stream) {
+    i = #t6;
+  }
+  for (final dynamic #t7 in self::f<dynamic>()) {
+    a = #t7;
+  }
+  await for (final dynamic #t8 in self::f<dynamic>()) {
+    a = #t8;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.outline.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.outline.expect
new file mode 100644
index 0000000..6943bef
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  default constructor •() → void
+    ;
+}
+class B extends self::A {
+  default constructor •() → void
+    ;
+}
+static method f<T extends core::Object>() → self::f::T
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
new file mode 100644
index 0000000..35b39d2
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
@@ -0,0 +1,49 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+class A extends core::Object {
+  default constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  default constructor •() → void
+    : super self::A::•()
+    ;
+}
+static method f<T extends core::Object>() → self::f::T
+  return null;
+static method test() → dynamic async {
+  core::Iterable<self::A> iterable;
+  asy::Stream<self::A> stream;
+  self::A a;
+  self::B b;
+  core::int i;
+  for (final self::A #t1 in iterable) {
+    a = #t1;
+  }
+  await for (final self::A #t2 in stream) {
+    a = #t2;
+  }
+  for (final self::A #t3 in iterable) {
+    b = #t3 as{TypeError} self::B;
+  }
+  await for (final self::A #t4 in stream) {
+    b = #t4 as{TypeError} self::B;
+  }
+  for (final self::A #t5 in iterable) {
+    i = let final dynamic #t6 = #t5 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:39: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  for (i /*@error=InvalidAssignment*/ in iterable) {}\n                                      ^"));
+  }
+  await for (final self::A #t7 in stream) {
+    i = let final dynamic #t8 = #t7 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:45: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  await for (i /*@error=InvalidAssignment*/ in stream) {}\n                                            ^"));
+  }
+  for (final self::A #t9 in self::f<core::Iterable<self::A>>()) {
+    a = #t9;
+  }
+  await for (final self::A #t10 in self::f<asy::Stream<self::A>>()) {
+    a = #t10;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
index 3a0fc08..e975696 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
@@ -59,11 +59,11 @@
     core::double v3 = let final core::String #t66 = "x" in let final core::double #t67 = self::getDouble() in let final void #t68 = super.{self::Base::[]=}(#t66, #t67) in #t67;
     core::num v5 = let final core::String #t69 = "x" in let final core::int #t70 = super.{self::Base::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num} let final core::num #t71 = self::getNum() as{TypeError} core::double in let final void #t72 = super.{self::Base::[]=}(#t69, #t71) in #t71 : #t70;
     core::num v6 = let final core::String #t73 = "x" in let final core::int #t74 = super.{self::Base::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num} let final core::double #t75 = self::getDouble() in let final void #t76 = super.{self::Base::[]=}(#t73, #t75) in #t75 : #t74;
-    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t79 = super.{self::Base::[]=}(#t77, #t78) in #t78;
-    core::num v8 = let final core::String #t80 = "x" in let final core::num #t81 = super.{self::Base::[]}(#t80).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t82 = super.{self::Base::[]=}(#t80, #t81) in #t81;
-    core::double v9 = let final core::String #t83 = "x" in let final core::double #t84 = super.{self::Base::[]}(#t83).{core::num::+}(self::getDouble()) in let final void #t85 = super.{self::Base::[]=}(#t83, #t84) in #t84;
-    core::int v10 = let final core::String #t86 = "x" in let final core::int #t87 = super.{self::Base::[]}(#t86).{core::num::+}(1) as{TypeError} core::double in let final void #t88 = super.{self::Base::[]=}(#t86, #t87) in #t87;
-    core::int v11 = let final core::String #t89 = "x" in let final core::int #t90 = super.{self::Base::[]}(#t89) in let final void #t91 = super.{self::Base::[]=}(#t89, #t90.{core::num::+}(1) as{TypeError} core::double) in #t90;
+    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final dynamic #t79 = super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:55:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n    var /*@type=int*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();\n                                                             ^")) in let final void #t80 = super.{self::Base::[]=}(#t77, #t78) in #t78;
+    core::num v8 = let final core::String #t81 = "x" in let final core::num #t82 = super.{self::Base::[]}(#t81).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t83 = super.{self::Base::[]=}(#t81, #t82) in #t82;
+    core::double v9 = let final core::String #t84 = "x" in let final core::double #t85 = super.{self::Base::[]}(#t84).{core::num::+}(self::getDouble()) in let final void #t86 = super.{self::Base::[]=}(#t84, #t85) in #t85;
+    core::int v10 = let final core::String #t87 = "x" in let final core::int #t88 = let final dynamic #t89 = super.{self::Base::[]}(#t87).{core::num::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:58:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n    var /*@type=int*/ v10 = ++super /*@target=Base::[]=*/ ['x'];\n                            ^")) in let final void #t90 = super.{self::Base::[]=}(#t87, #t88) in #t88;
+    core::int v11 = let final core::String #t91 = "x" in let final core::int #t92 = super.{self::Base::[]}(#t91) in let final void #t93 = super.{self::Base::[]=}(#t91, let final dynamic #t94 = #t92.{core::num::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:59:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n    var /*@type=int*/ v11 = super /*@target=Base::[]=*/ ['x']++;\n                                                             ^"))) in #t92;
   }
   abstract forwarding-stub operator []=(core::String s, generic-covariant-impl core::double v) → void;
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::double v) → void;
@@ -73,14 +73,14 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::int v1 = let final core::String #t92 = "x" in let final core::int #t93 = self::getInt() in let final void #t94 = super.{self::Base::[]=}(#t92, #t93) in #t93;
-    core::num v2 = let final core::String #t95 = "x" in let final core::num #t96 = self::getNum() as{TypeError} core::int in let final void #t97 = super.{self::Base::[]=}(#t95, #t96) in #t96;
-    core::num v4 = let final core::String #t98 = "x" in let final core::num #t99 = super.{self::Base::[]}(#t98) in #t99.{core::num::==}(null) ?{core::num} let final core::int #t100 = self::getInt() in let final void #t101 = super.{self::Base::[]=}(#t98, #t100) in #t100 : #t99;
-    core::num v5 = let final core::String #t102 = "x" in let final core::num #t103 = super.{self::Base::[]}(#t102) in #t103.{core::num::==}(null) ?{core::num} let final core::num #t104 = self::getNum() as{TypeError} core::int in let final void #t105 = super.{self::Base::[]=}(#t102, #t104) in #t104 : #t103;
-    core::num v7 = let final core::String #t106 = "x" in let final core::num #t107 = super.{self::Base::[]}(#t106).{core::num::+}(self::getInt()) as{TypeError} core::int in let final void #t108 = super.{self::Base::[]=}(#t106, #t107) in #t107;
-    core::num v8 = let final core::String #t109 = "x" in let final core::num #t110 = super.{self::Base::[]}(#t109).{core::num::+}(self::getNum()) as{TypeError} core::int in let final void #t111 = super.{self::Base::[]=}(#t109, #t110) in #t110;
-    core::num v10 = let final core::String #t112 = "x" in let final core::num #t113 = super.{self::Base::[]}(#t112).{core::num::+}(1) as{TypeError} core::int in let final void #t114 = super.{self::Base::[]=}(#t112, #t113) in #t113;
-    core::num v11 = let final core::String #t115 = "x" in let final core::num #t116 = super.{self::Base::[]}(#t115) in let final void #t117 = super.{self::Base::[]=}(#t115, #t116.{core::num::+}(1) as{TypeError} core::int) in #t116;
+    core::int v1 = let final core::String #t95 = "x" in let final core::int #t96 = self::getInt() in let final void #t97 = super.{self::Base::[]=}(#t95, #t96) in #t96;
+    core::num v2 = let final core::String #t98 = "x" in let final core::num #t99 = self::getNum() as{TypeError} core::int in let final void #t100 = super.{self::Base::[]=}(#t98, #t99) in #t99;
+    core::num v4 = let final core::String #t101 = "x" in let final core::num #t102 = super.{self::Base::[]}(#t101) in #t102.{core::num::==}(null) ?{core::num} let final core::int #t103 = self::getInt() in let final void #t104 = super.{self::Base::[]=}(#t101, #t103) in #t103 : #t102;
+    core::num v5 = let final core::String #t105 = "x" in let final core::num #t106 = super.{self::Base::[]}(#t105) in #t106.{core::num::==}(null) ?{core::num} let final core::num #t107 = self::getNum() as{TypeError} core::int in let final void #t108 = super.{self::Base::[]=}(#t105, #t107) in #t107 : #t106;
+    core::num v7 = let final core::String #t109 = "x" in let final core::num #t110 = super.{self::Base::[]}(#t109).{core::num::+}(self::getInt()) as{TypeError} core::int in let final void #t111 = super.{self::Base::[]=}(#t109, #t110) in #t110;
+    core::num v8 = let final core::String #t112 = "x" in let final core::num #t113 = super.{self::Base::[]}(#t112).{core::num::+}(self::getNum()) as{TypeError} core::int in let final void #t114 = super.{self::Base::[]=}(#t112, #t113) in #t113;
+    core::num v10 = let final core::String #t115 = "x" in let final core::num #t116 = super.{self::Base::[]}(#t115).{core::num::+}(1) as{TypeError} core::int in let final void #t117 = super.{self::Base::[]=}(#t115, #t116) in #t116;
+    core::num v11 = let final core::String #t118 = "x" in let final core::num #t119 = super.{self::Base::[]}(#t118) in let final void #t120 = super.{self::Base::[]=}(#t118, #t119.{core::num::+}(1) as{TypeError} core::int) in #t119;
   }
   abstract forwarding-stub operator []=(core::String s, generic-covariant-impl core::int v) → void;
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::int v) → void;
@@ -90,17 +90,17 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::int v1 = let final core::String #t118 = "x" in let final core::int #t119 = self::getInt() in let final void #t120 = super.{self::Base::[]=}(#t118, #t119) in #t119;
-    core::num v2 = let final core::String #t121 = "x" in let final core::num #t122 = self::getNum() in let final void #t123 = super.{self::Base::[]=}(#t121, #t122) in #t122;
-    core::double v3 = let final core::String #t124 = "x" in let final core::double #t125 = self::getDouble() in let final void #t126 = super.{self::Base::[]=}(#t124, #t125) in #t125;
-    core::num v4 = let final core::String #t127 = "x" in let final core::num #t128 = super.{self::Base::[]}(#t127) in #t128.{core::num::==}(null) ?{core::num} let final core::int #t129 = self::getInt() in let final void #t130 = super.{self::Base::[]=}(#t127, #t129) in #t129 : #t128;
-    core::num v5 = let final core::String #t131 = "x" in let final core::num #t132 = super.{self::Base::[]}(#t131) in #t132.{core::num::==}(null) ?{core::num} let final core::num #t133 = self::getNum() in let final void #t134 = super.{self::Base::[]=}(#t131, #t133) in #t133 : #t132;
-    core::num v6 = let final core::String #t135 = "x" in let final core::num #t136 = super.{self::Base::[]}(#t135) in #t136.{core::num::==}(null) ?{core::num} let final core::double #t137 = self::getDouble() in let final void #t138 = super.{self::Base::[]=}(#t135, #t137) in #t137 : #t136;
-    core::num v7 = let final core::String #t139 = "x" in let final core::num #t140 = super.{self::Base::[]}(#t139).{core::num::+}(self::getInt()) in let final void #t141 = super.{self::Base::[]=}(#t139, #t140) in #t140;
-    core::num v8 = let final core::String #t142 = "x" in let final core::num #t143 = super.{self::Base::[]}(#t142).{core::num::+}(self::getNum()) in let final void #t144 = super.{self::Base::[]=}(#t142, #t143) in #t143;
-    core::num v9 = let final core::String #t145 = "x" in let final core::num #t146 = super.{self::Base::[]}(#t145).{core::num::+}(self::getDouble()) in let final void #t147 = super.{self::Base::[]=}(#t145, #t146) in #t146;
-    core::num v10 = let final core::String #t148 = "x" in let final core::num #t149 = super.{self::Base::[]}(#t148).{core::num::+}(1) in let final void #t150 = super.{self::Base::[]=}(#t148, #t149) in #t149;
-    core::num v11 = let final core::String #t151 = "x" in let final core::num #t152 = super.{self::Base::[]}(#t151) in let final void #t153 = super.{self::Base::[]=}(#t151, #t152.{core::num::+}(1)) in #t152;
+    core::int v1 = let final core::String #t121 = "x" in let final core::int #t122 = self::getInt() in let final void #t123 = super.{self::Base::[]=}(#t121, #t122) in #t122;
+    core::num v2 = let final core::String #t124 = "x" in let final core::num #t125 = self::getNum() in let final void #t126 = super.{self::Base::[]=}(#t124, #t125) in #t125;
+    core::double v3 = let final core::String #t127 = "x" in let final core::double #t128 = self::getDouble() in let final void #t129 = super.{self::Base::[]=}(#t127, #t128) in #t128;
+    core::num v4 = let final core::String #t130 = "x" in let final core::num #t131 = super.{self::Base::[]}(#t130) in #t131.{core::num::==}(null) ?{core::num} let final core::int #t132 = self::getInt() in let final void #t133 = super.{self::Base::[]=}(#t130, #t132) in #t132 : #t131;
+    core::num v5 = let final core::String #t134 = "x" in let final core::num #t135 = super.{self::Base::[]}(#t134) in #t135.{core::num::==}(null) ?{core::num} let final core::num #t136 = self::getNum() in let final void #t137 = super.{self::Base::[]=}(#t134, #t136) in #t136 : #t135;
+    core::num v6 = let final core::String #t138 = "x" in let final core::num #t139 = super.{self::Base::[]}(#t138) in #t139.{core::num::==}(null) ?{core::num} let final core::double #t140 = self::getDouble() in let final void #t141 = super.{self::Base::[]=}(#t138, #t140) in #t140 : #t139;
+    core::num v7 = let final core::String #t142 = "x" in let final core::num #t143 = super.{self::Base::[]}(#t142).{core::num::+}(self::getInt()) in let final void #t144 = super.{self::Base::[]=}(#t142, #t143) in #t143;
+    core::num v8 = let final core::String #t145 = "x" in let final core::num #t146 = super.{self::Base::[]}(#t145).{core::num::+}(self::getNum()) in let final void #t147 = super.{self::Base::[]=}(#t145, #t146) in #t146;
+    core::num v9 = let final core::String #t148 = "x" in let final core::num #t149 = super.{self::Base::[]}(#t148).{core::num::+}(self::getDouble()) in let final void #t150 = super.{self::Base::[]=}(#t148, #t149) in #t149;
+    core::num v10 = let final core::String #t151 = "x" in let final core::num #t152 = super.{self::Base::[]}(#t151).{core::num::+}(1) in let final void #t153 = super.{self::Base::[]=}(#t151, #t152) in #t152;
+    core::num v11 = let final core::String #t154 = "x" in let final core::num #t155 = super.{self::Base::[]}(#t154) in let final void #t156 = super.{self::Base::[]=}(#t154, #t155.{core::num::+}(1)) in #t155;
   }
   abstract forwarding-stub operator []=(core::String s, generic-covariant-impl core::num v) → void;
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::num v) → void;
@@ -110,15 +110,15 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::num v2 = let final core::String #t154 = "x" in let final core::num #t155 = self::getNum() as{TypeError} core::double in let final void #t156 = super.{self::Base::[]=}(#t154, #t155) in #t155;
-    core::double v3 = let final core::String #t157 = "x" in let final core::double #t158 = self::getDouble() in let final void #t159 = super.{self::Base::[]=}(#t157, #t158) in #t158;
-    core::num v5 = let final core::String #t160 = "x" in let final core::num #t161 = super.{self::Base::[]}(#t160) in #t161.{core::num::==}(null) ?{core::num} let final core::num #t162 = self::getNum() as{TypeError} core::double in let final void #t163 = super.{self::Base::[]=}(#t160, #t162) in #t162 : #t161;
-    core::num v6 = let final core::String #t164 = "x" in let final core::num #t165 = super.{self::Base::[]}(#t164) in #t165.{core::num::==}(null) ?{core::num} let final core::double #t166 = self::getDouble() in let final void #t167 = super.{self::Base::[]=}(#t164, #t166) in #t166 : #t165;
-    core::num v7 = let final core::String #t168 = "x" in let final core::num #t169 = super.{self::Base::[]}(#t168).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t170 = super.{self::Base::[]=}(#t168, #t169) in #t169;
-    core::num v8 = let final core::String #t171 = "x" in let final core::num #t172 = super.{self::Base::[]}(#t171).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t173 = super.{self::Base::[]=}(#t171, #t172) in #t172;
-    core::num v9 = let final core::String #t174 = "x" in let final core::num #t175 = super.{self::Base::[]}(#t174).{core::num::+}(self::getDouble()) as{TypeError} core::double in let final void #t176 = super.{self::Base::[]=}(#t174, #t175) in #t175;
-    core::num v10 = let final core::String #t177 = "x" in let final core::num #t178 = super.{self::Base::[]}(#t177).{core::num::+}(1) as{TypeError} core::double in let final void #t179 = super.{self::Base::[]=}(#t177, #t178) in #t178;
-    core::num v11 = let final core::String #t180 = "x" in let final core::num #t181 = super.{self::Base::[]}(#t180) in let final void #t182 = super.{self::Base::[]=}(#t180, #t181.{core::num::+}(1) as{TypeError} core::double) in #t181;
+    core::num v2 = let final core::String #t157 = "x" in let final core::num #t158 = self::getNum() as{TypeError} core::double in let final void #t159 = super.{self::Base::[]=}(#t157, #t158) in #t158;
+    core::double v3 = let final core::String #t160 = "x" in let final core::double #t161 = self::getDouble() in let final void #t162 = super.{self::Base::[]=}(#t160, #t161) in #t161;
+    core::num v5 = let final core::String #t163 = "x" in let final core::num #t164 = super.{self::Base::[]}(#t163) in #t164.{core::num::==}(null) ?{core::num} let final core::num #t165 = self::getNum() as{TypeError} core::double in let final void #t166 = super.{self::Base::[]=}(#t163, #t165) in #t165 : #t164;
+    core::num v6 = let final core::String #t167 = "x" in let final core::num #t168 = super.{self::Base::[]}(#t167) in #t168.{core::num::==}(null) ?{core::num} let final core::double #t169 = self::getDouble() in let final void #t170 = super.{self::Base::[]=}(#t167, #t169) in #t169 : #t168;
+    core::num v7 = let final core::String #t171 = "x" in let final core::num #t172 = super.{self::Base::[]}(#t171).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t173 = super.{self::Base::[]=}(#t171, #t172) in #t172;
+    core::num v8 = let final core::String #t174 = "x" in let final core::num #t175 = super.{self::Base::[]}(#t174).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t176 = super.{self::Base::[]=}(#t174, #t175) in #t175;
+    core::num v9 = let final core::String #t177 = "x" in let final core::num #t178 = super.{self::Base::[]}(#t177).{core::num::+}(self::getDouble()) as{TypeError} core::double in let final void #t179 = super.{self::Base::[]=}(#t177, #t178) in #t178;
+    core::num v10 = let final core::String #t180 = "x" in let final core::num #t181 = super.{self::Base::[]}(#t180).{core::num::+}(1) as{TypeError} core::double in let final void #t182 = super.{self::Base::[]=}(#t180, #t181) in #t181;
+    core::num v11 = let final core::String #t183 = "x" in let final core::num #t184 = super.{self::Base::[]}(#t183) in let final void #t185 = super.{self::Base::[]=}(#t183, #t184.{core::num::+}(1) as{TypeError} core::double) in #t184;
   }
   abstract forwarding-stub operator []=(core::String s, generic-covariant-impl core::double v) → void;
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::double v) → void;
@@ -128,14 +128,14 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::int v1 = let final core::String #t183 = "x" in let final core::int #t184 = self::getInt() in let final void #t185 = super.{self::Base::[]=}(#t183, #t184) in #t184;
-    core::num v2 = let final core::String #t186 = "x" in let final core::num #t187 = self::getNum() as{TypeError} core::int in let final void #t188 = super.{self::Base::[]=}(#t186, #t187) in #t187;
-    core::num v4 = let final core::String #t189 = "x" in let final core::double #t190 = super.{self::Base::[]}(#t189) in #t190.{core::num::==}(null) ?{core::num} let final core::int #t191 = self::getInt() in let final void #t192 = super.{self::Base::[]=}(#t189, #t191) in #t191 : #t190;
-    core::num v5 = let final core::String #t193 = "x" in let final core::double #t194 = super.{self::Base::[]}(#t193) in #t194.{core::num::==}(null) ?{core::num} let final core::num #t195 = self::getNum() as{TypeError} core::int in let final void #t196 = super.{self::Base::[]=}(#t193, #t195) in #t195 : #t194;
-    core::double v7 = let final core::String #t197 = "x" in let final core::double #t198 = super.{self::Base::[]}(#t197).{core::double::+}(self::getInt()) as{TypeError} core::int in let final void #t199 = super.{self::Base::[]=}(#t197, #t198) in #t198;
-    core::double v8 = let final core::String #t200 = "x" in let final core::double #t201 = super.{self::Base::[]}(#t200).{core::double::+}(self::getNum()) as{TypeError} core::int in let final void #t202 = super.{self::Base::[]=}(#t200, #t201) in #t201;
-    core::double v10 = let final core::String #t203 = "x" in let final core::double #t204 = super.{self::Base::[]}(#t203).{core::double::+}(1) as{TypeError} core::int in let final void #t205 = super.{self::Base::[]=}(#t203, #t204) in #t204;
-    core::double v11 = let final core::String #t206 = "x" in let final core::double #t207 = super.{self::Base::[]}(#t206) in let final void #t208 = super.{self::Base::[]=}(#t206, #t207.{core::double::+}(1) as{TypeError} core::int) in #t207;
+    core::int v1 = let final core::String #t186 = "x" in let final core::int #t187 = self::getInt() in let final void #t188 = super.{self::Base::[]=}(#t186, #t187) in #t187;
+    core::num v2 = let final core::String #t189 = "x" in let final core::num #t190 = self::getNum() as{TypeError} core::int in let final void #t191 = super.{self::Base::[]=}(#t189, #t190) in #t190;
+    core::num v4 = let final core::String #t192 = "x" in let final core::double #t193 = super.{self::Base::[]}(#t192) in #t193.{core::num::==}(null) ?{core::num} let final core::int #t194 = self::getInt() in let final void #t195 = super.{self::Base::[]=}(#t192, #t194) in #t194 : #t193;
+    core::num v5 = let final core::String #t196 = "x" in let final core::double #t197 = super.{self::Base::[]}(#t196) in #t197.{core::num::==}(null) ?{core::num} let final core::num #t198 = self::getNum() as{TypeError} core::int in let final void #t199 = super.{self::Base::[]=}(#t196, #t198) in #t198 : #t197;
+    core::double v7 = let final core::String #t200 = "x" in let final core::double #t201 = let final dynamic #t202 = super.{self::Base::[]}(#t200).{core::double::+}(self::getInt()) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:112:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();\n                                                                ^")) in let final void #t203 = super.{self::Base::[]=}(#t200, #t201) in #t201;
+    core::double v8 = let final core::String #t204 = "x" in let final core::double #t205 = let final dynamic #t206 = super.{self::Base::[]}(#t204).{core::double::+}(self::getNum()) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:113:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v8 = super /*@target=Base::[]=*/ ['x'] += getNum();\n                                                                ^")) in let final void #t207 = super.{self::Base::[]=}(#t204, #t205) in #t205;
+    core::double v10 = let final core::String #t208 = "x" in let final core::double #t209 = let final dynamic #t210 = super.{self::Base::[]}(#t208).{core::double::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:114:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v10 = ++super /*@target=Base::[]=*/ ['x'];\n                               ^")) in let final void #t211 = super.{self::Base::[]=}(#t208, #t209) in #t209;
+    core::double v11 = let final core::String #t212 = "x" in let final core::double #t213 = super.{self::Base::[]}(#t212) in let final void #t214 = super.{self::Base::[]=}(#t212, let final dynamic #t215 = #t213.{core::double::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:115:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v11 = super /*@target=Base::[]=*/ ['x']++;\n                                                                ^"))) in #t213;
   }
   abstract forwarding-stub operator []=(core::String s, generic-covariant-impl core::int v) → void;
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::int v) → void;
@@ -145,17 +145,17 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::int v1 = let final core::String #t209 = "x" in let final core::int #t210 = self::getInt() in let final void #t211 = super.{self::Base::[]=}(#t209, #t210) in #t210;
-    core::num v2 = let final core::String #t212 = "x" in let final core::num #t213 = self::getNum() in let final void #t214 = super.{self::Base::[]=}(#t212, #t213) in #t213;
-    core::double v3 = let final core::String #t215 = "x" in let final core::double #t216 = self::getDouble() in let final void #t217 = super.{self::Base::[]=}(#t215, #t216) in #t216;
-    core::num v4 = let final core::String #t218 = "x" in let final core::double #t219 = super.{self::Base::[]}(#t218) in #t219.{core::num::==}(null) ?{core::num} let final core::int #t220 = self::getInt() in let final void #t221 = super.{self::Base::[]=}(#t218, #t220) in #t220 : #t219;
-    core::num v5 = let final core::String #t222 = "x" in let final core::double #t223 = super.{self::Base::[]}(#t222) in #t223.{core::num::==}(null) ?{core::num} let final core::num #t224 = self::getNum() in let final void #t225 = super.{self::Base::[]=}(#t222, #t224) in #t224 : #t223;
-    core::double v6 = let final core::String #t226 = "x" in let final core::double #t227 = super.{self::Base::[]}(#t226) in #t227.{core::num::==}(null) ?{core::double} let final core::double #t228 = self::getDouble() in let final void #t229 = super.{self::Base::[]=}(#t226, #t228) in #t228 : #t227;
-    core::double v7 = let final core::String #t230 = "x" in let final core::double #t231 = super.{self::Base::[]}(#t230).{core::double::+}(self::getInt()) in let final void #t232 = super.{self::Base::[]=}(#t230, #t231) in #t231;
-    core::double v8 = let final core::String #t233 = "x" in let final core::double #t234 = super.{self::Base::[]}(#t233).{core::double::+}(self::getNum()) in let final void #t235 = super.{self::Base::[]=}(#t233, #t234) in #t234;
-    core::double v9 = let final core::String #t236 = "x" in let final core::double #t237 = super.{self::Base::[]}(#t236).{core::double::+}(self::getDouble()) in let final void #t238 = super.{self::Base::[]=}(#t236, #t237) in #t237;
-    core::double v10 = let final core::String #t239 = "x" in let final core::double #t240 = super.{self::Base::[]}(#t239).{core::double::+}(1) in let final void #t241 = super.{self::Base::[]=}(#t239, #t240) in #t240;
-    core::double v11 = let final core::String #t242 = "x" in let final core::double #t243 = super.{self::Base::[]}(#t242) in let final void #t244 = super.{self::Base::[]=}(#t242, #t243.{core::double::+}(1)) in #t243;
+    core::int v1 = let final core::String #t216 = "x" in let final core::int #t217 = self::getInt() in let final void #t218 = super.{self::Base::[]=}(#t216, #t217) in #t217;
+    core::num v2 = let final core::String #t219 = "x" in let final core::num #t220 = self::getNum() in let final void #t221 = super.{self::Base::[]=}(#t219, #t220) in #t220;
+    core::double v3 = let final core::String #t222 = "x" in let final core::double #t223 = self::getDouble() in let final void #t224 = super.{self::Base::[]=}(#t222, #t223) in #t223;
+    core::num v4 = let final core::String #t225 = "x" in let final core::double #t226 = super.{self::Base::[]}(#t225) in #t226.{core::num::==}(null) ?{core::num} let final core::int #t227 = self::getInt() in let final void #t228 = super.{self::Base::[]=}(#t225, #t227) in #t227 : #t226;
+    core::num v5 = let final core::String #t229 = "x" in let final core::double #t230 = super.{self::Base::[]}(#t229) in #t230.{core::num::==}(null) ?{core::num} let final core::num #t231 = self::getNum() in let final void #t232 = super.{self::Base::[]=}(#t229, #t231) in #t231 : #t230;
+    core::double v6 = let final core::String #t233 = "x" in let final core::double #t234 = super.{self::Base::[]}(#t233) in #t234.{core::num::==}(null) ?{core::double} let final core::double #t235 = self::getDouble() in let final void #t236 = super.{self::Base::[]=}(#t233, #t235) in #t235 : #t234;
+    core::double v7 = let final core::String #t237 = "x" in let final core::double #t238 = super.{self::Base::[]}(#t237).{core::double::+}(self::getInt()) in let final void #t239 = super.{self::Base::[]=}(#t237, #t238) in #t238;
+    core::double v8 = let final core::String #t240 = "x" in let final core::double #t241 = super.{self::Base::[]}(#t240).{core::double::+}(self::getNum()) in let final void #t242 = super.{self::Base::[]=}(#t240, #t241) in #t241;
+    core::double v9 = let final core::String #t243 = "x" in let final core::double #t244 = super.{self::Base::[]}(#t243).{core::double::+}(self::getDouble()) in let final void #t245 = super.{self::Base::[]=}(#t243, #t244) in #t244;
+    core::double v10 = let final core::String #t246 = "x" in let final core::double #t247 = super.{self::Base::[]}(#t246).{core::double::+}(1) in let final void #t248 = super.{self::Base::[]=}(#t246, #t247) in #t247;
+    core::double v11 = let final core::String #t249 = "x" in let final core::double #t250 = super.{self::Base::[]}(#t249) in let final void #t251 = super.{self::Base::[]=}(#t249, #t250.{core::double::+}(1)) in #t250;
   }
   abstract forwarding-stub operator []=(core::String s, generic-covariant-impl core::num v) → void;
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::num v) → void;
@@ -165,15 +165,15 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::num v2 = let final core::String #t245 = "x" in let final core::num #t246 = self::getNum() as{TypeError} core::double in let final void #t247 = super.{self::Base::[]=}(#t245, #t246) in #t246;
-    core::double v3 = let final core::String #t248 = "x" in let final core::double #t249 = self::getDouble() in let final void #t250 = super.{self::Base::[]=}(#t248, #t249) in #t249;
-    core::num v5 = let final core::String #t251 = "x" in let final core::double #t252 = super.{self::Base::[]}(#t251) in #t252.{core::num::==}(null) ?{core::num} let final core::num #t253 = self::getNum() as{TypeError} core::double in let final void #t254 = super.{self::Base::[]=}(#t251, #t253) in #t253 : #t252;
-    core::double v6 = let final core::String #t255 = "x" in let final core::double #t256 = super.{self::Base::[]}(#t255) in #t256.{core::num::==}(null) ?{core::double} let final core::double #t257 = self::getDouble() in let final void #t258 = super.{self::Base::[]=}(#t255, #t257) in #t257 : #t256;
-    core::double v7 = let final core::String #t259 = "x" in let final core::double #t260 = super.{self::Base::[]}(#t259).{core::double::+}(self::getInt()) in let final void #t261 = super.{self::Base::[]=}(#t259, #t260) in #t260;
-    core::double v8 = let final core::String #t262 = "x" in let final core::double #t263 = super.{self::Base::[]}(#t262).{core::double::+}(self::getNum()) in let final void #t264 = super.{self::Base::[]=}(#t262, #t263) in #t263;
-    core::double v9 = let final core::String #t265 = "x" in let final core::double #t266 = super.{self::Base::[]}(#t265).{core::double::+}(self::getDouble()) in let final void #t267 = super.{self::Base::[]=}(#t265, #t266) in #t266;
-    core::double v10 = let final core::String #t268 = "x" in let final core::double #t269 = super.{self::Base::[]}(#t268).{core::double::+}(1) in let final void #t270 = super.{self::Base::[]=}(#t268, #t269) in #t269;
-    core::double v11 = let final core::String #t271 = "x" in let final core::double #t272 = super.{self::Base::[]}(#t271) in let final void #t273 = super.{self::Base::[]=}(#t271, #t272.{core::double::+}(1)) in #t272;
+    core::num v2 = let final core::String #t252 = "x" in let final core::num #t253 = self::getNum() as{TypeError} core::double in let final void #t254 = super.{self::Base::[]=}(#t252, #t253) in #t253;
+    core::double v3 = let final core::String #t255 = "x" in let final core::double #t256 = self::getDouble() in let final void #t257 = super.{self::Base::[]=}(#t255, #t256) in #t256;
+    core::num v5 = let final core::String #t258 = "x" in let final core::double #t259 = super.{self::Base::[]}(#t258) in #t259.{core::num::==}(null) ?{core::num} let final core::num #t260 = self::getNum() as{TypeError} core::double in let final void #t261 = super.{self::Base::[]=}(#t258, #t260) in #t260 : #t259;
+    core::double v6 = let final core::String #t262 = "x" in let final core::double #t263 = super.{self::Base::[]}(#t262) in #t263.{core::num::==}(null) ?{core::double} let final core::double #t264 = self::getDouble() in let final void #t265 = super.{self::Base::[]=}(#t262, #t264) in #t264 : #t263;
+    core::double v7 = let final core::String #t266 = "x" in let final core::double #t267 = super.{self::Base::[]}(#t266).{core::double::+}(self::getInt()) in let final void #t268 = super.{self::Base::[]=}(#t266, #t267) in #t267;
+    core::double v8 = let final core::String #t269 = "x" in let final core::double #t270 = super.{self::Base::[]}(#t269).{core::double::+}(self::getNum()) in let final void #t271 = super.{self::Base::[]=}(#t269, #t270) in #t270;
+    core::double v9 = let final core::String #t272 = "x" in let final core::double #t273 = super.{self::Base::[]}(#t272).{core::double::+}(self::getDouble()) in let final void #t274 = super.{self::Base::[]=}(#t272, #t273) in #t273;
+    core::double v10 = let final core::String #t275 = "x" in let final core::double #t276 = super.{self::Base::[]}(#t275).{core::double::+}(1) in let final void #t277 = super.{self::Base::[]=}(#t275, #t276) in #t276;
+    core::double v11 = let final core::String #t278 = "x" in let final core::double #t279 = super.{self::Base::[]}(#t278) in let final void #t280 = super.{self::Base::[]=}(#t278, #t279.{core::double::+}(1)) in #t279;
   }
   abstract forwarding-stub operator []=(core::String s, generic-covariant-impl core::double v) → void;
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::double v) → void;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
index ee2ae9b..8c8778a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
@@ -50,11 +50,11 @@
     core::double v3 = let final core::String #t66 = "x" in let final core::double #t67 = self::getDouble() in let final void #t68 = this.{self::Test3::[]=}(#t66, #t67) in #t67;
     core::num v5 = let final core::String #t69 = "x" in let final core::int #t70 = this.{self::Test3::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num} let final core::num #t71 = self::getNum() as{TypeError} core::double in let final void #t72 = this.{self::Test3::[]=}(#t69, #t71) in #t71 : #t70;
     core::num v6 = let final core::String #t73 = "x" in let final core::int #t74 = this.{self::Test3::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num} let final core::double #t75 = self::getDouble() in let final void #t76 = this.{self::Test3::[]=}(#t73, #t75) in #t75 : #t74;
-    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = this.{self::Test3::[]}(#t77).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t79 = this.{self::Test3::[]=}(#t77, #t78) in #t78;
-    core::num v8 = let final core::String #t80 = "x" in let final core::num #t81 = this.{self::Test3::[]}(#t80).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t82 = this.{self::Test3::[]=}(#t80, #t81) in #t81;
-    core::double v9 = let final core::String #t83 = "x" in let final core::double #t84 = this.{self::Test3::[]}(#t83).{core::num::+}(self::getDouble()) in let final void #t85 = this.{self::Test3::[]=}(#t83, #t84) in #t84;
-    core::int v10 = let final core::String #t86 = "x" in let final core::int #t87 = this.{self::Test3::[]}(#t86).{core::num::+}(1) as{TypeError} core::double in let final void #t88 = this.{self::Test3::[]=}(#t86, #t87) in #t87;
-    core::int v11 = let final core::String #t89 = "x" in let final core::int #t90 = this.{self::Test3::[]}(#t89) in let final void #t91 = this.{self::Test3::[]=}(#t89, #t90.{core::num::+}(1) as{TypeError} core::double) in #t90;
+    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final dynamic #t79 = this.{self::Test3::[]}(#t77).{core::num::+}(self::getInt()) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:56:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n    var /*@type=int*/ v7 = this /*@target=Test3::[]=*/ ['x'] += getInt();\n                                                             ^")) in let final void #t80 = this.{self::Test3::[]=}(#t77, #t78) in #t78;
+    core::num v8 = let final core::String #t81 = "x" in let final core::num #t82 = this.{self::Test3::[]}(#t81).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t83 = this.{self::Test3::[]=}(#t81, #t82) in #t82;
+    core::double v9 = let final core::String #t84 = "x" in let final core::double #t85 = this.{self::Test3::[]}(#t84).{core::num::+}(self::getDouble()) in let final void #t86 = this.{self::Test3::[]=}(#t84, #t85) in #t85;
+    core::int v10 = let final core::String #t87 = "x" in let final core::int #t88 = let final dynamic #t89 = this.{self::Test3::[]}(#t87).{core::num::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:59:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n    var /*@type=int*/ v10 = ++this /*@target=Test3::[]=*/ ['x'];\n                            ^")) in let final void #t90 = this.{self::Test3::[]=}(#t87, #t88) in #t88;
+    core::int v11 = let final core::String #t91 = "x" in let final core::int #t92 = this.{self::Test3::[]}(#t91) in let final void #t93 = this.{self::Test3::[]=}(#t91, let final dynamic #t94 = #t92.{core::num::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:60:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n    var /*@type=int*/ v11 = this /*@target=Test3::[]=*/ ['x']++;\n                                                             ^"))) in #t92;
   }
 }
 abstract class Test4 extends core::Object {
@@ -64,14 +64,14 @@
   abstract operator [](core::String s) → core::num;
   abstract operator []=(core::String s, core::int v) → void;
   method test() → void {
-    core::int v1 = let final core::String #t92 = "x" in let final core::int #t93 = self::getInt() in let final void #t94 = this.{self::Test4::[]=}(#t92, #t93) in #t93;
-    core::num v2 = let final core::String #t95 = "x" in let final core::num #t96 = self::getNum() as{TypeError} core::int in let final void #t97 = this.{self::Test4::[]=}(#t95, #t96) in #t96;
-    core::num v4 = let final core::String #t98 = "x" in let final core::num #t99 = this.{self::Test4::[]}(#t98) in #t99.{core::num::==}(null) ?{core::num} let final core::int #t100 = self::getInt() in let final void #t101 = this.{self::Test4::[]=}(#t98, #t100) in #t100 : #t99;
-    core::num v5 = let final core::String #t102 = "x" in let final core::num #t103 = this.{self::Test4::[]}(#t102) in #t103.{core::num::==}(null) ?{core::num} let final core::num #t104 = self::getNum() as{TypeError} core::int in let final void #t105 = this.{self::Test4::[]=}(#t102, #t104) in #t104 : #t103;
-    core::num v7 = let final core::String #t106 = "x" in let final core::num #t107 = this.{self::Test4::[]}(#t106).{core::num::+}(self::getInt()) as{TypeError} core::int in let final void #t108 = this.{self::Test4::[]=}(#t106, #t107) in #t107;
-    core::num v8 = let final core::String #t109 = "x" in let final core::num #t110 = this.{self::Test4::[]}(#t109).{core::num::+}(self::getNum()) as{TypeError} core::int in let final void #t111 = this.{self::Test4::[]=}(#t109, #t110) in #t110;
-    core::num v10 = let final core::String #t112 = "x" in let final core::num #t113 = this.{self::Test4::[]}(#t112).{core::num::+}(1) as{TypeError} core::int in let final void #t114 = this.{self::Test4::[]=}(#t112, #t113) in #t113;
-    core::num v11 = let final core::String #t115 = "x" in let final core::num #t116 = this.{self::Test4::[]}(#t115) in let final void #t117 = this.{self::Test4::[]=}(#t115, #t116.{core::num::+}(1) as{TypeError} core::int) in #t116;
+    core::int v1 = let final core::String #t95 = "x" in let final core::int #t96 = self::getInt() in let final void #t97 = this.{self::Test4::[]=}(#t95, #t96) in #t96;
+    core::num v2 = let final core::String #t98 = "x" in let final core::num #t99 = self::getNum() as{TypeError} core::int in let final void #t100 = this.{self::Test4::[]=}(#t98, #t99) in #t99;
+    core::num v4 = let final core::String #t101 = "x" in let final core::num #t102 = this.{self::Test4::[]}(#t101) in #t102.{core::num::==}(null) ?{core::num} let final core::int #t103 = self::getInt() in let final void #t104 = this.{self::Test4::[]=}(#t101, #t103) in #t103 : #t102;
+    core::num v5 = let final core::String #t105 = "x" in let final core::num #t106 = this.{self::Test4::[]}(#t105) in #t106.{core::num::==}(null) ?{core::num} let final core::num #t107 = self::getNum() as{TypeError} core::int in let final void #t108 = this.{self::Test4::[]=}(#t105, #t107) in #t107 : #t106;
+    core::num v7 = let final core::String #t109 = "x" in let final core::num #t110 = this.{self::Test4::[]}(#t109).{core::num::+}(self::getInt()) as{TypeError} core::int in let final void #t111 = this.{self::Test4::[]=}(#t109, #t110) in #t110;
+    core::num v8 = let final core::String #t112 = "x" in let final core::num #t113 = this.{self::Test4::[]}(#t112).{core::num::+}(self::getNum()) as{TypeError} core::int in let final void #t114 = this.{self::Test4::[]=}(#t112, #t113) in #t113;
+    core::num v10 = let final core::String #t115 = "x" in let final core::num #t116 = this.{self::Test4::[]}(#t115).{core::num::+}(1) as{TypeError} core::int in let final void #t117 = this.{self::Test4::[]=}(#t115, #t116) in #t116;
+    core::num v11 = let final core::String #t118 = "x" in let final core::num #t119 = this.{self::Test4::[]}(#t118) in let final void #t120 = this.{self::Test4::[]=}(#t118, #t119.{core::num::+}(1) as{TypeError} core::int) in #t119;
   }
 }
 abstract class Test5 extends core::Object {
@@ -81,17 +81,17 @@
   abstract operator [](core::String s) → core::num;
   abstract operator []=(core::String s, core::num v) → void;
   method test() → void {
-    core::int v1 = let final core::String #t118 = "x" in let final core::int #t119 = self::getInt() in let final void #t120 = this.{self::Test5::[]=}(#t118, #t119) in #t119;
-    core::num v2 = let final core::String #t121 = "x" in let final core::num #t122 = self::getNum() in let final void #t123 = this.{self::Test5::[]=}(#t121, #t122) in #t122;
-    core::double v3 = let final core::String #t124 = "x" in let final core::double #t125 = self::getDouble() in let final void #t126 = this.{self::Test5::[]=}(#t124, #t125) in #t125;
-    core::num v4 = let final core::String #t127 = "x" in let final core::num #t128 = this.{self::Test5::[]}(#t127) in #t128.{core::num::==}(null) ?{core::num} let final core::int #t129 = self::getInt() in let final void #t130 = this.{self::Test5::[]=}(#t127, #t129) in #t129 : #t128;
-    core::num v5 = let final core::String #t131 = "x" in let final core::num #t132 = this.{self::Test5::[]}(#t131) in #t132.{core::num::==}(null) ?{core::num} let final core::num #t133 = self::getNum() in let final void #t134 = this.{self::Test5::[]=}(#t131, #t133) in #t133 : #t132;
-    core::num v6 = let final core::String #t135 = "x" in let final core::num #t136 = this.{self::Test5::[]}(#t135) in #t136.{core::num::==}(null) ?{core::num} let final core::double #t137 = self::getDouble() in let final void #t138 = this.{self::Test5::[]=}(#t135, #t137) in #t137 : #t136;
-    core::num v7 = let final core::String #t139 = "x" in let final core::num #t140 = this.{self::Test5::[]}(#t139).{core::num::+}(self::getInt()) in let final void #t141 = this.{self::Test5::[]=}(#t139, #t140) in #t140;
-    core::num v8 = let final core::String #t142 = "x" in let final core::num #t143 = this.{self::Test5::[]}(#t142).{core::num::+}(self::getNum()) in let final void #t144 = this.{self::Test5::[]=}(#t142, #t143) in #t143;
-    core::num v9 = let final core::String #t145 = "x" in let final core::num #t146 = this.{self::Test5::[]}(#t145).{core::num::+}(self::getDouble()) in let final void #t147 = this.{self::Test5::[]=}(#t145, #t146) in #t146;
-    core::num v10 = let final core::String #t148 = "x" in let final core::num #t149 = this.{self::Test5::[]}(#t148).{core::num::+}(1) in let final void #t150 = this.{self::Test5::[]=}(#t148, #t149) in #t149;
-    core::num v11 = let final core::String #t151 = "x" in let final core::num #t152 = this.{self::Test5::[]}(#t151) in let final void #t153 = this.{self::Test5::[]=}(#t151, #t152.{core::num::+}(1)) in #t152;
+    core::int v1 = let final core::String #t121 = "x" in let final core::int #t122 = self::getInt() in let final void #t123 = this.{self::Test5::[]=}(#t121, #t122) in #t122;
+    core::num v2 = let final core::String #t124 = "x" in let final core::num #t125 = self::getNum() in let final void #t126 = this.{self::Test5::[]=}(#t124, #t125) in #t125;
+    core::double v3 = let final core::String #t127 = "x" in let final core::double #t128 = self::getDouble() in let final void #t129 = this.{self::Test5::[]=}(#t127, #t128) in #t128;
+    core::num v4 = let final core::String #t130 = "x" in let final core::num #t131 = this.{self::Test5::[]}(#t130) in #t131.{core::num::==}(null) ?{core::num} let final core::int #t132 = self::getInt() in let final void #t133 = this.{self::Test5::[]=}(#t130, #t132) in #t132 : #t131;
+    core::num v5 = let final core::String #t134 = "x" in let final core::num #t135 = this.{self::Test5::[]}(#t134) in #t135.{core::num::==}(null) ?{core::num} let final core::num #t136 = self::getNum() in let final void #t137 = this.{self::Test5::[]=}(#t134, #t136) in #t136 : #t135;
+    core::num v6 = let final core::String #t138 = "x" in let final core::num #t139 = this.{self::Test5::[]}(#t138) in #t139.{core::num::==}(null) ?{core::num} let final core::double #t140 = self::getDouble() in let final void #t141 = this.{self::Test5::[]=}(#t138, #t140) in #t140 : #t139;
+    core::num v7 = let final core::String #t142 = "x" in let final core::num #t143 = this.{self::Test5::[]}(#t142).{core::num::+}(self::getInt()) in let final void #t144 = this.{self::Test5::[]=}(#t142, #t143) in #t143;
+    core::num v8 = let final core::String #t145 = "x" in let final core::num #t146 = this.{self::Test5::[]}(#t145).{core::num::+}(self::getNum()) in let final void #t147 = this.{self::Test5::[]=}(#t145, #t146) in #t146;
+    core::num v9 = let final core::String #t148 = "x" in let final core::num #t149 = this.{self::Test5::[]}(#t148).{core::num::+}(self::getDouble()) in let final void #t150 = this.{self::Test5::[]=}(#t148, #t149) in #t149;
+    core::num v10 = let final core::String #t151 = "x" in let final core::num #t152 = this.{self::Test5::[]}(#t151).{core::num::+}(1) in let final void #t153 = this.{self::Test5::[]=}(#t151, #t152) in #t152;
+    core::num v11 = let final core::String #t154 = "x" in let final core::num #t155 = this.{self::Test5::[]}(#t154) in let final void #t156 = this.{self::Test5::[]=}(#t154, #t155.{core::num::+}(1)) in #t155;
   }
 }
 abstract class Test6 extends core::Object {
@@ -101,15 +101,15 @@
   abstract operator [](core::String s) → core::num;
   abstract operator []=(core::String s, core::double v) → void;
   method test() → void {
-    core::num v2 = let final core::String #t154 = "x" in let final core::num #t155 = self::getNum() as{TypeError} core::double in let final void #t156 = this.{self::Test6::[]=}(#t154, #t155) in #t155;
-    core::double v3 = let final core::String #t157 = "x" in let final core::double #t158 = self::getDouble() in let final void #t159 = this.{self::Test6::[]=}(#t157, #t158) in #t158;
-    core::num v5 = let final core::String #t160 = "x" in let final core::num #t161 = this.{self::Test6::[]}(#t160) in #t161.{core::num::==}(null) ?{core::num} let final core::num #t162 = self::getNum() as{TypeError} core::double in let final void #t163 = this.{self::Test6::[]=}(#t160, #t162) in #t162 : #t161;
-    core::num v6 = let final core::String #t164 = "x" in let final core::num #t165 = this.{self::Test6::[]}(#t164) in #t165.{core::num::==}(null) ?{core::num} let final core::double #t166 = self::getDouble() in let final void #t167 = this.{self::Test6::[]=}(#t164, #t166) in #t166 : #t165;
-    core::num v7 = let final core::String #t168 = "x" in let final core::num #t169 = this.{self::Test6::[]}(#t168).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t170 = this.{self::Test6::[]=}(#t168, #t169) in #t169;
-    core::num v8 = let final core::String #t171 = "x" in let final core::num #t172 = this.{self::Test6::[]}(#t171).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t173 = this.{self::Test6::[]=}(#t171, #t172) in #t172;
-    core::num v9 = let final core::String #t174 = "x" in let final core::num #t175 = this.{self::Test6::[]}(#t174).{core::num::+}(self::getDouble()) as{TypeError} core::double in let final void #t176 = this.{self::Test6::[]=}(#t174, #t175) in #t175;
-    core::num v10 = let final core::String #t177 = "x" in let final core::num #t178 = this.{self::Test6::[]}(#t177).{core::num::+}(1) as{TypeError} core::double in let final void #t179 = this.{self::Test6::[]=}(#t177, #t178) in #t178;
-    core::num v11 = let final core::String #t180 = "x" in let final core::num #t181 = this.{self::Test6::[]}(#t180) in let final void #t182 = this.{self::Test6::[]=}(#t180, #t181.{core::num::+}(1) as{TypeError} core::double) in #t181;
+    core::num v2 = let final core::String #t157 = "x" in let final core::num #t158 = self::getNum() as{TypeError} core::double in let final void #t159 = this.{self::Test6::[]=}(#t157, #t158) in #t158;
+    core::double v3 = let final core::String #t160 = "x" in let final core::double #t161 = self::getDouble() in let final void #t162 = this.{self::Test6::[]=}(#t160, #t161) in #t161;
+    core::num v5 = let final core::String #t163 = "x" in let final core::num #t164 = this.{self::Test6::[]}(#t163) in #t164.{core::num::==}(null) ?{core::num} let final core::num #t165 = self::getNum() as{TypeError} core::double in let final void #t166 = this.{self::Test6::[]=}(#t163, #t165) in #t165 : #t164;
+    core::num v6 = let final core::String #t167 = "x" in let final core::num #t168 = this.{self::Test6::[]}(#t167) in #t168.{core::num::==}(null) ?{core::num} let final core::double #t169 = self::getDouble() in let final void #t170 = this.{self::Test6::[]=}(#t167, #t169) in #t169 : #t168;
+    core::num v7 = let final core::String #t171 = "x" in let final core::num #t172 = this.{self::Test6::[]}(#t171).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t173 = this.{self::Test6::[]=}(#t171, #t172) in #t172;
+    core::num v8 = let final core::String #t174 = "x" in let final core::num #t175 = this.{self::Test6::[]}(#t174).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t176 = this.{self::Test6::[]=}(#t174, #t175) in #t175;
+    core::num v9 = let final core::String #t177 = "x" in let final core::num #t178 = this.{self::Test6::[]}(#t177).{core::num::+}(self::getDouble()) as{TypeError} core::double in let final void #t179 = this.{self::Test6::[]=}(#t177, #t178) in #t178;
+    core::num v10 = let final core::String #t180 = "x" in let final core::num #t181 = this.{self::Test6::[]}(#t180).{core::num::+}(1) as{TypeError} core::double in let final void #t182 = this.{self::Test6::[]=}(#t180, #t181) in #t181;
+    core::num v11 = let final core::String #t183 = "x" in let final core::num #t184 = this.{self::Test6::[]}(#t183) in let final void #t185 = this.{self::Test6::[]=}(#t183, #t184.{core::num::+}(1) as{TypeError} core::double) in #t184;
   }
 }
 abstract class Test7 extends core::Object {
@@ -119,14 +119,14 @@
   abstract operator [](core::String s) → core::double;
   abstract operator []=(core::String s, core::int v) → void;
   method test() → void {
-    core::int v1 = let final core::String #t183 = "x" in let final core::int #t184 = self::getInt() in let final void #t185 = this.{self::Test7::[]=}(#t183, #t184) in #t184;
-    core::num v2 = let final core::String #t186 = "x" in let final core::num #t187 = self::getNum() as{TypeError} core::int in let final void #t188 = this.{self::Test7::[]=}(#t186, #t187) in #t187;
-    core::num v4 = let final core::String #t189 = "x" in let final core::double #t190 = this.{self::Test7::[]}(#t189) in #t190.{core::num::==}(null) ?{core::num} let final core::int #t191 = self::getInt() in let final void #t192 = this.{self::Test7::[]=}(#t189, #t191) in #t191 : #t190;
-    core::num v5 = let final core::String #t193 = "x" in let final core::double #t194 = this.{self::Test7::[]}(#t193) in #t194.{core::num::==}(null) ?{core::num} let final core::num #t195 = self::getNum() as{TypeError} core::int in let final void #t196 = this.{self::Test7::[]=}(#t193, #t195) in #t195 : #t194;
-    core::double v7 = let final core::String #t197 = "x" in let final core::double #t198 = this.{self::Test7::[]}(#t197).{core::double::+}(self::getInt()) as{TypeError} core::int in let final void #t199 = this.{self::Test7::[]=}(#t197, #t198) in #t198;
-    core::double v8 = let final core::String #t200 = "x" in let final core::double #t201 = this.{self::Test7::[]}(#t200).{core::double::+}(self::getNum()) as{TypeError} core::int in let final void #t202 = this.{self::Test7::[]=}(#t200, #t201) in #t201;
-    core::double v10 = let final core::String #t203 = "x" in let final core::double #t204 = this.{self::Test7::[]}(#t203).{core::double::+}(1) as{TypeError} core::int in let final void #t205 = this.{self::Test7::[]=}(#t203, #t204) in #t204;
-    core::double v11 = let final core::String #t206 = "x" in let final core::double #t207 = this.{self::Test7::[]}(#t206) in let final void #t208 = this.{self::Test7::[]=}(#t206, #t207.{core::double::+}(1) as{TypeError} core::int) in #t207;
+    core::int v1 = let final core::String #t186 = "x" in let final core::int #t187 = self::getInt() in let final void #t188 = this.{self::Test7::[]=}(#t186, #t187) in #t187;
+    core::num v2 = let final core::String #t189 = "x" in let final core::num #t190 = self::getNum() as{TypeError} core::int in let final void #t191 = this.{self::Test7::[]=}(#t189, #t190) in #t190;
+    core::num v4 = let final core::String #t192 = "x" in let final core::double #t193 = this.{self::Test7::[]}(#t192) in #t193.{core::num::==}(null) ?{core::num} let final core::int #t194 = self::getInt() in let final void #t195 = this.{self::Test7::[]=}(#t192, #t194) in #t194 : #t193;
+    core::num v5 = let final core::String #t196 = "x" in let final core::double #t197 = this.{self::Test7::[]}(#t196) in #t197.{core::num::==}(null) ?{core::num} let final core::num #t198 = self::getNum() as{TypeError} core::int in let final void #t199 = this.{self::Test7::[]=}(#t196, #t198) in #t198 : #t197;
+    core::double v7 = let final core::String #t200 = "x" in let final core::double #t201 = let final dynamic #t202 = this.{self::Test7::[]}(#t200).{core::double::+}(self::getInt()) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:125:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v7 = this /*@target=Test7::[]=*/ ['x'] += getInt();\n                                                                ^")) in let final void #t203 = this.{self::Test7::[]=}(#t200, #t201) in #t201;
+    core::double v8 = let final core::String #t204 = "x" in let final core::double #t205 = let final dynamic #t206 = this.{self::Test7::[]}(#t204).{core::double::+}(self::getNum()) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v8 = this /*@target=Test7::[]=*/ ['x'] += getNum();\n                                                                ^")) in let final void #t207 = this.{self::Test7::[]=}(#t204, #t205) in #t205;
+    core::double v10 = let final core::String #t208 = "x" in let final core::double #t209 = let final dynamic #t210 = this.{self::Test7::[]}(#t208).{core::double::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:127:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v10 = ++this /*@target=Test7::[]=*/ ['x'];\n                               ^")) in let final void #t211 = this.{self::Test7::[]=}(#t208, #t209) in #t209;
+    core::double v11 = let final core::String #t212 = "x" in let final core::double #t213 = this.{self::Test7::[]}(#t212) in let final void #t214 = this.{self::Test7::[]=}(#t212, let final dynamic #t215 = #t213.{core::double::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:128:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v11 = this /*@target=Test7::[]=*/ ['x']++;\n                                                                ^"))) in #t213;
   }
 }
 abstract class Test8 extends core::Object {
@@ -136,17 +136,17 @@
   abstract operator [](core::String s) → core::double;
   abstract operator []=(core::String s, core::num v) → void;
   method test() → void {
-    core::int v1 = let final core::String #t209 = "x" in let final core::int #t210 = self::getInt() in let final void #t211 = this.{self::Test8::[]=}(#t209, #t210) in #t210;
-    core::num v2 = let final core::String #t212 = "x" in let final core::num #t213 = self::getNum() in let final void #t214 = this.{self::Test8::[]=}(#t212, #t213) in #t213;
-    core::double v3 = let final core::String #t215 = "x" in let final core::double #t216 = self::getDouble() in let final void #t217 = this.{self::Test8::[]=}(#t215, #t216) in #t216;
-    core::num v4 = let final core::String #t218 = "x" in let final core::double #t219 = this.{self::Test8::[]}(#t218) in #t219.{core::num::==}(null) ?{core::num} let final core::int #t220 = self::getInt() in let final void #t221 = this.{self::Test8::[]=}(#t218, #t220) in #t220 : #t219;
-    core::num v5 = let final core::String #t222 = "x" in let final core::double #t223 = this.{self::Test8::[]}(#t222) in #t223.{core::num::==}(null) ?{core::num} let final core::num #t224 = self::getNum() in let final void #t225 = this.{self::Test8::[]=}(#t222, #t224) in #t224 : #t223;
-    core::double v6 = let final core::String #t226 = "x" in let final core::double #t227 = this.{self::Test8::[]}(#t226) in #t227.{core::num::==}(null) ?{core::double} let final core::double #t228 = self::getDouble() in let final void #t229 = this.{self::Test8::[]=}(#t226, #t228) in #t228 : #t227;
-    core::double v7 = let final core::String #t230 = "x" in let final core::double #t231 = this.{self::Test8::[]}(#t230).{core::double::+}(self::getInt()) in let final void #t232 = this.{self::Test8::[]=}(#t230, #t231) in #t231;
-    core::double v8 = let final core::String #t233 = "x" in let final core::double #t234 = this.{self::Test8::[]}(#t233).{core::double::+}(self::getNum()) in let final void #t235 = this.{self::Test8::[]=}(#t233, #t234) in #t234;
-    core::double v9 = let final core::String #t236 = "x" in let final core::double #t237 = this.{self::Test8::[]}(#t236).{core::double::+}(self::getDouble()) in let final void #t238 = this.{self::Test8::[]=}(#t236, #t237) in #t237;
-    core::double v10 = let final core::String #t239 = "x" in let final core::double #t240 = this.{self::Test8::[]}(#t239).{core::double::+}(1) in let final void #t241 = this.{self::Test8::[]=}(#t239, #t240) in #t240;
-    core::double v11 = let final core::String #t242 = "x" in let final core::double #t243 = this.{self::Test8::[]}(#t242) in let final void #t244 = this.{self::Test8::[]=}(#t242, #t243.{core::double::+}(1)) in #t243;
+    core::int v1 = let final core::String #t216 = "x" in let final core::int #t217 = self::getInt() in let final void #t218 = this.{self::Test8::[]=}(#t216, #t217) in #t217;
+    core::num v2 = let final core::String #t219 = "x" in let final core::num #t220 = self::getNum() in let final void #t221 = this.{self::Test8::[]=}(#t219, #t220) in #t220;
+    core::double v3 = let final core::String #t222 = "x" in let final core::double #t223 = self::getDouble() in let final void #t224 = this.{self::Test8::[]=}(#t222, #t223) in #t223;
+    core::num v4 = let final core::String #t225 = "x" in let final core::double #t226 = this.{self::Test8::[]}(#t225) in #t226.{core::num::==}(null) ?{core::num} let final core::int #t227 = self::getInt() in let final void #t228 = this.{self::Test8::[]=}(#t225, #t227) in #t227 : #t226;
+    core::num v5 = let final core::String #t229 = "x" in let final core::double #t230 = this.{self::Test8::[]}(#t229) in #t230.{core::num::==}(null) ?{core::num} let final core::num #t231 = self::getNum() in let final void #t232 = this.{self::Test8::[]=}(#t229, #t231) in #t231 : #t230;
+    core::double v6 = let final core::String #t233 = "x" in let final core::double #t234 = this.{self::Test8::[]}(#t233) in #t234.{core::num::==}(null) ?{core::double} let final core::double #t235 = self::getDouble() in let final void #t236 = this.{self::Test8::[]=}(#t233, #t235) in #t235 : #t234;
+    core::double v7 = let final core::String #t237 = "x" in let final core::double #t238 = this.{self::Test8::[]}(#t237).{core::double::+}(self::getInt()) in let final void #t239 = this.{self::Test8::[]=}(#t237, #t238) in #t238;
+    core::double v8 = let final core::String #t240 = "x" in let final core::double #t241 = this.{self::Test8::[]}(#t240).{core::double::+}(self::getNum()) in let final void #t242 = this.{self::Test8::[]=}(#t240, #t241) in #t241;
+    core::double v9 = let final core::String #t243 = "x" in let final core::double #t244 = this.{self::Test8::[]}(#t243).{core::double::+}(self::getDouble()) in let final void #t245 = this.{self::Test8::[]=}(#t243, #t244) in #t244;
+    core::double v10 = let final core::String #t246 = "x" in let final core::double #t247 = this.{self::Test8::[]}(#t246).{core::double::+}(1) in let final void #t248 = this.{self::Test8::[]=}(#t246, #t247) in #t247;
+    core::double v11 = let final core::String #t249 = "x" in let final core::double #t250 = this.{self::Test8::[]}(#t249) in let final void #t251 = this.{self::Test8::[]=}(#t249, #t250.{core::double::+}(1)) in #t250;
   }
 }
 abstract class Test9 extends core::Object {
@@ -156,15 +156,15 @@
   abstract operator [](core::String s) → core::double;
   abstract operator []=(core::String s, core::double v) → void;
   method test() → void {
-    core::num v2 = let final core::String #t245 = "x" in let final core::num #t246 = self::getNum() as{TypeError} core::double in let final void #t247 = this.{self::Test9::[]=}(#t245, #t246) in #t246;
-    core::double v3 = let final core::String #t248 = "x" in let final core::double #t249 = self::getDouble() in let final void #t250 = this.{self::Test9::[]=}(#t248, #t249) in #t249;
-    core::num v5 = let final core::String #t251 = "x" in let final core::double #t252 = this.{self::Test9::[]}(#t251) in #t252.{core::num::==}(null) ?{core::num} let final core::num #t253 = self::getNum() as{TypeError} core::double in let final void #t254 = this.{self::Test9::[]=}(#t251, #t253) in #t253 : #t252;
-    core::double v6 = let final core::String #t255 = "x" in let final core::double #t256 = this.{self::Test9::[]}(#t255) in #t256.{core::num::==}(null) ?{core::double} let final core::double #t257 = self::getDouble() in let final void #t258 = this.{self::Test9::[]=}(#t255, #t257) in #t257 : #t256;
-    core::double v7 = let final core::String #t259 = "x" in let final core::double #t260 = this.{self::Test9::[]}(#t259).{core::double::+}(self::getInt()) in let final void #t261 = this.{self::Test9::[]=}(#t259, #t260) in #t260;
-    core::double v8 = let final core::String #t262 = "x" in let final core::double #t263 = this.{self::Test9::[]}(#t262).{core::double::+}(self::getNum()) in let final void #t264 = this.{self::Test9::[]=}(#t262, #t263) in #t263;
-    core::double v9 = let final core::String #t265 = "x" in let final core::double #t266 = this.{self::Test9::[]}(#t265).{core::double::+}(self::getDouble()) in let final void #t267 = this.{self::Test9::[]=}(#t265, #t266) in #t266;
-    core::double v10 = let final core::String #t268 = "x" in let final core::double #t269 = this.{self::Test9::[]}(#t268).{core::double::+}(1) in let final void #t270 = this.{self::Test9::[]=}(#t268, #t269) in #t269;
-    core::double v11 = let final core::String #t271 = "x" in let final core::double #t272 = this.{self::Test9::[]}(#t271) in let final void #t273 = this.{self::Test9::[]=}(#t271, #t272.{core::double::+}(1)) in #t272;
+    core::num v2 = let final core::String #t252 = "x" in let final core::num #t253 = self::getNum() as{TypeError} core::double in let final void #t254 = this.{self::Test9::[]=}(#t252, #t253) in #t253;
+    core::double v3 = let final core::String #t255 = "x" in let final core::double #t256 = self::getDouble() in let final void #t257 = this.{self::Test9::[]=}(#t255, #t256) in #t256;
+    core::num v5 = let final core::String #t258 = "x" in let final core::double #t259 = this.{self::Test9::[]}(#t258) in #t259.{core::num::==}(null) ?{core::num} let final core::num #t260 = self::getNum() as{TypeError} core::double in let final void #t261 = this.{self::Test9::[]=}(#t258, #t260) in #t260 : #t259;
+    core::double v6 = let final core::String #t262 = "x" in let final core::double #t263 = this.{self::Test9::[]}(#t262) in #t263.{core::num::==}(null) ?{core::double} let final core::double #t264 = self::getDouble() in let final void #t265 = this.{self::Test9::[]=}(#t262, #t264) in #t264 : #t263;
+    core::double v7 = let final core::String #t266 = "x" in let final core::double #t267 = this.{self::Test9::[]}(#t266).{core::double::+}(self::getInt()) in let final void #t268 = this.{self::Test9::[]=}(#t266, #t267) in #t267;
+    core::double v8 = let final core::String #t269 = "x" in let final core::double #t270 = this.{self::Test9::[]}(#t269).{core::double::+}(self::getNum()) in let final void #t271 = this.{self::Test9::[]=}(#t269, #t270) in #t270;
+    core::double v9 = let final core::String #t272 = "x" in let final core::double #t273 = this.{self::Test9::[]}(#t272).{core::double::+}(self::getDouble()) in let final void #t274 = this.{self::Test9::[]=}(#t272, #t273) in #t273;
+    core::double v10 = let final core::String #t275 = "x" in let final core::double #t276 = this.{self::Test9::[]}(#t275).{core::double::+}(1) in let final void #t277 = this.{self::Test9::[]=}(#t275, #t276) in #t276;
+    core::double v11 = let final core::String #t278 = "x" in let final core::double #t279 = this.{self::Test9::[]}(#t278) in let final void #t280 = this.{self::Test9::[]=}(#t278, #t279.{core::double::+}(1)) in #t279;
   }
 }
 static method getInt() → core::int
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
index c956b70..de5b829 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
@@ -43,78 +43,78 @@
   core::double v3 = let final self::Test<core::int, core::double> #t86 = t in let final core::String #t87 = "x" in let final core::double #t88 = self::getDouble() in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88) in #t88;
   core::num v5 = let final self::Test<core::int, core::double> #t90 = t in let final core::String #t91 = "x" in let final core::int #t92 = #t90.{self::Test::[]}(#t91) in #t92.{core::num::==}(null) ?{core::num} let final core::num #t93 = self::getNum() as{TypeError} core::double in let final void #t94 = #t90.{self::Test::[]=}(#t91, #t93) in #t93 : #t92;
   core::num v6 = let final self::Test<core::int, core::double> #t95 = t in let final core::String #t96 = "x" in let final core::int #t97 = #t95.{self::Test::[]}(#t96) in #t97.{core::num::==}(null) ?{core::num} let final core::double #t98 = self::getDouble() in let final void #t99 = #t95.{self::Test::[]=}(#t96, #t98) in #t98 : #t97;
-  core::int v7 = let final self::Test<core::int, core::double> #t100 = t in let final core::String #t101 = "x" in let final core::int #t102 = #t100.{self::Test::[]}(#t101).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t103 = #t100.{self::Test::[]=}(#t101, #t102) in #t102;
-  core::num v8 = let final self::Test<core::int, core::double> #t104 = t in let final core::String #t105 = "x" in let final core::num #t106 = #t104.{self::Test::[]}(#t105).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t107 = #t104.{self::Test::[]=}(#t105, #t106) in #t106;
-  core::double v9 = let final self::Test<core::int, core::double> #t108 = t in let final core::String #t109 = "x" in let final core::double #t110 = #t108.{self::Test::[]}(#t109).{core::num::+}(self::getDouble()) in let final void #t111 = #t108.{self::Test::[]=}(#t109, #t110) in #t110;
-  core::int v10 = let final self::Test<core::int, core::double> #t112 = t in let final core::String #t113 = "x" in let final core::int #t114 = #t112.{self::Test::[]}(#t113).{core::num::+}(1) as{TypeError} core::double in let final void #t115 = #t112.{self::Test::[]=}(#t113, #t114) in #t114;
-  core::int v11 = let final self::Test<core::int, core::double> #t116 = t in let final core::String #t117 = "x" in let final core::int #t118 = #t116.{self::Test::[]}(#t117) in let final void #t119 = #t116.{self::Test::[]=}(#t117, #t118.{core::num::+}(1) as{TypeError} core::double) in #t118;
+  core::int v7 = let final self::Test<core::int, core::double> #t100 = t in let final core::String #t101 = "x" in let final core::int #t102 = let final dynamic #t103 = #t100.{self::Test::[]}(#t101).{core::num::+}(self::getInt()) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:47:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n  var /*@type=int*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();\n                                                       ^")) in let final void #t104 = #t100.{self::Test::[]=}(#t101, #t102) in #t102;
+  core::num v8 = let final self::Test<core::int, core::double> #t105 = t in let final core::String #t106 = "x" in let final core::num #t107 = #t105.{self::Test::[]}(#t106).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t108 = #t105.{self::Test::[]=}(#t106, #t107) in #t107;
+  core::double v9 = let final self::Test<core::int, core::double> #t109 = t in let final core::String #t110 = "x" in let final core::double #t111 = #t109.{self::Test::[]}(#t110).{core::num::+}(self::getDouble()) in let final void #t112 = #t109.{self::Test::[]=}(#t110, #t111) in #t111;
+  core::int v10 = let final self::Test<core::int, core::double> #t113 = t in let final core::String #t114 = "x" in let final core::int #t115 = let final dynamic #t116 = #t113.{self::Test::[]}(#t114).{core::num::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:50:27: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n  var /*@type=int*/ v10 = ++t /*@target=Test::[]=*/ ['x'];\n                          ^")) in let final void #t117 = #t113.{self::Test::[]=}(#t114, #t115) in #t115;
+  core::int v11 = let final self::Test<core::int, core::double> #t118 = t in let final core::String #t119 = "x" in let final core::int #t120 = #t118.{self::Test::[]}(#t119) in let final void #t121 = #t118.{self::Test::[]=}(#t119, let final dynamic #t122 = #t120.{core::num::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:51:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n  var /*@type=int*/ v11 = t /*@target=Test::[]=*/ ['x']++;\n                                                       ^"))) in #t120;
 }
 static method test4(self::Test<core::num, core::int> t) → void {
-  core::int v1 = let final self::Test<core::num, core::int> #t120 = t in let final core::String #t121 = "x" in let final core::int #t122 = self::getInt() in let final void #t123 = #t120.{self::Test::[]=}(#t121, #t122) in #t122;
-  core::num v2 = let final self::Test<core::num, core::int> #t124 = t in let final core::String #t125 = "x" in let final core::num #t126 = self::getNum() as{TypeError} core::int in let final void #t127 = #t124.{self::Test::[]=}(#t125, #t126) in #t126;
-  core::num v4 = let final self::Test<core::num, core::int> #t128 = t in let final core::String #t129 = "x" in let final core::num #t130 = #t128.{self::Test::[]}(#t129) in #t130.{core::num::==}(null) ?{core::num} let final core::int #t131 = self::getInt() in let final void #t132 = #t128.{self::Test::[]=}(#t129, #t131) in #t131 : #t130;
-  core::num v5 = let final self::Test<core::num, core::int> #t133 = t in let final core::String #t134 = "x" in let final core::num #t135 = #t133.{self::Test::[]}(#t134) in #t135.{core::num::==}(null) ?{core::num} let final core::num #t136 = self::getNum() as{TypeError} core::int in let final void #t137 = #t133.{self::Test::[]=}(#t134, #t136) in #t136 : #t135;
-  core::num v7 = let final self::Test<core::num, core::int> #t138 = t in let final core::String #t139 = "x" in let final core::num #t140 = #t138.{self::Test::[]}(#t139).{core::num::+}(self::getInt()) as{TypeError} core::int in let final void #t141 = #t138.{self::Test::[]=}(#t139, #t140) in #t140;
-  core::num v8 = let final self::Test<core::num, core::int> #t142 = t in let final core::String #t143 = "x" in let final core::num #t144 = #t142.{self::Test::[]}(#t143).{core::num::+}(self::getNum()) as{TypeError} core::int in let final void #t145 = #t142.{self::Test::[]=}(#t143, #t144) in #t144;
-  core::num v10 = let final self::Test<core::num, core::int> #t146 = t in let final core::String #t147 = "x" in let final core::num #t148 = #t146.{self::Test::[]}(#t147).{core::num::+}(1) as{TypeError} core::int in let final void #t149 = #t146.{self::Test::[]=}(#t147, #t148) in #t148;
-  core::num v11 = let final self::Test<core::num, core::int> #t150 = t in let final core::String #t151 = "x" in let final core::num #t152 = #t150.{self::Test::[]}(#t151) in let final void #t153 = #t150.{self::Test::[]=}(#t151, #t152.{core::num::+}(1) as{TypeError} core::int) in #t152;
+  core::int v1 = let final self::Test<core::num, core::int> #t123 = t in let final core::String #t124 = "x" in let final core::int #t125 = self::getInt() in let final void #t126 = #t123.{self::Test::[]=}(#t124, #t125) in #t125;
+  core::num v2 = let final self::Test<core::num, core::int> #t127 = t in let final core::String #t128 = "x" in let final core::num #t129 = self::getNum() as{TypeError} core::int in let final void #t130 = #t127.{self::Test::[]=}(#t128, #t129) in #t129;
+  core::num v4 = let final self::Test<core::num, core::int> #t131 = t in let final core::String #t132 = "x" in let final core::num #t133 = #t131.{self::Test::[]}(#t132) in #t133.{core::num::==}(null) ?{core::num} let final core::int #t134 = self::getInt() in let final void #t135 = #t131.{self::Test::[]=}(#t132, #t134) in #t134 : #t133;
+  core::num v5 = let final self::Test<core::num, core::int> #t136 = t in let final core::String #t137 = "x" in let final core::num #t138 = #t136.{self::Test::[]}(#t137) in #t138.{core::num::==}(null) ?{core::num} let final core::num #t139 = self::getNum() as{TypeError} core::int in let final void #t140 = #t136.{self::Test::[]=}(#t137, #t139) in #t139 : #t138;
+  core::num v7 = let final self::Test<core::num, core::int> #t141 = t in let final core::String #t142 = "x" in let final core::num #t143 = #t141.{self::Test::[]}(#t142).{core::num::+}(self::getInt()) as{TypeError} core::int in let final void #t144 = #t141.{self::Test::[]=}(#t142, #t143) in #t143;
+  core::num v8 = let final self::Test<core::num, core::int> #t145 = t in let final core::String #t146 = "x" in let final core::num #t147 = #t145.{self::Test::[]}(#t146).{core::num::+}(self::getNum()) as{TypeError} core::int in let final void #t148 = #t145.{self::Test::[]=}(#t146, #t147) in #t147;
+  core::num v10 = let final self::Test<core::num, core::int> #t149 = t in let final core::String #t150 = "x" in let final core::num #t151 = #t149.{self::Test::[]}(#t150).{core::num::+}(1) as{TypeError} core::int in let final void #t152 = #t149.{self::Test::[]=}(#t150, #t151) in #t151;
+  core::num v11 = let final self::Test<core::num, core::int> #t153 = t in let final core::String #t154 = "x" in let final core::num #t155 = #t153.{self::Test::[]}(#t154) in let final void #t156 = #t153.{self::Test::[]=}(#t154, #t155.{core::num::+}(1) as{TypeError} core::int) in #t155;
 }
 static method test5(self::Test<core::num, core::num> t) → void {
-  core::int v1 = let final self::Test<core::num, core::num> #t154 = t in let final core::String #t155 = "x" in let final core::int #t156 = self::getInt() in let final void #t157 = #t154.{self::Test::[]=}(#t155, #t156) in #t156;
-  core::num v2 = let final self::Test<core::num, core::num> #t158 = t in let final core::String #t159 = "x" in let final core::num #t160 = self::getNum() in let final void #t161 = #t158.{self::Test::[]=}(#t159, #t160) in #t160;
-  core::double v3 = let final self::Test<core::num, core::num> #t162 = t in let final core::String #t163 = "x" in let final core::double #t164 = self::getDouble() in let final void #t165 = #t162.{self::Test::[]=}(#t163, #t164) in #t164;
-  core::num v4 = let final self::Test<core::num, core::num> #t166 = t in let final core::String #t167 = "x" in let final core::num #t168 = #t166.{self::Test::[]}(#t167) in #t168.{core::num::==}(null) ?{core::num} let final core::int #t169 = self::getInt() in let final void #t170 = #t166.{self::Test::[]=}(#t167, #t169) in #t169 : #t168;
-  core::num v5 = let final self::Test<core::num, core::num> #t171 = t in let final core::String #t172 = "x" in let final core::num #t173 = #t171.{self::Test::[]}(#t172) in #t173.{core::num::==}(null) ?{core::num} let final core::num #t174 = self::getNum() in let final void #t175 = #t171.{self::Test::[]=}(#t172, #t174) in #t174 : #t173;
-  core::num v6 = let final self::Test<core::num, core::num> #t176 = t in let final core::String #t177 = "x" in let final core::num #t178 = #t176.{self::Test::[]}(#t177) in #t178.{core::num::==}(null) ?{core::num} let final core::double #t179 = self::getDouble() in let final void #t180 = #t176.{self::Test::[]=}(#t177, #t179) in #t179 : #t178;
-  core::num v7 = let final self::Test<core::num, core::num> #t181 = t in let final core::String #t182 = "x" in let final core::num #t183 = #t181.{self::Test::[]}(#t182).{core::num::+}(self::getInt()) in let final void #t184 = #t181.{self::Test::[]=}(#t182, #t183) in #t183;
-  core::num v8 = let final self::Test<core::num, core::num> #t185 = t in let final core::String #t186 = "x" in let final core::num #t187 = #t185.{self::Test::[]}(#t186).{core::num::+}(self::getNum()) in let final void #t188 = #t185.{self::Test::[]=}(#t186, #t187) in #t187;
-  core::num v9 = let final self::Test<core::num, core::num> #t189 = t in let final core::String #t190 = "x" in let final core::num #t191 = #t189.{self::Test::[]}(#t190).{core::num::+}(self::getDouble()) in let final void #t192 = #t189.{self::Test::[]=}(#t190, #t191) in #t191;
-  core::num v10 = let final self::Test<core::num, core::num> #t193 = t in let final core::String #t194 = "x" in let final core::num #t195 = #t193.{self::Test::[]}(#t194).{core::num::+}(1) in let final void #t196 = #t193.{self::Test::[]=}(#t194, #t195) in #t195;
-  core::num v11 = let final self::Test<core::num, core::num> #t197 = t in let final core::String #t198 = "x" in let final core::num #t199 = #t197.{self::Test::[]}(#t198) in let final void #t200 = #t197.{self::Test::[]=}(#t198, #t199.{core::num::+}(1)) in #t199;
+  core::int v1 = let final self::Test<core::num, core::num> #t157 = t in let final core::String #t158 = "x" in let final core::int #t159 = self::getInt() in let final void #t160 = #t157.{self::Test::[]=}(#t158, #t159) in #t159;
+  core::num v2 = let final self::Test<core::num, core::num> #t161 = t in let final core::String #t162 = "x" in let final core::num #t163 = self::getNum() in let final void #t164 = #t161.{self::Test::[]=}(#t162, #t163) in #t163;
+  core::double v3 = let final self::Test<core::num, core::num> #t165 = t in let final core::String #t166 = "x" in let final core::double #t167 = self::getDouble() in let final void #t168 = #t165.{self::Test::[]=}(#t166, #t167) in #t167;
+  core::num v4 = let final self::Test<core::num, core::num> #t169 = t in let final core::String #t170 = "x" in let final core::num #t171 = #t169.{self::Test::[]}(#t170) in #t171.{core::num::==}(null) ?{core::num} let final core::int #t172 = self::getInt() in let final void #t173 = #t169.{self::Test::[]=}(#t170, #t172) in #t172 : #t171;
+  core::num v5 = let final self::Test<core::num, core::num> #t174 = t in let final core::String #t175 = "x" in let final core::num #t176 = #t174.{self::Test::[]}(#t175) in #t176.{core::num::==}(null) ?{core::num} let final core::num #t177 = self::getNum() in let final void #t178 = #t174.{self::Test::[]=}(#t175, #t177) in #t177 : #t176;
+  core::num v6 = let final self::Test<core::num, core::num> #t179 = t in let final core::String #t180 = "x" in let final core::num #t181 = #t179.{self::Test::[]}(#t180) in #t181.{core::num::==}(null) ?{core::num} let final core::double #t182 = self::getDouble() in let final void #t183 = #t179.{self::Test::[]=}(#t180, #t182) in #t182 : #t181;
+  core::num v7 = let final self::Test<core::num, core::num> #t184 = t in let final core::String #t185 = "x" in let final core::num #t186 = #t184.{self::Test::[]}(#t185).{core::num::+}(self::getInt()) in let final void #t187 = #t184.{self::Test::[]=}(#t185, #t186) in #t186;
+  core::num v8 = let final self::Test<core::num, core::num> #t188 = t in let final core::String #t189 = "x" in let final core::num #t190 = #t188.{self::Test::[]}(#t189).{core::num::+}(self::getNum()) in let final void #t191 = #t188.{self::Test::[]=}(#t189, #t190) in #t190;
+  core::num v9 = let final self::Test<core::num, core::num> #t192 = t in let final core::String #t193 = "x" in let final core::num #t194 = #t192.{self::Test::[]}(#t193).{core::num::+}(self::getDouble()) in let final void #t195 = #t192.{self::Test::[]=}(#t193, #t194) in #t194;
+  core::num v10 = let final self::Test<core::num, core::num> #t196 = t in let final core::String #t197 = "x" in let final core::num #t198 = #t196.{self::Test::[]}(#t197).{core::num::+}(1) in let final void #t199 = #t196.{self::Test::[]=}(#t197, #t198) in #t198;
+  core::num v11 = let final self::Test<core::num, core::num> #t200 = t in let final core::String #t201 = "x" in let final core::num #t202 = #t200.{self::Test::[]}(#t201) in let final void #t203 = #t200.{self::Test::[]=}(#t201, #t202.{core::num::+}(1)) in #t202;
 }
 static method test6(self::Test<core::num, core::double> t) → void {
-  core::num v2 = let final self::Test<core::num, core::double> #t201 = t in let final core::String #t202 = "x" in let final core::num #t203 = self::getNum() as{TypeError} core::double in let final void #t204 = #t201.{self::Test::[]=}(#t202, #t203) in #t203;
-  core::double v3 = let final self::Test<core::num, core::double> #t205 = t in let final core::String #t206 = "x" in let final core::double #t207 = self::getDouble() in let final void #t208 = #t205.{self::Test::[]=}(#t206, #t207) in #t207;
-  core::num v5 = let final self::Test<core::num, core::double> #t209 = t in let final core::String #t210 = "x" in let final core::num #t211 = #t209.{self::Test::[]}(#t210) in #t211.{core::num::==}(null) ?{core::num} let final core::num #t212 = self::getNum() as{TypeError} core::double in let final void #t213 = #t209.{self::Test::[]=}(#t210, #t212) in #t212 : #t211;
-  core::num v6 = let final self::Test<core::num, core::double> #t214 = t in let final core::String #t215 = "x" in let final core::num #t216 = #t214.{self::Test::[]}(#t215) in #t216.{core::num::==}(null) ?{core::num} let final core::double #t217 = self::getDouble() in let final void #t218 = #t214.{self::Test::[]=}(#t215, #t217) in #t217 : #t216;
-  core::num v7 = let final self::Test<core::num, core::double> #t219 = t in let final core::String #t220 = "x" in let final core::num #t221 = #t219.{self::Test::[]}(#t220).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t222 = #t219.{self::Test::[]=}(#t220, #t221) in #t221;
-  core::num v8 = let final self::Test<core::num, core::double> #t223 = t in let final core::String #t224 = "x" in let final core::num #t225 = #t223.{self::Test::[]}(#t224).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t226 = #t223.{self::Test::[]=}(#t224, #t225) in #t225;
-  core::num v9 = let final self::Test<core::num, core::double> #t227 = t in let final core::String #t228 = "x" in let final core::num #t229 = #t227.{self::Test::[]}(#t228).{core::num::+}(self::getDouble()) as{TypeError} core::double in let final void #t230 = #t227.{self::Test::[]=}(#t228, #t229) in #t229;
-  core::num v10 = let final self::Test<core::num, core::double> #t231 = t in let final core::String #t232 = "x" in let final core::num #t233 = #t231.{self::Test::[]}(#t232).{core::num::+}(1) as{TypeError} core::double in let final void #t234 = #t231.{self::Test::[]=}(#t232, #t233) in #t233;
-  core::num v11 = let final self::Test<core::num, core::double> #t235 = t in let final core::String #t236 = "x" in let final core::num #t237 = #t235.{self::Test::[]}(#t236) in let final void #t238 = #t235.{self::Test::[]=}(#t236, #t237.{core::num::+}(1) as{TypeError} core::double) in #t237;
+  core::num v2 = let final self::Test<core::num, core::double> #t204 = t in let final core::String #t205 = "x" in let final core::num #t206 = self::getNum() as{TypeError} core::double in let final void #t207 = #t204.{self::Test::[]=}(#t205, #t206) in #t206;
+  core::double v3 = let final self::Test<core::num, core::double> #t208 = t in let final core::String #t209 = "x" in let final core::double #t210 = self::getDouble() in let final void #t211 = #t208.{self::Test::[]=}(#t209, #t210) in #t210;
+  core::num v5 = let final self::Test<core::num, core::double> #t212 = t in let final core::String #t213 = "x" in let final core::num #t214 = #t212.{self::Test::[]}(#t213) in #t214.{core::num::==}(null) ?{core::num} let final core::num #t215 = self::getNum() as{TypeError} core::double in let final void #t216 = #t212.{self::Test::[]=}(#t213, #t215) in #t215 : #t214;
+  core::num v6 = let final self::Test<core::num, core::double> #t217 = t in let final core::String #t218 = "x" in let final core::num #t219 = #t217.{self::Test::[]}(#t218) in #t219.{core::num::==}(null) ?{core::num} let final core::double #t220 = self::getDouble() in let final void #t221 = #t217.{self::Test::[]=}(#t218, #t220) in #t220 : #t219;
+  core::num v7 = let final self::Test<core::num, core::double> #t222 = t in let final core::String #t223 = "x" in let final core::num #t224 = #t222.{self::Test::[]}(#t223).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t225 = #t222.{self::Test::[]=}(#t223, #t224) in #t224;
+  core::num v8 = let final self::Test<core::num, core::double> #t226 = t in let final core::String #t227 = "x" in let final core::num #t228 = #t226.{self::Test::[]}(#t227).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t229 = #t226.{self::Test::[]=}(#t227, #t228) in #t228;
+  core::num v9 = let final self::Test<core::num, core::double> #t230 = t in let final core::String #t231 = "x" in let final core::num #t232 = #t230.{self::Test::[]}(#t231).{core::num::+}(self::getDouble()) as{TypeError} core::double in let final void #t233 = #t230.{self::Test::[]=}(#t231, #t232) in #t232;
+  core::num v10 = let final self::Test<core::num, core::double> #t234 = t in let final core::String #t235 = "x" in let final core::num #t236 = #t234.{self::Test::[]}(#t235).{core::num::+}(1) as{TypeError} core::double in let final void #t237 = #t234.{self::Test::[]=}(#t235, #t236) in #t236;
+  core::num v11 = let final self::Test<core::num, core::double> #t238 = t in let final core::String #t239 = "x" in let final core::num #t240 = #t238.{self::Test::[]}(#t239) in let final void #t241 = #t238.{self::Test::[]=}(#t239, #t240.{core::num::+}(1) as{TypeError} core::double) in #t240;
 }
 static method test7(self::Test<core::double, core::int> t) → void {
-  core::int v1 = let final self::Test<core::double, core::int> #t239 = t in let final core::String #t240 = "x" in let final core::int #t241 = self::getInt() in let final void #t242 = #t239.{self::Test::[]=}(#t240, #t241) in #t241;
-  core::num v2 = let final self::Test<core::double, core::int> #t243 = t in let final core::String #t244 = "x" in let final core::num #t245 = self::getNum() as{TypeError} core::int in let final void #t246 = #t243.{self::Test::[]=}(#t244, #t245) in #t245;
-  core::num v4 = let final self::Test<core::double, core::int> #t247 = t in let final core::String #t248 = "x" in let final core::double #t249 = #t247.{self::Test::[]}(#t248) in #t249.{core::num::==}(null) ?{core::num} let final core::int #t250 = self::getInt() in let final void #t251 = #t247.{self::Test::[]=}(#t248, #t250) in #t250 : #t249;
-  core::num v5 = let final self::Test<core::double, core::int> #t252 = t in let final core::String #t253 = "x" in let final core::double #t254 = #t252.{self::Test::[]}(#t253) in #t254.{core::num::==}(null) ?{core::num} let final core::num #t255 = self::getNum() as{TypeError} core::int in let final void #t256 = #t252.{self::Test::[]=}(#t253, #t255) in #t255 : #t254;
-  core::double v7 = let final self::Test<core::double, core::int> #t257 = t in let final core::String #t258 = "x" in let final core::double #t259 = #t257.{self::Test::[]}(#t258).{core::double::+}(self::getInt()) as{TypeError} core::int in let final void #t260 = #t257.{self::Test::[]=}(#t258, #t259) in #t259;
-  core::double v8 = let final self::Test<core::double, core::int> #t261 = t in let final core::String #t262 = "x" in let final core::double #t263 = #t261.{self::Test::[]}(#t262).{core::double::+}(self::getNum()) as{TypeError} core::int in let final void #t264 = #t261.{self::Test::[]=}(#t262, #t263) in #t263;
-  core::double v10 = let final self::Test<core::double, core::int> #t265 = t in let final core::String #t266 = "x" in let final core::double #t267 = #t265.{self::Test::[]}(#t266).{core::double::+}(1) as{TypeError} core::int in let final void #t268 = #t265.{self::Test::[]=}(#t266, #t267) in #t267;
-  core::double v11 = let final self::Test<core::double, core::int> #t269 = t in let final core::String #t270 = "x" in let final core::double #t271 = #t269.{self::Test::[]}(#t270) in let final void #t272 = #t269.{self::Test::[]=}(#t270, #t271.{core::double::+}(1) as{TypeError} core::int) in #t271;
+  core::int v1 = let final self::Test<core::double, core::int> #t242 = t in let final core::String #t243 = "x" in let final core::int #t244 = self::getInt() in let final void #t245 = #t242.{self::Test::[]=}(#t243, #t244) in #t244;
+  core::num v2 = let final self::Test<core::double, core::int> #t246 = t in let final core::String #t247 = "x" in let final core::num #t248 = self::getNum() as{TypeError} core::int in let final void #t249 = #t246.{self::Test::[]=}(#t247, #t248) in #t248;
+  core::num v4 = let final self::Test<core::double, core::int> #t250 = t in let final core::String #t251 = "x" in let final core::double #t252 = #t250.{self::Test::[]}(#t251) in #t252.{core::num::==}(null) ?{core::num} let final core::int #t253 = self::getInt() in let final void #t254 = #t250.{self::Test::[]=}(#t251, #t253) in #t253 : #t252;
+  core::num v5 = let final self::Test<core::double, core::int> #t255 = t in let final core::String #t256 = "x" in let final core::double #t257 = #t255.{self::Test::[]}(#t256) in #t257.{core::num::==}(null) ?{core::num} let final core::num #t258 = self::getNum() as{TypeError} core::int in let final void #t259 = #t255.{self::Test::[]=}(#t256, #t258) in #t258 : #t257;
+  core::double v7 = let final self::Test<core::double, core::int> #t260 = t in let final core::String #t261 = "x" in let final core::double #t262 = let final dynamic #t263 = #t260.{self::Test::[]}(#t261).{core::double::+}(self::getInt()) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:96:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  var /*@type=double*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();\n                                                          ^")) in let final void #t264 = #t260.{self::Test::[]=}(#t261, #t262) in #t262;
+  core::double v8 = let final self::Test<core::double, core::int> #t265 = t in let final core::String #t266 = "x" in let final core::double #t267 = let final dynamic #t268 = #t265.{self::Test::[]}(#t266).{core::double::+}(self::getNum()) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:97:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  var /*@type=double*/ v8 = t /*@target=Test::[]=*/ ['x'] += getNum();\n                                                          ^")) in let final void #t269 = #t265.{self::Test::[]=}(#t266, #t267) in #t267;
+  core::double v10 = let final self::Test<core::double, core::int> #t270 = t in let final core::String #t271 = "x" in let final core::double #t272 = let final dynamic #t273 = #t270.{self::Test::[]}(#t271).{core::double::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:98:30: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  var /*@type=double*/ v10 = ++t /*@target=Test::[]=*/ ['x'];\n                             ^")) in let final void #t274 = #t270.{self::Test::[]=}(#t271, #t272) in #t272;
+  core::double v11 = let final self::Test<core::double, core::int> #t275 = t in let final core::String #t276 = "x" in let final core::double #t277 = #t275.{self::Test::[]}(#t276) in let final void #t278 = #t275.{self::Test::[]=}(#t276, let final dynamic #t279 = #t277.{core::double::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:99:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  var /*@type=double*/ v11 = t /*@target=Test::[]=*/ ['x']++;\n                                                          ^"))) in #t277;
 }
 static method test8(self::Test<core::double, core::num> t) → void {
-  core::int v1 = let final self::Test<core::double, core::num> #t273 = t in let final core::String #t274 = "x" in let final core::int #t275 = self::getInt() in let final void #t276 = #t273.{self::Test::[]=}(#t274, #t275) in #t275;
-  core::num v2 = let final self::Test<core::double, core::num> #t277 = t in let final core::String #t278 = "x" in let final core::num #t279 = self::getNum() in let final void #t280 = #t277.{self::Test::[]=}(#t278, #t279) in #t279;
-  core::double v3 = let final self::Test<core::double, core::num> #t281 = t in let final core::String #t282 = "x" in let final core::double #t283 = self::getDouble() in let final void #t284 = #t281.{self::Test::[]=}(#t282, #t283) in #t283;
-  core::num v4 = let final self::Test<core::double, core::num> #t285 = t in let final core::String #t286 = "x" in let final core::double #t287 = #t285.{self::Test::[]}(#t286) in #t287.{core::num::==}(null) ?{core::num} let final core::int #t288 = self::getInt() in let final void #t289 = #t285.{self::Test::[]=}(#t286, #t288) in #t288 : #t287;
-  core::num v5 = let final self::Test<core::double, core::num> #t290 = t in let final core::String #t291 = "x" in let final core::double #t292 = #t290.{self::Test::[]}(#t291) in #t292.{core::num::==}(null) ?{core::num} let final core::num #t293 = self::getNum() in let final void #t294 = #t290.{self::Test::[]=}(#t291, #t293) in #t293 : #t292;
-  core::double v6 = let final self::Test<core::double, core::num> #t295 = t in let final core::String #t296 = "x" in let final core::double #t297 = #t295.{self::Test::[]}(#t296) in #t297.{core::num::==}(null) ?{core::double} let final core::double #t298 = self::getDouble() in let final void #t299 = #t295.{self::Test::[]=}(#t296, #t298) in #t298 : #t297;
-  core::double v7 = let final self::Test<core::double, core::num> #t300 = t in let final core::String #t301 = "x" in let final core::double #t302 = #t300.{self::Test::[]}(#t301).{core::double::+}(self::getInt()) in let final void #t303 = #t300.{self::Test::[]=}(#t301, #t302) in #t302;
-  core::double v8 = let final self::Test<core::double, core::num> #t304 = t in let final core::String #t305 = "x" in let final core::double #t306 = #t304.{self::Test::[]}(#t305).{core::double::+}(self::getNum()) in let final void #t307 = #t304.{self::Test::[]=}(#t305, #t306) in #t306;
-  core::double v9 = let final self::Test<core::double, core::num> #t308 = t in let final core::String #t309 = "x" in let final core::double #t310 = #t308.{self::Test::[]}(#t309).{core::double::+}(self::getDouble()) in let final void #t311 = #t308.{self::Test::[]=}(#t309, #t310) in #t310;
-  core::double v10 = let final self::Test<core::double, core::num> #t312 = t in let final core::String #t313 = "x" in let final core::double #t314 = #t312.{self::Test::[]}(#t313).{core::double::+}(1) in let final void #t315 = #t312.{self::Test::[]=}(#t313, #t314) in #t314;
-  core::double v11 = let final self::Test<core::double, core::num> #t316 = t in let final core::String #t317 = "x" in let final core::double #t318 = #t316.{self::Test::[]}(#t317) in let final void #t319 = #t316.{self::Test::[]=}(#t317, #t318.{core::double::+}(1)) in #t318;
+  core::int v1 = let final self::Test<core::double, core::num> #t280 = t in let final core::String #t281 = "x" in let final core::int #t282 = self::getInt() in let final void #t283 = #t280.{self::Test::[]=}(#t281, #t282) in #t282;
+  core::num v2 = let final self::Test<core::double, core::num> #t284 = t in let final core::String #t285 = "x" in let final core::num #t286 = self::getNum() in let final void #t287 = #t284.{self::Test::[]=}(#t285, #t286) in #t286;
+  core::double v3 = let final self::Test<core::double, core::num> #t288 = t in let final core::String #t289 = "x" in let final core::double #t290 = self::getDouble() in let final void #t291 = #t288.{self::Test::[]=}(#t289, #t290) in #t290;
+  core::num v4 = let final self::Test<core::double, core::num> #t292 = t in let final core::String #t293 = "x" in let final core::double #t294 = #t292.{self::Test::[]}(#t293) in #t294.{core::num::==}(null) ?{core::num} let final core::int #t295 = self::getInt() in let final void #t296 = #t292.{self::Test::[]=}(#t293, #t295) in #t295 : #t294;
+  core::num v5 = let final self::Test<core::double, core::num> #t297 = t in let final core::String #t298 = "x" in let final core::double #t299 = #t297.{self::Test::[]}(#t298) in #t299.{core::num::==}(null) ?{core::num} let final core::num #t300 = self::getNum() in let final void #t301 = #t297.{self::Test::[]=}(#t298, #t300) in #t300 : #t299;
+  core::double v6 = let final self::Test<core::double, core::num> #t302 = t in let final core::String #t303 = "x" in let final core::double #t304 = #t302.{self::Test::[]}(#t303) in #t304.{core::num::==}(null) ?{core::double} let final core::double #t305 = self::getDouble() in let final void #t306 = #t302.{self::Test::[]=}(#t303, #t305) in #t305 : #t304;
+  core::double v7 = let final self::Test<core::double, core::num> #t307 = t in let final core::String #t308 = "x" in let final core::double #t309 = #t307.{self::Test::[]}(#t308).{core::double::+}(self::getInt()) in let final void #t310 = #t307.{self::Test::[]=}(#t308, #t309) in #t309;
+  core::double v8 = let final self::Test<core::double, core::num> #t311 = t in let final core::String #t312 = "x" in let final core::double #t313 = #t311.{self::Test::[]}(#t312).{core::double::+}(self::getNum()) in let final void #t314 = #t311.{self::Test::[]=}(#t312, #t313) in #t313;
+  core::double v9 = let final self::Test<core::double, core::num> #t315 = t in let final core::String #t316 = "x" in let final core::double #t317 = #t315.{self::Test::[]}(#t316).{core::double::+}(self::getDouble()) in let final void #t318 = #t315.{self::Test::[]=}(#t316, #t317) in #t317;
+  core::double v10 = let final self::Test<core::double, core::num> #t319 = t in let final core::String #t320 = "x" in let final core::double #t321 = #t319.{self::Test::[]}(#t320).{core::double::+}(1) in let final void #t322 = #t319.{self::Test::[]=}(#t320, #t321) in #t321;
+  core::double v11 = let final self::Test<core::double, core::num> #t323 = t in let final core::String #t324 = "x" in let final core::double #t325 = #t323.{self::Test::[]}(#t324) in let final void #t326 = #t323.{self::Test::[]=}(#t324, #t325.{core::double::+}(1)) in #t325;
 }
 static method test9(self::Test<core::double, core::double> t) → void {
-  core::num v2 = let final self::Test<core::double, core::double> #t320 = t in let final core::String #t321 = "x" in let final core::num #t322 = self::getNum() as{TypeError} core::double in let final void #t323 = #t320.{self::Test::[]=}(#t321, #t322) in #t322;
-  core::double v3 = let final self::Test<core::double, core::double> #t324 = t in let final core::String #t325 = "x" in let final core::double #t326 = self::getDouble() in let final void #t327 = #t324.{self::Test::[]=}(#t325, #t326) in #t326;
-  core::num v5 = let final self::Test<core::double, core::double> #t328 = t in let final core::String #t329 = "x" in let final core::double #t330 = #t328.{self::Test::[]}(#t329) in #t330.{core::num::==}(null) ?{core::num} let final core::num #t331 = self::getNum() as{TypeError} core::double in let final void #t332 = #t328.{self::Test::[]=}(#t329, #t331) in #t331 : #t330;
-  core::double v6 = let final self::Test<core::double, core::double> #t333 = t in let final core::String #t334 = "x" in let final core::double #t335 = #t333.{self::Test::[]}(#t334) in #t335.{core::num::==}(null) ?{core::double} let final core::double #t336 = self::getDouble() in let final void #t337 = #t333.{self::Test::[]=}(#t334, #t336) in #t336 : #t335;
-  core::double v7 = let final self::Test<core::double, core::double> #t338 = t in let final core::String #t339 = "x" in let final core::double #t340 = #t338.{self::Test::[]}(#t339).{core::double::+}(self::getInt()) in let final void #t341 = #t338.{self::Test::[]=}(#t339, #t340) in #t340;
-  core::double v8 = let final self::Test<core::double, core::double> #t342 = t in let final core::String #t343 = "x" in let final core::double #t344 = #t342.{self::Test::[]}(#t343).{core::double::+}(self::getNum()) in let final void #t345 = #t342.{self::Test::[]=}(#t343, #t344) in #t344;
-  core::double v9 = let final self::Test<core::double, core::double> #t346 = t in let final core::String #t347 = "x" in let final core::double #t348 = #t346.{self::Test::[]}(#t347).{core::double::+}(self::getDouble()) in let final void #t349 = #t346.{self::Test::[]=}(#t347, #t348) in #t348;
-  core::double v10 = let final self::Test<core::double, core::double> #t350 = t in let final core::String #t351 = "x" in let final core::double #t352 = #t350.{self::Test::[]}(#t351).{core::double::+}(1) in let final void #t353 = #t350.{self::Test::[]=}(#t351, #t352) in #t352;
-  core::double v11 = let final self::Test<core::double, core::double> #t354 = t in let final core::String #t355 = "x" in let final core::double #t356 = #t354.{self::Test::[]}(#t355) in let final void #t357 = #t354.{self::Test::[]=}(#t355, #t356.{core::double::+}(1)) in #t356;
+  core::num v2 = let final self::Test<core::double, core::double> #t327 = t in let final core::String #t328 = "x" in let final core::num #t329 = self::getNum() as{TypeError} core::double in let final void #t330 = #t327.{self::Test::[]=}(#t328, #t329) in #t329;
+  core::double v3 = let final self::Test<core::double, core::double> #t331 = t in let final core::String #t332 = "x" in let final core::double #t333 = self::getDouble() in let final void #t334 = #t331.{self::Test::[]=}(#t332, #t333) in #t333;
+  core::num v5 = let final self::Test<core::double, core::double> #t335 = t in let final core::String #t336 = "x" in let final core::double #t337 = #t335.{self::Test::[]}(#t336) in #t337.{core::num::==}(null) ?{core::num} let final core::num #t338 = self::getNum() as{TypeError} core::double in let final void #t339 = #t335.{self::Test::[]=}(#t336, #t338) in #t338 : #t337;
+  core::double v6 = let final self::Test<core::double, core::double> #t340 = t in let final core::String #t341 = "x" in let final core::double #t342 = #t340.{self::Test::[]}(#t341) in #t342.{core::num::==}(null) ?{core::double} let final core::double #t343 = self::getDouble() in let final void #t344 = #t340.{self::Test::[]=}(#t341, #t343) in #t343 : #t342;
+  core::double v7 = let final self::Test<core::double, core::double> #t345 = t in let final core::String #t346 = "x" in let final core::double #t347 = #t345.{self::Test::[]}(#t346).{core::double::+}(self::getInt()) in let final void #t348 = #t345.{self::Test::[]=}(#t346, #t347) in #t347;
+  core::double v8 = let final self::Test<core::double, core::double> #t349 = t in let final core::String #t350 = "x" in let final core::double #t351 = #t349.{self::Test::[]}(#t350).{core::double::+}(self::getNum()) in let final void #t352 = #t349.{self::Test::[]=}(#t350, #t351) in #t351;
+  core::double v9 = let final self::Test<core::double, core::double> #t353 = t in let final core::String #t354 = "x" in let final core::double #t355 = #t353.{self::Test::[]}(#t354).{core::double::+}(self::getDouble()) in let final void #t356 = #t353.{self::Test::[]=}(#t354, #t355) in #t355;
+  core::double v10 = let final self::Test<core::double, core::double> #t357 = t in let final core::String #t358 = "x" in let final core::double #t359 = #t357.{self::Test::[]}(#t358).{core::double::+}(1) in let final void #t360 = #t357.{self::Test::[]=}(#t358, #t359) in #t359;
+  core::double v11 = let final self::Test<core::double, core::double> #t361 = t in let final core::String #t362 = "x" in let final core::double #t363 = #t361.{self::Test::[]}(#t362) in let final void #t364 = #t361.{self::Test::[]=}(#t362, #t363.{core::double::+}(1)) in #t363;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
index 473cf55..19f5a4c 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
@@ -17,8 +17,8 @@
     : super core::Object::•()
     ;
 }
-static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = #t1.{self::B::a}.{self::A::+}(1) as{TypeError} self::A;
-static field core::double v_prefix_mm = let final self::B #t2 = new self::B::•() in #t2.{self::B::a} = #t2.{self::B::a}.{self::A::-}(1) as{TypeError} self::A;
-static field self::A v_postfix_pp = let final self::B #t3 = new self::B::•() in let final self::A #t4 = #t3.{self::B::a} in let final core::int #t5 = #t3.{self::B::a} = #t4.{self::A::+}(1) as{TypeError} self::A in #t4;
-static field self::A v_postfix_mm = let final self::B #t6 = new self::B::•() in let final self::A #t7 = #t6.{self::B::a} in let final core::double #t8 = #t6.{self::B::a} = #t7.{self::A::-}(1) as{TypeError} self::A in #t7;
+static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = let final dynamic #t2 = #t1.{self::B::a}.{self::A::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\nvar /*@topType=int*/ v_prefix_pp = (++new B(). /*@target=B::a*/ a);\n                                    ^"));
+static field core::double v_prefix_mm = let final self::B #t3 = new self::B::•() in #t3.{self::B::a} = let final dynamic #t4 = #t3.{self::B::a}.{self::A::-}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\nvar /*@topType=double*/ v_prefix_mm = (--new B(). /*@target=B::a*/ a);\n                                       ^"));
+static field self::A v_postfix_pp = let final self::B #t5 = new self::B::•() in let final self::A #t6 = #t5.{self::B::a} in let final core::int #t7 = #t5.{self::B::a} = let final dynamic #t8 = #t6.{self::A::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\nvar /*@topType=A*/ v_postfix_pp = (new B(). /*@target=B::a*/ a++);\n                                                              ^")) in #t6;
+static field self::A v_postfix_mm = let final self::B #t9 = new self::B::•() in let final self::A #t10 = #t9.{self::B::a} in let final core::double #t11 = #t9.{self::B::a} = let final dynamic #t12 = #t10.{self::A::-}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\nvar /*@topType=A*/ v_postfix_mm = (new B(). /*@target=B::a*/ a--);\n                                                              ^")) in #t10;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart
index 597181b..07bb7f4 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart
@@ -6,6 +6,6 @@
 
 int i;
 String s;
-var /*@topType=String*/ x = /*@error=InvalidAssignment*/ i = s;
+var /*@topType=String*/ x = i = /*@error=InvalidAssignment*/ s;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
index b1b6c3c..9da5914 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
@@ -4,5 +4,5 @@
 
 static field core::int i;
 static field core::String s;
-static field core::String x = self::i = self::s as{TypeError} core::int;
+static field core::String x = self::i = let final dynamic #t1 = self::s in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\nvar /*@topType=String*/ x = i = /*@error=InvalidAssignment*/ s;\n                                                             ^"));
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/invalid_assignment.dart b/pkg/front_end/testcases/invalid_assignment.dart
index fdaf2c9..346a87a 100644
--- a/pkg/front_end/testcases/invalid_assignment.dart
+++ b/pkg/front_end/testcases/invalid_assignment.dart
@@ -10,11 +10,11 @@
 
 test(int i, String s, A a) {
   i = 1;
-  /*@error=InvalidAssignment*/ i = s;
+  i = /*@error=InvalidAssignment*/ s;
   i ??= 1;
-  /*@error=InvalidAssignment*/ i ??= s;
+  i ??= /*@error=InvalidAssignment*/ s;
   a = new A();
-  /*@error=InvalidAssignment*/ a += 1;
+  a /*@error=InvalidAssignment*/ += 1;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
index abc3fb8..5220a4a 100644
--- a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
@@ -11,10 +11,10 @@
 }
 static method test(core::int i, core::String s, self::A a) → dynamic {
   i = 1;
-  i = s as{TypeError} core::int;
+  i = let final dynamic #t1 = s in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  i = /*@error=InvalidAssignment*/ s;\n                                   ^"));
   i.{core::num::==}(null) ?{core::int} i = 1 : null;
-  i.{core::num::==}(null) ?{core::Object} i = s as{TypeError} core::int : null;
+  i.{core::num::==}(null) ?{core::Object} i = let final dynamic #t2 = s in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  i ??= /*@error=InvalidAssignment*/ s;\n                                     ^")) : null;
   a = new self::A::•();
-  a = a.{self::A::+}(1) as{TypeError} self::A;
+  a = let final dynamic #t3 = a.{self::A::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.\nTry changing the type of the left hand side, or casting the right hand side to '#lib1::A'.\n  a /*@error=InvalidAssignment*/ += 1;\n                                 ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/qualified.dart.direct.expect b/pkg/front_end/testcases/qualified.dart.direct.expect
index 28cbfab..3ea9743 100644
--- a/pkg/front_end/testcases/qualified.dart.direct.expect
+++ b/pkg/front_end/testcases/qualified.dart.direct.expect
@@ -14,7 +14,7 @@
     : super lib::Supertype::•()
     ;
 }
-class C<T extends core::Object> extends core::Object { // from pkg/front_end/testcases/qualified_part.dart
+class C<T extends core::Object> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
   static field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → void
     : super core::Object::•()
@@ -25,7 +25,7 @@
   static factory b<T extends core::Object>() → self::C<self::C::b::T>
     let dynamic #redirecting_factory = lib::C::b in invalid-expression;
 }
-static const field dynamic #errors = const <dynamic>["Error: The type 'lib.Missing' can't be used as supertype."]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart: Error: The type 'lib.Missing' can't be used as supertype."]/* from null */;
 static method main() → dynamic {
   new self::C::•<core::String>();
   new self::C::a<core::String>();
diff --git a/pkg/front_end/testcases/qualified.dart.outline.expect b/pkg/front_end/testcases/qualified.dart.outline.expect
index 16f2af5..f7705191 100644
--- a/pkg/front_end/testcases/qualified.dart.outline.expect
+++ b/pkg/front_end/testcases/qualified.dart.outline.expect
@@ -15,7 +15,7 @@
   default constructor •() → void
     ;
 }
-class C<T extends core::Object> extends core::Object { // from pkg/front_end/testcases/qualified_part.dart
+class C<T extends core::Object> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
   static field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → void
     ;
diff --git a/pkg/front_end/testcases/qualified.dart.strong.expect b/pkg/front_end/testcases/qualified.dart.strong.expect
index a31090d..0e14ca2 100644
--- a/pkg/front_end/testcases/qualified.dart.strong.expect
+++ b/pkg/front_end/testcases/qualified.dart.strong.expect
@@ -14,7 +14,7 @@
     : super lib::Supertype::•()
     ;
 }
-class C<T extends core::Object> extends core::Object { // from pkg/front_end/testcases/qualified_part.dart
+class C<T extends core::Object> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
   static field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → void
     : super core::Object::•()
@@ -25,7 +25,7 @@
   static factory b<T extends core::Object>() → self::C<self::C::b::T>
     let dynamic #redirecting_factory = lib::C::b in invalid-expression;
 }
-static const field dynamic #errors = const <dynamic>["Error: The type 'lib.Missing' can't be used as supertype."]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart: Error: The type 'lib.Missing' can't be used as supertype."]/* from null */;
 static method main() → dynamic {
   new self::C::•<core::String>();
   new self::C::a<core::String>();
diff --git a/pkg/front_end/testcases/rasta/super.dart.strong.expect b/pkg/front_end/testcases/rasta/super.dart.strong.expect
index 9fb3ec0..a45aca6 100644
--- a/pkg/front_end/testcases/rasta/super.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.strong.expect
@@ -51,8 +51,8 @@
     self::use(super.{self::A::~}());
     super.{self::A::unary-}();
     self::use(super.{self::A::unary-}());
-    const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use `super` as an expression.\n    +super;\n     ^"));
-    self::use(const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use `super` as an expression.\n    use(+super);\n         ^")));
+    const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use `super` as an expression.\n    +super;\n     ^"));
+    self::use(const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use `super` as an expression.\n    use(+super);\n         ^")));
     super.{self::A::==}(87);
     self::use(super.{self::A::==}(87));
     !super.{self::A::==}(87);
@@ -253,7 +253,7 @@
     self::use(super.{self::A::n} = super.{self::A::n}.-(42));
   }
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/super.dart:43:5: Error: '+' is not a prefix operator.\n    +super;\n    ^", "pkg/front_end/testcases/rasta/super.dart:44:9: Error: '+' is not a prefix operator.\n    use(+super);\n        ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/super.dart:43:5: Error: '+' is not a prefix operator.\nTry removing '+'.\n    +super;\n    ^", "pkg/front_end/testcases/rasta/super.dart:44:9: Error: '+' is not a prefix operator.\nTry removing '+'.\n    use(+super);\n        ^"]/* from null */;
 static method use(dynamic x) → dynamic {
   if(x.{core::Object::==}(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}))
     throw "Shouldn't happen";
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.direct.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.direct.expect
index 979b06e..8c84e9b 100644
--- a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.direct.expect
@@ -16,13 +16,13 @@
     case 2:
       {
         result = 2;
-        throw new core::FallThroughError::_create("pkg/front_end/testcases/rasta/switch_execution_case_t02.dart", 35);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 35);
       }
     #L4:
     case 3:
       {
         result = 3;
-        throw new core::FallThroughError::_create("pkg/front_end/testcases/rasta/switch_execution_case_t02.dart", 36);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 36);
       }
     #L5:
     default:
@@ -41,7 +41,7 @@
     case 2:
       {
         result = 1;
-        throw new core::FallThroughError::_create("pkg/front_end/testcases/rasta/switch_execution_case_t02.dart", 46);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 46);
       }
     #L8:
     case 3:
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through.dart.direct.expect b/pkg/front_end/testcases/rasta/switch_fall_through.dart.direct.expect
index 43d777a..bbdd5fa 100644
--- a/pkg/front_end/testcases/rasta/switch_fall_through.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/switch_fall_through.dart.direct.expect
@@ -13,7 +13,7 @@
           break #L1;
           ;
         }
-        throw new core::FallThroughError::_create("pkg/front_end/testcases/rasta/switch_fall_through.dart", 7);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 7);
       }
     #L3:
     case 2:
@@ -24,7 +24,7 @@
             break #L1;
           }
         }
-        throw new core::FallThroughError::_create("pkg/front_end/testcases/rasta/switch_fall_through.dart", 13);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 13);
       }
     #L4:
     case 3:
@@ -35,7 +35,7 @@
         finally {
           break #L1;
         }
-        throw new core::FallThroughError::_create("pkg/front_end/testcases/rasta/switch_fall_through.dart", 20);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 20);
       }
     #L5:
     case 4:
@@ -46,7 +46,7 @@
         }
         finally {
         }
-        throw new core::FallThroughError::_create("pkg/front_end/testcases/rasta/switch_fall_through.dart", 26);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 26);
       }
     #L6:
     case 5:
@@ -56,7 +56,7 @@
         }
         finally {
         }
-        throw new core::FallThroughError::_create("pkg/front_end/testcases/rasta/switch_fall_through.dart", 31);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 31);
       }
     #L7:
     case 10000:
diff --git a/pkg/front_end/testcases/redirecting_factory_chain_test.dart.direct.expect b/pkg/front_end/testcases/redirecting_factory_chain_test.dart.direct.expect
index 8d9ab57..fb200fc 100644
--- a/pkg/front_end/testcases/redirecting_factory_chain_test.dart.direct.expect
+++ b/pkg/front_end/testcases/redirecting_factory_chain_test.dart.direct.expect
@@ -6,8 +6,8 @@
   constructor •() → void
     : super core::Object::•()
     ;
-  factory first() = self::A::•;
-  factory second() = self::A::first;
+  redirecting_factory first() = self::A::•;
+  redirecting_factory second() = self::A::first;
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/redirecting_factory_chain_test.dart.outline.expect b/pkg/front_end/testcases/redirecting_factory_chain_test.dart.outline.expect
index c8fde7b..c5cbd80 100644
--- a/pkg/front_end/testcases/redirecting_factory_chain_test.dart.outline.expect
+++ b/pkg/front_end/testcases/redirecting_factory_chain_test.dart.outline.expect
@@ -5,8 +5,8 @@
 class A extends core::Object {
   constructor •() → void
     ;
-  factory first() = self::A::•;
-  factory second() = self::A::first;
+  redirecting_factory first() = self::A::•;
+  redirecting_factory second() = self::A::first;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/redirecting_factory_chain_test.dart.strong.expect b/pkg/front_end/testcases/redirecting_factory_chain_test.dart.strong.expect
index 8d9ab57..fb200fc 100644
--- a/pkg/front_end/testcases/redirecting_factory_chain_test.dart.strong.expect
+++ b/pkg/front_end/testcases/redirecting_factory_chain_test.dart.strong.expect
@@ -6,8 +6,8 @@
   constructor •() → void
     : super core::Object::•()
     ;
-  factory first() = self::A::•;
-  factory second() = self::A::first;
+  redirecting_factory first() = self::A::•;
+  redirecting_factory second() = self::A::first;
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/redirecting_factory_simple_test.dart.direct.expect b/pkg/front_end/testcases/redirecting_factory_simple_test.dart.direct.expect
index 76c0f44..2ea9699 100644
--- a/pkg/front_end/testcases/redirecting_factory_simple_test.dart.direct.expect
+++ b/pkg/front_end/testcases/redirecting_factory_simple_test.dart.direct.expect
@@ -6,7 +6,7 @@
   constructor •() → void
     : super core::Object::•()
     ;
-  factory redir() = self::A::•;
+  redirecting_factory redir() = self::A::•;
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/redirecting_factory_simple_test.dart.outline.expect b/pkg/front_end/testcases/redirecting_factory_simple_test.dart.outline.expect
index c7b7c78..f14f820 100644
--- a/pkg/front_end/testcases/redirecting_factory_simple_test.dart.outline.expect
+++ b/pkg/front_end/testcases/redirecting_factory_simple_test.dart.outline.expect
@@ -5,7 +5,7 @@
 class A extends core::Object {
   constructor •() → void
     ;
-  factory redir() = self::A::•;
+  redirecting_factory redir() = self::A::•;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/redirecting_factory_simple_test.dart.strong.expect b/pkg/front_end/testcases/redirecting_factory_simple_test.dart.strong.expect
index 76c0f44..2ea9699 100644
--- a/pkg/front_end/testcases/redirecting_factory_simple_test.dart.strong.expect
+++ b/pkg/front_end/testcases/redirecting_factory_simple_test.dart.strong.expect
@@ -6,7 +6,7 @@
   constructor •() → void
     : super core::Object::•()
     ;
-  factory redir() = self::A::•;
+  redirecting_factory redir() = self::A::•;
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.direct.expect b/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.direct.expect
index 66c4e8a..bf535a5 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.direct.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.direct.expect
@@ -16,7 +16,7 @@
   constructor •() → void
     : super core::Object::•()
     ;
-  factory redir() = self::B::•<self::Y>;
+  redirecting_factory redir() = self::B::•<self::Y>;
 }
 class B<T extends self::X> extends self::A {
   constructor •() → void
diff --git a/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.outline.expect b/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.outline.expect
index 95ab8bf..98ad89c 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.outline.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.outline.expect
@@ -13,7 +13,7 @@
 class A extends core::Object {
   constructor •() → void
     ;
-  factory redir() = self::B::•<self::Y>;
+  redirecting_factory redir() = self::B::•<self::Y>;
 }
 class B<T extends self::X> extends self::A {
   constructor •() → void
diff --git a/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.strong.expect b/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.strong.expect
index 66c4e8a..bf535a5 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.strong.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.strong.expect
@@ -16,7 +16,7 @@
   constructor •() → void
     : super core::Object::•()
     ;
-  factory redir() = self::B::•<self::Y>;
+  redirecting_factory redir() = self::B::•<self::Y>;
 }
 class B<T extends self::X> extends self::A {
   constructor •() → void
diff --git a/pkg/front_end/testcases/redirecting_factory_typeparam_test.dart.direct.expect b/pkg/front_end/testcases/redirecting_factory_typeparam_test.dart.direct.expect
index ed3508e..8e10422 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeparam_test.dart.direct.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeparam_test.dart.direct.expect
@@ -6,7 +6,7 @@
   constructor •(self::A::T t, self::A::S s) → void
     : super core::Object::•()
     ;
-  factory redir<T extends core::Object, S extends core::Object>(T t, S s) = self::A::•<T, S>;
+  redirecting_factory redir<T extends core::Object, S extends core::Object>(T t, S s) = self::A::•<T, S>;
 }
 static method main() → dynamic {
   new self::A::•<core::int, core::String>(42, "foobar");
diff --git a/pkg/front_end/testcases/redirecting_factory_typeparam_test.dart.outline.expect b/pkg/front_end/testcases/redirecting_factory_typeparam_test.dart.outline.expect
index 6c99e66..8e9ac92 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeparam_test.dart.outline.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeparam_test.dart.outline.expect
@@ -5,7 +5,7 @@
 class A<T extends core::Object, S extends core::Object> extends core::Object {
   constructor •(self::A::T t, self::A::S s) → void
     ;
-  factory redir<T extends core::Object, S extends core::Object>(T t, S s) = self::A::•<T, S>;
+  redirecting_factory redir<T extends core::Object, S extends core::Object>(T t, S s) = self::A::•<T, S>;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/redirecting_factory_typeparam_test.dart.strong.expect b/pkg/front_end/testcases/redirecting_factory_typeparam_test.dart.strong.expect
index ed3508e..8e10422 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeparam_test.dart.strong.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeparam_test.dart.strong.expect
@@ -6,7 +6,7 @@
   constructor •(self::A::T t, self::A::S s) → void
     : super core::Object::•()
     ;
-  factory redir<T extends core::Object, S extends core::Object>(T t, S s) = self::A::•<T, S>;
+  redirecting_factory redir<T extends core::Object, S extends core::Object>(T t, S s) = self::A::•<T, S>;
 }
 static method main() → dynamic {
   new self::A::•<core::int, core::String>(42, "foobar");
diff --git a/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.direct.expect b/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.direct.expect
index f87c110..de9c98b 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.direct.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.direct.expect
@@ -16,7 +16,7 @@
   constructor •(self::A::T t, self::A::S s) → void
     : super core::Object::•()
     ;
-  factory redir<T extends core::Object, S extends T>(T t, S s) = self::A::•<T, S>;
+  redirecting_factory redir<T extends core::Object, S extends T>(T t, S s) = self::A::•<T, S>;
 }
 static method main() → dynamic {
   new self::A::•<self::X, self::Y>(new self::X::•(), new self::Y::•());
diff --git a/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.outline.expect b/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.outline.expect
index 27dc65e..a5a5d15 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.outline.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.outline.expect
@@ -13,7 +13,7 @@
 class A<T extends core::Object, S extends self::A::T> extends core::Object {
   constructor •(self::A::T t, self::A::S s) → void
     ;
-  factory redir<T extends core::Object, S extends T>(T t, S s) = self::A::•<T, S>;
+  redirecting_factory redir<T extends core::Object, S extends T>(T t, S s) = self::A::•<T, S>;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.strong.expect b/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.strong.expect
index f87c110..de9c98b 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.strong.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.strong.expect
@@ -16,7 +16,7 @@
   constructor •(self::A::T t, self::A::S s) → void
     : super core::Object::•()
     ;
-  factory redir<T extends core::Object, S extends T>(T t, S s) = self::A::•<T, S>;
+  redirecting_factory redir<T extends core::Object, S extends T>(T t, S s) = self::A::•<T, S>;
 }
 static method main() → dynamic {
   new self::A::•<self::X, self::Y>(new self::X::•(), new self::Y::•());
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
index c9de4c1..999c91b 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
@@ -4,6 +4,6 @@
 
 static method bad() → dynamic {
   core::String a = "";
-  const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.\n  a.\"\";\n    ^"));
+  const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.\n  a.\"\";\n    ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect
index 62106a4..9f64d07 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect
@@ -1,7 +1,7 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.\nTry adding {}.\nf() =\n    ^", "pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.\nf() =\n    ^", "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.\nh() => null;\n^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.\nTry adding {}.\nf() =\n    ^", "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.\nh() => null;\n^"]/* from null */;
 static method main() → dynamic {}
 static method f() → dynamic
   return let final () → dynamic h = () → dynamic => null in h;
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect
index 62106a4..9f64d07 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect
@@ -1,7 +1,7 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.\nTry adding {}.\nf() =\n    ^", "pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.\nf() =\n    ^", "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.\nh() => null;\n^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.\nTry adding {}.\nf() =\n    ^", "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.\nh() => null;\n^"]/* from null */;
 static method main() → dynamic {}
 static method f() → dynamic
   return let final () → dynamic h = () → dynamic => null in h;
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
index f3457c6..8bafc43 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.\n  x.(null);\n    ^"));
+  const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.\n  x.(null);\n    ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
index a58c795..9690132 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
@@ -3,10 +3,10 @@
 import "dart:core" as core;
 
 static method f() → dynamic sync* {
-  const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.\n  return missing;\n  ^"));
+  const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.\n  return missing;\n  ^"));
 }
 static method g() → dynamic sync* 
-  const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.\ng() sync* => dummy;\n             ^"));
+  const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.\ng() sync* => dummy;\n             ^"));
 static method h() → dynamic sync* {
   (() → core::String => "return").call();
 }
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
index 3c1d7c5..e52d320 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Previous use of 'i'.\n  for (int i = i;; false) {}\n               ^"]/* from null */;
 static method bad() → dynamic {
-  for (final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.\n  for (int i = i;; false) {}\n           ^")); ; false) {
+  for (final dynamic #t1 = const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.\n  for (int i = i;; false) {}\n           ^")); ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
index e6d2919..f4e5fc3 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  return const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.\n  return null?.(1);\n               ^"));
+  return const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.\n  return null?.(1);\n               ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
index 0bf317f..98db547 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  return const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31180.dart:6:16: Error: Expected an identifier, but got '['.\n  return null?.[1];\n               ^"));
+  return const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31180.dart:6:16: Error: Expected an identifier, but got '['.\n  return null?.[1];\n               ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
index a3e4e13..2636284 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected ';' before this.\n  for (int i = 0, i > 10; i++) {}\n                    ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.\n  for (int i = 0, i > 10; i++) {}\n                    ^"]/* from null */;
 static method bad() → dynamic {
-  for (core::int i = 0, final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.\n  for (int i = 0, i > 10; i++) {}\n                  ^")); (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})))).>(10) as{TypeError} core::bool; i = i.{core::num::+}(1)) {
+  for (core::int i = 0, final dynamic #t1 = const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.\n  for (int i = 0, i > 10; i++) {}\n                  ^")); (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})))).>(10) as{TypeError} core::bool; i = i.{core::num::+}(1)) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
index c888cdc..b576812 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  return const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.\n  return null?.true;\n               ^"));
+  return const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.\n  return null?.true;\n               ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
index b572c76..3ec70a0 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  return const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.\n  return null?.1;\n               ^"));
+  return const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.\n  return null?.1;\n               ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
index 0177799..e570872 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
@@ -5,6 +5,6 @@
 class Increment extends core::Object {
   field core::int x = null;
   constructor •() → void
-    : final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31192.dart:7:18: Error: Not a valid initializer.\nTo initialize a field, use the syntax 'name = value'.\n  Increment() : x++ {}\n                 ^")) {}
+    : final dynamic #t1 = const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31192.dart:7:18: Error: Not a valid initializer.\nTo initialize a field, use the syntax 'name = value'.\n  Increment() : x++ {}\n                 ^")) {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
index 2761375..6dde538 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
@@ -9,7 +9,7 @@
 }
 class B extends self::A {
   constructor •() → void
-    : final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Super calls can't be used as expressions.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n  B(): super().foo() {}\n       ^")).foo() {}
+    : final dynamic #t1 = const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Super calls can't be used as expressions.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n  B(): super().foo() {}\n       ^")).foo() {}
 }
 static method bad() → dynamic {
   new self::B::•();
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
index 19b85e6..8f3f8c1 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
@@ -8,7 +8,7 @@
     ;
   method f<generic-covariant-impl generic-covariant-interface U extends self::C::T>(self::C::f::U x) → void {}
   method g1<generic-covariant-impl generic-covariant-interface U extends self::C::T>() → void {
-    this.{self::C::f}<self::C::g1::U>(1.5 as{TypeError} self::C::g1::U);
+    this.{self::C::f}<self::C::g1::U>(let final dynamic #t1 = 1.5 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:35: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::C::g1::U'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::C::g1::U'.\n    this.f<U> /*@callKind=this*/ (1.5);\n                                  ^")));
   }
 }
 static method g2(self::C<core::Object> c) → void {
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart.direct.expect
index 5871a4e..c72d8754 100644
--- a/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart.direct.expect
@@ -4,9 +4,7 @@
 
 class C extends core::Object {
   constructor •(core::Object o) → void
-    : final dynamic #t1 = (() → dynamic
-      assert(o);
-).call(), super core::Object::•()
+    : assert(o), super core::Object::•()
     ;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart.strong.expect
index 3b9eddc..7d2a4f1 100644
--- a/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart.strong.expect
@@ -4,9 +4,7 @@
 
 class C extends core::Object {
   constructor •(core::Object o) → void
-    : final dynamic #t1 = (() → dynamic
-      assert(o as{TypeError} core::bool);
-).call(), super core::Object::•()
+    : assert(o as{TypeError} core::bool), super core::Object::•()
     ;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
index f7be6b1..6653026 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
@@ -41,11 +41,11 @@
   return 2;
 static method main() → void {
   self::D d = new self::D::•(new self::C::•<core::num>(self::numToInt));
-  let final self::D #t1 = d in #t1.{self::D::value} = (#t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num) as{TypeError} (core::int) → core::int;
+  let final self::D #t1 = d in #t1.{self::D::value} = let final dynamic #t2 = #t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:50:41: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.\n  d.value /*@checkReturn=(num) -> num*/ += 1;\n                                        ^"));
   self::expect(d.{self::D::setValue}(0), 1);
   d = new self::D::•(new self::C::•<core::num>(self::numToNum));
   self::expectTypeError(() → core::Null {
-    let final self::D #t2 = d in #t2.{self::D::value} = (#t2.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num) as{TypeError} (core::int) → core::int;
+    let final self::D #t3 = d in #t3.{self::D::value} = let final dynamic #t4 = #t3.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:54:43: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.\n    d.value /*@checkReturn=(num) -> num*/ += 1;\n                                          ^"));
   });
   self::expect(d.{self::D::setValue}, null);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
index 65b25e6..b614d43 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
@@ -19,9 +19,9 @@
   set x(self::B<(self::C::T) → void> value) → void {}
 }
 static method test(self::C<core::num> c) → void {
-  let final self::C<core::num> #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(new self::B::•<core::num>() as{TypeError} self::B<(core::num) → void>);
-  self::B<(core::num) → void> y = let final self::C<core::num> #t2 = c in #t2.{self::C::x} = (#t2.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(new self::B::•<core::num>() as{TypeError} self::B<(core::num) → void>);
-  let final self::C<core::num> #t3 = c in (#t3.{self::C::x} as{TypeError} self::B<(core::num) → void>).{core::Object::==}(null) ?{self::B<core::Object>} #t3.{self::C::x} = new self::B::•<core::num>() as{TypeError} self::B<(core::num) → void> : null;
-  self::B<core::Object> z = let final self::C<core::num> #t4 = c in let final dynamic #t5 = #t4.{self::C::x} as{TypeError} self::B<(core::num) → void> in #t5.{core::Object::==}(null) ?{self::B<core::Object>} #t4.{self::C::x} = new self::B::•<core::num>() as{TypeError} self::B<(core::num) → void> : #t5;
+  let final self::C<core::num> #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t2 = new self::B::•<core::num>() in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.\n  c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();\n                                                ^")));
+  self::B<(core::num) → void> y = let final self::C<core::num> #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t4 = new self::B::•<core::num>() in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.\n  var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();\n                                                        ^")));
+  let final self::C<core::num> #t5 = c in (#t5.{self::C::x} as{TypeError} self::B<(core::num) → void>).{core::Object::==}(null) ?{self::B<core::Object>} #t5.{self::C::x} = let final dynamic #t6 = new self::B::•<core::num>() in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.\n  c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();\n                                                 ^")) : null;
+  self::B<core::Object> z = let final self::C<core::num> #t7 = c in let final dynamic #t8 = #t7.{self::C::x} as{TypeError} self::B<(core::num) → void> in #t8.{core::Object::==}(null) ?{self::B<core::Object>} #t7.{self::C::x} = let final dynamic #t9 = new self::B::•<core::num>() in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:24:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.\n  var z = c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();\n                                                         ^")) : #t8;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index ce58801..8b12cbf 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -11,7 +11,6 @@
 argument_mismatch: TypeCheckError
 async_function: Fail
 await: Fail
-bad_setter_abstract: TypeCheckError
 bug30695: TypeCheckError
 bug31124: RuntimeError # Test has an intentional error
 call: Fail
@@ -22,7 +21,6 @@
 covariant_generic: Fail
 cycles: Fail
 default_values: Fail
-duplicated_named_args_3: TypeCheckError
 escape: Fail
 expressions: Fail
 external: Fail
@@ -64,7 +62,6 @@
 warn_unresolved_sends: TypeCheckError
 
 inference/abstract_class_instantiation: Fail # Issue #30040
-inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference: TypeCheckError
 inference/block_bodied_lambdas_infer_bottom_async_star: RuntimeError
 inference/conflicts_can_happen: TypeCheckError
 inference/conflicts_can_happen2: TypeCheckError
@@ -82,6 +79,7 @@
 inference/downwards_inference_on_function_of_t_using_the_t: Fail # Issue #29798
 inference/downwards_inference_on_generic_function_expressions: TypeCheckError
 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
@@ -89,6 +87,8 @@
 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
@@ -101,24 +101,21 @@
 inference/generic_methods_uses_greatest_lower_bound: RuntimeError
 inference/infer_field_override_multiple: TypeCheckError
 inference/infer_from_complex_expressions_if_outer_most_value_is_precise: TypeCheckError
-inference/infer_local_function_referenced_before_declaration: TypeCheckError
 inference/infer_method_missing_params: TypeCheckError
+inference/infer_type_regardless_of_declaration_order_or_cycles: RuntimeError
+inference/infer_types_on_generic_instantiations_4: RuntimeError
 inference/infer_types_on_generic_instantiations_infer: TypeCheckError
-inference/infer_types_on_loop_indices_for_each_loop: TypeCheckError
 inference/instantiate_to_bounds_generic_has_bound_defined_after transform: RuntimeError
-inference/property_set_bad_setter: TypeCheckError
 inference/unresolved_super: TypeCheckError
 inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1: Fail # Issue #25824
 inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2: Fail # Issue #25824
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: Fail # Issue #25824
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2: Fail # Issue #25824
-inference_new/infer_assign_to_index_super_upwards: TypeCheckError # Issue #31417
-inference_new/infer_assign_to_index_this_upwards: TypeCheckError # Issue #31417
-inference_new/infer_assign_to_index_upwards: TypeCheckError # Issue #31417
-inference_new/infer_assign_to_property_custom: TypeCheckError # Issue #31417
+inference_new/infer_assign_to_index_super_upwards: TypeCheckError
+inference_new/infer_assign_to_index_this_upwards: TypeCheckError
+inference_new/infer_assign_to_index_upwards: TypeCheckError
 inference_new/infer_field_getter_setter_mismatch: TypeCheckError
 inference_new/infer_field_override_getter_overrides_setter: TypeCheckError
-inference_new/invalid_assignment_during_toplevel_inference: TypeCheckError # Issue #31417
 
 rasta/abstract_constructor: Fail
 rasta/bad_constructor_redirection: Fail
@@ -201,24 +198,15 @@
 rasta/unresolved_recovery: Fail
 rasta/unsupported_platform_library: Fail
 
-regress/issue_29941: TypeCheckError
-regress/issue_29943: TypeCheckError
 regress/issue_29975: Fail # Issue 29975.
 regress/issue_29976: RuntimeError # Issue 29976.
 regress/issue_29982: Fail # Issue 29982.
-regress/issue_29983: TypeCheckError
-regress/issue_29984: TypeCheckError
 regress/issue_30836: RuntimeError # Issue 30836.
 regress/issue_31155: Crash # Issue 31155.
-regress/issue_31157: TypeCheckError
-regress/issue_31180: TypeCheckError
 regress/issue_31184: TypeCheckError
-regress/issue_31186: TypeCheckError
-regress/issue_31187: TypeCheckError
-regress/issue_31192: TypeCheckError
-regress/issue_31198: TypeCheckError
 
 runtime_checks/forwarding_stub_with_default_values: RuntimeError # Bug 31027
+runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: RuntimeError
 runtime_checks_new/mixin_forwarding_stub_field: TypeCheckError
 runtime_checks_new/mixin_forwarding_stub_getter: TypeCheckError
 runtime_checks_new/mixin_forwarding_stub_setter: TypeCheckError
diff --git a/pkg/front_end/testcases/top_level_accessors.dart.direct.expect b/pkg/front_end/testcases/top_level_accessors.dart.direct.expect
index 6d40e72..35b8eac 100644
--- a/pkg/front_end/testcases/top_level_accessors.dart.direct.expect
+++ b/pkg/front_end/testcases/top_level_accessors.dart.direct.expect
@@ -2,12 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-static set /* from pkg/front_end/testcases/top_level_accessors_part.dart */ exitCode(core::int code) → void {
+static set /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode(core::int code) → void {
   core::print(code);
 }
-static get /* from pkg/front_end/testcases/top_level_accessors_part.dart */ exitCode() → core::int
+static get /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode() → core::int
   return 0;
-static method /* from pkg/front_end/testcases/top_level_accessors_part.dart */ main() → dynamic {
+static method /* from org-dartlang-testcase:///top_level_accessors_part.dart */ main() → dynamic {
   self::exitCode = 42;
   core::print(self::exitCode);
 }
diff --git a/pkg/front_end/testcases/top_level_accessors.dart.outline.expect b/pkg/front_end/testcases/top_level_accessors.dart.outline.expect
index 59a3afd..da336ad 100644
--- a/pkg/front_end/testcases/top_level_accessors.dart.outline.expect
+++ b/pkg/front_end/testcases/top_level_accessors.dart.outline.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-static set /* from pkg/front_end/testcases/top_level_accessors_part.dart */ exitCode(core::int code) → void
+static set /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode(core::int code) → void
   ;
-static get /* from pkg/front_end/testcases/top_level_accessors_part.dart */ exitCode() → core::int
+static get /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode() → core::int
   ;
-static method /* from pkg/front_end/testcases/top_level_accessors_part.dart */ main() → dynamic
+static method /* from org-dartlang-testcase:///top_level_accessors_part.dart */ main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
index f279fce..d1fddfc 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
@@ -7,9 +7,9 @@
     : super core::Object::•()
     ;
   method method() → invalid-type
-    return "Hello, World!" as{TypeError} invalid-type;
+    return let final dynamic #t1 = "Hello, World!" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.\nTry changing the type of the left hand side, or casting the right hand side to 'invalid-type'.\n  T.String method() => \"Hello, World!\";\n                       ^"));
 }
 static method main() → dynamic {
-  core::String s = new self::C::•<dynamic>().{self::C::method}() as{TypeError} core::String;
+  core::String s = let final dynamic #t2 = new self::C::•<dynamic>().{self::C::method}() in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  T.String s = new C().method();\n                       ^"));
   core::print(s);
 }
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index af7f17a..5af82b0 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -124,6 +124,19 @@
     },
 
     {
+      "name": "incremental",
+      "kind": "Chain",
+      "source": "test/fasta/incremental_test.dart",
+      "path": "testcases/",
+      "status": "testcases/incremental.status",
+      "pattern": [
+        "\\.incremental\\.yaml$"
+      ],
+      "exclude": [
+      ]
+    },
+
+    {
       "name": "sdk",
       "kind": "Chain",
       "source": "test/fasta/sdk_test.dart",
diff --git a/pkg/front_end/tool/_fasta/bulk_compile.dart b/pkg/front_end/tool/_fasta/bulk_compile.dart
index 646d1c2..30940de 100644
--- a/pkg/front_end/tool/_fasta/bulk_compile.dart
+++ b/pkg/front_end/tool/_fasta/bulk_compile.dart
@@ -6,12 +6,14 @@
 
 import 'dart:convert' show UTF8;
 
-import 'package:front_end/compiler_options.dart' show CompilerOptions;
+import 'package:front_end/src/api_prototype/compiler_options.dart'
+    show CompilerOptions;
 
-import 'package:front_end/file_system.dart'
+import 'package:front_end/src/api_prototype/file_system.dart'
     show FileSystem, FileSystemEntity, FileSystemException;
 
-import 'package:front_end/physical_file_system.dart' show PhysicalFileSystem;
+import 'package:front_end/src/api_prototype/physical_file_system.dart'
+    show PhysicalFileSystem;
 
 import 'package:front_end/src/base/processed_options.dart'
     show ProcessedOptions;
diff --git a/pkg/front_end/tool/_fasta/bulk_compile_test.dart b/pkg/front_end/tool/_fasta/bulk_compile_test.dart
index cbd81b2..2c3d366 100644
--- a/pkg/front_end/tool/_fasta/bulk_compile_test.dart
+++ b/pkg/front_end/tool/_fasta/bulk_compile_test.dart
@@ -4,7 +4,8 @@
 
 import 'dart:isolate' show ReceivePort;
 
-import 'package:front_end/compiler_options.dart' show CompilerOptions;
+import 'package:front_end/src/api_prototype/compiler_options.dart'
+    show CompilerOptions;
 
 import 'bulk_compile.dart' show BulkCompiler;
 
diff --git a/pkg/front_end/tool/_fasta/command_line.dart b/pkg/front_end/tool/_fasta/command_line.dart
index 1ee5d74..e1101f0 100644
--- a/pkg/front_end/tool/_fasta/command_line.dart
+++ b/pkg/front_end/tool/_fasta/command_line.dart
@@ -6,7 +6,8 @@
 
 import 'dart:io' show exit;
 
-import 'package:front_end/compiler_options.dart' show CompilerOptions;
+import 'package:front_end/src/api_prototype/compiler_options.dart'
+    show CompilerOptions;
 
 import 'package:front_end/src/base/processed_options.dart'
     show ProcessedOptions;
diff --git a/pkg/front_end/tool/_fasta/generate_messages.dart b/pkg/front_end/tool/_fasta/generate_messages.dart
index 9263458..6988064 100644
--- a/pkg/front_end/tool/_fasta/generate_messages.dart
+++ b/pkg/front_end/tool/_fasta/generate_messages.dart
@@ -114,13 +114,24 @@
         break;
 
       case "#type":
-        parameters.add("DartType type");
-        arguments.add("'type': type");
+        parameters.add("DartType _type");
+        conversions.add(r"""
+NameSystem nameSystem = new NameSystem();
+StringBuffer buffer = new StringBuffer();
+new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
+String type = '$buffer';
+""");
+        arguments.add("'type': _type");
         break;
 
       case "#type2":
-        parameters.add("DartType type2");
-        arguments.add("'type2': type2");
+        parameters.add("DartType _type2");
+        conversions.add(r"""
+buffer = new StringBuffer();
+new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
+String type2 = '$buffer';
+""");
+        arguments.add("'type2': _type2");
         break;
 
       case "#uri":
diff --git a/pkg/front_end/tool/bazel/worker.dart b/pkg/front_end/tool/bazel/worker.dart
index 59cd433..d49ca87 100644
--- a/pkg/front_end/tool/bazel/worker.dart
+++ b/pkg/front_end/tool/bazel/worker.dart
@@ -6,7 +6,8 @@
 
 import 'package:args/args.dart';
 import 'package:bazel_worker/bazel_worker.dart';
-import 'package:front_end/front_end.dart' hide FileSystemException;
+import 'package:front_end/src/api_prototype/front_end.dart'
+    hide FileSystemException;
 import 'package:front_end/src/fasta/command_line_reporting.dart';
 import 'package:kernel/target/targets.dart';
 
@@ -73,6 +74,7 @@
 
 /// An [ArgParser] for generating kernel summaries.
 final summaryArgsParser = new ArgParser()
+  ..addFlag('help', negatable: false)
   ..addOption('dart-sdk-summary')
   ..addOption('input-summary', allowMultiple: true)
   ..addOption('multi-root', allowMultiple: true)
@@ -92,6 +94,12 @@
     {bool isWorker: false, StringBuffer outputBuffer}) async {
   bool succeeded = true;
   var parsedArgs = summaryArgsParser.parse(args);
+
+  if (parsedArgs['help']) {
+    print(summaryArgsParser.usage);
+    exit(0);
+  }
+
   var options = new CompilerOptions()
     ..packagesFileUri = Uri.parse(parsedArgs['packages-file'])
     ..inputSummaries = parsedArgs['input-summary'].map(Uri.parse).toList()
diff --git a/pkg/front_end/tool/example.dart b/pkg/front_end/tool/example.dart
index 5483558..a826fe8 100644
--- a/pkg/front_end/tool/example.dart
+++ b/pkg/front_end/tool/example.dart
@@ -4,8 +4,8 @@
 
 import 'dart:async';
 
-import 'package:front_end/kernel_generator.dart';
-import 'package:front_end/compiler_options.dart';
+import 'package:front_end/src/api_prototype/kernel_generator.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
 import 'package:kernel/binary/ast_to_binary.dart';
 import 'package:kernel/kernel.dart' show Program;
 
diff --git a/pkg/front_end/tool/fasta_perf.dart b/pkg/front_end/tool/fasta_perf.dart
index 141c203..e5f8125 100644
--- a/pkg/front_end/tool/fasta_perf.dart
+++ b/pkg/front_end/tool/fasta_perf.dart
@@ -11,7 +11,7 @@
 import 'package:analyzer/src/fasta/ast_builder.dart';
 import 'package:args/args.dart';
 
-import 'package:front_end/front_end.dart';
+import 'package:front_end/src/api_prototype/front_end.dart';
 import 'package:front_end/src/base/processed_options.dart';
 import 'package:front_end/src/fasta/parser.dart';
 import 'package:front_end/src/fasta/scanner.dart';
diff --git a/pkg/front_end/tool/fasta_perf_test.dart b/pkg/front_end/tool/fasta_perf_test.dart
index 96123f8..6c174c0 100644
--- a/pkg/front_end/tool/fasta_perf_test.dart
+++ b/pkg/front_end/tool/fasta_perf_test.dart
@@ -14,7 +14,8 @@
     'scan',
     'kernel_gen_e2e',
   ];
-  var inputFile = Platform.script.resolve('../lib/file_system.dart').path;
+  var inputFile =
+      Platform.script.resolve('../lib/src/api_prototype/file_system.dart').path;
   for (var id in benchIds) {
     print('=== legacy for $id $inputFile');
     await m.main(['--legacy', id, inputFile]);
diff --git a/pkg/front_end/tool/incremental_perf.dart b/pkg/front_end/tool/incremental_perf.dart
index 09065e9..a22bebb 100644
--- a/pkg/front_end/tool/incremental_perf.dart
+++ b/pkg/front_end/tool/incremental_perf.dart
@@ -47,12 +47,13 @@
 import 'dart:io' hide FileSystemEntity;
 
 import 'package:args/args.dart';
-import 'package:front_end/byte_store.dart';
-import 'package:front_end/file_system.dart' show FileSystemEntity;
-import 'package:front_end/front_end.dart';
-import 'package:front_end/incremental_kernel_generator.dart';
-import 'package:front_end/memory_file_system.dart';
-import 'package:front_end/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/byte_store.dart';
+import 'package:front_end/src/api_prototype/file_system.dart'
+    show FileSystemEntity;
+import 'package:front_end/src/api_prototype/front_end.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/api_prototype/physical_file_system.dart';
 import 'package:front_end/src/base/processed_options.dart';
 import 'package:front_end/src/byte_store/protected_file_byte_store.dart';
 import 'package:front_end/src/fasta/uri_translator.dart';
diff --git a/pkg/front_end/tool/perf_common.dart b/pkg/front_end/tool/perf_common.dart
index 9dab54a..60feee3 100644
--- a/pkg/front_end/tool/perf_common.dart
+++ b/pkg/front_end/tool/perf_common.dart
@@ -7,7 +7,7 @@
 
 import 'dart:io';
 
-import 'package:front_end/front_end.dart';
+import 'package:front_end/src/api_prototype/front_end.dart';
 import 'package:front_end/src/fasta/fasta_codes.dart';
 
 /// Error messages that we temporarily allow when compiling benchmarks in strong
diff --git a/pkg/front_end/tool/perf_test.dart b/pkg/front_end/tool/perf_test.dart
index dc046e4..678c69b 100644
--- a/pkg/front_end/tool/perf_test.dart
+++ b/pkg/front_end/tool/perf_test.dart
@@ -9,7 +9,8 @@
 
 main() async {
   var benchIds = ['scan', 'parse', 'linked_summarize'];
-  var inputFile = Platform.script.resolve('../lib/file_system.dart').path;
+  var inputFile =
+      Platform.script.resolve('../lib/src/api_prototype/file_system.dart').path;
   for (var id in benchIds) {
     await m.main([id, inputFile]);
   }
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index dc2d7ba..9556f07 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -408,6 +408,12 @@
   VariableDeclaration variable;
 }
 
+type AssertInitializer extends Initializer {
+  Byte tag = 12;
+  Byte isSynthetic;
+  AssertStatement statement;
+}
+
 /*
 enum AsyncMarker {
   Sync,
@@ -1030,6 +1036,7 @@
 }
 
 type Catch {
+  FileOffset fileOffset;
   DartType guard;
   Option<VariableDeclaration> exception;
   Option<VariableDeclaration> stackTrace;
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index e8df344..0979ecd 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -3,6 +3,20 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// -----------------------------------------------------------------------
+///                          WHEN CHANGING THIS FILE:
+/// -----------------------------------------------------------------------
+///
+/// If you are adding/removing/modifying fields/classes of the AST, you must
+/// also update the following files:
+///
+///   - binary/ast_to_binary.dart
+///   - binary/ast_from_binary.dart
+///   - text/ast_to_text.dart
+///   - clone.dart
+///   - binary.md
+///   - type_checker.dart (if relevant)
+///
+/// -----------------------------------------------------------------------
 ///                           ERROR HANDLING
 /// -----------------------------------------------------------------------
 ///
@@ -175,7 +189,7 @@
 
 abstract class FileUriNode extends TreeNode {
   /// The uri of the source file this node was loaded from.
-  String get fileUri;
+  Uri get fileUri;
 }
 
 /// Indirection between a reference and its definition.
@@ -262,7 +276,7 @@
   Uri importUri;
 
   /// The uri of the source file this library was loaded from.
-  String fileUri;
+  Uri fileUri;
 
   /// If true, the library is part of another build unit and its contents
   /// are only partially loaded.
@@ -511,9 +525,9 @@
 /// optionally with metadata.
 class LibraryPart extends TreeNode implements FileUriNode {
   final List<Expression> annotations;
-  final String fileUri;
+  final Uri fileUri;
 
-  LibraryPart(List<Expression> annotations, String fileUri)
+  LibraryPart(List<Expression> annotations, Uri fileUri)
       : this.byReference(annotations, fileUri);
 
   LibraryPart.byReference(this.annotations, this.fileUri) {
@@ -562,7 +576,7 @@
 /// Declaration of a type alias.
 class Typedef extends NamedNode implements FileUriNode {
   /// The uri of the source file that contains the declaration of this typedef.
-  String fileUri;
+  Uri fileUri;
   List<Expression> annotations = const <Expression>[];
   String name;
   final List<TypeParameter> typeParameters;
@@ -704,7 +718,7 @@
   bool isSyntheticMixinImplementation;
 
   /// The uri of the source file this class was loaded from.
-  String fileUri;
+  Uri fileUri;
 
   final List<TypeParameter> typeParameters;
 
@@ -1027,7 +1041,7 @@
   Expression initializer; // May be null.
 
   /// The uri of the source file this field was loaded from.
-  String fileUri;
+  Uri fileUri;
 
   Field(Name name,
       {this.type: const DynamicType(),
@@ -1304,10 +1318,6 @@
 /// linking and are treated as non-runnable members of classes that merely serve
 /// as containers for that information.
 ///
-/// Existing transformers may easily ignore [RedirectingFactoryConstructor]s,
-/// because the class is implemented as a subclass of [Member], and not as a
-/// subclass of, for example, [Constructor] or [Procedure].
-///
 /// Redirecting factory constructors can be unnamed.  In this case, the name is
 /// an empty string (in a [Name]).
 class RedirectingFactoryConstructor extends Member {
@@ -1363,7 +1373,6 @@
     setParents(this.namedParameters, this);
     this.isConst = isConst;
     this.isExternal = isExternal;
-    this.isSyntheticDefault = isSyntheticDefault;
     this.transformerFlags = transformerFlags;
   }
 
@@ -1374,10 +1383,6 @@
   bool get isConst => flags & FlagConst != 0;
   bool get isExternal => flags & FlagExternal != 0;
 
-  /// True if this is a synthetic default constructor inserted in a class that
-  /// does not otherwise declare any constructors.
-  bool get isSyntheticDefault => flags & FlagSyntheticDefault != 0;
-
   void set isConst(bool value) {
     flags = value ? (flags | FlagConst) : (flags & ~FlagConst);
   }
@@ -1386,12 +1391,6 @@
     flags = value ? (flags | FlagExternal) : (flags & ~FlagExternal);
   }
 
-  void set isSyntheticDefault(bool value) {
-    flags = value
-        ? (flags | FlagSyntheticDefault)
-        : (flags & ~FlagSyntheticDefault);
-  }
-
   bool get isInstanceMember => false;
   bool get hasGetter => false;
   bool get hasSetter => false;
@@ -1451,7 +1450,7 @@
   FunctionNode function;
 
   /// The uri of the source file this procedure was loaded from.
-  String fileUri;
+  Uri fileUri;
 
   Procedure(Name name, this.kind, this.function,
       {bool isAbstract: false,
@@ -1745,6 +1744,25 @@
   }
 }
 
+class AssertInitializer extends Initializer {
+  AssertStatement statement;
+
+  AssertInitializer(this.statement) {
+    statement.parent = this;
+  }
+
+  accept(InitializerVisitor v) => v.visitAssertInitializer(this);
+
+  visitChildren(Visitor v) {
+    statement.accept(v);
+  }
+
+  transformChildren(Transformer v) {
+    statement = statement.accept(v);
+    statement.parent = this;
+  }
+}
+
 // ------------------------------------------------------------------------
 //                            FUNCTIONS
 // ------------------------------------------------------------------------
@@ -5402,7 +5420,7 @@
   /// Map from a source file uri to a line-starts table and source code.
   /// Given a source file uri and a offset in that file one can translate
   /// it to a line:column position in that file.
-  final Map<String, Source> uriToSource;
+  final Map<Uri, Source> uriToSource;
 
   /// Mapping between string tags and [MetadataRepository] corresponding to
   /// those tags.
@@ -5415,10 +5433,10 @@
   Program(
       {CanonicalName nameRoot,
       List<Library> libraries,
-      Map<String, Source> uriToSource})
+      Map<Uri, Source> uriToSource})
       : root = nameRoot ?? new CanonicalName.root(),
         libraries = libraries ?? <Library>[],
-        uriToSource = uriToSource ?? <String, Source>{} {
+        uriToSource = uriToSource ?? <Uri, Source>{} {
     if (libraries != null) {
       for (int i = 0; i < libraries.length; ++i) {
         // The libraries are owned by this program, and so are their canonical
@@ -5464,7 +5482,7 @@
   Program get enclosingProgram => this;
 
   /// Translates an offset to line and column numbers in the given file.
-  Location getLocation(String file, int offset) {
+  Location getLocation(Uri file, int offset) {
     return uriToSource[file]?.getLocation(file, offset);
   }
 
@@ -5476,7 +5494,7 @@
 /// A tuple with file, line, and column number, for displaying human-readable
 /// locations.
 class Location {
-  final String file;
+  final Uri file;
   final int line; // 1-based.
   final int column; // 1-based.
 
@@ -5670,7 +5688,7 @@
   }
 
   /// Translates an offset to line and column numbers in the given file.
-  Location getLocation(String file, int offset) {
+  Location getLocation(Uri file, int offset) {
     RangeError.checkValueInInterval(offset, 0, lineStarts.last, 'offset');
     int low = 0, high = lineStarts.length - 1;
     while (low < high) {
@@ -5784,7 +5802,7 @@
 /// static analysis and runtime behavior of the library are unaffected.
 const informative = null;
 
-Location _getLocationInProgram(Program program, String fileUri, int offset) {
+Location _getLocationInProgram(Program program, Uri fileUri, int offset) {
   if (program != null) {
     return program.getLocation(fileUri, offset);
   } else {
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 12010e8..f2732b9 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -42,7 +42,7 @@
   final List<int> _bytes;
   int _byteOffset = 0;
   final List<String> _stringTable = <String>[];
-  final List<String> _sourceUriTable = <String>[];
+  final List<Uri> _sourceUriTable = <Uri>[];
   List<Constant> _constantTable;
   List<CanonicalName> _linkTable;
   int _transformerFlags = 0;
@@ -228,7 +228,7 @@
     return constant;
   }
 
-  String readUriReference() {
+  Uri readUriReference() {
     return _sourceUriTable[readUInt()];
   }
 
@@ -463,7 +463,7 @@
     _disableLazyReading = _readMetadataSection(program) || _disableLazyReading;
 
     _byteOffset = index.binaryOffsetForSourceTable;
-    Map<String, Source> uriToSource = readUriToSource();
+    Map<Uri, Source> uriToSource = readUriToSource();
     program.uriToSource.addAll(uriToSource);
 
     _byteOffset = index.binaryOffsetForConstantTable;
@@ -484,15 +484,15 @@
     _byteOffset = _programStartOffset + programFileSize;
   }
 
-  Map<String, Source> readUriToSource() {
+  Map<Uri, Source> readUriToSource() {
     int length = readUint32();
 
     // Read data.
     _sourceUriTable.length = length;
-    Map<String, Source> uriToSource = <String, Source>{};
+    Map<Uri, Source> uriToSource = <Uri, Source>{};
     for (int i = 0; i < length; ++i) {
       List<int> uriBytes = readByteList();
-      String uri = const Utf8Decoder().convert(uriBytes);
+      Uri uri = Uri.parse(const Utf8Decoder().convert(uriBytes));
       _sourceUriTable[i] = uri;
       List<int> sourceCode = readByteList();
       int lineCount = readUInt();
@@ -613,7 +613,7 @@
     String name = readStringOrNullIfEmpty();
 
     // TODO(jensj): We currently save (almost the same) uri twice.
-    String fileUri = readUriReference();
+    Uri fileUri = readUriReference();
 
     if (shouldWriteData) {
       library.isExternal = isExternal;
@@ -713,7 +713,7 @@
 
   LibraryPart readLibraryPart(Library library) {
     var annotations = readExpressionList();
-    var fileUri = readStringOrNullIfEmpty();
+    var fileUri = readUriReference();
     return new LibraryPart(annotations, fileUri)..parent = library;
   }
 
@@ -727,7 +727,7 @@
     }
     int fileOffset = readOffset();
     String name = readStringReference();
-    String fileUri = readUriReference();
+    Uri fileUri = readUriReference();
     node.annotations = readAnnotationList(node);
     readAndPushTypeParameterList(node.typeParameters, node);
     var type = readDartType();
@@ -1010,6 +1010,8 @@
             readMemberReference(), readArguments());
       case Tag.LocalInitializer:
         return new LocalInitializer(readAndPushVariableDeclaration());
+      case Tag.AssertInitializer:
+        return new AssertInitializer(readStatement());
       default:
         throw fail('Invalid initializer tag: $tag');
     }
@@ -1557,12 +1559,14 @@
 
   Catch readCatch() {
     int variableStackHeight = variableStack.length;
+    var offset = readOffset();
     var guard = readDartType();
     var exception = readAndPushVariableDeclarationOption();
     var stackTrace = readAndPushVariableDeclarationOption();
     var body = readStatement();
     variableStack.length = variableStackHeight;
-    return new Catch(exception, body, guard: guard, stackTrace: stackTrace);
+    return new Catch(exception, body, guard: guard, stackTrace: stackTrace)
+      ..fileOffset = offset;
   }
 
   Block readBlock() {
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 48f5412..5098aad 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -21,7 +21,7 @@
   final StringIndexer stringIndexer;
   ConstantIndexer _constantIndexer;
   final StringIndexer _sourceUriIndexer = new StringIndexer();
-  final Set<String> _knownSourceUri = new Set<String>();
+  final Set<Uri> _knownSourceUri = new Set<Uri>();
   Map<LibraryDependency, int> _libraryDependencyIndex =
       <LibraryDependency, int>{};
 
@@ -188,10 +188,10 @@
     type.accept(this);
   }
 
-  void writeUriReference(String string) {
+  void writeUriReference(Uri uri) {
     int index = 0; // equivalent to index = _sourceUriIndexer[""];
-    if (_knownSourceUri.contains(string)) {
-      index = _sourceUriIndexer.put(string);
+    if (_knownSourceUri.contains(uri)) {
+      index = _sourceUriIndexer.put(uri == null ? "" : "$uri");
     }
     writeUInt30(index);
   }
@@ -439,7 +439,7 @@
     _knownSourceUri.addAll(program.uriToSource.keys);
   }
 
-  void writeUriToSource(Map<String, Source> uriToSource) {
+  void writeUriToSource(Map<Uri, Source> uriToSource) {
     _binaryOffsetForSourceTable = getBufferOffset();
 
     int length = _sourceUriIndexer.numberOfStrings;
@@ -451,8 +451,8 @@
       index[i] = getBufferOffset();
 
       StringTableEntry uri = _sourceUriIndexer.entries[i];
-      Source source =
-          uriToSource[uri.value] ?? new Source(<int>[], const <int>[]);
+      Source source = uriToSource[Uri.parse(uri.value)] ??
+          new Source(<int>[], const <int>[]);
 
       writeByteList(uri.utf8Bytes);
       writeByteList(source.source);
@@ -558,7 +558,7 @@
     writeCanonicalNameReference(getCanonicalNameOfLibrary(node));
     writeStringReference(node.name ?? '');
     // TODO(jensj): We save (almost) the same URI twice.
-    writeUriReference(node.fileUri ?? '');
+    writeUriReference(node.fileUri);
     writeAnnotationList(node.annotations);
     writeLibraryDependencies(node);
     writeAdditionalExports(node.additionalExports);
@@ -635,14 +635,14 @@
       _recordNodeOffsetForMetadataMapping(node);
     }
     writeNodeList(node.annotations);
-    writeStringReference(node.fileUri ?? '');
+    writeUriReference(node.fileUri);
   }
 
   void visitTypedef(Typedef node) {
     writeCanonicalNameReference(getCanonicalNameOfTypedef(node));
     writeOffset(node.fileOffset);
     writeStringReference(node.name);
-    writeUriReference(node.fileUri ?? '');
+    writeUriReference(node.fileUri);
     writeAnnotationList(node.annotations);
     _typeParameterIndexer.enter(node.typeParameters);
     writeNodeList(node.typeParameters);
@@ -691,7 +691,7 @@
     writeOffset(node.fileEndOffset);
     writeByte(flags);
     writeStringReference(node.name ?? '');
-    writeUriReference(node.fileUri ?? '');
+    writeUriReference(node.fileUri);
     writeAnnotationList(node.annotations);
     _typeParameterIndexer.enter(node.typeParameters);
     writeNodeList(node.typeParameters);
@@ -750,7 +750,7 @@
     writeByte(node.kind.index);
     writeByte(node.flags);
     writeName(node.name ?? '');
-    writeUriReference(node.fileUri ?? '');
+    writeUriReference(node.fileUri);
     writeAnnotationList(node.annotations);
     writeOptionalNode(node.function);
     _variableIndexer = null;
@@ -768,7 +768,7 @@
     writeByte(node.flags);
     writeByte(node.flags2);
     writeName(node.name);
-    writeUriReference(node.fileUri ?? '');
+    writeUriReference(node.fileUri);
     writeAnnotationList(node.annotations);
     writeNode(node.type);
     writeOptionalNode(node.initializer);
@@ -833,6 +833,12 @@
     writeVariableDeclaration(node.variable);
   }
 
+  visitAssertInitializer(AssertInitializer node) {
+    writeByte(Tag.AssertInitializer);
+    writeByte(node.isSynthetic ? 1 : 0);
+    writeNode(node.statement);
+  }
+
   visitFunctionNode(FunctionNode node) {
     writeByte(Tag.FunctionNode);
     assert(_variableIndexer != null);
@@ -1374,6 +1380,7 @@
   visitCatch(Catch node) {
     // Note: there is no tag on Catch.
     _variableIndexer.pushScope();
+    writeOffset(node.fileOffset);
     writeNode(node.guard);
     writeOptionalVariableDeclaration(node.exception);
     writeOptionalVariableDeclaration(node.stackTrace);
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 2583f775..4fad0cd 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -21,6 +21,7 @@
   static const int SuperInitializer = 9;
   static const int RedirectingInitializer = 10;
   static const int LocalInitializer = 11;
+  static const int AssertInitializer = 12;
 
   static const int CheckLibraryIsLoaded = 13;
   static const int LoadLibrary = 14;
@@ -133,7 +134,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h.
-  static const int BinaryFormatVersion = 1;
+  static const int BinaryFormatVersion = 2;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 661f630..db4fd45 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -73,7 +73,8 @@
 
   visitPropertyGet(PropertyGet node) {
     return new PropertyGet.byReference(
-        clone(node.receiver), node.name, node.interfaceTargetReference);
+        clone(node.receiver), node.name, node.interfaceTargetReference)
+      ..flags = node.flags;
   }
 
   visitPropertySet(PropertySet node) {
@@ -84,7 +85,8 @@
 
   visitDirectPropertyGet(DirectPropertyGet node) {
     return new DirectPropertyGet.byReference(
-        clone(node.receiver), node.targetReference);
+        clone(node.receiver), node.targetReference)
+      ..flags = node.flags;
   }
 
   visitDirectPropertySet(DirectPropertySet node) {
@@ -113,12 +115,14 @@
 
   visitMethodInvocation(MethodInvocation node) {
     return new MethodInvocation.byReference(clone(node.receiver), node.name,
-        clone(node.arguments), node.interfaceTargetReference);
+        clone(node.arguments), node.interfaceTargetReference)
+      ..flags = node.flags;
   }
 
   visitDirectMethodInvocation(DirectMethodInvocation node) {
     return new DirectMethodInvocation.byReference(
-        clone(node.receiver), node.targetReference, clone(node.arguments));
+        clone(node.receiver), node.targetReference, clone(node.arguments))
+      ..flags = node.flags;
   }
 
   visitSuperMethodInvocation(SuperMethodInvocation node) {
@@ -161,7 +165,8 @@
   }
 
   visitAsExpression(AsExpression node) {
-    return new AsExpression(clone(node.operand), visitType(node.type));
+    return new AsExpression(clone(node.operand), visitType(node.type))
+      ..flags = node.flags;
   }
 
   visitSymbolLiteral(SymbolLiteral node) {
@@ -369,11 +374,8 @@
   visitVariableDeclaration(VariableDeclaration node) {
     return variables[node] = new VariableDeclaration(node.name,
         initializer: cloneOptional(node.initializer),
-        type: visitType(node.type),
-        isCovariant: node.isCovariant,
-        isFinal: node.isFinal,
-        isConst: node.isConst,
-        isFieldFormal: node.isFieldFormal);
+        type: visitType(node.type))
+      ..flags = node.flags;
   }
 
   visitFunctionDeclaration(FunctionDeclaration node) {
@@ -416,7 +418,9 @@
         hasImplicitSetter: node.hasImplicitSetter,
         transformerFlags: node.transformerFlags,
         fileUri: node.fileUri)
-      ..fileEndOffset = node.fileEndOffset;
+      ..fileEndOffset = node.fileEndOffset
+      ..flags = node.flags
+      ..flags2 = node.flags2;
   }
 
   visitRedirectingFactoryConstructor(RedirectingFactoryConstructor node) {
@@ -424,7 +428,6 @@
         name: node.name,
         isConst: node.isConst,
         isExternal: node.isExternal,
-        isSyntheticDefault: node.isSyntheticDefault,
         transformerFlags: node.transformerFlags,
         typeArguments: node.typeArguments.map(visitType).toList(),
         typeParameters: node.typeParameters.map(clone).toList(),
@@ -437,7 +440,7 @@
     var newNode = new TypeParameter(node.name);
     typeSubstitution[node] = new TypeParameterType(newNode);
     newNode.bound = visitType(node.bound);
-    return newNode;
+    return newNode..flags = node.flags;
   }
 
   TreeNode cloneFunctionNodeBody(FunctionNode node) => cloneOptional(node.body);
diff --git a/pkg/kernel/lib/core_types.dart b/pkg/kernel/lib/core_types.dart
index 37f7fa0..44a67af 100644
--- a/pkg/kernel/lib/core_types.dart
+++ b/pkg/kernel/lib/core_types.dart
@@ -65,6 +65,7 @@
   Procedure _printProcedure;
   Procedure _identicalProcedure;
   Constructor _constantExpressionErrorDefaultConstructor;
+  Procedure _constantExpressionErrorThrow;
   Constructor _duplicatedFieldInitializerErrorDefaultConstructor;
   Constructor _fallThroughErrorUrlAndLineConstructor;
   Constructor _compileTimeErrorDefaultConstructor;
@@ -366,6 +367,11 @@
         _index.getMember('dart:core', '_ConstantExpressionError', '');
   }
 
+  Member get constantExpressionErrorThrow {
+    return _constantExpressionErrorThrow ??=
+        _index.getMember('dart:core', '_ConstantExpressionError', '_throw');
+  }
+
   Constructor get duplicatedFieldInitializerErrorDefaultConstructor {
     return _duplicatedFieldInitializerErrorDefaultConstructor ??=
         _index.getMember('dart:core', '_DuplicatedFieldInitializerError', '');
diff --git a/pkg/kernel/lib/error_formatter.dart b/pkg/kernel/lib/error_formatter.dart
index 0298585..6b1e5dc 100644
--- a/pkg/kernel/lib/error_formatter.dart
+++ b/pkg/kernel/lib/error_formatter.dart
@@ -95,7 +95,7 @@
     failures.add(failure);
   }
 
-  static String _fileUriOf(Member context) {
+  static Uri _fileUriOf(Member context) {
     if (context is Procedure) {
       return context.fileUri;
     } else if (context is Field) {
diff --git a/pkg/kernel/lib/target/implementation_option.dart b/pkg/kernel/lib/target/implementation_option.dart
index 6f6cb90..0f35cbc 100644
--- a/pkg/kernel/lib/target/implementation_option.dart
+++ b/pkg/kernel/lib/target/implementation_option.dart
@@ -5,6 +5,8 @@
 library kernel.target.implementation_options;
 
 class VmOptions {
+  // TODO(alexmarkov): Cleanup this option.
+  // Consider cleaning up implementation_options.
   static final ImplementationOption strongAOT = new ImplementationOption._(
       "strong-aot", Platform.vm, new DateTime.utc(2018, 1), """
 Enables strong-mode whole-program optimizations for AOT (precompiler) mode of
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index d84db43..9bb8dcd 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -79,9 +79,6 @@
   /// promotion do not slow down compilation too much.
   bool get disableTypeInference => false;
 
-  /// If true, the SDK should be loaded in strong mode.
-  bool get strongModeSdk => strongMode;
-
   /// Perform target-specific modular transformations on the given program.
   ///
   /// These transformations should not be whole-program transformations.  They
@@ -184,11 +181,15 @@
         new Arguments.empty()..fileOffset = offset,
         isConst: true)
       ..fileOffset = offset;
-    return new MethodInvocation(
+    var methodInvocation = new MethodInvocation(
         receiver,
         new Name("_throw", coreTypes.coreLibrary),
         new Arguments(<Expression>[error])..fileOffset = error.fileOffset)
       ..fileOffset = offset;
+    if (strongMode) {
+      methodInvocation.interfaceTarget = coreTypes.constantExpressionErrorThrow;
+    }
+    return methodInvocation;
   }
 
   /// Builds an expression that represents a compile-time error which is
diff --git a/pkg/kernel/lib/target/vm.dart b/pkg/kernel/lib/target/vm.dart
index 5df2dd1..00fae71 100644
--- a/pkg/kernel/lib/target/vm.dart
+++ b/pkg/kernel/lib/target/vm.dart
@@ -11,10 +11,7 @@
     show transformLibraries;
 import '../transformations/continuation.dart' as transformAsync
     show transformLibraries;
-import '../transformations/precompiler.dart' as transformPrecompiler
-    show transformProgram;
 
-import 'implementation_option.dart' show VmOptions;
 import 'targets.dart';
 
 /// Specializes the kernel IR to the Dart VM.
@@ -26,12 +23,6 @@
   @override
   bool get strongMode => flags.strongMode;
 
-  /// The VM patch files are not strong mode clean, so we adopt a hybrid mode
-  /// where the SDK is internally unchecked, but trusted to satisfy the types
-  /// declared on its interface.
-  @override
-  bool get strongModeSdk => false;
-
   @override
   String get name => 'vm';
 
@@ -75,13 +66,7 @@
 
   @override
   void performGlobalTransformations(CoreTypes coreTypes, Program program,
-      {void logger(String msg)}) {
-    if (strongMode &&
-        (flags.implementationOptions != null) &&
-        flags.implementationOptions.contains(VmOptions.strongAOT)) {
-      transformPrecompiler.transformProgram(coreTypes, program);
-    }
-  }
+      {void logger(String msg)}) {}
 
   @override
   Expression instantiateInvocation(CoreTypes coreTypes, Expression receiver,
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 3551768..96c9bc6 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -931,8 +931,7 @@
     writeIndentation();
     writeModifier(node.isExternal, 'external');
     writeModifier(node.isConst, 'const');
-    writeModifier(node.isSyntheticDefault, 'default');
-    writeWord('factory');
+    writeWord('redirecting_factory');
 
     if (node.name != null) {
       writeName(node.name);
@@ -1425,8 +1424,10 @@
     endLine(';');
   }
 
-  visitAssertStatement(AssertStatement node) {
-    writeIndentation();
+  visitAssertStatement(AssertStatement node, {bool asExpr = false}) {
+    if (asExpr != true) {
+      writeIndentation();
+    }
     writeWord('assert');
     writeSymbol('(');
     writeExpression(node.condition);
@@ -1434,7 +1435,11 @@
       writeComma();
       writeExpression(node.message);
     }
-    endLine(');');
+    if (asExpr != true) {
+      endLine(');');
+    } else {
+      writeSymbol(')');
+    }
   }
 
   visitLabeledStatement(LabeledStatement node) {
@@ -1706,6 +1711,10 @@
     writeVariableDeclaration(node.variable);
   }
 
+  visitAssertInitializer(AssertInitializer node) {
+    visitAssertStatement(node.statement, asExpr: true);
+  }
+
   defaultInitializer(Initializer node) {
     writeIndentation();
     endLine(': ${node.runtimeType}');
diff --git a/pkg/kernel/lib/transformations/closure/converter.dart b/pkg/kernel/lib/transformations/closure/converter.dart
index 10fcf13..3424c0d0 100644
--- a/pkg/kernel/lib/transformations/closure/converter.dart
+++ b/pkg/kernel/lib/transformations/closure/converter.dart
@@ -157,7 +157,7 @@
     return currentFunction == null || currentMemberFunction == currentFunction;
   }
 
-  String get currentFileUri {
+  Uri get currentFileUri {
     if (currentMember is Constructor) return currentClass.fileUri;
     if (currentMember is Field) return (currentMember as Field).fileUri;
     if (currentMember is Procedure) return (currentMember as Procedure).fileUri;
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index ba0d04b..6c8ccb0 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -999,6 +999,11 @@
   }
 
   @override
+  visitAssertInitializer(AssertInitializer node) {
+    visitAssertStatement(node.statement);
+  }
+
+  @override
   visitInvalidInitializer(InvalidInitializer node) {}
 
   @override
diff --git a/pkg/kernel/lib/visitor.dart b/pkg/kernel/lib/visitor.dart
index 2c45328..6db182d 100644
--- a/pkg/kernel/lib/visitor.dart
+++ b/pkg/kernel/lib/visitor.dart
@@ -120,6 +120,7 @@
   R visitRedirectingInitializer(RedirectingInitializer node) =>
       defaultInitializer(node);
   R visitLocalInitializer(LocalInitializer node) => defaultInitializer(node);
+  R visitAssertInitializer(AssertInitializer node) => defaultInitializer(node);
 }
 
 class TreeVisitor<R>
@@ -235,6 +236,7 @@
   R visitRedirectingInitializer(RedirectingInitializer node) =>
       defaultInitializer(node);
   R visitLocalInitializer(LocalInitializer node) => defaultInitializer(node);
+  R visitAssertInitializer(AssertInitializer node) => defaultInitializer(node);
 
   // Other tree nodes
   R visitLibrary(Library node) => defaultTreeNode(node);
diff --git a/pkg/sourcemap_testing/README.md b/pkg/sourcemap_testing/README.md
new file mode 100644
index 0000000..fa8ea7a
--- /dev/null
+++ b/pkg/sourcemap_testing/README.md
@@ -0,0 +1,124 @@
+# Testing of source maps
+
+Currently this package consists of two "frameworks":
+1) stacktrace_helper.dart
+2) stepping_helper.dart
+
+It is intended to be a shared resource between DDC and dart2js.
+
+## Stacktraces ("stacktrace_helper.dart")
+
+TODO
+
+## Debugging tests (step tests, "stepping_helper.dart")
+
+This is supposed to work in a few steps:
+1) Create the JS
+2) Run the JS with D8, setting instructed breakpoints etc.
+3) Translating JS positions to Dart positions
+4) Validating the stepped positions.
+
+In the above, the helper assumes
+1) The dart file is called "test.dart" and is placed in the output directory before compiling to
+"js.js" in the output dir.
+
+And then performs via
+2) `runD8AndStep`
+3) `checkD8Steps`
+4) (done in above step)
+
+The test files themselves contain information about where to stop, which breakpoints to expect etc.
+They contain this information in comments inlined in the code as in `/*key*/` where `key` can be one
+of the below.
+
+_Not context sensitive_
+
+These comments can be anywhere in the file and their position does not matter.
+
+* **fail**: Will fail the test. Useful for debugging in conjunction with debug being set to true
+(see below).
+* **Debugger:stepOver**: Will step over breakpoints. Default (i.e. without this) is to step into.
+
+_Context sensitive_
+
+These comments should be placed at the wanted position: The line and possibly column position of the
+comment matters. They refer to the next non-whitespace position in the source.
+
+* **bl** (break line): insert a breakpoint on this line. This does not add any new expected breaks.
+* **s:{i}** (stop): adds an expected stop as the `i`th stop (1-indexed).
+* **sl:{i}** (stop at line): adds an expected stop as the `i`th stop (1-indexed). Only check the
+line number.
+* **nb** (no break): The debugger should never break on this line.
+* **nbc** (no break column): The debugger should never break on this line and column.
+* **nbb:{i}:{j}** (no break between): The debugger should not break on this line between expectation
+`i` and `j` (1-indexed). Note that `from` can also be the special value `0` meaning from the very
+first stop. For example `nbb:0:1` means not before first expected stop.
+* **nm** (no mapping): There's not allowed to be any mapping to this line.
+* **bc:{i}** (break column): inserts a breakpoint at this line and column and adds an expected stop
+as the `i`th stop (1-indexed).
+
+Note that in an ideal world `bc:{i}` would not be unnecessary: Stopping at a line and stepping
+should generally be enough. Because of the current behavior of d8 though, for instance
+```
+baz(foo(), bar())
+```
+will stop at `baz`, go into `foo`, stop at `bar`, go into `bar` and stop at `baz`.
+From a Dart perspective we would instead expect it to stop at `foo`, go into `foo`, stop at `bar`,
+go into `bar` and stop a `baz`.
+Having **bc:{i}** allows us to force this behavior as d8 can actually stop at `foo` too.
+
+All of these annotations are removed before compiling to js and the expected output thus refers to
+the unannotated code.
+
+When the test confirms that the debugger stopped at the expected locations it allows for additional
+breakpoints before, between and after the expected breakpoints.
+
+### Debugging a test
+
+By calling `checkD8Steps` with the `debug` parameter set to `true` one can get information like this
+dumped to standard out:
+
+```
+Stop #1
+
+test.main = function() {                            |  main() {
+  try {                                             |    try {
+    let value = /*STOP*/"world";                    |      var value = /*STOP*/"world";
+    dart.throw(dart.str`Hello, ${value}`);          |      // Comment
+  } catch (e) {                                     |      throw "Hello, $value";
+
+Stop #2
+
+  try {                                             |      var value = "world";
+    let value = "world";                            |      // Comment
+    /*STOP*/dart.throw(dart.str`Hello, ${value}`);  |      /*STOP*/throw "Hello, $value";
+  } catch (e) {                                     |    }
+    let st = dart.stackTrace(e);                    |    // Comment
+
+Stop #3
+
+    dart.throw(dart.str`Hello, ${value}`);          |    }
+  } catch (e) {                                     |    // Comment
+    let st = /*STOP*/dart.stackTrace(e);            |    catch (e, /*STOP*/st) {
+    {                                               |      print(e);
+      core.print(e);                                |      print(st);
+
+[...]
+```
+
+This can for instance be useful in combination with `/*fail*/` when adding new tests to see all the
+places where the debugger stopped.
+
+### Technical details
+
+Some of the logic comes from https://github.com/ChromeDevTools/devtools-frontend/, for instance see
+https://github.com/ChromeDevTools/devtools-frontend/blob/fa18d70a995f06cb73365b2e5b8ae974cf60bd3a/
+front_end/sources/JavaScriptSourceFrame.js#L1520-L1523
+for how a line breakpoint is resolved:
+Basically the line asked to break on in user code (e.g. in dart code) is asked for first and last
+javascript positions; these are then used to get possible breakpoints in that part. If there are
+none it tries the next line (etc for a number of lines). Once it finds something (in javascript
+positions) it converts that to user code position (e.g. in dart code), normalizes it by converting
+to javascript position and back to user code position again, then converts to javascript position
+and sets the breakpoint.
+This is to some extend mimicked here when setting a line break (though not a "column break").
diff --git a/pkg/dev_compiler/test/sourcemap/jsHelpers/inspector.js b/pkg/sourcemap_testing/lib/src/js/inspector.js
similarity index 100%
rename from pkg/dev_compiler/test/sourcemap/jsHelpers/inspector.js
rename to pkg/sourcemap_testing/lib/src/js/inspector.js
diff --git a/pkg/sourcemap_testing/lib/src/stepping_helper.dart b/pkg/sourcemap_testing/lib/src/stepping_helper.dart
new file mode 100644
index 0000000..a906bd2
--- /dev/null
+++ b/pkg/sourcemap_testing/lib/src/stepping_helper.dart
@@ -0,0 +1,448 @@
+import 'dart:io';
+
+import 'package:expect/minitest.dart';
+import 'package:path/path.dart' as path;
+import 'package:source_maps/source_maps.dart';
+
+import 'annotated_code_helper.dart';
+
+/**
+ * Runs D8 and steps as the AnnotatedCode dictates.
+ *
+ * Note that the compiled javascript is expected to be called "js.js" inside the
+ * outputPath directory. It is also expected that there is a "js.js.map" file.
+ * It is furthermore expected that the js has been compiled from a file in the
+ * same folder called test.dart.
+ */
+ProcessResult runD8AndStep(
+    String outputPath, AnnotatedCode code, List<String> scriptD8Command) {
+  var outputFile = path.join(outputPath, "js.js");
+  SingleMapping sourceMap =
+      parse(new File("${outputFile}.map").readAsStringSync());
+
+  Set<int> mappedToLines = sourceMap.lines
+      .map((entry) => entry.entries.map((entry) => entry.sourceLine).toSet())
+      .fold(new Set<int>(), (prev, e) => prev..addAll(e));
+
+  for (Annotation annotation
+      in code.annotations.where((a) => a.text.trim() == "nm")) {
+    if (mappedToLines.contains(annotation.lineNo - 1)) {
+      fail("Was not allowed to have a mapping to line "
+          "${annotation.lineNo}, but did.\n"
+          "Sourcemap looks like this (note 0-indexed):\n"
+          "${sourceMap.debugString}");
+    }
+  }
+
+  List<String> breakpoints = [];
+  // Annotations are 1-based, js breakpoints are 0-based.
+  for (Annotation breakAt
+      in code.annotations.where((a) => a.text.trim() == "bl")) {
+    breakpoints.add(_getJsBreakpointLine(sourceMap, breakAt.lineNo - 1));
+  }
+  for (Annotation breakAt
+      in code.annotations.where((a) => a.text.trim().startsWith("bc:"))) {
+    breakpoints.add(_getJsBreakpointLineAndColumn(
+        sourceMap, breakAt.lineNo - 1, breakAt.columnNo - 1));
+  }
+
+  File inspectorFile = new File.fromUri(
+      sdkRoot.uri.resolve("pkg/sourcemap_testing/lib/src/js/inspector.js"));
+  if (!inspectorFile.existsSync()) throw "Couldn't find 'inspector.js'";
+  var outInspectorPath = path.join(outputPath, "inspector.js");
+  inspectorFile.copySync(outInspectorPath);
+  String debugAction = "Debugger.stepInto";
+  if (code.annotations.any((a) => a.text.trim() == "Debugger:stepOver")) {
+    debugAction = "Debugger.stepOver";
+  }
+  return _runD8(outInspectorPath, scriptD8Command, debugAction, breakpoints);
+}
+
+/**
+ * Translates the D8 js steps and checks against expectations.
+ *
+ * Note that the compiled javascript is expected to be called "js.js" inside the
+ * outputPath directory. It is also expected that there is a "js.js.map" file.
+ * It is furthermore expected that the js has been compiled from a file in the
+ * same folder called test.dart.
+ */
+void checkD8Steps(String outputPath, List<String> d8Output, AnnotatedCode code,
+    {bool debug: false}) {
+  var outputFilename = "js.js";
+  var outputFile = path.join(outputPath, outputFilename);
+  SingleMapping sourceMap =
+      parse(new File("${outputFile}.map").readAsStringSync());
+
+  List<List<_DartStackTraceDataEntry>> result =
+      _extractStackTraces(d8Output, sourceMap, outputFilename);
+
+  List<_DartStackTraceDataEntry> trace =
+      result.map((entry) => entry.first).toList();
+  if (debug) _debugPrint(trace, outputPath);
+
+  List<String> recordStops =
+      trace.where((entry) => !entry.isError).map((entry) => "$entry").toList();
+
+  Set<int> recordStopLines =
+      trace.where((entry) => !entry.isError).map((entry) => entry.line).toSet();
+  Set<String> recordStopLineColumns = trace
+      .where((entry) => !entry.isError)
+      .map((entry) => "${entry.line}:${entry.column}")
+      .toSet();
+
+  List<String> expectedStops = [];
+  for (Annotation annotation in code.annotations.where((annotation) =>
+      annotation.text.trim().startsWith("s:") ||
+      annotation.text.trim().startsWith("sl:") ||
+      annotation.text.trim().startsWith("bc:"))) {
+    String text = annotation.text.trim();
+    int stopNum = int.parse(text.substring(text.indexOf(":") + 1));
+    if (expectedStops.length < stopNum) expectedStops.length = stopNum;
+    if (text.startsWith("sl:")) {
+      expectedStops[stopNum - 1] = "test.dart:${annotation.lineNo}:";
+    } else {
+      expectedStops[stopNum - 1] =
+          "test.dart:${annotation.lineNo}:${annotation.columnNo}:";
+    }
+  }
+
+  List<List<String>> noBreaksStart = [];
+  List<List<String>> noBreaksEnd = [];
+  for (Annotation annotation in code.annotations
+      .where((annotation) => annotation.text.trim().startsWith("nbb:"))) {
+    String text = annotation.text.trim();
+    var split = text.split(":");
+    int stopNum1 = int.parse(split[1]);
+    int stopNum2 = int.parse(split[2]);
+    if (noBreaksStart.length <= stopNum1) noBreaksStart.length = stopNum1 + 1;
+    noBreaksStart[stopNum1] ??= [];
+    if (noBreaksEnd.length <= stopNum2) noBreaksEnd.length = stopNum2 + 1;
+    noBreaksEnd[stopNum2] ??= [];
+
+    noBreaksStart[stopNum1].add("test.dart:${annotation.lineNo}:");
+    noBreaksEnd[stopNum2].add("test.dart:${annotation.lineNo}:");
+  }
+
+  _checkRecordedStops(recordStops, expectedStops, noBreaksStart, noBreaksEnd);
+
+  for (Annotation annotation in code.annotations
+      .where((annotation) => annotation.text.trim() == "nb")) {
+    // Check that we didn't break where we're not allowed to.
+    if (recordStopLines.contains(annotation.lineNo)) {
+      fail("Was not allowed to stop on line ${annotation.lineNo}, but did!");
+    }
+  }
+  for (Annotation annotation in code.annotations
+      .where((annotation) => annotation.text.trim() == "nbc")) {
+    // Check that we didn't break where we're not allowed to.
+    if (recordStopLineColumns
+        .contains("${annotation.lineNo}:${annotation.columnNo}")) {
+      fail("Was not allowed to stop on line ${annotation.lineNo} "
+          "column ${annotation.columnNo}, but did!");
+    }
+  }
+
+  if (code.annotations.any((a) => a.text.trim() == "fail")) {
+    fail("Test contains 'fail' annotation.");
+  }
+}
+
+void _checkRecordedStops(List<String> recordStops, List<String> expectedStops,
+    List<List<String>> noBreaksStart, List<List<String>> noBreaksEnd) {
+  // We want to find all expected lines in recorded lines in order, but allow
+  // more in between in the recorded lines.
+  // noBreaksStart and noBreaksStart gives instructions on what's *NOT* allowed
+  // to be between those points though.
+
+  int expectedIndex = 0;
+  Set<String> aliveNoBreaks = new Set<String>();
+  if (noBreaksStart.length > 0 && noBreaksStart[0] != null) {
+    aliveNoBreaks.addAll(noBreaksStart[0]);
+  }
+  int stopNumber = 0;
+  for (String recorded in recordStops) {
+    stopNumber++;
+    if (expectedIndex == expectedStops.length) break;
+    if ("$recorded:".contains(expectedStops[expectedIndex])) {
+      ++expectedIndex;
+      if (noBreaksStart.length > expectedIndex &&
+          noBreaksStart[expectedIndex] != null) {
+        aliveNoBreaks.addAll(noBreaksStart[expectedIndex]);
+      }
+      if (noBreaksEnd.length > expectedIndex &&
+          noBreaksEnd[expectedIndex] != null) {
+        aliveNoBreaks.removeAll(noBreaksEnd[expectedIndex]);
+      }
+    } else if (aliveNoBreaks
+        .contains("${(recorded.split(":")..removeLast()).join(":")}:")) {
+      fail("Break '$recorded' was found when it wasn't allowed "
+          "(js step $stopNumber, after stop $expectedIndex)");
+    }
+  }
+  if (expectedIndex != expectedStops.length) {
+    // Didn't find everything.
+    fail("Expected to find $expectedStops but found $recordStops");
+  }
+}
+
+void _debugPrint(List<_DartStackTraceDataEntry> trace, String outputPath) {
+  StringBuffer sb = new StringBuffer();
+  var jsFile =
+      new File(path.join(outputPath, "js.js")).readAsStringSync().split("\n");
+  var dartFile = new File(path.join(outputPath, "test.dart"))
+      .readAsStringSync()
+      .split("\n");
+
+  List<String> getSnippet(List<String> data, int line, int column) {
+    List<String> result = new List<String>.filled(5, "");
+    if (line < 0 || column < 0) return result;
+
+    for (int i = 0; i < 5; ++i) {
+      int j = line - 2 + i;
+      if (j < 0 || j >= data.length) continue;
+      result[i] = data[j];
+    }
+    if (result[2].length >= column) {
+      result[2] = result[2].substring(0, column) +
+          "/*STOP*/" +
+          result[2].substring(column);
+    }
+    return result;
+  }
+
+  List<String> sideBySide(List<String> a, List<String> b, int columns) {
+    List<String> result = new List<String>(a.length);
+    for (int i = 0; i < a.length; ++i) {
+      String left = a[i].padRight(columns).substring(0, columns);
+      String right = b[i].padRight(columns).substring(0, columns);
+      result[i] = left + "  |  " + right;
+    }
+    return result;
+  }
+
+  for (int i = 0; i < trace.length; ++i) {
+    sb.write("\n\nStop #${i + 1}\n\n");
+    if (trace[i].isError && trace[i].jsLine < 0) {
+      sb.write("${trace[i].errorString}\n");
+      continue;
+    }
+    var jsSnippet = getSnippet(jsFile, trace[i].jsLine, trace[i].jsColumn);
+    var dartSnippet =
+        getSnippet(dartFile, trace[i].line - 1, trace[i].column - 1);
+    var view = sideBySide(jsSnippet, dartSnippet, 50);
+    sb.writeAll(view, "\n");
+  }
+
+  print(sb.toString());
+}
+
+List<List<_DartStackTraceDataEntry>> _extractStackTraces(
+    lines, SingleMapping sourceMap, String outputFilename) {
+  List<List<_DartStackTraceDataEntry>> result = [];
+  bool inStackTrace = false;
+  List<String> currentStackTrace = <String>[];
+  for (var line in lines) {
+    if (line.trim() == "--- Debugger stacktrace start ---") {
+      inStackTrace = true;
+    } else if (line.trim() == "--- Debugger stacktrace end ---") {
+      result.add(
+          _extractStackTrace(currentStackTrace, sourceMap, outputFilename));
+      currentStackTrace.clear();
+      inStackTrace = false;
+    } else if (inStackTrace) {
+      currentStackTrace.add(line.trim());
+    }
+  }
+  return result;
+}
+
+List<_DartStackTraceDataEntry> _extractStackTrace(
+    List<String> js, SingleMapping sourceMap, String wantedFile) {
+  List<_DartStackTraceDataEntry> result = [];
+  for (String line in js) {
+    if (!line.contains("$wantedFile:")) {
+      result.add(
+          new _DartStackTraceDataEntry.error("Not correct file @ '$line'"));
+      continue;
+    }
+    Iterable<Match> ms = new RegExp(r"(\d+):(\d+)").allMatches(line);
+    if (ms.isEmpty) {
+      result.add(new _DartStackTraceDataEntry.error(
+          "Line and column not found for '$line'"));
+      continue;
+    }
+    Match m = ms.first;
+    int l = int.parse(m.group(1));
+    int c = int.parse(m.group(2));
+    SourceMapSpan span = _getColumnOrPredecessor(sourceMap, l, c);
+    if (span?.start == null) {
+      result.add(new _DartStackTraceDataEntry.errorWithJsPosition(
+          "Source map not found for '$line'", l, c));
+      continue;
+    }
+    var file = span.sourceUrl?.pathSegments?.last ?? "(unknown file)";
+    result.add(new _DartStackTraceDataEntry(
+        file, span.start.line + 1, span.start.column + 1, l, c));
+  }
+  return result;
+}
+
+SourceMapSpan _getColumnOrPredecessor(
+    SingleMapping sourceMap, int line, int column) {
+  SourceMapSpan span = sourceMap.spanFor(line, column);
+  if (span == null && line > 0) {
+    span = sourceMap.spanFor(line - 1, 999999);
+  }
+  return span;
+}
+
+class _DartStackTraceDataEntry {
+  final String file;
+  final int line;
+  final int column;
+  final errorString;
+  final int jsLine;
+  final int jsColumn;
+
+  _DartStackTraceDataEntry(
+      this.file, this.line, this.column, this.jsLine, this.jsColumn)
+      : errorString = null;
+  _DartStackTraceDataEntry.error(this.errorString)
+      : file = null,
+        line = -1,
+        column = -1,
+        jsLine = -1,
+        jsColumn = -1;
+  _DartStackTraceDataEntry.errorWithJsPosition(
+      this.errorString, this.jsLine, this.jsColumn)
+      : file = null,
+        line = -1,
+        column = -1;
+
+  get isError => errorString != null;
+
+  String toString() => isError ? errorString : "$file:$line:$column";
+}
+
+class _PointMapping {
+  final int fromLine;
+  final int fromColumn;
+  final int toLine;
+  final int toColumn;
+
+  _PointMapping(this.fromLine, this.fromColumn, this.toLine, this.toColumn);
+}
+
+/**
+ * Input and output is expected to be 0-based.
+ *
+ * The "magic 4" below is taken from https://github.com/ChromeDevTools/devtools-
+ * frontend/blob/fa18d70a995f06cb73365b2e5b8ae974cf60bd3a/front_end/sources/
+ * JavaScriptSourceFrame.js#L1520-L1523
+ */
+String _getJsBreakpointLine(SingleMapping sourceMap, int breakOnLine) {
+  List<_PointMapping> mappingsOnLines = [];
+  for (var line in sourceMap.lines) {
+    for (var entry in line.entries) {
+      if (entry.sourceLine >= breakOnLine &&
+          entry.sourceLine < breakOnLine + 4) {
+        mappingsOnLines.add(new _PointMapping(
+            entry.sourceLine, entry.sourceColumn, line.line, entry.column));
+      }
+    }
+  }
+
+  if (mappingsOnLines.isEmpty) return null;
+
+  mappingsOnLines.sort((a, b) {
+    if (a.fromLine != b.fromLine) return a.fromLine - b.fromLine;
+    if (a.fromColumn != b.fromColumn) return a.fromColumn - b.fromColumn;
+    if (a.toLine != b.toLine) return a.toLine - b.toLine;
+    return a.toColumn - b.toColumn;
+  });
+  _PointMapping first = mappingsOnLines.first;
+  mappingsOnLines.retainWhere((p) => p.toLine >= first.toLine);
+
+  _PointMapping last = mappingsOnLines.last;
+  return "${first.toLine}:${first.toColumn}:${last.toLine}:${first.toColumn}";
+}
+
+/**
+ * Input and output is expected to be 0-based.
+ */
+String _getJsBreakpointLineAndColumn(
+    SingleMapping sourceMap, int breakOnLine, int breakOnColumn) {
+  for (var line in sourceMap.lines) {
+    for (var entry in line.entries) {
+      if (entry.sourceLine == breakOnLine &&
+          entry.sourceColumn == breakOnColumn)
+        return "${line.line}:${entry.column}";
+    }
+  }
+  return null;
+}
+
+ProcessResult _runD8(String outInspectorPath, List<String> scriptD8Command,
+    String debugAction, List<String> breakpoints) {
+  var outInspectorPathRelative = path.relative(outInspectorPath);
+  ProcessResult runResult = Process.runSync(
+      d8Executable,
+      ['--enable-inspector', outInspectorPathRelative]
+        ..addAll(scriptD8Command)
+        ..addAll(["--", debugAction])
+        ..addAll(breakpoints.where((s) => s != null)));
+  if (runResult.exitCode != 0) {
+    print(runResult.stderr);
+    print(runResult.stdout);
+    throw "Exit code: ${runResult.exitCode} from d8";
+  }
+  return runResult;
+}
+
+File _cachedD8File;
+Directory _cachedSdkRoot;
+File getD8File() {
+  File attemptFileFromDir(Directory dir) {
+    if (Platform.isWindows) {
+      return new File(dir.path + Platform.pathSeparator + "d8/windows/d8.exe");
+    } else if (Platform.isLinux) {
+      return new File(dir.path + Platform.pathSeparator + "d8/linux/d8");
+    } else if (Platform.isMacOS) {
+      return new File(dir.path + Platform.pathSeparator + "d8/macos/d8");
+    }
+    throw new UnsupportedError('Unsupported platform.');
+  }
+
+  File search() {
+    Directory dir = new File.fromUri(Platform.script).parent;
+    while (dir.path.length > 1) {
+      for (var entry in dir.listSync()) {
+        if (entry is! Directory) continue;
+        if (entry.path.endsWith("third_party")) {
+          List<String> segments = entry.uri.pathSegments;
+          if (segments[segments.length - 2] == "third_party") {
+            File possibleD8 = attemptFileFromDir(entry);
+            if (possibleD8.existsSync()) {
+              _cachedSdkRoot = dir;
+              return possibleD8;
+            }
+          }
+        }
+      }
+      dir = dir.parent;
+    }
+
+    throw "Cannot find D8 directory.";
+  }
+
+  return _cachedD8File ??= search();
+}
+
+Directory get sdkRoot {
+  getD8File();
+  return _cachedSdkRoot;
+}
+
+String get d8Executable {
+  return getD8File().path;
+}
diff --git a/pkg/status_file/analysis_options.yaml b/pkg/status_file/analysis_options.yaml
new file mode 100644
index 0000000..3acdae1
--- /dev/null
+++ b/pkg/status_file/analysis_options.yaml
@@ -0,0 +1,10 @@
+# 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.
+
+analyzer:
+  strong-mode: true
+  errors:
+    # Allow having TODOs in the code
+    todo: ignore
+    uses_dynamic_as_bottom: ignore
\ No newline at end of file
diff --git a/pkg/status_file/bin/lint.dart b/pkg/status_file/bin/lint.dart
index 4419b61..d7e985d 100644
--- a/pkg/status_file/bin/lint.dart
+++ b/pkg/status_file/bin/lint.dart
@@ -8,54 +8,130 @@
 import 'package:status_file/canonical_status_file.dart';
 import 'package:status_file/status_file.dart' as status_file;
 import 'package:status_file/status_file_linter.dart';
+import 'package:status_file/utils.dart';
 
-void main(List<String> arguments) {
+ArgParser buildParser() {
   var parser = new ArgParser();
   parser.addFlag("check-for-disjunctions",
       negatable: false,
       defaultsTo: false,
       help: "Warn if a status header expression contains '||'.");
+  parser.addFlag("text",
+      abbr: "t",
+      negatable: false,
+      defaultsTo: false,
+      help: "Lint text passed in stdin.");
+  parser.addFlag("help",
+      abbr: "h",
+      negatable: false,
+      defaultsTo: false,
+      help: "Show help and commands for this tool.");
+  return parser;
+}
+
+void printHelp(ArgParser parser) {
+  print("Usage: 'dart status_file/bin/lint.dart <path>' or 'dart "
+      "status_file/bin/lint.dart -t <input>' for text input.");
+  print(parser.usage);
+}
+
+void main(List<String> arguments) {
+  var parser = buildParser();
   var results = parser.parse(arguments);
-  if (results.rest.length != 1) {
-    print("Usage: dart status_file/bin/lint.dart <path>");
+  if (results["help"]) {
+    printHelp(parser);
+    return;
+  }
+  bool checkForDisjunctions = results["check-for-disjunctions"];
+  bool usePipe = results["text"];
+  if (usePipe) {
+    lintStdIn(checkForDisjunctions: checkForDisjunctions);
+  } else {
+    if (results.rest.length != 1) {
+      printHelp(parser);
+      exit(1);
+    }
+    lintPath(results.rest.first, checkForDisjunctions: checkForDisjunctions);
+  }
+}
+
+void lintStdIn({bool checkForDisjunctions = false}) {
+  List<String> strings = <String>[];
+  String readString;
+  try {
+    while (null != (readString = stdin.readLineSync())) {
+      strings.add(readString);
+    }
+  } on StdinException catch (e) {
+    // I do not know why this happens.
+  }
+  if (!lintText(strings)) {
     exit(1);
   }
-  print("");
-  var path = results.rest.first;
-  bool result = true;
-  if (new File(path).existsSync()) {
-    result =
-        lintFile(path, checkForDisjunctions: results['check-for-disjunctions']);
-  } else if (new Directory(path).existsSync()) {
-    var allResults = new Directory(path).listSync(recursive: true).map((entry) {
-      if (!entry.path.endsWith(".status")) {
-        return true;
+}
+
+void lintPath(path, {bool checkForDisjunctions = false}) {
+  var filesWithErrors = <String>[];
+  if (FileSystemEntity.isFileSync(path)) {
+    if (!lintFile(path, checkForDisjunctions: checkForDisjunctions)) {
+      filesWithErrors.add(path);
+    }
+  } else if (FileSystemEntity.isDirectorySync(path)) {
+    new Directory(path).listSync(recursive: true).forEach((entry) {
+      if (!canLint(entry.path)) {
+        return;
       }
-      return lintFile(entry.path,
-          checkForDisjunctions: results['check-for-disjunctions']);
-    }).toList();
-    return allResults.every((result) => result);
+      if (!lintFile(entry.path, checkForDisjunctions: checkForDisjunctions)) {
+        filesWithErrors.add(entry.path);
+      }
+    });
   }
-  if (!result) {
+  if (filesWithErrors.isNotEmpty) {
+    print("File output does not match how status files should be formatted.");
+    print("Fix these issues with:");
+    print("dart ${Platform.script.resolve("normalize.dart").path} -w \\");
+    print(filesWithErrors.join(" \\\n"));
     exit(1);
   }
 }
 
+bool lintText(List<String> text, {bool checkForDisjunctions = false}) {
+  try {
+    var statusFile = new StatusFile.parse("stdin", text);
+    return lintStatusFile(statusFile,
+        checkForDisjunctions: checkForDisjunctions);
+  } on status_file.SyntaxError catch (error) {
+    stderr.writeln("Could not parse stdin.");
+  }
+  return false;
+}
+
 bool lintFile(String path, {bool checkForDisjunctions = false}) {
   try {
     var statusFile = new StatusFile.read(path);
-    var lintingErrors =
-        lint(statusFile, checkForDisjunctions: checkForDisjunctions);
-    if (lintingErrors.isEmpty) {
-      return true;
-    }
-    print("${path}:");
-    var errors = lintingErrors.toList();
-    errors.sort((a, b) => a.lineNumber.compareTo((b.lineNumber)));
-    errors.forEach(print);
-    print("");
+    return lintStatusFile(statusFile,
+        checkForDisjunctions: checkForDisjunctions);
   } on status_file.SyntaxError catch (error) {
     stderr.writeln("Could not parse $path:\n$error");
   }
   return false;
 }
+
+bool lintStatusFile(StatusFile statusFile,
+    {bool checkForDisjunctions = false}) {
+  var lintingErrors =
+      lint(statusFile, checkForDisjunctions: checkForDisjunctions);
+  if (lintingErrors.isEmpty) {
+    print("${statusFile.path}\n Status file passed all tests");
+    print("");
+    return true;
+  }
+  if (statusFile.path != null && statusFile.path.isNotEmpty) {
+    print("${statusFile.path}");
+  }
+  var errors = lintingErrors.toList();
+  errors.sort((a, b) => a.lineNumber.compareTo((b.lineNumber)));
+  errors.forEach(print);
+  print("");
+  return false;
+}
diff --git a/pkg/status_file/bin/normalize.dart b/pkg/status_file/bin/normalize.dart
new file mode 100644
index 0000000..d65e42e
--- /dev/null
+++ b/pkg/status_file/bin/normalize.dart
@@ -0,0 +1,83 @@
+// 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:args/args.dart';
+import 'package:status_file/canonical_status_file.dart';
+import 'package:status_file/status_file.dart' as status_file;
+import 'package:status_file/status_file_linter.dart';
+import 'package:status_file/status_file_normalizer.dart';
+import 'package:status_file/utils.dart';
+
+ArgParser buildParser() {
+  var parser = new ArgParser();
+  parser.addFlag("overwrite",
+      abbr: 'w',
+      negatable: false,
+      defaultsTo: false,
+      help: "Overwrite input files with formatted output.");
+  parser.addFlag("help",
+      abbr: "h",
+      negatable: false,
+      defaultsTo: false,
+      help: "Show help and commands for this tool.");
+  return parser;
+}
+
+void printHelp(ArgParser parser) {
+  print("Usage: dart status_file/bin/normalize.dart <path>");
+  print(parser.usage);
+}
+
+void main(List<String> arguments) {
+  var parser = buildParser();
+  var results = parser.parse(arguments);
+  if (results["help"]) {
+    printHelp(parser);
+    return;
+  }
+  if (results.rest.isEmpty) {
+    printHelp(parser);
+    exit(1);
+  }
+  print("");
+  bool overwrite = results["overwrite"];
+  for (var path in results.rest) {
+    if (FileSystemEntity.isFileSync(path)) {
+      normalizeFile(path, overwrite);
+    } else if (FileSystemEntity.isDirectorySync(path)) {
+      new Directory(path).listSync(recursive: true).forEach((entry) {
+        if (!canLint(entry.path)) {
+          return;
+        }
+        normalizeFile(entry.path, overwrite);
+      });
+    }
+  }
+}
+
+bool normalizeFile(String path, bool writeFile) {
+  try {
+    var statusFile = new StatusFile.read(path);
+    var normalizedStatusFile = normalizeStatusFile(statusFile);
+    if (writeFile) {
+      new File(path).writeAsStringSync(normalizedStatusFile.toString());
+      print("Normalized $path");
+    } else {
+      print(normalizedStatusFile);
+    }
+    // Check if there are linting errors remaining, such as line comments,
+    // that needs to be handled manually.
+    var lintErrors = lint(normalizedStatusFile);
+    if (lintErrors.isNotEmpty) {
+      print("The normalizer could not remove all linting errors. The following "
+          "has to be removed manually:");
+      lintErrors.forEach(print);
+    }
+  } on status_file.SyntaxError catch (error) {
+    stderr.writeln("Could not parse $path:\n$error");
+  }
+  return false;
+}
diff --git a/pkg/status_file/lib/canonical_status_file.dart b/pkg/status_file/lib/canonical_status_file.dart
index cad0549..3d40d9c 100644
--- a/pkg/status_file/lib/canonical_status_file.dart
+++ b/pkg/status_file/lib/canonical_status_file.dart
@@ -72,6 +72,10 @@
 
   int _lineCount = 0;
 
+  /// Constructor for creating a new [StatusFile]. Will not create the default
+  /// section that status files have.
+  StatusFile(this.path);
+
   /// Reads and parses the status file at [path].
   ///
   /// Throws a [SyntaxError] if the file could not be parsed.
diff --git a/pkg/status_file/lib/src/expression.dart b/pkg/status_file/lib/src/expression.dart
index a6b65e7..386464f 100644
--- a/pkg/status_file/lib/src/expression.dart
+++ b/pkg/status_file/lib/src/expression.dart
@@ -238,11 +238,26 @@
     // order.
 
     // Recurse into the operands, sort them, and remove duplicates.
-    var normalized = operands.map((operand) => operand.normalize());
+    var normalized = new _LogicExpression(
+            op, operands.map((operand) => operand.normalize()).toList())
+        .operands;
+    normalized = flatten(normalized);
     var ordered = new SplayTreeSet<Expression>.from(normalized).toList();
     return new _LogicExpression(op, ordered);
   }
 
+  List<Expression> flatten(List<Expression> operands) {
+    var newOperands = <Expression>[];
+    for (var operand in operands) {
+      if (operand is _LogicExpression && operand.op == op) {
+        newOperands.addAll(operand.operands);
+      } else {
+        newOperands.add(operand);
+      }
+    }
+    return newOperands;
+  }
+
   int _compareToMyType(_LogicExpression other) {
     // Put "&&" before "||".
     if (op != other.op) return op == _Token.and ? -1 : 1;
diff --git a/pkg/status_file/lib/status_file_linter.dart b/pkg/status_file/lib/status_file_linter.dart
index fe56b0c..43b407b 100644
--- a/pkg/status_file/lib/status_file_linter.dart
+++ b/pkg/status_file/lib/status_file_linter.dart
@@ -23,7 +23,8 @@
     errors
       ..addAll(lintCommentLinesInSection(section))
       ..addAll(lintAlphabeticalOrderingOfPaths(section))
-      ..addAll(lintNormalizedSection(section));
+      ..addAll(lintNormalizedSection(section))
+      ..addAll(lintSectionEntryDuplicates(section));
     if (checkForDisjunctions) {
       errors.addAll(lintDisjunctionsInHeader(section));
     }
@@ -95,15 +96,18 @@
 /// Checks for correct ordering of test entries in sections. They should be
 /// ordered alphabetically.
 Iterable<LintingError> lintAlphabeticalOrderingOfPaths(StatusSection section) {
-  var entries = section.entries.where((entry) => entry is StatusEntry).toList();
-  var sortedList = entries.toList()..sort((a, b) => a.path.compareTo(b.path));
-  var witness = _findNotEqualWitness<StatusEntry>(sortedList, entries);
+  var entries = section.entries
+      .where((entry) => entry is StatusEntry)
+      .map((entry) => (entry as StatusEntry).path)
+      .toList();
+  var sortedList = entries.toList()..sort((a, b) => a.compareTo(b));
+  var witness = _findNotEqualWitness<String>(sortedList, entries);
   if (witness != null) {
     return [
       new LintingError(
           section.lineNumber,
           "Test paths are not alphabetically ordered in section. "
-          "${witness.first.path} should come before ${witness.second.path}.")
+          "${witness.first} should come before ${witness.second}.")
     ];
   }
   return [];
@@ -112,16 +116,42 @@
 /// Checks that each section expression have been normalized.
 Iterable<LintingError> lintNormalizedSection(StatusSection section) {
   if (section.condition == null) return const [];
+  var nonNormalized = section.condition.toString();
   var normalized = section.condition.normalize().toString();
   if (section.condition.toString() != normalized) {
     return [
       new LintingError(
-          section.lineNumber, "Condition expression should be '$normalized'.")
+          section.lineNumber,
+          "Condition expression should be '$normalized' "
+          "but was '$nonNormalized'.")
     ];
   }
   return const [];
 }
 
+/// Checks for duplicate section entries in the body of a section.
+Iterable<LintingError> lintSectionEntryDuplicates(StatusSection section) {
+  var errors = <LintingError>[];
+  List<StatusEntry> statusEntries =
+      section.entries.where((entry) => entry is StatusEntry).toList();
+  for (var i = 0; i < statusEntries.length; i++) {
+    var entry = statusEntries[i];
+    for (var j = i + 1; j < statusEntries.length; j++) {
+      var otherEntry = statusEntries[j];
+      if (entry.path == otherEntry.path &&
+          _findNotEqualWitness(entry.expectations, otherEntry.expectations) ==
+              null) {
+        errors.add(new LintingError(
+            section.lineNumber,
+            "The status entry "
+            "'${entry}' is duplicated on lines "
+            "${entry.lineNumber} and ${otherEntry.lineNumber}."));
+      }
+    }
+  }
+  return errors;
+}
+
 /// Checks for incorrect ordering of section headers. Section headers should be
 /// alphabetically ordered, except, when negation is used, it should be
 /// lexicographically close to the none-negated one, but still come after.
@@ -156,8 +186,8 @@
       new LintingError(
           witness.second.lineNumber,
           "Section expressions are not correctly ordered in file. "
-          "${witness.first.condition} on line ${witness.first.lineNumber} "
-          "should come before ${witness.second.condition} at line "
+          "'${witness.first.condition}' on line ${witness.first.lineNumber} "
+          "should come before '${witness.second.condition}' at line "
           "${witness.second.lineNumber}.")
     ];
   }
@@ -168,10 +198,8 @@
 Iterable<LintingError> lintSectionHeaderDuplicates(
     List<StatusSection> sections) {
   var errors = <LintingError>[];
-  var sorted = sections
-      .where((section) => section.condition != null)
-      .toList<StatusSection>()
-        ..sort((a, b) => a.condition.compareTo(b.condition));
+  var sorted = sections.where((section) => section.condition != null).toList()
+    ..sort((a, b) => a.condition.compareTo(b.condition));
   for (var i = 1; i < sorted.length; i++) {
     var section = sorted[i];
     var previousSection = sorted[i - 1];
@@ -181,7 +209,7 @@
       errors.add(new LintingError(
           section.lineNumber,
           "The condition "
-          "${section.condition} is duplicated on lines "
+          "'${section.condition}' is duplicated on lines "
           "${previousSection.lineNumber} and ${section.lineNumber}."));
     }
   }
diff --git a/pkg/status_file/lib/status_file_normalizer.dart b/pkg/status_file/lib/status_file_normalizer.dart
new file mode 100644
index 0000000..99898e9
--- /dev/null
+++ b/pkg/status_file/lib/status_file_normalizer.dart
@@ -0,0 +1,86 @@
+// 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 'canonical_status_file.dart';
+
+StatusFile normalizeStatusFile(StatusFile statusFile) {
+  StatusFile newStatusFile = _sortSectionsAndCombine(statusFile);
+  newStatusFile.sections.forEach((section) {
+    _sortEntriesInSection(section);
+    _oneLineBetweenSections(section);
+  });
+  return newStatusFile;
+}
+
+/// Sort section entries alphabetically.
+void _sortEntriesInSection(StatusSection section) {
+  section.entries.sort((a, b) {
+    if (a is CommentEntry) {
+      return -1;
+    }
+    if (b is CommentEntry) {
+      return 1;
+    }
+    if (a is StatusEntry && b is StatusEntry) {
+      return a.path.compareTo(b.path);
+    }
+    if (a is StatusEntry) {
+      return -1;
+    }
+    if (b is StatusEntry) {
+      return 1;
+    }
+    return 0;
+  });
+}
+
+/// Ensure that there is only one empty line to end a section.
+void _oneLineBetweenSections(StatusSection section) {
+  section.entries.removeWhere((entry) => entry is EmptyEntry);
+  section.entries
+      .add(new EmptyEntry(section.lineNumber + section.entries.length + 1));
+}
+
+StatusFile _sortSectionsAndCombine(StatusFile statusFile) {
+  // Create the new status file to be returned.
+  StatusFile oldStatusFile =
+      new StatusFile.parse(statusFile.path, statusFile.toString().split('\n'));
+  List<StatusSection> newSections = [];
+  // Copy over all sections and normalize all the expressions.
+  oldStatusFile.sections.forEach((section) {
+    if (section.condition != null && section.isEmpty()) {
+      return;
+    }
+    if (section.condition != null) {
+      newSections.add(new StatusSection(section.condition.normalize(),
+          section.lineNumber, section.sectionHeaderComments)
+        ..entries.addAll(section.entries));
+    } else {
+      newSections.add(section);
+    }
+  });
+  // Sort the headers
+  newSections.sort((a, b) {
+    if (a.condition == null) {
+      return -1;
+    } else if (b.condition == null) {
+      return 1;
+    }
+    return a.condition.compareTo(b.condition);
+  });
+  // See if we can combine section headers by simple comparison.
+  StatusFile newStatusFile = new StatusFile(statusFile.path);
+  newStatusFile.sections.add(newSections[0]);
+  for (var i = 1; i < newSections.length; i++) {
+    var previousSection = newSections[i - 1];
+    var currentSection = newSections[i];
+    if (previousSection.condition != null &&
+        previousSection.condition.compareTo(currentSection.condition) == 0) {
+      newStatusFile.sections.last.entries.addAll(currentSection.entries);
+    } else {
+      newStatusFile.sections.add(currentSection);
+    }
+  }
+  return newStatusFile;
+}
diff --git a/pkg/status_file/lib/utils.dart b/pkg/status_file/lib/utils.dart
new file mode 100644
index 0000000..415c4d4
--- /dev/null
+++ b/pkg/status_file/lib/utils.dart
@@ -0,0 +1,10 @@
+// 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.
+
+/// Returns if a [path] can be linted by this status file linter.
+/// One file in src/co19.status is not a status file, but is some sort of
+/// template.
+bool canLint(String path) {
+  return path.endsWith(".status") && !path.endsWith("src/co19.status");
+}
diff --git a/pkg/status_file/test/data/co19-dart2js.status b/pkg/status_file/test/data/co19-dart2js.status
new file mode 100644
index 0000000..41fe84c
--- /dev/null
+++ b/pkg/status_file/test/data/co19-dart2js.status
@@ -0,0 +1,8415 @@
+# 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.
+
+[ $compiler == dart2js && $builder_tag != run_webgl_tests ]
+LayoutTests/fast/canvas/webgl*: Skip # Only run WebGL on special builders, issue 29961
+
+[ $compiler == dart2js ]
+Language/Classes/Constructors/Generative_Constructors/execution_t03: RuntimeError # https://github.com/dart-lang/sdk/issues/29596
+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
+Language/Expressions/Function_Invocation/async_cleanup_t06: Skip # https://github.com/dart-lang/sdk/issues/28873
+Language/Expressions/Function_Invocation/async_cleanup_t08: Skip # https://github.com/dart-lang/sdk/issues/28873
+Language/Expressions/Instance_Creation/New/execution_t04: RuntimeError # https://github.com/dart-lang/sdk/issues/29596
+Language/Expressions/Instance_Creation/New/execution_t06: RuntimeError # https://github.com/dart-lang/sdk/issues/29596
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t03: Skip # https://github.com/dart-lang/sdk/issues/28873
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t05: Skip # https://github.com/dart-lang/sdk/issues/28873
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t06: Skip # https://github.com/dart-lang/sdk/issues/28873
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t08: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/css/font-face-cache-bug_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-stylesheet-with-import_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/dom/mutation-event-remove-inserted-node_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/dom/shadow/event-path-not-in-document_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/dom/subtree-modified-attributes_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/files/file-reader-done-reading-abort_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/forms/search-popup-crasher_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/loader/stateobjects/replacestate-in-onunload_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/media/mq-parsing_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/mediastream/getusermedia_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/replaced/preferred-widths_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/replaced/table-percent-height_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/replaced/table-percent-width_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/table/css-table-max-height_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/table/hittest-tablecell-right-edge_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/table/hittest-tablecell-with-borders-right-edge_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows-except-overlapped_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/table/table-colgroup-present-after-table-row_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t02: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/table/table-size-integer-overflow_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/table/table-with-content-width-exceeding-max-width_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/text/find-case-folding_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/text/find-hidden-text_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/text/find-quotes_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/text/find-spaces_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/text/international/cjk-segmentation_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/text/zero-width-characters-complex-script_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/transforms/hit-test-large-scale_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/transforms/scrollIntoView-transformed_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/writing-mode/percentage-margins-absolute_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-abort_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/xpath/4XPath/Core/test_core_functions_t02: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/xpath/ambiguous-operators_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LibTest/async/Future/Future.delayed_A01_t02: Pass, Fail # Issue 15524
+LibTest/html/Element/addEventListener_A01_t04: Skip # https://github.com/dart-lang/sdk/issues/28873
+LibTest/html/IFrameElement/addEventListener_A01_t04: Skip # https://github.com/dart-lang/sdk/issues/28873
+LibTest/html/Window/postMessage_A01_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+WebPlatformTest/Utils/test/asyncTestFail_t02: Skip # https://github.com/dart-lang/sdk/issues/28873
+WebPlatformTest/dom/EventTarget/dispatchEvent_A02_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+WebPlatformTest/webstorage/event_local_storageeventinit_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+
+Language/Classes/Constructors/Generative_Constructors/execution_of_a_superinitializer_t01: RuntimeError # compiler cancelled: cannot resolve type T
+Language/Classes/Constructors/Generative_Constructors/execution_of_a_superinitializer_t01: RuntimeError, OK # co19 issue 258
+Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t02: fail # Issue 13363
+Language/Classes/Constructors/Generative_Constructors/initializing_formals_execution_t02: fail # Issue 13363
+Language/Classes/Getters/static_getter_t02: CompileTimeError # Should be fixed with unified frontend. Issue 24534
+Language/Classes/Instance_Methods/same_name_setter_t01: fail # Issue 21201
+Language/Classes/Setters/name_t01: CompileTimeError # Issue 5023
+Language/Classes/Setters/name_t02: CompileTimeError # Issue 5023
+Language/Classes/Setters/name_t03: RuntimeError # Issue 5023
+Language/Classes/Setters/name_t07: CompileTimeError # Issue 5023
+Language/Classes/Setters/static_setter_t06: RuntimeError  # Should be fixed with unified frontend. Issue 23749
+Language/Classes/Static_Methods/same_name_method_and_setter_t01: CompileTimeError # Should be fixed with unified frontend. Issue 23749
+Language/Classes/definition_t23: CompileTimeError # Please triage this failure
+Language/Classes/same_name_type_variable_t01: Fail # Missing CT error on class with same name a type parameter
+Language/Classes/same_name_type_variable_t02: Fail # Missing CT error on member with same name a type parameter
+Language/Classes/same_name_type_variable_t03: Fail # Missing CT error on member with same name a type parameter
+Language/Classes/same_name_type_variable_t05: Fail # Missing CT error on member with same name a type parameter
+Language/Classes/same_name_type_variable_t06: Fail # Missing CT error on member with same name a type parameter
+Language/Classes/same_name_type_variable_t08: Fail # Missing CT error on member with same name a type parameter
+Language/Classes/same_name_type_variable_t09: Fail # Missing CT error on member with same name a type parameter
+Language/Errors_and_Warnings/compile_error_t06: MissingCompileTimeError # Please triage this failure
+Language/Errors_and_Warnings/compile_error_t07: MissingCompileTimeError # Please triage this failure
+Language/Expressions/Assignment/super_assignment_failed_t05: RuntimeError # Issue 25671
+Language/Expressions/Assignment/super_assignment_value_t02: RuntimeError # Please triage this failure
+Language/Expressions/Await_Expressions/evaluation_throws_t03: RuntimeError # Please triage this failure
+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/identifier_denotes_a_constant_t06: MissingCompileTimeError # Issue 26580
+Language/Expressions/Constants/identifier_denotes_a_constant_t07: MissingCompileTimeError # Issue 26580
+Language/Expressions/Function_Invocation/async_generator_invokation_t08: Skip # Issue 25967
+Language/Expressions/Function_Invocation/async_generator_invokation_t10: Skip # Issue 25967
+Language/Expressions/Function_Invocation/async_invokation_t04: RuntimeError, Pass # co19 issue 57
+Language/Expressions/Instance_Creation/New/evaluation_t19: RuntimeError # Please triage this failure
+Language/Expressions/Instance_Creation/New/evaluation_t20: RuntimeError # Please triage this failure
+Language/Expressions/Maps/key_value_equals_operator_t02: CompileTimeError # Please triage this failure
+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/syntax_t06: fail # Issue 21098
+Language/Expressions/Numbers/syntax_t09: fail # Issue 21098
+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
+Language/Expressions/Object_Identity/double_t02: RuntimeError # Please triage this failure
+Language/Expressions/Object_Identity/double_t03: RuntimeError # Please triage this failure
+Language/Expressions/Object_Identity/object_t02: RuntimeError # Issue 1533 (int/double related)
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t01: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t02: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t03: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t04: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t05: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t06: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t07: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t08: MissingCompileTimeError # Issue 24332
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/no_such_method_t01: RuntimeError # Issue 24331
+Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/no_such_method_t01: RuntimeError # Issue 24331
+Language/Expressions/Shift/syntax_t01/14: MissingRuntimeError # Please triage this failure
+Language/Functions/External_Functions/not_connected_to_a_body_t01: CompileTimeError, OK # Issue 5021
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_method_and_getter_t01: CompileTimeError # Please triage this failure
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_method_and_getter_t02: CompileTimeError # Please triage this failure
+Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t01/01: CompileTimeError # Please triage this failure
+Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t02: CompileTimeError # Please triage this failure
+Language/Libraries_and_Scripts/Scripts/top_level_main_t05: RuntimeError # Please triage this failure
+Language/Metadata/before_export_t01: RuntimeError # Please triage this failure
+Language/Metadata/before_import_t01: RuntimeError # Please triage this failure
+Language/Metadata/before_library_t01: RuntimeError # Please triage this failure
+Language/Metadata/before_param_t09: RuntimeError # Please triage this failure
+Language/Metadata/before_type_param_t01: RuntimeError # Please triage this failure
+Language/Metadata/before_typedef_t01: RuntimeError # Please triage this failure
+Language/Metadata/before_variable_t01: RuntimeError # Please triage this failure
+Language/Mixins/Mixin_Application/static_warning_t01: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/static_warning_t02: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/superinterfaces_t06: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/superinterfaces_t07: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/syntax_t11: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/syntax_t12: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/syntax_t13: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/syntax_t14: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/syntax_t20: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/syntax_t21: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/syntax_t22: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/syntax_t23: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/syntax_t24: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/syntax_t25: CompileTimeError # Please triage this failure
+Language/Mixins/declaring_constructor_t05: MissingCompileTimeError # Issue 24767
+Language/Mixins/declaring_constructor_t06: MissingCompileTimeError # Issue 24767
+Language/Mixins/deferred_t01: MissingCompileTimeError # Please triage this failure
+Language/Mixins/not_object_superclass_t01: MissingCompileTimeError # Please triage this failure
+Language/Mixins/reference_to_super_t01: MissingCompileTimeError # Please triage this failure
+Language/Reference/Operator_Precedence/precedence_15_unary_prefix_t08: RuntimeError # Please triage this failure
+Language/Statements/Assert/syntax_t04: MissingCompileTimeError # This is legal Dart
+Language/Statements/Continue/async_loops_t09: Crash # Please triage this failure
+Language/Statements/Local_Function_Declaration/reference_before_declaration_t01: MissingCompileTimeError # Issue 21050
+Language/Statements/Local_Function_Declaration/reference_before_declaration_t03: MissingCompileTimeError # Issue 21050
+Language/Statements/Try/catch_scope_t01: RuntimeError # Please triage this failure
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t02: RuntimeError # Please triage this failure
+Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_sync_t05: RuntimeError # Issue 25662,25634
+Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t01: MissingCompileTimeError # Issue 25495
+Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t03: MissingCompileTimeError # Issue 25495
+Language/Statements/Yield_and_Yield_Each/Yield_Each/location_t05: MissingCompileTimeError # Issue 25495
+Language/Types/Dynamic_Type_System/deferred_type_error_t01: RuntimeError # Please triage this failure
+Language/Types/Interface_Types/subtype_t27: Skip # Times out or crashes. Issue 21174
+Language/Types/Interface_Types/subtype_t28: Pass, Fail, Crash # Stack overflow. Issue 25282
+Language/Types/Interface_Types/subtype_t30: fail # Issue 14654
+Language/Variables/final_t01/01: CompileTimeError # co19 issue 77
+Language/Variables/final_t02/01: CompileTimeError # co19 issue 77
+Language/Variables/local_variable_t01: MissingCompileTimeError # Issue 21050
+LayoutTests/fast/dom/css-innerHTML_t01: SkipByDesign # Test is incorrect.
+LayoutTests/fast/loader/loadInProgress_t01: Skip # Issue 23466
+LayoutTests/fast/forms/input-implicit-length-limit_t01: SkipByDesign # Test is not about Dart, but about a DOM-only webkit bug that has been fixed.
+LibTest/collection/LinkedHashSet/LinkedHashSet.from_A03_t01: RuntimeError # Please triage this failure.
+LibTest/collection/LinkedList/add_A01_t01: Pass, Slow # Slow tests that needs extra time to finish.
+LibTest/collection/ListBase/ListBase_class_A01_t01: RuntimeError # Please triage this failure
+LibTest/collection/ListMixin/ListMixin_class_A01_t01: RuntimeError # Please triage this failure
+LibTest/convert/JsonCodec/encode_A01_t01: RuntimeError # code.google.com/p/co19/issues/detail?id=735
+LibTest/convert/JsonCodec/encode_A01_t02: RuntimeError # code.google.com/p/co19/issues/detail?id=735
+LibTest/convert/JsonDecoder/fuse_A01_t01: RuntimeError # co19-roll r667: Please triage this failure
+LibTest/convert/JsonEncoder/convert_A01_t01: RuntimeError # co19-roll r667: Please triage this failure
+LibTest/core/DateTime/DateTime.fromMicrosecondsSinceEpoch_A01_t01: RuntimeError # Please triage this failure
+LibTest/core/DateTime/microsecond_A01_t01: RuntimeError # Please triage this failure
+LibTest/core/DateTime/microsecondsSinceEpoch_A01_t01: RuntimeError # Please triage this failure
+LibTest/core/DateTime/parse_A01_t03: RuntimeError # Please triage this failure
+LibTest/core/DateTime/to8601String_A01_t01: RuntimeError # Please triage this failure
+LibTest/core/DateTime/to8601String_A01_t02: RuntimeError # Please triage this failure
+LibTest/core/DateTime/to8601String_A01_t03: RuntimeError # Please triage this failure
+LibTest/core/List/List_class_A01_t01: RuntimeError # co19-roll r623: Please triage this failure
+LibTest/core/List/getRange_A03_t01: RuntimeError, OK # Tests that fail because they use the legacy try-catch syntax. co19 issue 184.
+LibTest/core/List/removeAt_A02_t01: RuntimeError # Issue 1533
+LibTest/core/List/sort_A01_t06: Slow, Pass # Slow tests that needs extra time to finish.
+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/int/hashCode_A01_t01: RuntimeError, OK # co19 issue 308
+LibTest/core/int/isEven_A01_t01: RuntimeError, OK # co19 issue 277
+LibTest/core/int/isOdd_A01_t01: RuntimeError, OK # co19 issue 277
+LibTest/core/int/operator_AND_A01_t01: RuntimeError, OK # Requires bigints.
+LibTest/core/int/operator_GT_A01_t01: RuntimeError, OK # co19 issue 200
+LibTest/core/int/operator_LT_A01_t01: RuntimeError, OK # co19 issue 200
+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_XOR_A01_t01: RuntimeError, OK # Requires bigints.
+LibTest/core/int/operator_addition_A01_t01: RuntimeError, OK # co19 issue 200
+LibTest/core/int/operator_remainder_A01_t01: RuntimeError, OK # Requires bigints.
+LibTest/core/int/operator_right_shift_A01_t01: RuntimeError, OK # Expects negative result from bit-operation.
+LibTest/core/int/toDouble_A01_t01: RuntimeError, OK # co19 issue 200
+LibTest/core/RegExp/Pattern_semantics/splitQueryString_A02_t01: Pass,RuntimeError # https://github.com/dart-lang/sdk/issues/29814
+LibTest/html/HttpRequest/responseType_A01_t03: CompileTimeError # co19-roll r706: Please triage this failure
+LibTest/html/IFrameElement/enteredView_A01_t01: CompileTimeError # co19-roll r706: Please triage this failure
+LibTest/isolate/Isolate/spawnUri_A01_t01: Fail # Dart issue 15974
+LibTest/isolate/Isolate/spawnUri_A01_t02: Fail # Dart issue 15974
+LibTest/isolate/Isolate/spawnUri_A01_t03: Fail # Dart issue 15974
+LibTest/isolate/Isolate/spawnUri_A01_t04: Fail # Dart issue 15974
+LibTest/isolate/Isolate/spawnUri_A01_t05: Fail # Dart issue 15974
+LibTest/isolate/Isolate/spawnUri_A01_t06: RuntimeError # Dart issue 15974
+LibTest/isolate/Isolate/spawnUri_A01_t07: RuntimeError # Dart issue 15974
+LibTest/isolate/Isolate/spawnUri_A02_t01: RuntimeError, Pass # Dart issue 15617
+LibTest/isolate/Isolate/spawn_A02_t02: RuntimeError, Pass # Dart issue 15617
+LibTest/isolate/Isolate/spawn_A04_t01: RuntimeError # Dart issue 15974
+LibTest/isolate/Isolate/spawn_A06_t06: Skip # Times out. Please triage this failure.
+LibTest/isolate/SendPort/send_A01_t01: CompileTimeError # co19-roll r706: Please triage this failure
+LibTest/isolate/SendPort/send_A01_t02: CompileTimeError # co19-roll r706: Please triage this failure
+LibTest/isolate/SendPort/send_A01_t03: CompileTimeError # co19-roll r706: Please triage this failure
+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_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
+LibTest/typed_data/ByteData/*Uint64*: fail # co19-roll r569: Please triage this failure
+LibTest/typed_data/ByteData/ByteData.view_A01_t02: fail # co19-roll r569: Please triage this failure
+LibTest/typed_data/ByteData/ByteData.view_A03_t01: fail # co19-roll r569: Please triage this failure
+LibTest/typed_data/ByteData/ByteData.view_A04_t01: fail # co19-roll r569: Please triage this failure
+LibTest/typed_data/ByteData/ByteData.view_A05_t01: fail # Issue 12989
+LibTest/typed_data/ByteData/ByteData.view_A05_t02: fail # Issue 12989
+LibTest/typed_data/ByteData/ByteData.view_A05_t03: fail # Issue 12989
+LibTest/typed_data/ByteData/ByteData_A01_t01: fail # co19-roll r569: Please triage this failure
+LibTest/typed_data/ByteData/ByteData_A02_t01: fail # co19-roll r576: Please triage this failure
+LibTest/typed_data/ByteData/getFloat32_A02_t01: fail # Issue 12989
+LibTest/typed_data/ByteData/getFloat32_A02_t02: fail # co19-roll r569: Please triage this failure
+LibTest/typed_data/ByteData/getFloat64_A02_t01: fail # Issue 12989
+LibTest/typed_data/ByteData/getFloat64_A02_t02: fail # co19-roll r569: Please triage this failure
+LibTest/typed_data/ByteData/getInt16_A02_t01: fail # Issue 12989
+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_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
+LibTest/typed_data/ByteData/getUint16_A02_t01: fail # Issue 12989
+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_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
+LibTest/typed_data/ByteData/setFloat32_A02_t01: fail # Issue 12989
+LibTest/typed_data/ByteData/setFloat32_A02_t02: fail # co19-roll r569: Please triage this failure
+LibTest/typed_data/ByteData/setFloat64_A02_t01: fail # Issue 12989
+LibTest/typed_data/ByteData/setFloat64_A02_t02: fail # co19-roll r569: Please triage this failure
+LibTest/typed_data/ByteData/setInt16_A02_t01: fail # Issue 12989
+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_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
+LibTest/typed_data/ByteData/setUint16_A02_t01: fail # Issue 12989
+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_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
+LibTest/typed_data/Float32List/Float32List.view_A05_t01: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float32List/Float32List.view_A05_t02: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float32List/Float32List.view_A05_t03: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float32List/Float32List_A02_t01: fail # co19-roll r576: Please triage this failure
+LibTest/typed_data/Float32List/fold_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float32List/join_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float32List/join_A01_t02: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4List/Float32x4List.view_A05_t01: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float32x4List/Float32x4List.view_A05_t02: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float32x4List/Float32x4List.view_A05_t03: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float32x4List/Float32x4List_A02_t01: fail # co19-roll r576: Please triage this failure
+LibTest/typed_data/Float32x4List/fold_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float32x4List/join_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float32x4List/join_A01_t02: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float64List/Float64List.view_A05_t01: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float64List/Float64List.view_A05_t02: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float64List/Float64List.view_A05_t03: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float64List/Float64List_A02_t01: fail # co19-roll r576: Please triage this failure
+LibTest/typed_data/Float64List/fold_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float64List/join_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float64List/join_A01_t02: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int16List/Int16List.view_A05_t01: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int16List/Int16List.view_A05_t02: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int16List/Int16List.view_A05_t03: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int16List/Int16List_A02_t01: fail # co19-roll r576: Please triage this failure
+LibTest/typed_data/Int32List/Int32List.view_A05_t01: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int32List/Int32List.view_A05_t02: RuntimeError # co19-roll r559: Please triage this failure
+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_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
+LibTest/typed_data/Int8List/Int8List.view_A05_t03: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int8List/Int8List_A02_t01: fail # co19-roll r576: Please triage this failure
+LibTest/typed_data/Uint16List/Uint16List.view_A05_t01: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint16List/Uint16List.view_A05_t02: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint16List/Uint16List.view_A05_t03: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint16List/Uint16List_A02_t01: fail # co19-roll r576: Please triage this failure
+LibTest/typed_data/Uint32List/Uint32List.view_A05_t01: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint32List/Uint32List.view_A05_t02: RuntimeError # co19-roll r559: Please triage this failure
+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_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
+LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A05_t03: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint8ClampedList/Uint8ClampedList_A02_t01: Pass, fail # co19-roll r576: Passes on ie10. Please triage this failure
+LibTest/typed_data/Uint8List/Uint8List.view_A05_t01: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint8List/Uint8List.view_A05_t02: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint8List/Uint8List.view_A05_t03: RuntimeError # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint8List/Uint8List_A02_t01: fail # co19-roll r576: Please triage this failure
+Utils/tests/Expect/identical_A01_t01: fail # co19-roll r546: Please triage this failure
+WebPlatformTest/Utils/test/testFail_t01: RuntimeError # co19-roll r722: Please triage this failure.
+WebPlatformTest/dom/nodes/DOMImplementation-createHTMLDocument_t01: CompileTimeError # co19-roll r722: Please triage this failure.
+WebPlatformTest/dom/nodes/Document-createElement_t01: CompileTimeError # co19-roll r722: Please triage this failure.
+WebPlatformTest/dom/nodes/Element-childElementCount-nochild_t01: CompileTimeError # co19-roll r722: Please triage this failure.
+WebPlatformTest/webstorage/storage_session_setitem_quotaexceedederr_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/webstorage/storage_local_setitem_quotaexceedederr_t01: Skip # Times out. Please triage this failure.
+
+[ $compiler == dart2js && $checked ]
+Language/Errors_and_Warnings/static_warning_t02: RuntimeError # Please triage this failure
+Language/Errors_and_Warnings/static_warning_t03: RuntimeError # Please triage this failure
+Language/Errors_and_Warnings/static_warning_t04: RuntimeError # Please triage this failure
+Language/Errors_and_Warnings/static_warning_t05: RuntimeError # Please triage this failure
+Language/Errors_and_Warnings/static_warning_t06: RuntimeError # Please triage this failure
+Language/Expressions/Assignment/Compound_Assignment/null_aware_static_warning_super_t01/01: Fail # Please triage this failure
+Language/Expressions/Assignment/Compound_Assignment/null_aware_static_warning_variable_t01/01: Fail # Please triage this failure
+Language/Expressions/Assignment/super_assignment_static_warning_t04/01: Fail # Please triage this failure
+Language/Expressions/Assignment/super_assignment_dynamic_error_t01: RuntimeError # Please triage this failure
+Language/Expressions/Function_Expressions/static_type_dynamic_async_t03: RuntimeError # Please triage this failure
+Language/Expressions/Function_Expressions/static_type_dynamic_asyncs_t03: RuntimeError # Please triage this failure
+Language/Expressions/Function_Expressions/static_type_dynamic_syncs_t03: RuntimeError # Please triage this failure
+Language/Expressions/Function_Expressions/static_type_form_3_async_t03: RuntimeError # Please triage this failure
+Language/Expressions/Function_Expressions/static_type_form_3_asyncs_t03: RuntimeError # Please triage this failure
+Language/Expressions/Function_Expressions/static_type_form_3_syncs_t03: RuntimeError # Please triage this failure
+Language/Expressions/If_null_Expressions/static_type_t01: RuntimeError # Please triage this failure
+Language/Expressions/If_null_Expressions/static_type_t02: RuntimeError # Please triage this failure
+Language/Functions/async_return_type_t01: RuntimeError # Please triage this failure
+Language/Functions/generator_return_type_t01: RuntimeError # Please triage this failure
+Language/Functions/generator_return_type_t02: RuntimeError # Please triage this failure
+Language/Statements/Assert/execution_t03: RuntimeError # Please triage this failure
+Language/Statements/Assert/execution_t11: RuntimeError # Please triage this failure
+Language/Statements/Switch/execution_t01: Fail # Missing type check in switch expression
+Language/Statements/Switch/type_t01: RuntimeError # Issue 16089
+Language/Statements/Return/runtime_type_t04: RuntimeError # Issue 26584
+Language/Types/Static_Types/malformed_type_t01: RuntimeError # Issue 21089
+Language/Types/Dynamic_Type_System/malbounded_type_error_t01: RuntimeError # Issue 21088
+Language/Types/Parameterized_Types/malbounded_t06: RuntimeError # Issue 21088
+LibTest/collection/DoubleLinkedQueue/DoubleLinkedQueue_class_A01_t01: Skip # Timesout. Please triage this failure.
+LibTest/core/Map/Map_class_A01_t04: Slow, Pass # Please triage this failure
+LibTest/core/Uri/Uri_A06_t03: Slow, Pass # Please triage this failure
+LibTest/math/Point/operator_mult_A02_t01: RuntimeError # Issue 1533
+
+[ $compiler == dart2js && ! $checked && $enable_asserts ]
+Language/Statements/Assert/execution_t01: SkipByDesign # Unspec'd feature.
+Language/Statements/Assert/execution_t02: SkipByDesign # Unspec'd feature.
+Language/Statements/Assert/execution_t03: SkipByDesign # Unspec'd feature.
+Language/Statements/Assert/execution_t04: SkipByDesign # Unspec'd feature.
+Language/Statements/Assert/execution_t05: SkipByDesign # Unspec'd feature.
+Language/Statements/Assert/execution_t06: SkipByDesign # Unspec'd feature.
+Language/Statements/Assert/execution_t11: SkipByDesign # Unspec'd feature.
+Language/Statements/Assert/production_mode_t01: SkipByDesign # Unspec'd feature.
+Language/Statements/Assert/type_t02: SkipByDesign # Unspec'd feature.
+Language/Statements/Assert/type_t03: SkipByDesign # Unspec'd feature.
+Language/Statements/Assert/type_t04: SkipByDesign # Unspec'd feature.
+Language/Statements/Assert/type_t05: SkipByDesign # Unspec'd feature.
+Language/Statements/Assert/type_t06: SkipByDesign # Unspec'd feature.
+
+[ $compiler == dart2js && $checked && $runtime != d8]
+LayoutTests/fast/canvas/webgl/framebuffer-object-attachment_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/read-pixels-test_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/inline/empty-inline-before-collapsed-space_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/url/trivial_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/url/trivial-segments_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/auto-sizing-orthogonal-flows_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
+
+[ $compiler == dart2js && $checked && $runtime != drt && $runtime != d8]
+WebPlatformTest/custom-elements/instantiating/createElement_A04_t01: RuntimeError # Please triage this failure
+WebPlatformTest/custom-elements/instantiating/createElementNS_A04_t01: RuntimeError # Please triage this failure
+
+[ $compiler == dart2js && $fast_startup ]
+Language/Classes/Instance_Methods/Operators/unary_minus: Fail # mirrors not supported
+Language/Expressions/Null/instance_of_class_null_t01: Fail # mirrors not supported
+Language/Metadata/before_class_t01: Fail # mirrors not supported
+Language/Metadata/before_ctor_t01: Fail # mirrors not supported
+Language/Metadata/before_ctor_t02: Fail # mirrors not supported
+Language/Metadata/before_export_t01: Fail # mirrors not supported
+Language/Metadata/before_factory_t01: Fail # mirrors not supported
+Language/Metadata/before_function_t01: Fail # mirrors not supported
+Language/Metadata/before_function_t02: Fail # mirrors not supported
+Language/Metadata/before_function_t03: Fail # mirrors not supported
+Language/Metadata/before_function_t04: Fail # mirrors not supported
+Language/Metadata/before_function_t05: Fail # mirrors not supported
+Language/Metadata/before_function_t06: Fail # mirrors not supported
+Language/Metadata/before_function_t07: Fail # mirrors not supported
+Language/Metadata/before_import_t01: Fail # mirrors not supported
+Language/Metadata/before_library_t01: Fail # mirrors not supported
+Language/Metadata/before_param_t01: Fail # mirrors not supported
+Language/Metadata/before_param_t02: Fail # mirrors not supported
+Language/Metadata/before_param_t03: Fail # mirrors not supported
+Language/Metadata/before_param_t04: Fail # mirrors not supported
+Language/Metadata/before_param_t05: Fail # mirrors not supported
+Language/Metadata/before_param_t06: Fail # mirrors not supported
+Language/Metadata/before_param_t07: Fail # mirrors not supported
+Language/Metadata/before_param_t08: Fail # mirrors not supported
+Language/Metadata/before_param_t09: Fail # mirrors not supported
+Language/Metadata/before_type_param_t01: Fail # mirrors not supported
+Language/Metadata/before_typedef_t01: Fail # mirrors not supported
+Language/Metadata/before_variable_t01: Fail # mirrors not supported
+Language/Metadata/before_variable_t02: Fail # mirrors not supported
+Language/Metadata/compilation_t01: Pass # mirrors not supported, fails for the wrong reason
+Language/Metadata/compilation_t02: Pass # mirrors not supported, fails for the wrong reason
+Language/Metadata/compilation_t03: Pass # mirrors not supported, fails for the wrong reason
+Language/Metadata/compilation_t04: Pass # mirrors not supported, fails for the wrong reason
+Language/Metadata/compilation_t05: Pass # mirrors not supported, fails for the wrong reason
+Language/Metadata/compilation_t06: Pass # mirrors not supported, fails for the wrong reason
+Language/Metadata/compilation_t07: Pass # mirrors not supported, fails for the wrong reason
+Language/Metadata/compilation_t08: Pass # mirrors not supported, fails for the wrong reason
+Language/Metadata/compilation_t09: Pass # mirrors not supported, fails for the wrong reason
+Language/Metadata/compilation_t10: Pass # mirrors not supported, fails for the wrong reason
+Language/Metadata/compilation_t11: Pass # mirrors not supported, fails for the wrong reason
+WebPlatformTest/shadow-dom/testcommon: Fail # mirrors not supported
+
+[ $compiler == dart2js && $runtime == jsshell ]
+LibTest/isolate/Isolate/spawn_A04_t04: Fail # Issue 27558
+
+[ $compiler == dart2js && $fast_startup && $runtime == d8]
+LibTest/isolate/Isolate/spawn_A04_t04: Fail # Issue 27558
+
+[ $compiler == dart2js && $fast_startup && $runtime == jsshell ]
+LibTest/isolate/ReceivePort/asBroadcastStream_A03_t01: Fail # please triage
+
+[ $compiler == dart2js && $fast_startup && $browser ]
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001_t01: Fail # custom elements not supported
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-004_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-004_t02: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/elements-001_t01: Fail # custom elements not supported
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-004_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-004_t02: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-006_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-003_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-003_t02: Fail # custom elements not supported
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-005_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/event-dispatch/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/event-dispatch/test-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/event-dispatch/test-003_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/event-retargeting/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/event-retargeting/test-002_t01: Fail # custom elements not supported
+WebPlatformTest/shadow-dom/events/event-retargeting/test-004_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-003_t01: Fail # please triage
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-003_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/custom-pseudo-elements/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/test-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-004_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/selectors-api-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/selectors-api-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-009_t01: Fail # please triage
+
+[ $compiler == dart2js && $fast_startup && $browser && $runtime != chrome && $runtime != drt]
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-005_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-003_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-event-interface/event-path-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-007_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-008_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-009_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-010_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-011_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-012_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-013_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-001_t01: Fail # custom elements not supported
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-007_t01: Fail # custom elements not supported
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-010_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-003_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-005_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-004_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/event-retargeting/test-003_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t03: Fail # please triage
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t04: Fail # please triage
+WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-001_t01: Fail # custom elements not supported
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/inert-html-elements/test-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/composition/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-003_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/distribution-003_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-003_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-005_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/nested-shadow-trees/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/rendering-shadow-trees/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/reprojection/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-003_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-004_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-005_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-006_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-017_t01: Fail # custom elements not supported
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/dom-tree-accessors-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/shadow-root-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-011_t01: Fail # please triage
+
+[ $compiler == dart2js && $fast_startup && $browser && $runtime != chrome ]
+WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-003_t01: Fail # please triage
+
+[ $compiler == dart2js && $fast_startup && $browser && $runtime != drt ]
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-004_t01: Fail # custom elements not supported
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-002_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-003_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-004_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-005_t01: Fail # custom elements not supported
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-006_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-007_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-008_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-009_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t01: Fail # please triage
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t02: Fail # please triage
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t05: Fail # please triage
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t06: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-005_t01: Fail # please triage
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-007_t01: Fail # please triage
+
+[ $compiler == dart2js && ! $checked && $runtime != d8 && $runtime != jsshell]
+LayoutTests/fast/xpath/invalid-resolver_t01: RuntimeError # Please triage this failure
+
+[ $compiler == dart2js && $minified ]
+LibTest/typed_data/Float32List/runtimeType_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float32x4List/runtimeType_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float64List/runtimeType_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int16List/runtimeType_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int32List/runtimeType_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int8List/runtimeType_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint16List/runtimeType_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint32List/runtimeType_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint8ClampedList/runtimeType_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint8List/runtimeType_A01_t01: fail # co19-roll r559: Please triage this failure
+
+[ $compiler == dart2js && $mode == debug ]
+LibTest/collection/ListBase/ListBase_class_A01_t01: Skip
+LibTest/collection/ListMixin/ListMixin_class_A01_t01: Skip
+LibTest/core/List/List_class_A01_t01: Skip
+
+[ $compiler == dart2js && $runtime == jsshell ]
+Language/Expressions/Await_Expressions/execution_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Expressions/Await_Expressions/execution_t02: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Expressions/Await_Expressions/execution_t03: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Expressions/Await_Expressions/execution_t04: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Expressions/Await_Expressions/execution_t05: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Expressions/Await_Expressions/execution_t06: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Statements/For/Asynchronous_For_in/execution_t04: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t04: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t02: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t03: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t04: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t05: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t06: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t07: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t08: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t09: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t10: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/async/Future/Future.delayed_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/async/Future/Future.delayed_A03_t01: fail # Issue 7728, timer not supported in jsshell
+LibTest/async/Future/doWhile_A05_t01: RuntimeError # Please triage. May be unsupported timer issue 7728.
+LibTest/async/Future/forEach_A04_t02: RuntimeError # Please triage. May be unsupported timer issue 7728.
+LibTest/async/Future/timeout_A01_t01: RuntimeError # Please triage. May be unsupported timer issue 7728.
+LibTest/async/Future/wait_A01_t07: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/async/Stream/Stream.periodic_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/async/Stream/Stream.periodic_A02_t01: fail # Issue 7728, timer not supported in jsshell
+LibTest/async/Stream/Stream.periodic_A03_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/async/Stream/asBroadcastStream_A03_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/async/Stream/asBroadcastStream_A04_t03: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/async/Stream/first_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/first_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/timeout_A01_t01: RuntimeError # Please triage. May be unsupported timer issue 7728.
+LibTest/async/Stream/timeout_A02_t01: RuntimeError # Please triage. May be unsupported timer issue 7728.
+LibTest/async/Stream/timeout_A03_t01: RuntimeError # Please triage. May be unsupported timer issue 7728.
+LibTest/async/Stream/timeout_A04_t01: RuntimeError # Please triage. May be unsupported timer issue 7728.
+LibTest/async/Timer/Timer.periodic_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/async/Timer/Timer.periodic_A02_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/async/Timer/Timer_A01_t01: fail # Issue 7728, timer not supported in jsshell
+LibTest/async/Timer/cancel_A01_t01: fail # Issue 7728, timer not supported in jsshell
+LibTest/async/Timer/isActive_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/async/Timer/isActive_A01_t02: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/async/Zone/createPeriodicTimer_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/async/Zone/createTimer_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/core/List/sort_A01_t04: Skip # Must be a bug in jsshell, test sometimes times out.
+LibTest/core/Map/Map_class_A01_t04: Pass, Slow # Issue 8096
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Fail # co19-roll r706: Please triage this failure.
+LibTest/core/Stopwatch/elapsedInMs_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/core/Stopwatch/elapsedInUs_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/core/Stopwatch/elapsedTicks_A01_t01: RuntimeError # Please triage this failure
+LibTest/core/Stopwatch/elapsedTicks_A01_t02: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/core/Stopwatch/elapsedTicks_A01_t03: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/core/Stopwatch/elapsed_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/core/Stopwatch/elapsed_A01_t02: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/core/Stopwatch/elapsed_A01_t03: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/core/Stopwatch/start_A01_t01: RuntimeError # Please triage this failure
+LibTest/core/Stopwatch/start_A01_t02: RuntimeError # Please triage this failure
+LibTest/core/Stopwatch/start_A01_t03: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/core/Stopwatch/stop_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/core/Uri/Uri_A06_t03: Pass, Slow
+LibTest/isolate/Isolate/spawn_A03_t01: RuntimeError # Please triage this failure
+LibTest/isolate/Isolate/spawn_A03_t03: RuntimeError # Please triage this failure
+LibTest/isolate/Isolate/spawn_A03_t04: RuntimeError # Please triage this failure
+LibTest/isolate/Isolate/spawn_A04_t02: RuntimeError # Please triage this failure
+LibTest/isolate/Isolate/spawn_A04_t03: Fail # Please triage this failure
+LibTest/isolate/Isolate/spawn_A04_t05: Fail # Please triage this failure
+LibTest/isolate/Isolate/spawn_A06_t02: Fail # Please triage this failure
+LibTest/isolate/Isolate/spawn_A06_t03: Fail # Please triage this failure
+LibTest/isolate/Isolate/spawn_A06_t04: RuntimeError # Please triage this failure
+LibTest/isolate/Isolate/spawn_A06_t05: RuntimeError # Please triage this failure
+LibTest/isolate/Isolate/spawn_A06_t07: Fail # Please triage this failure
+LibTest/isolate/RawReceivePort/close_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/isolate/ReceivePort/asBroadcastStream_A03_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/isolate/ReceivePort/asBroadcastStream_A04_t03: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/isolate/ReceivePort/close_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/typed_data/Float32List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
+LibTest/typed_data/Float32x4List/Float32x4List.view_A06_t01: fail # co19-roll r587: Please triage this failure
+LibTest/typed_data/Float64List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int16List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int16List/toList_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int32List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int32List/toList_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int32x4/operator_OR_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+LibTest/typed_data/Int8List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint16List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint16List/toList_A01_t01: fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint32List/toList_A01_t01: Skip # issue 16934, co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint8ClampedList/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint8List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
+
+[ $compiler == dart2js && $checked && $runtime == jsshell]
+LibTest/core/Map/Map_class_A01_t04: Skip # Issue 18093, timeout.
+LibTest/core/Uri/Uri_A06_t03: Skip # Issue 18093, timeout.
+LibTest/core/Uri/encodeQueryComponent_A01_t02: Skip # Issue 18093, timeout.
+
+[ $compiler == dart2js && $jscl ]
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Fail, Pass # issue 3333
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: RuntimeError, OK # This is not rejected by V8. 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/int/compareTo_A01_t01: RuntimeError, OK # Requires big int.
+LibTest/core/int/hashCode_A01_t01: RuntimeError, OK # co19 testing missing assertion.
+LibTest/core/int/isEven_A01_t01: RuntimeError, OK # Not in API.
+LibTest/core/int/isOdd_A01_t01: RuntimeError, OK # Not in API.
+LibTest/core/int/operator_left_shift_A01_t01: RuntimeError, OK # Requires big int.
+LibTest/core/int/operator_remainder_A01_t03: RuntimeError, OK # Leg only has double.
+LibTest/core/int/operator_truncating_division_A01_t02: RuntimeError, OK # Leg only has double.
+LibTest/core/int/remainder_A01_t01: RuntimeError, OK # Requires big int.
+LibTest/core/int/remainder_A01_t03: RuntimeError, OK # Leg only has double.
+LibTest/core/int/toDouble_A01_t01: RuntimeError, OK # Requires big int.
+LibTest/core/int/toRadixString_A01_t01: RuntimeError, OK # Bad test: uses Expect.fail, Expect.throws, assumes case of result, and uses unsupported radixes.
+
+[ $compiler == dart2js && $runtime == d8 ]
+LibTest/isolate/Isolate/spawn_A03_t01: Pass # co19 issue 77
+LibTest/isolate/Isolate/spawn_A04_t02: RuntimeError # Please triage this failure.
+LibTest/typed_data/Float32x4List/Float32x4List.view_A06_t01: fail # co19-roll r587: Please triage this failure
+LibTest/typed_data/Int32x4/operator_OR_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+
+
+[ $compiler == dart2js && $runtime == d8 && $system == windows ]
+LibTest/async/DeferredLibrary/*: Skip # Issue 17458
+
+[ $compiler == dart2js && $browser ]
+LayoutTests/fast/mediastream/getusermedia_t01: Skip # Please triage this failure.
+LayoutTests/fast/css-generated-content/bug91547_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/filesystem/file-after-reload-crash_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/dom/HTMLButtonElement/change-type_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/dom/StyleSheet/discarded-sheet-owner-null_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/dom/css-cached-import-rule_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/dom/cssTarget-crash_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/dom/empty-hash-and-search_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/dom/shadow/form-in-shadow_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/forms/date/date-interactive-validation-required_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/forms/datetimelocal/datetimelocal-interactive-validation-required_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/forms/form-submission-create-crash_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/forms/formmethod-attribute-button-html_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/forms/formmethod-attribute-input-html_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/forms/formmethod-attribute-input-2_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/forms/missing-action_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/forms/submit-form-with-dirname-attribute_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/forms/submit-form-with-dirname-attribute-with-ancestor-dir-attribute_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/forms/submit-form-with-dirname-attribute-with-nonhtml-ancestor_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/forms/submit-nil-value-field-assert_t01: Skip # Test reloads itself. Issue 18558.
+LayoutTests/fast/forms/textarea-submit-crash_t01: Skip # Test reloads itself. Issue 18558.
+LibTest/html/IFrameElement/appendHtml_A01_t01: Pass, RuntimeError # Issue 23462
+LibTest/html/IFrameElement/appendHtml_A01_t02: Pass, RuntimeError # Issue 23462
+
+LayoutTests/fast/dynamic/insertAdjacentHTML_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/balance-unbreakable_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/newmulticol/balance_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/newmulticol/balance-maxheight_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/newmulticol/balance_t02: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/newmulticol/balance_t04: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/newmulticol/balance_t05: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/newmulticol/balance_t06: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/newmulticol/balance_t07: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/newmulticol/balance_t08: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/newmulticol/balance_t09: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/newmulticol/balance_t10: Pass, RuntimeError  # Issue 747, I don't understand how, but sometimes passes.
+LayoutTests/fast/multicol/newmulticol/balance-images_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/column-width-zero_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/widows_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/multicol/orphans-relayout_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/media/mq-parsing_t01: Pass, RuntimeError  # Issue 747, False passes on Firefox, but trying to keep these grouped with the issue.
+LayoutTests/fast/mediastream/RTCPeerConnection-AddRemoveStream_t01: Skip # Passes on Safari, Issue 23475
+LayoutTests/fast/overflow/replaced-child-100percent-height-inside-fixed-container-with-overflow-auto_t01: Pass, RuntimeError # Issue 747, False pass on Safari
+LayoutTests/fast/lists/list-style-position-inside_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/overflow/overflow-rtl-vertical-origin_t01: Pass, RuntimeError # Issue 747, False passes on Firefox, but trying to keep these grouped with the issue.
+LayoutTests/fast/replaced/computed-image-width-with-percent-height-and-fixed-ancestor_t01: Pass # Issue 747, False pass
+LayoutTests/fast/table/col-width-span-expand_t01: Skip # Issue 747
+LayoutTests/fast/text/font-fallback-synthetic-italics_t01: Pass, RuntimeError  # Issue 747
+LayoutTests/fast/text/glyph-reordering_t01: Pass, RuntimeError # Issue 747, This is a false pass. The font gets sanitized, so whether it works or not probably depends on default sizes.
+LayoutTests/fast/text/international/rtl-text-wrapping_t01: Pass # Issue 747, This is a false pass. All the content gets sanitized, so there's nothing to assert fail on. If the code did anything it would fail.
+LayoutTests/fast/text/line-break-after-empty-inline-hebrew_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/text/regional-indicator-symobls_t01: Pass, Fail # Issue 747
+LayoutTests/fast/text/font-fallback-synthetic-italics_t01: RuntimeError # Issue 747
+LayoutTests/fast/text/font-ligatures-linebreak_t01: Skip # Issue 747
+LayoutTests/fast/text/font-ligatures-linebreak-word_t01: Skip # Issue 747
+LayoutTests/fast/text/ipa-tone-letters_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/writing-mode/percentage-margins-absolute-replaced_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/writing-mode/positionForPoint_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/html/adjacent-html-context-element_t01:RuntimeError # Issue 747
+LayoutTests/fast/dom/HTMLElement/insertAdjacentHTML-errors_t01: RuntimeError # Issue 747
+LayoutTests/fast/transforms/transform-hit-test-flipped_t01: Pass, RuntimeError # Issue 747, Passes on Firefox, but is clearly not testing what it's trying to test.
+LayoutTests/fast/transforms/scrollIntoView-transformed_t01: Pass, RuntimeError # Issue 747, False passes on Firefox.
+LayoutTests/fast/transforms/bounding-rect-zoom_t01: RuntimeError, Pass # Issue 747, Erratic, but only passes because divs have been entirely removed.
+LayoutTests/fast/table/anonymous-table-section-removed_t01: Skip # Issue 747
+LayoutTests/fast/table/hittest-tablecell-bottom-edge_t01: Skip # Issue 747
+LayoutTests/fast/table/hittest-tablecell-with-borders-bottom-edge_t01: Skip # Issue 747
+LayoutTests/fast/table/table-width-exceeding-max-width_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/table/min-max-width-preferred-size_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/table/margins-flipped-text-direction_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/table/html-table-width-max-width-constrained_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/table/fixed-table-layout-width-change_t01: Pass, RuntimeError # Issue 747, False passes on Firefox
+LayoutTests/fast/sub-pixel/replaced-element-baseline_t01: Pass, RuntimeError # Issue 747, Fails on Safari, false pass on others
+LayoutTests/fast/ruby/parse-rp_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-table-cell-ignore-height_t01: RuntimeError, Pass # Issue 747, Spurious intermittent pass
+LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-anonymous-table-cell_t01: RuntimeError, Pass # Issue 747, Spurious intermittent pass.
+LayoutTests/fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor_t01: RuntimeError, Pass # Issue 747, Spurious intermittent pass
+LayoutTests/fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor-vertical-lr_t01: RuntimeError, Pass # Issue 747, Spurious intermittent pass
+LayoutTests/fast/replaced/computed-image-width-with-percent-height-and-fixed-ancestor_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/replaced/computed-image-width-with-percent-height-and-fixed-ancestor-vertical-lr_t01: Pass, RuntimeError # Issue 747
+LayoutTests/fast/parser/parse-wbr_t01: Pass, RuntimeError # Issue 747
+WebPlatformTest/html/syntax/parsing/Document.getElementsByTagName-foreign_t01: RuntimeError, Pass # Issue 747
+WebPlatformTest/html/semantics/document-metadata/styling/LinkStyle_t01: Pass,RuntimeError # Issue 747
+WebPlatformTest/html/semantics/grouping-content/the-ol-element/ol.start-reflection_t02: Skip # Issue 747
+WebPlatformTest/html/semantics/scripting-1/the-script-element/async_t11: Skip # Issue 747
+WebPlatformTest/html/semantics/selectors/pseudo-classes/disabled_t01: Pass, RuntimeError # Issue 747, Spurious pass
+WebPlatformTest/html/semantics/selectors/pseudo-classes/link_t01: Pass,RuntimeError # Issue 747
+WebPlatformTest/html/semantics/forms/the-form-element/form-nameditem_t01: RuntimeError # Issue 747
+
+[ $compiler == dart2js && $runtime == chromeOnAndroid ]
+LayoutTests/fast/multicol/newmulticol/balance-maxheight_t02: RuntimeError
+Language/Expressions/Strings/escape_backspace_t01: Pass, Slow # Please triage this failure.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Fail # Issue 22200.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail # Issue 22200.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Fail # Issue 22200.
+LibTest/core/Set/removeAll_A01_t02: Pass, Slow # Please triage this failure.
+LibTest/core/int/compareTo_A01_t01: Fail # Please triage this failure.
+LibTest/core/int/operator_left_shift_A01_t01: Fail # Please triage this failure.
+LibTest/core/int/operator_remainder_A01_t03: Fail # Please triage this failure.
+LibTest/core/int/operator_truncating_division_A01_t02: Fail # Please triage this failure.
+LibTest/core/int/remainder_A01_t01: Fail # Please triage this failure.
+LibTest/core/int/remainder_A01_t03: Fail # Please triage this failure.
+LibTest/core/int/toRadixString_A01_t01: Fail # Please triage this failure.
+LibTest/isolate/Isolate/spawnUri_A01_t01: Skip # Please triage this failure.
+LibTest/isolate/Isolate/spawnUri_A01_t02: Skip # Please triage this failure.
+LibTest/isolate/Isolate/spawnUri_A01_t03: Skip # Please triage this failure.
+LibTest/isolate/Isolate/spawnUri_A02_t01: RuntimeError # Please triage this failure.
+LibTest/isolate/Isolate/spawnUri_A02_t02: Skip # Please triage this failure.
+LibTest/isolate/Isolate/spawnUri_A02_t03: Skip # Please triage this failure.
+LibTest/isolate/Isolate/spawnUri_A02_t04: Skip # Please triage this failure.
+LibTest/math/log_A01_t01: Fail # Please triage this failure.
+LibTest/typed_data/Float32x4List/Float32x4List.view_A01_t02: RuntimeError # Please triage this failure.
+LibTest/typed_data/Float32x4List/Float32x4List.view_A06_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Float64List/join_A01_t01: Pass, Slow # Please triage this failure.
+LibTest/typed_data/Int16List/single_A01_t02: Pass, Slow # Please triage this failure.
+LibTest/typed_data/Int32x4/operator_OR_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Int8List/sublist_A02_t01: Pass, Slow # Please triage this failure.
+LibTest/typed_data/Uint8ClampedList/map_A02_t01: Pass, Slow # Please triage this failure.
+
+[ $compiler == dart2js && $runtime == chrome ]
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t01: Pass, RuntimeError # Issue 26615
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t04: Pass, RuntimeError # Issue 26615
+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/animation/request-animation-frame-cancel2_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-cancel_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-prefix_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-timestamps-advance_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-timestamps_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-within-callback_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/backgrounds/background-position-parsing-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/backgrounds/background-shorthand-with-backgroundSize-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/backgrounds/repeat/parsing-background-repeat_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: Skip # 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/DrawImageSinglePixelStretch_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/alpha_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-arc-negative-radius_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-as-image-incremental-repaint_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/canvas-blending-text_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-currentTransform_t01: RuntimeError # Feature is behind a flag.
+LayoutTests/fast/canvas/canvas-empty-image-pattern_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-rounding_t01: RuntimeError # https://github.com/dart-lang/sdk/issues/29814
+LayoutTests/fast/canvas/canvas-imageSmoothingEnabled-repaint_t01: Skip # Times out. 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-resize-after-paint_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/canvas-scale-drawImage-shadow_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-strokePath-gradient-shadow_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/draw-custom-focus-ring_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/getPutImageDataPairTest_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/rgba-parsing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/setWidthResetAfterForcedRender_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/bad-arguments-test_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/buffer-data-array-buffer_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/canvas-test_t01: Skip # 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-lost-restored_t01: Skip # Please triage this failure
+LayoutTests/fast/canvas/webgl/context-lost_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/draw-arrays-out-of-bounds_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/draw-webgl-to-canvas-2d_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/error-reporting_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/get-active-test_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/gl-get-calls_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/gl-object-get-calls_t01: RuntimeError # Please triage this failure (issue 29065)
+LayoutTests/fast/canvas/webgl/gl-teximage_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/glsl-conformance_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/index-validation-copies-indices_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/index-validation-with-resized-buffer_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/null-object-behaviour_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/object-deletion-behaviour_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/oes-vertex-array-object_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/program-test_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/renderbuffer-initialization_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba5551_t01: Skip # Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba4444_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba5551_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgb565_t01: Skip # 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: Skip # 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: Skip # Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: Skip # Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: Skip # Times out, please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video_t01: Skip # 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, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/texImage2DImageDataTest_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/texImageTest_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/texture-bindings-uneffected-on-resize_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/texture-color-profile_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/texture-complete_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/texture-npot_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/texture-transparent-pixels-initialized_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/webgl-depth-texture_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: Skip # Times out. 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, Pass # Please triage this failure
+LayoutTests/fast/canvas/webgl/webgl-viewport-parameters-preserved_t01: RuntimeError, Pass # Please triage this failure
+LayoutTests/fast/css-generated-content/hit-test-generated-content_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css-generated-content/malformed-url_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css-generated-content/pseudo-animation-before-onload_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css-generated-content/pseudo-animation-display_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css-generated-content/pseudo-animation_t01: Pass, 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/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-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-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/justify-self-cell_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/place-cell-by-index_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/multicol_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/MarqueeLayoutTest_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/aspect-ratio-inheritance_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/aspect-ratio-parsing-tests_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/auto-min-size_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/background-serialize_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/checked-pseudo-selector_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/child-selector-implicit-tbody_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/css-escaped-identifier_t01: RuntimeError # co19 issue 14
+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-shorthand_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/csstext-of-content-string_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/deprecated-flexbox-auto-min-size_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/ex-unit-with-no-x-height_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/first-child-display-change-inverse_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/focus-display-block-inline_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-face-cache-bug_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-face-insert-link_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-face-multiple-ranges-for-unicode-range_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-face-unicode-range-load_t01: Skip # Please triage this failure
+LayoutTests/fast/css/font-face-unicode-range-monospace_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: Skip # Times out, Runtime error. Please triage this failure
+LayoutTests/fast/css/font-family-trailing-bracket-gunk_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-shorthand-from-longhands_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/fontfaceset-download-error_t01: Skip # Timeout: issue 28722. Runtime error not triaged
+LayoutTests/fast/css/fontfaceset-events_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/fontfaceset-loadingdone_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError # co19 issue 14
+LayoutTests/fast/css/getComputedStyle/computed-style-font_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/font-family-fallback-reset_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-border_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/implicit-attach-marking_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css/inherit-initial-shorthand-values_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/insertRule-media_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalid-hex-color_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalid-predefined-color_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/max-device-aspect-ratio_t01: RuntimeError, Pass # Issue 28998
+LayoutTests/fast/css/media-query-recovery_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-at-rule-recovery_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-css-allowed-string-characters_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/pseudo-any_t01: Pass, 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/pseudo-valid-unapplied_t01: Pass, RuntimeError # 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/shadow-current-color_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css/style-element-process-crash_t01: Skip # Times out. 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-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/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/transform-origin-parsing_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/url-with-multi-byte-unicode-escape_t01: RuntimeError # co19 issue 14
+LayoutTests/fast/css/webkit-keyframes-errors_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-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/DOMException/XPathException_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/DOMException/dispatch-event-exception_t01: RuntimeError # https://github.com/dart-lang/sdk/issues/25928
+LayoutTests/fast/dom/DOMImplementation/createDocument-namespace-err_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/DOMImplementation/createDocumentType-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: Pass, 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/hittest-relative-to-viewport_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/replace-element_t01: RuntimeError # Please triage this failure.
+LayoutTests/fast/dom/Document/createElementNS-namespace-err_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Document/document-title-get_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/attribute-uppercase_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-hash_t01: RuntimeError # 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: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-pathname_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-port_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-protocol_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-search_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLBaseElement/href-attribute-resolves-with-respect-to-document_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
+LayoutTests/fast/dom/HTMLDialogElement/dialog-scrolled-viewport_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: Skip # Roll 50 failure
+LayoutTests/fast/dom/HTMLDocument/active-element-gets-unforcusable_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLDocument/set-focus-on-valid-element_t01: Skip # Times out. 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/HTMLLabelElement/click-label_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLabelElement/form/test1_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLinkElement/link-beforeload-recursive_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLLinkElement/prefetch-beforeload_t01: Pass, RuntimeError # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLLinkElement/resolve-url-on-insertion_t01: RuntimeError # Issue 18010
+LayoutTests/fast/dom/HTMLObjectElement/beforeload-set-text-crash_t01: Skip # Times out. 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/remove-in-beforeload_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/remove-source_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/script-set-src_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLSelectElement/change-multiple-preserve-selection_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLTemplateElement/custom-element-wrapper-gc_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLTemplateElement/innerHTML_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLTemplateElement/ownerDocumentXHTML_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/database-callback-delivery_t01: Skip # Roll 50 failure
+LayoutTests/fast/dom/MutationObserver/observe-childList_t01: RuntimeError # Issue 18253
+LayoutTests/fast/dom/MutationObserver/removed-out-of-order_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/weak-callback-gc-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Node/fragment-mutation_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-constructor_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/range-created-during-remove-children_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/range-detached-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/SelectorAPI/dumpNodeList-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/StyleSheet/css-medialist-item_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/StyleSheet/detached-parent-rule-without-wrapper_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/StyleSheet/detached-stylesheet-without-wrapper_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/TreeWalker/TreeWalker-basic_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/getMatchedCSSRules-nested-rules_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements-complex_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/attribute-namespaces-get-set_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/blur-contenteditable_t01: Pass, 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/css-shorthand-common-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/custom/document-register-basic_t01: RuntimeError # Dartium JSInterop failure
+LayoutTests/fast/dom/custom/document-register-svg-extends_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/custom/element-names_t01: Pass, 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-importNode-arguments_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/domparser-parsefromstring-mimetype-support_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/focus-contenteditable_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/fragment-activation-focuses-target_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/getElementsByClassName/010_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/getElementsByClassName/011_t01: Pass, 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: Pass, 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/icon-size-property_t01: RuntimeError # https://github.com/dart-lang/sdk/issues/26422
+LayoutTests/fast/dom/icon-size-property_t01: Skip # Roll 50 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/offset-position-writing-modes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/option-properties_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/partial-layout-overlay-scrollbars_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/set-innerHTML_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/shadow/distribution-update-recalcs-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/shadow/event-path_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/shadow/link-in-shadow-tree_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/shadow/olderShadowRoot_t01: RuntimeError # Issue 26729
+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/shadow-content-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/shadow/shadow-disable_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/shadow/shadow-element-inactive_t01: RuntimeError # Issue 25155
+LayoutTests/fast/dom/shadow/shadow-removechild-and-blur-event_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/shadow/shadowdom-for-input-spellcheck_t01: RuntimeError # Issue 26729
+LayoutTests/fast/dom/shadow/shadowdom-for-input-type-change_t01: RuntimeError # Issue 26729
+LayoutTests/fast/dom/shadow/shadowhost-keyframes_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/shadow/shadowroot-clonenode_t01: RuntimeError # Issue 26729
+LayoutTests/fast/dom/shadow/shadowroot-host_t01: RuntimeError # Issue 26729
+LayoutTests/fast/dom/shadow/shadowroot-keyframes_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/vertical-scrollbar-in-rtl-doesnt-fire-onscroll_t01: Pass, RuntimeError
+LayoutTests/fast/dynamic/checkbox-selection-crash_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/recursive-layout_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/encoding/css-charset-dom_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/add-event-without-document_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/change-overflow-on-overflow-change_t01: Skip # Times out. 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/div-focus_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/events/document-elementFromPoint_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/event-attributes-after-exception_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-trace_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/fire-scroll-event-element_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/events/fire-scroll-event_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/events/init-message-event_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/initkeyboardevent-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/input-focus-no-duplicate-events_t01: Pass, 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/label-focus_t01: Pass, 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/nested-event-remove-node-crash_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/events/overflowchanged-event-raf-timing_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/events/scoped/editing-commands_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/events/scroll-during-zoom-change_t01: Skip # Times out. 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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/eventsource/eventsource-attribute-listeners_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/eventsource/eventsource-constructor_t01: RuntimeError # https://github.com/dart-lang/sdk/issues/29814
+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 # https://github.com/dart-lang/sdk/issues/29814
+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/url-null_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/files/xhr-response-blob_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/filesystem/*: Skip # Roll 50 failure
+LayoutTests/fast/filesystem/async-operations_t01: Pass, 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-writer-abort-continue_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/filesystem/filesystem-reference_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-tooLong-input_t01: RuntimeError # https://github.com/dart-lang/co19/issues/48
+LayoutTests/fast/forms/ValidityState-tooLong-textarea_t01: RuntimeError # https://github.com/dart-lang/co19/issues/48
+LayoutTests/fast/forms/autofocus-focus-only-once_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/autofocus-input-css-style-change_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/autofocus-opera-007_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/autofocus-readonly-attribute_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/button-baseline-and-collapsing_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/button/button-disabled-blur_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/checkValidity-001_t01: RuntimeError # Issue 25155
+LayoutTests/fast/forms/clone-input-with-dirty-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datalist/datalist_t01: RuntimeError # https://github.com/dart-lang/sdk/issues/29814
+LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/input-valueasdate-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/ValidityState-typeMismatch-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/input-valueasdate-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/fieldset/fieldset-elements_t01: RuntimeError # Issue 25155
+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/focus_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/form-attribute-nonexistence-form-id_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/form-attribute_t01: RuntimeError # Issue 25155
+LayoutTests/fast/forms/input-appearance-elementFromPoint_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-hit-test-border_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-inputmode_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/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/onchange-change-type_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/parser-associated-form-removal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/paste-into-textarea_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-change-popup-to-listbox-in-event-handler_t01: Skip # Times out. 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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/select-list-box-mouse-focus_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/selection-start-end-readonly_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/selection-wrongtype_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/setCustomValidity-existence_t01: RuntimeError # Issue 25155
+LayoutTests/fast/forms/setrangetext_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/submit-form-attributes_t01: RuntimeError # co19 issue 14
+LayoutTests/fast/forms/textarea-maxlength_t01: RuntimeError # Please triage this failure. Started failing in chrome 55
+LayoutTests/fast/forms/textarea-paste-newline_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textfield-focus-out_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/validationMessage_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/validity-property_t01: RuntimeError # Issue 25155
+LayoutTests/fast/forms/willvalidate_t01: RuntimeError # Issue 25155
+LayoutTests/fast/html/article-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/aside-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-add-child-1_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-add-child-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-add-details-child-1_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-add-details-child-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/figcaption-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/figure-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/footer-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/header-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/hgroup-element_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: RuntimeError # Please triage this failure
+LayoutTests/fast/html/imports/import-events_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/main-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/mark-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/section-element_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/inline-position-top-align_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/layers/normal-flow-hit-test_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/layers/zindex-hit-test_t01: Pass, 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/media-query-list-syntax_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/mediastream/RTCPeerConnection-AddRemoveStream_t01: Skip # Issue 23475
+LayoutTests/fast/mediastream/RTCPeerConnection_t01: 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/cssom-view_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/flipped-blocks-hit-test_t01: Pass, 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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/hit-test-gap-between-pages_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance-images_t01: 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: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance_t10: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/vertical-lr/float-truncation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/vertical-rl/float-truncation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/widows_t01: Pass, 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/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/iframe-with-percentage-height-within-table-with-table-cell-ignore-height_t01: 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/selectors/Utils/tests/Expect/identical_A01_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/selectors/Utils/tests/Expect/throws_A01_t04: RuntimeError # Please triage this failure
+LayoutTests/fast/shapes/parsing/parsing-shape-lengths_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: RuntimeError # Please triage this failure
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t02: 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: Skip # Times out. Please triage this failure
+LayoutTests/fast/speechsynthesis/speech-synthesis-cancel_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/speechsynthesis/speech-synthesis-pause-resume_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/speechsynthesis/speech-synthesis-speak_t01: Skip # Times out. 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/cssom-subpixel-precision_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/sub-pixel/replaced-element-baseline_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/table/anonymous-table-section-removed_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/caption-orthogonal-writing-mode-sizing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/col-width-span-expand_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/hittest-tablecell-bottom-edge_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-bottom-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/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/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-with-content-width-exceeding-max-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text-autosizing/vertical-writing-mode_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/find-spaces_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/rtl-text-wrapping_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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/text/line-break-after-question-mark_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/pre-wrap-trailing-tab_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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/text/sub-pixel/text-scaling-pixel_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/text/sub-pixel/text-scaling-rtl_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/text/sub-pixel/text-scaling-vertical_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/text/sub-pixel/text-scaling-webfont_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/text/text-combine-shrink-to-fit_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/window-find_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/text/zero-width-characters_t01: 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/file-http-base_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/url/file_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/mailto_t01: RuntimeError # https://github.com/dart-lang/sdk/issues/29814
+LayoutTests/fast/url/path_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/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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow-scroll_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/positionForPoint_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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/vertical-inline-block-hittest_t01: Pass, 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/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/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 # Issue 24398
+LayoutTests/fast/xpath/py-dom-xpath/axes_t01: RuntimeError # Dartium JSInterop 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/xsl/default-html_t01: RuntimeError # Please triage this failure
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Pass,RuntimeError # https://github.com/dart-lang/sdk/issues/29814
+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/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/securityPolicy_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/Element/Element.tag_A01_t01: RuntimeError # Test seems invalid in Chrome 55.
+LibTest/html/Element/blur_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/borderEdge_A01_t01: RuntimeError # Issue 16574
+LibTest/html/Element/contentEdge_A01_t01: RuntimeError # Issue 16574
+LibTest/html/Element/dataset_A02_t01: RuntimeError # Please triage this failure
+LibTest/html/Element/focus_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/getAttributeNS_A01_t01: RuntimeError # Issue 16395
+LibTest/html/Element/getNamespacedAttributes_A01_t01: RuntimeError # Issue 16395
+LibTest/html/Element/isTagSupported_A01_t01: RuntimeError # Issue 25155
+LibTest/html/Element/marginEdge_A01_t01: RuntimeError # Issue 16574
+LibTest/html/Element/mouseWheelEvent_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/onMouseWheel_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/onTransitionEnd_A01_t01: Skip # Please triage this failure
+LibTest/html/Element/paddingEdge_A01_t01: RuntimeError # Issue 16574
+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/transitionEndEvent_A01_t01: Skip # 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/overrideMimeType_A01_t01: RuntimeError # 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/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 # Issue 16574
+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/focus_A01_t01: Skip # Times out. 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/leftView_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/IFrameElement/marginEdge_A01_t01: RuntimeError # Issue 16574
+LibTest/html/IFrameElement/offsetTo_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/onMouseWheel_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/IFrameElement/onTransitionEnd_A01_t01: Skip # Please triage this failure
+LibTest/html/IFrameElement/outerHtml_setter_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/paddingEdge_A01_t01: RuntimeError # Issue 16574
+LibTest/html/IFrameElement/querySelector_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/setInnerHtml_A01_t01: 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/animationFrame_A01_t01: Skip # Times out. 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/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: Skip # Roll 50 failure
+LibTest/html/Window/requestFileSystem_A01_t02: Skip # Roll 50 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
+LibTest/typed_data/Uint8ClampedList/buffer_A01_t01: Pass, RuntimeError # Please triage this failure
+WebPlatformTest/DOMEvents/approved/EventObject.after.dispatchEvenr_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_A03_t01: RuntimeError # Please triage this failure
+WebPlatformTest/custom-elements/concepts/type_A05_t01: RuntimeError # Please triage this failure
+WebPlatformTest/custom-elements/concepts/type_A06_t01: RuntimeError # Please triage this failure
+WebPlatformTest/custom-elements/instantiating/createElementNS_A02_t01: RuntimeError # Issue 25155
+WebPlatformTest/custom-elements/instantiating/createElementNS_A03_t01: RuntimeError # Issue 25155
+WebPlatformTest/custom-elements/instantiating/createElementNS_A04_t01: RuntimeError # Please triage this failure
+WebPlatformTest/custom-elements/instantiating/createElement_A02_t01: RuntimeError # Issue 25155
+WebPlatformTest/custom-elements/instantiating/createElement_A03_t01: RuntimeError # Issue 25155
+WebPlatformTest/custom-elements/instantiating/createElement_A04_t01: RuntimeError # Please triage this failure
+WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t01: RuntimeError # Issue 25155
+WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t02: RuntimeError # Issue 25155
+WebPlatformTest/dom/EventTarget/dispatchEvent_A02_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/EventTarget/dispatchEvent_A03_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/dom/events/type_A01_t01: RuntimeError # Please triage this failure
+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_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/Document-getElementsByTagName_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-nodeName_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/Node-replaceChild_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A02_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/setAttribute_A03_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/ranges/Range-comparePoint_t02: 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/innerhtml-on-templates/innerhtml_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/creating-an-element-for-the-token/template-owner-document_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: RuntimeError # 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_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/embedded-content/media-elements/error-codes/error_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/addTextTrack_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/kind_t01: RuntimeError # 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: Skip # Times out. Please triage this failure
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/kind_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/textfieldselection/textfieldselection-setRangeText_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange_t01: Pass, 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/datalistoptions_t01: RuntimeError # https://github.com/dart-lang/sdk/issues/29814
+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/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/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/grouping-content/the-ol-element/ol.start-reflection_t02: RuntimeError # 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/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: Pass,RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/selectors/pseudo-classes/indeterminate_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/tabular-data/the-table-element/table-rows_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/syntax/parsing/Document.getElementsByTagName-foreign_t01: Pass, RuntimeError # Please triage this failure
+WebPlatformTest/html/syntax/parsing/Document.getElementsByTagName-foreign_t02: RuntimeError # Please triage this failure
+WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t01: RuntimeError # 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: Pass, 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/methods/elements-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/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-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-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-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-dispatch/test-003_t01: Skip # Times out
+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-004_t01: RuntimeError # Please triage this failure
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-001_t01: Pass, RuntimeError # Issue 52
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-002_t01: Pass, RuntimeError # Issue 52
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-003_t01: Pass, RuntimeError # Issue 52
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-004_t01: Pass, RuntimeError # Issue 52
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-005_t01: Pass, RuntimeError # Issue 52
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-006_t01: Pass, RuntimeError # Issue 52
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-007_t01: Pass, RuntimeError # Issue 52
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-008_t01: Pass, RuntimeError # Issue 52
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-009_t01: Pass, RuntimeError # Issue 52
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t02: Skip # Times out. Please triage this failure
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t04: RuntimeError, Pass # Please triage this failure
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t05: Skip # Times out. Please triage this failure
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t06: Skip # Times out. Please triage this failure
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-002_t01: Skip # Please triage this failure
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-003_t01: Skip # Times out. 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 # Issue 26729
+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/lower-boundary-encapsulation/test-004_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/test-005_t01: RuntimeError # Issue 25155
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-007_t01: RuntimeError # Issue 25155
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-009_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
+
+[ $compiler == dart2js && $runtime == chrome && $checked]
+LayoutTests/fast/canvas/webgl/framebuffer-object-attachment_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/read-pixels-test_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/css-tables_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-absolutes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-replaced-absolutes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/multicol_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/tables_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/width-shrinks-avoid-floats_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/box-sizing-border-box-dynamic-padding-border-update_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/display-inline-block-scrollbar_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/fixed-width-intrinsic-width-excludes-scrollbars_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/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/HTMLLabelElement/form/test1_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLTableElement/insert-row_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/scroll-event-phase_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/filesystem/file-writer-abort_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/filesystem/file-writer-events_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/flexbox/flexing-overflow-scroll-item_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/flexbox/intrinsic-min-width-applies-with-fixed-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/article-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/aside-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/lists/list-style-position-inside_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/lists/marker-preferred-margins_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/fixed-column-percent-logical-height-orthogonal-writing-mode_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/vertical-lr/image-inside-nested-blocks-with-border_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/replaced/available-height-for-content_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/replaced/computed-image-width-with-percent-height-and-fixed-ancestor-vertical-lr_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/replaced/computed-image-width-with-percent-height-and-fixed-ancestor_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/table/absolute-table-percent-lengths_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/css-table-width-with-border-padding_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/css-table-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/fixed-table-layout-width-change_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/html-table-width-max-width-constrained_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/margins-flipped-text-direction_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/min-max-width-preferred-size_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-width-exceeding-max-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/line-break-after-inline-latin1_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Core/test_parser_t01: RuntimeError # Dartium JSInterop failure
+LayoutTests/fast/xpath/py-dom-xpath/axes_t01: RuntimeError # Dartium JSInterop failure
+LayoutTests/fast/xpath/xpath-result-eventlistener-crash_t01: RuntimeError # Please triage this failure
+LibTest/html/Element/Element.tag_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/Node/ownerDocument_A01_t01: RuntimeError # Issue 18251
+WebPlatformTest/DOMEvents/approved/Propagation.path.target.removed_t01: RuntimeError # Please triage this failure
+WebPlatformTest/custom-elements/instantiating/createElementNS_A05_t01: RuntimeError # Please triage this failure
+WebPlatformTest/custom-elements/instantiating/createElement_A05_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/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-001_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLDialogElement/submit-dialog-close-event_t01: Skip # Roll 50 failure
+LayoutTests/fast/dom/icon-size-property_t01: Skip # Roll 50 failure
+LayoutTests/fast/dom/MutationObserver/database-callback-delivery_t01: Skip # Roll 50 failure
+LayoutTests/fast/filesystem/*: Skip # Roll 50 failure
+LibTest/html/Window/requestFileSystem_A01_t01: Skip # Roll 50 failure
+LibTest/html/Window/requestFileSystem_A01_t02: Skip # Roll 50 failure
+
+[ $compiler == dart2js && $runtime == chrome && $system == macos ]
+Language/Expressions/Function_Invocation/async_invokation_t04: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/canvas-test_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/context-lost-restored_t01: Skip # Times out. Please triage this failure.
+LayoutTests/fast/canvas/webgl/draw-webgl-to-canvas-2d_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/oes-vertex-array-object_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/observe-attributes_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/percent-height-auto-width-form-controls_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance_t04: 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-rounded-boxes_t02: RuntimeError # Please triage this failure
+LayoutTests/fast/text/glyph-reordering_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/line-break-after-question-mark_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/text-combine-shrink-to-fit_t01: RuntimeError # Please triage this failure
+LibTest/async/Timer/Timer.periodic_A01_t01: Skip # Times out. Please triage this failure
+LibTest/isolate/Isolate/spawn_A01_t05: Skip # Times out. Please triage this failure
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-002_t01: Skip # Times out. Please triage this failure
+
+[ $compiler == dart2js && $runtime == chrome && $system == windows ]
+Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t04: Pass, Slow # Issue 25940
+Language/Expressions/Bitwise_Expressions/method_invocation_super_t01: Pass, Slow # Issue 25940
+LayoutTests/fast/css-grid-layout/grid-element-shrink-to-fit_t01: RuntimeError # Please triage this failure
+
+[ $compiler == dart2js && $runtime == chrome && $system != macos ]
+LayoutTests/fast/canvas/webgl/context-lost-restored_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/zero-width-characters-complex-script_t01: RuntimeError # Please triage this failure
+
+[ $compiler == dart2js && $runtime == chrome && $system == linux]
+LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: Pass, RuntimeError # 30174
+LayoutTests/fast/multicol/newmulticol/balance_t04: 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-rounded-boxes_t02: RuntimeError # Please triage this failure
+LayoutTests/fast/text/international/combining-marks-position_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/line-break-after-question-mark_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/regional-indicator-symobls_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/text-combine-shrink-to-fit_t01: RuntimeError # Please triage this failure
+LibTest/math/log_A01_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/index-validation-verifies-too-many-indices_t01: RuntimeError, Pass # Please triage this flake
+LayoutTests/fast/canvas/webgl/premultiplyalpha-test_t01: RuntimeError, Pass # Please triage this flake
+LayoutTests/fast/canvas/canvas-transforms-fillRect-shadow_t01: RuntimeError, Pass # Please triage this flake
+LayoutTests/fast/canvas/canvas-ellipse_t01: RuntimeError, Pass # Please triage this flake
+LayoutTests/fast/canvas/canvas-before-css_t01: RuntimeError, Pass # Please triage this flake
+LayoutTests/fast/canvas/webgl/triangle_t01: RuntimeError, Pass # Please triage this flake
+LayoutTests/fast/canvas/canvas-scale-fillRect-shadow_t01: RuntimeError, Pass # Please triage this flake
+
+[ $compiler == dart2js && $runtime == drt ]
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t02: Pass # Fails on _all_ other platforms. Please triage
+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/repeat/parsing-background-repeat_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/alpha_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-arc-negative-radius_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-as-image-incremental-repaint_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-as-image_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-css-crazy_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-empty-image-pattern_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-lineDash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-putImageData_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/crash-set-font_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/draw-custom-focus-ring_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-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-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/pseudo-element-events_t01: Skip # Times out.
+LayoutTests/fast/css-generated-content/pseudo-transition-event_t01: Skip # Times out.
+LayoutTests/fast/css-generated-content/pseudo-transition_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-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-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/justify-self-cell_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/place-cell-by-index_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/MarqueeLayoutTest_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/aspect-ratio-inheritance_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/aspect-ratio-parsing-tests_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/auto-min-size_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/checked-pseudo-selector_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/counters/complex-before_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/css3-nth-tokens-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/deprecated-flexbox-auto-min-size_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-face-unicode-range-load_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/parsing-css-allowed-string-characters_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-object-position_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-target-indirect-sibling-001_t01: Skip # Times out.
+LayoutTests/fast/css/pseudo-target-indirect-sibling-002_t01: Skip # Times out.
+LayoutTests/fast/css/sticky/parsing-position-sticky_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/sticky/remove-inline-sticky-crash_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-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/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/dom/52776_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/DOMException/XPathException_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/DOMImplementation/createDocument-namespace-err_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/replace-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Document/createElementNS-namespace-err_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/attribute-uppercase_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/set-href-attribute-hash_t01: RuntimeError # 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: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-pathname_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-port_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-protocol_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-search_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLDialogElement/dialog-autofocus_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLDialogElement/dialog-scrolled-viewport_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/HTMLDocument/set-focus-on-valid-element_t01: Skip # Times out.
+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/HTMLHtmlElement/duplicate-html-element-crash_t01: Skip # Times out.
+LayoutTests/fast/dom/HTMLImageElement/parse-src_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLabelElement/form/test1_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLinkElement/link-beforeload-recursive_t01: Skip # Times out.
+LayoutTests/fast/dom/HTMLLinkElement/resolve-url-on-insertion_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLObjectElement/beforeload-set-text-crash_t01: Skip # Times out.
+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-onbeforeload_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/defer-onbeforeload_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/isURLAttribute_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/remove-in-beforeload_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLSelectElement/remove-element-from-within-focus-handler-crash_t01: 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/custom-element-wrapper-gc_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLTemplateElement/innerHTML_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLTemplateElement/ownerDocumentXHTML_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/observe-childList_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/weak-callback-gc-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Node/fragment-mutation_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-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-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/SelectorAPI/dumpNodeList-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/StyleSheet/css-medialist-item_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/StyleSheet/detached-stylesheet-without-wrapper_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/TreeWalker/TreeWalker-basic_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/window-resize-contents_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/window-scroll-arguments_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/anchor-without-content_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/custom/document-register-basic_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/custom/document-register-svg-extends_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/custom/element-names_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-importNode-arguments_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/domparser-parsefromstring-mimetype-support_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/getElementsByClassName/011_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/getElementsByClassName/dumpNodeList_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/navigatorcontentutils/is-protocol-handler-registered_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/navigatorcontentutils/unregister-protocol-handler_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/object-plugin-hides-properties_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/partial-layout-overlay-scrollbars_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/set-innerHTML_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/shadow/event-path_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/dynamic/ancestor-to-absolute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/add-event-without-document_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/change-overflow-on-overflow-change_t01: Skip # Times out.
+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-trace_t01: RuntimeError # 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/overflowchanged-event-raf-timing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/scroll-event-does-not-bubble_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-parts-slice-test_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/files/blob-slice-test_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/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-writer-abort-continue_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/autofocus-focus-only-once_t01: Skip # Times out.
+LayoutTests/fast/forms/date/input-valueasdate-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/input-valueasdate-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/file/file-input-capture_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-appearance-elementFromPoint_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/listbox-selection-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/option-strip-unicode-spaces_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/parser-associated-form-removal_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/setrangetext_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-add-child-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/imports/import-element-removed-flag_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/imports/import-events_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/unknown-tag_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/out-of-flow-objects-and-whitespace-after-empty-inline_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/loader/about-blank-hash-change_t01: Skip # Times out.
+LayoutTests/fast/loader/about-blank-hash-kept_t01: Skip # Times out.
+LayoutTests/fast/loader/hashchange-event-properties_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/loader/onhashchange-attribute-listeners_t01: Skip # Times out.
+LayoutTests/fast/loader/scroll-position-restored-on-back_t01: Skip # Times out. 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_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/media/media-query-list-syntax_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/break-properties_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/cssom-view_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-float_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/vertical-rl/float-truncation_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/replaced/container-width-zero_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/replaced/preferred-widths_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/shapes/parsing/parsing-shape-lengths_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: RuntimeError # Please triage this failure
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t02: 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/speechsynthesis/speech-synthesis-boundary-events_t01: Skip # Times out.
+LayoutTests/fast/speechsynthesis/speech-synthesis-cancel_t01: Skip # Times out.
+LayoutTests/fast/speechsynthesis/speech-synthesis-pause-resume_t01: Skip # Times out.
+LayoutTests/fast/speechsynthesis/speech-synthesis-speak_t01: Skip # Times out.
+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/cssom-subpixel-precision_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/svg/getbbox_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-invalid_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/caption-orthogonal-writing-mode-sizing_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/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: RuntimeError # Please triage this failure
+LayoutTests/fast/table/min-width-css-inline-table_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/min-width-html-block-table_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/min-width-html-inline-table_t01: 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/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-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-with-content-width-exceeding-max-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text-autosizing/vertical-writing-mode_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/find-spaces_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/thai-offsetForPosition-inside-character_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/line-break-after-question-mark_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/offsetForPosition-cluster-at-zero_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/transforms/hit-test-large-scale_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_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/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/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/display-mutation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/table-hit-test_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/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 # Please triage this 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/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 # Please triage this 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/xsl/default-html_t01: RuntimeError # Please triage this failure
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: RuntimeError # Please triage this failure
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: RuntimeError # Please triage this failure
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: RuntimeError # Please triage this failure
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: 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/securityPolicy_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/getAttributeNS_A01_t01: 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/marginEdge_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/Element/mouseWheelEvent_A01_t01: Skip # Times out.
+LibTest/html/Element/onMouseWheel_A01_t01: Skip # Times out.
+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/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.
+LibTest/html/HttpRequest/request_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/HttpRequest/responseText_A01_t02: Skip # Times out.
+LibTest/html/HttpRequest/responseType_A01_t01: 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.
+LibTest/html/HttpRequestUpload/onLoadEnd_A01_t01: Skip # Times out.
+LibTest/html/HttpRequestUpload/onLoadStart_A01_t01: Skip # Times out.
+LibTest/html/HttpRequestUpload/onLoad_A01_t01: Skip # Times out.
+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/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: Skip # Times out.
+LibTest/html/IFrameElement/marginEdge_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/offsetTo_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/onMouseWheel_A01_t01: Skip # Times out.
+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/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_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.
+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.
+WebPlatformTest/custom-elements/concepts/type_A03_t01: RuntimeError # Please triage this failure
+WebPlatformTest/custom-elements/concepts/type_A05_t01: RuntimeError # Please triage this failure
+WebPlatformTest/custom-elements/concepts/type_A06_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/EventTarget/dispatchEvent_A02_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/events/type_A01_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/DOMImplementation-createDocument_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/Document-adoptNode_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/Document-getElementsByTagName_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-nodeName_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/Node-replaceChild_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/Node-textContent_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/setAttribute_A03_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/ranges/Range-comparePoint_t02: 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/innerhtml-on-templates/innerhtml_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/creating-an-element-for-the-token/template-owner-document_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.
+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/documents/dom-tree-accessors/nameditem_t03: 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/embedded-content/media-elements/error-codes/error_t01: Skip # Times out.
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/addTextTrack_t01: RuntimeError # 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: Skip # Times out.
+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, Pass # 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/textfieldselection/textfieldselection-setSelectionRange_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-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/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-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/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/enabled_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/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: RuntimeError # 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/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/methods/elements-001_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-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-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-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-004_t01: 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-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/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/lower-boundary-encapsulation/test-004_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/test-009_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: Skip # Times out. Please triage this failure
+WebPlatformTest/webstorage/event_local_newvalue_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/webstorage/event_local_oldvalue_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/webstorage/event_local_storagearea_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/webstorage/event_local_url_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/webstorage/event_session_key_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/webstorage/event_session_newvalue_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/webstorage/event_session_oldvalue_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/webstorage/event_session_storagearea_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/webstorage/event_session_url_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/canvas-currentTransform_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/array-bounds-clamping_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/attrib-location-length-limits_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/bad-arguments-test_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/buffer-bind-test_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/canvas-2d-webgl-texture_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/canvas-resize-crash_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/canvas-test_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/canvas-zero-size_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/compressed-tex-image_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/context-destroyed-crash_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/context-lost-restored_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/context-lost_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/copy-tex-image-and-sub-image-2d_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/draw-arrays-out-of-bounds_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/draw-elements-out-of-bounds_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/drawingbuffer-test_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/error-reporting_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/framebuffer-object-attachment_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/framebuffer-test_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/functions-returning-strings_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/get-active-test_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/gl-bind-attrib-location-test_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/gl-enable-enum-test_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/gl-enum-tests_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/gl-get-calls_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/gl-getshadersource_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/gl-getstring_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/gl-object-get-calls_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/gl-pixelstorei_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/gl-teximage_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/gl-uniformmatrix4fv_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/gl-vertex-attrib-zero-issues_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/gl-vertex-attrib_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/gl-vertexattribpointer_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/glsl-conformance_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/index-validation-copies-indices_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/index-validation-crash-with-buffer-sub-data_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/index-validation-verifies-too-many-indices_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/index-validation-with-resized-buffer_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/index-validation_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/invalid-UTF-16_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/invalid-passed-params_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/is-object_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/null-object-behaviour_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/null-uniform-location_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/object-deletion-behaviour_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/oes-element-index-uint_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/oes-vertex-array-object_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/point-size_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/premultiplyalpha-test_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/program-test_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/read-pixels-pack-alignment_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/read-pixels-test_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/renderbuffer-initialization_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/renderer-and-vendor-strings_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/shader-precision-format_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgb565_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba4444_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba5551_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgb565_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba4444_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba5551_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-and-uniform-binding-bugs_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-image-webgl_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-sub-image-2d-bad-args_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-sub-image-2d_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/tex-sub-image-cube-maps_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/texImage2DImageDataTest_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/texImageTest_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/texture-active-bind_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/texture-bindings-uneffected-on-resize_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/texture-color-profile_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/texture-complete_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/texture-npot_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/triangle_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/uniform-location-length-limits_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/viewport-unchanged-upon-resize_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/webgl-composite-modes-repaint_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/webgl-composite-modes_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/webgl-exceptions_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/webgl-layer-update_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/webgl-specific_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/webgl-texture-binding-preserved_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/webgl-unprefixed-context-id_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/canvas/webgl/webgl-viewport-parameters-preserved_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/css-intrinsic-dimensions/multicol_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/css/css-escaped-identifier_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/css/font-shorthand-from-longhands_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/css/getComputedStyle/computed-style-border-image_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/css/parsing-css-nonascii_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/css/parsing-object-position_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/css/selector-text-escape_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/css/unicode-bidi-computed-value_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/css/url-with-multi-byte-unicode-escape_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/dom/DOMException/dispatch-event-exception_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/dom/HTMLSelectElement/selected-index-preserved-when-option-text-changes_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements-complex_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/dom/anchor-without-content_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/dom/offset-position-writing-modes_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/dom/shadow/content-pseudo-element-css-text_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/dom/shadow/host-context-pseudo-class-css-text_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/dom/shadow/host-pseudo-class-css-text_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/dynamic/ancestor-to-absolute_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/events/fire-scroll-event_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/forms/ValidityState-tooLong-input_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/forms/ValidityState-tooLong-textarea_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/forms/formnovalidate-attribute_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/forms/select-max-length_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/forms/submit-form-attributes_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/innerHTML/innerHTML-uri-resolution_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/multicol/flipped-blocks-hit-test_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/text/font-ligature-letter-spacing_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow-scroll_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow_t01: Pass, RuntimeError # Issue 29634
+WebPlatformTest/html/semantics/forms/attributes-common-to-form-controls/formAction_document_address_t01: Pass, RuntimeError # Issue 29634
+WebPlatformTest/html/semantics/forms/textfieldselection/selection_t01: Pass, RuntimeError # Issue 29634
+WebPlatformTest/html/semantics/forms/the-input-element/url_t01: Pass, RuntimeError # Issue 29634
+WebPlatformTest/html/semantics/tabular-data/the-tr-element/rowIndex_t01: Pass, RuntimeError # Issue 29634
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-001_t01: Pass, RuntimeError # Issue 29634
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-002_t01: Pass, RuntimeError # Issue 29634
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-003_t01: Pass, RuntimeError # Issue 29634
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-004_t01: Pass, RuntimeError # Issue 29634
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-005_t01: Pass, RuntimeError # Issue 29634
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-006_t01: Pass, RuntimeError # Issue 29634
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-007_t01: Pass, RuntimeError # Issue 29634
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-008_t01: Pass, RuntimeError # Issue 29634
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-009_t01: Pass, RuntimeError # Issue 29634
+
+[ $compiler == dart2js && $runtime == drt && $minified && $csp ]
+LayoutTests/fast/dom/HTMLScriptElement/script-for-attribute-unexpected-execution_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/script-reexecution_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLTemplateElement/inertContents_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/create-contextual-fragment-script-unmark-already-started_t01: RuntimeError # Please triage this failure
+
+[ $compiler == dart2js && $runtime == drt && ! $minified && ! $csp]
+LayoutTests/fast/dom/HTMLScriptElement/remove-source_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/event-listener-html-non-html-confusion_t01: RuntimeError # Please triage this failure
+
+[ $compiler == dart2js && $runtime == drt && $fast_startup && $checked ]
+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/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-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/implicit-rows-auto-resolution_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-resolution-grid-item_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/css-tables_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-absolutes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-replaced-absolutes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/multicol_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/tables_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/width-shrinks-avoid-floats_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/box-sizing-border-box-dynamic-padding-border-update_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/display-inline-block-scrollbar_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/fixed-width-intrinsic-width-excludes-scrollbars_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/focus-display-block-inline_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/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/HTMLTableElement/insert-row_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/window-resize_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/filesystem/file-writer-abort_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/filesystem/file-writer-events_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/flexbox/flexing-overflow-scroll-item_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/flexbox/intrinsic-min-width-applies-with-fixed-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/article-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/aside-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/inline/inline-with-empty-inline-children_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/lists/marker-preferred-margins_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/fixed-column-percent-logical-height-orthogonal-writing-mode_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/vertical-lr/float-truncation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/vertical-lr/image-inside-nested-blocks-with-border_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/replaced/available-height-for-content_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/absolute-table-percent-lengths_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/css-table-max-height_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/css-table-width-with-border-padding_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/css-table-width_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-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/text/line-break-after-inline-latin1_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/text-combine-shrink-to-fit_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/xpath-result-eventlistener-crash_t01: RuntimeError # Please triage this failure
+LibTest/html/Node/ownerDocument_A01_t01: RuntimeError # Please triage this failure
+WebPlatformTest/DOMEvents/approved/Propagation.path.target.removed_t01: RuntimeError # Please triage this failure
+WebPlatformTest/custom-elements/instantiating/createElementNS_A05_t01: RuntimeError # Please triage this failure
+WebPlatformTest/custom-elements/instantiating/createElement_A05_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/DOMImplementation-createDocumentType_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/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-001_t01: RuntimeError # Please triage this failure
+
+[ $compiler == dart2js && $runtime == drt && ! $checked ]
+LayoutTests/fast/xpath/invalid-resolver_t01: RuntimeError # Please triage this failure
+
+[ $compiler == dart2js && $runtime == ff ]
+Language/Expressions/Postfix_Expressions/property_decrement_t02: Skip # Times out. Please triage this failure
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t01: Pass, RuntimeError # Issue 26615
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t04: Pass, RuntimeError # Issue 26615
+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/animation/request-animation-frame-cancel2_t01: Skip # Times out and fails. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-prefix_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-timestamps-advance_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-within-callback_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/backgrounds/background-position-parsing-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/backgrounds/background-repeat-computed-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/backgrounds/background-shorthand-with-backgroundSize-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/backgrounds/mask-box-image-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/backgrounds/repeat/parsing-background-repeat_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/borders/border-color-visited_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/borders/border-image-width-numbers-computed-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/borders/border-radius-child_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/borders/border-width-percent_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/box-sizing/css-table-with-box-sizing_t01: Pass, 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/DrawImageSinglePixelStretch_t01: Pass, 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-blend-solid_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-blending-text_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-composite-canvas_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-composite-image_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-composite-text-alpha_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-currentColor_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-currentTransform_t01: RuntimeError # Feature is not implemented.
+LayoutTests/fast/canvas/canvas-ellipse-zero-lineto_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-empty-image-pattern_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-fill-zeroSizeGradient_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-fillRect-zeroSizeGradient_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-fillText-zeroSizeGradient_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-font-ex-units-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-frameless-document-text_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-rounding_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-imageSmoothingEnabled-repaint_t01: Skip # Times out. 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-resize-after-paint_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/canvas-scale-drawImage-shadow_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-scale-fillPath-shadow_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-scale-fillRect-shadow_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-set-properties-with-non-invertible-ctm_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-stroke-zeroSizeGradient_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-strokePath-alpha-shadow_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-strokePath-gradient-shadow_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-strokeRect-alpha-shadow_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-strokeRect-gradient-shadow_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-strokeRect-zeroSizeGradient_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-strokeText-zeroSizeGradient_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-toDataURL-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-transforms-fillRect-shadow_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/draw-custom-focus-ring_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/getPutImageDataPairTest_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/gradient-addColorStop-with-invalid-color_t01: RuntimeError # Issue 28983
+LayoutTests/fast/canvas/rgba-parsing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/bad-arguments-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/context-attributes-alpha-depth-stencil-antialias-t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/context-destroyed-crash_t01: Pass, RuntimeError # Issue 26898
+LayoutTests/fast/canvas/webgl/context-lost-restored_t01: Pass, RuntimeError # Issue 26898
+LayoutTests/fast/canvas/webgl/context-lost_t01: Pass, RuntimeError # Issue 26898
+LayoutTests/fast/canvas/webgl/error-reporting_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/get-active-test_t01: RuntimeError # Issue 28593
+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-object-get-calls_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/null-object-behaviour_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/object-deletion-behaviour_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/renderer-and-vendor-strings_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: Skip # Times out.
+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/texture-transparent-pixels-initialized_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/webgl-depth-texture_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/webgl-large-texture_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-generated-content/details-before-after-content_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-generated-content/malformed-url_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css-generated-content/pseudo-animation-before-onload_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css-generated-content/pseudo-animation-display_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css-generated-content/pseudo-animation_t01: Pass, 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/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/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/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_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/css-tables_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/intrinsic-sized-absolutes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-replaced-absolutes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/multicol_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/tables_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/width-property-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/aspect-ratio-inheritance_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/aspect-ratio-parsing-tests_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/auto-min-size_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/background-clip-text_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/background-parser-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/background-serialize_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/border-image-null-image-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/border-image-style-length_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/border-radius-property-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/border-shorthand-initialize-longhands_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/border-start-end_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/border-width-large_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/checked-pseudo-selector_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/child-selector-implicit-tbody_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-06_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/counters/complex-before_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/counters/counter-cssText_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/counters/counter-reset-subtree-insert-crash_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/cursor-parsing-image-set_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/cursor-parsing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/deprecated-flexbox-auto-min-size_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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-face-insert-link_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-family-trailing-bracket-gunk_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-property-priority_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-shorthand-from-longhands_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-shorthand-mix-inherit_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/fontface-properties_t01: RuntimeError # Uses FontFace class, not defined for this browser.
+LayoutTests/fast/css/fontfaceset-download-error_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/computed-style-border-image_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/computed-style-font_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/computed-style-properties_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/font-family-fallback-reset_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-border-style-shorthand_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-borderRadius-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-column-rule_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-length-unit_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-zIndex-auto_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-zoom-and-background-size_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-border_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-clip_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-column-rule_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-webkit-margin-collapse_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-webkit-text-stroke_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/image-set-setting_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/inherit-initial-shorthand-values_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/inherited-properties-rare-text_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/insertRule-font-face_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/insertRule-media_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalid-hex-color_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalid-predefined-color_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalidation/clears-invalidation-whole-tree_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalidation/detach-reattach-shadow_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalidation/dynamic-selector-list-pseudo_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/legacy-opacity-styles_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/link-disabled-attr-parser_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/margin-start-end_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/max-device-aspect-ratio_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/media-query-recovery_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/modify-ua-rules-from-javascript_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/nested-at-rules_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/overflow-property_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/padding-start-end_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-at-rule-recovery_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-css-allowed-string-characters_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/parsing-webkit-font-smoothing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/position-absolute-float_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-any_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-invalid-001_t01: Pass, RuntimeError # Passes on ff 35. Please triage this failure
+LayoutTests/fast/css/pseudo-invalid-novalidate-001_t01: Pass, RuntimeError # Passes on ff 35. Please triage this failure
+LayoutTests/fast/css/pseudo-required-optional-004_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-required-optional-005_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-required-optional-unapplied_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/pseudo-valid-dynamic_t01: Pass, RuntimeError # Passes on ff 35. Please triage this failure
+LayoutTests/fast/css/pseudo-valid-unapplied_t01: RuntimeError # 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/recalc-optgroup-inherit_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/shorthand-setProperty-important_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/sibling-selectors_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/style-element-process-crash_t01: Skip # Times out. 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/test-setting-canvas-color_t01: Pass, RuntimeError # co19 issue 64 (depends on the FF version)
+LayoutTests/fast/css/text-align-webkit-match-parent-parse_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/text-align-webkit-match-parent_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/unicode-bidi-computed-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/url-with-multi-byte-unicode-escape_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/vertical-align-length-copy-bug_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/webkit-color-adjust_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/webkit-keyframes-crash_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/css/zoom-property-parsing_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-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/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/DOMImplementation/createDocumentType-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/CaretRangeFromPoint/replace-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Document/createElement-valid-names_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Document/createElementNS-namespace-err_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Document/document-title-get_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/attribute-uppercase_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/fixed-position-offset-parent_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/getBoundingClientRect-getClientRects-relative-to-viewport_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/getClientRects_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/id-in-insert-hr_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/offsetTop-table-cell_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/scrollWidth_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-hash_t01: RuntimeError # 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: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-pathname_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-port_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-protocol_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-search_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLBaseElement/href-attribute-resolves-with-respect-to-document_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLButtonElement/change-type_t01: Pass, 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/set-focus-on-valid-element_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-before-text-node_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-child-node_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-text-form-control_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-text_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-children_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-remove-add-children_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-text-form-control-child_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-text-form-control_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-value-change_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-empty-string_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-false-string_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-invalid-string_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-missing-ancestor-false_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-missing-ancestor-true_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-ancestor-missing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-false_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-true_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-true-string_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-false_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-inherit-parent-false_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-inherit-parent-true_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-inner-outer-optimization_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-invalid-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-true_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-value-caseinsensitive_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/spellcheck_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/translate_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/image-natural-width-height_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLImageElement/parse-src_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLInputElement/input-hidden-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLInputElement/input-image-alt-text_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLabelElement/click-label_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLabelElement/form/test1_t01: RuntimeError # 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/link-onerror-stylesheet-with-existent-and-non-existent-import_t01: Pass, RuntimeError # 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/HTMLObjectElement/beforeload-set-text-crash_t01: Skip # Times out. Issue 24455
+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/HTMLOutputElement/htmloutputelement-validity_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLProgressElement/set-progress-properties_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/remove-in-beforeload_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/remove-source_t01: RuntimeError # Issue 18128
+LayoutTests/fast/dom/HTMLScriptElement/script-set-src_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLSelectElement/change-multiple-preserve-selection_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLStyleElement/style-onerror-with-existent-and-non-existent-import_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLTableElement/cellpadding-attribute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLTemplateElement/custom-element-wrapper-gc_t01: RuntimeError # Issue 18250
+LayoutTests/fast/dom/HTMLTemplateElement/cycles-in-shadow_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLTemplateElement/innerHTML_t01: RuntimeError # Issue 18249
+LayoutTests/fast/dom/HTMLTemplateElement/ownerDocumentXHTML_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLTemplateElement/xhtml-parsing-and-serialization_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/added-out-of-order_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/database-callback-delivery_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/observe-attributes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/observe-childList_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/removed-out-of-order_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/weak-callback-gc-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Node/fragment-mutation_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/getClientRects-character_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-constructor_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/range-created-during-remove-children_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/range-detached-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-assertion_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/SelectorAPI/caseTagX_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList_t01: RuntimeError # Please triage this failure
+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-parent-rule-without-wrapper_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/StyleSheet/removed-media-rule-deleted-parent-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/StyleSheet/removed-stylesheet-rule-deleted-parent-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/TreeWalker/TreeWalker-basic_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/getMatchedCSSRules-nested-rules_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/getMatchedCSSRules-null-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/getMatchedCSSRules-parent-stylesheets_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/getMatchedCSSRules-with-invalid-pseudo-elements_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements-complex_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements_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-screen-properties_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/window-scroll-arguments_t01: RuntimeError # Issue 22564
+LayoutTests/fast/dom/anchor-origin_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/anchor-without-content_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/attribute-namespaces-get-set_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/background-shorthand-csstext_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/blur-contenteditable_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/boolean-attribute-reflection_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/containerNode_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/css-delete-doc_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/css-mediarule-functions_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/css-rule-functions_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/css-selectorText_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/css-shortHands_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/css-shorthand-common-value_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/invalid-type-extension-crash_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-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-importNode-arguments_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/dom-parse-serialize-display_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/dom-parse-serialize-xmldecl_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/dom-parse-serialize_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/domparser-parsefromstring-mimetype-support_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/focus-contenteditable_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/fragment-activation-focuses-target_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/getElementsByClassName/010_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/getElementsByClassName/011_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/importNode-unsupported-node-type_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/insertBefore-refChild-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/javascript-backslash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/length-attribute-mapping_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/location-hash_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/navigator-userAgent_t01: 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/offset-position-writing-modes_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/partial-layout-overlay-scrollbars_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/remove-body-during-body-replacement_t01: Skip # Times out. 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 # Issue 28983
+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 # Issue 28983
+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 # Issue 28983
+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/subtree-modified-attributes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/vertical-scrollbar-when-dir-change_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dynamic/checkbox-selection-crash_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/recursive-layout_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/encoding/css-charset-dom_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/add-event-without-document_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/change-overflow-on-overflow-change_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/events/clipboard-clearData_t01: Skip # Times out. Issue 24455
+LayoutTests/fast/events/clipboard-dataTransferItemList_t01: Skip # Times out. Issue 24455
+LayoutTests/fast/events/div-focus_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/events/document-elementFromPoint_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/event-attributes-after-exception_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/event-creation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/event-fire-order_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-trace_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/fire-scroll-event_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/form-onchange_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/init-message-event_t01: RuntimeError # Issue 28983
+LayoutTests/fast/events/initkeyboardevent-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/input-focus-no-duplicate-events_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/events/invalid-001_t01: Pass, RuntimeError # Passes on ff 35. Please triage this failure
+LayoutTests/fast/events/invalid-002_t01: Pass, RuntimeError # Passes on ff 35. 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/invalid-005_t01: Pass, RuntimeError # Passes on ff 35. Please triage this failure
+LayoutTests/fast/events/label-focus_t01: Pass, 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/nested-event-remove-node-crash_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/events/overflowchanged-event-raf-timing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/scoped/editing-commands_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/scroll-event-does-not-bubble_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/selectstart-on-selectall_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/selectstart-prevent-selectall_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/tabindex-removal-from-focused-element_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/eventsource/eventsource-attribute-listeners_t01: RuntimeError # Issue 28983
+LayoutTests/fast/eventsource/eventsource-constructor_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/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/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/box-size-integer-overflow_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/11423_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/8250_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-customError_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-patternMismatch_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-tooLong-input_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-tooLong-textarea_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-typeMismatch-email_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-typeMismatch-url_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-valueMissing-003_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/autocomplete_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/autofocus-focus-only-once_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/autofocus-input-css-style-change_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/autofocus-opera-004_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/autofocus-opera-005_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/autofocus-opera-007_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/autofocus-readonly-attribute_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/button-baseline-and-collapsing_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/button/button-disabled-blur_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/checkValidity-001_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/checkValidity-002_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/checkValidity-004_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/checkValidity-handler-updates-dom_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/clone-input-with-dirty-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datalist/datalist-child-validation_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-onblur-setvalue-onfocusremoved_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/ValidityState-rangeOverflow-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/ValidityState-rangeUnderflow-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/ValidityState-stepMismatch-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/ValidityState-typeMismatch-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/date-pseudo-classes_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/datetimelocal-multiple-fields/datetimelocal-multiple-fields-change-layout-by-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/ValidityState-rangeOverflow-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/ValidityState-rangeUnderflow-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/ValidityState-stepMismatch-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/ValidityState-typeMismatch-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/datetimelocal-input-type_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/datetimelocal-pseudo-classes_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/delete-text-with-invisible-br_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/fieldset/fieldset-disabled_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/fieldset/fieldset-elements_t01: RuntimeError # Please triage this 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/focus_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/form-attribute-nonexistence-form-id_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/form-attribute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/form-dirname-attribute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/formmethod-attribute-button-html_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/formmethod-attribute-input-2_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/incremental-dom-property_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-appearance-elementFromPoint_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-appearance-maxlength_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-changing-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-file-set-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-inputmode_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-maxlength-unsupported_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-text-paste-maxlength_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_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-widths_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/listbox-select-all_t01: 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/min-content-form-controls_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/missing-action_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/multiple-selected-options-innerHTML_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/onchange-change-type_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/parser-associated-form-removal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/paste-into-textarea_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/paste-multiline-text-input_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-change-popup-to-listbox-in-event-handler_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/select-change-popup-to-listbox-roundtrip_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/select-list-box-mouse-focus_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/select-max-length_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/select-namedItem_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/selection-direction_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/selection-start-end-readonly_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/selection-wrongtype_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/setCustomValidity-existence_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/submit-form-with-dirname-attribute-with-ancestor-dir-attribute_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/submit-form-with-dirname-attribute_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textarea-maxlength_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textarea-no-scroll-on-blur_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textarea-paste-newline_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textarea-set-defaultvalue-after-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textarea-trailing-newline_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textfield-clone_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textfield-focus-out_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/validationMessage_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/willvalidate_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/article-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/aside-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-add-child-1_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-add-child-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-add-details-child-1_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-add-details-child-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-click-controls_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/figcaption-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/figure-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/footer-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/header-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/hgroup-element_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/main-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/mark-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/section-element_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/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/javascript-url_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: RuntimeError # Please triage this failure
+LayoutTests/fast/loader/about-blank-hash-kept_t01: RuntimeError # 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: Skip # Times out. Please triage this failure
+LayoutTests/fast/loader/scroll-position-restored-on-reload-at-load-event_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/masking/parsing-clip-path-iri_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/invalid-lengths_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-serialization_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/media/mq-append-delete_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/mediastream/RTCPeerConnection-AddRemoveStream_t01: Skip # Issue 23475
+LayoutTests/fast/mediastream/RTCPeerConnection_t01: Skip # Issue 23475
+LayoutTests/fast/multicol/balance-unbreakable_t01: 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/column-width-zero_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/cssom-view_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/flipped-blocks-hit-test_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/float-truncation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/gap-non-negative_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/hit-test-gap-between-pages_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/image-inside-nested-blocks-with-border_t01: RuntimeError # Uses -webkit-* style properties
+LayoutTests/fast/multicol/inherit-column-values_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/initial-column-values_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/inline-getclientrects_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance-images_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance-maxheight_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance_t02: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance_t04: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance_t05: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance_t06: 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: RuntimeError # 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-lr/gap-non-negative_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/vertical-lr/image-inside-nested-blocks-with-border_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/vertical-rl/break-properties_t01: RuntimeError # co19 issue 63
+LayoutTests/fast/multicol/vertical-rl/float-truncation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/vertical-rl/gap-non-negative_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/widows_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/zeroColumnCount_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/overflow/height-during-simplified-layout_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/overflow/overflow-rtl-vertical-origin_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/overflow/scrollbar-restored_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/parser/block-nesting-cap_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/stray-param_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/parser/strict-img-in-map_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/replaced/container-width-zero_t01: 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/selectors/specificity-overflow_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-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:  Skip # Times out. Please triage this failure
+LayoutTests/fast/speechsynthesis/speech-synthesis-cancel_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/speechsynthesis/speech-synthesis-pause-resume_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/speechsynthesis/speech-synthesis-speak_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/speechsynthesis/speech-synthesis-utterance-uses-voice_t01: Skip # Times out. 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/computedstylemargin_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/sub-pixel/cssom-subpixel-precision_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/svg/getbbox_t01: Pass, 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/anonymous-table-section-removed_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/border-changes_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-width_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/min-width-css-block-table_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/min-width-css-inline-table_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/min-width-html-block-table_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/min-width-html-inline-table_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/padding-height-and-override-height_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/table-cell-offset-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/table-size-integer-overflow_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/td-bordercolor-attribute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/find-kana_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/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/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/pre-wrap-trailing-tab_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/text/window-find_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/zero-width-characters-complex-script_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/zero-width-characters_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/mailto_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/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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/block-formatting-context_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/display-mutation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow-scroll_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/percentage-padding_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/positionForPoint_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/table-hit-test_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/vertical-inline-block-hittest_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-abort_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: Pass, RuntimeError # Issue 23479. Unsuppress once bots are all updated.
+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/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 # Dartium JSInterop 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/xsl/default-html_t01: RuntimeError # Please triage this failure
+LibTest/async/Stream/Stream.periodic_A01_t01: Pass, RuntimeError # Please triage this failure
+LibTest/async/Timer/Timer.periodic_A01_t01: Pass, RuntimeError # Please triage this failure
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t03: Pass,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/RegExp/Pattern_semantics/splitQueryString_A02_t01: Fail # co19 issue #90
+LibTest/core/double/roundToDouble_A01_t01: Pass, RuntimeError # Passes on ff 35. Please triage this failure
+LibTest/core/double/round_A01_t01: Pass, RuntimeError # Passes on ff 35. 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/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/blur_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/borderEdge_A01_t01: RuntimeError # Issue 16574
+LibTest/html/Element/contentEdge_A01_t01: RuntimeError # Issue 16574
+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/focus_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/getAttributeNS_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/Element/getNamespacedAttributes_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/Element/isTagSupported_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/Element/leftView_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/Element/marginEdge_A01_t01: RuntimeError # Issue 16574
+LibTest/html/Element/mouseOverEvent_A01_t01: RuntimeError, Pass # Issue 30068
+LibTest/html/Element/mouseWheelEvent_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/onMouseEnter_A01_t01: RuntimeError, Pass # Please triage this failure
+LibTest/html/Element/onMouseOver_A01_t01: RuntimeError, Pass # Please triage this failure
+LibTest/html/Element/onMouseWheel_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/paddingEdge_A01_t01: RuntimeError # Issue 16574
+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/translate_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/overrideMimeType_A01_t01: RuntimeError # 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/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/onAbort_A01_t01: Skip # Times out. 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 # Issue 16574
+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/focus_A01_t01: Skip # Times out. 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/leftView_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/marginEdge_A01_t01: RuntimeError # Issue 16574
+LibTest/html/IFrameElement/offsetTo_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/onMouseWheel_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/IFrameElement/outerHtml_setter_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/paddingEdge_A01_t01: RuntimeError # Issue 16574
+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/spellcheck_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/tagName_A01_t03: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/translate_A01_t01: 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/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_A04_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/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/math/log_A01_t01: Fail # 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/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_A02_t01: RuntimeError # 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_t01: Pass, RuntimeError # Issue 28983
+WebPlatformTest/dom/nodes/Document-getElementsByTagName_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-nodeName_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/Node-replaceChild_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A02_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_A10_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/attributes/setAttribute_A03_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/ranges/Range-comparePoint_t02: 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/templates-copy-document-owner_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-the-in-head-insertion-mode/generating-of-implied-end-tags_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/template-element/node-document-changes_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01 : RuntimeError # In Firefox, setting innerHTML on a Frameset element does nothing.
+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: RuntimeError # 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.getElementsByName-newelements_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_t07: RuntimeError # Please triage this failure
+WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t02: RuntimeError # Please triage this failure
+WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t05: Pass,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/embedded-content/media-elements/error-codes/error_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/addTextTrack_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/kind_t01: RuntimeError # 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: Skip # Times out. Please triage this failure
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/kind_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/textfieldselection/selection_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setRangeText_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange_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/datalistoptions_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/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/range_t02: 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/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/grouping-content/the-ol-element/ol.start-reflection_t02: RuntimeError # 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/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/dir_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: Pass, RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/selectors/pseudo-classes/indeterminate_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/tabular-data/the-table-element/table-rows_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/syntax/parsing/Document.getElementsByTagName-foreign_t02: RuntimeError # Please triage this failure
+WebPlatformTest/html/syntax/parsing/math-parse_t03: RuntimeError # Issue 22564
+WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t01: RuntimeError # 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
+
+[ $compiler == dart2js && $runtime == ff && ! $checked]
+LayoutTests/fast/xpath/invalid-resolver_t01: RuntimeError # Please triage this failure
+
+[ $compiler == dart2js && $runtime == ff && $checked]
+LayoutTests/fast/css-intrinsic-dimensions/width-shrinks-avoid-floats_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/framebuffer-object-attachment_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/oes-vertex-array-object_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/read-pixels-test_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items_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/implicit-rows-auto-resolution_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/box-sizing-border-box-dynamic-padding-border-update_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/display-inline-block-scrollbar_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/fixed-width-intrinsic-width-excludes-scrollbars_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/flexbox/flexing-overflow-scroll-item_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLTableElement/insert-row_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/flexbox/intrinsic-min-width-applies-with-fixed-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/lists/marker-preferred-margins_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/fixed-column-percent-logical-height-orthogonal-writing-mode_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/replaced/available-height-for-content_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/absolute-table-percent-lengths_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/css-table-width_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/text/line-break-after-inline-latin1_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/xpath-result-eventlistener-crash_t01: RuntimeError # Please triage this failure
+LibTest/html/Node/ownerDocument_A01_t01: RuntimeError # Please triage this failure
+WebPlatformTest/DOMEvents/approved/Propagation.path.target.removed_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/DOMImplementation-createDocumentType_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
+
+[ $compiler == dart2js && $runtime == ff && $system == windows ]
+Language/Classes/Abstract_Instance_Members/override_no_named_parameters_t06: Pass, Slow # Issue 25940
+Language/Classes/Constructors/Factories/return_type_t03: Pass, Slow # Issue 25940
+Language/Classes/Constructors/Factories/return_type_t05: Pass, Slow # Issue 25940
+Language/Classes/Constructors/Factories/return_wrong_type_t02: Pass, Slow # Issue 25940
+LayoutTests/fast/canvas/webgl/draw-webgl-to-canvas-2d_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/drawingbuffer-test_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/device-aspect-ratio_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-face-multiple-ranges-for-unicode-range_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/media-rule-screenDepthPerComponent_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/submit-form-attributes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/media/color-does-not-include-alpha_t01: RuntimeError # Issue 31161
+LayoutTests/fast/media/media-query-list_t01: RuntimeError # Please triage this failure
+
+[ $compiler == dart2js && $runtime == ff && $system == linux]
+LayoutTests/fast/canvas/webgl/*: Skip # Issue 26725
+LayoutTests/fast/canvas/webgl/oes-element-index-uint_t01: Skip # Times out always
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video_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/texture-complete_t01: Skip # Times out sometimes
+LayoutTests/fast/canvas/webgl/texture-npot_t01: Skip # Times out sometimes
+LayoutTests/fast/forms/submit-form-attributes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/whitespace/nowrap-line-break-after-white-space_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Core/test_parser_t01: RuntimeError # Dartium JSInterop failure
+LayoutTests/fast/xpath/py-dom-xpath/abbreviations_t01: RuntimeError # Dartium JSInterop failure
+
+[ $compiler == dart2js && $runtime == safari ]
+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/animation/request-animation-frame-cancel2_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-cancel_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-timestamps-advance_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-timestamps_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-within-callback_t01: Skip # Times out. 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.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-arc-negative-radius_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-as-image-incremental-repaint_t01: Skip # Times out. 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-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-zero-lineto_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-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-input-sequence_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-valid-image_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/getPutImageDataPairTest_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/setWidthResetAfterForcedRender_t01: Skip # Times out. 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-lost_t01: Skip
+LayoutTests/fast/canvas/webgl/context-lost-restored_t01: Skip # Issue 28640
+LayoutTests/fast/canvas/webgl/glsl-conformance_t01: Skip # Times out 1 out of 20.
+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: Skip # Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: Skip # Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video_t01: Skip
+LayoutTests/fast/canvas/webgl/texture-transparent-pixels-initialized_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/uniform-location_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/webgl-depth-texture_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/webgl-large-texture_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: Skip # Issue 29010
+LayoutTests/fast/css-generated-content/malformed-url_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-generated-content/pseudo-animation-before-onload_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css-generated-content/pseudo-animation_t01: Pass, 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/MarqueeLayoutTest_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/aspect-ratio-inheritance_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/aspect-ratio-parsing-tests_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/checked-pseudo-selector_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-01_t01: Pass, RuntimeError # Fails on 7.1. Please triage this failure
+LayoutTests/fast/css/content/content-quotes-05_t01: Pass, RuntimeError # Fails on 7.1. Please triage this failure
+LayoutTests/fast/css/counters/counter-cssText_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/css-escaped-identifier_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/css3-nth-tokens-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/cssText-shorthand_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/csstext-of-content-string_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/deprecated-flexbox-auto-min-size_t01: Pass,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: Pass, RuntimeError # Fails 5 out of 10.
+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-monospace_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-property-priority_t01: RuntimeError # Fails 10 out of 10.
+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-border-image_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/computed-style-font_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/computed-style-with-zoom_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/counterIncrement-without-counter_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-clip_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-columns_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/important-js-override_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/inherit-initial-shorthand-values_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/inherited-properties-rare-text_t01: RuntimeError # Fails 10 out of 10.
+LayoutTests/fast/css/invalid-not-with-simple-selector-sequence_t01: RuntimeError # Fails 10 out of 10.
+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-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/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-css-nonascii_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-css-nth-child_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-font-variant-ligatures_t01: RuntimeError # Fails 10 out of 10.
+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: Pass, RuntimeError # Fails 4 out of 10.
+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/selector-text-escape_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/css/shorthand-setProperty-important_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/sticky/parsing-position-sticky_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/string-quote-binary_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/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/transform-origin-parsing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/unicode-bidi-computed-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/webkit-keyframes-errors_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/createElementNS-namespace-err_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/getClientRects_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/offsetTop-table-cell_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: RuntimeError # 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/set-focus-on-valid-element_t01: Skip
+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/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 # Fails 10 out of 10.
+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/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/innerHTML_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLTemplateElement/ownerDocumentXHTML_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-created-during-remove-children_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-detached-exceptions_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/range-exceptions_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/range-expand_t01: RuntimeError # Please triage this failure
+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/remove-twice-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/surroundContents-for-detached-node_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList_t01: RuntimeError # Please triage this failure
+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/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-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-double-xmlns_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/anchor-without-content_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/attribute-namespaces-get-set_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/background-shorthand-csstext_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/css-selectorText_t01: RuntimeError # Fails 10 out of 10.
+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-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-reuse_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/domparser-parsefromstring-mimetype-support_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/fragment-activation-focuses-target_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/location-hash_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/mutation-event-remove-inserted-node_t01: 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/object-plugin-hides-properties_t01: Pass, 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: Pass, RuntimeError # Issue 53
+LayoutTests/fast/dom/partial-layout-overlay-scrollbars_t01: Pass, RuntimeError # Fails 8 out of 10.
+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/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/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/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/overflowchanged-event-raf-timing_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/events/scoped/editing-commands_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/scroll-event-does-not-bubble_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/tabindex-removal-from-focused-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/exclusions/parsing/parsing-wrap-flow_t01: RuntimeError # Please triage this failure
+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-done-reading-abort_t01: Pass, 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/repaint-scrollbar_t01: Pass, RuntimeError # Fails 2 out of 10.
+LayoutTests/fast/flexbox/repaint-scrollbar_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-customError_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: Pass, RuntimeError # Fails 7 out of 10.
+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/datalist/datalist-child-validation_t01: RuntimeError # Fails 10 out of 10.
+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: Pass, RuntimeError # Fails 6 out of 10.
+LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/ValidityState-rangeOverflow-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/ValidityState-rangeUnderflow-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/ValidityState-stepMismatch-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/ValidityState-typeMismatch-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/date-input-type_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/date-pseudo-classes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/date-setrangetext_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/ValidityState-rangeOverflow-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/ValidityState-rangeUnderflow-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/ValidityState-stepMismatch-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/ValidityState-typeMismatch-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/datetimelocal-input-type_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/datetimelocal-pseudo-classes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/datetimelocal-setrangetext_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/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-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/select-max-length_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/forms/menulist-disabled-selected-option_t01: Pass, RuntimeError # Fails on 7.1. Please triage this failure
+LayoutTests/fast/forms/menulist-selection-reset_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/menulist-submit-without-selection_t01: Pass, RuntimeError # Fails on 7.1. 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/parser-associated-form-removal_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: Pass, RuntimeError # Fails on 7.1. Please triage this failure
+LayoutTests/fast/forms/select-set-length-with-mutation-remove_t01: RuntimeError
+LayoutTests/fast/forms/select-set-length-with-mutation-reparent_t01: RuntimeError
+LayoutTests/fast/forms/selection-wrongtype_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/setrangetext_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textarea-maxlength_t01: RuntimeError # Please triage this failure
+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/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-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-uri-resolution_t01: Pass, RuntimeError # Issue 29634
+LayoutTests/fast/innerHTML/innerHTML-svg-write_t01: RuntimeError # Issue 25941
+LayoutTests/fast/innerHTML/javascript-url_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: Pass, 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_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/balance-unbreakable_t01: 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/newmulticol/balance-images_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/orphans-relayout_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/vertical-lr/float-truncation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/vertical-rl/float-truncation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/overflow/child-100percent-height-inside-fixed-container-with-overflow-auto_t01: Pass, 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 # Fails 10 out of 10.
+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/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/iframe-with-percentage-height-within-table-with-table-cell-ignore-height_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-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_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 # Fails on 6.2. 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: Skip # Times out. Please triage this failure
+LayoutTests/fast/speechsynthesis/speech-synthesis-cancel_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/speechsynthesis/speech-synthesis-pause-resume_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/speechsynthesis/speech-synthesis-speak_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/speechsynthesis/speech-synthesis-utterance-uses-voice_t01: Skip # Times out. 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/cssom-subpixel-precision_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/sub-pixel/shadows-computed-style_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/anonymous-table-section-removed_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/caption-orthogonal-writing-mode-sizing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/col-width-span-expand_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/fixed-table-layout-width-change_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/hittest-tablecell-bottom-edge_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-bottom-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/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-with-content-width-exceeding-max-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text-autosizing/vertical-writing-mode_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 # Fails on 6.2. Please triage this failure
+LayoutTests/fast/text/font-ligatures-linebreak-word_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/text/font-ligatures-linebreak_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/text/glyph-reordering_t01: Pass, RuntimeError # Fails on 7.1. 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/rtl-text-wrapping_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/international/thai-offsetForPosition-inside-character_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/line-break-after-question-mark_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/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/positionForPoint_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-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/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/xsl/default-html_t01: RuntimeError # Please triage this failure
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_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: Pass, RuntimeError # Issue 53
+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: Pass, RuntimeError # Issue 28187
+LibTest/html/Element/isContentEditable_A02_t01: Pass, RuntimeError # Issue 28187
+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 # Times out. Please triage this failure
+LibTest/html/Element/onMouseWheel_A01_t01: Skip # Times out. Please triage this failure
+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/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/getClientRects_A01_t02: 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/isContentEditable_A01_t01: RuntimeError, Pass # Fails 19 out of 20.
+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/offsetTo_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/onMouseWheel_A01_t01: Skip # Times out. 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/animationFrame_A01_t01: Skip # Times out. 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/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: Skip # Times out. 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-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-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/definitions/template-contents-owner-test-001_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-the-in-head-insertion-mode/generating-of-implied-end-tags_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/template-element/node-document-changes_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: Pass, RuntimeError # Fails on 7.1. 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: Skip # Times out. 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-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/grouping-content/the-ol-element/ol.start-reflection_t02: 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: Pass,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/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: RuntimeError # 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
+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
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-get_t01: RuntimeError # Roll 50 failure
+LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement_t01: Pass, RuntimeError # Issue 29632
+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
+Language/Functions/Formal_Parameters/scope_t01: Skip # Times out. Please triage this failure
+Language/Statements/Local_Variable_Declaration/syntax_t18: Skip # Times out. Please triage this failure
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t01: Pass, RuntimeError # Issue 26615
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t04: Pass, RuntimeError # Issue 26615
+Language/Types/Function_Types/subtype_no_args_t03: Skip # Times out. Please triage this failure
+Language/Types/Interface_Types/subtype_t37: Skip # Times out. Please triage this failure
+Language/Variables/implicit_setter_void_t07: Skip # Times out. Please triage this failure
+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/animation/request-animation-frame-cancel2_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-cancel_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-prefix_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-timestamps-advance_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-timestamps_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/animation/request-animation-frame-within-callback_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/backgrounds/background-position-parsing-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/backgrounds/background-repeat-computed-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/backgrounds/background-shorthand-with-backgroundSize-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/backgrounds/mask-box-image-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/backgrounds/multiple-backgrounds-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-color-visited_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/borders/border-width-percent_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/DrawImageSinglePixelStretch_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/alpha_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-arc-negative-radius_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-as-image-incremental-repaint_t01: Skip # Times out. 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-alpha_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-composite-text-alpha_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-currentColor_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-currentTransform_t01: RuntimeError # Feature is not implemented
+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-font-ex-units-crash_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-negative-source_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-getImageData-rounding_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-imageSmoothingEnabled-repaint_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/canvas-imageSmoothingEnabled_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-input-sequence_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: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/canvas-lose-restore-max-int-size_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/canvas-modify-emptyPath_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-pattern-behaviour_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-pattern-modify_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-pattern-transform_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-putImageData_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-resetTransform_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-resize-after-paint_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/canvas-save-restore-with-path_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-save-restore_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-scale-drawImage-shadow_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-scale-shadowBlur_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-scale-strokePath-shadow_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-set-properties-with-non-invertible-ctm_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-setTransform_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-strokePath-alpha-shadow_t01: Skip # Issue 23508
+LayoutTests/fast/canvas/canvas-to-canvas_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-toDataURL-crash_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-transforms-fillRect-shadow_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/draw-custom-focus-ring_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/drawImage-with-bad-canvas_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/drawImage-with-negative-source-destination_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/drawImage-with-valid-image_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/getPutImageDataPairTest_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/pattern-with-transform_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/pointInPath_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/rgba-parsing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/set-colors_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/setWidthResetAfterForcedRender_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: Pass, 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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/bad-arguments-test_t01: Pass, 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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/canvas-test_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/canvas-zero-size_t01: Pass, 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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/draw-arrays-out-of-bounds_t01: Pass, 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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/error-reporting_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/functions-returning-strings_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/get-active-test_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/gl-bind-attrib-location-test_t01: Pass, 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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/gl-pixelstorei_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/gl-teximage_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/gl-uniformmatrix4fv_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/gl-vertex-attrib-zero-issues_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/glsl-conformance_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour_t01: Pass, 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-verifies-too-many-indices_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/index-validation-with-resized-buffer_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/index-validation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/invalid-passed-params_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/null-object-behaviour_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/null-uniform-location_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/oes-element-index-uint_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/point-size_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/premultiplyalpha-test_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/program-test_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/read-pixels-pack-alignment_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/read-pixels-test_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/renderer-and-vendor-strings_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-rgb565_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba4444_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba5551_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-and-uniform-binding-bugs_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/tex-image-webgl_t01: Pass, 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/texImage2DImageDataTest_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/texImageTest_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/texture-active-bind_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/texture-bindings-uneffected-on-resize_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/texture-color-profile_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/texture-complete_t01: Pass, 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: Skip # Times out. Please triage this failure
+LayoutTests/fast/canvas/webgl/triangle_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/uniform-location-length-limits_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/uniform-location_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/viewport-unchanged-upon-resize_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/webgl-composite-modes-repaint_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/webgl-composite-modes_t01: Pass, 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: Skip # Times out. 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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/webgl/webgl-unprefixed-context-id_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/winding-enumeration_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-generated-content/block-after_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-generated-content/malformed-url_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css-generated-content/pseudo-animation-before-onload_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css-generated-content/pseudo-animation-display_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css-generated-content/pseudo-animation_t01: Pass, 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/css-tables_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/intrinsic-sized-absolutes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-replaced-absolutes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/multicol_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/tables_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/width-property-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css-intrinsic-dimensions/width-shrinks-avoid-floats_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/aspect-ratio-inheritance_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/aspect-ratio-parsing-tests_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/auto-min-size_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/background-clip-text_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-null-image-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/border-image-style-length_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/border-radius-property-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/border-shorthand-initialize-longhands_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/border-start-end_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/border-width-large_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/box-sizing-backwards-compat-prefix_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/checked-pseudo-selector_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/child-selector-implicit-tbody_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/comment-before-charset-external_t01: Pass, 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-03_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/content/content-quotes-06_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/counters/complex-before_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/counters/counter-cssText_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/css-escaped-identifier_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/css-keyframe-style-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/css-keyframe-unexpected-end_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/css-properties-case-insensitive_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/css-selector-text_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/css3-nth-tokens-script_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css/css3-nth-tokens-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/cssom-remove-shorthand-property_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/csstext-of-content-string_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/cursor-parsing-image-set_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/cursor-parsing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/deprecated-flex-box-zero-width-intrinsic-max-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/deprecated-flexbox-auto-min-size_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/dynamic-class-pseudo-elements_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/first-child-display-change-inverse_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-face-cache-bug_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-face-insert-link_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-face-multiple-ranges-for-unicode-range_t01: 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-family-initial-shorthand_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-family-trailing-bracket-gunk_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-shorthand-from-longhands_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-shorthand-mix-inherit_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/fontface-properties_t01: RuntimeError # Uses FontFace class, not defined for this browser
+LayoutTests/fast/css/fontfaceset-download-error_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/fontfaceset-events_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/fontfaceset-loadingdone_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/computed-style-border-image_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/computed-style-font_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/computed-style-properties_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/computed-style-select-overflow_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/font-family-fallback-reset_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-border-style-shorthand_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-borderRadius-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-column-rule_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-height_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-length-unit_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-outline-offset_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-zIndex-auto_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-zoom-and-background-size_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-border_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-clip_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-column-rule_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-columns_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-webkit-margin-collapse_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/getPropertyValue-webkit-text-stroke_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/image-set-setting_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/implicit-attach-marking_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css/important-js-override_t01:  RuntimeError # Please triage this failure
+LayoutTests/fast/css/inherit-initial-shorthand-values_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/inherited-properties-rare-text_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/insertRule-font-face_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/insertRule-media_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalid-import-rule-insertion_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalid-predefined-color_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalid-rule-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalidation/clears-invalidation-whole-tree_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalidation/detach-reattach-shadow_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalidation/detach-reattach_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalidation/dynamic-selector-list-pseudo_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalidation/invalidation-set-with-adjacent-combinators_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-id_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalidation/targeted-class-shadow-combinator_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalidation/targeted-class-type-selectors_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/invalidation/toggle-style-inside-shadow-root_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/legacy-opacity-styles_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/link-disabled-attr-parser_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/list-item-text-align_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/margin-start-end_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/max-device-aspect-ratio_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/media-query-recovery_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/modify-ua-rules-from-javascript_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/nested-at-rules_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/nested-rule-parent-sheet_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/overflow-property_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/padding-no-renderer_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/padding-start-end_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-css-allowed-string-characters_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-css-escapes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-css-nonascii_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-css-nth-child_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-font-variant-ligatures_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-text-rendering_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-unexpected-eof_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-webkit-font-smoothing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/percent-min-width-img-src-change_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css/percent-width-img-src-change_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css/positioned-overflow-scroll_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-any_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-default-001_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-default-002_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-default-003_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-in-range-invalid-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-in-range_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-out-of-range_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-required-optional-004_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-required-optional-005_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-required-optional-unapplied_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/pseudo-valid-004_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudo-valid-unapplied_t01: RuntimeError # 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/recalc-optgroup-inherit_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/remove-attribute-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/remove-class-name_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/resize-value-compared_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/selector-text-escape_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/shadow-current-color_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/css/sheet-collection-link_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/shorthand-priority_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/sibling-selectors_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/space-before-charset-external_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/sticky/parsing-position-sticky_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/string-quote-binary_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/stylesheet-enable-first-alternate-link_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/stylesheet-enable-first-alternate-on-load-link_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/stylesheet-enable-first-alternate-on-load-sheet_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/stylesheet-enable-second-alternate-link_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/text-align-initial_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/text-align-webkit-match-parent-parse_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/text-align-webkit-match-parent_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/unicode-bidi-computed-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/url-with-multi-byte-unicode-escape_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/webkit-color-adjust_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/webkit-keyframes-crash_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/css/zoom-property-parsing_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/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/CaretRangeFromPoint/replace-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Document/createElement-valid-names_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Document/createElementNS-namespace-err_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/attribute-uppercase_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/class-name_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/client-rect-list-argument_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/id-in-insert-hr_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/offsetTop-table-cell_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/scrollWidth_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Element/setAttributeNS-namespace-err_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/anchor-ismap-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/get-href-attribute-port_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-hash_t01: RuntimeError # 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: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-pathname_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-protocol_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-search_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLBaseElement/href-attribute-resolves-with-respect-to-document_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLBaseElement/multiple-base-elements_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 # Issue 24396
+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/activeElement_t01: Pass, 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/HTMLElement/attr-dir-auto-change-before-text-node_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-child-node_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-text-form-control_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-text_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-children_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-remove-add-children_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-text-form-control-child_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-text-form-control_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-dir-value-change_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-empty-string_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-false-string_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-invalid-string_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-missing-ancestor-false_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-missing-ancestor-true_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-ancestor-missing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-false_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-true_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/attr-true-string_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/insertAdjacentHTML-errors_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-false_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-inherit-parent-false_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-inherit-parent-true_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-inner-outer-optimization_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-invalid-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-true_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/set-value-caseinsensitive_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/spellcheck_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLElement/translate_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLFontElement/size-attribute_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/image-loading-gc_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLImageElement/image-natural-width-height_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLImageElement/image-src-absolute-url_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLImageElement/parse-src_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLInputElement/input-hidden-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLInputElement/input-image-alt-text_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLInputElement/input-size-attribute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLInputElement/size-attribute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLabelElement/focus-label_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLabelElement/label-control_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/link-onerror-stylesheet-with-existent-and-non-existent-import_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLinkElement/link-onerror-stylesheet-with-non-existent-import_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLinkElement/link-onerror_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-before-page-load_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-stylesheet-with-import_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLinkElement/link-onload2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLLinkElement/onload-completion-test_t01: RuntimeError # 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/HTMLObjectElement/beforeload-set-text-crash_t01: Skip # Times out. 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/HTMLOutputElement/htmloutputelement-reset-event_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement-validity_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLProgressElement/set-progress-properties_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/async-false-inside-async-false-load_t01: Pass, 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: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/defer-inline-script_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/defer-onbeforeload_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/defer-script-invalid-url_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/dont-load-unknown-type_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/isURLAttribute_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/remove-in-beforeload_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/remove-source_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/script-async-attr_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/script-for-attribute-unexpected-execution_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/script-load-events_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLScriptElement/script-set-src_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLSelectElement/change-multiple-preserve-selection_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLSelectElement/named-options_t01: 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/HTMLStyleElement/programmatically-add-style-with-onerror-handler_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLStyleElement/programmatically-add-style-with-onload-handler_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLStyleElement/style-onerror-with-existent-and-non-existent-import_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLStyleElement/style-onerror_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLStyleElement/style-onload-before-page-load_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLStyleElement/style-onload2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/HTMLStyleElement/style-onload_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/HTMLTableElement/cellpadding-attribute_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/database-callback-delivery_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/observe-attributes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/observe-characterdata_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/removed-out-of-order_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/weak-callback-gc-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Node/contains-method_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Node/fragment-mutation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Node/initial-values_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/NodeIterator/NodeIterator-basic_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/NodeList/nodelist-moved-to-fragment-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/NodeList/nodelist-reachable_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/13000_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/31684_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/bug-19527_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/getClientRects-character_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-created-during-remove-children_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/range-delete-contents-event-fire-crash_t01: Skip # Times out. 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-extractContents_t01: Skip # Times out. 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/range-processing-instructions_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Selection/getRangeAt_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/SelectorAPI/caseID_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/SelectorAPI/caseTagX_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList_t01: RuntimeError # Please triage this failure
+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-parent-rule-without-wrapper_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/StyleSheet/detached-shadow-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/StyleSheet/detached-style-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/StyleSheet/detached-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/StyleSheet/empty-shadow-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/StyleSheet/removed-media-rule-deleted-parent-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/StyleSheet/removed-stylesheet-rule-deleted-parent-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Text/next-element-sibling_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Text/normalize-crash-in-spell-checker_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-null-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/getMatchedCSSRules-parent-stylesheets_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/getMatchedCSSRules-with-invalid-pseudo-elements_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements-complex_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Window/invalid-protocol_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-namespaces_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/XMLSerializer-element-ns-no-reemit_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/allowed-children_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/anchor-origin_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/background-shorthand-csstext_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/blur-contenteditable_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/characterdata-api-arguments_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/click-method-on-html-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/client-width-height-quirks_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/clone-node-z-index_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/containerNode_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/createElement_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/css-delete-doc_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/css-insert-import-rule-twice_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/css-insert-import-rule_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/dom/css-mediarule-functions_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/css-selectorText_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/css-set-property-exception_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/css-shorthand-common-value_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/invalid-type-extension-crash_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-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/delete-contents_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/document-importNode-arguments_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/document-set-title-mutations_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/dom-parse-serialize-display_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/dom-parse-serialize-xmldecl_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/dom-parse-serialize_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/domparser-parsefromstring-mimetype-support_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/focus-contenteditable_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/gc-image-element-2_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/gc-image-element_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/getElementById-consistency2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/getElementById-consistency3_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/getElementById-consistency4_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/getElementById-consistency5_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/getElementById-consistency_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/getElementsByClassName/010_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/getElementsByClassName/011_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/getelementsbyname-invalidation-cache_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/icon-size-property_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/image-object_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/importNode-unsupported-node-type_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/importNodeHTML_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/importNodeXML_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/insert-span-into-long-text-bug-28245_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/length-attribute-mapping_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/location-hash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/navigator-userAgent_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/navigator-vendorSub_t01: 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/noscript-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/offset-position-writing-modes_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/partial-layout-overlay-scrollbars_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/remove-body-during-body-replacement_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/set-innerHTML_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/setAttribute-using-initial-input-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/setAttributeNS-namespace-errors_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_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: Skip # Issue 26737. Makes next test time out.
+LayoutTests/fast/dom/shadow/shadow-element-inactive_t01: Skip # Times out. 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/subtree-modified-attributes_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dom/text-control-crash-on-select_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/vertical-scrollbar-when-dir-change_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dynamic/checkbox-selection-crash_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-allowed-parents_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/dynamic/recursive-layout_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/encoding/css-charset-dom_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/add-event-without-document_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/change-overflow-on-overflow-change_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/events/clipboard-clearData_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/events/clipboard-dataTransferItemList-remove_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/div-focus_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/document-elementFromPoint_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/event-attributes-after-exception_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/event-creation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/event-fire-order_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-listener-list-mutation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/event-listener-sharing_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: RuntimeError # Please triage this failure
+LayoutTests/fast/events/form-onchange_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/init-message-event_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/initkeyboardevent-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/input-focus-no-duplicate-events_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/label-focus_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/mutation-during-append-child_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/mutation-during-insert-before_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/nested-event-remove-node-crash_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/events/overflowchanged-event-raf-timing_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/events/scoped/editing-commands_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/scroll-during-zoom-change_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/events/scroll-event-does-not-bubble_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/selectstart-prevent-selectall_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/submit-reset-nested-bubble_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/tabindex-removal-from-focused-element_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/events/wheelevent-constructor_t01: RuntimeError # Issue 23437
+LayoutTests/fast/eventsource/eventsource-attribute-listeners_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/eventsource/eventsource-constructor_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-done-reading-abort_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/files/file-reader-methods-illegal-arguments_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/files/read-blob-as-array-buffer_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/child-flexing_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/flexbox/flexing-overflow-scroll-item_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/flexbox/intrinsic-min-width-applies-with-fixed-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/flexbox/repaint-scrollbar_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/flexbox/vertical-box-form-controls_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/11423_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/4628409_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/8250_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-customError_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-patternMismatch-unsupported_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-patternMismatch_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-stepMismatch_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-tooLong-input_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-tooLong-textarea_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-typeMismatch-email_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-typeMismatch-url_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-valueMissing-001_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-valueMissing-003_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/ValidityState-valueMissing-004_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/autocomplete_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/autofocus-focus-only-once_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/autofocus-opera-007_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/autofocus-readonly-attribute_t01: Pass, 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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/checkValidity-001_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/checkValidity-002_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/checkValidity-handler-updates-dom_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/checkbox-click-indeterminate_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/checkbox-default-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/clone-input-with-dirty-value_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/cursor-position_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datalist/datalist-child-validation_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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/ValidityState-rangeOverflow-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/ValidityState-rangeUnderflow-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/ValidityState-stepMismatch-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/ValidityState-typeMismatch-date_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/date-input-type_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/date/date-pseudo-classes_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/ValidityState-rangeOverflow-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/ValidityState-rangeUnderflow-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/ValidityState-stepMismatch-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/ValidityState-typeMismatch-datetimelocal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/datetimelocal-input-type_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/datetimelocal/datetimelocal-pseudo-classes_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 # Please triage this failure
+LayoutTests/fast/forms/delete-text-with-invisible-br_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/enctype-attribute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/fieldset/fieldset-disabled_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/fieldset/fieldset-elements_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/fieldset/fieldset-name_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/fieldset/fieldset-type_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/fieldset/validation-in-fieldset_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/file/file-input-capture_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/file/file-setrangetext_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/focus_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/form-attribute-nonexistence-form-id_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/form-attribute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/form-dirname-attribute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/formmethod-attribute-test_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/image/image-error-event-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/incremental-dom-property_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-appearance-elementFromPoint_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-appearance-maxlength_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-changing-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-file-set-value_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-inputmode_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-maxlength-unsupported_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-maxlength_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-selection-hidden_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-setvalue-selection_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-text-paste-maxlength_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/input-type-change-focusout_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-valueasnumber-unsupported_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/input-widths_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/listbox-select-all_t01: 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: Pass, 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/method-attribute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/multiple-selected-options-innerHTML_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/onchange-change-type_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/option-value-trim-html-spaces_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/output-reset-assertion-failed_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/parser-associated-form-removal_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/paste-into-textarea_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/paste-multiline-text-input_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/plaintext-mode-1_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/radio-checkbox-restore-indeterminate_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/search-popup-crasher_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/select-change-popup-to-listbox-in-event-handler_t01: Skip # Times out. 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/select-list-box-mouse-focus_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/select-max-length_t01: Skip # Times out. Please triage this failure
+LayoutTests/fast/forms/select-namedItem_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/select-reset-multiple-selections-4-single-selection_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/select-set-length-with-mutation-reorder_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/setCustomValidity-existence_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/submit-form-attributes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/submit-form-with-dirname-attribute_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textarea-maxlength_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textarea-no-scroll-on-blur_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textarea-paste-newline_t01: Skip # Times out. 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/forms/textarea-trailing-newline_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textarea-wrap-attribute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/textfield-clone_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/validationMessage_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/validity-property_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/willvalidate_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/article-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/aside-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-add-child-1_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-add-child-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-add-details-child-1_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-add-details-child-2_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-click-controls_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/details-mouse-click_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/disable-style-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/draggable_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/figcaption-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/figure-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/footer-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/header-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/hgroup-element_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/main-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/mark-element_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/range-point-in-range-for-different-documents_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/html/section-element_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/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-case_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/innerHTML/innerHTML-custom-tag_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/innerHTML/innerHTML-svg-read_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/innerHTML/innerHTML-svg-write_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/innerHTML/innerHTML-uri-resolution_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/layers/zindex-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: RuntimeError # Please triage this failure
+LayoutTests/fast/loader/about-blank-hash-kept_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/loader/hashchange-event-properties_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/loader/local-css-allowed-in-strict-mode_t01: Pass, 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-iri_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/media-query-list-syntax_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/media/media-query-serialization_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/media/mq-append-delete_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/media/mq-js-update-media_t01: 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/cssom-view_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/flipped-blocks-hit-test_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/float-truncation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/gap-non-negative_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/hit-test-gap-between-pages_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/image-inside-nested-blocks-with-border_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/inherit-column-values_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/initial-column-values_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/inline-getclientrects_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance-images_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance-maxheight_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance_t04: 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/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-lr/gap-non-negative_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/vertical-lr/image-inside-nested-blocks-with-border_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/vertical-rl/gap-non-negative_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/widows_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/zeroColumnCount_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/overflow/height-during-simplified-layout_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/overflow/overflow-rtl-vertical-origin_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/block-nesting-cap_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/residual-style-close-across-n-blocks_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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-table-cell-ignore-height_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/replaced/preferred-widths_t01: 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/parse-rp_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/selectors/querySelector-in-range-crash_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/selectors/querySelector-scope_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/selectors/specificity-overflow_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: RuntimeError # Please triage this failure
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t02: 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/cssom-subpixel-precision_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/sub-pixel/shadows-computed-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/sub-pixel/table-cells-have-stable-width_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/sub-pixel/table-rows-have-stable-height_t01: RuntimeError # Please triage this failure
+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/anonymous-table-section-removed_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/border-changes_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/hittest-tablecell-bottom-edge_t01: Pass, 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-bottom-edge_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/table/hittest-tablecell-with-borders-right-edge_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: RuntimeError # Please triage this failure
+LayoutTests/fast/table/min-width-css-inline-table_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/min-width-html-block-table_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/min-width-html-inline-table_t01: 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/resize-table-binding-cell_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/table/resize-table-cell_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/table/td-bordercolor-attribute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text-autosizing/vertical-writing-mode_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/container-align-with-inlines_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/find-backwards_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/find-case-folding_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/find-hidden-text_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/find-kana_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/find-quotes_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: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/text/font-ligatures-linebreak_t01: Pass, 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/rtl-text-wrapping_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/international/thai-offsetForPosition-inside-character_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/line-break-after-question-mark_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/pre-wrap-trailing-tab_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/remove-zero-length-run_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/selection-exceptions_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/text/window-find_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/zero-width-characters-complex-script_t01: 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/transforms/scrollIntoView-transformed_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/transforms/topmost-becomes-bottomost-for-scrolling_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/transforms/transform-inside-overflow-scroll_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/mailto_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/url/trivial-segments_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/url/trivial_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/auto-sizing-orthogonal-flows_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/block-formatting-context_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/display-mutation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow-scroll_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/percentage-margins-absolute-replaced_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/percentage-margins-absolute_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/percentage-padding_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/writing-mode/positionForPoint_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/writing-mode/vertical-inline-block-hittest_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-invalid-values_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-xml-document-responsetype_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-before-open_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/xmlhttprequest/xmlhttprequest-withcredentials-before-open_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Borrowed/cz_20030217_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Borrowed/kd_20010423_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Borrowed/namespace-nodes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Borrowed/od_20000608_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Borrowed/rs_20010831_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Borrowed/sr_20021217_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Core/test_boolean_expr_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_literal_expr_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Core/test_location_path_t01: 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_nodeset_expr_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Core/test_numeric_expr_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Core/test_parser_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Core/test_predicate_list_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/4XPath/Core/test_step_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/ambiguous-operators_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/ancestor-axis_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/attr-namespace_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/attr-namespace_t02: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/attribute-node-predicate_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/complex-id_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/detached-subtree-invalidate-iterator_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/empty-string-substring_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/ensure-null-namespace_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/evaluator-exceptions_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/id-path_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/id-simple_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/name-null-namespace_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/nan-to-boolean_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/nodeset-duplicates_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/position_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/py-dom-xpath/abbreviations_t01: RuntimeError # Please triage this 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/substring-after_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/substring-nan-position_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/substring-non-positive-postion_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/xpath-detached-nodes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/xpath-empty-string_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xpath/xpath-result-eventlistener-crash_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
+LayoutTests/fast/xsl/extra-lf-at-end_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xsl/nbsp-in-stylesheet_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xsl/transformToFragment-XML-declaration_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xsl/xslt-fragment-in-empty-doc_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xsl/xslt-string-parameters_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/xsl/xslt-transform-to-fragment-crash_t01: RuntimeError # Please triage this failure
+LibTest/async/Stream/Stream.periodic_A01_t01: Pass, RuntimeError # Please triage this failure
+LibTest/async/Timer/Timer.periodic_A01_t01: Pass, RuntimeError # Please triage this failure
+LibTest/async/Timer/Timer_A01_t01: Pass, RuntimeError # Please triage this failure
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_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/Runes/takeWhile_A01_t01: Skip # Times out. Please triage this failure
+LibTest/core/String/split_A01_t02: Skip # Times out. Please triage this failure
+LibTest/core/String/toLowerCase_A01_t02: Skip # Times out. Please triage this failure
+LibTest/core/double/operator_remainder_A02_t01: Skip # Times out. Please triage this failure
+LibTest/core/double/roundToDouble_A01_t01: RuntimeError # Please triage this failure
+LibTest/core/double/round_A01_t01: RuntimeError # Please triage this failure
+LibTest/core/double/toStringAsExponential_A01_t04: RuntimeError # Please triage this failure
+LibTest/core/double/toStringAsPrecision_A01_t04: 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_t01: Skip # Times out. Please triage this failure
+LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t03: RuntimeError # Please triage this failure
+LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t04: Pass, RuntimeError # Please triage this failure
+LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t05: Skip # Times out. 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/contains_A01_t02: RuntimeError # Please triage this failure
+LibTest/html/Document/importNode_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/addEventListener_A01_t04: Pass, RuntimeError # Please triage this failure
+LibTest/html/Element/attributeChanged_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/Element/blurEvent_A01_t01: Pass, RuntimeError # Please triage this failure
+LibTest/html/Element/blur_A01_t01: Skip # Times out. 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/errorEvent_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/focusEvent_A01_t01: Pass, 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/getAttribute_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/getNamespacedAttributes_A01_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/loadEvent_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/marginEdge_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/Element/mouseWheelEvent_A01_t01: Skip # Times out, Issue 23437
+LibTest/html/Element/onError_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/onFocus_A01_t01: Pass, RuntimeError # Please triage this failure
+LibTest/html/Element/onLoad_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/onMouseWheel_A01_t01: Skip # Times out, Issue 23437
+LibTest/html/Element/ownerDocument_A01_t05: 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/translate_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/overrideMimeType_A01_t01: RuntimeError # 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/onAbort_A01_t01: Skip # Times out. 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/addEventListener_A01_t04: Pass, 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/contains_A01_t01: 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/focus_A01_t01: Pass, 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/leftView_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/marginEdge_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/offsetTo_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/onClick_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/IFrameElement/onMouseWheel_A01_t01: Skip # Times out. Issue 23437
+LibTest/html/IFrameElement/outerHtml_setter_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/ownerDocument_A01_t05: 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/IFrameElement/translate_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/Node/addEventListener_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Node/addEventListener_A01_t03: Skip # Times out. Please triage this failure
+LibTest/html/Node/addEventListener_A01_t04: Skip # Times out. Please triage this failure
+LibTest/html/Node/addEventListener_A01_t05: Skip # Times out. Please triage this failure
+LibTest/html/Node/append_A01_t02: RuntimeError # Please triage this failure
+LibTest/html/Node/contains_A01_t01: RuntimeError # Please triage this failure
+LibTest/html/Node/contains_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/ownerDocument_A01_t01: 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/Node/removeEventListener_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Node/removeEventListener_A01_t02: Skip # Times out. Please triage this failure
+LibTest/html/Window/animationFrame_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Window/close_A01_t01: Pass, 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_A01_t02: RuntimeError # Please triage this failure
+LibTest/html/Window/find_A02_t01: RuntimeError # Please triage this failure
+LibTest/html/Window/find_A03_t01: RuntimeError # Please triage this failure
+LibTest/html/Window/find_A03_t02: RuntimeError # Please triage this failure
+LibTest/html/Window/find_A04_t01: RuntimeError # Please triage this failure
+LibTest/html/Window/find_A05_t01: RuntimeError # Please triage this failure
+LibTest/html/Window/find_A06_t01: RuntimeError # Please triage this failure
+LibTest/html/Window/find_A07_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/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/math/sqrt_A02_t02: Skip # Times out. Please triage this failure
+LibTest/typed_data/ByteData/ByteData.view_A01_t01: Pass, RuntimeError # Please triage this failure
+LibTest/typed_data/Float32List/removeWhere_A01_t01: Skip # Times out. Please triage this failure
+LibTest/typed_data/Float32x4List/Float32x4List.view_A06_t01: RuntimeError # Please triage this failure
+LibTest/typed_data/Int32List/lastWhere_A01_t01: Skip # Times out. Please triage this failure
+LibTest/typed_data/Int32x4/operator_OR_A01_t01: RuntimeError # Please triage this failure
+LibTest/typed_data/Int64List/join_A01_t02: Skip # Times out. Please triage this failure
+LibTest/typed_data/Int8List/addAll_A01_t01: Skip # Times out. Please triage this failure
+LibTest/typed_data/Uint64List/any_A01_t01: Skip # Times out. Please triage this failure
+LibTest/typed_data/Uint64List/runtimeType_A01_t01: Skip # Times out. Please triage this failure
+LibTest/typed_data/Uint8ClampedList/skipWhile_A04_t01: Skip # Times out. 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_A02_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/events/defaultPrevented_A01_t05: RuntimeError # Please triage this failure
+WebPlatformTest/dom/events/type_A01_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/CharacterData/deleteData_A01_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/Comment-constructor_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_t01: 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-nodeName_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/Node-parentElement_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/Node-replaceChild_t01: RuntimeError # Please triage this failure
+WebPlatformTest/dom/nodes/Node-textContent_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/attributes_A06_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/nodes/attributes/setAttribute_A04_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 IE, 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: Skip # Times out. 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/documents/dom-tree-accessors/nameditem_t03: Skip # Times out. 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/disabled-elements/disabledElement_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/HTMLMediaElement/addTextTrack_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/kind_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/label_t01: RuntimeError # 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/HTMLElement/HTMLTrackElement/srclang_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/kind_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-not-application-textarea_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/forms/textfieldselection/selection_t01: Skip # Times out. Please triage this failure
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setRangeText_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange_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/datalistoptions_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/forms/the-fieldset-element/HTMLFieldSetElement_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/forms/the-output-element/output_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/grouping-content/the-li-element/grouping-li_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/grouping-content/the-ol-element/ol.start-reflection_t02: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/interactive-elements/the-details-element/toggleEvent_t01: RuntimeError # 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/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/border_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html/semantics/tabular-data/the-table-element/createTBody_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: RuntimeError # 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_local_newvalue_t01: RuntimeError # Please triage this failure
+WebPlatformTest/webstorage/event_local_oldvalue_t01: RuntimeError # Please triage this failure
+WebPlatformTest/webstorage/event_local_storagearea_t01: Pass, RuntimeError # Please triage this failure
+WebPlatformTest/webstorage/event_local_storageeventinit_t01: Pass, RuntimeError # Please triage this failure
+WebPlatformTest/webstorage/event_local_url_t01: RuntimeError # Please triage this failure
+WebPlatformTest/webstorage/event_session_key_t01: RuntimeError # Please triage this failure
+WebPlatformTest/webstorage/event_session_newvalue_t01: RuntimeError # Please triage this failure
+WebPlatformTest/webstorage/event_session_oldvalue_t01: RuntimeError # Please triage this failure
+WebPlatformTest/webstorage/event_session_storagearea_t01: RuntimeError # Please triage this failure
+WebPlatformTest/webstorage/event_session_url_t01: RuntimeError # Please triage this failure
+WebPlatformTest/webstorage/storage_builtins_t01: RuntimeError # Please triage this failure
+
+[ $compiler == dart2js && $runtime == ie11 && $builder_tag == win8]
+LibTest/typed_data/ByteData/offsetInBytes_A01_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/XMLSerializer-attribute-entities_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/serialize-attribute_t01: RuntimeError # Please triage this failure
+
+[ $compiler == dart2js && $runtime == ie11 && $builder_tag == win7]
+LayoutTests/fast/files/file-reader-result-twice_t01: Pass, RuntimeError # Issue 31430
+
+[ $compiler == dart2js && $host_checked ]
+Language/Types/Function_Types/call_t01: Crash # Issue 28894
diff --git a/pkg/status_file/test/data/empty.status b/pkg/status_file/test/data/empty.status
new file mode 100644
index 0000000..cb2e6d6
--- /dev/null
+++ b/pkg/status_file/test/data/empty.status
@@ -0,0 +1,4 @@
+# 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.
+
diff --git a/pkg/status_file/test/data/lib_2_app_jit.status b/pkg/status_file/test/data/lib_2_app_jit.status
new file mode 100644
index 0000000..a2a86f3
--- /dev/null
+++ b/pkg/status_file/test/data/lib_2_app_jit.status
@@ -0,0 +1,6 @@
+# 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.
+
+[ $compiler == app_jit ]
+mirrors/*: Skip # Issue 27929: Triage
diff --git a/pkg/status_file/test/data/standalone_2_vm.status b/pkg/status_file/test/data/standalone_2_vm.status
new file mode 100644
index 0000000..fd09ed8
--- /dev/null
+++ b/pkg/status_file/test/data/standalone_2_vm.status
@@ -0,0 +1,88 @@
+# 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.
+
+[ $runtime == vm && !$checked ]
+io/file_constructor_test: RuntimeError
+
+[ $runtime == vm && ($arch == arm || $arch == arm64) ]
+io/file_stream_test: Skip # Issue 26109
+io/file_typed_data_test: Skip # Issue 26109
+io/file_input_stream_test: Skip # Issue 26109
+
+[ $runtime == vm && $system == windows && $mode == release ]
+io/http_server_close_response_after_error_test: Pass, Timeout # Issue 28370: timeout.
+io/regress_7191_test: Pass, Timeout # Issue 28374: timeout.
+
+[ $runtime == vm && $system == macos && $mode == release ]
+io/named_pipe_script_test: Pass, RuntimeError # Issue 28737
+
+[ $runtime == vm && $system == linux && $mode == release && $arch == ia32 && $builder_tag == asan ]
+io/socket_close_test: Pass, Timeout # Issue 28502: timeout.
+
+[ $arch == ia32 ]
+no_allow_absolute_addresses_test: SkipByDesign # Not supported.
+link_natives_lazily_test: SkipByDesign # Not supported.
+
+[ $arch == simdbc || $arch == simdbc64 ]
+full_coverage_test: Skip # TODO(vegorov) SIMDBC interpreter doesn't support coverage yet.
+
+link_natives_lazily_test: SkipByDesign # SIMDBC interpreter doesn't support lazy linking of natives.
+
+no_lazy_dispatchers_test: SkipByDesign # SIMDBC interpreter doesn't support --no_lazy_dispatchers
+
+[ $arch == simdbc64 && $mode == debug && $checked ]
+io/web_socket_test: Pass, RuntimeError # Issue 26814.
+
+[ $system == windows ]
+io/skipping_dart2js_compilations_test: Skip # Issue 19551.
+verbose_gc_to_bmu_test: Skip
+io/process_sync_test: Pass, Timeout # Issue 24596
+io/sleep_test: Pass, Fail # Issue 25757
+io/socket_info_ipv6_test : Skip
+
+[ $system == windows && $compiler != dart2analyzer ]
+io/platform_resolved_executable_test/06: RuntimeError  # Issue 23641
+
+[ $compiler == app_jit ]
+io/test_extension_test: Skip # Platform.executable
+io/test_extension_fail_test: Skip # Platform.executable
+io/platform_test: Skip # Platform.executable
+io/code_collection_test: Skip # Platform.executable
+full_coverage_test: Skip # Platform.executable
+regress_26031_test: Skip # Platform.resolvedExecutable
+
+[ $system == android ]
+io/process_exit_test: Skip # Issue 29578
+io/process_path_test: Skip # Issue 26376
+io/process_segfault_test: Skip # Issue 26376
+io/file_test: Skip # Issue 26376
+io/process_path_environment_test: Skip # Issue 26376
+io/file_system_watcher_test: Skip # Issue 26376
+io/resolve_symbolic_links_test: Skip # Issue 26376
+io/file_stat_test: Skip # Issue 26376
+io/raw_datagram_socket_test: Skip # Issue 27638
+io/http_proxy_advanced_test: Skip # Issue 27638
+io/regress_21160_test: Skip # Issue 27638
+io/secure_multiple_client_server_test: Skip # Issue 27638
+io/http_proxy_test: Skip # Issue 27638
+io/secure_session_resume_test: Skip # Issue 27638
+io/raw_secure_server_socket_test: Skip # Issue 27638
+io/raw_secure_server_closing_test: Skip # Issue 27638
+io/raw_secure_socket_pause_test: Skip # Issue 27638
+io/https_server_test: Skip # Issue 27638
+io/secure_server_client_certificate_test: Skip # Issue 27638
+io/secure_socket_alpn_test: Skip # Issue 27638
+io/secure_bad_certificate_test: Skip # Issue 27638
+io/secure_server_socket_test: Skip # Issue 27638
+io/secure_client_server_test: Skip # Issue 27638
+io/socket_upgrade_to_secure_test: Skip # Issue 27638
+io/secure_client_raw_server_test: Skip # Issue 27638
+io/secure_socket_test: Skip # Issue 27638
+io/raw_secure_socket_test: Skip # Issue 27638
+io/https_bad_certificate_test: Skip # Issue 27638
+io/secure_server_closing_test: Skip # Issue 27638
+io/non_utf8_output_test: Skip # The Android command runner doesn't correctly handle non-UTF8 formatted output. https://github.com/dart-lang/sdk/issues/28872
+
+[ $system == android && $runtime == dart_precompiled && $mode == release && $arch == arm]
+io/stdout_stderr_non_blocking_test: Pass, Timeout # Issue 28426
diff --git a/pkg/status_file/test/data/vm.status b/pkg/status_file/test/data/vm.status
new file mode 100644
index 0000000..05d9029
--- /dev/null
+++ b/pkg/status_file/test/data/vm.status
@@ -0,0 +1,408 @@
+# 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.
+
+cc/IsolateReload_PendingUnqualifiedCall_InstanceToStatic: SkipSlow # Issue 28198
+cc/IsolateReload_PendingUnqualifiedCall_StaticToInstance: SkipSlow # Issue 28198
+cc/IsolateReload_PendingConstructorCall_AbstractToConcrete: SkipSlow # Issue 28198
+cc/IsolateReload_PendingConstructorCall_ConcreteToAbstract: SkipSlow # Issue 28198
+cc/IsolateReload_PendingStaticCall_DefinedToNSM: SkipSlow # Issue 28198
+cc/IsolateReload_PendingStaticCall_NSMToDefined: SkipSlow # Issue 28198
+
+cc/ArrayNew_Overflow_Crash: Crash, Fail # These tests are expected to crash on all platforms.
+cc/AllocGeneric_Overflow: Crash, Fail # These tests are expected to crash on all platforms.
+cc/CodeImmutability: Crash, Fail # These tests are expected to crash on all platforms.
+cc/SNPrint_BadArgs: Crash, Fail # These tests are expected to crash on all platforms.
+cc/Fail0: Fail # These tests are expected to crash on all platforms.
+cc/Fail1: Fail # These tests are expected to crash on all platforms.
+cc/Fail2: Fail # These tests are expected to crash on all platforms.
+
+cc/Dart2JSCompileAll: Fail, Crash # Issue 27369
+cc/Dart2JSCompilerStats: Fail, Crash # Issue 27369
+
+cc/Profiler_InliningIntervalBoundry: Skip # Differences in ia32, debug, release
+
+cc/Sleep: Skip # Flaky # Flaky on buildbot. Issue 5133 and 10409.
+
+dart/data_uri_import_test/none: SkipByDesign
+
+[ $mode == debug ]
+cc/CorelibIsolateStartup: Skip # This is a benchmark that is not informative in debug mode.
+cc/VerifyImplicit_Crash: Crash # Negative tests of VerifiedMemory should crash iff in DEBUG mode. TODO(koda): Improve support for negative tests.
+cc/VerifyExplicit_Crash: Crash # Negative tests of VerifiedMemory should crash iff in DEBUG mode. TODO(koda): Improve support for negative tests.
+dart/spawn_shutdown_test: Pass, Slow  # VM Shutdown test, It can take some time for all the isolates to shutdown in a Debug build.
+
+[ $system == windows ]
+cc/Service_Profile: Skip
+cc/CorelibCompilerStats: Skip
+
+[ $system == windows && $arch == x64 ]
+cc/Profiler_IntrinsicAllocation: Pass, Fail # Issue 31137
+cc/Profiler_ClosureAllocation: Pass, Fail # Issue 31137
+cc/Profiler_StringAllocation: Pass, Fail # Issue 31137
+cc/Profiler_TypedArrayAllocation: Pass, Fail # Issue 31137
+cc/Profiler_SourcePositionOptimized: Pass, Fail # Issue 31137
+cc/Profiler_BinaryOperatorSourcePositionOptimized: Pass, Fail # Issue 31137
+
+[ $system == fuchsia ]
+dart/spawn_shutdown_test: Skip # OOM crash can bring down the OS.
+cc/CorelibIsolateStartup: Skip # OOM crash can bring down the OS.
+dart/data_uri_spawn_test: Skip # TODO(zra): package:unittest is not in the image.
+cc/Read: Fail  # TODO(zra): Investigate, ../../dart/runtime/bin/file_test.cc: 34: error: expected: !file->WriteByte(1)
+
+# Profiler is completely disabled in SIMDBC builds.
+# On the simluator stack traces produced by the Profiler do not match
+# up with the real Dart stack trace and hence we don't get correct
+# symbol names.
+[ $arch == simarm || $arch == simarmv6 || $arch == simarmv5te || $arch == simarm64 || $arch == simdbc  || $arch == simdbc64 ]
+cc/Service_Profile: Skip
+cc/Profiler_AllocationSampleTest: Skip
+cc/Profiler_ArrayAllocation: Skip
+cc/Profiler_BasicSourcePosition: Skip
+cc/Profiler_BasicSourcePositionOptimized: Skip
+cc/Profiler_BinaryOperatorSourcePosition: Skip
+cc/Profiler_BinaryOperatorSourcePositionOptimized: Skip
+cc/Profiler_ChainedSamples: Skip
+cc/Profiler_ClosureAllocation: Skip
+cc/Profiler_CodeTicks: Skip
+cc/Profiler_ContextAllocation: Skip
+cc/Profiler_FunctionInline: Skip
+cc/Profiler_FunctionTicks: Skip
+cc/Profiler_InliningIntervalBoundry: Skip
+cc/Profiler_IntrinsicAllocation: Skip
+cc/Profiler_SampleBufferIterateTest: Skip
+cc/Profiler_SampleBufferWrapTest: Skip
+cc/Profiler_SourcePosition: Skip
+cc/Profiler_SourcePositionOptimized: Skip
+cc/Profiler_StringAllocation: Skip
+cc/Profiler_StringInterpolation: Skip
+cc/Profiler_ToggleRecordAllocation: Skip
+cc/Profiler_TrivialRecordAllocation: Skip
+cc/Profiler_TypedArrayAllocation: Skip
+cc/Profiler_GetSourceReport: Skip
+cc/LargeMap: Skip
+
+# Following tests are failing in a weird way on macos/ia32/debug builds
+# need to investigate.
+[ $runtime == vm && $mode == debug && $arch == ia32 && $system == macos ]
+cc/Profiler_TrivialRecordAllocation: Skip
+cc/Profiler_ToggleRecordAllocation: Skip
+cc/Profiler_FunctionTicks: Skip
+cc/Profiler_CodeTicks: Skip
+cc/Profiler_IntrinsicAllocation: Skip
+cc/Profiler_ArrayAllocation: Skip
+cc/Profiler_ContextAllocation: Skip
+cc/Profiler_ClosureAllocation: Skip
+cc/Profiler_TypedArrayAllocation: Skip
+cc/Profiler_StringAllocation: Skip
+cc/Profiler_StringInterpolation: Skip
+cc/Profiler_BasicSourcePosition: Skip
+cc/Profiler_BasicSourcePositionOptimized: Skip
+cc/Profiler_ChainedSamples: Skip
+cc/Profiler_FunctionInline: Skip
+cc/Profiler_SourcePosition: Skip
+cc/Profiler_SourcePositionOptimized: Skip
+cc/Profiler_BinaryOperatorSourcePosition: Skip
+cc/Profiler_BinaryOperatorSourcePositionOptimized: Skip
+
+[ $compiler == none && $runtime == drt ]
+dart/truncating_ints_test: Skip # Issue 14651
+
+[ $compiler == dart2js ]
+dart/redirection_type_shuffling_test: Skip # Depends on lazy enforcement of type bounds
+dart/byte_array_test: Skip # compilers not aware of byte arrays
+dart/byte_array_optimized_test: Skip # compilers not aware of byte arrays
+dart/simd128float32_array_test: Skip # compilers not aware of Simd128
+dart/simd128float32_test: Skip # compilers not aware of Simd128
+dart/truncating_ints_test: Skip # dart2js doesn't know about --limit-ints-to-64-bits
+
+[ $compiler == dart2js ]
+dart/optimized_stacktrace_line_test: RuntimeError # The source positions do not match with dart2js.
+dart/optimized_stacktrace_line_and_column_test: RuntimeError # The source positions do not match with dart2js.
+
+dart/inline_stack_frame_test: Skip # Issue 7953, Methods can be missing in dart2js stack traces due to inlining. Also when minifying they can be renamed, which is issue 7953.
+
+[ $compiler == dart2js || $compiler == dart2analyzer ]
+dart/data_uri*test: Skip # Data uri's not supported by dart2js or the analyzer.
+
+[ $compiler == dart2analyzer ]
+dart/optimized_stacktrace_line_test: StaticWarning
+dart/optimized_stacktrace_line_and_column_test: StaticWarning
+
+[ $compiler == dart2analyzer && $builder_tag == strong ]
+*: Skip # Issue 28649
+
+[ $compiler == app_jit ]
+dart/snapshot_version_test: Fail,OK # Expects to find script snapshot relative to Dart source.
+
+[ $runtime != vm ]
+dart/snapshot_version_test: SkipByDesign  # Spawns processes
+dart/spawn_infinite_loop_test: Skip  # VM shutdown test
+dart/spawn_shutdown_test: Skip  # VM Shutdown test
+dart/hello_fuchsia_test: SkipByDesign # This is a test for fuchsia OS
+
+[ ($runtime == vm || $runtime == dart_precompiled) && $mode == debug && $builder_tag == asan ]
+cc/Dart2JSCompileAll: SkipSlow  # Timeout.
+
+[ $builder_tag == asan ]
+cc/CodeImmutability: Fail,OK # Address Sanitizer turns a crash into a failure.
+cc/IsolateReload_DanglingGetter_Class: Fail # Issue 28349
+cc/IsolateReload_DanglingGetter_Instance: Fail # Issue 28349
+cc/IsolateReload_DanglingGetter_Library: Fail # Issue 28349
+cc/IsolateReload_DanglingSetter_Class: Fail # Issue 28349
+cc/IsolateReload_DanglingSetter_Instance: Fail # Issue 28349
+cc/IsolateReload_DanglingSetter_Library: Fail # Issue 28349
+cc/IsolateReload_LiveStack: Fail # Issue 28349
+cc/IsolateReload_PendingSuperCall: Fail # Issue 28349
+cc/IsolateReload_SmiFastPathStubs: Fail # Issue 28349
+cc/IsolateReload_TearOff_AddArguments2: Fail # Issue 28349
+cc/IsolateReload_TearOff_AddArguments: Fail # Issue 28349
+cc/IsolateReload_TearOff_Class_Identity: Fail # Issue 28349
+cc/IsolateReload_TearOff_Instance_Equality: Fail # Issue 28349
+cc/IsolateReload_TearOff_Library_Identity: Fail # Issue 28349
+cc/IsolateReload_TearOff_List_Set: Fail # Issue 28349
+cc/IsolateReload_TypeIdentity: Fail # Issue 28349
+cc/IsolateReload_TypeIdentityGeneric: Fail # Issue 28349
+cc/IsolateReload_TypeIdentityParameter: Fail # Issue 28349
+
+[ $compiler == precompiler ]
+dart/byte_array_test: Skip # Incompatible flag --disable_alloc_stubs_after_gc
+
+[ $compiler == precompiler || $mode == product ]
+dart/redirection_type_shuffling_test: SkipByDesign # Imports dart:mirrors
+cc/CreateMirrorSystem: SkipByDesign # Imports dart:mirrors
+cc/CoreSnapshotSize: SkipByDesign # Imports dart:mirrors
+cc/StandaloneSnapshotSize: SkipByDesign # Imports dart:mirrors
+
+[ $compiler == app_jit ]
+dart/optimized_stacktrace_line_and_column_test: RuntimeError,OK # app-jit lacks column information
+
+[ $runtime == dart_precompiled ]
+dart/optimized_stacktrace_line_and_column_test: RuntimeError,OK # AOT lacks column information
+dart/data_uri_spawn_test: SkipByDesign # Isolate.spawnUri
+
+[ $runtime == vm && $mode == product ]
+cc/DartAPI_IsolateSetCheckedMode: Fail,OK  # Checked mode disabled in product mode.
+
+[ $arch == simdbc  || $arch == simdbc64 ]
+cc/RegExp_ExternalOneByteString: Skip # TODO(vegorov) These tests don't seem to work if FLAG_interpret_irregexp is switched on by default because they attempt to call regexp functions directly instead of going through JSSyntaxRegExp_ExecuteMatch.
+cc/RegExp_ExternalTwoByteString: Skip # TODO(vegorov) These tests don't seem to work if FLAG_interpret_irregexp is switched on by default because they attempt to call regexp functions directly instead of going through JSSyntaxRegExp_ExecuteMatch.
+cc/RegExp_OneByteString: Skip # TODO(vegorov) These tests don't seem to work if FLAG_interpret_irregexp is switched on by default because they attempt to call regexp functions directly instead of going through JSSyntaxRegExp_ExecuteMatch.
+cc/RegExp_TwoByteString: Skip # TODO(vegorov) These tests don't seem to work if FLAG_interpret_irregexp is switched on by default because they attempt to call regexp functions directly instead of going through JSSyntaxRegExp_ExecuteMatch.
+
+cc/GuardFieldConstructor2Test: Skip # TODO(vegorov) Field guards are disabled for SIMDBC
+cc/GuardFieldConstructorTest: Skip # TODO(vegorov) Field guards are disabled for SIMDBC
+cc/GuardFieldFinalListTest: Skip # TODO(vegorov) Field guards are disabled for SIMDBC
+cc/GuardFieldFinalVariableLengthListTest: Skip # TODO(vegorov) Field guards are disabled for SIMDBC
+cc/GuardFieldSimpleTest: Skip # TODO(vegorov) Field guards are disabled for SIMDBC
+
+cc/RegenerateAllocStubs: Skip # This test is meaningless for DBC as allocation stubs are not used.
+
+[ $hot_reload || $hot_reload_rollback ]
+dart/spawn_shutdown_test: Skip # We can shutdown an isolate before it reloads.
+dart/spawn_infinite_loop_test: Skip # We can shutdown an isolate before it reloads.
+
+
+[ ($compiler == dartkp) && ($runtime == vm || $runtime == dart_precompiled) ]
+dart/data_uri_import_test/base64: CompileTimeError
+dart/data_uri_import_test/nocharset: CompileTimeError
+dart/data_uri_import_test/nomime: CompileTimeError
+dart/data_uri_import_test/percentencoded: CompileTimeError
+dart/data_uri_import_test/wrongmime: CompileTimeError
+dart/data_uri_spawn_test: RuntimeError
+dart/redirection_type_shuffling_test: SkipByDesign # Includes dart:mirrors.
+dart/spawn_shutdown_test: SkipSlow
+
+[ ($compiler != dartk) ]
+cc/IsolateReload_KernelIncrementalCompile: Skip
+cc/IsolateReload_KernelIncrementalCompileAppAndLib: Skip
+cc/IsolateReload_KernelIncrementalCompileGenerics: Skip
+cc/Mixin_PrivateSuperResolution: Skip
+cc/Mixin_PrivateSuperResolutionCrossLibraryShouldFail: Skip
+
+[ ($compiler == dartk) && ($runtime == vm) ]
+cc/CanonicalizationInScriptSnapshots: Fail
+cc/Class_ComputeEndTokenPos: Crash
+cc/DartAPI_CurrentStackTraceInfo: Fail
+cc/DartAPI_ImplicitNativeFieldAccess: Crash
+cc/DartAPI_InjectNativeFields1: Skip
+cc/DartAPI_InjectNativeFields3: Crash
+cc/DartAPI_InjectNativeFields4: Crash
+cc/DartAPI_InjectNativeFieldsSuperClass: Crash
+cc/DartAPI_Invoke_CrossLibrary:  Crash
+cc/DartAPI_InvokeNoSuchMethod: Fail
+cc/DartAPI_IsolateShutdownRunDartCode: Skip # Flaky
+cc/DartAPI_LazyLoadDeoptimizes: Fail
+cc/DartAPI_LoadLibrary: Crash
+cc/DartAPI_LoadLibraryPatch_Error1: Fail
+cc/DartAPI_LoadLibraryPatch_Error2: Fail
+cc/DartAPI_LoadLibraryPatch_Error3: Fail
+cc/DartAPI_LoadPatch: Crash
+cc/DartAPI_LoadPatchSignatureMismatch: Crash
+cc/DartAPI_LoadSource: Crash
+cc/DartAPI_LoadSource_LateLoad: Crash
+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_StackOverflowStackTraceInfoBraceFunction1: Fail
+cc/DartAPI_StackOverflowStackTraceInfoBraceFunction2: Fail
+cc/DartAPI_StackOverflowStackTraceInfoArrowFunction: Fail
+cc/DartAPI_TestNativeFieldsAccess: Crash
+cc/DartAPI_TypeGetParameterizedTypes: Crash
+cc/DebuggerAPI_BreakpointStubPatching: Fail
+cc/DebuggerAPI_GetClosureInfo: Fail
+cc/DebuggerAPI_InterruptIsolate: SkipSlow
+cc/DebuggerAPI_IsolateID: Fail
+cc/DebuggerAPI_ScriptGetTokenInfo_Basic: Fail
+cc/DebuggerAPI_ScriptGetTokenInfo_MultiLineInterpolation: Fail
+cc/Debugger_PrintBreakpointsToJSONArray: Fail
+cc/Debugger_Rewind_Optimized: SkipSlow
+cc/Debugger_SetBreakpointInPartOfLibrary: Crash
+cc/FunctionSourceFingerprint: Fail
+cc/IsolateReload_BadClass: Fail
+cc/IsolateReload_ClassFieldAdded: Skip # Crash, Timeout
+cc/IsolateReload_ClassFieldAdded2: Skip # Crash, Timeout
+cc/IsolateReload_ChangeInstanceFormat1: Skip
+cc/IsolateReload_ChangeInstanceFormat3: Skip
+cc/IsolateReload_ChangeInstanceFormat7: Skip
+cc/IsolateReload_ChangeInstanceFormat8: Skip
+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
+cc/IsolateReload_DanglingSetter_Library: Fail
+cc/IsolateReload_DirectSubclasses_Failure: Fail
+cc/IsolateReload_DirectSubclasses_Success: Skip
+cc/IsolateReload_EnumDelete: Fail
+cc/IsolateReload_EnumReorderIdentical: Fail
+cc/IsolateReload_EnumToNotEnum: Skip
+cc/IsolateReload_ExportedLibModified: Crash
+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
+cc/IsolateReload_NoLibsModified: Crash
+cc/IsolateReload_NotEnumToEnum: Skip
+cc/IsolateReload_NotTypedefToTypedef: Fail
+cc/IsolateReload_PendingSuperCall: Fail
+cc/IsolateReload_PrefixImportedLibModified: Crash
+cc/IsolateReload_RunNewFieldInitialiazersSuperClass: Skip
+cc/IsolateReload_RunNewFieldInitializers: Skip
+cc/IsolateReload_RunNewFieldInitializersMutateStaticField: Skip
+cc/IsolateReload_RunNewFieldInitializersReferenceStaticField: Skip
+cc/IsolateReload_RunNewFieldInitializersSyntaxError3: Fail
+cc/IsolateReload_RunNewFieldInitializersThrows: Skip
+cc/IsolateReload_RunNewFieldInitializersWithConsts: Skip
+cc/IsolateReload_ShapeChangeRetainsHash: Skip
+cc/IsolateReload_SmiFastPathStubs: Fail
+cc/IsolateReload_TearOff_AddArguments2: Fail
+cc/IsolateReload_TearOff_AddArguments: 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
+cc/Parser_AllocateVariables_Issue7681: Fail
+cc/Parser_AllocateVariables_MiddleChain: Fail
+cc/Parser_AllocateVariables_NestedCapturedVar: Fail
+cc/Parser_AllocateVariables_TwoChains: Fail
+cc/Profiler_SourcePositionOptimized: Fail
+cc/Profiler_BasicSourcePositionOptimized: Skip
+cc/Profiler_BinaryOperatorSourcePositionOptimized: Skip
+cc/Profiler_GetSourceReport: Fail
+cc/Profiler_SourcePositionOptimized: Skip
+cc/ScriptSnapshot2: Crash
+cc/ScriptSnapshot: Crash
+cc/SourcePosition_Async: Crash
+cc/SourcePosition_BitwiseOperations: Crash
+cc/SourcePosition_ForLoop: Crash
+cc/SourcePosition_If: Crash
+cc/SourcePosition_IfElse: Crash
+cc/SourcePosition_InstanceCalls: Crash
+cc/SourcePosition_InstanceFields: Crash
+cc/SourcePosition_LoadIndexed: Crash
+cc/SourcePosition_StoreIndexed: Crash
+cc/SourcePosition_Switch: Crash
+cc/SourcePosition_TryCatchFinally: Crash
+cc/SourcePosition_While: Crash
+cc/SourcePosition_WhileContinueBreak: Crash
+cc/SourceReport_CallSites_PolymorphicCall: Fail
+cc/SourceReport_CallSites_SimpleCall: Fail
+cc/SourceReport_Coverage_AllFunctions: Fail
+cc/SourceReport_Coverage_AllFunctions_ForceCompile: Fail
+cc/SourceReport_Coverage_ForceCompile: Fail
+cc/SourceReport_Coverage_NestedFunctions: Fail
+cc/SourceReport_Coverage_NoCalls: Fail
+cc/SourceReport_Coverage_RestrictedRange: Fail
+cc/SourceReport_Coverage_SimpleCall: Fail
+cc/SourceReport_Coverage_UnusedClass_ForceCompile: Fail
+cc/SourceReport_Coverage_UnusedClass_ForceCompileError: Crash
+cc/SourceReport_Coverage_UnusedClass_NoForceCompile: Fail
+cc/SourceReport_MultipleReports: Fail
+cc/SourceReport_PossibleBreakpoints_Simple: Fail
+cc/StackTraceFormat: Fail
+cc/UseDartApi: Fail
+dart/data_uri_import_test/base64: CompileTimeError
+dart/data_uri_import_test/nocharset: CompileTimeError
+dart/data_uri_import_test/nomime: CompileTimeError
+dart/data_uri_import_test/percentencoded: Fail
+dart/data_uri_import_test/wrongmime: CompileTimeError
+dart/data_uri_spawn_test: RuntimeError
+dart/redirection_type_shuffling_test/00: Crash
+dart/redirection_type_shuffling_test/none: Crash
+dart/spawn_shutdown_test: SkipSlow
+
+[ ($compiler == dartk) && ($runtime == vm) && ($mode == release) ]
+cc/InjectNativeFields1: Fail
+cc/InjectNativeFields3: Fail
+cc/Service_TokenStream: Fail
+
+[ ($compiler == dartk) && ($runtime == vm) && ($mode == debug) ]
+cc/InjectNativeFields1: Crash
+cc/InjectNativeFields3: Crash
+cc/Service_TokenStream: Crash
+
+[ ($compiler == dartk) && ($runtime == vm) && ($system == macos) ]
+cc/IsolateReload_DanglingGetter_Class: Crash
+cc/IsolateReload_DanglingGetter_Instance: Crash
+cc/IsolateReload_DanglingGetter_Library: Crash
+cc/IsolateReload_DanglingSetter_Class: Crash
+cc/IsolateReload_DanglingSetter_Instance: Crash
+cc/IsolateReload_DanglingSetter_Library: Crash
+cc/IsolateReload_EnumDelete: Crash
+cc/IsolateReload_LibraryLookup: Crash
+cc/IsolateReload_TearOff_AddArguments2: Crash
+cc/IsolateReload_TearOff_AddArguments: 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/Parser_AllocateVariables_CaptureLoopVar: Crash
+cc/Parser_AllocateVariables_Issue7681: Crash
+cc/Parser_AllocateVariables_MiddleChain: Crash
+cc/Parser_AllocateVariables_NestedCapturedVar: Crash
+cc/Parser_AllocateVariables_TwoChains: Crash
+
+[ $runtime == dart_precompiled && $minified ]
+dart/inline_stack_frame_test: Skip
+dart/optimized_stacktrace_line_test: Skip
+
+
+[ ($compiler == dartkp) ]
+dart/truncating_ints_test: CompileTimeError # Issue 31339
diff --git a/pkg/status_file/test/linter_test.dart b/pkg/status_file/test/linter_test.dart
index 96203bd..db340c0 100644
--- a/pkg/status_file/test/linter_test.dart
+++ b/pkg/status_file/test/linter_test.dart
@@ -18,6 +18,8 @@
   testCheckForAlphabeticalOrderingOfPaths_invalidOrdering();
   testCheckForAlphabeticalOrderingOfPaths_okOrdering();
 
+  testCheckForDuplicateEntries_hasDuplicates();
+
   testCheckForCorrectOrderingInSections_invalidRuntimeBeforeCompiler();
   testCheckForCorrectOrderingInSections_invalidRuntimeBeforeMode();
   testCheckForCorrectOrderingInSections_invalidSystemBeforeMode();
@@ -117,13 +119,25 @@
 """);
 }
 
+void testCheckForDuplicateEntries_hasDuplicates() {
+  expectError(
+      r"""[ $mode == debug ]
+a_test: Pass
+a_test: Pass
+bc_test: Pass
+xyz_test: Skip
+""",
+      "Error at line 1: The status entry 'a_test: Pass' is duplicated on lines "
+      "2 and 3.");
+}
+
 void testCheckForCorrectOrderingInSections_invalidRuntimeBeforeCompiler() {
   expectError(
       r"""[ $runtime == ff && $compiler == dart2js]
 a_test: Pass
 """,
       r"Error at line 1: Condition expression should be '$compiler == dart2js "
-      r"&& $runtime == ff'.");
+      r"&& $runtime == ff' but was '$runtime == ff && $compiler == dart2js'.");
 }
 
 void testCheckForCorrectOrderingInSections_invalidRuntimeBeforeMode() {
@@ -132,7 +146,7 @@
 a_test: Pass
 """,
       r"Error at line 1: Condition expression should be '$mode == debug && "
-      r"$runtime == ff'.");
+      r"$runtime == ff' but was '$runtime == ff && $mode == debug'.");
 }
 
 void testCheckForCorrectOrderingInSections_invalidSystemBeforeMode() {
@@ -141,13 +155,16 @@
 a_test: Pass
 """,
       r"Error at line 1: Condition expression should be '$mode == debug && "
-      r"$system == win'.");
+      r"$system == win' but was '$system == win && $mode == debug'.");
 }
 
 void testCheckForCorrectOrderingInSections_invalidStrongBeforeKernel() {
-  expectError(r"""[ !$strong && !$kernel ]
+  expectError(
+      r"""[ !$strong && !$kernel ]
 a_test: Pass
-""", r"Error at line 1: Condition expression should be '!$kernel && !$strong'.");
+""",
+      r"Error at line 1: Condition expression should be '!$kernel && !$strong' "
+      r"but was '!$strong && !$kernel'.");
 }
 
 void testCheckForCorrectOrderingInSections_invalidOrdering() {
@@ -156,7 +173,8 @@
 a_test: Pass
 """,
       r"Error at line 1: Condition expression should be '$builder_tag == "
-      r"strong && $compiler == dart2js && !$browser'.");
+      r"strong && $compiler == dart2js && !$browser' but was "
+      r"'$compiler == dart2js && $builder_tag == strong && !$browser'.");
 }
 
 void testCheckForCorrectOrderingInSections_okOrdering() {
@@ -174,8 +192,8 @@
 a_test: Pass
 """,
       r"Error at line 1: Section expressions are not correctly ordered in file."
-      r" $compiler == dart2js on line 4 should come before $runtime == ff at "
-      r"line 1.");
+      r" '$compiler == dart2js' on line 4 should come before '$runtime == ff' "
+      r"at line 1.");
 }
 
 void checkLintNormalizedSection_invalidAlphabeticalOrderingVariableArguments() {
@@ -187,7 +205,7 @@
 a_test: Pass
 """,
       r"Error at line 1: Section expressions are not correctly ordered in file."
-      r" $runtime == chrome on line 4 should come before $runtime == ff at "
+      r" '$runtime == chrome' on line 4 should come before '$runtime == ff' at "
       r"line 1.");
 }
 
@@ -204,7 +222,8 @@
 a_test: Pass
 """,
       r"Error at line 4: Section expressions are not correctly ordered in file."
-      r" $runtime == ff on line 7 should come before $runtime != ff at line 4.");
+      r" '$runtime == ff' on line 7 should come before '$runtime != ff' at "
+      r"line 4.");
 }
 
 void checkLintNormalizedSection_invalidOrderingWithNegation() {
@@ -221,7 +240,7 @@
 
 """,
       r"Error at line 4: Section expressions are not correctly ordered in file."
-      r" $checked on line 7 should come before !$checked at line 4.");
+      r" '$checked' on line 7 should come before '!$checked' at line 4.");
 }
 
 void checkLintNormalizedSection_correctOrdering() {
@@ -254,6 +273,6 @@
 [ ! $browser ]
 a_test: Pass
 """,
-      r"Error at line 4: The condition !$browser is duplicated on lines 1 "
+      r"Error at line 4: The condition '!$browser' is duplicated on lines 1 "
       r"and 4.");
 }
diff --git a/pkg/status_file/test/normalize_test.dart b/pkg/status_file/test/normalize_test.dart
new file mode 100644
index 0000000..6fde746
--- /dev/null
+++ b/pkg/status_file/test/normalize_test.dart
@@ -0,0 +1,139 @@
+// 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.
+
+// This tests if the modification of a status file is done correctly, by
+// checking that all entries in the original status file are to be found in the
+// new status file. The check therefore allows the merging of section headers if
+// they are equal, alphabetizing sections and entries, removing line columns and
+// normalizing section conditions.
+
+import 'dart:io';
+
+import 'package:status_file/canonical_status_file.dart';
+import 'package:status_file/src/expression.dart';
+import 'package:status_file/status_file_normalizer.dart';
+
+final Uri statusFilePath = Platform.script.resolve("data/");
+
+main() {
+  sanityCheck();
+  normalizeCheck();
+}
+
+void normalizeCheck() {
+  var files = getStatusFiles();
+  for (var file in files) {
+    print("------- " + file.path + " -------");
+    var statusFile = new StatusFile.read(file.path);
+    var statusFileOther = normalizeStatusFile(new StatusFile.read(file.path));
+    checkSemanticallyEqual(statusFile, statusFileOther,
+        warnOnDuplicateHeader: true);
+    print("------- " + file.path + " -------");
+  }
+}
+
+void sanityCheck() {
+  var files = getStatusFiles();
+  for (var file in files) {
+    print("------- " + file.path + " -------");
+    var statusFile = new StatusFile.read(file.path);
+    var statusFileOther = new StatusFile.read(file.path);
+    checkSemanticallyEqual(statusFile, statusFileOther,
+        warnOnDuplicateHeader: true);
+    print("------- " + file.path + " -------");
+  }
+}
+
+List<FileSystemEntity> getStatusFiles() {
+  var statusFiles = <FileSystemEntity>[];
+  for (var entry
+      in new Directory.fromUri(statusFilePath).listSync(recursive: true)) {
+    statusFiles.add(entry);
+  }
+  return statusFiles;
+}
+
+void checkSemanticallyEqual(StatusFile original, StatusFile normalized,
+    {bool warnOnDuplicateHeader = false}) {
+  var entriesInOriginal = countEntries(original);
+  var entriesInNormalized = countEntries(normalized);
+  if (entriesInOriginal != entriesInNormalized) {
+    print(original);
+    print("==================");
+    print(normalized);
+    throw new Exception("The count of entries in original is "
+        "$entriesInOriginal and the count of entries in normalized is "
+        "$entriesInNormalized. Those two numbers are not the same.");
+  }
+  for (var section in original.sections) {
+    section.entries.where((entry) => entry is StatusEntry).forEach((entry) =>
+        findInStatusFile(normalized, entry, section.condition?.normalize(),
+            warnOnDuplicateHeader: warnOnDuplicateHeader));
+  }
+}
+
+int countEntries(StatusFile statusFile) {
+  return statusFile.sections
+      .map((section) =>
+          section.entries.where((entry) => entry is StatusEntry).length)
+      .fold(0, (count, sum) => count + sum);
+}
+
+void findInStatusFile(
+    StatusFile statusFile, StatusEntry entryToFind, Expression condition,
+    {bool warnOnDuplicateHeader = false}) {
+  int foundEntryPosition = -1;
+  for (var section in statusFile.sections) {
+    if (section.condition == null && condition != null ||
+        section.condition != null && condition == null) {
+      continue;
+    }
+    if (section.condition != null &&
+        section.condition.normalize().compareTo(condition) != 0) {
+      continue;
+    }
+    var matchingEntries = section.entries
+        .where((entry) =>
+            entry is StatusEntry &&
+            entry.path.compareTo(entryToFind.path) == 0 &&
+            listEqual(entry.expectations, entryToFind.expectations))
+        .toList();
+    if (matchingEntries.length == 0) {
+      var message = "Could not find the entry even though the section "
+          "header matched on line number ${section.lineNumber}. Sections "
+          "should be unique.";
+      if (warnOnDuplicateHeader) {
+        print(message);
+      } else {
+        throw new Exception(message);
+      }
+    } else if (matchingEntries.length == 1 && foundEntryPosition >= 0) {
+      throw new Exception("The entry '$entryToFind' on line "
+          "${entryToFind.lineNumber} in section ${section.condition} was "
+          "already found in a previous section on line $foundEntryPosition.");
+    } else if (matchingEntries.length == 1) {
+      foundEntryPosition = matchingEntries[0].lineNumber;
+    } else {
+      throw new Exception("The entry '$entryToFind' on line "
+          "${entryToFind.lineNumber} in section ${section.condition} on line "
+          "${section.lineNumber} had multiple matches in section.");
+    }
+  }
+  if (foundEntryPosition < 0) {
+    throw new Exception("Could not find entry '$entryToFind' under the "
+        "condition $condition in the status file.");
+  }
+}
+
+bool listEqual<T>(List<T> first, List<T> second) {
+  if (first.length != second.length) {
+    return false;
+  }
+  for (int i = 0; i < first.length; i++) {
+    if (first[i] != second[i]) {
+      return false;
+    }
+  }
+  return true;
+}
diff --git a/pkg/status_file/test/parse_and_normalize_new_test.dart b/pkg/status_file/test/parse_and_normalize_test.dart
similarity index 100%
rename from pkg/status_file/test/parse_and_normalize_new_test.dart
rename to pkg/status_file/test/parse_and_normalize_test.dart
diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart
index b829d2e..2b234dd 100644
--- a/pkg/vm/bin/kernel_service.dart
+++ b/pkg/vm/bin/kernel_service.dart
@@ -25,11 +25,11 @@
 import 'dart:isolate';
 import 'dart:typed_data' show Uint8List;
 
-import 'package:front_end/file_system.dart';
-import 'package:front_end/front_end.dart';
-import 'package:front_end/incremental_kernel_generator.dart';
-import 'package:front_end/memory_file_system.dart';
-import 'package:front_end/physical_file_system.dart';
+import 'package:front_end/src/api_prototype/file_system.dart';
+import 'package:front_end/src/api_prototype/front_end.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/api_prototype/physical_file_system.dart';
 import 'package:front_end/src/compute_platform_binaries_location.dart'
     show computePlatformBinariesLocation;
 import 'package:front_end/src/fasta/kernel/utils.dart';
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
new file mode 100644
index 0000000..97b0ceb
--- /dev/null
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -0,0 +1,44 @@
+// 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.
+
+/// Defines the VM-specific translation of Dart source code to kernel binaries.
+library vm.kernel_front_end;
+
+import 'dart:async';
+
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/kernel_generator.dart'
+    show kernelForProgram;
+import 'package:kernel/ast.dart' show Program;
+import 'package:kernel/core_types.dart' show CoreTypes;
+
+// TODO(alexmarkov): Move this transformation to pkg/vm.
+import 'package:kernel/transformations/precompiler.dart' as transformPrecompiler
+    show transformProgram;
+
+/// Generates a kernel representation of the program whose main library is in
+/// the given [source]. Intended for whole program (non-modular) compilation.
+///
+/// VM-specific replacement of [kernelForProgram].
+///
+Future<Program> compileToKernel(Uri source, CompilerOptions options,
+    {bool aot: false}) async {
+  final program = await kernelForProgram(source, options);
+
+  if (aot) {
+    _runGlobalTransformations(program, options.strongMode);
+  }
+
+  return program;
+}
+
+_runGlobalTransformations(Program program, bool strongMode) {
+  final coreTypes = new CoreTypes(program);
+
+  // TODO(alexmarkov): AOT-specific whole-program transformations.
+
+  if (strongMode) {
+    transformPrecompiler.transformProgram(coreTypes, program);
+  }
+}
diff --git a/runtime/bin/file_fuchsia.cc b/runtime/bin/file_fuchsia.cc
index 181a8ac..3891fb0 100644
--- a/runtime/bin/file_fuchsia.cc
+++ b/runtime/bin/file_fuchsia.cc
@@ -201,7 +201,7 @@
     flags = flags | O_TRUNC;
   }
   flags |= O_CLOEXEC;
-  int fd = NO_RETRY_EXPECTED(openat64(ns.fd(), name, flags, 0666));
+  int fd = NO_RETRY_EXPECTED(openat64(ns.fd(), ns.path(), flags, 0666));
   if (fd < 0) {
     return NULL;
   }
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index 0db0705..57d33f8 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -172,6 +172,10 @@
   return (snapshot_kind == kAppAOTBlobs) || (snapshot_kind == kAppAOTAssembly);
 }
 
+static bool SnapshotKindAllowedFromKernel() {
+  return IsSnapshottingForPrecompilation() || (snapshot_kind == kCore);
+}
+
 // Parse out the command line arguments. Returns -1 if the arguments
 // are incorrect, 0 otherwise.
 static int ParseArguments(int argc,
@@ -1378,6 +1382,77 @@
   return mapping;
 }
 
+static int GenerateSnapshotFromKernelProgram(void* kernel_program) {
+  ASSERT(SnapshotKindAllowedFromKernel());
+
+  char* error = NULL;
+  IsolateData* isolate_data = new IsolateData(NULL, commandline_package_root,
+                                              commandline_packages_file, NULL);
+  if ((dependencies_filename != NULL) || print_dependencies) {
+    isolate_data->set_dependencies(new MallocGrowableArray<char*>());
+  }
+
+  Dart_Isolate isolate = Dart_CreateIsolateFromKernel(
+      NULL, NULL, kernel_program, NULL, isolate_data, &error);
+  if (isolate == NULL) {
+    delete isolate_data;
+    Log::PrintErr("%s\n", error);
+    free(error);
+    return kErrorExitCode;
+  }
+
+  Dart_EnterScope();
+  Dart_Handle result = Dart_SetEnvironmentCallback(EnvironmentCallback);
+  CHECK_RESULT(result);
+
+  if (IsSnapshottingForPrecompilation()) {
+    // The root library has to be set to generate AOT snapshots.
+    // If the input dill file has a root library, then Dart_LoadScript will
+    // ignore this dummy uri and set the root library to the one reported in
+    // the dill file. Since dill files are not dart script files,
+    // trying to resolve the root library URI based on the dill file name
+    // would not help.
+    //
+    // If the input dill file does not have a root library, then
+    // Dart_LoadScript will error.
+    Dart_Handle dummy_uri =
+        DartUtils::NewString("____dummy_gen_snapshot_root_library_uri____");
+    Dart_Handle library =
+        Dart_LoadScript(dummy_uri, Dart_Null(),
+                        reinterpret_cast<Dart_Handle>(kernel_program), 0, 0);
+    if (Dart_IsError(library)) {
+      Log::PrintErr("Unable to load root library from the input dill file.\n");
+      return kErrorExitCode;
+    }
+
+    if (commandline_packages_file != NULL) {
+      AddDependency(commandline_packages_file);
+    }
+
+    Dart_QualifiedFunctionName* entry_points =
+        ParseEntryPointsManifestIfPresent();
+    SetupStubNativeResolversForPrecompilation(entry_points);
+    SetupStubNativeResolvers();
+    CreateAndWritePrecompiledSnapshot(entry_points);
+
+    CreateAndWriteDependenciesFile();
+
+    CleanupEntryPointsCollection(entry_points);
+  } else {
+    CreateAndWriteCoreSnapshot();
+  }
+
+  Dart_ExitScope();
+  Dart_ShutdownIsolate();
+  error = Dart_Cleanup();
+  if (error != NULL) {
+    Log::PrintErr("VM cleanup failed: %s\n", error);
+    free(error);
+  }
+  EventHandler::Stop();
+  return 0;
+}
+
 int main(int argc, char** argv) {
   const int EXTRA_VM_ARGUMENTS = 2;
   CommandLineOptions vm_options(argc + EXTRA_VM_ARGUMENTS);
@@ -1396,6 +1471,19 @@
     return kErrorExitCode;
   }
 
+  // Sniff the script to check if it is actually a dill file.
+  void* kernel_program = NULL;
+  if (app_script_name != NULL) {
+    kernel_program = dfe.ReadScript(app_script_name);
+  }
+  if (kernel_program != NULL && !SnapshotKindAllowedFromKernel()) {
+    // TODO(sivachandra): Add check for the kernel program format (incremental
+    // vs batch).
+    Log::PrintErr(
+        "Can only generate core or aot snapshots from a kernel file.\n");
+    return kErrorExitCode;
+  }
+
   if (!Platform::Initialize()) {
     Log::PrintErr("Initialization failed\n");
     return kErrorExitCode;
@@ -1434,7 +1522,10 @@
   Dart_InitializeParams init_params;
   memset(&init_params, 0, sizeof(init_params));
   init_params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION;
-  if (app_script_name != NULL) {
+  if (app_script_name != NULL && kernel_program == NULL) {
+    // We need the service isolate to load script files.
+    // When generating snapshots from a kernel program, we do not need to load
+    // any script files.
     init_params.create = CreateServiceIsolate;
   }
   init_params.file_open = DartUtils::OpenFile;
@@ -1477,6 +1568,10 @@
     return kErrorExitCode;
   }
 
+  if (kernel_program != NULL) {
+    return GenerateSnapshotFromKernelProgram(kernel_program);
+  }
+
   Dart_IsolateFlags flags;
   Dart_IsolateFlagsInitialize(&flags);
 
@@ -1543,15 +1638,9 @@
     }
 
     Dart_Isolate isolate = NULL;
-    void* kernel_program = dfe.ReadScript(app_script_name);
-    if (kernel_program != NULL) {
-      isolate = Dart_CreateIsolateFromKernel(NULL, NULL, kernel_program, NULL,
-                                             isolate_data, &error);
-    } else {
-      isolate = Dart_CreateIsolate(NULL, NULL, isolate_snapshot_data,
-                                   isolate_snapshot_instructions, &flags,
-                                   isolate_data, &error);
-    }
+    isolate = Dart_CreateIsolate(NULL, NULL, isolate_snapshot_data,
+                                 isolate_snapshot_instructions, &flags,
+                                 isolate_data, &error);
     if (isolate == NULL) {
       Log::PrintErr("%s\n", error);
       free(error);
@@ -1570,20 +1659,6 @@
       AddDependency(commandline_packages_file);
     }
 
-    if (kernel_program != NULL) {
-      Dart_Handle resolved_uri = ResolveUriInWorkingDirectory(app_script_name);
-      CHECK_RESULT(resolved_uri);
-      Dart_Handle library =
-          Dart_LoadScript(resolved_uri, Dart_Null(),
-                          reinterpret_cast<Dart_Handle>(kernel_program), 0, 0);
-      CHECK_RESULT(library);
-    } else {
-      // Set up the library tag handler in such a manner that it will use the
-      // URL mapping specified on the command line to load the libraries.
-      result = Dart_SetLibraryTagHandler(CreateSnapshotLibraryTagHandler);
-      CHECK_RESULT(result);
-    }
-
     SetupStubNativeResolversForPrecompilation(entry_points);
 
     SetupStubNativeResolvers();
diff --git a/runtime/lib/bigint.dart b/runtime/lib/bigint.dart
index 2d37231..f08c19d 100644
--- a/runtime/lib/bigint.dart
+++ b/runtime/lib/bigint.dart
@@ -1843,7 +1843,7 @@
     if (m == 1) return 0;
     final mAsBigint = m._toBigint();
     int t = this;
-    if (t._neg || (t._absCompare(mAsBigint) >= 0)) {
+    if (this._neg || (this._absCompare(mAsBigint) >= 0)) {
       t %= mAsBigint;
       t = t._toBigint();
     }
diff --git a/runtime/lib/isolate_patch.dart b/runtime/lib/isolate_patch.dart
index 26d3b2f..99cb61b 100644
--- a/runtime/lib/isolate_patch.dart
+++ b/runtime/lib/isolate_patch.dart
@@ -325,7 +325,7 @@
       (VMLibraryHooks.resolvePackageUriFuture != null);
 
   @patch
-  static Future<Isolate> spawn(void entryPoint(message), var message,
+  static Future<Isolate> spawn<T>(void entryPoint(T message), T message,
       {bool paused: false,
       bool errorsAreFatal,
       SendPort onExit,
diff --git a/runtime/observatory/lib/src/elements/heap_map.dart b/runtime/observatory/lib/src/elements/heap_map.dart
index 41e1e98..6e313e8 100644
--- a/runtime/observatory/lib/src/elements/heap_map.dart
+++ b/runtime/observatory/lib/src/elements/heap_map.dart
@@ -108,8 +108,12 @@
         new NavVMMenuElement(_vm, _events, queue: _r.queue),
         new NavIsolateMenuElement(_isolate, _events, queue: _r.queue),
         navMenu('heap map'),
-        new NavRefreshElement(label: 'GC', queue: _r.queue)
-          ..onRefresh.listen((_) => _refresh(gc: true)),
+        new NavRefreshElement(label: 'Mark-Compact', queue: _r.queue)
+          ..onRefresh.listen((_) => _refresh(gc: "mark-compact")),
+        new NavRefreshElement(label: 'Mark-Sweep', queue: _r.queue)
+          ..onRefresh.listen((_) => _refresh(gc: "mark-sweep")),
+        new NavRefreshElement(label: 'Scavenge', queue: _r.queue)
+          ..onRefresh.listen((_) => _refresh(gc: "scavenge")),
         new NavRefreshElement(queue: _r.queue)
           ..onRefresh.listen((_) => _refresh()),
         new NavNotifyElement(_notifications, queue: _r.queue)
@@ -279,11 +283,11 @@
     });
   }
 
-  Future _refresh({gc: false}) {
+  Future _refresh({String gc}) {
     final isolate = _isolate as S.Isolate;
     var params = {};
-    if (gc) {
-      params['gc'] = 'full';
+    if (gc != null) {
+      params['gc'] = gc;
     }
     return isolate
         .invokeRpc('_getHeapMap', params)
diff --git a/runtime/observatory/tests/service/get_heap_map_rpc_test.dart b/runtime/observatory/tests/service/get_heap_map_rpc_test.dart
index a566d64..f60135a 100644
--- a/runtime/observatory/tests/service/get_heap_map_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_heap_map_rpc_test.dart
@@ -22,6 +22,45 @@
     expect(result['pages'][0]['objects'].length, isPositive);
     expect(result['pages'][0]['objects'][0], isPositive);
   },
+  (Isolate isolate) async {
+    var params = {'gc': 'scavenge'};
+    var result = await isolate.invokeRpcNoUpgrade('_getHeapMap', params);
+    expect(result['type'], equals('HeapMap'));
+    expect(result['freeClassId'], isPositive);
+    expect(result['unitSizeBytes'], isPositive);
+    expect(result['pageSizeBytes'], isPositive);
+    expect(result['classList'], isNotNull);
+    expect(result['pages'].length, isPositive);
+    expect(result['pages'][0]['objectStart'], new isInstanceOf<String>());
+    expect(result['pages'][0]['objects'].length, isPositive);
+    expect(result['pages'][0]['objects'][0], isPositive);
+  },
+  (Isolate isolate) async {
+    var params = {'gc': 'mark-sweep'};
+    var result = await isolate.invokeRpcNoUpgrade('_getHeapMap', params);
+    expect(result['type'], equals('HeapMap'));
+    expect(result['freeClassId'], isPositive);
+    expect(result['unitSizeBytes'], isPositive);
+    expect(result['pageSizeBytes'], isPositive);
+    expect(result['classList'], isNotNull);
+    expect(result['pages'].length, isPositive);
+    expect(result['pages'][0]['objectStart'], new isInstanceOf<String>());
+    expect(result['pages'][0]['objects'].length, isPositive);
+    expect(result['pages'][0]['objects'][0], isPositive);
+  },
+  (Isolate isolate) async {
+    var params = {'gc': 'mark-compact'};
+    var result = await isolate.invokeRpcNoUpgrade('_getHeapMap', params);
+    expect(result['type'], equals('HeapMap'));
+    expect(result['freeClassId'], isPositive);
+    expect(result['unitSizeBytes'], isPositive);
+    expect(result['pageSizeBytes'], isPositive);
+    expect(result['classList'], isNotNull);
+    expect(result['pages'].length, isPositive);
+    expect(result['pages'][0]['objectStart'], new isInstanceOf<String>());
+    expect(result['pages'][0]['objects'].length, isPositive);
+    expect(result['pages'][0]['objects'][0], isPositive);
+  },
 ];
 
 main(args) async => runIsolateTests(args, tests);
diff --git a/runtime/observatory/tests/service/next_through_multi_catch_test.dart b/runtime/observatory/tests/service/next_through_multi_catch_test.dart
new file mode 100644
index 0000000..ba326f8
--- /dev/null
+++ b/runtime/observatory/tests/service/next_through_multi_catch_test.dart
@@ -0,0 +1,42 @@
+// 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 'test_helper.dart';
+import 'service_test_common.dart';
+
+const int LINE = 12;
+const String file = "next_through_multi_catch_test.dart";
+
+code() {
+  try {
+    throw "Boom!";
+  } on StateError {
+    print("StateError");
+  } on ArgumentError catch (e) {
+    print("ArgumentError: $e");
+  } catch (e) {
+    print(e);
+  }
+}
+
+List<String> stops = [];
+List<String> expected = [
+  "$file:${LINE+1}:5", // on 'throw'
+  "$file:${LINE+2}:5", // on 'on'
+  "$file:${LINE+4}:5", // on 'on'
+  "$file:${LINE+7}:5", // on 'print'
+  "$file:${LINE+9}:1", // on ending '}'
+];
+
+var tests = [
+  hasPausedAtStart,
+  setBreakpointAtLine(LINE),
+  runStepThroughProgramRecordingStops(stops),
+  checkRecordedStops(stops, expected)
+];
+
+main(args) {
+  runIsolateTestsSynchronous(args, tests,
+      testeeConcurrent: code, pause_on_start: true, pause_on_exit: true);
+}
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index 7269460..2c7dea1 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -424,6 +424,9 @@
   (((static_cast<uint64_t>(a) << 32) + 0x##b##u))
 
 // Integer constants.
+const int8_t kMinInt8 = 0x80;
+const int8_t kMaxInt8 = 0x7F;
+const uint8_t kMaxUint8 = 0xFF;
 const int16_t kMinInt16 = 0x8000;
 const int16_t kMaxInt16 = 0x7FFF;
 const uint16_t kMaxUint16 = 0xFFFF;
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 9d170ba..05d9029 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -49,8 +49,6 @@
 cc/CorelibIsolateStartup: Skip # OOM crash can bring down the OS.
 dart/data_uri_spawn_test: Skip # TODO(zra): package:unittest is not in the image.
 cc/Read: Fail  # TODO(zra): Investigate, ../../dart/runtime/bin/file_test.cc: 34: error: expected: !file->WriteByte(1)
-dart/byte_array_test: Crash # TODO(zra): Investigate
-dart/byte_array_optimized_test: Crash # TODO(zra): Investigate
 
 # Profiler is completely disabled in SIMDBC builds.
 # On the simluator stack traces produced by the Profiler do not match
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 6ecbffd..d8a4e77 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -5619,8 +5619,6 @@
   isolate()->ValidateClassTable();
   isolate()->ValidateConstants();
 #endif  // DEBUG
-  // Can't have any mutation happening while we're serializing.
-  ASSERT(isolate()->background_compiler() == NULL);
 
   // TODO(rmacnak): The special case for AOT causes us to always generate the
   // same VM isolate snapshot for every app. AOT snapshots should be cleaned up
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 160666f..85ea616 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -3397,6 +3397,18 @@
         }
         DEBUG_ASSERT(flow_graph->VerifyUseLists());
 
+        CheckStackOverflowElimination::EliminateStackOverflow(flow_graph);
+
+        if (flow_graph->Canonicalize()) {
+          // To fully remove redundant boxing (e.g. BoxDouble used only in
+          // environments and UnboxDouble instructions) instruction we
+          // first need to replace all their uses and then fold them away.
+          // For now we just repeat Canonicalize twice to do that.
+          // TODO(vegorov): implement a separate representation folding pass.
+          flow_graph->Canonicalize();
+        }
+        DEBUG_ASSERT(flow_graph->VerifyUseLists());
+
         if (sinking != NULL) {
 #ifndef PRODUCT
           TimelineDurationScope tds2(
diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc
index 24d97ec..5b3efa4 100644
--- a/runtime/vm/compiler/backend/constant_propagator.cc
+++ b/runtime/vm/compiler/backend/constant_propagator.cc
@@ -322,6 +322,8 @@
   }
 }
 
+void ConstantPropagator::VisitAssertSubtype(AssertSubtypeInstr* instr) {}
+
 void ConstantPropagator::VisitAssertBoolean(AssertBooleanInstr* instr) {
   const Object& value = instr->value()->definition()->constant_value();
   if (IsNonConstant(value)) {
diff --git a/runtime/vm/compiler/backend/flow_graph.cc b/runtime/vm/compiler/backend/flow_graph.cc
index fa5e120..55af27c 100644
--- a/runtime/vm/compiler/backend/flow_graph.cc
+++ b/runtime/vm/compiler/backend/flow_graph.cc
@@ -26,7 +26,8 @@
 
 FlowGraph::FlowGraph(const ParsedFunction& parsed_function,
                      GraphEntryInstr* graph_entry,
-                     intptr_t max_block_id)
+                     intptr_t max_block_id,
+                     PrologueInfo prologue_info)
     : thread_(Thread::Current()),
       parent_(),
       current_ssa_temp_index_(0),
@@ -43,6 +44,7 @@
       constant_dead_(NULL),
       constant_empty_context_(NULL),
       licm_allowed_(true),
+      prologue_info_(prologue_info),
       loop_headers_(NULL),
       loop_invariant_loads_(NULL),
       deferred_prefixes_(parsed_function.deferred_prefixes()),
@@ -1410,8 +1412,16 @@
   intptr_t size = 0;
   // Iterate each block, skipping the graph entry.
   for (intptr_t i = 1; i < preorder_.length(); ++i) {
-    for (ForwardInstructionIterator it(preorder_[i]); !it.Done();
-         it.Advance()) {
+    BlockEntryInstr* block = preorder_[i];
+
+    // Skip any blocks from the prologue to make them not count towards the
+    // inlining instruction budget.
+    const intptr_t block_id = block->block_id();
+    if (prologue_info_.Contains(block_id)) {
+      continue;
+    }
+
+    for (ForwardInstructionIterator it(block); !it.Done(); it.Advance()) {
       ++size;
     }
   }
diff --git a/runtime/vm/compiler/backend/flow_graph.h b/runtime/vm/compiler/backend/flow_graph.h
index ae2d6c1..c32baaa 100644
--- a/runtime/vm/compiler/backend/flow_graph.h
+++ b/runtime/vm/compiler/backend/flow_graph.h
@@ -73,12 +73,32 @@
   }
 };
 
+struct PrologueInfo {
+  // The first blockid used for prologue building.  This information can be used
+  // by the inliner for budget calculations: The prologue code falls away when
+  // inlining, so we should not include it in the budget.
+  const intptr_t min_block_id;
+
+  // The last blockid used for prologue building.  This information can be used
+  // by the inliner for budget calculations: The prologue code falls away when
+  // inlining, so we should not include it in the budget.
+  const intptr_t max_block_id;
+
+  PrologueInfo(intptr_t min, intptr_t max)
+      : min_block_id(min), max_block_id(max) {}
+
+  bool Contains(intptr_t block_id) const {
+    return min_block_id <= block_id && block_id <= max_block_id;
+  }
+};
+
 // Class to encapsulate the construction and manipulation of the flow graph.
 class FlowGraph : public ZoneAllocated {
  public:
   FlowGraph(const ParsedFunction& parsed_function,
             GraphEntryInstr* graph_entry,
-            intptr_t max_block_id);
+            intptr_t max_block_id,
+            PrologueInfo prologue_info);
 
   // Function properties.
   const ParsedFunction& parsed_function() const { return parsed_function_; }
@@ -235,6 +255,8 @@
   // after this point.
   void disallow_licm() { licm_allowed_ = false; }
 
+  PrologueInfo prologue_info() const { return prologue_info_; }
+
   const ZoneGrowableArray<BlockEntryInstr*>& LoopHeaders() {
     if (loop_headers_ == NULL) {
       loop_headers_ = ComputeLoops();
@@ -401,6 +423,8 @@
 
   bool licm_allowed_;
 
+  const PrologueInfo prologue_info_;
+
   ZoneGrowableArray<BlockEntryInstr*>* loop_headers_;
   ZoneGrowableArray<BitVector*>* loop_invariant_loads_;
   ZoneGrowableArray<const LibraryPrefix*>* deferred_prefixes_;
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index 43d4144..dd82dd7 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -188,12 +188,10 @@
   exception_handlers_list_ = new (zone()) ExceptionHandlerList();
   catch_entry_state_maps_builder_ = new (zone()) CatchEntryStateMapBuilder();
   block_info_.Clear();
-  // Conservative detection of leaf routines used to remove the stack check
-  // on function entry.
-  bool is_leaf = is_optimizing() && !flow_graph().IsCompiledForOsr();
   // Initialize block info and search optimized (non-OSR) code for calls
   // indicating a non-leaf routine and calls without IC data indicating
   // possible reoptimization.
+
   for (int i = 0; i < block_order_.length(); ++i) {
     block_info_.Add(new (zone()) BlockInfo());
     if (is_optimizing() && !flow_graph().IsCompiledForOsr()) {
@@ -211,23 +209,9 @@
         if ((ic_data != NULL) && (ic_data->NumberOfUsedChecks() == 0)) {
           may_reoptimize_ = true;
         }
-        if (is_leaf && !current->IsCheckStackOverflow() &&
-            !current->IsParallelMove()) {
-          // Note that we do not care if the code contains instructions that
-          // can deoptimize.
-          LocationSummary* locs = current->locs();
-          if ((locs != NULL) && locs->can_call()) {
-            is_leaf = false;
-          }
-        }
       }
     }
   }
-  if (is_leaf) {
-    // Remove the stack overflow check at function entry.
-    Instruction* first = flow_graph_.graph_entry()->normal_entry()->next();
-    if (first->IsCheckStackOverflow()) first->RemoveFromGraph();
-  }
   if (!is_optimizing()) {
     // Initialize edge counter array.
     const intptr_t num_counters = flow_graph_.preorder().length();
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 0bad94a..c1a8172 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -408,6 +408,13 @@
   return dst_type().raw() == other_assert->dst_type().raw();
 }
 
+bool AssertSubtypeInstr::AttributesEqual(Instruction* other) const {
+  AssertSubtypeInstr* other_assert = other->AsAssertSubtype();
+  ASSERT(other_assert != NULL);
+  return super_type().raw() == other_assert->super_type().raw() &&
+         sub_type().raw() == other_assert->sub_type().raw();
+}
+
 bool StrictCompareInstr::AttributesEqual(Instruction* other) const {
   StrictCompareInstr* other_op = other->AsStrictCompare();
   ASSERT(other_op != NULL);
@@ -2911,6 +2918,9 @@
                                    TokenPosition::kNoSource);
   }
   if (HasParallelMove()) {
+    if (Assembler::EmittingComments()) {
+      compiler->EmitComment(parallel_move());
+    }
     compiler->parallel_move_resolver()->EmitNativeCode(parallel_move());
   }
 }
@@ -3511,6 +3521,27 @@
 #endif  // !defined(TARGET_ARCH_DBC)
 }
 
+void AssertSubtypeInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+#if !defined(TARGET_ARCH_DBC)
+  ASSERT(sub_type().IsFinalized());
+  ASSERT(super_type().IsFinalized());
+
+  __ PushObject(sub_type());
+  __ PushObject(super_type());
+  __ PushRegister(locs()->in(0).reg());
+  __ PushRegister(locs()->in(1).reg());
+  __ PushObject(dst_name());
+
+  compiler->GenerateRuntimeCall(token_pos(), deopt_id(),
+                                kSubtypeCheckRuntimeEntry, 5, locs());
+
+  __ Drop(5);
+#else
+  // TODO(sjindel): Support strong mode in DBC
+  UNREACHABLE();
+#endif
+}
+
 LocationSummary* DeoptimizeInstr::MakeLocationSummary(Zone* zone,
                                                       bool opt) const {
   return new (zone) LocationSummary(zone, 0, 0, LocationSummary::kNoCall);
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index cee6c4d..3f2d853 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -382,6 +382,7 @@
   M(IndirectGoto)                                                              \
   M(Branch)                                                                    \
   M(AssertAssignable)                                                          \
+  M(AssertSubtype)                                                             \
   M(AssertBoolean)                                                             \
   M(SpecialParameter)                                                          \
   M(ClosureCall)                                                               \
@@ -2591,6 +2592,62 @@
   DISALLOW_COPY_AND_ASSIGN(UnboxedConstantInstr);
 };
 
+// Checks that one type is a subtype of another (e.g. for type parameter bounds
+// checking). Throws a TypeError otherwise. Both types are instantiated at
+// runtime as necessary.
+class AssertSubtypeInstr : public TemplateInstruction<2, Throws, Pure> {
+ public:
+  AssertSubtypeInstr(TokenPosition token_pos,
+                     Value* instantiator_type_arguments,
+                     Value* function_type_arguments,
+                     const AbstractType& sub_type,
+                     const AbstractType& super_type,
+                     const String& dst_name,
+                     intptr_t deopt_id)
+      : TemplateInstruction(deopt_id),
+        token_pos_(token_pos),
+        sub_type_(AbstractType::ZoneHandle(sub_type.raw())),
+        super_type_(AbstractType::ZoneHandle(super_type.raw())),
+        dst_name_(String::ZoneHandle(dst_name.raw())) {
+    ASSERT(!super_type.IsNull());
+    ASSERT(!super_type.IsTypeRef());
+    ASSERT(!sub_type.IsNull());
+    ASSERT(!sub_type.IsTypeRef());
+    ASSERT(!dst_name.IsNull());
+    SetInputAt(0, instantiator_type_arguments);
+    SetInputAt(1, function_type_arguments);
+  }
+
+  DECLARE_INSTRUCTION(AssertSubtype);
+
+  Value* instantiator_type_arguments() const { return inputs_[1]; }
+  Value* function_type_arguments() const { return inputs_[2]; }
+
+  virtual TokenPosition token_pos() const { return token_pos_; }
+  const AbstractType& super_type() const { return super_type_; }
+  const AbstractType& sub_type() const { return sub_type_; }
+
+  const String& dst_name() const { return dst_name_; }
+
+  virtual bool ComputeCanDeoptimize() const { return true; }
+
+  virtual bool CanBecomeDeoptimizationTarget() const { return true; }
+
+  virtual bool AttributesEqual(Instruction* other) const;
+
+  PRINT_OPERANDS_TO_SUPPORT
+
+  // TODO(sjindel): Implement Canonicalize to finalize dst_type when the
+  // instantiator and function type args are constant.
+ private:
+  const TokenPosition token_pos_;
+  const AbstractType& sub_type_;
+  const AbstractType& super_type_;
+  const String& dst_name_;
+
+  DISALLOW_COPY_AND_ASSIGN(AssertSubtypeInstr);
+};
+
 class AssertAssignableInstr : public TemplateDefinition<3, Throws, Pure> {
  public:
   AssertAssignableInstr(TokenPosition token_pos,
@@ -3516,27 +3573,28 @@
   DISALLOW_COPY_AND_ASSIGN(StoreLocalInstr);
 };
 
-class NativeCallInstr : public TemplateDefinition<0, Throws> {
+class NativeCallInstr : public TemplateDartCall<0> {
  public:
-  explicit NativeCallInstr(NativeBodyNode* node)
-      : native_name_(&node->native_c_function_name()),
-        function_(&node->function()),
-        native_c_function_(NULL),
-        is_bootstrap_native_(false),
-        link_lazily_(node->link_lazily()),
-        token_pos_(node->token_pos()) {}
-
   NativeCallInstr(const String* name,
                   const Function* function,
                   bool link_lazily,
-                  TokenPosition position)
-      : native_name_(name),
+                  TokenPosition position,
+                  ZoneGrowableArray<PushArgumentInstr*>* args)
+      : TemplateDartCall(Thread::kNoDeoptId,
+                         0,
+                         Array::null_array(),
+                         args,
+                         position),
+        native_name_(name),
         function_(function),
         native_c_function_(NULL),
         is_bootstrap_native_(false),
         is_auto_scope_(true),
         link_lazily_(link_lazily),
-        token_pos_(position) {}
+        token_pos_(position) {
+    ASSERT(name->IsZoneHandle());
+    ASSERT(function->IsZoneHandle());
+  }
 
   DECLARE_INSTRUCTION(NativeCall)
 
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index e3c1647..f8312ed 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -343,6 +343,17 @@
   return summary;
 }
 
+LocationSummary* AssertSubtypeInstr::MakeLocationSummary(Zone* zone,
+                                                         bool opt) const {
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* summary = new (zone)
+      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
+  summary->set_in(0, Location::RegisterLocation(R2));  // Instant. type args.
+  summary->set_in(1, Location::RegisterLocation(R1));  // Function type args.
+  return summary;
+}
+
 LocationSummary* AssertBooleanInstr::MakeLocationSummary(Zone* zone,
                                                          bool opt) const {
   const intptr_t kNumInputs = 1;
@@ -805,15 +816,15 @@
   SetupNative();
   const Register result = locs()->out(0).reg();
 
+  // All arguments are already @SP due to preceding PushArgument()s.
+  ASSERT(ArgumentCount() == function().NumParameters());
+
   // Push the result place holder initialized to NULL.
   __ PushObject(Object::null_object());
+
   // Pass a pointer to the first argument in R2.
-  if (!function().HasOptionalParameters()) {
-    __ AddImmediate(
-        R2, FP, (kParamEndSlotFromFp + function().NumParameters()) * kWordSize);
-  } else {
-    __ AddImmediate(R2, FP, kFirstLocalSlotFromFp * kWordSize);
-  }
+  __ add(R2, SP, Operand(ArgumentCount() * kWordSize));
+
   // Compute the effective address. When running under the simulator,
   // this is a redirection address that forces the simulator to call
   // into the runtime system.
@@ -854,6 +865,8 @@
                            locs());
   }
   __ Pop(result);
+
+  __ Drop(ArgumentCount());  // Drop the arguments.
 }
 
 LocationSummary* OneByteStringFromCharCodeInstr::MakeLocationSummary(
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index 2f85c2f..2a4e365 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -329,6 +329,17 @@
   return summary;
 }
 
+LocationSummary* AssertSubtypeInstr::MakeLocationSummary(Zone* zone,
+                                                         bool opt) const {
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* summary = new (zone)
+      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
+  summary->set_in(0, Location::RegisterLocation(R1));  // Instant. type args.
+  summary->set_in(1, Location::RegisterLocation(R2));  // Function type args.
+  return summary;
+}
+
 LocationSummary* AssertBooleanInstr::MakeLocationSummary(Zone* zone,
                                                          bool opt) const {
   const intptr_t kNumInputs = 1;
@@ -664,15 +675,15 @@
   SetupNative();
   const Register result = locs()->out(0).reg();
 
+  // All arguments are already @SP due to preceding PushArgument()s.
+  ASSERT(ArgumentCount() == function().NumParameters());
+
   // Push the result place holder initialized to NULL.
   __ PushObject(Object::null_object());
+
   // Pass a pointer to the first argument in R2.
-  if (!function().HasOptionalParameters()) {
-    __ AddImmediate(
-        R2, FP, (kParamEndSlotFromFp + function().NumParameters()) * kWordSize);
-  } else {
-    __ AddImmediate(R2, FP, kFirstLocalSlotFromFp * kWordSize);
-  }
+  __ AddImmediate(R2, SP, ArgumentCount() * kWordSize);
+
   // Compute the effective address. When running under the simulator,
   // this is a redirection address that forces the simulator to call
   // into the runtime system.
@@ -713,6 +724,8 @@
                            locs());
   }
   __ Pop(result);
+
+  __ Drop(ArgumentCount());  // Drop the arguments.
 }
 
 LocationSummary* OneByteStringFromCharCodeInstr::MakeLocationSummary(
diff --git a/runtime/vm/compiler/backend/il_dbc.cc b/runtime/vm/compiler/backend/il_dbc.cc
index 2bedf6a..6e8d459 100644
--- a/runtime/vm/compiler/backend/il_dbc.cc
+++ b/runtime/vm/compiler/backend/il_dbc.cc
@@ -183,6 +183,11 @@
                              Location::SameAsFirstInput(),
                              LocationSummary::kCall);
 
+DEFINE_MAKE_LOCATION_SUMMARY(AssertSubtype,
+                             2,
+                             Location::NoLocation(),
+                             LocationSummary::kCall);
+
 EMIT_NATIVE_CODE(AssertBoolean,
                  1,
                  Location::SameAsFirstInput(),
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index 3e25387..2514db4 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -210,6 +210,17 @@
   return summary;
 }
 
+LocationSummary* AssertSubtypeInstr::MakeLocationSummary(Zone* zone,
+                                                         bool opt) const {
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* summary = new (zone)
+      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
+  summary->set_in(0, Location::RegisterLocation(EDX));  // Instant. type args.
+  summary->set_in(1, Location::RegisterLocation(ECX));  // Function type args.
+  return summary;
+}
+
 LocationSummary* AssertBooleanInstr::MakeLocationSummary(Zone* zone,
                                                          bool opt) const {
   const intptr_t kNumInputs = 1;
@@ -737,16 +748,15 @@
   Register result = locs()->out(0).reg();
   const intptr_t argc_tag = NativeArguments::ComputeArgcTag(function());
 
+  // All arguments are already @ESP due to preceding PushArgument()s.
+  ASSERT(ArgumentCount() == function().NumParameters());
+
   // Push the result place holder initialized to NULL.
   __ PushObject(Object::null_object());
+
   // Pass a pointer to the first argument in EAX.
-  if (!function().HasOptionalParameters()) {
-    __ leal(EAX,
-            Address(EBP, (kParamEndSlotFromFp + function().NumParameters()) *
-                             kWordSize));
-  } else {
-    __ leal(EAX, Address(EBP, kFirstLocalSlotFromFp * kWordSize));
-  }
+  __ leal(EAX, Address(ESP, ArgumentCount() * kWordSize));
+
   __ movl(EDX, Immediate(argc_tag));
 
   const StubEntry* stub_entry;
@@ -766,6 +776,8 @@
                          locs());
 
   __ popl(result);
+
+  __ Drop(ArgumentCount());  // Drop the arguments.
 }
 
 static bool CanBeImmediateIndex(Value* value, intptr_t cid) {
diff --git a/runtime/vm/compiler/backend/il_printer.cc b/runtime/vm/compiler/backend/il_printer.cc
index 9db0977..c6b06ba 100644
--- a/runtime/vm/compiler/backend/il_printer.cc
+++ b/runtime/vm/compiler/backend/il_printer.cc
@@ -462,6 +462,16 @@
   f->Print(")");
 }
 
+void AssertSubtypeInstr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("%s, %s, '%s',", sub_type().ToCString(), super_type().ToCString(),
+           dst_name().ToCString());
+  f->Print(" instantiator_type_args(");
+  instantiator_type_arguments()->PrintTo(f);
+  f->Print("), function_type_args(");
+  function_type_arguments()->PrintTo(f);
+  f->Print(")");
+}
+
 void AssertBooleanInstr::PrintOperandsTo(BufferFormatter* f) const {
   value()->PrintTo(f);
 }
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index 4ca1828..d21ef72 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -309,6 +309,17 @@
   return summary;
 }
 
+LocationSummary* AssertSubtypeInstr::MakeLocationSummary(Zone* zone,
+                                                         bool opt) const {
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* summary = new (zone)
+      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
+  summary->set_in(0, Location::RegisterLocation(RDX));  // Instant. type args
+  summary->set_in(1, Location::RegisterLocation(RCX));  // Function type args
+  return summary;
+}
+
 LocationSummary* AssertBooleanInstr::MakeLocationSummary(Zone* zone,
                                                          bool opt) const {
   const intptr_t kNumInputs = 1;
@@ -708,16 +719,15 @@
   Register result = locs()->out(0).reg();
   const intptr_t argc_tag = NativeArguments::ComputeArgcTag(function());
 
+  // All arguments are already @RSP due to preceding PushArgument()s.
+  ASSERT(ArgumentCount() == function().NumParameters());
+
   // Push the result place holder initialized to NULL.
   __ PushObject(Object::null_object());
+
   // Pass a pointer to the first argument in RAX.
-  if (!function().HasOptionalParameters()) {
-    __ leaq(RAX,
-            Address(RBP, (kParamEndSlotFromFp + function().NumParameters()) *
-                             kWordSize));
-  } else {
-    __ leaq(RAX, Address(RBP, kFirstLocalSlotFromFp * kWordSize));
-  }
+  __ leaq(RAX, Address(RSP, ArgumentCount() * kWordSize));
+
   __ LoadImmediate(R10, Immediate(argc_tag));
   const StubEntry* stub_entry;
   if (link_lazily()) {
@@ -740,6 +750,8 @@
                            locs());
   }
   __ popq(result);
+
+  __ Drop(ArgumentCount());  // Drop the arguments.
 }
 
 static bool CanBeImmediateIndex(Value* index, intptr_t cid) {
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 3ad9656..3725d0d 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -152,6 +152,13 @@
     instruction_count_ = 0;
     for (BlockIterator block_it = graph.postorder_iterator(); !block_it.Done();
          block_it.Advance()) {
+      // Skip any blocks from the prologue to make them not count towards the
+      // inlining instruction budget.
+      const intptr_t block_id = block_it.Current()->block_id();
+      if (graph.prologue_info().Contains(block_id)) {
+        continue;
+      }
+
       for (ForwardInstructionIterator it(block_it.Current()); !it.Done();
            it.Advance()) {
         Instruction* current = it.Current();
diff --git a/runtime/vm/compiler/backend/redundancy_elimination.cc b/runtime/vm/compiler/backend/redundancy_elimination.cc
index 4351673..bc4c019 100644
--- a/runtime/vm/compiler/backend/redundancy_elimination.cc
+++ b/runtime/vm/compiler/backend/redundancy_elimination.cc
@@ -3300,6 +3300,38 @@
   }
 }
 
+void CheckStackOverflowElimination::EliminateStackOverflow(FlowGraph* graph) {
+  CheckStackOverflowInstr* first_stack_overflow_instr = NULL;
+  for (BlockIterator block_it = graph->reverse_postorder_iterator();
+       !block_it.Done(); block_it.Advance()) {
+    BlockEntryInstr* entry = block_it.Current();
+
+    for (ForwardInstructionIterator it(entry); !it.Done(); it.Advance()) {
+      Instruction* current = it.Current();
+
+      if (CheckStackOverflowInstr* instr = current->AsCheckStackOverflow()) {
+        if (first_stack_overflow_instr == NULL) {
+          first_stack_overflow_instr = instr;
+          ASSERT(!first_stack_overflow_instr->in_loop());
+        }
+        continue;
+      }
+
+      if (current->IsBranch()) {
+        current = current->AsBranch()->comparison();
+      }
+
+      if (current->HasUnknownSideEffects()) {
+        return;
+      }
+    }
+  }
+
+  if (first_stack_overflow_instr != NULL) {
+    first_stack_overflow_instr->RemoveFromGraph();
+  }
+}
+
 }  // namespace dart
 
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
diff --git a/runtime/vm/compiler/backend/redundancy_elimination.h b/runtime/vm/compiler/backend/redundancy_elimination.h
index fca2590..0e9e1dd 100644
--- a/runtime/vm/compiler/backend/redundancy_elimination.h
+++ b/runtime/vm/compiler/backend/redundancy_elimination.h
@@ -133,6 +133,12 @@
   FlowGraph* const flow_graph_;
 };
 
+class CheckStackOverflowElimination : public AllStatic {
+ public:
+  // For leaf functions with only a single [StackOverflowInstr] we remove it.
+  static void EliminateStackOverflow(FlowGraph* graph);
+};
+
 }  // namespace dart
 
 #endif  // RUNTIME_VM_COMPILER_BACKEND_REDUNDANCY_ELIMINATION_H_
diff --git a/runtime/vm/compiler/backend/type_propagator.cc b/runtime/vm/compiler/backend/type_propagator.cc
index a8a8a84..8d6e8ef 100644
--- a/runtime/vm/compiler/backend/type_propagator.cc
+++ b/runtime/vm/compiler/backend/type_propagator.cc
@@ -343,6 +343,8 @@
             new CompileType(instr->ComputeType()));
 }
 
+void FlowGraphTypePropagator::VisitAssertSubtype(AssertSubtypeInstr* instr) {}
+
 void FlowGraphTypePropagator::VisitBranch(BranchInstr* instr) {
   StrictCompareInstr* comparison = instr->comparison()->AsStrictCompare();
   if (comparison == NULL) return;
diff --git a/runtime/vm/compiler/backend/type_propagator.h b/runtime/vm/compiler/backend/type_propagator.h
index 0643a2e..28627ba 100644
--- a/runtime/vm/compiler/backend/type_propagator.h
+++ b/runtime/vm/compiler/backend/type_propagator.h
@@ -33,6 +33,7 @@
   virtual void VisitCheckNull(CheckNullInstr* instr);
   virtual void VisitGuardFieldClass(GuardFieldClassInstr* instr);
   virtual void VisitAssertAssignable(AssertAssignableInstr* instr);
+  virtual void VisitAssertSubtype(AssertSubtypeInstr* instr);
   virtual void VisitInstanceCall(InstanceCallInstr* instr);
   virtual void VisitPolymorphicInstanceCall(
       PolymorphicInstanceCallInstr* instr);
diff --git a/runtime/vm/compiler/frontend/flow_graph_builder.cc b/runtime/vm/compiler/frontend/flow_graph_builder.cc
index fb47489..73fad65 100644
--- a/runtime/vm/compiler/frontend/flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/flow_graph_builder.cc
@@ -3320,7 +3320,18 @@
     }
   }
   InlineBailout("EffectGraphVisitor::VisitNativeBodyNode");
-  NativeCallInstr* native_call = new (Z) NativeCallInstr(node);
+
+  const ParsedFunction& pf = owner_->parsed_function();
+  const String& name = String::ZoneHandle(Z, function.native_name());
+  ZoneGrowableArray<PushArgumentInstr*>& args =
+      *new (Z) ZoneGrowableArray<PushArgumentInstr*>(function.NumParameters());
+  for (intptr_t i = 0; i < function.NumParameters(); ++i) {
+    LocalVariable* parameter = pf.node_sequence()->scope()->VariableAt(i);
+    Value* value = Bind(new (Z) LoadLocalInstr(*parameter, node->token_pos()));
+    args.Add(PushArgument(value));
+  }
+  NativeCallInstr* native_call = new (Z) NativeCallInstr(
+      &name, &function, FLAG_link_natives_lazily, node->token_pos(), &args);
   ReturnDefinition(native_call);
 }
 
@@ -4417,9 +4428,11 @@
     graph_entry_->RelinkToOsrEntry(Z, last_used_block_id_);
   }
 
-  FlowGraph* graph =
-      new (Z) FlowGraph(parsed_function(), graph_entry_, last_used_block_id_);
+  PrologueInfo prologue_info(-1, -1);
+  FlowGraph* graph = new (Z) FlowGraph(parsed_function(), graph_entry_,
+                                       last_used_block_id_, prologue_info);
   graph->set_await_token_positions(await_token_positions_);
+
   return graph;
 }
 
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 9b1bb85..5d4ce6a 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -727,13 +727,12 @@
       needs_expr_temp_(false),
       builder_(new StreamingFlowGraphBuilder(
           &translation_helper_,
-          parsed_function->function().script(),
+          Script::Handle(Z, parsed_function->function().script()),
           zone_,
           TypedData::Handle(Z, parsed_function->function().KernelData()),
           parsed_function->function().KernelDataProgramOffset())),
       type_translator_(builder_, /*finalize=*/true) {
-  Script& script = Script::Handle(Z, parsed_function->function().script());
-  H.InitFromScript(script);
+  H.InitFromScript(builder_->script());
   type_translator_.active_class_ = &active_class_;
 }
 
@@ -1126,6 +1125,9 @@
     case kLocalInitializer:
       VisitVariableDeclaration();  // read variable.
       return;
+    case kAssertInitializer:
+      VisitStatement();
+      return;
     default:
       H.ReportError("Unsupported tag at this point: %d.", tag);
       UNREACHABLE();
@@ -1607,6 +1609,7 @@
 
         EnterScope(offset);
 
+        builder_->ReadPosition();   // read position.
         VisitDartType();            // Read the guard.
         tag = builder_->ReadTag();  // read first part of exception.
         if (tag == kSomething) {
@@ -2505,7 +2508,7 @@
       zone_(builder_->zone_),
       translation_helper_(builder_->translation_helper_),
       type_translator_(builder_->type_translator_),
-      script_(Script::Handle(zone_, builder_->Script())),
+      script_(builder_->script()),
       result_(Instance::Handle(zone_)) {}
 
 bool StreamingConstantEvaluator::IsCached(intptr_t offset) {
@@ -3483,9 +3486,10 @@
   }
   body += Return(TokenPosition::kNoSource);
 
+  PrologueInfo prologue_info(-1, -1);
   return new (Z)
       FlowGraph(*parsed_function(), flow_graph_builder_->graph_entry_,
-                flow_graph_builder_->next_block_id_ - 1);
+                flow_graph_builder_->last_used_block_id_, prologue_info);
 }
 
 FlowGraph* StreamingFlowGraphBuilder::BuildGraphOfFieldAccessor(
@@ -3541,9 +3545,10 @@
   }
   body += Return(TokenPosition::kNoSource);
 
+  PrologueInfo prologue_info(-1, -1);
   return new (Z)
       FlowGraph(*parsed_function(), flow_graph_builder_->graph_entry_,
-                flow_graph_builder_->next_block_id_ - 1);
+                flow_graph_builder_->last_used_block_id_, prologue_info);
 }
 
 void StreamingFlowGraphBuilder::SetupDefaultParameterValues() {
@@ -3720,6 +3725,10 @@
           instructions += BuildFieldInitializer(canonical_name);  // read value.
           break;
         }
+        case kAssertInitializer: {
+          instructions += BuildStatement();
+          break;
+        }
         case kSuperInitializer: {
           NameIndex canonical_target =
               ReadCanonicalNameReference();  // read target_reference.
@@ -3829,6 +3838,14 @@
   Fragment body(normal_entry);
   body += flow_graph_builder_->CheckStackOverflowInPrologue();
 
+  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);
+    body += LoadLocal(parsed_function()->function_type_arguments());
+    body += PushArgument();
+  }
+
   // Load all the arguments.
   if (!target.is_static()) {
     // The context has a fixed shape: a single variable which is the
@@ -3873,14 +3890,15 @@
   intptr_t argument_count = positional_argument_count + named_argument_count;
   if (!target.is_static()) ++argument_count;
   body += StaticCall(TokenPosition::kNoSource, target, argument_count,
-                     argument_names, ICData::kNoRebind);
+                     argument_names, ICData::kNoRebind, type_args_len);
 
   // Return the result.
   body += Return(function_node_helper.end_position_);
 
+  PrologueInfo prologue_info(-1, -1);
   return new (Z)
       FlowGraph(*parsed_function(), flow_graph_builder_->graph_entry_,
-                flow_graph_builder_->next_block_id_ - 1);
+                flow_graph_builder_->last_used_block_id_, prologue_info);
 }
 
 LocalVariable* StreamingFlowGraphBuilder::LookupParameterDirect(
@@ -4006,6 +4024,8 @@
   }
 
   FunctionNodeHelper function_node_helper(this);
+  function_node_helper.ReadUntilExcluding(FunctionNodeHelper::kTypeParameters);
+  intptr_t type_parameters_offset = ReaderOffset();
   function_node_helper.ReadUntilExcluding(
       FunctionNodeHelper::kPositionalParameters);
   intptr_t first_parameter_offset = -1;
@@ -4053,9 +4073,41 @@
   // If we run in checked mode or strong mode, we have to check the type of the
   // passed arguments.
   if (I->argument_type_checks()) {
-    // Positional.
+    AlternativeReadingScope _(reader_);
+    SetOffset(type_parameters_offset);
+
+    // Type parameters
     intptr_t list_length = ReadListLength();
     for (intptr_t i = 0; i < list_length; ++i) {
+      ReadFlags();                                         // skip flags
+      SkipListOfExpressions();                             // skip annotations
+      String& name = H.DartSymbol(ReadStringReference());  // read name
+      const AbstractType& bound = T.BuildType();           // read 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();
+    for (intptr_t i = 0; i < list_length; ++i) {
       // ith variable offset.
       body += LoadLocal(LookupVariable(ReaderOffset() + data_program_offset_));
       body += CheckArgumentType(ReaderOffset() + data_program_offset_);
@@ -4073,7 +4125,7 @@
       SkipVariableDeclaration();  // read ith variable.
     }
 
-    function_node_helper.SetJustRead(FunctionNodeHelper::kNamedParameters);
+    function_node_helper.SetNext(FunctionNodeHelper::kPositionalParameters);
   }
 
   function_node_helper.ReadUntilExcluding(FunctionNodeHelper::kBody);
@@ -4233,10 +4285,13 @@
   // Catch entries are always considered reachable, even if they
   // become unreachable after OSR.
   if (flow_graph_builder_->osr_id_ != Compiler::kNoOSRDeoptId) {
-    graph_entry->RelinkToOsrEntry(Z, flow_graph_builder_->next_block_id_);
+    graph_entry->RelinkToOsrEntry(Z,
+                                  flow_graph_builder_->last_used_block_id_ + 1);
   }
-  return new (Z) FlowGraph(*parsed_function(), graph_entry,
-                           flow_graph_builder_->next_block_id_ - 1);
+  PrologueInfo prologue_info(-1, -1);
+  return new (Z)
+      FlowGraph(*parsed_function(), graph_entry,
+                flow_graph_builder_->last_used_block_id_, prologue_info);
 }
 
 FlowGraph* StreamingFlowGraphBuilder::BuildGraph(intptr_t kernel_offset) {
@@ -4727,6 +4782,9 @@
     case kLocalInitializer:
       SkipVariableDeclaration();  // read variable.
       return;
+    case kAssertInitializer:
+      SkipStatement();
+      return;
     default:
       H.ReportError("Unsupported tag at this point: %d.", tag);
       UNREACHABLE();
@@ -5065,6 +5123,7 @@
       ReadBool();       // read any_catch_needs_stack_trace.
       intptr_t catch_count = ReadListLength();  // read number of catches.
       for (intptr_t i = 0; i < catch_count; ++i) {
+        ReadPosition();   // read position.
         SkipDartType();   // read guard.
         tag = ReadTag();  // read first part of exception.
         if (tag == kSomething) {
@@ -5156,7 +5215,7 @@
 
 void StreamingFlowGraphBuilder::SkipLibraryPart() {
   SkipListOfExpressions();  // Read annotations.
-  ReadStringReference();    // read uri_index.
+  ReadUInt();               // Read source_uri_index.
 }
 
 void StreamingFlowGraphBuilder::SkipLibraryTypedef() {
@@ -5682,6 +5741,14 @@
                                               variable->name());
 }
 
+Fragment StreamingFlowGraphBuilder::CheckTypeArgumentBound(
+    const AbstractType& parameter,
+    const AbstractType& bound,
+    const String& dst_name) {
+  return flow_graph_builder_->AssertSubtype(TokenPosition::kNoSource, parameter,
+                                            bound, dst_name);
+}
+
 Fragment StreamingFlowGraphBuilder::CheckVariableTypeInCheckedMode(
     intptr_t variable_kernel_position) {
   if (I->type_checks()) {
@@ -6384,8 +6451,7 @@
       AlternativeReadingScope r(reader_, &kernel_data,
                                 target_field.kernel_offset());
       AlternativeScriptScope s(&translation_helper_,
-                               Script::Handle(target_field.Script()),
-                               Script::Handle(Script()));
+                               Script::Handle(target_field.Script()), script());
 
       FieldHelper helper(this);
       helper.ReadUntilIncluding(FieldHelper::kFlags);
@@ -6452,7 +6518,7 @@
                                  interface_target.kernel_offset());
       AlternativeScriptScope _s(&translation_helper_,
                                 Script::Handle(interface_target.script()),
-                                Script::Handle(Script()));
+                                script());
       ReadUntilFunctionNode();
 
       FunctionNodeHelper fn_helper(this);
@@ -8384,8 +8450,9 @@
       CatchBlockEntry(handler_types, try_handler_index, needs_stacktrace);
   // Fill in the body of the catch.
   for (intptr_t i = 0; i < catch_count; ++i) {
-    intptr_t catch_offset = ReaderOffset();  // Catch has no tag.
-    Tag tag = PeekTag();                     // peek guard type.
+    intptr_t catch_offset = ReaderOffset();   // Catch has no tag.
+    TokenPosition position = ReadPosition();  // read position.
+    Tag tag = PeekTag();                      // peek guard type.
     AbstractType* type_guard = NULL;
     if (tag != kDynamicType) {
       type_guard = &T.BuildType();  // read guard.
@@ -8453,8 +8520,8 @@
         catch_body += Constant(*type_guard);
         catch_body += PushArgument();  // guard type
         catch_body += InstanceCall(
-            TokenPosition::kNoSource,
-            Library::PrivateCoreLibName(Symbols::_instanceOf()), Token::kIS, 4);
+            position, Library::PrivateCoreLibName(Symbols::_instanceOf()),
+            Token::kIS, 4);
 
         TargetEntryInstr* catch_entry;
         TargetEntryInstr* next_catch_entry;
@@ -8829,10 +8896,6 @@
   return instructions;
 }
 
-RawScript* StreamingFlowGraphBuilder::Script() {
-  return script_;
-}
-
 void StreamingFlowGraphBuilder::LoadAndSetupTypeParameters(
     ActiveClass* active_class,
     const Object& set_on,
@@ -9174,19 +9237,51 @@
 }
 
 RawTypedData* StreamingFlowGraphBuilder::GetLineStartsFor(intptr_t index) {
+  // Line starts are delta encoded. So get the max delta first so that we
+  // can store them as tighly as possible.
   AlternativeReadingScope alt(reader_);
   SetOffset(GetOffsetForSourceInfo(index));
-  SkipBytes(ReadUInt());       // skip uri.
-  SkipBytes(ReadUInt());       // skip source.
-  intptr_t size = ReadUInt();  // read line starts length.
+  SkipBytes(ReadUInt());                         // skip uri.
+  SkipBytes(ReadUInt());                         // skip source.
+  const intptr_t line_start_count = ReadUInt();  // read number of line start
+                                                 // entries.
+  MallocGrowableArray<int32_t> line_starts_array;
 
-  TypedData& line_starts_data = TypedData::Handle(
-      Z, TypedData::New(kTypedDataInt32ArrayCid, size, Heap::kOld));
-  intptr_t previous_line_start = 0;
-  for (intptr_t j = 0; j < size; ++j) {
-    intptr_t line_start = ReadUInt() + previous_line_start;
-    line_starts_data.SetInt32(j * 4, line_start);
-    previous_line_start = line_start;
+  intptr_t max_delta = 0;
+  for (intptr_t i = 0; i < line_start_count; ++i) {
+    int32_t delta = ReadUInt();
+    line_starts_array.Add(delta);
+    if (delta > max_delta) {
+      max_delta = delta;
+    }
+  }
+
+  intptr_t cid;
+  if (max_delta <= kMaxInt8) {
+    cid = kTypedDataInt8ArrayCid;
+  } else if (max_delta <= kMaxInt16) {
+    cid = kTypedDataInt16ArrayCid;
+  } else {
+    cid = kTypedDataInt32ArrayCid;
+  }
+
+  TypedData& line_starts_data =
+      TypedData::Handle(Z, TypedData::New(cid, line_start_count, Heap::kOld));
+  for (intptr_t j = 0; j < line_start_count; ++j) {
+    int32_t line_start = line_starts_array[j];
+    switch (cid) {
+      case kTypedDataInt8ArrayCid:
+        line_starts_data.SetInt8(j, static_cast<int8_t>(line_start));
+        break;
+      case kTypedDataInt16ArrayCid:
+        line_starts_data.SetInt16(j << 1, static_cast<int16_t>(line_start));
+        break;
+      case kTypedDataInt32ArrayCid:
+        line_starts_data.SetInt32(j << 2, line_start);
+        break;
+      default:
+        UNREACHABLE();
+    }
   }
   return line_starts_data.raw();
 }
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index ce32349..5ca0340 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -106,6 +106,7 @@
   enum Flag {
     kFinal = 1 << 0,
     kConst = 1 << 1,
+    kCovariant = 1 << 3,
     kIsGenericCovariantImpl = 1 << 5,
     kIsGenericCovariantInterface = 1 << 6
   };
@@ -126,6 +127,7 @@
 
   bool IsConst() { return (flags_ & kConst) != 0; }
   bool IsFinal() { return (flags_ & kFinal) != 0; }
+  bool IsCovariant() { return (flags_ & kCovariant) != 0; }
 
   bool IsGenericCovariantInterface() {
     return (flags_ & kIsGenericCovariantInterface) != 0;
@@ -839,7 +841,7 @@
   TranslationHelper& translation_helper_;
   StreamingDartTypeTranslator& type_translator_;
 
-  Script& script_;
+  const Script& script_;
   Instance& result_;
 };
 
@@ -852,7 +854,7 @@
         translation_helper_(flow_graph_builder->translation_helper_),
         zone_(flow_graph_builder->zone_),
         reader_(new Reader(data)),
-        script_(parsed_function()->function().script()),
+        script_(Script::Handle(zone_, parsed_function()->function().script())),
         constant_evaluator_(this),
         type_translator_(this, /* finalize= */ true),
         data_program_offset_(data_program_offset),
@@ -872,7 +874,7 @@
         translation_helper_(*translation_helper),
         zone_(zone),
         reader_(new Reader(data_buffer, buffer_length)),
-        script_(Script::null()),
+        script_(Script::Handle(zone_)),
         constant_evaluator_(this),
         type_translator_(this, /* finalize= */ true),
         data_program_offset_(data_program_offset),
@@ -884,7 +886,7 @@
         metadata_scanned_(false) {}
 
   StreamingFlowGraphBuilder(TranslationHelper* translation_helper,
-                            RawScript* script,
+                            const Script& script,
                             Zone* zone,
                             const TypedData& data,
                             intptr_t data_program_offset)
@@ -921,6 +923,8 @@
   String& GetSourceFor(intptr_t index);
   RawTypedData* GetLineStartsFor(intptr_t index);
   void SetOffset(intptr_t offset);
+  void ReadUntilFunctionNode();
+  intptr_t ReadListLength();
 
   enum DispatchCategory { Interface, ViaThis, Closure, DynamicDispatch };
 
@@ -934,7 +938,6 @@
                                  const Function& function,
                                  Function* outermost_function);
 
-  void ReadUntilFunctionNode();
   StringIndex GetNameFromVariableDeclaration(intptr_t kernel_offset,
                                              const Function& function);
 
@@ -961,7 +964,6 @@
   uint32_t ReadUInt32();
   uint32_t PeekUInt();
   uint32_t PeekListLength();
-  intptr_t ReadListLength();
   StringIndex ReadStringReference();
   NameIndex ReadCanonicalNameReference();
   StringIndex ReadNameAsStringIndex();
@@ -1139,6 +1141,9 @@
   Fragment CheckAssignableInCheckedMode(const AbstractType& dst_type,
                                         const String& dst_name);
   Fragment CheckArgumentType(intptr_t variable_kernel_position);
+  Fragment CheckTypeArgumentBound(const AbstractType& parameter,
+                                  const AbstractType& bound,
+                                  const String& dst_name);
   Fragment CheckVariableTypeInCheckedMode(intptr_t variable_kernel_position);
   Fragment CheckVariableTypeInCheckedMode(const AbstractType& dst_type,
                                           const String& name_symbol);
@@ -1253,7 +1258,7 @@
       intptr_t* argument_bits,
       intptr_t* type_argument_bits);
 
-  RawScript* Script();
+  const Script& script() { return script_; }
 
   // Scan through metadata mappings section and cache offsets for recognized
   // metadata kinds.
@@ -1263,7 +1268,7 @@
   TranslationHelper& translation_helper_;
   Zone* zone_;
   Reader* reader_;
-  RawScript* script_;
+  const Script& script_;
   StreamingConstantEvaluator constant_evaluator_;
   StreamingDartTypeTranslator type_translator_;
   // Some items like variables are specified in the kernel binary as
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 9540f134..6f2156a 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -754,7 +754,10 @@
     bool optimizing,
     intptr_t osr_id,
     intptr_t first_block_id)
-    : translation_helper_(Thread::Current()),
+    : BaseFlowGraphBuilder(parsed_function,
+                           first_block_id - 1,
+                           context_level_array),
+      translation_helper_(Thread::Current()),
       thread_(translation_helper_.thread()),
       zone_(translation_helper_.zone()),
       kernel_offset_(kernel_offset),
@@ -762,24 +765,17 @@
       optimizing_(optimizing),
       osr_id_(osr_id),
       ic_data_array_(ic_data_array),
-      context_level_array_(context_level_array),
       exit_collector_(exit_collector),
-      next_block_id_(first_block_id),
       next_function_id_(0),
-      context_depth_(0),
       loop_depth_(0),
       try_depth_(0),
       catch_depth_(0),
       for_in_depth_(0),
-      stack_(NULL),
-      pending_argument_count_(0),
       graph_entry_(NULL),
       scopes_(NULL),
       breakable_block_(NULL),
       switch_block_(NULL),
       try_finally_block_(NULL),
-      try_catch_block_(NULL),
-      next_used_try_index_(0),
       catch_block_(NULL),
       streaming_flow_graph_builder_(NULL) {
   const Script& script =
@@ -874,7 +870,7 @@
   return instructions;
 }
 
-Fragment FlowGraphBuilder::LoadContextAt(int depth) {
+Fragment BaseFlowGraphBuilder::LoadContextAt(int depth) {
   intptr_t delta = context_depth_ - depth;
   ASSERT(delta >= 0);
   Fragment instructions = LoadLocal(parsed_function_->current_context_var());
@@ -1070,8 +1066,8 @@
   return Fragment(negate);
 }
 
-Fragment FlowGraphBuilder::StrictCompare(Token::Kind kind,
-                                         bool number_check /* = false */) {
+Fragment BaseFlowGraphBuilder::StrictCompare(Token::Kind kind,
+                                             bool number_check /* = false */) {
   Value* right = Pop();
   Value* left = Pop();
   StrictCompareInstr* compare =
@@ -1081,23 +1077,23 @@
   return Fragment(compare);
 }
 
-Fragment FlowGraphBuilder::BranchIfTrue(TargetEntryInstr** then_entry,
-                                        TargetEntryInstr** otherwise_entry,
-                                        bool negate) {
+Fragment BaseFlowGraphBuilder::BranchIfTrue(TargetEntryInstr** then_entry,
+                                            TargetEntryInstr** otherwise_entry,
+                                            bool negate) {
   Fragment instructions = Constant(Bool::True());
   return instructions + BranchIfEqual(then_entry, otherwise_entry, negate);
 }
 
-Fragment FlowGraphBuilder::BranchIfNull(TargetEntryInstr** then_entry,
-                                        TargetEntryInstr** otherwise_entry,
-                                        bool negate) {
+Fragment BaseFlowGraphBuilder::BranchIfNull(TargetEntryInstr** then_entry,
+                                            TargetEntryInstr** otherwise_entry,
+                                            bool negate) {
   Fragment instructions = NullConstant();
   return instructions + BranchIfEqual(then_entry, otherwise_entry, negate);
 }
 
-Fragment FlowGraphBuilder::BranchIfEqual(TargetEntryInstr** then_entry,
-                                         TargetEntryInstr** otherwise_entry,
-                                         bool negate) {
+Fragment BaseFlowGraphBuilder::BranchIfEqual(TargetEntryInstr** then_entry,
+                                             TargetEntryInstr** otherwise_entry,
+                                             bool negate) {
   Value* right_value = Pop();
   Value* left_value = Pop();
   StrictCompareInstr* compare = new (Z) StrictCompareInstr(
@@ -1109,7 +1105,7 @@
   return Fragment(branch).closed();
 }
 
-Fragment FlowGraphBuilder::BranchIfStrictEqual(
+Fragment BaseFlowGraphBuilder::BranchIfStrictEqual(
     TargetEntryInstr** then_entry,
     TargetEntryInstr** otherwise_entry) {
   Value* rhs = Pop();
@@ -1203,7 +1199,7 @@
   return instructions;
 }
 
-Fragment FlowGraphBuilder::Constant(const Object& value) {
+Fragment BaseFlowGraphBuilder::Constant(const Object& value) {
   ASSERT(value.IsNotTemporaryScopedHandle());
   ConstantInstr* constant = new (Z) ConstantInstr(value);
   Push(constant);
@@ -1220,11 +1216,11 @@
   return Fragment(array);
 }
 
-Fragment FlowGraphBuilder::Goto(JoinEntryInstr* destination) {
+Fragment BaseFlowGraphBuilder::Goto(JoinEntryInstr* destination) {
   return Fragment(new (Z) GotoInstr(destination, GetNextDeoptId())).closed();
 }
 
-Fragment FlowGraphBuilder::IntConstant(int64_t value) {
+Fragment BaseFlowGraphBuilder::IntConstant(int64_t value) {
   return Fragment(
       Constant(Integer::ZoneHandle(Z, Integer::New(value, Heap::kOld))));
 }
@@ -1262,7 +1258,7 @@
   return Fragment(call);
 }
 
-Fragment FlowGraphBuilder::ThrowException(TokenPosition position) {
+Fragment BaseFlowGraphBuilder::ThrowException(TokenPosition position) {
   Fragment instructions;
   instructions += Drop();
   instructions +=
@@ -1320,6 +1316,10 @@
 }
 
 Fragment FlowGraphBuilder::LoadField(intptr_t offset, intptr_t class_id) {
+  return BaseFlowGraphBuilder::LoadField(offset, class_id);
+}
+
+Fragment BaseFlowGraphBuilder::LoadField(intptr_t offset, intptr_t class_id) {
   LoadFieldInstr* load = new (Z) LoadFieldInstr(
       Pop(), offset, AbstractType::ZoneHandle(Z), TokenPosition::kNoSource);
   load->set_result_cid(class_id);
@@ -1327,6 +1327,16 @@
   return Fragment(load);
 }
 
+Fragment BaseFlowGraphBuilder::LoadIndexed(intptr_t index_scale) {
+  Value* index = Pop();
+  Value* array = Pop();
+  LoadIndexedInstr* instr = new (Z)
+      LoadIndexedInstr(array, index, index_scale, kArrayCid, kAlignedAccess,
+                       Thread::kNoDeoptId, TokenPosition::kNoSource);
+  Push(instr);
+  return Fragment(instr);
+}
+
 Fragment FlowGraphBuilder::LoadNativeField(MethodRecognizer::Kind kind,
                                            intptr_t offset,
                                            const Type& type,
@@ -1341,18 +1351,22 @@
   return Fragment(load);
 }
 
+Fragment BaseFlowGraphBuilder::LoadLocal(LocalVariable* variable) {
+  LoadLocalInstr* load =
+      new (Z) LoadLocalInstr(*variable, TokenPosition::kNoSource);
+  Push(load);
+  return Fragment(load);
+}
+
 Fragment FlowGraphBuilder::LoadLocal(LocalVariable* variable) {
-  Fragment instructions;
   if (variable->is_captured()) {
+    Fragment instructions;
     instructions += LoadContextAt(variable->owner()->context_level());
     instructions += LoadField(Context::variable_offset(variable->index()));
+    return instructions;
   } else {
-    LoadLocalInstr* load =
-        new (Z) LoadLocalInstr(*variable, TokenPosition::kNoSource);
-    instructions <<= load;
-    Push(load);
+    return BaseFlowGraphBuilder::LoadLocal(variable);
   }
-  return instructions;
 }
 
 Fragment FlowGraphBuilder::InitStaticField(const Field& field) {
@@ -1368,20 +1382,22 @@
   return Fragment(load);
 }
 
-Fragment FlowGraphBuilder::NullConstant() {
+Fragment BaseFlowGraphBuilder::NullConstant() {
   return Constant(Instance::ZoneHandle(Z, Instance::null()));
 }
 
 Fragment FlowGraphBuilder::NativeCall(const String* name,
                                       const Function* function) {
   InlineBailout("kernel::FlowGraphBuilder::NativeCall");
-  NativeCallInstr* call = new (Z) NativeCallInstr(
-      name, function, FLAG_link_natives_lazily, TokenPosition::kNoSource);
+  ArgumentArray arguments = GetArguments(function->NumParameters());
+  NativeCallInstr* call =
+      new (Z) NativeCallInstr(name, function, FLAG_link_natives_lazily,
+                              TokenPosition::kNoSource, arguments);
   Push(call);
   return Fragment(call);
 }
 
-Fragment FlowGraphBuilder::PushArgument() {
+Fragment BaseFlowGraphBuilder::PushArgument() {
   PushArgumentInstr* argument = new (Z) PushArgumentInstr(Pop());
   Push(argument);
 
@@ -1557,6 +1573,14 @@
     TokenPosition position,
     intptr_t offset,
     StoreBarrierType emit_store_barrier) {
+  return BaseFlowGraphBuilder::StoreInstanceField(position, offset,
+                                                  emit_store_barrier);
+}
+
+Fragment BaseFlowGraphBuilder::StoreInstanceField(
+    TokenPosition position,
+    intptr_t offset,
+    StoreBarrierType emit_store_barrier) {
   Value* value = Pop();
   if (value->BindsToConstant()) {
     emit_store_barrier = kNoStoreBarrier;
@@ -1566,22 +1590,26 @@
   return Fragment(store);
 }
 
-Fragment FlowGraphBuilder::StoreLocal(TokenPosition position,
-                                      LocalVariable* variable) {
-  Fragment instructions;
+Fragment BaseFlowGraphBuilder::StoreLocal(TokenPosition position,
+                                          LocalVariable* variable) {
   if (variable->is_captured()) {
+    Fragment instructions;
     LocalVariable* value = MakeTemporary();
     instructions += LoadContextAt(variable->owner()->context_level());
     instructions += LoadLocal(value);
     instructions += StoreInstanceField(
         position, Context::variable_offset(variable->index()));
-  } else {
-    Value* value = Pop();
-    StoreLocalInstr* store =
-        new (Z) StoreLocalInstr(*variable, value, position);
-    instructions <<= store;
-    Push(store);
+    return instructions;
   }
+  return StoreLocalRaw(position, variable);
+}
+
+Fragment BaseFlowGraphBuilder::StoreLocalRaw(TokenPosition position,
+                                             LocalVariable* variable) {
+  Value* value = Pop();
+  StoreLocalInstr* store = new (Z) StoreLocalInstr(*variable, value, position);
+  Fragment instructions(store);
+  Push(store);
   return instructions;
 }
 
@@ -1708,21 +1736,23 @@
   RawFunction* function = klass.LookupFunctionAllowPrivate(method_name);
 #ifdef DEBUG
   if (function == Object::null()) {
-    OS::PrintErr("Unable to find \'%s\' in %s\n", method_name.ToCString(),
-                 klass.ToCString());
+    THR_Print("Unable to find \'%s\' in %s\n", method_name.ToCString(),
+              klass.ToCString());
   }
 #endif
   ASSERT(function != Object::null());
   return function;
 }
 
-LocalVariable* FlowGraphBuilder::MakeTemporary() {
+LocalVariable* BaseFlowGraphBuilder::MakeTemporary() {
   char name[64];
   intptr_t index = stack_->definition()->temp_index();
   OS::SNPrint(name, 64, ":temp%" Pd, index);
+  const String& symbol_name =
+      String::ZoneHandle(Z, Symbols::New(thread_, name));
   LocalVariable* variable =
       new (Z) LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
-                            H.DartSymbol(name), Object::dynamic_type());
+                            symbol_name, Object::dynamic_type());
   // Set the index relative to the base of the expression stack including
   // outgoing arguments.
   variable->set_index(parsed_function_->first_stack_local_index() -
@@ -1737,7 +1767,7 @@
   return variable;
 }
 
-intptr_t FlowGraphBuilder::CurrentTryIndex() {
+intptr_t BaseFlowGraphBuilder::CurrentTryIndex() {
   if (try_catch_block_ == NULL) {
     return CatchClauseNode::kInvalidTryIndex;
   } else {
@@ -1751,17 +1781,17 @@
   return local;
 }
 
-void FlowGraphBuilder::SetTempIndex(Definition* definition) {
+void BaseFlowGraphBuilder::SetTempIndex(Definition* definition) {
   definition->set_temp_index(
       stack_ == NULL ? 0 : stack_->definition()->temp_index() + 1);
 }
 
-void FlowGraphBuilder::Push(Definition* definition) {
+void BaseFlowGraphBuilder::Push(Definition* definition) {
   SetTempIndex(definition);
   Value::AddToList(new (Z) Value(definition), &stack_);
 }
 
-Value* FlowGraphBuilder::Pop() {
+Value* BaseFlowGraphBuilder::Pop() {
   ASSERT(stack_ != NULL);
   Value* value = stack_;
   stack_ = value->next_use();
@@ -1773,7 +1803,7 @@
   return value;
 }
 
-Fragment FlowGraphBuilder::Drop() {
+Fragment BaseFlowGraphBuilder::Drop() {
   ASSERT(stack_ != NULL);
   Fragment instructions;
   Definition* definition = stack_->definition();
@@ -1789,7 +1819,8 @@
   return instructions;
 }
 
-Fragment FlowGraphBuilder::DropTempsPreserveTop(intptr_t num_temps_to_drop) {
+Fragment BaseFlowGraphBuilder::DropTempsPreserveTop(
+    intptr_t num_temps_to_drop) {
   Value* top = Pop();
 
   for (intptr_t i = 0; i < num_temps_to_drop; ++i) {
@@ -1976,6 +2007,11 @@
       break;
     default: {
       String& name = String::ZoneHandle(Z, function.native_name());
+      for (intptr_t i = 0; i < function.NumParameters(); ++i) {
+        body += LoadLocal(
+            parsed_function_->node_sequence()->scope()->VariableAt(i));
+        body += PushArgument();
+      }
       body += NativeCall(&name, &function);
       break;
     }
@@ -2162,6 +2198,25 @@
   return instructions;
 }
 
+Fragment FlowGraphBuilder::AssertSubtype(TokenPosition position,
+                                         const AbstractType& sub_type,
+                                         const AbstractType& super_type,
+                                         const String& dst_name) {
+  Fragment instructions;
+
+  instructions += LoadInstantiatorTypeArguments();
+  Value* instantiator_type_args = Pop();
+  instructions += LoadFunctionTypeArguments();
+  Value* function_type_args = Pop();
+
+  AssertSubtypeInstr* instr = new (Z)
+      AssertSubtypeInstr(position, instantiator_type_args, function_type_args,
+                         sub_type, super_type, dst_name, GetNextDeoptId());
+  instructions += Fragment(instr);
+
+  return instructions;
+}
+
 FlowGraph* FlowGraphBuilder::BuildGraphOfMethodExtractor(
     const Function& method) {
   // A method extractor is the implicit getter for a method.
@@ -2176,7 +2231,10 @@
   body += BuildImplicitClosureCreation(function);
   body += Return(TokenPosition::kNoSource);
 
-  return new (Z) FlowGraph(*parsed_function_, graph_entry_, next_block_id_ - 1);
+  // There is no prologue code for a method extractor.
+  PrologueInfo prologue_info(-1, -1);
+  return new (Z) FlowGraph(*parsed_function_, graph_entry_, last_used_block_id_,
+                           prologue_info);
 }
 
 FlowGraph* FlowGraphBuilder::BuildGraphOfNoSuchMethodDispatcher(
@@ -2289,7 +2347,9 @@
                      /* argument_count = */ 2, ICData::kNSMDispatch);
   body += Return(TokenPosition::kNoSource);
 
-  return new (Z) FlowGraph(*parsed_function_, graph_entry_, next_block_id_ - 1);
+  PrologueInfo prologue_info(-1, -1);
+  return new (Z) FlowGraph(*parsed_function_, graph_entry_, last_used_block_id_,
+                           prologue_info);
 }
 
 FlowGraph* FlowGraphBuilder::BuildGraphOfInvokeFieldDispatcher(
@@ -2388,24 +2448,26 @@
 
   body += Return(TokenPosition::kNoSource);
 
-  return new (Z) FlowGraph(*parsed_function_, graph_entry_, next_block_id_ - 1);
+  PrologueInfo prologue_info(-1, -1);
+  return new (Z) FlowGraph(*parsed_function_, graph_entry_, last_used_block_id_,
+                           prologue_info);
 }
 
-TargetEntryInstr* FlowGraphBuilder::BuildTargetEntry() {
+TargetEntryInstr* BaseFlowGraphBuilder::BuildTargetEntry() {
   return new (Z)
       TargetEntryInstr(AllocateBlockId(), CurrentTryIndex(), GetNextDeoptId());
 }
 
-JoinEntryInstr* FlowGraphBuilder::BuildJoinEntry(intptr_t try_index) {
+JoinEntryInstr* BaseFlowGraphBuilder::BuildJoinEntry(intptr_t try_index) {
   return new (Z) JoinEntryInstr(AllocateBlockId(), try_index, GetNextDeoptId());
 }
 
-JoinEntryInstr* FlowGraphBuilder::BuildJoinEntry() {
+JoinEntryInstr* BaseFlowGraphBuilder::BuildJoinEntry() {
   return new (Z)
       JoinEntryInstr(AllocateBlockId(), CurrentTryIndex(), GetNextDeoptId());
 }
 
-ArgumentArray FlowGraphBuilder::GetArguments(int count) {
+ArgumentArray BaseFlowGraphBuilder::GetArguments(int count) {
   ArgumentArray arguments =
       new (Z) ZoneGrowableArray<PushArgumentInstr*>(Z, count);
   arguments->SetLength(count);
@@ -2430,7 +2492,7 @@
     helper.InitFromScript(script);
 
     StreamingFlowGraphBuilder streaming_flow_graph_builder(
-        &helper, metadata_field.Script(), zone_,
+        &helper, Script::Handle(Z, metadata_field.Script()), Z,
         TypedData::Handle(Z, metadata_field.KernelData()),
         metadata_field.KernelDataProgramOffset());
     return streaming_flow_graph_builder.EvaluateMetadata(
@@ -2454,7 +2516,7 @@
     helper.InitFromScript(script);
 
     StreamingFlowGraphBuilder streaming_flow_graph_builder(
-        &helper, function.script(), zone_,
+        &helper, Script::Handle(Z, function.script()), Z,
         TypedData::Handle(Z, function.KernelData()),
         function.KernelDataProgramOffset());
     return streaming_flow_graph_builder.BuildParameterDescriptor(
@@ -2520,7 +2582,7 @@
   }
 
   StreamingFlowGraphBuilder streaming_flow_graph_builder(
-      helper, script.raw(), zone_, data, data_kernel_offset);
+      helper, script, zone_, data, data_kernel_offset);
   streaming_flow_graph_builder.CollectTokenPositionsFor(
       script.kernel_script_index(), entry_script.kernel_script_index(),
       kernel_offset, token_positions, yield_positions);
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.h b/runtime/vm/compiler/frontend/kernel_to_il.h
index ccd92eb..c3dfe4a 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.h
+++ b/runtime/vm/compiler/frontend/kernel_to_il.h
@@ -517,7 +517,112 @@
       : entry(NULL), try_index(CatchClauseNode::kInvalidTryIndex) {}
 };
 
-class FlowGraphBuilder {
+class BaseFlowGraphBuilder {
+ public:
+  BaseFlowGraphBuilder(const ParsedFunction* parsed_function,
+                       intptr_t last_used_block_id,
+                       ZoneGrowableArray<intptr_t>* context_level_array = NULL)
+      : parsed_function_(parsed_function),
+        function_(parsed_function_->function()),
+        thread_(Thread::Current()),
+        zone_(thread_->zone()),
+        context_level_array_(context_level_array),
+        context_depth_(0),
+        last_used_block_id_(last_used_block_id),
+        try_catch_block_(NULL),
+        next_used_try_index_(0),
+        stack_(NULL),
+        pending_argument_count_(0) {}
+
+  Fragment LoadField(intptr_t offset, intptr_t class_id = kDynamicCid);
+  Fragment LoadIndexed(intptr_t index_scale);
+
+  void SetTempIndex(Definition* definition);
+
+  Fragment LoadLocal(LocalVariable* variable);
+  Fragment StoreLocal(TokenPosition position, LocalVariable* variable);
+  Fragment StoreLocalRaw(TokenPosition position, LocalVariable* variable);
+  Fragment LoadContextAt(int depth);
+  Fragment StoreInstanceField(
+      TokenPosition position,
+      intptr_t offset,
+      StoreBarrierType emit_store_barrier = kEmitStoreBarrier);
+
+  void Push(Definition* definition);
+  Value* Pop();
+  Fragment Drop();
+  // Drop given number of temps from the stack but preserve top of the stack.
+  Fragment DropTempsPreserveTop(intptr_t num_temps_to_drop);
+
+  LocalVariable* MakeTemporary();
+
+  Fragment PushArgument();
+  ArgumentArray GetArguments(int count);
+
+  TargetEntryInstr* BuildTargetEntry();
+  JoinEntryInstr* BuildJoinEntry();
+  JoinEntryInstr* BuildJoinEntry(intptr_t try_index);
+
+  Fragment StrictCompare(Token::Kind kind, bool number_check = false);
+  Fragment Goto(JoinEntryInstr* destination);
+  Fragment IntConstant(int64_t value);
+  Fragment Constant(const Object& value);
+  Fragment NullConstant();
+  Fragment LoadFpRelativeSlot(intptr_t offset);
+  Fragment BranchIfTrue(TargetEntryInstr** then_entry,
+                        TargetEntryInstr** otherwise_entry,
+                        bool negate = false);
+  Fragment BranchIfNull(TargetEntryInstr** then_entry,
+                        TargetEntryInstr** otherwise_entry,
+                        bool negate = false);
+  Fragment BranchIfEqual(TargetEntryInstr** then_entry,
+                         TargetEntryInstr** otherwise_entry,
+                         bool negate = false);
+  Fragment BranchIfStrictEqual(TargetEntryInstr** then_entry,
+                               TargetEntryInstr** otherwise_entry);
+  Fragment ThrowException(TokenPosition position);
+  Fragment TailCall(const Code& code);
+
+  intptr_t GetNextDeoptId() {
+    intptr_t deopt_id = thread_->GetNextDeoptId();
+    if (context_level_array_ != NULL) {
+      intptr_t level = context_depth_;
+      context_level_array_->Add(deopt_id);
+      context_level_array_->Add(level);
+    }
+    return deopt_id;
+  }
+
+  intptr_t AllocateTryIndex() { return next_used_try_index_++; }
+
+ protected:
+  intptr_t AllocateBlockId() { return ++last_used_block_id_; }
+  intptr_t CurrentTryIndex();
+
+  const ParsedFunction* parsed_function_;
+  const Function& function_;
+  Thread* thread_;
+  Zone* zone_;
+  // Contains (deopt_id, context_level) pairs.
+  ZoneGrowableArray<intptr_t>* context_level_array_;
+  intptr_t context_depth_;
+  intptr_t last_used_block_id_;
+
+  // A chained list of try-catch blocks. Chaining and lookup is done by the
+  // [TryCatchBlock] class.
+  TryCatchBlock* try_catch_block_;
+  intptr_t next_used_try_index_;
+
+ private:
+  Value* stack_;
+  intptr_t pending_argument_count_;
+
+  friend class TryCatchBlock;
+  friend class StreamingFlowGraphBuilder;
+  friend class FlowGraphBuilder;
+};
+
+class FlowGraphBuilder : public BaseFlowGraphBuilder {
  public:
   FlowGraphBuilder(intptr_t kernel_offset,
                    ParsedFunction* parsed_function,
@@ -532,6 +637,10 @@
   FlowGraph* BuildGraph();
 
  private:
+  BlockEntryInstr* BuildPrologue(TargetEntryInstr* normal_entry,
+                                 intptr_t* min_prologue_block_id,
+                                 intptr_t* max_prologue_block_id);
+
   FlowGraph* BuildGraphOfMethodExtractor(const Function& method);
   FlowGraph* BuildGraphOfNoSuchMethodDispatcher(const Function& function);
   FlowGraph* BuildGraphOfInvokeFieldDispatcher(const Function& function);
@@ -539,12 +648,6 @@
   Fragment NativeFunctionBody(intptr_t first_positional_offset,
                               const Function& function);
 
-  TargetEntryInstr* BuildTargetEntry();
-  JoinEntryInstr* BuildJoinEntry();
-  JoinEntryInstr* BuildJoinEntry(intptr_t try_index);
-
-  ArgumentArray GetArguments(int count);
-
   Fragment TranslateFinallyFinalizers(TryFinallyBlock* outer_finally,
                                       intptr_t target_context_depth);
 
@@ -552,7 +655,6 @@
                       intptr_t* num_context_variables = NULL);
   Fragment ExitScope(intptr_t kernel_offset);
 
-  Fragment LoadContextAt(int depth);
   Fragment AdjustContextTo(int depth);
 
   Fragment PushContext(int size);
@@ -571,18 +673,6 @@
                           intptr_t argument_count);
   Fragment AllocateObject(const Class& klass, const Function& closure_function);
   Fragment BooleanNegate();
-  Fragment StrictCompare(Token::Kind kind, bool number_check = false);
-  Fragment BranchIfTrue(TargetEntryInstr** then_entry,
-                        TargetEntryInstr** otherwise_entry,
-                        bool negate = false);
-  Fragment BranchIfNull(TargetEntryInstr** then_entry,
-                        TargetEntryInstr** otherwise_entry,
-                        bool negate = false);
-  Fragment BranchIfEqual(TargetEntryInstr** then_entry,
-                         TargetEntryInstr** otherwise_entry,
-                         bool negate = false);
-  Fragment BranchIfStrictEqual(TargetEntryInstr** then_entry,
-                               TargetEntryInstr** otherwise_entry);
   Fragment CatchBlockEntry(const Array& handler_types,
                            intptr_t handler_index,
                            bool needs_stacktrace);
@@ -590,10 +680,7 @@
   Fragment CheckStackOverflowInPrologue();
   Fragment CheckStackOverflow();
   Fragment CloneContext(intptr_t num_context_variables);
-  Fragment Constant(const Object& value);
   Fragment CreateArray();
-  Fragment Goto(JoinEntryInstr* destination);
-  Fragment IntConstant(int64_t value);
   Fragment InstanceCall(TokenPosition position,
                         const String& name,
                         Token::Kind kind,
@@ -607,11 +694,10 @@
   Fragment ClosureCall(intptr_t type_args_len,
                        intptr_t argument_count,
                        const Array& argument_names);
-  Fragment ThrowException(TokenPosition position);
   Fragment RethrowException(TokenPosition position, int catch_try_index);
   Fragment LoadClassId();
-  Fragment LoadField(const Field& field);
   Fragment LoadField(intptr_t offset, intptr_t class_id = kDynamicCid);
+  Fragment LoadField(const Field& field);
   Fragment LoadNativeField(MethodRecognizer::Kind kind,
                            intptr_t offset,
                            const Type& type,
@@ -620,9 +706,7 @@
   Fragment LoadLocal(LocalVariable* variable);
   Fragment InitStaticField(const Field& field);
   Fragment LoadStaticField();
-  Fragment NullConstant();
   Fragment NativeCall(const String* name, const Function* function);
-  Fragment PushArgument();
   Fragment Return(TokenPosition position);
   Fragment CheckNull(TokenPosition position, LocalVariable* receiver);
   Fragment StaticCall(TokenPosition position,
@@ -641,14 +725,13 @@
   Fragment StoreInstanceFieldGuarded(const Field& field,
                                      bool is_initialization_store);
   Fragment StoreInstanceField(
-      const Field& field,
-      bool is_initialization_store,
-      StoreBarrierType emit_store_barrier = kEmitStoreBarrier);
-  Fragment StoreInstanceField(
       TokenPosition position,
       intptr_t offset,
       StoreBarrierType emit_store_barrier = kEmitStoreBarrier);
-  Fragment StoreLocal(TokenPosition position, LocalVariable* variable);
+  Fragment StoreInstanceField(
+      const Field& field,
+      bool is_initialization_store,
+      StoreBarrierType emit_store_barrier = kEmitStoreBarrier);
   Fragment StoreStaticField(TokenPosition position, const Field& field);
   Fragment StringInterpolate(TokenPosition position);
   Fragment StringInterpolateSingle(TokenPosition position);
@@ -670,6 +753,10 @@
   Fragment AssertAssignable(TokenPosition position,
                             const AbstractType& dst_type,
                             const String& dst_name);
+  Fragment AssertSubtype(TokenPosition position,
+                         const AbstractType& sub_type,
+                         const AbstractType& super_type,
+                         const String& dst_name);
 
   bool NeedsDebugStepCheck(const Function& function, TokenPosition position);
   bool NeedsDebugStepCheck(Value* value, TokenPosition position);
@@ -678,25 +765,12 @@
   RawFunction* LookupMethodByMember(NameIndex target,
                                     const String& method_name);
 
-  LocalVariable* MakeTemporary();
-  LocalVariable* MakeNonTemporary(const String& symbol);
-
-  intptr_t CurrentTryIndex();
-  intptr_t AllocateTryIndex() { return next_used_try_index_++; }
-
   LocalVariable* LookupVariable(intptr_t kernel_offset);
 
-  void SetTempIndex(Definition* definition);
-
-  void Push(Definition* definition);
-  Value* Pop();
-  Fragment Drop();
-
-  // Drop given number of temps from the stack but preserve top of the stack.
-  Fragment DropTempsPreserveTop(intptr_t num_temps_to_drop);
-
   bool IsInlining() { return exit_collector_ != NULL; }
 
+  bool IsCompiledForOsr() { return osr_id_ != Thread::kNoDeoptId; }
+
   void InlineBailout(const char* reason);
 
   TranslationHelper translation_helper_;
@@ -709,33 +783,15 @@
   const bool optimizing_;
   intptr_t osr_id_;
   const ZoneGrowableArray<const ICData*>& ic_data_array_;
-  // Contains (deopt_id, context_level) pairs.
-  ZoneGrowableArray<intptr_t>* context_level_array_;
   InlineExitCollector* exit_collector_;
 
-  intptr_t next_block_id_;
-  intptr_t AllocateBlockId() { return next_block_id_++; }
-
-  intptr_t GetNextDeoptId() {
-    intptr_t deopt_id = thread_->GetNextDeoptId();
-    if (context_level_array_ != NULL) {
-      intptr_t level = context_depth_;
-      context_level_array_->Add(deopt_id);
-      context_level_array_->Add(level);
-    }
-    return deopt_id;
-  }
-
   intptr_t next_function_id_;
   intptr_t AllocateFunctionId() { return next_function_id_++; }
 
-  intptr_t context_depth_;
   intptr_t loop_depth_;
   intptr_t try_depth_;
   intptr_t catch_depth_;
   intptr_t for_in_depth_;
-  Value* stack_;
-  intptr_t pending_argument_count_;
 
   GraphEntryInstr* graph_entry_;
 
@@ -765,11 +821,6 @@
   // [TryFinallyBlock] class.
   TryFinallyBlock* try_finally_block_;
 
-  // A chained list of try-catch blocks. Chaining and lookup is done by the
-  // [TryCatchBlock] class.
-  TryCatchBlock* try_catch_block_;
-  intptr_t next_used_try_index_;
-
   // A chained list of catch blocks. Chaining and lookup is done by the
   // [CatchBlock] class.
   CatchBlock* catch_block_;
@@ -871,7 +922,7 @@
 
 class TryCatchBlock {
  public:
-  explicit TryCatchBlock(FlowGraphBuilder* builder,
+  explicit TryCatchBlock(BaseFlowGraphBuilder* builder,
                          intptr_t try_handler_index = -1)
       : builder_(builder),
         outer_(builder->try_catch_block_),
@@ -885,7 +936,7 @@
   TryCatchBlock* outer() const { return outer_; }
 
  private:
-  FlowGraphBuilder* builder_;
+  BaseFlowGraphBuilder* builder_;
   TryCatchBlock* outer_;
   intptr_t try_index_;
 };
diff --git a/runtime/vm/compiler/intrinsifier.cc b/runtime/vm/compiler/intrinsifier.cc
index 7bd1080..d48170e 100644
--- a/runtime/vm/compiler/intrinsifier.cc
+++ b/runtime/vm/compiler/intrinsifier.cc
@@ -165,6 +165,7 @@
 bool Intrinsifier::GraphIntrinsify(const ParsedFunction& parsed_function,
                                    FlowGraphCompiler* compiler) {
 #if !defined(TARGET_ARCH_DBC)
+  ASSERT(!parsed_function.function().HasOptionalParameters());
   ZoneGrowableArray<const ICData*>* ic_data_array =
       new ZoneGrowableArray<const ICData*>();
   FlowGraphBuilder builder(parsed_function, *ic_data_array,
@@ -177,7 +178,9 @@
                            Thread::Current()->GetNextDeoptId());
   GraphEntryInstr* graph_entry = new GraphEntryInstr(
       parsed_function, normal_entry, Compiler::kNoOSRDeoptId);
-  FlowGraph* graph = new FlowGraph(parsed_function, graph_entry, block_id);
+  PrologueInfo prologue_info(-1, -1);
+  FlowGraph* graph =
+      new FlowGraph(parsed_function, graph_entry, block_id, prologue_info);
   const Function& function = parsed_function.function();
   switch (function.recognized_kind()) {
 #define EMIT_CASE(class_name, function_name, enum_name, type, fp)              \
diff --git a/runtime/vm/compiler/jit/compiler.cc b/runtime/vm/compiler/jit/compiler.cc
index cb499a7..0e61225 100644
--- a/runtime/vm/compiler/jit/compiler.cc
+++ b/runtime/vm/compiler/jit/compiler.cc
@@ -241,9 +241,9 @@
   if (osr_id != Compiler::kNoOSRDeoptId) {
     result.graph_entry->RelinkToOsrEntry(zone, result.num_blocks);
   }
-
-  return new (zone)
-      FlowGraph(*parsed_function, result.graph_entry, result.num_blocks);
+  PrologueInfo prologue_info(-1, -1);
+  return new (zone) FlowGraph(*parsed_function, result.graph_entry,
+                              result.num_blocks, prologue_info);
 }
 
 void IrregexpCompilationPipeline::FinalizeCompilation(FlowGraph* flow_graph) {
@@ -1148,6 +1148,20 @@
         }
         DEBUG_ASSERT(flow_graph->VerifyUseLists());
 
+        if (!flow_graph->IsCompiledForOsr()) {
+          CheckStackOverflowElimination::EliminateStackOverflow(flow_graph);
+
+          if (flow_graph->Canonicalize()) {
+            // To fully remove redundant boxing (e.g. BoxDouble used only in
+            // environments and UnboxDouble instructions) instruction we
+            // first need to replace all their uses and then fold them away.
+            // For now we just repeat Canonicalize twice to do that.
+            // TODO(vegorov): implement a separate representation folding pass.
+            flow_graph->Canonicalize();
+          }
+          DEBUG_ASSERT(flow_graph->VerifyUseLists());
+        }
+
         if (sinking != NULL) {
           NOT_IN_PRODUCT(TimelineDurationScope tds2(
               thread(), compiler_timeline,
@@ -1590,7 +1604,8 @@
   // this is either an OSR compilation or background compilation is
   // not currently allowed.
   ASSERT(!thread->IsMutatorThread() || (osr_id != kNoOSRDeoptId) ||
-         !FLAG_background_compilation || BackgroundCompiler::IsDisabled());
+         !FLAG_background_compilation ||
+         BackgroundCompiler::IsDisabled(Isolate::Current()));
   CompilationPipeline* pipeline =
       CompilationPipeline::New(thread->zone(), function);
   return CompileFunctionHelper(pipeline, function, true, /* optimized */
@@ -2002,22 +2017,18 @@
 
 BackgroundCompiler::BackgroundCompiler(Isolate* isolate)
     : isolate_(isolate),
-      running_(true),
-      done_(new bool()),
       queue_monitor_(new Monitor()),
+      function_queue_(new BackgroundCompilationQueue()),
       done_monitor_(new Monitor()),
-      function_queue_(new BackgroundCompilationQueue()) {
-  *done_ = false;
-}
+      running_(false),
+      done_(true),
+      disabled_depth_(0) {}
 
 // Fields all deleted in ::Stop; here clear them.
 BackgroundCompiler::~BackgroundCompiler() {
-  isolate_ = NULL;
-  running_ = false;
-  done_ = NULL;
-  queue_monitor_ = NULL;
-  done_monitor_ = NULL;
-  function_queue_ = NULL;
+  delete queue_monitor_;
+  delete function_queue_;
+  delete done_monitor_;
 }
 
 void BackgroundCompiler::Run() {
@@ -2085,7 +2096,7 @@
   {
     // Notify that the thread is done.
     MonitorLocker ml_done(done_monitor_);
-    *done_ = true;
+    done_ = true;
     ml_done.Notify();
   }
 }
@@ -2113,74 +2124,25 @@
   function_queue_->VisitObjectPointers(visitor);
 }
 
-void BackgroundCompiler::Stop(Isolate* isolate) {
-  BackgroundCompiler* task = isolate->background_compiler();
-  if (task == NULL) {
-    // Nothing to stop.
-    return;
-  }
-  BackgroundCompilationQueue* function_queue = task->function_queue();
+class BackgroundCompilerTask : public ThreadPool::Task {
+ public:
+  explicit BackgroundCompilerTask(BackgroundCompiler* background_compiler)
+      : background_compiler_(background_compiler) {}
+  virtual ~BackgroundCompilerTask() {}
 
-  Monitor* queue_monitor = task->queue_monitor_;
-  Monitor* done_monitor = task->done_monitor_;
-  bool* task_done = task->done_;
-  // Wake up compiler task and stop it.
-  {
-    MonitorLocker ml(queue_monitor);
-    task->running_ = false;
-    function_queue->Clear();
-    // 'task' will be deleted by thread pool.
-    task = NULL;
-    ml.Notify();  // Stop waiting for the queue.
-  }
+ private:
+  virtual void Run() { background_compiler_->Run(); }
 
-  {
-    MonitorLocker ml_done(done_monitor);
-    while (!(*task_done)) {
-      ml_done.WaitWithSafepointCheck(Thread::Current());
-    }
-  }
-  delete task_done;
-  delete done_monitor;
-  delete queue_monitor;
-  delete function_queue;
-  isolate->set_background_compiler(NULL);
-}
+  BackgroundCompiler* background_compiler_;
 
-void BackgroundCompiler::Disable() {
+  DISALLOW_COPY_AND_ASSIGN(BackgroundCompilerTask);
+};
+
+void BackgroundCompiler::Start() {
   Thread* thread = Thread::Current();
-  ASSERT(thread != NULL);
-  Isolate* isolate = thread->isolate();
-  MutexLocker ml(isolate->mutex());
-  BackgroundCompiler* task = isolate->background_compiler();
-  if (task != NULL) {
-    // We should only ever have to stop the task if this is the first call to
-    // Disable.
-    ASSERT(!isolate->is_background_compiler_disabled());
-    BackgroundCompiler::Stop(isolate);
-  }
-  ASSERT(isolate->background_compiler() == NULL);
-  isolate->disable_background_compiler();
-}
-
-bool BackgroundCompiler::IsDisabled() {
-  Thread* thread = Thread::Current();
-  ASSERT(thread != NULL);
-  Isolate* isolate = thread->isolate();
-  MutexLocker ml(isolate->mutex());
-  return isolate->is_background_compiler_disabled();
-}
-
-void BackgroundCompiler::Enable() {
-  Thread* thread = Thread::Current();
-  ASSERT(thread != NULL);
-  Isolate* isolate = thread->isolate();
-  MutexLocker ml(isolate->mutex());
-  isolate->enable_background_compiler();
-}
-
-void BackgroundCompiler::EnsureInit(Thread* thread) {
   ASSERT(thread->IsMutatorThread());
+  ASSERT(!thread->IsAtSafepoint());
+
   // Finalize NoSuchMethodError, _Mint; occasionally needed in optimized
   // compilation.
   Class& cls = Class::Handle(
@@ -2193,21 +2155,54 @@
   error = cls.EnsureIsFinalized(thread);
   ASSERT(error.IsNull());
 
-  bool start_task = false;
-  Isolate* isolate = thread->isolate();
+  MonitorLocker ml(done_monitor_);
+  if (running_ || !done_) return;
+  running_ = true;
+  done_ = false;
+  bool task_started =
+      Dart::thread_pool()->Run(new BackgroundCompilerTask(this));
+  if (!task_started) {
+    running_ = false;
+    done_ = true;
+  }
+}
+
+void BackgroundCompiler::Stop() {
+  Thread* thread = Thread::Current();
+  ASSERT(thread->IsMutatorThread());
+  ASSERT(!thread->IsAtSafepoint());
+
   {
-    MutexLocker ml(isolate->mutex());
-    if (isolate->background_compiler() == NULL) {
-      BackgroundCompiler* task = new BackgroundCompiler(isolate);
-      isolate->set_background_compiler(task);
-      start_task = true;
+    MonitorLocker ml(queue_monitor_);
+    running_ = false;
+    function_queue_->Clear();
+    ml.Notify();  // Stop waiting for the queue.
+  }
+
+  {
+    MonitorLocker ml_done(done_monitor_);
+    while (!done_) {
+      ml_done.WaitWithSafepointCheck(thread);
     }
   }
-  if (start_task) {
-    Dart::thread_pool()->Run(isolate->background_compiler());
+}
+
+void BackgroundCompiler::Enable() {
+  disabled_depth_--;
+  if (disabled_depth_ < 0) {
+    FATAL("Mismatched number of calls to BackgroundCompiler::Enable/Disable.");
   }
 }
 
+void BackgroundCompiler::Disable() {
+  Stop();
+  disabled_depth_++;
+}
+
+bool BackgroundCompiler::IsDisabled() {
+  return disabled_depth_ > 0;
+}
+
 #else  // DART_PRECOMPILED_RUNTIME
 
 bool UseKernelFrontEndFor(ParsedFunction* parsed_function) {
@@ -2315,15 +2310,11 @@
   UNREACHABLE();
 }
 
-void BackgroundCompiler::Stop(Isolate* isolate) {
+void BackgroundCompiler::Start() {
   UNREACHABLE();
 }
 
-void BackgroundCompiler::EnsureInit(Thread* thread) {
-  UNREACHABLE();
-}
-
-void BackgroundCompiler::Disable() {
+void BackgroundCompiler::Stop() {
   UNREACHABLE();
 }
 
@@ -2331,6 +2322,10 @@
   UNREACHABLE();
 }
 
+void BackgroundCompiler::Disable() {
+  UNREACHABLE();
+}
+
 bool BackgroundCompiler::IsDisabled() {
   UNREACHABLE();
   return true;
diff --git a/runtime/vm/compiler/jit/compiler.h b/runtime/vm/compiler/jit/compiler.h
index f3de477..38946f1 100644
--- a/runtime/vm/compiler/jit/compiler.h
+++ b/runtime/vm/compiler/jit/compiler.h
@@ -161,21 +161,49 @@
 // Current implementation: one task per isolate, it dies with the owning
 // isolate.
 // No OSR compilation in the background compiler.
-class BackgroundCompiler : public ThreadPool::Task {
+class BackgroundCompiler {
  public:
+  explicit BackgroundCompiler(Isolate* isolate);
   virtual ~BackgroundCompiler();
 
-  static void EnsureInit(Thread* thread);
-
-  // Stops background compiler of the given isolate.
-  // TODO(turnidge): Give Stop and Disable more distinct names.
-  static void Stop(Isolate* isolate);
-
-  static void Disable();
-
-  static void Enable();
-
-  static bool IsDisabled();
+  static void Start(Isolate* isolate) {
+    ASSERT(Thread::Current()->IsMutatorThread());
+    if (isolate->background_compiler() != NULL) {
+      isolate->background_compiler()->Start();
+    }
+  }
+  static void Stop(Isolate* isolate) {
+    ASSERT(Thread::Current()->IsMutatorThread());
+    if (isolate->background_compiler() != NULL) {
+      isolate->background_compiler()->Stop();
+    }
+  }
+  static void Enable(Isolate* isolate) {
+    ASSERT(Thread::Current()->IsMutatorThread());
+    if (isolate->background_compiler() != NULL) {
+      isolate->background_compiler()->Enable();
+    }
+  }
+  static void Disable(Isolate* isolate) {
+    ASSERT(Thread::Current()->IsMutatorThread());
+    if (isolate->background_compiler() != NULL) {
+      isolate->background_compiler()->Disable();
+    }
+  }
+  static bool IsDisabled(Isolate* isolate) {
+    ASSERT(Thread::Current()->IsMutatorThread());
+    if (isolate->background_compiler() != NULL) {
+      return isolate->background_compiler()->IsDisabled();
+    }
+    return false;
+  }
+  static bool IsRunning(Isolate* isolate) {
+    ASSERT(Thread::Current()->IsMutatorThread());
+    if (isolate->background_compiler() != NULL) {
+      return isolate->background_compiler()->IsRunning();
+    }
+    return false;
+  }
 
   // Call to optimize a function in the background, enters the function in the
   // compilation queue.
@@ -186,19 +214,27 @@
   BackgroundCompilationQueue* function_queue() const { return function_queue_; }
   bool is_running() const { return running_; }
 
- private:
-  explicit BackgroundCompiler(Isolate* isolate);
+  void Run();
 
-  virtual void Run();
+ private:
+  void Start();
+  void Stop();
+  void Enable();
+  void Disable();
+  bool IsDisabled();
+  bool IsRunning() { return !done_; }
 
   Isolate* isolate_;
-  bool running_;            // While true, will try to read queue and compile.
-  bool* done_;              // True if the thread is done.
-  Monitor* queue_monitor_;  // Controls access to the queue.
-  Monitor* done_monitor_;   // Notify/wait that the thread is done.
 
+  Monitor* queue_monitor_;  // Controls access to the queue.
   BackgroundCompilationQueue* function_queue_;
 
+  Monitor* done_monitor_;   // Notify/wait that the thread is done.
+  bool running_;            // While true, will try to read queue and compile.
+  bool done_;               // True if the thread is done.
+
+  int16_t disabled_depth_;
+
   DISALLOW_IMPLICIT_CONSTRUCTORS(BackgroundCompiler);
 };
 
diff --git a/runtime/vm/compiler_test.cc b/runtime/vm/compiler_test.cc
index 6e0e664..091dd5d 100644
--- a/runtime/vm/compiler_test.cc
+++ b/runtime/vm/compiler_test.cc
@@ -95,9 +95,8 @@
   // Constant in product mode.
   FLAG_background_compilation = true;
 #endif
-  BackgroundCompiler::EnsureInit(thread);
   Isolate* isolate = thread->isolate();
-  ASSERT(isolate->background_compiler() != NULL);
+  BackgroundCompiler::Start(isolate);
   isolate->background_compiler()->CompileOptimized(func);
   Monitor* m = new Monitor();
   {
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index e7ba61d..1f5959f 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1490,7 +1490,7 @@
   if (::Dart_IsError(state)) {
     return state;
   }
-  I->StopBackgroundCompiler();
+  BackgroundCompiler::Stop(I);
 
 #if defined(DEBUG)
   I->heap()->CollectAllGarbage();
@@ -6671,7 +6671,7 @@
   if (::Dart_IsError(state)) {
     return state;
   }
-  I->StopBackgroundCompiler();
+  BackgroundCompiler::Stop(I);
 
   ProgramVisitor::Dedup();
   Symbols::Compact(I);
@@ -6726,7 +6726,7 @@
   if (::Dart_IsError(state)) {
     return state;
   }
-  I->StopBackgroundCompiler();
+  BackgroundCompiler::Stop(I);
 
   ProgramVisitor::Dedup();
   Symbols::Compact(I);
diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
index 9d29b1f..2cb66ff 100644
--- a/runtime/vm/heap.cc
+++ b/runtime/vm/heap.cc
@@ -386,7 +386,7 @@
     NOT_IN_PRODUCT(isolate()->class_table()->UpdatePromoted());
     RecordAfterGC(kNew);
     PrintStats();
-    NOT_IN_PRODUCT(PrintStatsToTimeline(&tds));
+    NOT_IN_PRODUCT(PrintStatsToTimeline(&tds, reason));
     EndNewSpaceGC();
   }
 }
@@ -404,7 +404,7 @@
       NOT_IN_PRODUCT(isolate()->class_table()->UpdatePromoted());
       RecordAfterGC(kNew);
       PrintStats();
-      NOT_IN_PRODUCT(PrintStatsToTimeline(&tds));
+      NOT_IN_PRODUCT(PrintStatsToTimeline(&tds, reason));
       EndNewSpaceGC();
     }
     if ((reason == kNewSpace) && old_space_.NeedsGarbageCollection()) {
@@ -421,10 +421,11 @@
     VMTagScope tagScope(thread, VMTag::kGCOldSpaceTagId);
     TIMELINE_FUNCTION_GC_DURATION_BASIC(thread, "CollectOldGeneration");
     NOT_IN_PRODUCT(UpdateClassHeapStatsBeforeGC(kOld));
-    old_space_.MarkSweep();
+    bool compact = (reason == kCompaction) || FLAG_use_compactor;
+    old_space_.CollectGarbage(compact);
     RecordAfterGC(kOld);
     PrintStats();
-    NOT_IN_PRODUCT(PrintStatsToTimeline(&tds));
+    NOT_IN_PRODUCT(PrintStatsToTimeline(&tds, reason));
     // Some Code objects may have been collected so invalidate handler cache.
     thread->isolate()->handler_info_cache()->Clear();
     thread->isolate()->catch_entry_state_cache()->Clear();
@@ -636,6 +637,8 @@
       return "promotion";
     case kOldSpace:
       return "old space";
+    case kCompaction:
+      return "compaction";
     case kFull:
       return "full";
     case kIdle:
@@ -829,38 +832,39 @@
 #endif  // !defined(PRODUCT)
 }
 
-void Heap::PrintStatsToTimeline(TimelineEventScope* event) {
+void Heap::PrintStatsToTimeline(TimelineEventScope* event, GCReason reason) {
 #if !defined(PRODUCT)
   if ((event == NULL) || !event->enabled()) {
     return;
   }
   intptr_t arguments = event->GetNumArguments();
-  event->SetNumArguments(arguments + 12);
-  event->FormatArgument(arguments + 0, "Before.New.Used (kB)", "%" Pd "",
+  event->SetNumArguments(arguments + 13);
+  event->CopyArgument(arguments + 0, "Reason", GCReasonToString(reason));
+  event->FormatArgument(arguments + 1, "Before.New.Used (kB)", "%" Pd "",
                         RoundWordsToKB(stats_.before_.new_.used_in_words));
-  event->FormatArgument(arguments + 1, "After.New.Used (kB)", "%" Pd "",
+  event->FormatArgument(arguments + 2, "After.New.Used (kB)", "%" Pd "",
                         RoundWordsToKB(stats_.after_.new_.used_in_words));
-  event->FormatArgument(arguments + 2, "Before.Old.Used (kB)", "%" Pd "",
+  event->FormatArgument(arguments + 3, "Before.Old.Used (kB)", "%" Pd "",
                         RoundWordsToKB(stats_.before_.old_.used_in_words));
-  event->FormatArgument(arguments + 3, "After.Old.Used (kB)", "%" Pd "",
+  event->FormatArgument(arguments + 4, "After.Old.Used (kB)", "%" Pd "",
                         RoundWordsToKB(stats_.after_.old_.used_in_words));
 
-  event->FormatArgument(arguments + 4, "Before.New.Capacity (kB)", "%" Pd "",
+  event->FormatArgument(arguments + 5, "Before.New.Capacity (kB)", "%" Pd "",
                         RoundWordsToKB(stats_.before_.new_.capacity_in_words));
-  event->FormatArgument(arguments + 5, "After.New.Capacity (kB)", "%" Pd "",
+  event->FormatArgument(arguments + 6, "After.New.Capacity (kB)", "%" Pd "",
                         RoundWordsToKB(stats_.after_.new_.capacity_in_words));
-  event->FormatArgument(arguments + 6, "Before.Old.Capacity (kB)", "%" Pd "",
+  event->FormatArgument(arguments + 7, "Before.Old.Capacity (kB)", "%" Pd "",
                         RoundWordsToKB(stats_.before_.old_.capacity_in_words));
-  event->FormatArgument(arguments + 7, "After.Old.Capacity (kB)", "%" Pd "",
+  event->FormatArgument(arguments + 8, "After.Old.Capacity (kB)", "%" Pd "",
                         RoundWordsToKB(stats_.after_.old_.capacity_in_words));
 
-  event->FormatArgument(arguments + 8, "Before.New.External (kB)", "%" Pd "",
+  event->FormatArgument(arguments + 9, "Before.New.External (kB)", "%" Pd "",
                         RoundWordsToKB(stats_.before_.new_.external_in_words));
-  event->FormatArgument(arguments + 9, "After.New.External (kB)", "%" Pd "",
+  event->FormatArgument(arguments + 10, "After.New.External (kB)", "%" Pd "",
                         RoundWordsToKB(stats_.after_.new_.external_in_words));
-  event->FormatArgument(arguments + 10, "Before.Old.External (kB)", "%" Pd "",
+  event->FormatArgument(arguments + 11, "Before.Old.External (kB)", "%" Pd "",
                         RoundWordsToKB(stats_.before_.old_.external_in_words));
-  event->FormatArgument(arguments + 11, "After.Old.External (kB)", "%" Pd "",
+  event->FormatArgument(arguments + 12, "After.Old.External (kB)", "%" Pd "",
                         RoundWordsToKB(stats_.after_.old_.external_in_words));
 #endif  // !defined(PRODUCT)
 }
diff --git a/runtime/vm/heap.h b/runtime/vm/heap.h
index aa4e4be..b8bcf3a 100644
--- a/runtime/vm/heap.h
+++ b/runtime/vm/heap.h
@@ -45,6 +45,7 @@
     kNewSpace,
     kPromotion,
     kOldSpace,
+    kCompaction,
     kFull,
     kIdle,
     kGCAtAlloc,
@@ -321,7 +322,7 @@
   void RecordAfterGC(Space space);
   void PrintStats();
   void UpdateClassHeapStatsBeforeGC(Heap::Space space);
-  void PrintStatsToTimeline(TimelineEventScope* event);
+  void PrintStatsToTimeline(TimelineEventScope* event, GCReason reason);
 
   // Updates gc in progress flags.
   bool BeginNewSpaceGC(Thread* thread);
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 607add0..2431072 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -234,7 +234,7 @@
   }
   // Verify that all canonical instances are correctly setup in the
   // corresponding canonical tables.
-  StopBackgroundCompiler();
+  BackgroundCompiler::Stop(this);
   heap()->CollectAllGarbage();
   Thread* thread = Thread::Current();
   HeapIterationScope iteration(thread);
@@ -503,8 +503,9 @@
   Zone* zone = stack_zone.GetZone();
   HandleScope handle_scope(thread);
 #ifndef PRODUCT
-  TimelineDurationScope tds(thread, Timeline::GetIsolateStream(),
-                            "HandleMessage");
+  TimelineDurationScope tds(
+      thread, Timeline::GetIsolateStream(),
+      message->IsOOB() ? "HandleOOBMessage" : "HandleMessage");
   tds.SetNumArguments(1);
   tds.CopyArgument(0, "isolateName", I->name());
 #endif
@@ -880,7 +881,6 @@
       class_table_(),
       single_step_(false),
       isolate_flags_(0),
-      background_compiler_disabled_depth_(0),
       background_compiler_(NULL),
 #if !defined(PRODUCT)
       debugger_(NULL),
@@ -928,7 +928,7 @@
       message_handler_(NULL),
       spawn_state_(NULL),
       defer_finalization_count_(0),
-      pending_deopts_(new MallocGrowableArray<PendingLazyDeopt>),
+      pending_deopts_(new MallocGrowableArray<PendingLazyDeopt>()),
       deopt_context_(NULL),
       tag_table_(GrowableObjectArray::null()),
       deoptimized_code_array_(GrowableObjectArray::null()),
@@ -959,14 +959,20 @@
         "which violates the Dart standard.\n"
         "         See dartbug.com/30524 for more information.\n");
   }
+
+  NOT_IN_PRECOMPILED(background_compiler_ = new BackgroundCompiler(this));
 }
 
 #undef REUSABLE_HANDLE_SCOPE_INIT
 #undef REUSABLE_HANDLE_INITIALIZERS
 
 Isolate::~Isolate() {
+  delete background_compiler_;
+  background_compiler_ = NULL;
+
 #if !defined(PRODUCT)
   delete debugger_;
+  debugger_ = NULL;
   if (FLAG_support_service) {
     delete object_id_ring_;
   }
@@ -1766,13 +1772,6 @@
 #endif  // !defined(PRODUCT)
 }
 
-void Isolate::StopBackgroundCompiler() {
-  // Wait until all background compilation has finished.
-  if (background_compiler_ != NULL) {
-    BackgroundCompiler::Stop(this);
-  }
-}
-
 #if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
 void Isolate::MaybeIncreaseReloadEveryNStackOverflowChecks() {
   if (FLAG_reload_every_back_off) {
@@ -1791,7 +1790,9 @@
 
 void Isolate::Shutdown() {
   ASSERT(this == Isolate::Current());
-  StopBackgroundCompiler();
+  BackgroundCompiler::Stop(this);
+  delete background_compiler_;
+  background_compiler_ = NULL;
 
 #if defined(DEBUG)
   if (heap_ != NULL && FLAG_verify_on_transition) {
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index f3c16cf..f91655f 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -450,26 +450,6 @@
   BackgroundCompiler* background_compiler() const {
     return background_compiler_;
   }
-  void set_background_compiler(BackgroundCompiler* value) {
-    // Do not overwrite a background compiler (memory leak).
-    ASSERT((value == NULL) || (background_compiler_ == NULL));
-    background_compiler_ = value;
-  }
-
-  void enable_background_compiler() {
-    background_compiler_disabled_depth_--;
-    if (background_compiler_disabled_depth_ < 0) {
-      FATAL(
-          "Mismatched number of calls to disable_background_compiler and "
-          "enable_background_compiler.");
-    }
-  }
-
-  void disable_background_compiler() { background_compiler_disabled_depth_++; }
-
-  bool is_background_compiler_disabled() const {
-    return background_compiler_disabled_depth_ > 0;
-  }
 
 #if !defined(PRODUCT)
   void UpdateLastAllocationProfileAccumulatorResetTimestamp() {
@@ -754,8 +734,6 @@
   static bool IsolateCreationEnabled();
   static bool IsVMInternalIsolate(Isolate* isolate);
 
-  void StopBackgroundCompiler();
-
 #if !defined(PRODUCT)
   intptr_t reload_every_n_stack_overflow_checks() const {
     return reload_every_n_stack_overflow_checks_;
@@ -877,7 +855,6 @@
   uint32_t isolate_flags_;
 
   // Background compilation.
-  int16_t background_compiler_disabled_depth_;
   BackgroundCompiler* background_compiler_;
 
 // Fields that aren't needed in a product build go here with boolean flags at
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 2c080f5..5ebbd9e 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -624,7 +624,7 @@
   become_enum_mappings_ = GrowableObjectArray::New(Heap::kOld);
 
   // Disable the background compiler while we are performing the reload.
-  BackgroundCompiler::Disable();
+  BackgroundCompiler::Disable(I);
 
   // Ensure all functions on the stack have unoptimized code.
   EnsuredUnoptimizedCodeForStack();
@@ -682,7 +682,7 @@
   // WEIRD CONTROL FLOW ENDS.
 
   // Re-enable the background compiler. Do this before propagating any errors.
-  BackgroundCompiler::Enable();
+  BackgroundCompiler::Enable(I);
 
   if (result.IsUnwindError()) {
     if (thread->top_exit_frame_info() == 0) {
diff --git a/runtime/vm/kernel.cc b/runtime/vm/kernel.cc
index 1a30bfd..8cbc078 100644
--- a/runtime/vm/kernel.cc
+++ b/runtime/vm/kernel.cc
@@ -19,7 +19,8 @@
   TranslationHelper translation_helper(Thread::Current());
   translation_helper.InitFromScript(script);
 
-  StreamingFlowGraphBuilder builder(&translation_helper, field.Script(), zone,
+  StreamingFlowGraphBuilder builder(&translation_helper,
+                                    Script::Handle(zone, field.Script()), zone,
                                     TypedData::Handle(zone, field.KernelData()),
                                     field.KernelDataProgramOffset());
   builder.SetOffset(field.kernel_offset());
@@ -28,6 +29,112 @@
   return field_helper.FieldHasFunctionLiteralInitializer(start, end);
 }
 
+KernelLineStartsReader::KernelLineStartsReader(
+    const dart::TypedData& line_starts_data,
+    dart::Zone* zone)
+    : line_starts_data_(line_starts_data) {
+  TypedDataElementType type = line_starts_data_.ElementType();
+  if (type == kInt8ArrayElement) {
+    helper_ = new KernelInt8LineStartsHelper();
+  } else if (type == kInt16ArrayElement) {
+    helper_ = new KernelInt16LineStartsHelper();
+  } else if (type == kInt32ArrayElement) {
+    helper_ = new KernelInt32LineStartsHelper();
+  } else {
+    UNREACHABLE();
+  }
+}
+
+intptr_t KernelLineStartsReader::LineNumberForPosition(
+    intptr_t position) const {
+  intptr_t line_count = line_starts_data_.Length();
+  intptr_t current_start = 0;
+  for (intptr_t i = 0; i < line_count; ++i) {
+    current_start += helper_->At(line_starts_data_, i);
+    if (current_start > position) {
+      // If current_start is greater than the desired position, it means that
+      // it is for the line after |position|. However, since line numbers
+      // start at 1, we just return |i|.
+      return i;
+    }
+
+    if (current_start == position) {
+      return i + 1;
+    }
+  }
+  return line_count;
+}
+
+void KernelLineStartsReader::LocationForPosition(intptr_t position,
+                                                 intptr_t* line,
+                                                 intptr_t* col) const {
+  intptr_t line_count = line_starts_data_.Length();
+  intptr_t current_start = 0;
+  intptr_t previous_start = 0;
+  for (intptr_t i = 0; i < line_count; ++i) {
+    current_start += helper_->At(line_starts_data_, i);
+    if (current_start > position) {
+      *line = i;
+      if (col != NULL) {
+        *col = position - previous_start + 1;
+      }
+      return;
+    }
+    if (current_start == position) {
+      *line = i + 1;
+      if (col != NULL) {
+        *col = 1;
+      }
+      return;
+    }
+    previous_start = current_start;
+  }
+
+  // If the start of any of the lines did not cross |position|,
+  // then it means the position falls on the last line.
+  *line = line_count;
+  if (col != NULL) {
+    *col = position - current_start + 1;
+  }
+}
+
+void KernelLineStartsReader::TokenRangeAtLine(
+    intptr_t source_length,
+    intptr_t line_number,
+    TokenPosition* first_token_index,
+    TokenPosition* last_token_index) const {
+  ASSERT(line_number <= line_starts_data_.Length());
+  intptr_t cumulative = 0;
+  for (intptr_t i = 0; i < line_number; ++i) {
+    cumulative += helper_->At(line_starts_data_, i);
+  }
+  *first_token_index = dart::TokenPosition(cumulative);
+  if (line_number == line_starts_data_.Length()) {
+    *last_token_index = dart::TokenPosition(source_length);
+  } else {
+    *last_token_index = dart::TokenPosition(
+        cumulative + helper_->At(line_starts_data_, line_number) - 1);
+  }
+}
+
+int32_t KernelLineStartsReader::KernelInt8LineStartsHelper::At(
+    const dart::TypedData& data,
+    intptr_t index) const {
+  return data.GetInt8(index);
+}
+
+int32_t KernelLineStartsReader::KernelInt16LineStartsHelper::At(
+    const dart::TypedData& data,
+    intptr_t index) const {
+  return data.GetInt16(index << 1);
+}
+
+int32_t KernelLineStartsReader::KernelInt32LineStartsHelper::At(
+    const dart::TypedData& data,
+    intptr_t index) const {
+  return data.GetInt32(index << 2);
+}
+
 }  // namespace kernel
 
 }  // namespace dart
diff --git a/runtime/vm/kernel.h b/runtime/vm/kernel.h
index 6bb2b35..1452e5c 100644
--- a/runtime/vm/kernel.h
+++ b/runtime/vm/kernel.h
@@ -114,6 +114,72 @@
   DISALLOW_COPY_AND_ASSIGN(Program);
 };
 
+class KernelLineStartsReader {
+ public:
+  KernelLineStartsReader(const dart::TypedData& line_starts_data,
+                         dart::Zone* zone);
+
+  ~KernelLineStartsReader() { delete helper_; }
+
+  int32_t DeltaAt(intptr_t index) const {
+    return helper_->At(line_starts_data_, index);
+  }
+
+  intptr_t LineNumberForPosition(intptr_t position) const;
+
+  void LocationForPosition(intptr_t position,
+                           intptr_t* line,
+                           intptr_t* col) const;
+
+  void TokenRangeAtLine(intptr_t source_length,
+                        intptr_t line_number,
+                        dart::TokenPosition* first_token_index,
+                        dart::TokenPosition* last_token_index) const;
+
+ private:
+  class KernelLineStartsHelper {
+   public:
+    KernelLineStartsHelper() {}
+    virtual ~KernelLineStartsHelper() {}
+    virtual int32_t At(const dart::TypedData& data, intptr_t index) const = 0;
+
+   private:
+    DISALLOW_COPY_AND_ASSIGN(KernelLineStartsHelper);
+  };
+
+  class KernelInt8LineStartsHelper : public KernelLineStartsHelper {
+   public:
+    KernelInt8LineStartsHelper() {}
+    virtual int32_t At(const dart::TypedData& data, intptr_t index) const;
+
+   private:
+    DISALLOW_COPY_AND_ASSIGN(KernelInt8LineStartsHelper);
+  };
+
+  class KernelInt16LineStartsHelper : public KernelLineStartsHelper {
+   public:
+    KernelInt16LineStartsHelper() {}
+    virtual int32_t At(const dart::TypedData& data, intptr_t index) const;
+
+   private:
+    DISALLOW_COPY_AND_ASSIGN(KernelInt16LineStartsHelper);
+  };
+
+  class KernelInt32LineStartsHelper : public KernelLineStartsHelper {
+   public:
+    KernelInt32LineStartsHelper() {}
+    virtual int32_t At(const dart::TypedData& data, intptr_t index) const;
+
+   private:
+    DISALLOW_COPY_AND_ASSIGN(KernelInt32LineStartsHelper);
+  };
+
+  const dart::TypedData& line_starts_data_;
+  KernelLineStartsHelper* helper_;
+
+  DISALLOW_COPY_AND_ASSIGN(KernelLineStartsReader);
+};
+
 ParsedFunction* ParseStaticFieldInitializer(Zone* zone, const Field& field);
 
 bool FieldHasFunctionLiteralInitializer(const Field& field,
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 16b2fd4..edc7192 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -19,7 +19,7 @@
 // Keep in sync with package:kernel/lib/binary/tag.dart.
 
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
-static const uint32_t kBinaryFormatVersion = 1;
+static const uint32_t kBinaryFormatVersion = 2;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 enum Tag {
@@ -38,6 +38,7 @@
   kSuperInitializer = 9,
   kRedirectingInitializer = 10,
   kLocalInitializer = 11,
+  kAssertInitializer = 12,
 
   kDirectPropertyGet = 15,
   kDirectPropertySet = 16,
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 9c2a480..6f453cd 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -347,7 +347,7 @@
       kernel_program_info_(
           KernelProgramInfo::ZoneHandle(zone_, script.kernel_program_info())),
       translation_helper_(this, thread_),
-      builder_(&translation_helper_, script.raw(), zone_, kernel_data, 0),
+      builder_(&translation_helper_, script, zone_, kernel_data, 0),
       external_name_class_(Class::Handle(Z)),
       external_name_field_(Field::Handle(Z)),
       potential_natives_(GrowableObjectArray::Handle(Z)) {
diff --git a/runtime/vm/libdart_dependency_helper.cc b/runtime/vm/libdart_dependency_helper.cc
deleted file mode 100644
index 75040ca..0000000
--- a/runtime/vm/libdart_dependency_helper.cc
+++ /dev/null
@@ -1,7 +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.
-
-int main(int argc, char* argv[]) {
-  return 0;
-}
diff --git a/runtime/vm/malloc_hooks_ia32.cc b/runtime/vm/malloc_hooks_ia32.cc
index 48bb75f..2b7a371 100644
--- a/runtime/vm/malloc_hooks_ia32.cc
+++ b/runtime/vm/malloc_hooks_ia32.cc
@@ -10,7 +10,11 @@
 
 namespace dart {
 
+#if defined(DEBUG)
+const intptr_t kSkipCount = 6;
+#elif !(defined(PRODUCT) || defined(DEBUG))
 const intptr_t kSkipCount = 5;
+#endif
 
 }  // namespace dart
 
diff --git a/runtime/vm/mixin_test.cc b/runtime/vm/mixin_test.cc
index 9c7a3e0..fc73af3 100644
--- a/runtime/vm/mixin_test.cc
+++ b/runtime/vm/mixin_test.cc
@@ -61,7 +61,6 @@
       "  } catch (e) {\n"
       "    return e.toString().split('\\n').first;\n"
       "  }\n"
-      "}"
       "}\n",
     },
     {
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 5ee8661..3493bc2 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -14,6 +14,7 @@
 #include "vm/compiler/aot/precompiler.h"
 #include "vm/compiler/assembler/assembler.h"
 #include "vm/compiler/assembler/disassembler.h"
+#include "vm/compiler/frontend/kernel_binary_flowgraph.h"
 #include "vm/compiler/frontend/kernel_to_il.h"
 #include "vm/compiler/intrinsifier.h"
 #include "vm/compiler/jit/compiler.h"
@@ -31,6 +32,7 @@
 #include "vm/hash_table.h"
 #include "vm/heap.h"
 #include "vm/isolate_reload.h"
+#include "vm/kernel.h"
 #include "vm/native_symbol.h"
 #include "vm/object_store.h"
 #include "vm/parser.h"
@@ -81,7 +83,6 @@
             "Remove script timestamps to allow for deterministic testing.");
 
 DECLARE_FLAG(bool, show_invisible_frames);
-DECLARE_FLAG(bool, strong);
 DECLARE_FLAG(bool, trace_deoptimization);
 DECLARE_FLAG(bool, trace_deoptimization_verbose);
 DECLARE_FLAG(bool, trace_reload);
@@ -2790,6 +2791,36 @@
   return result.raw();
 }
 
+bool AbstractType::InstantiateAndTestSubtype(
+    AbstractType* subtype,
+    AbstractType* supertype,
+    Error* bound_error,
+    const TypeArguments& instantiator_type_args,
+    const TypeArguments& function_type_args) {
+  if (!subtype->IsInstantiated()) {
+    *subtype =
+        subtype->InstantiateFrom(instantiator_type_args, function_type_args,
+                                 kAllFree, bound_error, NULL, NULL, Heap::kOld);
+  }
+  if (!bound_error->IsNull()) {
+    return false;
+  }
+  if (!supertype->IsInstantiated()) {
+    *supertype = supertype->InstantiateFrom(
+        instantiator_type_args, function_type_args, kAllFree, bound_error, NULL,
+        NULL, Heap::kOld);
+  }
+  if (!bound_error->IsNull()) {
+    return false;
+  }
+  bool is_subtype_of =
+      subtype->IsSubtypeOf(*supertype, bound_error, NULL, Heap::kOld);
+  if (!bound_error->IsNull()) {
+    return false;
+  }
+  return is_subtype_of;
+}
+
 RawArray* Class::invocation_dispatcher_cache() const {
   return raw_ptr()->invocation_dispatcher_cache_;
 }
@@ -6893,6 +6924,11 @@
   if (implicit_closure_function() != Function::null()) {
     return implicit_closure_function();
   }
+#if defined(DART_PRECOMPILED_RUNTIME)
+  // In AOT mode all implicit closures are pre-created.
+  UNREACHABLE();
+  return Function::null();
+#else
   ASSERT(!IsSignatureFunction() && !IsClosureFunction());
   Thread* thread = Thread::Current();
   Zone* zone = thread->zone();
@@ -6954,6 +6990,50 @@
   }
   closure_function.set_kernel_offset(kernel_offset());
 
+  // In strong mode, change covariant parameter types to Object in the implicit
+  // closure of a method compiled by kernel.
+  // The VM's parser erases covariant types immediately in strong mode.
+  if (thread->isolate()->strong() && !is_static() && (kernel_offset() > 0)) {
+    const Script& function_script = Script::Handle(zone, script());
+    kernel::TranslationHelper translation_helper(thread);
+    kernel::StreamingFlowGraphBuilder builder(
+        &translation_helper, function_script, zone,
+        TypedData::Handle(zone, KernelData()), KernelDataProgramOffset());
+    translation_helper.InitFromScript(function_script);
+    builder.SetOffset(kernel_offset());
+
+    builder.ReadUntilFunctionNode();
+    kernel::FunctionNodeHelper fn_helper(&builder);
+
+    // Check the positional parameters, including the optional positional ones.
+    fn_helper.ReadUntilExcluding(
+        kernel::FunctionNodeHelper::kPositionalParameters);
+    intptr_t num_pos_params = builder.ReadListLength();
+    ASSERT(num_pos_params ==
+           num_fixed_params - 1 + (has_opt_pos_params ? num_opt_params : 0));
+    const Type& object_type = Type::Handle(zone, Type::ObjectType());
+    for (intptr_t i = 0; i < num_pos_params; ++i) {
+      kernel::VariableDeclarationHelper var_helper(&builder);
+      var_helper.ReadUntilExcluding(kernel::VariableDeclarationHelper::kEnd);
+      if (var_helper.IsCovariant() || var_helper.IsGenericCovariantImpl()) {
+        closure_function.SetParameterTypeAt(i + 1, object_type);
+      }
+    }
+    fn_helper.SetJustRead(kernel::FunctionNodeHelper::kPositionalParameters);
+
+    // Check the optional named parameters.
+    fn_helper.ReadUntilExcluding(kernel::FunctionNodeHelper::kNamedParameters);
+    intptr_t num_named_params = builder.ReadListLength();
+    ASSERT(num_named_params == (has_opt_pos_params ? 0 : num_opt_params));
+    for (intptr_t i = 0; i < num_named_params; ++i) {
+      kernel::VariableDeclarationHelper var_helper(&builder);
+      var_helper.ReadUntilExcluding(kernel::VariableDeclarationHelper::kEnd);
+      if (var_helper.IsCovariant() || var_helper.IsGenericCovariantImpl()) {
+        closure_function.SetParameterTypeAt(num_pos_params + 1 + i,
+                                            object_type);
+      }
+    }
+  }
   const Type& signature_type =
       Type::Handle(zone, closure_function.SignatureType());
   if (!signature_type.IsFinalized()) {
@@ -6962,6 +7042,7 @@
   set_implicit_closure_function(closure_function);
   ASSERT(closure_function.IsImplicitClosureFunction());
   return closure_function.raw();
+#endif  // defined(DART_PRECOMPILED_RUNTIME)
 }
 
 void Function::DropUncompiledImplicitClosureFunction() const {
@@ -7035,7 +7116,7 @@
 // and take the rest of the arguments from the invocation.
 //
 // Converted closure functions in VM follow same discipline as implicit closure
-// functions, because they are similar in many ways. For further deatils, please
+// functions, because they are similar in many ways. For further details, please
 // refer to the following methods:
 //   -> Function::ConvertedClosureFunction
 //   -> StreamingFlowGraphBuilder::BuildGraphOfConvertedClosureFunction
@@ -7046,9 +7127,6 @@
 //
 // Function::ConvertedClosureFunction method follows the logic of
 // Function::ImplicitClosureFunction method.
-//
-// TODO(29181): Adjust the method to correctly pass type parameters after they
-// are enabled in closure conversion.
 RawFunction* Function::ConvertedClosureFunction() const {
   // Return the existing converted closure function if any.
   if (converted_closure_function() != Function::null()) {
@@ -9224,18 +9302,21 @@
       info.Add(line_separator);  // New line.
       return info.raw();
     }
+#if !defined(DART_PRECOMPILED_RUNTIME)
     intptr_t line_count = line_starts_data.Length();
     ASSERT(line_count > 0);
     const Array& debug_positions_array = Array::Handle(debug_positions());
     intptr_t token_count = debug_positions_array.Length();
     int token_index = 0;
 
+    kernel::KernelLineStartsReader line_starts_reader(line_starts_data, zone);
+    intptr_t previous_start = 0;
     for (int line_index = 0; line_index < line_count; ++line_index) {
-      intptr_t start = line_starts_data.GetInt32(line_index * 4);
+      intptr_t start = previous_start + line_starts_reader.DeltaAt(line_index);
       // Output the rest of the tokens if we have no next line.
       intptr_t end = TokenPosition::kMaxSourcePos;
       if (line_index + 1 < line_count) {
-        end = line_starts_data.GetInt32((line_index + 1) * 4);
+        end = start + line_starts_reader.DeltaAt(line_index + 1);
       }
       bool first = true;
       while (token_index < token_count) {
@@ -9256,7 +9337,9 @@
         info.Add(value);
         ++token_index;
       }
+      previous_start = start;
     }
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
     return info.raw();
   }
 
@@ -9490,22 +9573,31 @@
     set_line_starts(line_starts_data);
   }
 
-  ASSERT(line_starts_data.Length() > 0);
-  intptr_t offset = target_token_pos.Pos();
-  intptr_t min = 0;
-  intptr_t max = line_starts_data.Length() - 1;
+  if (kind() == RawScript::kKernelTag) {
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    kernel::KernelLineStartsReader line_starts_reader(line_starts_data, zone);
+    return line_starts_reader.LineNumberForPosition(target_token_pos.value());
+#else
+    return 0;
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
+  } else {
+    ASSERT(line_starts_data.Length() > 0);
+    intptr_t offset = target_token_pos.Pos();
+    intptr_t min = 0;
+    intptr_t max = line_starts_data.Length() - 1;
 
-  // Binary search to find the line containing this offset.
-  while (min < max) {
-    int midpoint = (max - min + 1) / 2 + min;
-    int32_t token_pos = line_starts_data.GetInt32(midpoint * 4);
-    if (token_pos > offset) {
-      max = midpoint - 1;
-    } else {
-      min = midpoint;
+    // Binary search to find the line containing this offset.
+    while (min < max) {
+      int midpoint = (max - min + 1) / 2 + min;
+      int32_t token_pos = line_starts_data.GetInt32(midpoint * 4);
+      if (token_pos > offset) {
+        max = midpoint - 1;
+      } else {
+        min = midpoint;
+      }
     }
+    return min + 1;  // Line numbers start at 1.
   }
-  return min + 1;  // Line numbers start at 1.
 }
 
 void Script::GetTokenLocation(TokenPosition token_pos,
@@ -9528,31 +9620,15 @@
       }
       return;
     }
+#if !defined(DART_PRECOMPILED_RUNTIME)
     ASSERT(line_starts_data.Length() > 0);
-    intptr_t offset = token_pos.value();
-    intptr_t min = 0;
-    intptr_t max = line_starts_data.Length() - 1;
-
-    // Binary search to find the line containing this offset.
-    while (min < max) {
-      intptr_t midpoint = (max - min + 1) / 2 + min;
-
-      int32_t value = line_starts_data.GetInt32(midpoint * 4);
-      if (value > offset) {
-        max = midpoint - 1;
-      } else {
-        min = midpoint;
-      }
-    }
-    *line = min + 1;  // Line numbers start at 1.
-    int32_t min_value = line_starts_data.GetInt32(min * 4);
-    if (column != NULL) {
-      *column = offset - min_value + 1;
-    }
+    kernel::KernelLineStartsReader line_starts_reader(line_starts_data, zone);
+    line_starts_reader.LocationForPosition(token_pos.value(), line, column);
     if (token_len != NULL) {
       // We don't explicitly save this data: Load the source
       // and find it from there.
       const String& source = String::Handle(zone, Source());
+      intptr_t offset = token_pos.value();
       *token_len = 1;
       if (offset < source.Length() &&
           Scanner::IsIdentStartChar(source.CharAt(offset))) {
@@ -9563,6 +9639,7 @@
         }
       }
     }
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
     return;
   }
 
@@ -9626,16 +9703,13 @@
       *last_token_index = TokenPosition::kNoSource;
       return;
     }
-    ASSERT(line_starts_data.Length() >= line_number);
-    int32_t value = line_starts_data.GetInt32((line_number - 1) * 4);
-    *first_token_index = TokenPosition(value);
-    if (line_starts_data.Length() > line_number) {
-      value = line_starts_data.GetInt32(line_number * 4);
-      *last_token_index = TokenPosition(value - 1);
-    } else {
-      // Length of source is last possible token in this script.
-      *last_token_index = TokenPosition(String::Handle(Source()).Length());
-    }
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    kernel::KernelLineStartsReader line_starts_reader(
+        line_starts_data, Thread::Current()->zone());
+    line_starts_reader.TokenRangeAtLine(String::Handle(Source()).Length(),
+                                        line_number, first_token_index,
+                                        last_token_index);
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
     return;
   }
 
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index dcdd27d..9b9958f 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -6015,6 +6015,15 @@
                     space);
   }
 
+  // Returns true iff subtype is a subtype of supertype, false otherwise or if
+  // an error occurred.
+  static bool InstantiateAndTestSubtype(
+      AbstractType* subtype,
+      AbstractType* supertype,
+      Error* bound_error,
+      const TypeArguments& instantiator_type_args,
+      const TypeArguments& function_type_args);
+
  private:
   // Check the subtype or 'more specific' relationship.
   bool TypeTest(TypeTestKind test_kind,
diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc
index 2b8fcb1..05a6dbb 100644
--- a/runtime/vm/pages.cc
+++ b/runtime/vm/pages.cc
@@ -865,7 +865,7 @@
   return estimated_mark_completion <= deadline;
 }
 
-void PageSpace::MarkSweep() {
+void PageSpace::CollectGarbage(bool compact) {
   Thread* thread = Thread::Current();
   Isolate* isolate = heap_->isolate();
   ASSERT(isolate == Isolate::Current());
@@ -984,7 +984,7 @@
 
       mid3 = OS::GetCurrentMonotonicMicros();
 
-      if (FLAG_use_compactor) {
+      if (compact) {
         Compact(thread);
       } else if (FLAG_concurrent_sweep) {
         ConcurrentSweep(isolate);
@@ -1039,7 +1039,7 @@
     ml.NotifyAll();
   }
 
-  if (FLAG_use_compactor) {
+  if (compact) {
     // Const object tables are hashed by address: rehash.
     SafepointOperationScope safepoint(thread);
     thread->isolate()->RehashConstants();
diff --git a/runtime/vm/pages.h b/runtime/vm/pages.h
index 9ebc20f..ed48824 100644
--- a/runtime/vm/pages.h
+++ b/runtime/vm/pages.h
@@ -270,8 +270,8 @@
   // code.
   bool ShouldCollectCode();
 
-  // Collect the garbage in the page space using mark-sweep.
-  void MarkSweep();
+  // Collect the garbage in the page space using mark-sweep or mark-compact.
+  void CollectGarbage(bool compact);
 
   void AddRegionsToObjectSet(ObjectSet* set) const;
 
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 0e4397c..a476faa 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -141,12 +141,12 @@
  public:
   explicit RecursionChecker(Parser* p) : parser_(p) {
     parser_->recursion_counter_++;
-    // No need to check the stack unless the parser is in an unusually deep
-    // recurive state. Thus, we omit the more expensive stack checks in
-    // the common case.
-    const int kMaxUncheckedDepth = 100;  // Somewhat arbitrary.
-    if (parser_->recursion_counter_ > kMaxUncheckedDepth) {
-      parser_->CheckStack();
+    // This limit also protects against stack overflow in the flow graph builder
+    // and some optimization passes, which may use more stack than the parser
+    // for the same function.
+    // The limit is somewhat arbitrary.
+    if (parser_->recursion_counter_ > 256) {
+      parser_->ReportError("stack overflow while parsing");
     }
   }
   ~RecursionChecker() { parser_->recursion_counter_--; }
@@ -1971,6 +1971,7 @@
 
   if (CurrentToken() == Token::kCOVARIANT &&
       (LookaheadToken(1) == Token::kFINAL || LookaheadToken(1) == Token::kVAR ||
+       LookaheadToken(1) == Token::kVOID ||
        Token::IsIdentifier(LookaheadToken(1)))) {
     parameter.is_covariant = true;
     ConsumeToken();
@@ -6546,14 +6547,6 @@
   pending_classes.Add(toplevel_class, Heap::kOld);
 }
 
-void Parser::CheckStack() {
-  uword c_stack_pos = Thread::GetCurrentStackPointer();
-  uword c_stack_limit = OSThread::Current()->stack_limit_with_headroom();
-  if (c_stack_pos < c_stack_limit) {
-    ReportError("stack overflow while parsing");
-  }
-}
-
 void Parser::ChainNewBlock(LocalScope* outer_scope) {
   Block* block = new (Z) Block(current_block_, outer_scope,
                                new (Z) SequenceNode(TokenPos(), outer_scope));
@@ -8231,6 +8224,12 @@
       nesting_level--;
     } else if (ct == Token::kSHR) {
       nesting_level -= 2;
+    } else if (ct == Token::kVOID) {
+      ConsumeToken();
+      if (!IsFunctionTypeSymbol()) {
+        return false;
+      }
+      continue;
     } else if (ct == Token::kIDENT) {
       if (IsFunctionTypeSymbol()) {
         if (!TryParseType(false)) {
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index 1d3093a..14333fb 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -454,9 +454,6 @@
                                          const Function& constructor,
                                          const TypeArguments& type_arguments);
 
-  // Report error if parsed code is too deeply nested; avoid stack overflow.
-  void CheckStack();
-
   // Report already formatted error.
   static void ReportError(const Error& error);
 
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 05c9f16..df1dcdb 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -356,6 +356,45 @@
   arguments.SetReturn(type_arguments);
 }
 
+// Instantiate type.
+// Arg0: type to be a subtype of the other
+// Arg1: type to be a supertype of the other
+// Arg2: instantiator type arguments
+// Arg3: function type arguments
+// Arg4: variable name of the subtype parameter
+// No return value.
+DEFINE_RUNTIME_ENTRY(SubtypeCheck, 5) {
+  AbstractType& subtype = AbstractType::CheckedHandle(zone, arguments.ArgAt(0));
+  AbstractType& supertype =
+      AbstractType::CheckedHandle(zone, arguments.ArgAt(1));
+  const TypeArguments& instantiator_type_args =
+      TypeArguments::CheckedHandle(zone, arguments.ArgAt(2));
+  const TypeArguments& function_type_args =
+      TypeArguments::CheckedHandle(zone, arguments.ArgAt(3));
+  const String& dst_name = String::CheckedHandle(zone, arguments.ArgAt(4));
+
+  ASSERT(!subtype.IsNull() && !subtype.IsMalformedOrMalbounded());
+  ASSERT(!supertype.IsNull() && !supertype.IsMalformedOrMalbounded());
+
+  // The supertype or subtype may not be instantiated.
+  Error& bound_error = Error::Handle(zone);
+  if (AbstractType::InstantiateAndTestSubtype(
+          &subtype, &supertype, &bound_error, instantiator_type_args,
+          function_type_args)) {
+    return;
+  }
+
+  // Throw a dynamic type error.
+  const TokenPosition location = GetCallerLocation();
+  String& bound_error_message = String::Handle(zone);
+  if (!bound_error.IsNull()) {
+    bound_error_message = String::New(bound_error.ToErrorCString());
+  }
+  Exceptions::CreateAndThrowTypeError(location, subtype, supertype, dst_name,
+                                      bound_error_message);
+  UNREACHABLE();
+}
+
 // Allocate a new context large enough to hold the given number of variables.
 // Arg0: number of variables.
 // Return value: newly allocated context.
@@ -1811,7 +1850,7 @@
       if (FLAG_enable_inlining_annotations) {
         FATAL("Cannot enable inlining annotations and background compilation");
       }
-      if (!BackgroundCompiler::IsDisabled()) {
+      if (!BackgroundCompiler::IsDisabled(isolate)) {
         if (FLAG_background_compilation_stop_alot) {
           BackgroundCompiler::Stop(isolate);
         }
@@ -1820,8 +1859,7 @@
         // takes long time to trigger optimization.
         // Note that the background compilation queue rejects duplicate entries.
         function.SetUsageCounter(INT_MIN);
-        BackgroundCompiler::EnsureInit(thread);
-        ASSERT(isolate->background_compiler() != NULL);
+        BackgroundCompiler::Start(isolate);
         isolate->background_compiler()->CompileOptimized(function);
         // Continue in the same code.
         arguments.SetReturn(function);
diff --git a/runtime/vm/runtime_entry_list.h b/runtime/vm/runtime_entry_list.h
index c84bd6e..b8ed437 100644
--- a/runtime/vm/runtime_entry_list.h
+++ b/runtime/vm/runtime_entry_list.h
@@ -21,6 +21,7 @@
   V(StaticCallMissHandlerOneArg)                                               \
   V(StaticCallMissHandlerTwoArgs)                                              \
   V(Instanceof)                                                                \
+  V(SubtypeCheck)                                                              \
   V(TypeCheck)                                                                 \
   V(BadTypeError)                                                              \
   V(NonBoolTypeError)                                                          \
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index f199bd6..f5dd5b8 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -3439,18 +3439,18 @@
 
 static bool GetHeapMap(Thread* thread, JSONStream* js) {
   Isolate* isolate = thread->isolate();
-  bool should_collect = false;
   if (js->HasParam("gc")) {
-    if (js->ParamIs("gc", "full")) {
-      should_collect = true;
+    if (js->ParamIs("gc", "scavenge")) {
+      isolate->heap()->CollectGarbage(Heap::kNew);
+    } else if (js->ParamIs("gc", "mark-sweep")) {
+      isolate->heap()->CollectGarbage(Heap::kOld, Heap::kOldSpace);
+    } else if (js->ParamIs("gc", "mark-compact")) {
+      isolate->heap()->CollectGarbage(Heap::kOld, Heap::kCompaction);
     } else {
       PrintInvalidParamError(js, "gc");
       return true;
     }
   }
-  if (should_collect) {
-    isolate->heap()->CollectAllGarbage();
-  }
   isolate->heap()->PrintHeapMapToJSONStream(isolate, js);
   return true;
 }
diff --git a/runtime/vm/simulator_dbc.cc b/runtime/vm/simulator_dbc.cc
index 2acecce..5d21b6d 100644
--- a/runtime/vm/simulator_dbc.cc
+++ b/runtime/vm/simulator_dbc.cc
@@ -1954,61 +1954,59 @@
 
   {
     BYTECODE(NativeBootstrapCall, 0);
-    RawFunction* function = FrameFunction(FP);
-    RawObject** incoming_args =
-        (function->ptr()->num_optional_parameters_ == 0)
-            ? FrameArguments(FP, function->ptr()->num_fixed_parameters_)
-            : FP;
+    intptr_t argc_tag = reinterpret_cast<intptr_t>(SP[-0]);
+    const intptr_t num_arguments = NativeArguments::ArgcBits::decode(argc_tag);
 
+    RawObject** incoming_args = SP - 1 - num_arguments;
+    RawObject** return_slot = SP - 1;
     SimulatorBootstrapNativeCall native_target =
         reinterpret_cast<SimulatorBootstrapNativeCall>(SP[-1]);
-    intptr_t argc_tag = reinterpret_cast<intptr_t>(SP[-0]);
     SP[-0] = 0;  // Note: argc_tag is not smi-tagged.
     SP[-1] = null_value;
     Exit(thread, FP, SP + 1, pc);
-    NativeArguments args(thread, argc_tag, incoming_args, SP - 1);
+    NativeArguments args(thread, argc_tag, incoming_args, return_slot);
     INVOKE_BOOTSTRAP_NATIVE(native_target, args);
-    SP -= 1;
+
+    *(SP - 1 - num_arguments) = *return_slot;
+    SP -= 1 + num_arguments;
     DISPATCH();
   }
 
   {
     BYTECODE(NativeNoScopeCall, 0);
-    RawFunction* function = FrameFunction(FP);
-    RawObject** incoming_args =
-        (function->ptr()->num_optional_parameters_ == 0)
-            ? FrameArguments(FP, function->ptr()->num_fixed_parameters_)
-            : FP;
+    intptr_t argc_tag = reinterpret_cast<intptr_t>(SP[-0]);
+    const intptr_t num_arguments = NativeArguments::ArgcBits::decode(argc_tag);
 
+    RawObject** incoming_args = SP - 1 - num_arguments;
+    RawObject** return_slot = SP - 1;
     Dart_NativeFunction native_target =
         reinterpret_cast<Dart_NativeFunction>(SP[-1]);
-    intptr_t argc_tag = reinterpret_cast<intptr_t>(SP[-0]);
     SP[-0] = 0;  // argc_tag is not smi tagged!
     SP[-1] = null_value;
     Exit(thread, FP, SP + 1, pc);
-    NativeArguments args(thread, argc_tag, incoming_args, SP - 1);
+    NativeArguments args(thread, argc_tag, incoming_args, return_slot);
     INVOKE_NATIVE_NO_SCOPE(native_target, args);
-    SP -= 1;
+    *(SP - 1 - num_arguments) = *return_slot;
+    SP -= 1 + num_arguments;
     DISPATCH();
   }
 
   {
     BYTECODE(NativeAutoScopeCall, 0);
-    RawFunction* function = FrameFunction(FP);
-    RawObject** incoming_args =
-        (function->ptr()->num_optional_parameters_ == 0)
-            ? FrameArguments(FP, function->ptr()->num_fixed_parameters_)
-            : FP;
+    intptr_t argc_tag = reinterpret_cast<intptr_t>(SP[-0]);
+    const intptr_t num_arguments = NativeArguments::ArgcBits::decode(argc_tag);
 
+    RawObject** incoming_args = SP - 1 - num_arguments;
+    RawObject** return_slot = SP - 1;
     Dart_NativeFunction native_target =
         reinterpret_cast<Dart_NativeFunction>(SP[-1]);
-    intptr_t argc_tag = reinterpret_cast<intptr_t>(SP[-0]);
     SP[-0] = 0;  // argc_tag is not smi tagged!
     SP[-1] = null_value;
     Exit(thread, FP, SP + 1, pc);
-    NativeArguments args(thread, argc_tag, incoming_args, SP - 1);
+    NativeArguments args(thread, argc_tag, incoming_args, return_slot);
     INVOKE_NATIVE_AUTO_SCOPE(native_target, args);
-    SP -= 1;
+    *(SP - 1 - num_arguments) = *return_slot;
+    SP -= 1 + num_arguments;
     DISPATCH();
   }
 
diff --git a/runtime/vm/symbols.cc b/runtime/vm/symbols.cc
index b668a3b..f14c39b 100644
--- a/runtime/vm/symbols.cc
+++ b/runtime/vm/symbols.cc
@@ -308,7 +308,6 @@
   Zone* zone = thread->zone();
 
   ASSERT(thread->IsMutatorThread());
-  ASSERT(isolate->background_compiler() == NULL);
 
   SymbolTable vm_table(zone,
                        Dart::vm_isolate()->object_store()->symbol_table());
diff --git a/runtime/vm/thread_interrupter.cc b/runtime/vm/thread_interrupter.cc
index 50276a2..6d9b99d 100644
--- a/runtime/vm/thread_interrupter.cc
+++ b/runtime/vm/thread_interrupter.cc
@@ -83,7 +83,7 @@
   ASSERT(interrupter_thread_id_ == OSThread::kInvalidThreadJoinId);
   {
     MonitorLocker startup_ml(monitor_);
-    OSThread::Start("ThreadInterrupter", ThreadMain, 0);
+    OSThread::Start("Dart Profiler ThreadInterrupter", ThreadMain, 0);
     while (!thread_running_) {
       startup_ml.Wait();
     }
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index e517c1b..7d21d3d 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -44,6 +44,7 @@
 # ........dartfmt.dart.snapshot
 # ........dartdevc.dart.snapshot
 # ........dartdevk.dart.snapshot
+# ........front_end_worker.dart.snapshot
 # ........pub.dart.snapshot
 # ........utils_wrapper.dart.snapshot
 #.........resources/
@@ -162,6 +163,10 @@
     "../utils/dartfmt",
   ],
   [
+    "front_end_worker",
+    "../utils/front_end:front_end_worker",
+  ],
+  [
     "pub",
     "../utils/pub",
   ],
diff --git a/sdk/bin/dartdevk.bat b/sdk/bin/dartdevk.bat
index 99895cb4..980c636 100644
--- a/sdk/bin/dartdevk.bat
+++ b/sdk/bin/dartdevk.bat
@@ -1,5 +1,5 @@
 @echo off
-REM Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+REM Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 REM for details. All rights reserved. Use of this source code is governed by a
 REM BSD-style license that can be found in the LICENSE file.
 
@@ -34,7 +34,7 @@
 
 set DEV_COMPILER=%DART_ROOT%\third_party\pkg\dev_compiler\bin\dartdevk.dart
 
-"%DART%" "--packages=%DART_ROOT%\.packages" %EXTRA_VM_OPTIONS% "%DEV_COMPILER%" %*
+"%DART%" "--packages=%SDK_DIR%\.packages" %EXTRA_VM_OPTIONS% "%DEV_COMPILER%" %*
 
 endlocal
 
diff --git a/sdk/bin/dartdevk_sdk.bat b/sdk/bin/dartdevk_sdk.bat
index f3afdec..d1a480f 100644
--- a/sdk/bin/dartdevk_sdk.bat
+++ b/sdk/bin/dartdevk_sdk.bat
@@ -1,5 +1,5 @@
 @echo off
-REM Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+REM Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 REM for details. All rights reserved. Use of this source code is governed by a
 REM BSD-style license that can be found in the LICENSE file.
 
@@ -20,7 +20,7 @@
 rem Remove trailing backslash if there is one
 if %SDK_DIR:~-1%==\ set SDK_DIR=%SDK_DIR:~0,-1%
 
-"%DART%" "%SNAPSHOT%" "--packages=$SDK_DIR\..\..\..\.packages" %*
+"%DART%" "%SNAPSHOT%" "--packages=%SDK_DIR%\.packages" %*
 
 endlocal
 
diff --git a/sdk/lib/_internal/js_runtime/lib/isolate_helper.dart b/sdk/lib/_internal/js_runtime/lib/isolate_helper.dart
index e9de3d7..f4d83d9 100644
--- a/sdk/lib/_internal/js_runtime/lib/isolate_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/isolate_helper.dart
@@ -949,7 +949,7 @@
   }
 
   static Future<List> spawnFunction(
-      void topLevelFunction(message), var message, bool startPaused) {
+      void topLevelFunction(Null message), var message, bool startPaused) {
     IsolateNatives.enableSpawnWorker = true;
     final name = _getJSFunctionName(topLevelFunction);
     if (name == null) {
diff --git a/sdk/lib/_internal/js_runtime/lib/isolate_patch.dart b/sdk/lib/_internal/js_runtime/lib/isolate_patch.dart
index 5d3da78..9b46ac2 100644
--- a/sdk/lib/_internal/js_runtime/lib/isolate_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/isolate_patch.dart
@@ -8,7 +8,7 @@
 import 'dart:_isolate_helper'
     show CapabilityImpl, IsolateNatives, ReceivePortImpl, RawReceivePortImpl;
 
-typedef _UnaryFunction(arg);
+typedef _UnaryFunction(Null arg);
 
 @patch
 class Isolate {
@@ -41,7 +41,7 @@
   }
 
   @patch
-  static Future<Isolate> spawn(void entryPoint(message), var message,
+  static Future<Isolate> spawn<T>(void entryPoint(T message), T message,
       {bool paused: false,
       bool errorsAreFatal,
       SendPort onExit,
diff --git a/sdk/lib/_internal/js_runtime/lib/linked_hash_map.dart b/sdk/lib/_internal/js_runtime/lib/linked_hash_map.dart
index 2ebebbc..f4d8a0a 100644
--- a/sdk/lib/_internal/js_runtime/lib/linked_hash_map.dart
+++ b/sdk/lib/_internal/js_runtime/lib/linked_hash_map.dart
@@ -26,8 +26,8 @@
 
   // The keys and values are stored in cells that are linked together
   // to form a double linked list.
-  LinkedHashMapCell/*<K, V>*/ _first;
-  LinkedHashMapCell/*<K, V>*/ _last;
+  LinkedHashMapCell _first;
+  LinkedHashMapCell _last;
 
   // We track the number of modifications done to the key set of the
   // hash map to be able to throw when the map is modified while being
@@ -96,12 +96,12 @@
     if (_isStringKey(key)) {
       var strings = _strings;
       if (strings == null) return null;
-      LinkedHashMapCell/*<K, V>*/ cell = _getTableCell(strings, key);
+      LinkedHashMapCell cell = _getTableCell(strings, key);
       return (cell == null) ? null : cell.hashMapCellValue;
     } else if (_isNumericKey(key)) {
       var nums = _nums;
       if (nums == null) return null;
-      LinkedHashMapCell/*<K, V>*/ cell = _getTableCell(nums, key);
+      LinkedHashMapCell cell = _getTableCell(nums, key);
       return (cell == null) ? null : cell.hashMapCellValue;
     } else {
       return internalGet(key);
@@ -114,7 +114,7 @@
     var bucket = _getBucket(rest, key);
     int index = internalFindBucketIndex(bucket, key);
     if (index < 0) return null;
-    LinkedHashMapCell/*<K, V>*/ cell = JS('var', '#[#]', bucket, index);
+    LinkedHashMapCell cell = JS('var', '#[#]', bucket, index);
     return cell.hashMapCellValue;
   }
 
@@ -138,15 +138,15 @@
     var hash = internalComputeHashCode(key);
     var bucket = _getTableBucket(rest, hash);
     if (bucket == null) {
-      LinkedHashMapCell/*<K, V>*/ cell = _newLinkedCell(key, value);
+      LinkedHashMapCell cell = _newLinkedCell(key, value);
       _setTableEntry(rest, hash, JS('var', '[#]', cell));
     } else {
       int index = internalFindBucketIndex(bucket, key);
       if (index >= 0) {
-        LinkedHashMapCell/*<K, V>*/ cell = JS('var', '#[#]', bucket, index);
+        LinkedHashMapCell cell = JS('var', '#[#]', bucket, index);
         cell.hashMapCellValue = value;
       } else {
-        LinkedHashMapCell/*<K, V>*/ cell = _newLinkedCell(key, value);
+        LinkedHashMapCell cell = _newLinkedCell(key, value);
         JS('void', '#.push(#)', bucket, cell);
       }
     }
@@ -177,8 +177,7 @@
     if (index < 0) return null;
     // Use splice to remove the [cell] element at the index and
     // unlink the cell before returning its value.
-    LinkedHashMapCell/*<K, V>*/ cell =
-        JS('var', '#.splice(#, 1)[0]', bucket, index);
+    LinkedHashMapCell cell = JS('var', '#.splice(#, 1)[0]', bucket, index);
     _unlinkCell(cell);
     // TODO(kasperl): Consider getting rid of the bucket list when
     // the length reaches zero.
@@ -194,7 +193,7 @@
   }
 
   void forEach(void action(K key, V value)) {
-    LinkedHashMapCell/*<K, V>*/ cell = _first;
+    LinkedHashMapCell cell = _first;
     int modifications = _modifications;
     while (cell != null) {
       action(cell.hashMapCellKey, cell.hashMapCellValue);
@@ -206,7 +205,7 @@
   }
 
   void _addHashTableEntry(var table, K key, V value) {
-    LinkedHashMapCell/*<K, V>*/ cell = _getTableCell(table, key);
+    LinkedHashMapCell cell = _getTableCell(table, key);
     if (cell == null) {
       _setTableEntry(table, key, _newLinkedCell(key, value));
     } else {
@@ -216,7 +215,7 @@
 
   V _removeHashTableEntry(var table, Object key) {
     if (table == null) return null;
-    LinkedHashMapCell/*<K, V>*/ cell = _getTableCell(table, key);
+    LinkedHashMapCell cell = _getTableCell(table, key);
     if (cell == null) return null;
     _unlinkCell(cell);
     _deleteTableEntry(table, key);
@@ -232,13 +231,12 @@
   }
 
   // Create a new cell and link it in as the last one in the list.
-  LinkedHashMapCell/*<K, V>*/ _newLinkedCell(K key, V value) {
-    LinkedHashMapCell/*<K, V>*/ cell =
-        new LinkedHashMapCell/*<K, V>*/(key, value);
+  LinkedHashMapCell _newLinkedCell(K key, V value) {
+    LinkedHashMapCell cell = new LinkedHashMapCell(key, value);
     if (_first == null) {
       _first = _last = cell;
     } else {
-      LinkedHashMapCell/*<K, V>*/ last = _last;
+      LinkedHashMapCell last = _last;
       cell._previous = last;
       _last = last._next = cell;
     }
@@ -248,9 +246,9 @@
   }
 
   // Unlink the given cell from the linked list of cells.
-  void _unlinkCell(LinkedHashMapCell/*<K, V>*/ cell) {
-    LinkedHashMapCell/*<K, V>*/ previous = cell._previous;
-    LinkedHashMapCell/*<K, V>*/ next = cell._next;
+  void _unlinkCell(LinkedHashMapCell cell) {
+    LinkedHashMapCell previous = cell._previous;
+    LinkedHashMapCell next = cell._next;
     if (previous == null) {
       assert(cell == _first);
       _first = next;
@@ -285,7 +283,7 @@
     return JS('int', '# & 0x3ffffff', key.hashCode);
   }
 
-  List<dynamic/*=LinkedHashMapCell<K, V>*/ > _getBucket(var table, var key) {
+  List<LinkedHashMapCell> _getBucket(var table, var key) {
     var hash = internalComputeHashCode(key);
     return _getTableBucket(table, hash);
   }
@@ -294,7 +292,7 @@
     if (bucket == null) return -1;
     int length = JS('int', '#.length', bucket);
     for (int i = 0; i < length; i++) {
-      LinkedHashMapCell/*<K, V>*/ cell = JS('var', '#[#]', bucket, i);
+      LinkedHashMapCell cell = JS('var', '#[#]', bucket, i);
       if (cell.hashMapCellKey == key) return i;
     }
     return -1;
@@ -302,11 +300,11 @@
 
   String toString() => Maps.mapToString(this);
 
-  /*=LinkedHashMapCell<K, V>*/ _getTableCell(var table, var key) {
+  LinkedHashMapCell _getTableCell(var table, var key) {
     return JS('var', '#[#]', table, key);
   }
 
-  /*=List<LinkedHashMapCell<K, V>>*/ _getTableBucket(var table, var key) {
+  List<LinkedHashMapCell> _getTableBucket(var table, var key) {
     return JS('var', '#[#]', table, key);
   }
 
@@ -320,7 +318,7 @@
   }
 
   bool _containsTableEntry(var table, var key) {
-    LinkedHashMapCell/*<K, V>*/ cell = _getTableCell(table, key);
+    LinkedHashMapCell cell = _getTableCell(table, key);
     return cell != null;
   }
 
@@ -340,12 +338,12 @@
 
 class Es6LinkedHashMap<K, V> extends JsLinkedHashMap<K, V> {
   @override
-  /*=LinkedHashMapCell<K, V>*/ _getTableCell(var table, var key) {
+  LinkedHashMapCell _getTableCell(var table, var key) {
     return JS('var', '#.get(#)', table, key);
   }
 
   @override
-  /*=List<LinkedHashMapCell<K, V>>*/ _getTableBucket(var table, var key) {
+  List<LinkedHashMapCell> _getTableBucket(var table, var key) {
     return JS('var', '#.get(#)', table, key);
   }
 
@@ -370,18 +368,18 @@
   }
 }
 
-class LinkedHashMapCell<K, V> {
-  final dynamic/*=K*/ hashMapCellKey;
-  dynamic/*=V*/ hashMapCellValue;
+class LinkedHashMapCell {
+  final dynamic hashMapCellKey;
+  dynamic hashMapCellValue;
 
-  LinkedHashMapCell/*<K, V>*/ _next;
-  LinkedHashMapCell/*<K, V>*/ _previous;
+  LinkedHashMapCell _next;
+  LinkedHashMapCell _previous;
 
   LinkedHashMapCell(this.hashMapCellKey, this.hashMapCellValue);
 }
 
 class LinkedHashMapKeyIterable<E> extends EfficientLengthIterable<E> {
-  final dynamic/*=JsLinkedHashMap<E, dynamic>*/ _map;
+  final dynamic _map;
   LinkedHashMapKeyIterable(this._map);
 
   int get length => _map._length;
@@ -396,7 +394,7 @@
   }
 
   void forEach(void f(E element)) {
-    LinkedHashMapCell/*<E, dynamic>*/ cell = _map._first;
+    LinkedHashMapCell cell = _map._first;
     int modifications = _map._modifications;
     while (cell != null) {
       f(cell.hashMapCellKey);
@@ -409,9 +407,9 @@
 }
 
 class LinkedHashMapKeyIterator<E> implements Iterator<E> {
-  final dynamic/*=JsLinkedHashMap<E, dynamic>*/ _map;
+  final dynamic _map;
   final int _modifications;
-  LinkedHashMapCell/*<E, dynamic>*/ _cell;
+  LinkedHashMapCell _cell;
   E _current;
 
   LinkedHashMapKeyIterator(this._map, this._modifications) {
diff --git a/sdk/lib/core/uri.dart b/sdk/lib/core/uri.dart
index d03f6d8..dd4fe11 100644
--- a/sdk/lib/core/uri.dart
+++ b/sdk/lib/core/uri.dart
@@ -2848,7 +2848,7 @@
   // be escaped or not.
 
   // The unreserved characters of RFC 3986.
-  static const _unreservedTable = const [
+  static const _unreservedTable = const <int>[
     //                     LSB            MSB
     //                      |              |
     0x0000, // 0x00 - 0x0f  0000000000000000
@@ -2868,7 +2868,7 @@
   ];
 
   // The unreserved characters of RFC 2396.
-  static const _unreserved2396Table = const [
+  static const _unreserved2396Table = const <int>[
     //                     LSB            MSB
     //                      |              |
     0x0000, // 0x00 - 0x0f  0000000000000000
@@ -2888,7 +2888,7 @@
   ];
 
   // Table of reserved characters specified by ECMAScript 5.
-  static const _encodeFullTable = const [
+  static const _encodeFullTable = const <int>[
     //                     LSB            MSB
     //                      |              |
     0x0000, // 0x00 - 0x0f  0000000000000000
@@ -2908,7 +2908,7 @@
   ];
 
   // Characters allowed in the scheme.
-  static const _schemeTable = const [
+  static const _schemeTable = const <int>[
     //                     LSB            MSB
     //                      |              |
     0x0000, // 0x00 - 0x0f  0000000000000000
@@ -2928,7 +2928,7 @@
   ];
 
   // Characters allowed in scheme except for upper case letters.
-  static const _schemeLowerTable = const [
+  static const _schemeLowerTable = const <int>[
     //                     LSB            MSB
     //                      |              |
     0x0000, // 0x00 - 0x0f  0000000000000000
@@ -2952,7 +2952,7 @@
   //         / "*" / "+" / "," / ";" / "="
   // RFC 3986 section 2.3.
   // unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"
-  static const _subDelimitersTable = const [
+  static const _subDelimitersTable = const <int>[
     //                     LSB            MSB
     //                      |              |
     0x0000, // 0x00 - 0x0f  0000000000000000
@@ -2974,7 +2974,7 @@
   // General delimiter characters, RFC 3986 section 2.2.
   // gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"
   //
-  static const _genDelimitersTable = const [
+  static const _genDelimitersTable = const <int>[
     //                     LSB            MSB
     //                      |              |
     0x0000, // 0x00 - 0x0f  0000000000000000
@@ -2996,7 +2996,7 @@
   // Characters allowed in the userinfo as of RFC 3986.
   // RFC 3986 Appendix A
   // userinfo = *( unreserved / pct-encoded / sub-delims / ':')
-  static const _userinfoTable = const [
+  static const _userinfoTable = const <int>[
     //                     LSB            MSB
     //                      |              |
     0x0000, // 0x00 - 0x0f  0000000000000000
@@ -3018,7 +3018,7 @@
   // Characters allowed in the reg-name as of RFC 3986.
   // RFC 3986 Appendix A
   // reg-name = *( unreserved / pct-encoded / sub-delims )
-  static const _regNameTable = const [
+  static const _regNameTable = const <int>[
     //                     LSB            MSB
     //                      |              |
     0x0000, // 0x00 - 0x0f  0000000000000000
@@ -3040,7 +3040,7 @@
   // Characters allowed in the path as of RFC 3986.
   // RFC 3986 section 3.3.
   // pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
-  static const _pathCharTable = const [
+  static const _pathCharTable = const <int>[
     //                     LSB            MSB
     //                      |              |
     0x0000, // 0x00 - 0x0f  0000000000000000
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 8785bc0..2129a68 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -31010,7 +31010,7 @@
   // Override default options, since IE returns SelectElement itself and it
   // does not operate as a List.
   List<OptionElement> get options {
-    var options = this.querySelectorAll<OptionElement>('option');
+    dynamic options = this.querySelectorAll<OptionElement>('option');
     return new UnmodifiableListView(options.toList());
   }
 
@@ -42005,7 +42005,8 @@
    */
   set height(dynamic newHeight) {
     if (newHeight is Dimension) {
-      if (newHeight.value < 0) newHeight = new Dimension.px(0);
+      Dimension newHeightAsDimension = newHeight;
+      if (newHeightAsDimension.value < 0) newHeight = new Dimension.px(0);
       _element.style.height = newHeight.toString();
     } else if (newHeight is num) {
       if (newHeight < 0) newHeight = 0;
@@ -42025,7 +42026,8 @@
    */
   set width(dynamic newWidth) {
     if (newWidth is Dimension) {
-      if (newWidth.value < 0) newWidth = new Dimension.px(0);
+      Dimension newWidthAsDimension = newWidth;
+      if (newWidthAsDimension.value < 0) newWidth = new Dimension.px(0);
       _element.style.width = newWidth.toString();
     } else if (newWidth is num) {
       if (newWidth < 0) newWidth = 0;
@@ -45486,7 +45488,6 @@
 
   E get current => _iterator.current;
 }
-
 // 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.
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index 20ff5be..734204a 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -228,7 +228,8 @@
    * Returns a future which will complete with an [Isolate] instance if the
    * spawning succeeded. It will complete with an error otherwise.
    */
-  external static Future<Isolate> spawn(void entryPoint(message), var message,
+  external static Future<Isolate> spawn<T>(
+      void entryPoint(T message), T message,
       {bool paused: false,
       bool errorsAreFatal,
       SendPort onExit,
diff --git a/tests/compiler/dart2js/dill_loader_test.dart b/tests/compiler/dart2js/dill_loader_test.dart
index 9411929..148dca3 100644
--- a/tests/compiler/dart2js/dill_loader_test.dart
+++ b/tests/compiler/dart2js/dill_loader_test.dart
@@ -15,7 +15,7 @@
 import 'package:compiler/src/script.dart' show Script;
 import 'package:compiler/src/apiimpl.dart' show CompilerImpl;
 import "package:expect/expect.dart";
-import 'package:front_end/front_end.dart';
+import 'package:front_end/src/api_prototype/front_end.dart';
 import 'package:front_end/src/fasta/kernel/utils.dart' show serializeProgram;
 import 'package:compiler/src/kernel/dart2js_target.dart';
 import 'package:kernel/target/targets.dart' show TargetFlags;
diff --git a/tests/compiler/dart2js/inlining/data/force_inline.dart b/tests/compiler/dart2js/inlining/data/force_inline.dart
index 3236393..604359d 100644
--- a/tests/compiler/dart2js/inlining/data/force_inline.dart
+++ b/tests/compiler/dart2js/inlining/data/force_inline.dart
@@ -10,6 +10,7 @@
   forceInlineOnce();
   forceInlineTwice1();
   forceInlineTwice2();
+  forceInlineNested();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -45,3 +46,23 @@
 forceInlineTwice2() {
   _forceInlineTwice();
 }
+
+////////////////////////////////////////////////////////////////////////////////
+// Force inline nested top level methods.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: _forceInlineNested1:[forceInlineNested]*/
+@ForceInline()
+_forceInlineNested1() {}
+
+/*element: _forceInlineNested2:[forceInlineNested]*/
+@ForceInline()
+_forceInlineNested2() {
+  _forceInlineNested1();
+}
+
+/*element: forceInlineNested:[]*/
+@NoInline()
+forceInlineNested() {
+  _forceInlineNested2();
+}
diff --git a/tests/compiler/dart2js/inlining/data/force_inline_loops.dart b/tests/compiler/dart2js/inlining/data/force_inline_loops.dart
new file mode 100644
index 0000000..b45dadd
--- /dev/null
+++ b/tests/compiler/dart2js/inlining/data/force_inline_loops.dart
@@ -0,0 +1,59 @@
+// 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.
+
+/// ignore: IMPORT_INTERNAL_LIBRARY
+import 'dart:_js_helper';
+
+/*element: main:[]*/
+main() {
+  forceInlineLoops();
+}
+////////////////////////////////////////////////////////////////////////////////
+// Force inline a top level method with loops.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: _forLoop:[forceInlineLoops]*/
+@ForceInline()
+_forLoop() {
+  for (int i = 0; i < 10; i++) {
+    print(i);
+  }
+}
+
+/*element: _forInLoop:[forceInlineLoops]*/
+@ForceInline()
+_forInLoop() {
+  for (var e in [0, 1, 2]) {
+    print(e);
+  }
+}
+
+/*element: _whileLoop:[forceInlineLoops]*/
+@ForceInline()
+_whileLoop() {
+  int i = 0;
+  while (i < 10) {
+    print(i);
+    i++;
+  }
+}
+
+/*element: _doLoop:[forceInlineLoops]*/
+@ForceInline()
+_doLoop() {
+  int i = 0;
+  do {
+    print(i);
+    i++;
+  } while (i < 10);
+}
+
+/*element: forceInlineLoops:[]*/
+@NoInline()
+forceInlineLoops() {
+  _forLoop();
+  _forInLoop();
+  _whileLoop();
+  _doLoop();
+}
diff --git a/tests/compiler/dart2js/inlining/data/too_difficult.dart b/tests/compiler/dart2js/inlining/data/too_difficult.dart
new file mode 100644
index 0000000..86d758e
--- /dev/null
+++ b/tests/compiler/dart2js/inlining/data/too_difficult.dart
@@ -0,0 +1,129 @@
+// 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.
+
+/*element: main:[]*/
+main() {
+  multipleReturns(true);
+  codeAfterReturn(true);
+  multipleThrows(true);
+  codeAfterThrow(true);
+  throwAndReturn(true);
+  asyncMethod();
+  asyncStarMethod();
+  syncStarMethod();
+  localFunction();
+  anonymousFunction();
+  tryCatch();
+  tryFinally();
+  tryWithRethrow();
+  forLoop();
+  forInLoop();
+  whileLoop();
+  doLoop();
+}
+
+/*element: multipleReturns:[]*/
+multipleReturns(c) {
+  if (c)
+    return;
+  else
+    return;
+}
+
+/*element: codeAfterReturn:[]*/
+codeAfterReturn(c) {
+  if (c) return;
+  print(c);
+}
+
+/*element: multipleThrows:[]*/
+multipleThrows(c) {
+  if (c)
+    throw '';
+  else
+    throw '';
+}
+
+/*element: codeAfterThrow:[]*/
+codeAfterThrow(c) {
+  if (c) throw '';
+  print(c);
+}
+
+/*element: throwAndReturn:[]*/
+throwAndReturn(c) {
+  if (c)
+    throw '';
+  else
+    return;
+}
+
+/*element: asyncMethod:[]*/
+asyncMethod() async {}
+
+/*element: asyncStarMethod:[]*/
+asyncStarMethod() async* {}
+
+/*element: syncStarMethod:[]*/
+syncStarMethod() sync* {}
+
+/*element: localFunction:[]*/
+localFunction() {
+  // ignore: UNUSED_ELEMENT
+  /*[]*/ local() {}
+}
+
+/*element: anonymousFunction:[]*/
+anonymousFunction() {
+  /*[]*/ () {};
+}
+
+/*element: tryCatch:[]*/
+tryCatch() {
+  try {} catch (e) {}
+}
+
+/*element: tryFinally:[]*/
+tryFinally() {
+  try {} catch (e) {}
+}
+
+/*element: tryWithRethrow:[]*/
+tryWithRethrow() {
+  try {} catch (e) {
+    rethrow;
+  }
+}
+
+/*element: forLoop:[]*/
+forLoop() {
+  for (int i = 0; i < 10; i++) {
+    print(i);
+  }
+}
+
+/*element: forInLoop:[]*/
+forInLoop() {
+  for (var e in [0, 1, 2]) {
+    print(e);
+  }
+}
+
+/*element: whileLoop:[]*/
+whileLoop() {
+  int i = 0;
+  while (i < 10) {
+    print(i);
+    i++;
+  }
+}
+
+/*element: doLoop:[]*/
+doLoop() {
+  int i = 0;
+  do {
+    print(i);
+    i++;
+  } while (i < 10);
+}
diff --git a/tests/compiler/dart2js/inlining/inlining_test.dart b/tests/compiler/dart2js/inlining/inlining_test.dart
index 49a5191..a00a987 100644
--- a/tests/compiler/dart2js/inlining/inlining_test.dart
+++ b/tests/compiler/dart2js/inlining/inlining_test.dart
@@ -31,6 +31,7 @@
           // TODO(sra,johnniwinther): Handle this for kernel.
           'constructor.dart',
           'dynamic.dart',
+          'force_inline_loops.dart',
         ]);
   });
 }
diff --git a/tests/compiler/dart2js/sourcemaps/data/others.dart b/tests/compiler/dart2js/sourcemaps/data/others.dart
index 1ccb177..13f6241 100644
--- a/tests/compiler/dart2js/sourcemaps/data/others.dart
+++ b/tests/compiler/dart2js/sourcemaps/data/others.dart
@@ -23,6 +23,8 @@
   c.property2 = 2;
   equals(c, null);
   c.captureTwice();
+  equals2(c, null);
+  equals2(c, c);
   switchStatement(1);
   switchStatement(0);
   switchStatementConst(const Const(0));
@@ -121,6 +123,10 @@
   return a.property1 == b;
 }
 
+equals2(a, b) {
+  return b != null && a.property1 == b.property1 && a.property2 == b.property2;
+}
+
 switchStatement(a) {
   switch (a) {
     case 0:
diff --git a/tests/compiler/dart2js/sourcemaps/data/super.dart b/tests/compiler/dart2js/sourcemaps/data/super.dart
new file mode 100644
index 0000000..e94a564
--- /dev/null
+++ b/tests/compiler/dart2js/sourcemaps/data/super.dart
@@ -0,0 +1,30 @@
+// 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.
+
+class Super {
+  var field = 0;
+
+  get property => 0;
+  set property(_) {}
+
+  void method() {}
+}
+
+class Sub extends Super {
+  var field = 1;
+
+  get property => 1;
+  set property(_) {}
+
+  void method() {
+    super.method();
+    field = super.field = super.field + field;
+    property = super.property = super.property + property;
+  }
+}
+
+main() {
+  var c = new Sub();
+  c.method();
+}
diff --git a/tests/compiler/dart2js/type_checker_test.dart b/tests/compiler/dart2js/type_checker_test.dart
index 400d57e..b16b704 100644
--- a/tests/compiler/dart2js/type_checker_test.dart
+++ b/tests/compiler/dart2js/type_checker_test.dart
@@ -2441,8 +2441,10 @@
   return "$type foo() => $expression;";
 }
 
-Node parseExpression(String text) =>
-    parseBodyCode(text, (parser, token) => parser.parseExpression(token).next);
+Node parseExpression(String text) => parseBodyCode(
+    text,
+    (parser, token) =>
+        parser.parseExpression(parser.syntheticPreviousToken(token)).next);
 
 const Map<String, String> ALT_SOURCE = const <String, String>{
   'num': r'''
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index 467b7bf..33bb5e3 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -284,7 +284,6 @@
 deferred_custom_loader_test: RuntimeError
 deferred_fail_and_retry_test: RuntimeError
 deferred_fail_and_retry_worker_test: RuntimeError
-deferred_split_test: RuntimeError
 dummy_compiler_test: CompileTimeError
 invalid_annotation2_test/none: RuntimeError
 label_test/06: MissingCompileTimeError
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index a667eb5..fd5a27d 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -465,4 +465,3 @@
 symbol_reserved_word_test/10: MissingCompileTimeError
 symbol_test/02: MissingCompileTimeError
 symbol_test/03: MissingCompileTimeError
-
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index c53a06f..d7d93c6 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -403,8 +403,10 @@
 [ $runtime == vm ]
 string_case_test/01: RuntimeError
 
-[ $runtime == vm || $runtime == dart_precompiled ]
+[ ($runtime == vm || $runtime == dart_precompiled) ]
 string_split_test: RuntimeError # does not return List<String>
+
+[ ($runtime == vm || $runtime == dart_precompiled) && !$strong ]
 list_test/*: RuntimeError # VM doesn't implement strong mode covariance checks
 
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
@@ -540,8 +542,6 @@
 iterable_to_list_test/01: RuntimeError
 iterable_to_list_test/none: RuntimeError
 json_map_test: RuntimeError
-list_concurrent_modify_test: RuntimeError
-list_insert_all_test: RuntimeError
 list_replace_range_test: RuntimeError
 list_set_all_test: RuntimeError
 null_nosuchmethod_test/01: CompileTimeError # Issue 31402 (Invocation arguments)
@@ -565,14 +565,9 @@
 symbol_test/none: RuntimeError
 unicode_test: RuntimeError
 
-[ $compiler == dartk && $runtime == vm && $strong && $mode == debug ]
-list_test/01: Crash
-list_test/none: Crash
-
 # ===== dartkp + dart_precompiled status lines =====
 [ $compiler == dartkp && $runtime == dart_precompiled && $strong ]
 bool_from_environment2_test/03: MissingCompileTimeError
-collection_removes_test: RuntimeError
 compare_to2_test: RuntimeError
 int_modulo_arith_test/modPow: CompileTimeError # Issue 31402 (Assert statement)
 int_modulo_arith_test/none: CompileTimeError # Issue 31402 (Assert statement)
@@ -583,8 +578,6 @@
 iterable_to_list_test/01: RuntimeError
 iterable_to_list_test/none: RuntimeError
 iterable_to_set_test: RuntimeError # Issue 31385 (--strong is not passed to the runtime)
-list_concurrent_modify_test: RuntimeError
-list_insert_all_test: RuntimeError
 map_keys2_test: RuntimeError # Issue 31385 (--strong is not passed to the runtime)
 null_nosuchmethod_test/01: CompileTimeError # Issue 31402 (Invocation arguments)
 null_nosuchmethod_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
@@ -609,8 +602,6 @@
 bit_twiddling_test/int64: CompileTimeError
 integer_parsed_arith_vm_test/01: RuntimeError
 integer_parsed_arith_vm_test/02: RuntimeError
-list_test/01: Crash
-list_test/none: Crash
 
 [ $compiler == dartdevk ]
 bool_from_environment2_test/01: MissingCompileTimeError
diff --git a/tests/html/html.status b/tests/html/html.status
index 7643efc..cd1e0e4 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -332,31 +332,24 @@
 js_util_test/hasProperty: RuntimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel && $checked ]
-async_spawnuri_test: Timeout
-async_test: Timeout
-canvas_test: Timeout
+async_spawnuri_test: RuntimeError
+async_test: RuntimeError
 canvasrenderingcontext2d_test/drawImage_image_element: Timeout
 canvasrenderingcontext2d_test/drawImage_video_element: Timeout
 canvasrenderingcontext2d_test/drawImage_video_element_dataUrl: Timeout
 cross_domain_iframe_test: RuntimeError
-cssstyledeclaration_test: Timeout
 custom/attribute_changed_callback_test/fully_supported: RuntimeError
 custom/attribute_changed_callback_test/unsupported_on_polyfill: RuntimeError
-custom/constructor_calls_created_synchronously_test: RuntimeError
-custom/document_register_basic_test: RuntimeError
-custom/document_register_template_test: RuntimeError
 custom/document_register_type_extensions_test/construction: RuntimeError
 custom/document_register_type_extensions_test/functional: RuntimeError
 custom/document_register_type_extensions_test/namespaces: RuntimeError
 custom/document_register_type_extensions_test/parsing: RuntimeError
 custom/document_register_type_extensions_test/registration: RuntimeError
-custom/element_upgrade_test: RuntimeError
 custom/entered_left_view_test/disconnected_subtree: RuntimeError
 custom/entered_left_view_test/shadow_dom: RuntimeError
 custom/entered_left_view_test/standard_events: RuntimeError
 custom/entered_left_view_test/standard_events_old_callback_names: RuntimeError
 custom/entered_left_view_test/viewless_document: RuntimeError
-custom/js_custom_test: RuntimeError
 custom/mirrors_2_test: RuntimeError
 custom/mirrors_test: RuntimeError
 custom_element_method_clash_test/test: RuntimeError
@@ -374,10 +367,8 @@
 element_test/click: RuntimeError
 element_test/eventDelegation: RuntimeError
 event_customevent_test: RuntimeError
-events_test: Timeout
 fileapi_test/directoryReader: RuntimeError
 fileapi_test/fileEntry: RuntimeError
-filereader_test: Timeout
 form_data_test/functional: Timeout
 history_test/history: Timeout
 indexeddb_1_test/functional: RuntimeError
@@ -386,7 +377,6 @@
 indexeddb_4_test: RuntimeError
 indexeddb_5_test: RuntimeError
 isolates_test: RuntimeError
-js_interop_1_test: Timeout
 js_test/JsObject.fromBrowserObject(): RuntimeError
 js_test/JsObject.jsify(): RuntimeError
 js_typed_interop_default_arg_test/explicit_argument: RuntimeError
@@ -395,20 +385,18 @@
 keyboard_event_test: RuntimeError
 mirrors_js_typed_interop_test: RuntimeError
 mutationobserver_test/childList: Timeout
-native_gc_test: Timeout
 postmessage_structured_test/iframe: RuntimeError
 postmessage_structured_test/primitives: Timeout
 postmessage_structured_test/typed_arrays: Timeout
-request_animation_frame_test: Timeout
 streams_test: RuntimeError
 transferables_test: RuntimeError
 transition_event_test/functional: Timeout
-url_test: Timeout
 websocket_test/websocket: RuntimeError
 websql_test/functional: RuntimeError
-worker_api_test: Timeout
+worker_api_test: RuntimeError
 worker_test/functional: Timeout
 xhr_cross_origin_test/functional: Timeout
+xhr_cross_origin_test/functional/functional: RuntimeError
 xhr_test/headers: RuntimeError
 xhr_test/json: Timeout
 xhr_test/xhr: Timeout
diff --git a/tests/language/language.status b/tests/language/language.status
index 04f9c66..987c8d0 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -10,8 +10,6 @@
 
 [ $compiler == precompiler && $runtime == dart_precompiled ]
 stacktrace_demangle_ctors_test: RuntimeError
-deep_nesting1_negative_test: Skip  # Issue 31158
-deep_nesting2_negative_test: Skip  # Issue 31158
 
 [ $compiler == precompiler && $runtime == dart_precompiled && $checked ]
 assertion_initializer_const_error2_test/cc02: Crash
@@ -536,3 +534,5 @@
 vm/no_such_method_error_message_vm_test: Skip # Tests below rely on Stacktrace.toString()
 vm/regress_28325_test:Skip # Tests below rely on Stacktrace.toString()
 
+[ $runtime == vm && $mode == release && $arch == ia32 ]
+deep_nesting1_negative_test: Crash, Pass # Issue 31496
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 56500c7..2ae3004 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -1303,8 +1303,6 @@
 
 [ $compiler == dart2js && $dart2js_with_kernel && $checked ]
 arithmetic_canonicalization_test: RuntimeError
-assert_message_test: RuntimeError
-assertion_initializer_const_function_test/01: RuntimeError
 assertion_initializer_test: CompileTimeError
 assign_static_type_test/01: Fail
 assign_static_type_test/02: MissingCompileTimeError
@@ -1313,9 +1311,6 @@
 async_await_syntax_test/c06a: RuntimeError
 async_await_syntax_test/d06a: RuntimeError
 async_await_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
-async_break_in_finally_test: RuntimeError
-async_control_structures_test: RuntimeError
-async_regression_23058_test: RuntimeError
 async_return_types_test/none: RuntimeError
 async_return_types_test/tooManyTypeParameters: RuntimeError
 async_star_cancel_and_throw_in_finally_test: RuntimeError
@@ -1329,9 +1324,7 @@
 async_star_stream_take_test: RuntimeError
 async_star_take_reyield_test: RuntimeError
 async_star_test: RuntimeError
-async_switch_test/none: RuntimeError
-async_switch_test/withDefault: RuntimeError
-async_test/none: RuntimeError
+async_test/setter1: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
 async_throw_in_catch_test/forceAwait: RuntimeError
 async_throw_in_catch_test/none: RuntimeError
 asyncstar_concat_test: RuntimeError
@@ -1342,11 +1335,7 @@
 await_for_cancel_test: RuntimeError
 await_for_test: RuntimeError
 await_for_use_local_test: RuntimeError
-await_future_test: RuntimeError
-await_nonfuture_test: RuntimeError
 await_not_started_immediately_test: RuntimeError
-await_postfix_expr_test: RuntimeError
-await_regression_test: RuntimeError
 bad_constructor_test/06: Crash # NoSuchMethodError: The getter 'iterator' was called on null.
 bad_override_test/03: MissingCompileTimeError
 bad_override_test/04: MissingCompileTimeError
@@ -1357,6 +1346,7 @@
 bit_operations_test/04: RuntimeError
 bit_operations_test/none: RuntimeError
 branch_canonicalization_test: RuntimeError
+branches_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 437 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
 call_function_apply_test: RuntimeError
 call_nonexistent_constructor_test/01: RuntimeError
 canonical_const2_test: RuntimeError
@@ -1441,17 +1431,14 @@
 deferred_constraints_type_annotation_test/type_annotation1: Fail
 deferred_constraints_type_annotation_test/type_annotation_generic1: Fail
 deferred_constraints_type_annotation_test/type_annotation_generic4: Fail
-deferred_constraints_type_annotation_test/type_annotation_non_deferred: RuntimeError
-deferred_import_core_test: RuntimeError
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
 deferred_load_constants_test/none: RuntimeError
-deferred_load_library_wrong_args_test/none: RuntimeError
+deferred_load_library_wrong_args_test/01: MissingRuntimeError
 deferred_not_loaded_check_test: RuntimeError
 deferred_redirecting_factory_test: RuntimeError
 deferred_shared_and_unshared_classes_test: RuntimeError
-deferred_type_dependency_test/none: RuntimeError
 double_int_to_string_test: RuntimeError
 duplicate_export_negative_test: Fail
 duplicate_implements_test/01: MissingCompileTimeError
@@ -1509,7 +1496,6 @@
 invocation_mirror_empty_arguments_test: RuntimeError
 invocation_mirror_test: RuntimeError
 issue21079_test: RuntimeError
-issue_1751477_test: RuntimeError
 left_shift_test: RuntimeError
 library_env_test/has_no_html_support: RuntimeError
 library_env_test/has_no_io_support: RuntimeError
@@ -1689,6 +1675,7 @@
 null_test/none: RuntimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError
+operator_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 437 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
@@ -1699,6 +1686,7 @@
 override_inheritance_mixed_test/03: MissingCompileTimeError
 override_inheritance_mixed_test/04: MissingCompileTimeError
 override_method_with_field_test/01: MissingCompileTimeError
+prefix5_negative_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 437 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
 private_super_constructor_test/01: MissingCompileTimeError
 redirecting_constructor_initializer_test: RuntimeError
 redirecting_factory_default_values_test/01: MissingCompileTimeError
@@ -1717,8 +1705,7 @@
 regress_23996_test: RuntimeError
 regress_24283_test: RuntimeError
 regress_24935_test/none: RuntimeError
-regress_26175_test: RuntimeError
-regress_26668_test: RuntimeError
+regress_26133_test: RuntimeError # Issue 26429
 regress_27572_test: RuntimeError
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
 regress_28217_test/01: MissingCompileTimeError
@@ -1739,6 +1726,8 @@
 switch_case_test/00: MissingCompileTimeError
 switch_case_test/01: MissingCompileTimeError
 switch_case_test/02: MissingCompileTimeError
+sync_generator2_test/41: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
+sync_generator2_test/52: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
 syntax_test/none: CompileTimeError
 top_level_getter_no_setter1_test/01: RuntimeError
 top_level_getter_no_setter2_test/01: RuntimeError
diff --git a/tests/language_2/combiner_type_lookup_indexed_test.dart b/tests/language_2/combiner_type_lookup_indexed_test.dart
new file mode 100644
index 0000000..e1f1a38
--- /dev/null
+++ b/tests/language_2/combiner_type_lookup_indexed_test.dart
@@ -0,0 +1,19 @@
+// 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.
+
+class A {}
+
+class B extends A {
+  B operator +(int i) => this;
+}
+
+class C {
+  B operator [](int i) => new B();
+
+  void operator []=(int i, A value) {}
+}
+
+main() {
+  new C()[0] += 1;
+}
diff --git a/tests/language_2/combiner_type_lookup_instance_test.dart b/tests/language_2/combiner_type_lookup_instance_test.dart
new file mode 100644
index 0000000..cc9536d
--- /dev/null
+++ b/tests/language_2/combiner_type_lookup_instance_test.dart
@@ -0,0 +1,19 @@
+// 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.
+
+class A {}
+
+class B extends A {
+  B operator +(int i) => this;
+}
+
+class C {
+  B get property => new B();
+
+  void set property(A value) {}
+}
+
+main() {
+  new C().property += 1;
+}
diff --git a/tests/language_2/combiner_type_lookup_static_test.dart b/tests/language_2/combiner_type_lookup_static_test.dart
new file mode 100644
index 0000000..925d978
--- /dev/null
+++ b/tests/language_2/combiner_type_lookup_static_test.dart
@@ -0,0 +1,19 @@
+// 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.
+
+class A {}
+
+class B extends A {
+  B operator +(int i) => this;
+}
+
+class C {
+  static B get staticProperty => new B();
+
+  static void set staticProperty(A value) {}
+}
+
+main() {
+  C.staticProperty += 1;
+}
diff --git a/tests/language_2/combiner_type_lookup_top_level_test.dart b/tests/language_2/combiner_type_lookup_top_level_test.dart
new file mode 100644
index 0000000..bb1cf5b
--- /dev/null
+++ b/tests/language_2/combiner_type_lookup_top_level_test.dart
@@ -0,0 +1,17 @@
+// 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.
+
+class A {}
+
+class B extends A {
+  B operator +(int i) => this;
+}
+
+B get topLevel => new B();
+
+void set topLevel(A value) {}
+
+main() {
+  topLevel += 1;
+}
diff --git a/tests/language_2/implicit_downcast_during_for_in_element_test.dart b/tests/language_2/implicit_downcast_during_for_in_element_test.dart
new file mode 100644
index 0000000..230b354
--- /dev/null
+++ b/tests/language_2/implicit_downcast_during_for_in_element_test.dart
@@ -0,0 +1,32 @@
+// 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:expect/expect.dart";
+
+class A {}
+
+class B extends A {}
+
+void main() {
+  List<A> listOfA = <A>[new B()];
+  Object o = listOfA;
+  for (B x in o) {} // No error
+  for (B x in listOfA) {} // No error
+  B y;
+  for (y in o) {} // No error
+  for (y in listOfA) {} // No error
+  listOfA[0] = new A();
+  Expect.throwsTypeError(() {
+    for (B x in o) {}
+  });
+  Expect.throwsTypeError(() {
+    for (B x in listOfA) {}
+  });
+  Expect.throwsTypeError(() {
+    for (y in o) {}
+  });
+  Expect.throwsTypeError(() {
+    for (y in listOfA) {}
+  });
+}
diff --git a/tests/language_2/implicit_downcast_during_for_in_iterable_test.dart b/tests/language_2/implicit_downcast_during_for_in_iterable_test.dart
new file mode 100644
index 0000000..5ecc2fc
--- /dev/null
+++ b/tests/language_2/implicit_downcast_during_for_in_iterable_test.dart
@@ -0,0 +1,27 @@
+// 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:expect/expect.dart";
+
+class A {}
+
+class B extends A {}
+
+void main() {
+  Object o = <A>[];
+  for (var x in o) {} // No error
+  for (B x in o) {} // No error
+  B y;
+  for (y in o) {} // No error
+  o = new Object();
+  Expect.throwsTypeError(() {
+    for (var x in o) {}
+  });
+  Expect.throwsTypeError(() {
+    for (B x in o) {}
+  });
+  Expect.throwsTypeError(() {
+    for (y in o) {}
+  });
+}
diff --git a/tests/language_2/implicit_downcast_during_function_literal_arrow_test.dart b/tests/language_2/implicit_downcast_during_function_literal_arrow_test.dart
new file mode 100644
index 0000000..b74f788
--- /dev/null
+++ b/tests/language_2/implicit_downcast_during_function_literal_arrow_test.dart
@@ -0,0 +1,20 @@
+// 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:expect/expect.dart";
+
+class A {}
+
+class B extends A {}
+
+void main() {
+  Object b;
+  A a = new B();
+  B Function(A) f = (A a) => a;
+  b = f(a); // No error
+  a = new A();
+  Expect.throwsTypeError(() {
+    f(a);
+  });
+}
diff --git a/tests/language_2/implicit_downcast_during_function_literal_return_test.dart b/tests/language_2/implicit_downcast_during_function_literal_return_test.dart
new file mode 100644
index 0000000..791f2cd
--- /dev/null
+++ b/tests/language_2/implicit_downcast_during_function_literal_return_test.dart
@@ -0,0 +1,22 @@
+// 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:expect/expect.dart";
+
+class A {}
+
+class B extends A {}
+
+void main() {
+  Object b;
+  A a = new B();
+  B Function(A) f = (A a) {
+    return a;
+  };
+  b = f(a); // No error
+  a = new A();
+  Expect.throwsTypeError(() {
+    f(a);
+  });
+}
diff --git a/tests/language_2/int64_literal_test.dart b/tests/language_2/int64_literal_test.dart
new file mode 100644
index 0000000..9c0cb77
--- /dev/null
+++ b/tests/language_2/int64_literal_test.dart
@@ -0,0 +1,25 @@
+import 'package:expect/expect.dart';
+
+const String realMaxInt64Value = '9223372036854775807';
+const String realMinInt64Value = '-9223372036854775808';
+
+main() {
+  int minInt64Value = (-9223372036854775807) - 1;
+  minInt64Value = -(1 << 63);               /// 01: ok
+  minInt64Value = -9223372036854775808;     /// 02: ok
+  minInt64Value = -(9223372036854775808);   /// 03: compile-time error
+  minInt64Value = -(0x8000000000000000);    /// 04: ok
+  minInt64Value = 0x8000000000000000;       /// 05: ok
+
+  Expect.equals('$minInt64Value', realMinInt64Value);
+  Expect.equals('${minInt64Value - 1}', realMaxInt64Value);
+
+  int maxInt64Value = 9223372036854775807;
+  maxInt64Value = (1 << 63) - 1;            /// 10: ok
+  maxInt64Value = 9223372036854775807;      /// 20: ok
+  maxInt64Value = 9223372036854775808 - 1;  /// 30: compile-time error
+  maxInt64Value = 0x8000000000000000 - 1;   /// 40: ok
+
+  Expect.equals('$maxInt64Value', realMaxInt64Value);
+  Expect.equals('${maxInt64Value + 1}', realMinInt64Value);
+}
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index 3b84e35..b720cd2 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -469,8 +469,14 @@
 built_in_identifier_type_annotation_test/85: Crash # Issue 28813
 
 [ $compiler == dart2analyzer && !$strong ]
+combiner_type_lookup_indexed_test: StaticWarning # Issue #31484
+combiner_type_lookup_instance_test: StaticWarning # Issue #31484
+combiner_type_lookup_static_test: StaticWarning # Issue #31484
+combiner_type_lookup_top_level_test: StaticWarning # Issue #31484
 constructor13_test/01: MissingCompileTimeError
 constructor13_test/02: MissingCompileTimeError
+int64_literal_test/03: MissingCompileTimeError
+int64_literal_test/30: MissingCompileTimeError
 
 [ $compiler == dart2analyzer && $checked ]
 assertion_initializer_const_error2_test/none: Pass
@@ -1030,6 +1036,10 @@
 accessor_conflict_import_test: CompileTimeError # Issue 25626
 additional_interface_adds_optional_args_test: CompileTimeError # Issue #30568
 async_return_types_test/nestedFuture: MissingCompileTimeError
+combiner_type_lookup_indexed_test: CompileTimeError # Issue #31484
+combiner_type_lookup_instance_test: CompileTimeError # Issue #31484
+combiner_type_lookup_static_test: CompileTimeError # Issue #31484
+combiner_type_lookup_top_level_test: CompileTimeError # Issue #31484
 config_import_corelib_test: CompileTimeError
 const_types_test/07: MissingCompileTimeError # Incorrectly allows using type parameter in const expression.
 const_types_test/08: MissingCompileTimeError # Incorrectly allows using type parameter in const expression.
@@ -1042,8 +1052,11 @@
 generic_tearoff_test: CompileTimeError
 generic_test: CompileTimeError
 generics_test: CompileTimeError
+implicit_downcast_during_function_literal_arrow_test: CompileTimeError # Issue #31436
 import_core_prefix_test: CompileTimeError # "dynamic" should be defined in core.
 interceptor6_test: CompileTimeError
+int64_literal_test/03: MissingCompileTimeError  # http://dartbug.com/31479
+int64_literal_test/30: MissingCompileTimeError  # http://dartbug.com/31479
 malformed2_test: Pass, MissingCompileTimeError # Issue 31056.
 mixin_super_2_test/01: MissingCompileTimeError
 mixin_super_2_test/03: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index c26eb09..4341b0c 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -6,6 +6,7 @@
 
 [ $compiler == dart2js ]
 vm/*: SkipByDesign # Tests for the VM.
+int64_literal_test/*: Skip # This is testing Dart 2.0 int64 semantics.
 
 # dart2js does not implement the Dart 2.0 static type errors yet.
 [ $compiler == dart2js ]
@@ -778,6 +779,9 @@
 generic_instanceof_test: RuntimeError
 generic_typedef_test: RuntimeError
 implicit_downcast_during_assert_initializer_test: CompileTimeError
+implicit_downcast_during_for_in_iterable_test: RuntimeError
+implicit_downcast_during_function_literal_arrow_test: RuntimeError
+implicit_downcast_during_function_literal_return_test: RuntimeError
 implicit_downcast_during_list_literal_test: RuntimeError
 implicit_downcast_during_redirecting_initializer_test: RuntimeError
 implicit_downcast_during_return_async_test: RuntimeError
@@ -1057,6 +1061,7 @@
 implicit_downcast_during_factory_constructor_invocation_test: RuntimeError
 implicit_downcast_during_field_declaration_test: RuntimeError
 implicit_downcast_during_for_condition_test: RuntimeError
+implicit_downcast_during_for_in_element_test: RuntimeError
 implicit_downcast_during_for_initializer_expression_test: RuntimeError
 implicit_downcast_during_for_initializer_var_test: RuntimeError
 implicit_downcast_during_if_null_assignment_test: RuntimeError
@@ -1615,7 +1620,7 @@
 regress_28255_test: RuntimeError
 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: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in () for j:constructor(A.ko).
+regress_29784_test/02: MissingCompileTimeError # Issue 29784
 regress_31057_test: Crash # Unsupported operation: Unsupported type parameter type node B.
 setter_override_test/00: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
@@ -1758,7 +1763,7 @@
 covariant_subtyping_tearoff1_test: RuntimeError
 covariant_subtyping_tearoff2_test: RuntimeError
 covariant_subtyping_tearoff3_test: RuntimeError
-covariant_subtyping_test: CompileTimeError
+covariant_subtyping_test: Crash # Unsupported operation: Unsupported type parameter type node E.
 covariant_subtyping_unsafe_call1_test: RuntimeError
 covariant_subtyping_unsafe_call2_test: RuntimeError
 covariant_subtyping_unsafe_call3_test: RuntimeError
@@ -2033,7 +2038,7 @@
 regress_28255_test: RuntimeError
 regress_28341_test: RuntimeError
 regress_29784_test/01: Crash # Issue 29784
-regress_29784_test/02: Crash # Issue 29784
+regress_29784_test/02: MissingCompileTimeError # Issue 29784
 regress_31057_test: Crash # Unsupported operation: Unsupported type parameter type node B.
 setter_override_test/00: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
@@ -2461,7 +2466,7 @@
 regress_28255_test: RuntimeError
 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: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in () for j:constructor(A.ko).
+regress_29784_test/02: MissingCompileTimeError # Issue 29784
 regress_31057_test: Crash # Unsupported operation: Unsupported type parameter type node B.
 setter_override_test/00: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
@@ -2488,11 +2493,8 @@
 
 [ $compiler == dart2js && $dart2js_with_kernel && $checked ]
 arithmetic_canonicalization_test: RuntimeError
-assert_message_test: RuntimeError
-assertion_initializer_const_function_test/01: MissingCompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
-async_await_foreign_test: RuntimeError
 async_await_syntax_test/a06a: RuntimeError
 async_await_syntax_test/b06a: RuntimeError
 async_await_syntax_test/c06a: RuntimeError
@@ -2500,10 +2502,6 @@
 async_await_test/02: RuntimeError
 async_await_test/03: RuntimeError
 async_await_test/none: RuntimeError
-async_break_in_finally_test: RuntimeError
-async_cascade_test: RuntimeError
-async_control_structures_test: RuntimeError
-async_regression_23058_test: RuntimeError
 async_return_types_test/none: RuntimeError
 async_star_await_pauses_test: RuntimeError
 async_star_cancel_and_throw_in_finally_test: RuntimeError
@@ -2522,26 +2520,17 @@
 async_star_test/04: RuntimeError
 async_star_test/05: RuntimeError
 async_star_test/none: RuntimeError
-async_switch_test/none: RuntimeError
-async_switch_test/withDefault: RuntimeError
-async_test: RuntimeError
 async_throw_in_catch_test/forceAwait: RuntimeError
 async_throw_in_catch_test/none: RuntimeError
 asyncstar_concat_test: RuntimeError
 asyncstar_throw_in_catch_test: RuntimeError
 asyncstar_yield_test: RuntimeError
 asyncstar_yieldstar_test: RuntimeError
-await_and_ifnull_test: RuntimeError
 await_exceptions_test: RuntimeError
 await_for_cancel_test: RuntimeError
 await_for_test: RuntimeError
 await_for_use_local_test: RuntimeError
-await_future_test: RuntimeError
-await_in_cascade_test: RuntimeError
-await_nonfuture_test: RuntimeError
 await_not_started_immediately_test: RuntimeError
-await_postfix_expr_test: RuntimeError
-await_regression_test: RuntimeError
 bad_override_test/03: MissingCompileTimeError
 bad_override_test/04: MissingCompileTimeError
 bad_override_test/05: MissingCompileTimeError
@@ -2549,6 +2538,7 @@
 bit_operations_test/04: RuntimeError
 bit_operations_test/none: RuntimeError
 branch_canonicalization_test: RuntimeError
+branches_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 437 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
 call_function_apply_test: RuntimeError
 canonical_const2_test: RuntimeError
 check_member_static_test/02: MissingCompileTimeError
@@ -2654,6 +2644,7 @@
 covariance_type_parameter_test/03: Crash # NoSuchMethodError: The method 'hasSubclass' was called on null.
 covariance_type_parameter_test/none: Crash # NoSuchMethodError: The method 'hasSubclass' was called on null.
 covariant_override/runtime_check_test: RuntimeError
+covariant_subtyping_test: Crash # Unsupported operation: Unsupported type parameter type node E.
 cyclic_constructor_test/01: Crash # Stack Overflow
 deferred_closurize_load_library_test: RuntimeError
 deferred_constraints_constants_test/default_argument2: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
@@ -2670,19 +2661,16 @@
 deferred_constraints_type_annotation_test/type_annotation_generic2: MissingCompileTimeError
 deferred_constraints_type_annotation_test/type_annotation_generic3: MissingCompileTimeError
 deferred_constraints_type_annotation_test/type_annotation_generic4: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_non_deferred: RuntimeError
 deferred_constraints_type_annotation_test/type_annotation_null: MissingCompileTimeError
 deferred_constraints_type_annotation_test/type_annotation_top_level: MissingCompileTimeError
-deferred_import_core_test: RuntimeError
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
 deferred_load_constants_test/none: RuntimeError
-deferred_load_library_wrong_args_test/none: RuntimeError
+deferred_load_library_wrong_args_test/01: MissingRuntimeError
 deferred_not_loaded_check_test: RuntimeError
 deferred_redirecting_factory_test: RuntimeError
 deferred_shared_and_unshared_classes_test: RuntimeError
-deferred_type_dependency_test/none: RuntimeError
 double_int_to_string_test: RuntimeError
 duplicate_export_negative_test: Fail
 duplicate_implements_test/01: MissingCompileTimeError
@@ -2708,7 +2696,6 @@
 function_type_alias_test: RuntimeError
 generalized_void_syntax_test: CompileTimeError
 generic_async_star_test: RuntimeError
-generic_async_test: RuntimeError
 generic_closure_test/01: RuntimeError
 generic_closure_test/none: RuntimeError
 generic_field_mixin4_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(M.T) in () for j:constructor(C3.).
@@ -2728,6 +2715,7 @@
 getter_override_test/01: MissingCompileTimeError
 getter_override_test/02: MissingCompileTimeError
 identical_closure2_test: RuntimeError
+implicit_downcast_during_assert_initializer_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 660 pos 16: 'false': Unhandled initializer ir.ShadowAssertInitializer
 infinite_switch_label_test: Crash # NoSuchMethodError: The method 'generateBreak' was called on null.
 infinity_test: RuntimeError
 instance_creation_in_function_annotation_test: RuntimeError
@@ -2739,7 +2727,6 @@
 invocation_mirror2_test: RuntimeError
 issue21079_test: RuntimeError
 issue23244_test: RuntimeError
-issue_1751477_test: RuntimeError
 left_shift_test: RuntimeError
 list_literal1_test/01: MissingCompileTimeError
 list_literal4_test/00: MissingCompileTimeError
@@ -2867,6 +2854,7 @@
 null_test/none: RuntimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError
+operator_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 437 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
@@ -2881,6 +2869,7 @@
 override_method_with_field_test/01: MissingCompileTimeError
 positional_parameters_type_test/01: MissingCompileTimeError
 positional_parameters_type_test/02: MissingCompileTimeError
+prefix5_negative_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 437 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
 private_super_constructor_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/02: MissingCompileTimeError
@@ -2893,7 +2882,6 @@
 regress_23996_test: RuntimeError
 regress_24283_test: RuntimeError
 regress_24935_test/none: RuntimeError
-regress_26175_test: RuntimeError
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
 regress_28217_test/01: MissingCompileTimeError
 regress_28217_test/none: MissingCompileTimeError
@@ -2901,7 +2889,8 @@
 regress_28341_test: RuntimeError
 regress_29405_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: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in () for j:constructor(A.ko).
+regress_29784_test/02: MissingCompileTimeError # Issue 29784
+regress_30339_test: RuntimeError # Issue 26429
 regress_31057_test: Crash # Unsupported operation: Unsupported type parameter type node B.
 setter_override_test/00: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
@@ -2909,18 +2898,14 @@
 stacktrace_demangle_ctors_test: RuntimeError
 stacktrace_test: RuntimeError
 super_call4_test: Crash # NoSuchMethodError: The getter 'thisLocal' was called on null.
-super_in_async1_test: RuntimeError
-super_in_async2_test: RuntimeError
-super_in_async3_test: RuntimeError
-super_in_async4_test: RuntimeError
-super_in_async5_test: RuntimeError
-super_in_async6_test: RuntimeError
 switch_bad_case_test/01: MissingCompileTimeError
 switch_bad_case_test/02: MissingCompileTimeError
 switch_case_test/00: MissingCompileTimeError
 switch_case_test/01: MissingCompileTimeError
 switch_case_test/02: MissingCompileTimeError
 symbol_literal_test/01: MissingCompileTimeError
+sync_generator2_test/41: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
+sync_generator2_test/52: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
 syntax_test/28: MissingCompileTimeError
 syntax_test/29: MissingCompileTimeError
 syntax_test/30: MissingCompileTimeError
@@ -2935,7 +2920,6 @@
 type_parameter_test/06: Crash # Internal Error: Unexpected type variable in static context.
 type_parameter_test/09: Crash # Internal Error: Unexpected type variable in static context.
 type_variable_scope_test/03: Crash # Internal Error: Unexpected type variable in static context.
-unused_overridden_async_test: RuntimeError
 yieldstar_pause_test: RuntimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel ]
@@ -2959,6 +2943,10 @@
 built_in_identifier_type_annotation_test/67: MissingCompileTimeError # Issue 28815
 built_in_identifier_type_annotation_test/68: MissingCompileTimeError # Issue 28815
 implicit_downcast_during_constructor_invocation_test: RuntimeError
+implicit_downcast_during_for_in_element_test: RuntimeError
+implicit_downcast_during_for_in_iterable_test: RuntimeError
+implicit_downcast_during_function_literal_arrow_test: RuntimeError
+implicit_downcast_during_function_literal_return_test: RuntimeError
 implicit_downcast_during_invocation_test: RuntimeError
 implicit_downcast_during_list_literal_test: RuntimeError
 implicit_downcast_during_redirecting_initializer_test: RuntimeError
@@ -3167,6 +3155,8 @@
 mixin_generic_test: Fail # Issue 12605
 
 [ $compiler == dart2js && $host_checked && !$dart2js_with_kernel ]
+implicit_downcast_during_for_in_element_test: Crash
+implicit_downcast_during_for_in_iterable_test: Crash
 regress_26855_test/1: Crash # Issue 26867
 regress_26855_test/2: Crash # Issue 26867
 regress_26855_test/3: Crash # Issue 26867
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index 83392c5..4d5a070 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -33,10 +33,8 @@
 generic_methods_overriding_test/01: MissingCompileTimeError # Issue 29920
 generic_methods_overriding_test/03: MissingCompileTimeError # Issue 29920
 generic_tearoff_test: CompileTimeError
-implicit_downcast_during_indexed_compound_assignment_test: RuntimeError
-implicit_downcast_during_indexed_if_null_assignment_test: RuntimeError
-import_core_prefix_test: CompileTimeError # "dynamic" should be defined in core.
 internal_library_test/02: Crash
+int64_literal_test/*: Skip # This is testing Dart 2.0 int64 semantics.
 method_override7_test/03: MissingCompileTimeError # Issue 30514
 multiline_newline_test/04: MissingCompileTimeError
 multiline_newline_test/04r: MissingCompileTimeError
@@ -114,14 +112,18 @@
 accessor_conflict_import_test: CompileTimeError # Issue 25626
 additional_interface_adds_optional_args_test: CompileTimeError # Issue #30568
 assertion_initializer_const_error2_test/*: Crash # Issue #27809
-assertion_initializer_const_error2_test/cc10: CompileTimeError # Issue #31319
-assertion_initializer_const_error2_test/cc11: CompileTimeError # Issue #31319
+assertion_initializer_const_error2_test/cc10: Pass # Issue #31319
+assertion_initializer_const_error2_test/cc11: Pass # Issue #31319
 assertion_initializer_const_error2_test/none: Pass
 assertion_initializer_const_function_test/01: Crash
 assertion_initializer_test: CompileTimeError
 black_listed_test/none: fail # Issue 14228
 built_in_identifier_prefix_test: CompileTimeError
 built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Issue 28816
+combiner_type_lookup_indexed_test: CompileTimeError # Issue #31484
+combiner_type_lookup_instance_test: CompileTimeError # Issue #31484
+combiner_type_lookup_static_test: CompileTimeError # Issue #31484
+combiner_type_lookup_top_level_test: CompileTimeError # Issue #31484
 conflicting_type_variable_and_setter_test: CompileTimeError
 const_for_in_variable_test/01: MissingCompileTimeError
 const_types_test/07: MissingCompileTimeError
@@ -152,6 +154,9 @@
 generic_test: CompileTimeError
 generics_test: CompileTimeError
 getter_setter_in_lib_test: CompileTimeError
+implicit_downcast_during_assert_initializer_test: Crash
+implicit_downcast_during_function_literal_arrow_test: CompileTimeError # Issue #31436
+import_core_prefix_test: CompileTimeError
 import_private_test/01: MissingCompileTimeError # Issue 29920
 initializing_formal_final_test: MissingCompileTimeError
 interface_test/00: MissingCompileTimeError
@@ -224,9 +229,18 @@
 additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
 additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
 assert_message_test: CompileTimeError
+assertion_initializer_const_error2_test/cc01: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc02: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc03: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc05: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc06: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc07: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc08: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc09: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc10: MissingCompileTimeError
+assertion_initializer_const_error2_test/cc11: MissingCompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: CompileTimeError
-assign_static_type_test/06: MissingCompileTimeError
 async_await_syntax_test/c10a: MissingCompileTimeError
 async_await_syntax_test/d08b: MissingCompileTimeError
 async_await_syntax_test/d10a: MissingCompileTimeError
@@ -322,9 +336,7 @@
 compile_time_constant_o_test/01: MissingCompileTimeError
 compile_time_constant_o_test/02: MissingCompileTimeError
 compile_time_constant_p_test/01: Crash
-compile_time_constant_static2_test/03: MissingCompileTimeError
 compile_time_constant_static2_test/04: MissingCompileTimeError
-compile_time_constant_static3_test/03: MissingCompileTimeError
 compile_time_constant_static3_test/04: MissingCompileTimeError
 compile_time_constant_static4_test/02: MissingCompileTimeError
 compile_time_constant_static4_test/03: MissingCompileTimeError
@@ -441,24 +453,76 @@
 first_class_types_literals_test/10: MissingCompileTimeError
 first_class_types_literals_test/11: MissingCompileTimeError
 first_class_types_literals_test/12: MissingCompileTimeError
-flatten_test/01: Crash
-flatten_test/02: Crash
-flatten_test/03: Crash
-flatten_test/04: Crash
-flatten_test/05: Crash
-flatten_test/06: Crash
-flatten_test/07: Crash
-flatten_test/08: Crash
-flatten_test/09: Crash
-flatten_test/10: Crash
-flatten_test/11: Crash
-flatten_test/12: Crash
-flatten_test/none: Crash
-for_in3_test: MissingCompileTimeError
 function_propagation_test: CompileTimeError
 function_subtype_bound_closure7_test: CompileTimeError
 function_type_parameter2_negative_test: Fail
 function_type_parameter_negative_test: Fail
+function_type/function_type79_test: CompileTimeError
+function_type/function_type20_test: CompileTimeError
+function_type/function_type71_test: CompileTimeError
+function_type/function_type55_test: CompileTimeError
+function_type/function_type82_test: CompileTimeError
+function_type/function_type25_test: CompileTimeError
+function_type/function_type35_test: CompileTimeError
+function_type/function_type7_test: CompileTimeError
+function_type/function_type54_test: CompileTimeError
+function_type/function_type70_test: CompileTimeError
+function_type/function_type30_test: CompileTimeError
+function_type/function_type58_test: CompileTimeError
+function_type/function_type42_test: CompileTimeError
+function_type/function_type2_test: CompileTimeError
+function_type/function_type11_test: CompileTimeError
+function_type/function_type63_test: CompileTimeError
+function_type/function_type47_test: CompileTimeError
+function_type/function_type83_test: CompileTimeError
+function_type/function_type59_test: CompileTimeError
+function_type/function_type36_test: CompileTimeError
+function_type/function_type10_test: CompileTimeError
+function_type/function_type24_test: CompileTimeError
+function_type/function_type40_test: CompileTimeError
+function_type/function_type75_test: CompileTimeError
+function_type/function_type33_test: CompileTimeError
+function_type/function_type95_test: CompileTimeError
+function_type/function_type34_test: CompileTimeError
+function_type/function_type51_test: CompileTimeError
+function_type/function_type43_test: CompileTimeError
+function_type/function_type41_test: CompileTimeError
+function_type/function_type49_test: CompileTimeError
+function_type/function_type38_test: CompileTimeError
+function_type/function_type67_test: CompileTimeError
+function_type/function_type27_test: CompileTimeError
+function_type/function_type19_test: CompileTimeError
+function_type/function_type46_test: CompileTimeError
+function_type/function_type28_test: CompileTimeError
+function_type/function_type99_test: CompileTimeError
+function_type/function_type44_test: CompileTimeError
+function_type/function_type50_test: CompileTimeError
+function_type/function_type18_test: CompileTimeError
+function_type/function_type29_test: CompileTimeError
+function_type/function_type32_test: CompileTimeError
+function_type/function_type31_test: CompileTimeError
+function_type/function_type14_test: CompileTimeError
+function_type/function_type66_test: CompileTimeError
+function_type/function_type39_test: CompileTimeError
+function_type/function_type48_test: CompileTimeError
+function_type/function_type87_test: CompileTimeError
+function_type/function_type37_test: CompileTimeError
+function_type/function_type21_test: CompileTimeError
+function_type/function_type86_test: CompileTimeError
+function_type/function_type98_test: CompileTimeError
+function_type/function_type91_test: CompileTimeError
+function_type/function_type26_test: CompileTimeError
+function_type/function_type6_test: CompileTimeError
+function_type/function_type74_test: CompileTimeError
+function_type/function_type90_test: CompileTimeError
+function_type/function_type23_test: CompileTimeError
+function_type/function_type45_test: CompileTimeError
+function_type/function_type22_test: CompileTimeError
+function_type/function_type62_test: CompileTimeError
+function_type/function_type15_test: CompileTimeError
+function_type/function_type78_test: CompileTimeError
+function_type/function_type94_test: CompileTimeError
+function_type/function_type3_test: CompileTimeError
 generalized_void_syntax_test: CompileTimeError
 generic_function_bounds_test: CompileTimeError
 generic_function_dcall_test: CompileTimeError
@@ -523,8 +587,6 @@
 least_upper_bound_test/19: MissingCompileTimeError
 least_upper_bound_test/20: MissingCompileTimeError
 least_upper_bound_test/32: MissingCompileTimeError
-list_literal4_test/01: MissingCompileTimeError
-list_literal4_test/04: MissingCompileTimeError
 local_function3_test/01: MissingCompileTimeError
 local_function_test/01: MissingCompileTimeError
 local_function_test/02: MissingCompileTimeError
@@ -550,8 +612,6 @@
 map_literal3_test/01: MissingCompileTimeError
 map_literal3_test/02: MissingCompileTimeError
 map_literal3_test/03: MissingCompileTimeError
-map_literal4_test/02: MissingCompileTimeError
-map_literal4_test/06: MissingCompileTimeError
 method_override7_test/00: MissingCompileTimeError
 method_override7_test/01: MissingCompileTimeError
 method_override7_test/02: MissingCompileTimeError
@@ -670,8 +730,6 @@
 mixin_type_parameters_errors_test/03: MissingCompileTimeError
 mixin_type_parameters_errors_test/04: MissingCompileTimeError
 mixin_type_parameters_errors_test/05: MissingCompileTimeError
-mock_writable_final_field_test: Crash
-mock_writable_final_private_field_test: Crash
 multiline_newline_test/06: MissingCompileTimeError
 multiline_newline_test/06r: MissingCompileTimeError
 named_constructor_test/01: MissingCompileTimeError
@@ -1029,6 +1087,10 @@
 f_bounded_quantification3_test: RuntimeError # Issue 29920; Uncaught Error: type arguments should not be null: (F1, F2) => {
 field_increment_bailout_test: RuntimeError # Issue 29920; UnimplementedError: JsInstanceMirror.delegate unimplemented
 field_initialization_order_test/none: RuntimeError # Expect.equals(expected: <b.a.ai.bi.>, actual: <b.bi.a.ai.>) fails.
+flatten_test/05: MissingRuntimeError # Issue 29920
+flatten_test/08: MissingRuntimeError # Issue 29920
+flatten_test/09: MissingRuntimeError # Issue 29920
+flatten_test/12: MissingRuntimeError # Issue 29920
 for_variable_capture_test: RuntimeError # Issue 29920; Expect.equals(expected: <1>, actual: <0>) fails.
 function_subtype_inline2_test: RuntimeError # Expect.fail('Missing type error: 'new C.c1(m2)'.')
 function_type_alias6_test/none: RuntimeError # Expect.isTrue(false) fails.
@@ -1102,15 +1164,12 @@
 f_bounded_quantification3_test: RuntimeError # Issue 29920
 final_field_initialization_order_test: RuntimeError # Issue 31058
 first_class_types_test: RuntimeError, OK # Strong mode reifies inferred type argument.
-flatten_test/05: MissingRuntimeError # Issue 29920
-flatten_test/08: MissingRuntimeError # Issue 29920
-flatten_test/09: MissingRuntimeError # Issue 29920
-flatten_test/12: MissingRuntimeError # Issue 29920
 fuzzy_arrows_test/03: RuntimeError # Issue 29630
 generic_method_types_test/02: RuntimeError
 getter_closure_execution_order_test: RuntimeError # Issue 29920
-implicit_downcast_during_assert_initializer_test: Crash
 implicit_downcast_during_compound_assignment_test: RuntimeError
+implicit_downcast_during_indexed_compound_assignment_test: RuntimeError
+implicit_downcast_during_indexed_if_null_assignment_test: RuntimeError
 label_test: RuntimeError
 lazy_static3_test: RuntimeError # Issue 30852
 lazy_static8_test: RuntimeError # Issue 30852
@@ -1139,16 +1198,6 @@
 yieldstar_pause_test: Skip # Times out
 
 [ $compiler == dartdevk && $runtime != none ]
-assertion_initializer_const_error2_test/cc01: RuntimeError # Assertion failed: is not true
-assertion_initializer_const_error2_test/cc02: RuntimeError # Assertion failed: is not true
-assertion_initializer_const_error2_test/cc03: RuntimeError # Assertion failed: is not true
-assertion_initializer_const_error2_test/cc05: RuntimeError # Assertion failed: is not true
-assertion_initializer_const_error2_test/cc06: RuntimeError # Assertion failed: is not true
-assertion_initializer_const_error2_test/cc07: RuntimeError # Assertion failed: is not true
-assertion_initializer_const_error2_test/cc08: RuntimeError # Assertion failed: is not true
-assertion_initializer_const_error2_test/cc09: RuntimeError # Assertion failed: "2 < 1"
-assertion_initializer_const_error2_test/cc10: RuntimeError # Assertion failed: is not true
-assertion_initializer_const_error2_test/cc11: RuntimeError # Assertion failed: "2 < 1"
 callable_test/none: RuntimeError # Expect.throws(TypeError) fails: Did not throw
 compile_time_constant_static5_test/23: RuntimeError # Type 'A' is not a subtype of type 'B', issue 30546
 conditional_import_string_test: RuntimeError # Unsupported operation: String.fromEnvironment can only be used as a const constructor
@@ -1199,6 +1248,8 @@
 generic_methods_unused_parameter_test: RuntimeError # Expect.isTrue(false) fails.
 generic_no_such_method_dispatcher_test: RuntimeError # NoSuchMethodError: method not found: '+'
 generic_test: RuntimeError # ReferenceError: BOfT is not defined
+implicit_downcast_during_function_literal_arrow_test: RuntimeError
+issue13179_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
@@ -1216,10 +1267,9 @@
 mixin_naming_test: RuntimeError # Expect.isTrue(false) fails.
 mixin_regress_13688_test: RuntimeError
 mixin_type_parameter5_test: RuntimeError
+mock_writable_final_field_test: RuntimeError # Expect.listEquals(list length, expected: <1>, actual: <0>) fails: Next element <123>
+mock_writable_final_private_field_test: RuntimeError
 nested_generic_closure_test: RuntimeError # Expect.equals(at index 3: Expected <...(<F>(F) => F) => void>, Found: <...(<F extends Object>(F) => F) => void...>) fails.
-no_such_method_mock_test: RuntimeError # Type 'bool' is not a subtype of type '(String) => bool' in strong mode
-no_such_method_subtype_test: RuntimeError # Type 'int' is not a subtype of type '() => dynamic' in strong mode
-nsm4_test: RuntimeError # Type 'int' is not a subtype of type '() => int' in strong mode
 recursive_generic_test: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
 recursive_inheritance_test: RuntimeError # Expect.isTrue(false) fails.
 redirecting_factory_long_test: RuntimeError # Expect.isTrue(false) fails.
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index f6714e1..2d55e87 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -266,13 +266,8 @@
 constructor_redirect2_negative_test: MissingCompileTimeError
 constructor_redirect2_test/01: MissingCompileTimeError # Fasta bug: Body on redirecting constructor.
 constructor_redirect_test/01: MissingCompileTimeError # Fasta bug: Initializer refers to this.
-covariance_type_parameter_test/01: RuntimeError
-covariance_type_parameter_test/02: RuntimeError
-covariance_type_parameter_test/03: RuntimeError
-covariant_override/tear_off_type_test: RuntimeError
 covariant_subtyping_test: CompileTimeError
 covariant_subtyping_test: RuntimeError
-covariant_tear_off_type_test: RuntimeError
 crash_6725_test/01: MissingCompileTimeError
 create_unresolved_type_test/01: MissingCompileTimeError
 ct_const2_test: Pass, Crash # Flaky
@@ -433,15 +428,12 @@
 flatten_test/08: MissingRuntimeError
 flatten_test/09: MissingRuntimeError
 flatten_test/12: MissingRuntimeError
-for_in3_test: MissingCompileTimeError
 for_in_side_effects_test/01: MissingCompileTimeError
 function_malformed_result_type_test/00: MissingCompileTimeError
 function_propagation_test: CompileTimeError # Issue 31402 (Variable declaration)
 function_subtype3_test: RuntimeError
 function_subtype_bound_closure1_test: RuntimeError
 function_subtype_bound_closure2_test: RuntimeError
-function_subtype_bound_closure3_test: RuntimeError
-function_subtype_bound_closure4_test: RuntimeError
 function_subtype_bound_closure5_test: RuntimeError
 function_subtype_bound_closure5a_test: RuntimeError
 function_subtype_bound_closure6_test: RuntimeError
@@ -450,14 +442,12 @@
 function_subtype_call1_test: RuntimeError
 function_subtype_call2_test: RuntimeError
 function_subtype_cast0_test: RuntimeError
-function_subtype_cast1_test: RuntimeError
 function_subtype_cast2_test: RuntimeError
 function_subtype_cast3_test: RuntimeError
 function_subtype_local1_test: RuntimeError
 function_subtype_local2_test: RuntimeError
 function_subtype_local5_test: RuntimeError
 function_subtype_not0_test: RuntimeError
-function_subtype_not1_test: RuntimeError
 function_subtype_not2_test: RuntimeError
 function_subtype_not3_test: RuntimeError
 function_subtype_simple1_test: RuntimeError
@@ -585,7 +575,6 @@
 generic_list_checked_test: CompileTimeError # Issue 31402 (Variable declaration)
 generic_method_types_test/02: RuntimeError
 generic_methods_bounds_test/01: MissingCompileTimeError
-generic_methods_generic_class_tearoff_test: RuntimeError
 generic_methods_overriding_test/01: MissingCompileTimeError
 generic_methods_overriding_test/03: MissingCompileTimeError
 generic_methods_recursive_bound_test/02: MissingCompileTimeError
@@ -634,6 +623,9 @@
 if_null_assignment_static_test/41: MissingCompileTimeError
 if_null_evaluation_order_test: Pass
 if_null_precedence_test/none: RuntimeError
+int64_literal_test/03: MissingCompileTimeError  # http://dartbug.com/31479
+int64_literal_test/30: MissingCompileTimeError  # http://dartbug.com/31479
+implicit_downcast_during_function_literal_arrow_test: RuntimeError # Issue #31436
 implicit_downcast_during_return_async_test: RuntimeError
 implicit_this_test/01: MissingCompileTimeError
 implicit_this_test/02: MissingCompileTimeError
@@ -1009,7 +1001,6 @@
 regress_29784_test/02: MissingCompileTimeError
 regress_30339_test: CompileTimeError # Issue 31402 (Variable declaration)
 rewrite_implicit_this_test/01: MissingCompileTimeError
-runtime_type_function_test: RuntimeError
 setter4_test: MissingCompileTimeError # Issue 14736
 setter_override_test/01: MissingCompileTimeError
 setter_override_test/02: MissingCompileTimeError
@@ -1386,9 +1377,7 @@
 function_subtype_checked0_test: RuntimeError
 function_subtype_inline2_test: RuntimeError
 function_subtype_setter0_test: RuntimeError
-generic_field_mixin6_test/none: RuntimeError
 generic_list_checked_test: RuntimeError
-generic_methods_bounds_test/02: MissingRuntimeError
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError # KernelVM bug: Issue 15101
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError # KernelVM bug: Issue 15101
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError # KernelVM bug: Issue 15101
@@ -1434,7 +1423,6 @@
 const_constructor2_test/22: MissingCompileTimeError
 const_constructor2_test/24: MissingCompileTimeError
 const_init2_test/02: MissingCompileTimeError
-covariance_type_parameter_test/none: RuntimeError
 default_factory2_test/01: Fail
 factory_redirection_test/08: Fail
 factory_redirection_test/09: Fail
@@ -1481,7 +1469,6 @@
 abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError
 abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError
 abstract_syntax_test/00: MissingCompileTimeError
-abstract_syntax_test/01: MissingCompileTimeError
 additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
 additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
 additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
@@ -1499,14 +1486,9 @@
 assign_to_type_test/03: MissingCompileTimeError
 assign_to_type_test/04: MissingCompileTimeError
 assign_top_method_test: MissingCompileTimeError
-async_await_syntax_test/a12b: MissingCompileTimeError
-async_await_syntax_test/a12d: MissingCompileTimeError
-async_await_syntax_test/a15b: MissingCompileTimeError
-async_await_syntax_test/a15d: MissingCompileTimeError
 async_await_syntax_test/c10a: MissingCompileTimeError
 async_await_syntax_test/d08b: MissingCompileTimeError
 async_await_syntax_test/d10a: MissingCompileTimeError
-async_await_syntax_test/e1: MissingCompileTimeError
 async_await_test/02: CompileTimeError # Issue 31402 (Invocation arguments)
 async_await_test/03: CompileTimeError # Issue 31402 (Invocation arguments)
 async_await_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
@@ -1531,8 +1513,6 @@
 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)
-bad_constructor_test/00: MissingCompileTimeError
-bad_constructor_test/01: MissingCompileTimeError
 bad_named_parameters2_test/01: MissingCompileTimeError
 bad_named_parameters_test/01: MissingCompileTimeError
 bad_named_parameters_test/02: MissingCompileTimeError
@@ -1545,21 +1525,6 @@
 bad_override_test/06: MissingCompileTimeError
 bool_check_test: RuntimeError
 bool_condition_check_test: RuntimeError
-built_in_identifier_illegal_test/01: MissingCompileTimeError
-built_in_identifier_illegal_test/04: MissingCompileTimeError
-built_in_identifier_illegal_test/05: MissingCompileTimeError
-built_in_identifier_illegal_test/06: MissingCompileTimeError
-built_in_identifier_illegal_test/07: MissingCompileTimeError
-built_in_identifier_illegal_test/08: MissingCompileTimeError
-built_in_identifier_illegal_test/12: MissingCompileTimeError
-built_in_identifier_illegal_test/13: MissingCompileTimeError
-built_in_identifier_illegal_test/15: MissingCompileTimeError
-built_in_identifier_illegal_test/16: MissingCompileTimeError
-built_in_identifier_illegal_test/17: MissingCompileTimeError
-built_in_identifier_illegal_test/18: MissingCompileTimeError
-built_in_identifier_illegal_test/19: MissingCompileTimeError
-built_in_identifier_illegal_test/20: MissingCompileTimeError
-built_in_identifier_not_prefix_test/22: MissingCompileTimeError # Issue 28814
 built_in_identifier_prefix_test: CompileTimeError
 built_in_identifier_type_annotation_test/22: Crash # Issue 28814
 built_in_identifier_type_annotation_test/22: DartkCrash # Issue 28814
@@ -1579,7 +1544,6 @@
 built_in_identifier_type_annotation_test/66: MissingCompileTimeError # Issue 28814
 built_in_identifier_type_annotation_test/67: MissingCompileTimeError # Issue 28814
 built_in_identifier_type_annotation_test/68: MissingCompileTimeError # Issue 28814
-built_in_identifier_type_annotation_test/74: MissingCompileTimeError # Issue 28814
 call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
 call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
 call_constructor_on_unresolvable_class_test/03: MissingCompileTimeError
@@ -1717,8 +1681,6 @@
 const_error_multiply_initialized_test/04: MissingCompileTimeError
 const_evaluation_test: SkipByDesign
 const_factory_with_body_test/01: MissingCompileTimeError # Fasta bug: Const factory with body.
-const_getter_test/01: MissingCompileTimeError
-const_getter_test/02: MissingCompileTimeError
 const_instance_field_test/01: MissingCompileTimeError # Fasta bug: Const instance field.
 const_list_test: RuntimeError
 const_map2_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
@@ -1730,8 +1692,6 @@
 const_optional_args_test/01: MissingCompileTimeError # Fasta bug: Default parameter values must be const.
 const_redirecting_factory_test: CompileTimeError # Issue 31402 (Field declaration)
 const_switch2_test/01: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-const_syntax_test/03: MissingCompileTimeError
-const_syntax_test/04: MissingCompileTimeError
 const_syntax_test/05: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 const_syntax_test/08: Crash
 const_types_test/01: MissingCompileTimeError
@@ -1745,15 +1705,12 @@
 const_types_test/35: MissingCompileTimeError
 const_types_test/39: MissingCompileTimeError
 const_types_test/40: MissingCompileTimeError
-constants_test/01: MissingCompileTimeError
-constants_test/02: MissingCompileTimeError
 constructor13_test/01: MissingCompileTimeError
 constructor13_test/02: MissingCompileTimeError
 constructor3_test: Fail, OK, Pass
 constructor_call_as_function_test/01: MissingCompileTimeError
 constructor_duplicate_final_test/01: MissingCompileTimeError
 constructor_duplicate_final_test/02: MissingCompileTimeError
-constructor_name_test/02: MissingCompileTimeError
 constructor_named_arguments_test/01: MissingCompileTimeError
 constructor_redirect1_negative_test/01: MissingCompileTimeError
 constructor_redirect1_negative_test/none: MissingCompileTimeError
@@ -1763,26 +1720,6 @@
 covariant_subtyping_test: CompileTimeError
 covariant_subtyping_test: Crash
 covariant_subtyping_with_substitution_test: RuntimeError
-covariant_tear_off_type_test: RuntimeError
-covariant_test/01: MissingCompileTimeError
-covariant_test/04: MissingCompileTimeError
-covariant_test/07: MissingCompileTimeError
-covariant_test/10: MissingCompileTimeError
-covariant_test/11: MissingCompileTimeError
-covariant_test/21: MissingCompileTimeError
-covariant_test/21b: MissingCompileTimeError
-covariant_test/24: MissingCompileTimeError
-covariant_test/27: MissingCompileTimeError
-covariant_test/27b: MissingCompileTimeError
-covariant_test/30: MissingCompileTimeError
-covariant_test/30b: MissingCompileTimeError
-covariant_test/31: MissingCompileTimeError
-covariant_test/31b: MissingCompileTimeError
-covariant_test/41: MissingCompileTimeError
-covariant_test/44: MissingCompileTimeError
-covariant_test/47: MissingCompileTimeError
-covariant_test/50: MissingCompileTimeError
-covariant_test/51: MissingCompileTimeError
 crash_6725_test/01: MissingCompileTimeError
 create_unresolved_type_test/01: MissingCompileTimeError
 ct_const2_test: Skip # Incompatible flag: --compile_all
@@ -1855,7 +1792,6 @@
 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: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
-deferred_no_prefix_test/01: MissingCompileTimeError
 deferred_no_such_method_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 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.
@@ -1873,6 +1809,7 @@
 deferred_type_dependency_test/none: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_type_dependency_test/type_annotation: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deopt_inlined_function_lazy_test: Skip # Incompatible flag: --deoptimize-alot
+disassemble_test: Crash
 duplicate_export_negative_test: Fail # Issue 6134
 duplicate_implements_test/01: MissingCompileTimeError
 duplicate_implements_test/02: MissingCompileTimeError
@@ -1887,7 +1824,6 @@
 empty_block_case_test: MissingCompileTimeError
 enum_mirror_test: SkipByDesign
 enum_private_test/02: MissingCompileTimeError
-enum_syntax_test/08: MissingCompileTimeError
 error_stacktrace_test/00: MissingCompileTimeError
 example_constructor_test: Fail, OK
 export_ambiguous_main_negative_test: Fail # Issue 14763
@@ -1898,12 +1834,9 @@
 export_double_same_main_test: Skip # Issue 29895
 external_test/10: MissingRuntimeError # KernelVM bug: Unbound external.
 external_test/13: MissingRuntimeError # KernelVM bug: Unbound external.
-external_test/14: MissingCompileTimeError
-external_test/16: MissingCompileTimeError
 external_test/20: MissingRuntimeError # KernelVM bug: Unbound external.
 external_test/21: CompileTimeError
 external_test/24: CompileTimeError
-external_test/25: MissingCompileTimeError
 f_bounded_quantification_test/01: MissingCompileTimeError
 f_bounded_quantification_test/02: MissingCompileTimeError
 factory2_test/03: MissingCompileTimeError
@@ -1930,8 +1863,6 @@
 final_for_in_variable_test: MissingCompileTimeError
 final_param_test: MissingCompileTimeError
 final_super_field_set_test: MissingCompileTimeError
-final_syntax_test/03: MissingCompileTimeError
-final_syntax_test/04: MissingCompileTimeError
 final_syntax_test/09: Crash
 final_variable_assignment_test/01: MissingCompileTimeError
 final_variable_assignment_test/02: MissingCompileTimeError
@@ -1952,22 +1883,17 @@
 flatten_test/08: MissingRuntimeError
 flatten_test/09: MissingRuntimeError
 flatten_test/12: MissingRuntimeError
-for_in3_test: MissingCompileTimeError
 for_in_side_effects_test/01: MissingCompileTimeError
 function_malformed_result_type_test/00: MissingCompileTimeError
 function_propagation_test: CompileTimeError # Issue 31402 (Variable declaration)
-function_subtype_bound_closure3_test: RuntimeError
-function_subtype_bound_closure4_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_cast1_test: RuntimeError
 function_subtype_named1_test: Pass
 function_subtype_named1_test: RuntimeError
 function_subtype_named2_test: RuntimeError
 function_subtype_not0_test: RuntimeError
-function_subtype_not1_test: RuntimeError
 function_subtype_not2_test: RuntimeError
 function_subtype_optional1_test: Pass
 function_subtype_optional1_test: RuntimeError
@@ -1977,16 +1903,6 @@
 function_subtype_typearg2_test: RuntimeError
 function_subtype_typearg3_test: RuntimeError
 function_subtype_typearg5_test: RuntimeError
-function_syntax_test/00: MissingCompileTimeError
-function_syntax_test/01: MissingCompileTimeError
-function_syntax_test/22: MissingCompileTimeError
-function_syntax_test/64: MissingCompileTimeError
-function_syntax_test/67: MissingCompileTimeError
-function_syntax_test/68: MissingCompileTimeError
-function_syntax_test/69: MissingCompileTimeError
-function_syntax_test/71: MissingCompileTimeError
-function_syntax_test/73: MissingCompileTimeError
-function_syntax_test/74: MissingCompileTimeError
 function_type/function_type0_test: RuntimeError
 function_type/function_type10_test: RuntimeError
 function_type/function_type11_test: RuntimeError
@@ -2105,9 +2021,9 @@
 generic_instanceof_test: RuntimeError
 generic_list_checked_test: CompileTimeError # Issue 31402 (Variable declaration)
 generic_list_checked_test: RuntimeError
+generic_method_types_test/02: RuntimeError
 generic_methods_bounds_test/01: Crash
 generic_methods_bounds_test/01: MissingCompileTimeError
-generic_methods_bounds_test/02: MissingRuntimeError
 generic_methods_generic_class_tearoff_test: RuntimeError
 generic_methods_generic_function_result_test/01: MissingCompileTimeError
 generic_methods_optional_parameters_test: Pass
@@ -2128,9 +2044,6 @@
 generic_methods_unused_parameter_test: RuntimeError
 generic_tearoff_test: CompileTimeError
 generic_tearoff_test: RuntimeError
-get_set_syntax_test/00: MissingCompileTimeError
-get_set_syntax_test/04: MissingCompileTimeError
-getter_declaration_negative_test: Crash
 getter_no_setter2_test/00: MissingCompileTimeError
 getter_no_setter2_test/01: MissingCompileTimeError
 getter_no_setter2_test/03: MissingCompileTimeError
@@ -2138,10 +2051,6 @@
 getter_no_setter_test/01: MissingCompileTimeError
 getter_no_setter_test/03: MissingCompileTimeError
 getter_override_test/03: MissingCompileTimeError
-getter_parameters_test/01: MissingCompileTimeError
-getter_parameters_test/02: Crash
-getter_parameters_test/03: MissingCompileTimeError
-getter_parameters_test/04: MissingCompileTimeError
 getters_setters2_test/*: Pass # Correctly passes.
 getters_setters2_test/01: RuntimeError
 getters_setters2_test/02: MissingCompileTimeError
@@ -2182,6 +2091,7 @@
 implicit_downcast_during_for_condition_test: Pass # Correctly passes.
 implicit_downcast_during_for_initializer_expression_test: Pass # Correctly passes.
 implicit_downcast_during_for_initializer_var_test: Pass # Correctly passes.
+implicit_downcast_during_function_literal_arrow_test: RuntimeError # Issue #31436
 implicit_downcast_during_if_null_assignment_test: Pass # Correctly passes.
 implicit_downcast_during_if_statement_test: Pass # Correctly passes.
 implicit_downcast_during_list_literal_test: Pass # Correctly passes.
@@ -2209,6 +2119,8 @@
 instanceof4_test/01: RuntimeError
 instanceof4_test/none: Pass
 instanceof4_test/none: RuntimeError
+int64_literal_test/03: MissingCompileTimeError  # http://dartbug.com/31479
+int64_literal_test/30: MissingCompileTimeError  # http://dartbug.com/31479
 interface_test/00: MissingCompileTimeError
 invocation_mirror2_test: SkipByDesign
 invocation_mirror_invoke_on2_test: SkipByDesign
@@ -2384,6 +2296,7 @@
 method_override6_test/none: Pass
 method_override7_test/03: MissingCompileTimeError
 method_override8_test/03: MissingCompileTimeError
+method_override_test: RuntimeError
 mixin_black_listed_test/02: MissingCompileTimeError
 mixin_illegal_constructor_test/13: MissingCompileTimeError
 mixin_illegal_constructor_test/14: MissingCompileTimeError
@@ -2393,7 +2306,6 @@
 mixin_illegal_static_access_test/02: MissingCompileTimeError
 mixin_illegal_super_use_test: Skip # Issues 24478 and 23773
 mixin_illegal_superclass_test: Skip # Issues 24478 and 23773
-mixin_illegal_syntax_test/12: MissingCompileTimeError
 mixin_illegal_syntax_test/13: MissingCompileTimeError
 mixin_invalid_bound2_test/02: MissingCompileTimeError
 mixin_invalid_bound2_test/03: MissingCompileTimeError
@@ -2491,8 +2403,6 @@
 number_identifier_test/08: MissingCompileTimeError
 number_identifier_test/09: MissingCompileTimeError
 on_catch_malformed_type_test: MissingCompileTimeError
-operator1_negative_test: Fail
-operator2_negative_test: Fail
 optional_named_parameters_test/01: MissingCompileTimeError
 optional_named_parameters_test/02: Crash
 optional_named_parameters_test/02: MissingCompileTimeError
@@ -2634,7 +2544,6 @@
 regress_29784_test/02: MissingCompileTimeError
 regress_30339_test: CompileTimeError # Issue 31402 (Variable declaration)
 rewrite_implicit_this_test/01: MissingCompileTimeError
-runtime_type_function_test: RuntimeError
 setter4_test: MissingCompileTimeError # Issue 14736
 setter_override_test/01: MissingCompileTimeError
 setter_override_test/02: MissingCompileTimeError
@@ -2650,12 +2559,9 @@
 static_field_test/03: MissingCompileTimeError
 static_field_test/04: MissingCompileTimeError
 static_final_field2_test/01: MissingCompileTimeError
-static_final_field2_test/02: MissingCompileTimeError
 static_getter_no_setter1_test/01: MissingCompileTimeError
 static_getter_no_setter2_test/01: MissingCompileTimeError
 static_setter_get_test/01: MissingCompileTimeError
-static_top_level_test/00: MissingCompileTimeError
-static_top_level_test/04: MissingCompileTimeError
 string_interpolation_and_buffer_test: RuntimeError # Issue 31402 (Return and yield statements)
 string_interpolation_test/01: MissingCompileTimeError
 string_no_operator_test/01: MissingCompileTimeError
@@ -2695,53 +2601,13 @@
 switch_case_test/02: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 switch_fallthru_test/01: MissingCompileTimeError
 symbol_literal_test/01: MissingCompileTimeError
-sync_generator2_test/41: MissingCompileTimeError
-sync_generator2_test/52: MissingCompileTimeError
 syntax_test/00: MissingCompileTimeError
-syntax_test/02: MissingCompileTimeError
-syntax_test/03: MissingCompileTimeError
-syntax_test/04: MissingCompileTimeError
-syntax_test/05: MissingCompileTimeError
-syntax_test/06: MissingCompileTimeError
-syntax_test/07: MissingCompileTimeError
-syntax_test/08: MissingCompileTimeError
-syntax_test/09: MissingCompileTimeError
-syntax_test/10: MissingCompileTimeError
-syntax_test/11: MissingCompileTimeError
-syntax_test/13: MissingCompileTimeError
-syntax_test/14: MissingCompileTimeError
-syntax_test/15: MissingCompileTimeError
-syntax_test/16: MissingCompileTimeError
-syntax_test/17: MissingCompileTimeError
-syntax_test/18: MissingCompileTimeError
-syntax_test/19: MissingCompileTimeError
-syntax_test/20: MissingCompileTimeError
-syntax_test/21: MissingCompileTimeError
-syntax_test/22: MissingCompileTimeError
-syntax_test/23: MissingCompileTimeError
-syntax_test/24: MissingCompileTimeError
-syntax_test/25: MissingCompileTimeError
-syntax_test/26: MissingCompileTimeError
-syntax_test/27: MissingCompileTimeError
 syntax_test/28: MissingCompileTimeError
 syntax_test/29: MissingCompileTimeError
 syntax_test/30: MissingCompileTimeError
 syntax_test/31: MissingCompileTimeError
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
-syntax_test/35: MissingCompileTimeError
-syntax_test/36: MissingCompileTimeError
-syntax_test/37: MissingCompileTimeError
-syntax_test/38: MissingCompileTimeError
-syntax_test/39: MissingCompileTimeError
-syntax_test/40: MissingCompileTimeError
-syntax_test/41: MissingCompileTimeError
-syntax_test/42: MissingCompileTimeError
-syntax_test/43: MissingCompileTimeError
-syntax_test/44: MissingCompileTimeError
-syntax_test/45: MissingCompileTimeError
-syntax_test/46: MissingCompileTimeError
-syntax_test/48: MissingCompileTimeError
 top_level_getter_no_setter1_test: MissingCompileTimeError
 top_level_getter_no_setter2_test: MissingCompileTimeError
 transitive_private_library_access_test: MissingCompileTimeError
@@ -3104,10 +2970,6 @@
 const_constructor2_test/22: MissingCompileTimeError
 const_constructor2_test/24: MissingCompileTimeError
 const_init2_test/02: MissingCompileTimeError
-covariance_type_parameter_test/01: RuntimeError
-covariance_type_parameter_test/02: RuntimeError
-covariance_type_parameter_test/03: RuntimeError
-covariance_type_parameter_test/none: RuntimeError
 default_factory2_test/01: Fail
 factory_redirection_test/08: Fail
 factory_redirection_test/09: Fail
@@ -3166,14 +3028,10 @@
 covariance_field_test/03: RuntimeError
 covariance_field_test/04: RuntimeError
 covariance_field_test/05: RuntimeError
-covariance_type_parameter_test/01: RuntimeError
-covariance_type_parameter_test/02: RuntimeError
-covariance_type_parameter_test/03: RuntimeError
 covariant_override/runtime_check_test: RuntimeError
 deferred_constraints_type_annotation_test/type_annotation1: Crash # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_constraints_type_annotation_test/type_annotation_generic1: Crash # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_constraints_type_annotation_test/type_annotation_generic4: Crash # KernelVM bug: Deferred loading kernel issue 28335.
-generic_field_mixin6_test/none: RuntimeError
 implicit_downcast_during_assignment_test: RuntimeError
 implicit_downcast_during_combiner_test: RuntimeError
 implicit_downcast_during_compound_assignment_test: RuntimeError
diff --git a/tests/language_2/language_2_precompiled.status b/tests/language_2/language_2_precompiled.status
index 47518e4..7af15f2 100644
--- a/tests/language_2/language_2_precompiled.status
+++ b/tests/language_2/language_2_precompiled.status
@@ -953,6 +953,9 @@
 if_null_assignment_static_test/28: MissingCompileTimeError
 if_null_assignment_static_test/35: MissingCompileTimeError
 if_null_assignment_static_test/42: MissingCompileTimeError
+implicit_downcast_during_for_in_iterable_test: RuntimeError
+implicit_downcast_during_function_literal_arrow_test: RuntimeError
+implicit_downcast_during_function_literal_return_test: RuntimeError
 implicit_downcast_during_yield_star_test: RuntimeError
 implicit_downcast_during_yield_test: RuntimeError
 list_literal4_test/03: MissingCompileTimeError
@@ -1025,6 +1028,7 @@
 implicit_downcast_during_factory_constructor_invocation_test: RuntimeError
 implicit_downcast_during_field_declaration_test: RuntimeError
 implicit_downcast_during_for_condition_test: RuntimeError
+implicit_downcast_during_for_in_element_test: RuntimeError
 implicit_downcast_during_for_initializer_expression_test: RuntimeError
 implicit_downcast_during_for_initializer_var_test: RuntimeError
 implicit_downcast_during_if_null_assignment_test: RuntimeError
diff --git a/tests/language_2/language_2_vm.status b/tests/language_2/language_2_vm.status
index 68768bd2..ab80d49 100644
--- a/tests/language_2/language_2_vm.status
+++ b/tests/language_2/language_2_vm.status
@@ -334,6 +334,9 @@
 if_null_assignment_static_test/41: MissingCompileTimeError
 if_null_precedence_test/06: MissingCompileTimeError
 if_null_precedence_test/07: MissingCompileTimeError
+implicit_downcast_during_for_in_iterable_test: RuntimeError
+implicit_downcast_during_function_literal_arrow_test: RuntimeError
+implicit_downcast_during_function_literal_return_test: RuntimeError
 implicit_downcast_during_yield_star_test: RuntimeError
 implicit_downcast_during_yield_test: RuntimeError
 implicit_this_test/01: MissingCompileTimeError
@@ -796,6 +799,7 @@
 
 [ ($runtime == vm && $compiler != dartk) || ($runtime == dart_precompiled && $compiler != dartkp) ]
 built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Error only in strong mode
+int64_literal_test/*: Skip # This is testing Dart 2.0 int64 semantics.
 
 [ $runtime == vm && $compiler != dartk ]
 async_congruence_top_level_test: RuntimeError
@@ -990,6 +994,7 @@
 implicit_downcast_during_constructor_invocation_test: RuntimeError
 implicit_downcast_during_factory_constructor_invocation_test: RuntimeError
 implicit_downcast_during_field_declaration_test: RuntimeError
+implicit_downcast_during_for_in_element_test: RuntimeError
 implicit_downcast_during_indexed_assignment_test: RuntimeError
 implicit_downcast_during_indexed_compound_assignment_test: RuntimeError
 implicit_downcast_during_indexed_get_test: RuntimeError
@@ -1207,3 +1212,6 @@
 type_promotion_functions_test/07: MissingCompileTimeError
 type_promotion_functions_test/08: MissingCompileTimeError
 type_promotion_functions_test/10: MissingCompileTimeError
+
+[ $runtime == vm && $mode == release && $arch == ia32 ]
+deep_nesting1_negative_test: Crash, Pass # Issue 31496
diff --git a/tests/language_2/regress_31279_test.dart b/tests/language_2/regress_31279_test.dart
new file mode 100644
index 0000000..f61023c
--- /dev/null
+++ b/tests/language_2/regress_31279_test.dart
@@ -0,0 +1,23 @@
+// 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.
+
+abstract class Base {
+  void update(void Function(Iterable) updates);
+  void update2(void updates(Iterable iterable));
+}
+
+class CovariantParsingIssue implements Base {
+  void update(covariant void Function(List) updates) {}
+  void update2(covariant void updates(List list)) {}
+}
+
+void VoidParsingIssue() {
+  List<void Function(int)> functions = [(int i) => print(i + 1)];
+  functions[0](42);
+}
+
+void main() {
+  new CovariantParsingIssue();
+  VoidParsingIssue();
+}
\ No newline at end of file
diff --git a/tests/lib_2/isolate/spawn_generic_test.dart b/tests/lib_2/isolate/spawn_generic_test.dart
new file mode 100644
index 0000000..203f855
--- /dev/null
+++ b/tests/lib_2/isolate/spawn_generic_test.dart
@@ -0,0 +1,60 @@
+// 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.
+
+// Check that Isolate.spawn is generic.
+library spawn_generic;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+void isomain(num args) {
+  print(args);
+  // All is well. No throwing.
+}
+
+int _count = 0;
+void enter() {
+  asyncStart();
+  _count++;
+}
+
+bool exit() {
+  asyncEnd();
+  return --_count == 0;
+}
+
+main() {
+  var remotePort = new RawReceivePort();
+  remotePort.handler = (m) {
+    if (m == null) {
+      if (exit()) remotePort.close();
+    } else {
+      List list = m;
+      throw new AsyncError(m[0], new StackTrace.fromString(m[1]));
+    }
+  };
+  var port = remotePort.sendPort;
+
+  // Explicit type works.
+  enter();
+  Isolate.spawn<int>(isomain, 42, onExit: port, onError: port);
+  enter();
+  Isolate.spawn<num>(isomain, 42, onExit: port, onError: port);
+  enter();
+  Isolate.spawn<num>(isomain, 1.2, onExit: port, onError: port);
+  enter();
+  Isolate.spawn<double>(isomain, 1.2, onExit: port, onError: port);
+  enter();
+  Isolate.spawn<int>(isomain, null, onExit: port, onError: port);
+
+  // Inference gets it right.
+  enter();
+  Isolate.spawn(isomain, 42, onExit: port, onError: port);
+  enter();
+  Isolate.spawn(isomain, 1.2, onExit: port, onError: port);
+  enter();
+  Isolate.spawn(isomain, null, onExit: port, onError: port);
+}
diff --git a/tests/lib_2/lib_2_kernel.status b/tests/lib_2/lib_2_kernel.status
index 5ce0f56..151aef4 100644
--- a/tests/lib_2/lib_2_kernel.status
+++ b/tests/lib_2/lib_2_kernel.status
@@ -56,7 +56,6 @@
 async/zone_run_unary_test: RuntimeError # Issue 31402 (Variable declaration)
 convert/streamed_conversion_json_utf8_decode_test: DartkCompileTimeError
 convert/streamed_conversion_json_utf8_decode_test: Pass, Slow # Infrequent timeouts.
-convert/streamed_conversion_utf8_encode_test: RuntimeError # Issue 31402 (Invocation arguments)
 html/*: DartkCompileTimeError
 html/*: SkipByDesign # dart:html not supported on VM.
 isolate/compile_time_error_test/01: MissingCompileTimeError
@@ -272,41 +271,17 @@
 typed_data/int32x4_static_test/02: Pass # Issue 31402 (Invocation arguments)
 
 [ $compiler == dartk && $strong ]
-async/async_await_zones_test: RuntimeError
-async/catch_errors12_test: Timeout
-async/catch_errors13_test: Timeout
-async/catch_errors14_test: Timeout
-async/catch_errors15_test: Timeout
-async/catch_errors17_test: Timeout
-async/catch_errors18_test: Timeout
-async/catch_errors19_test: Timeout
-async/catch_errors20_test: Timeout
-async/catch_errors21_test: Timeout
-async/catch_errors22_test: RuntimeError
-async/catch_errors23_test: Timeout
-async/catch_errors24_test: Timeout
-async/catch_errors25_test: Timeout
-async/catch_errors26_test: Timeout
-async/catch_errors27_test: Timeout
-async/catch_errors28_test: Timeout
-async/catch_errors3_test: RuntimeError
-async/catch_errors7_test: Timeout
-async/catch_errors8_test: Timeout
 async/future_test/01: RuntimeError
 async/future_test/none: RuntimeError
-async/run_zoned7_test: RuntimeError
-async/run_zoned8_test: Timeout
 async/slow_consumer2_test: RuntimeError
 async/slow_consumer_test: RuntimeError
 async/stream_controller_async_test: RuntimeError
 async/stream_distinct_test: RuntimeError
-async/stream_event_transformed_test: RuntimeError
 async/stream_first_where_test: RuntimeError
 async/stream_from_iterable_test: RuntimeError
 async/stream_iterator_test: RuntimeError
 async/stream_join_test: RuntimeError
 async/stream_last_where_test: RuntimeError
-async/stream_listen_zone_test: RuntimeError
 async/stream_periodic2_test: RuntimeError
 async/stream_periodic3_test: RuntimeError
 async/stream_periodic4_test: RuntimeError
@@ -321,15 +296,10 @@
 async/stream_timeout_test: RuntimeError
 async/stream_transform_test: RuntimeError
 async/stream_transformation_broadcast_test: RuntimeError
-async/stream_zones_test: Timeout
 async/timer_cancel2_test: RuntimeError
 async/timer_cancel_test: RuntimeError
 async/timer_isActive_test: RuntimeError
 async/timer_repeat_test: RuntimeError
-async/zone_create_periodic_timer_test: RuntimeError
-async/zone_debug_test: RuntimeError
-async/zone_empty_description2_test: RuntimeError
-async/zone_error_callback_test: RuntimeError
 async/zone_run_unary_test: RuntimeError
 convert/chunked_conversion_json_decode1_test: RuntimeError
 convert/json_chunk_test: RuntimeError
@@ -338,7 +308,6 @@
 convert/json_utf8_chunk_test: RuntimeError
 convert/streamed_conversion_json_encode1_test: RuntimeError
 convert/streamed_conversion_json_utf8_encode_test: RuntimeError
-isolate/compile_time_error_test/none: RuntimeError
 isolate/count_test: Timeout
 isolate/cross_isolate_message_test: RuntimeError
 isolate/illegal_msg_function_test: RuntimeError
@@ -363,19 +332,15 @@
 isolate/mint_maker_test: RuntimeError
 isolate/nested_spawn2_test: RuntimeError
 isolate/nested_spawn_test: Timeout
-isolate/ondone_test: RuntimeError
 isolate/ping_pause_test: RuntimeError
 isolate/raw_port_test: RuntimeError
 isolate/request_reply_test: Timeout
-isolate/simple_message_test/none: RuntimeError
 isolate/spawn_function_test: Timeout
-isolate/spawn_uri_missing_from_isolate_test: RuntimeError
 isolate/spawn_uri_multi_test/none: RuntimeError
 isolate/spawn_uri_nested_vm_test: RuntimeError
 isolate/spawn_uri_test: RuntimeError
 isolate/spawn_uri_vm_test: RuntimeError
 isolate/stacktrace_message_test: RuntimeError
-isolate/start_paused_test: RuntimeError
 isolate/static_function_test: Timeout
 isolate/timer_isolate_test: RuntimeError
 isolate/typed_message_test: RuntimeError
@@ -427,7 +392,6 @@
 mirrors/regress_16321_test/none: Crash
 mirrors/regress_19731_test: RuntimeError
 mirrors/return_type_test: RuntimeError
-mirrors/spawn_function_root_library_test: RuntimeError
 mirrors/top_level_accessors_test/01: MissingCompileTimeError
 mirrors/type_argument_is_type_variable_test: RuntimeError
 mirrors/typearguments_mirror_test: RuntimeError
diff --git a/tests/lib_2/mirrors/spawn_function_root_library_test.dart b/tests/lib_2/mirrors/spawn_function_root_library_test.dart
index 158704e..5f06c62 100644
--- a/tests/lib_2/mirrors/spawn_function_root_library_test.dart
+++ b/tests/lib_2/mirrors/spawn_function_root_library_test.dart
@@ -16,7 +16,7 @@
 }
 
 main() {
-  var port;
+  RawReceivePort port;
   port = new RawReceivePort((String childRootUri) {
     LibraryMirror root = currentMirrorSystem().isolate.rootLibrary;
     Expect.isNotNull(root);
diff --git a/third_party/tcmalloc/BUILD.gn b/third_party/tcmalloc/BUILD.gn
index 42073e2..5ffcb89 100644
--- a/third_party/tcmalloc/BUILD.gn
+++ b/third_party/tcmalloc/BUILD.gn
@@ -9,6 +9,7 @@
   cflags = [
     "-Wall",
     "-Wextra",
+    "-Wno-format",
     "-Wno-missing-field-initializers",
     "-Wno-sign-compare",
     "-Wno-type-limits",
@@ -49,7 +50,10 @@
 }
 
 source_set("dynamic_annotations") {
-  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs -= [
+    "//build/config/compiler:chromium_code",
+    "//build/config/compiler:clang_stackrealign",
+  ]
   configs += [ ":internal_config" ]
 
   include_dirs = [
@@ -65,7 +69,10 @@
 }
 
 source_set("tcmalloc") {
-  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs -= [
+    "//build/config/compiler:chromium_code",
+    "//build/config/compiler:clang_stackrealign",
+  ]
   configs += [ ":internal_config" ]
 
   public_configs = [ ":link_config" ]
diff --git a/tools/VERSION b/tools/VERSION
index 9a62a3b..ecb40bd 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 0
 PATCH 0
-PRERELEASE 9
+PRERELEASE 10
 PRERELEASE_PATCH 0
diff --git a/tools/bots/try_benchmarks.sh b/tools/bots/try_benchmarks.sh
index 4c9a826..bb824e0 100755
--- a/tools/bots/try_benchmarks.sh
+++ b/tools/bots/try_benchmarks.sh
@@ -419,6 +419,7 @@
     out/ReleaseX64/dart --background-compilation=false pkg/front_end/tool/incremental_perf.dart.appjit --target=vm --mode=legacy --sdk-summary=out/ReleaseX64/vm_platform.dill --sdk-library-specification=sdk/lib/libraries.json pkg/front_end/benchmarks/ikg/hello.dart pkg/front_end/benchmarks/ikg/hello.edits.json
     out/ReleaseX64/dart --background-compilation=false pkg/front_end/tool/incremental_perf.dart.appjit --target=vm --implementation=minimal --sdk-summary=out/ReleaseX64/vm_platform_strong.dill --sdk-library-specification=sdk/lib/libraries.json pkg/front_end/benchmarks/ikg/hello.dart pkg/front_end/benchmarks/ikg/hello.edits.json
     out/ReleaseX64/dart --background-compilation=false pkg/front_end/tool/incremental_perf.dart.appjit --target=vm --mode=legacy --implementation=minimal --sdk-summary=out/ReleaseX64/vm_platform.dill --sdk-library-specification=sdk/lib/libraries.json pkg/front_end/benchmarks/ikg/hello.dart pkg/front_end/benchmarks/ikg/hello.edits.json
+    out/ReleaseX64/dart --packages=.packages pkg/kernel/test/binary_bench.dart --golem AstFromBinaryLazy out/ReleaseX64/vm_platform.dill
     cd ..
     rm -rf tmp
   else
diff --git a/tools/bots/try_test.dart b/tools/bots/try_test.dart
new file mode 100644
index 0000000..3185e2d
--- /dev/null
+++ b/tools/bots/try_test.dart
@@ -0,0 +1,108 @@
+import 'dart:io';
+
+enum Platform { linux, win, mac }
+enum BuildType { compile, existing, none }
+
+void main(List<String> args) {
+  print("This tool will help to generate a custom try build and run, that one "
+      "can use for testing on different platforms.");
+  print("");
+
+  Platform builderPlatform = Platform.values[getIntegerStepInput(
+          "Choose platform: (1) Linux, (2) Windows or (3) Mac") -
+      1];
+
+  BuildType buildType =
+      BuildType.values[getIntegerStepInput("Do you want to: \n"
+              "\t(1) Make a new build on the platform.\n"
+              "\t(2) Use an existing build by using a file-set hash.\n"
+              "\t(3) No build.") -
+          1];
+
+  String buildArgs = null;
+  if (buildType == BuildType.compile) {
+    buildArgs = getStepInput("Give the arguments to build.py, seperate by "
+        "' '");
+  } else if (buildType == BuildType.existing) {
+    buildArgs = getStepInput("Input the fileset hash");
+  }
+
+  var testCommands = <TestCommand>[];
+  var testCommandString = getStepInput("Write a command to execute. Use ' ' to "
+      "separate arguments. If you only wish to build, just press <Enter>");
+  while (testCommandString.isNotEmpty) {
+    var testCommandRepeat = getIntegerStepInput("How many times would you like "
+        "the command '${testCommandString} to be invoked?");
+    testCommands.add(new TestCommand(testCommandString, testCommandRepeat));
+    testCommandString = getStepInput("Write an additional command to execute. "
+        "Use ' ' to separate arguments. If no additional commands should be run"
+        ", press <Enter>");
+  }
+
+  print("Run the following command in a branch with a CL that you would like to"
+      " test:");
+  int commandIndex = 1;
+  var allTestCommands = testCommands
+      .expand((testCommand) => testCommand.toTryCommand(commandIndex++));
+  print("git try cl -b ${getBuilderName(builderPlatform)} "
+      "${getBuildProperties(buildType, buildArgs)}"
+      "${allTestCommands.join(' ')}");
+}
+
+String getBuilderName(Platform builderPlatform) {
+  switch (builderPlatform) {
+    case Platform.linux:
+      return "dart-linux-test-try";
+    case Platform.win:
+      return "dart-win-test-try";
+    case Platform.mac:
+      return "dart-mac-test-try";
+  }
+  return "dart-linux-test-try";
+}
+
+String getBuildProperties(BuildType buildType, String buildArgs) {
+  switch (buildType) {
+    case BuildType.compile:
+      return "-p try_build_args='\"$buildArgs\"' ";
+    case BuildType.existing:
+      return "-p parent_fileset='\"$buildArgs\"' ";
+    case BuildType.none:
+      return "";
+  }
+  return "";
+}
+
+class TestCommand {
+  final String command;
+  final int repeat;
+
+  TestCommand(this.command, this.repeat);
+
+  List<String> toTryCommand(int index) {
+    String commandSuffix = index.toString().padLeft(2, "0");
+    return [
+      "-p try_cmd_$commandSuffix='\"$command\"'",
+      "-p try_cmd_${commandSuffix}_repeat='$repeat'"
+    ];
+  }
+}
+
+String getStepInput(String information) {
+  print("$information:");
+  var input = stdin.readLineSync();
+  print("");
+  return input;
+}
+
+int getIntegerStepInput(String information) {
+  print("$information:");
+  var input = stdin.readLineSync();
+  var value = int.parse(input, onError: (source) => null);
+  if (value == null) {
+    print("Input could not be parsed as an integer.");
+    return getIntegerStepInput(information);
+  }
+  print("");
+  return value;
+}
diff --git a/tools/dom/src/CssRectangle.dart b/tools/dom/src/CssRectangle.dart
index 90a433f..b7967ec 100644
--- a/tools/dom/src/CssRectangle.dart
+++ b/tools/dom/src/CssRectangle.dart
@@ -28,7 +28,8 @@
    */
   set height(dynamic newHeight) {
     if (newHeight is Dimension) {
-      if (newHeight.value < 0) newHeight = new Dimension.px(0);
+      Dimension newHeightAsDimension = newHeight;
+      if (newHeightAsDimension.value < 0) newHeight = new Dimension.px(0);
       _element.style.height = newHeight.toString();
     } else if (newHeight is num) {
       if (newHeight < 0) newHeight = 0;
@@ -48,7 +49,8 @@
    */
   set width(dynamic newWidth) {
     if (newWidth is Dimension) {
-      if (newWidth.value < 0) newWidth = new Dimension.px(0);
+      Dimension newWidthAsDimension = newWidth;
+      if (newWidthAsDimension.value < 0) newWidth = new Dimension.px(0);
       _element.style.width = newWidth.toString();
     } else if (newWidth is num) {
       if (newWidth < 0) newWidth = 0;
diff --git a/tools/dom/templates/html/impl/impl_HTMLSelectElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLSelectElement.darttemplate
index 2d39452..0cb5c45 100644
--- a/tools/dom/templates/html/impl/impl_HTMLSelectElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLSelectElement.darttemplate
@@ -10,7 +10,7 @@
   // Override default options, since IE returns SelectElement itself and it
   // does not operate as a List.
   List<OptionElement> get options {
-    var options = this.querySelectorAll<OptionElement>('option');
+    dynamic options = this.querySelectorAll<OptionElement>('option');
     return new UnmodifiableListView(options.toList());
   }
 
diff --git a/tools/gardening/bin/create_shard_data.dart b/tools/gardening/bin/create_shard_data.dart
index 6fd0312..179e11b 100644
--- a/tools/gardening/bin/create_shard_data.dart
+++ b/tools/gardening/bin/create_shard_data.dart
@@ -95,7 +95,7 @@
 //
 // ----- Generated by create_shard_groups.dart, do not edit! -----
 
-part of gardening.shard2group;
+library gardening.shard_data;
 
 const Map<String, List<String>> shardGroups = const {""");
   for (int i = 0; i < groupCount; i++) {
diff --git a/tools/gardening/bin/results.dart b/tools/gardening/bin/results.dart
index ca3ce8b..02f2ee7 100644
--- a/tools/gardening/bin/results.dart
+++ b/tools/gardening/bin/results.dart
@@ -7,13 +7,11 @@
 import 'results_get.dart';
 import 'results_list.dart';
 import 'results_status.dart';
-import 'results_test_matrix.dart';
 
 var runner = new CommandRunner("results", "Results from tests.")
   ..addCommand(new GetCommand())
   ..addCommand(new ListCommand())
-  ..addCommand(new StatusCommand())
-  ..addCommand(new TestMatrixCommand());
+  ..addCommand(new StatusCommand());
 
 main(List<String> args) {
   runner.run(args).catchError((error) {
diff --git a/tools/gardening/bin/results_get.dart b/tools/gardening/bin/results_get.dart
index 1d73a3f..7ac6c98 100644
--- a/tools/gardening/bin/results_get.dart
+++ b/tools/gardening/bin/results_get.dart
@@ -14,8 +14,6 @@
 import 'package:gardening/src/console_table.dart';
 import 'package:gardening/src/results/result_models.dart' as models;
 import 'package:gardening/src/results/util.dart';
-import 'package:gardening/src/logdog.dart';
-import 'package:gardening/src/logdog_rpc.dart';
 import 'package:gardening/src/buildbucket.dart';
 import 'package:gardening/src/extended_printer.dart';
 
@@ -157,7 +155,6 @@
     addSubcommand(new GetTestsWithResultCommand());
     addSubcommand(new GetTestsWithResultAndExpectationCommand());
     addSubcommand(new GetTestFailuresCommand());
-    addSubcommand(new GetTestMatrix());
   }
 }
 
@@ -301,78 +298,6 @@
   }
 }
 
-/// [GetTestMatrix] responds to 'test-matrix' and returns all configurations for
-/// a client.
-class GetTestMatrix extends Command {
-  @override
-  String get description => "Gets all invokations of test.py for each builder "
-      "and output the result in csv form.";
-
-  @override
-  String get name => "test-matrix";
-
-  GetTestMatrix() {
-    argParser.addFlag('scripting',
-        defaultsTo: false, abbr: 's', negatable: false);
-  }
-
-  Future run() async {
-    // We first get all the last builds for all the bots. That will give us the
-    // name as well.
-    var logger = createLogger();
-    var createCache = createCacheFunction(logger);
-    var cache = createCache(duration: new Duration(days: 1));
-    var shardRegExp = new RegExp(r"(.*)-(\d)-(\d)-");
-    var stepRegExp =
-        new RegExp(r"read_results_of_(.*)\/0\/logs\/result\.log\/0");
-
-    print("builder;step;mode;arch;compiler;runtime;checked;strong;hostChecked;"
-        "minified;csp;system;vmOptions;useSdk;builderTag;fastStartup;"
-        "dart2JsWithKernel;enableAsserts;hotReload;"
-        "hotReloadRollback;previewDart2;selectors");
-
-    var logdog = new LogdogRpc();
-    var testResultService = new TestResultService(logger, createCache);
-
-    return latestBuildNumbers(cache).then((buildNumbers) {
-      // Get steps for this builder and build number.
-      // Shards run in the same configuration.
-      return buildNumbers.keys.where((builder) {
-        var shardMatch = shardRegExp.firstMatch(builder);
-        return shardMatch == null || shardMatch.group(2) == 1;
-      }).map((builder) {
-        int buildNumber = buildNumbers[builder];
-        return logdog
-            .query(
-                BUILDER_PROJECT,
-                "bb/client.dart/$builder/${buildNumber}/+"
-                "/recipes/steps/**/result.log/0",
-                cache)
-            .then((builderStreams) {
-          return Future.wait(builderStreams.map((stream) {
-            return testResultService.fromLogdog(stream.path).then((testResult) {
-              var configuration = testResult.configurations["conf1"];
-              var shardMatch = shardRegExp.firstMatch(builder);
-              String builderName =
-                  shardMatch != null ? shardMatch.group(1) : builder;
-              String step = stepRegExp
-                  .firstMatch(stream.path)
-                  .group(1)
-                  .replaceAll("_", " ");
-              print("$builderName;$step;${configuration.toCsvString()}");
-            }).catchError(
-                errorLogger(logger, "Could not get log from $stream", null));
-          }));
-        }).catchError(errorLogger(
-                logger,
-                "Could not download steps for $builder with "
-                "build number $buildNumber",
-                new List<LogdogStream>()));
-      });
-    }).then(Future.wait);
-  }
-}
-
 /// Prints a test result.
 void printFailingTestExpectationResults(List<TestExpectationResult> results) {
   List<TestExpectationResult> failing =
diff --git a/tools/gardening/bin/results_test_matrix.dart b/tools/gardening/bin/results_test_matrix.dart
deleted file mode 100644
index b054cb5..0000000
--- a/tools/gardening/bin/results_test_matrix.dart
+++ /dev/null
@@ -1,105 +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:args/command_runner.dart';
-import 'package:gardening/src/buildbucket.dart';
-import 'package:gardening/src/luci.dart';
-import 'package:gardening/src/luci_api.dart';
-import 'package:gardening/src/results/result_models.dart' as models;
-import 'package:gardening/src/results/test_result_service.dart';
-import 'package:gardening/src/util.dart';
-
-/// [TestMatrixCommand] handles when given command 'test-matrix'.
-class TestMatrixCommand extends Command {
-  String get usage => "Run the command by results.dart test-matrix <master>.";
-
-  @override
-  String get description => "Generates a test-matrix for configurations run "
-      "for a master.";
-
-  @override
-  String get name => "test-matrix";
-
-  TestMatrixCommand() {
-    argParser.addFlag("json",
-        help: "Set if tool should generate root test-matrix.json",
-        negatable: false);
-  }
-
-  Future run() async {
-    if (argResults.rest.length == 0) {
-      print("Too few arguments given.");
-      print(usage);
-      return;
-    }
-
-    if (argResults.rest.length > 1) {
-      print("Too many arguments given.");
-      print(usage);
-      return;
-    }
-
-    String client = argResults.rest.first;
-    bool isBuildBucket = client == "luci.dart.try";
-    var logger = createLogger();
-    var cache = createCacheFunction(logger);
-
-    Iterable<String> builders;
-    if (isBuildBucket) {
-      Iterable<Builder> luciBuilders = await fetchBuilders(client);
-      if (luciBuilders != null) {
-        builders = (await fetchBuilders(client)).map((builder) => builder.name);
-      }
-    } else {
-      var api = new LuciApi();
-      builders = await getAllBuilders(api, client, cache());
-    }
-
-    if (builders == null) {
-      print("Could not find any builders for $client. "
-          "Make sure the name is correct");
-      return;
-    }
-
-    TestResultService service = new TestResultService(logger, cache);
-
-    Iterable<BuilderWithSteps> buildersWithSteps =
-        await Future.wait(builders.map((builder) async {
-      Iterable<BuildStepTestResult> steps;
-      if (isBuildBucket) {
-        steps = await stepsFromBuildBucket(service, builder);
-      }
-      return new BuilderWithSteps(builder, steps);
-    }));
-
-    buildersWithSteps.forEach((buildWithStep) {
-      print(buildWithStep.name);
-      buildWithStep.steps.forEach((step) {
-        print("\t${step.name}");
-      });
-    });
-  }
-
-  /// Gets the last build from [builder] and find all steps with [TestResult]
-  /// for that build.
-  Future<Iterable<BuildStepTestResult>> stepsFromBuildBucket(
-      TestResultService service, String builder) async {
-    Iterable<BuildBucketBuild> builds = await buildsFromBuilder(builder);
-    if (builds == null || builds.length == 0) {
-      return [];
-    }
-    String prefix = "buildbucket/cr-buildbucket.appspot.com/${builds.first.id}";
-    return await service.fromPrefix("dart", prefix, true);
-  }
-}
-
-/// Class to hold information about a builder and specific test steps that
-/// generates result logs.
-class BuilderWithSteps {
-  final String name;
-  final Iterable<BuildStepTestResult> steps;
-  BuilderWithSteps(this.name, this.steps);
-}
diff --git a/tools/gardening/lib/src/client.dart b/tools/gardening/lib/src/client.dart
index 539a39c..d2e1cdb 100644
--- a/tools/gardening/lib/src/client.dart
+++ b/tools/gardening/lib/src/client.dart
@@ -112,8 +112,9 @@
         buildNumberIndex =
             getBuildNumberIndex(absoluteBuildNumbers, buildUri.buildNumber);
         if (buildNumberIndex == null) return null;
+        buildNumberIndex++;
         if (buildNumberIndex >= absoluteBuildNumbers.length) return null;
-        int buildNumber = absoluteBuildNumbers[buildNumberIndex + 1];
+        int buildNumber = absoluteBuildNumbers[buildNumberIndex];
         log('Skip build number ${buildUri.buildNumber} -> ${buildNumber}');
         buildUri = buildUri.withBuildNumber(buildNumber);
       }
diff --git a/tools/gardening/lib/src/shard_data.dart b/tools/gardening/lib/src/shard_data.dart
index be3ae0a..1d1f6f4 100644
--- a/tools/gardening/lib/src/shard_data.dart
+++ b/tools/gardening/lib/src/shard_data.dart
@@ -36,6 +36,20 @@
     'vm-kernel-linux-debug-x64-be',
     'vm-kernel-mac-release-x64-be',
     'vm-kernel-mac-debug-x64-be',
+    'vm-kernel-precomp-linux-release-x64-1-6-be',
+    'vm-kernel-precomp-linux-release-x64-2-6-be',
+    'vm-kernel-precomp-linux-release-x64-3-6-be',
+    'vm-kernel-precomp-linux-release-x64-4-6-be',
+    'vm-kernel-precomp-linux-release-x64-5-6-be',
+    'vm-kernel-precomp-linux-release-x64-6-6-be',
+    'vm-kernel-precomp-linux-debug-x64-1-8-be',
+    'vm-kernel-precomp-linux-debug-x64-2-8-be',
+    'vm-kernel-precomp-linux-debug-x64-3-8-be',
+    'vm-kernel-precomp-linux-debug-x64-4-8-be',
+    'vm-kernel-precomp-linux-debug-x64-5-8-be',
+    'vm-kernel-precomp-linux-debug-x64-6-8-be',
+    'vm-kernel-precomp-linux-debug-x64-7-8-be',
+    'vm-kernel-precomp-linux-debug-x64-8-8-be',
   ],
   'vm-misc': const <String>[
     'vm-win-debug-ia32-russian-be',
@@ -51,7 +65,9 @@
     'vm-precomp-android-release-1-3-be',
     'vm-precomp-android-release-2-3-be',
     'vm-precomp-android-release-3-3-be',
-    'precomp-linux-debug-x64-be',
+    'precomp-linux-debug-x64-1-3-be',
+    'precomp-linux-debug-x64-2-3-be',
+    'precomp-linux-debug-x64-3-3-be',
     'precomp-linux-product-x64-be',
     'vm-precomp-win-simarm64-1-4-be',
     'vm-precomp-win-simarm64-2-4-be',
@@ -105,10 +121,10 @@
     'dart-sdk-windows-be',
     'dart-sdk-mac-be',
   ],
-  'dartium-inc': const <String>[
-    'dartium-linux-x64-inc-be',
-    'dartium-mac-x64-inc-be',
-    'dartium-win-ia32-inc-be',
+  'ddc': const <String>[
+    'ddc-linux-release-be',
+    'ddc-mac-release-be',
+    'ddc-win-release-be',
   ],
   'dart2js-linux': const <String>[
     'dart2js-linux-chromeff-1-4-be',
@@ -146,11 +162,6 @@
     'pkg-linux-release-be',
     'pkg-win7-release-be',
   ],
-  'dartium-full': const <String>[
-    'dartium-linux-x64-be',
-    'dartium-mac-x64-be',
-    'dartium-win-ia32-be',
-  ],
   'misc': const <String>[
     'versionchecker-linux-be',
     'debianpackage-linux-be',
@@ -184,6 +195,20 @@
     'vm-kernel-linux-debug-x64-dev',
     'vm-kernel-mac-release-x64-dev',
     'vm-kernel-mac-debug-x64-dev',
+    'vm-kernel-precomp-linux-release-x64-1-6-dev',
+    'vm-kernel-precomp-linux-release-x64-2-6-dev',
+    'vm-kernel-precomp-linux-release-x64-3-6-dev',
+    'vm-kernel-precomp-linux-release-x64-4-6-dev',
+    'vm-kernel-precomp-linux-release-x64-5-6-dev',
+    'vm-kernel-precomp-linux-release-x64-6-6-dev',
+    'vm-kernel-precomp-linux-debug-x64-1-8-dev',
+    'vm-kernel-precomp-linux-debug-x64-2-8-dev',
+    'vm-kernel-precomp-linux-debug-x64-3-8-dev',
+    'vm-kernel-precomp-linux-debug-x64-4-8-dev',
+    'vm-kernel-precomp-linux-debug-x64-5-8-dev',
+    'vm-kernel-precomp-linux-debug-x64-6-8-dev',
+    'vm-kernel-precomp-linux-debug-x64-7-8-dev',
+    'vm-kernel-precomp-linux-debug-x64-8-8-dev',
   ],
   'vm-misc-dev': const <String>[
     'vm-win-debug-ia32-russian-dev',
@@ -199,7 +224,9 @@
     'vm-precomp-android-release-1-3-dev',
     'vm-precomp-android-release-2-3-dev',
     'vm-precomp-android-release-3-3-dev',
-    'precomp-linux-debug-x64-dev',
+    'precomp-linux-debug-x64-1-3-dev',
+    'precomp-linux-debug-x64-2-3-dev',
+    'precomp-linux-debug-x64-3-3-dev',
     'precomp-linux-product-x64-dev',
     'vm-precomp-win-simarm64-1-4-dev',
     'vm-precomp-win-simarm64-2-4-dev',
@@ -253,6 +280,11 @@
     'dart-sdk-windows-dev',
     'dart-sdk-mac-dev',
   ],
+  'ddc-dev': const <String>[
+    'ddc-linux-release-dev',
+    'ddc-mac-release-dev',
+    'ddc-win-release-dev',
+  ],
   'dart2js-linux-dev': const <String>[
     'dart2js-linux-chromeff-1-4-dev',
     'dart2js-linux-chromeff-2-4-dev',
@@ -289,11 +321,6 @@
     'pkg-linux-release-dev',
     'pkg-win7-release-dev',
   ],
-  'dartium-full-dev': const <String>[
-    'dartium-linux-x64-dev',
-    'dartium-mac-x64-dev',
-    'dartium-win-ia32-dev',
-  ],
   'misc-dev': const <String>[
     'versionchecker-linux-dev',
     'debianpackage-linux-dev',
@@ -308,6 +335,20 @@
     'vm-kernel-linux-debug-x64-stable',
     'vm-kernel-mac-release-x64-stable',
     'vm-kernel-mac-debug-x64-stable',
+    'vm-kernel-precomp-linux-release-x64-1-6-stable',
+    'vm-kernel-precomp-linux-release-x64-2-6-stable',
+    'vm-kernel-precomp-linux-release-x64-3-6-stable',
+    'vm-kernel-precomp-linux-release-x64-4-6-stable',
+    'vm-kernel-precomp-linux-release-x64-5-6-stable',
+    'vm-kernel-precomp-linux-release-x64-6-6-stable',
+    'vm-kernel-precomp-linux-debug-x64-1-8-stable',
+    'vm-kernel-precomp-linux-debug-x64-2-8-stable',
+    'vm-kernel-precomp-linux-debug-x64-3-8-stable',
+    'vm-kernel-precomp-linux-debug-x64-4-8-stable',
+    'vm-kernel-precomp-linux-debug-x64-5-8-stable',
+    'vm-kernel-precomp-linux-debug-x64-6-8-stable',
+    'vm-kernel-precomp-linux-debug-x64-7-8-stable',
+    'vm-kernel-precomp-linux-debug-x64-8-8-stable',
   ],
   'vm-misc-stable': const <String>[
     'vm-win-debug-ia32-russian-stable',
@@ -323,7 +364,9 @@
     'vm-precomp-android-release-1-3-stable',
     'vm-precomp-android-release-2-3-stable',
     'vm-precomp-android-release-3-3-stable',
-    'precomp-linux-debug-x64-stable',
+    'precomp-linux-debug-x64-1-3-stable',
+    'precomp-linux-debug-x64-2-3-stable',
+    'precomp-linux-debug-x64-3-3-stable',
     'precomp-linux-product-x64-stable',
     'vm-precomp-win-simarm64-1-4-stable',
     'vm-precomp-win-simarm64-2-4-stable',
@@ -396,6 +439,11 @@
     'dart-sdk-windows-stable',
     'dart-sdk-mac-stable',
   ],
+  'ddc-stable': const <String>[
+    'ddc-linux-release-stable',
+    'ddc-mac-release-stable',
+    'ddc-win-release-stable',
+  ],
   'dart2js-linux-stable': const <String>[
     'dart2js-linux-chromeff-1-4-stable',
     'dart2js-linux-chromeff-2-4-stable',
@@ -432,11 +480,6 @@
     'pkg-linux-release-stable',
     'pkg-win7-release-stable',
   ],
-  'dartium-full-stable': const <String>[
-    'dartium-linux-x64-stable',
-    'dartium-mac-x64-stable',
-    'dartium-win-ia32-stable',
-  ],
   'misc-stable': const <String>[
     'versionchecker-linux-stable',
     'debianpackage-linux-stable',
diff --git a/tools/gn.py b/tools/gn.py
index fe22ba4..c9bb463 100755
--- a/tools/gn.py
+++ b/tools/gn.py
@@ -144,15 +144,30 @@
 def DontUseClang(args, target_os, host_cpu, target_cpu):
   # We don't have clang on Windows.
   return (target_os == 'win'
-         # TODO(zra): Experiment with using clang for the arm cross-builds.
-         or (target_os == 'linux' and target_cpu.startswith('arm'))
-         # TODO(zra): Only use clang when a sanitizer build is specified until
-         # clang bugs in tcmalloc inline assembly for ia32 are fixed.
+         # TODO(zra): After we roll our clang toolchain to pick up the fix for
+         # https://reviews.llvm.org/D34691 we should be able to use clang for
+         # arm as well.
          or (target_os == 'linux'
-             and host_cpu == 'x86'
+             and target_cpu.startswith('arm')
+             and target_cpu != 'arm64'
              and not UseSanitizer(args)))
 
 
+def UseWheezySysroot(args, gn_args):
+  # Don't try to use a Linux sysroot if we aren't on Linux.
+  if gn_args['target_os'] != 'linux':
+    return False
+  # Use the wheezy sysroot if explicitly asked to do so.
+  if args.wheezy:
+    return True
+  # Don't use the wheezy sysroot if we're given another sysroot.
+  if TargetSysroot(args):
+    return False
+  # The clang toolchain we pull from Fuchsia doesn't have arm and arm64
+  # sysroots, so use the wheezy/jesse ones.
+  return gn_args['is_clang'] and gn_args['target_cpu'].startswith('arm')
+
+
 def ToGnArgs(args, mode, arch, target_os):
   gn_args = {}
 
@@ -165,7 +180,6 @@
   gn_args['host_cpu'] = HostCpuForArch(arch)
   gn_args['target_cpu'] = TargetCpuForArch(arch, target_os)
   gn_args['dart_target_arch'] = DartTargetCpuForArch(arch)
-  crossbuild = gn_args['target_cpu'] != gn_args['host_cpu']
 
   if arch != HostCpuForArch(arch):
     # Training an app-jit snapshot under a simulator is slow. Use script
@@ -228,7 +242,7 @@
   gn_args['dart_stripped_binary'] = 'exe.stripped/dart'
 
   # Setup the user-defined sysroot.
-  if gn_args['target_os'] == 'linux' and args.wheezy and not crossbuild:
+  if UseWheezySysroot(args, gn_args):
     gn_args['dart_use_wheezy_sysroot'] = True
   else:
     sysroot = TargetSysroot(args)
diff --git a/tools/migration/bin/run_tests.dart b/tools/migration/bin/run_tests.dart
index a626997..8dd7cd7f 100644
--- a/tools/migration/bin/run_tests.dart
+++ b/tools/migration/bin/run_tests.dart
@@ -16,6 +16,7 @@
 const appJit = "--compiler=app_jit";
 const dart2js = "--compiler=dart2js";
 const dartdevc = "--compiler=dartdevc";
+const dartdevk = "--compiler=dartdevk";
 const noCompiler = "--compiler=none";
 const precompiler = "--compiler=precompiler";
 const analyzer = "--compiler=dart2analyzer";
@@ -90,6 +91,8 @@
   "dart2js-jsshell": [dart2js, jsshell, fastStartup, useSdk, dart2jsBatch],
   // TODO(rnystrom): Is it worth running dart2js on Firefox too?
   "dartdevc": [dartdevc, chrome, useSdk, strong],
+  "dartdevc-kernel": [dartdevk, chrome, checked, useSdk, strong],
+  "dartdevc-kernel-noruntime": [dartdevk, noRuntime, checked, useSdk, strong],
 };
 
 /// A subset of the configurations that run quickly and give a decent amount of
diff --git a/tools/patch_sdk.dart b/tools/patch_sdk.dart
index 12eb14a..b3f9bf7 100644
--- a/tools/patch_sdk.dart
+++ b/tools/patch_sdk.dart
@@ -16,7 +16,7 @@
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:path/path.dart' as path;
 
-import 'package:front_end/front_end.dart';
+import 'package:front_end/src/api_prototype/front_end.dart';
 
 import 'package:front_end/src/base/processed_options.dart';
 import 'package:front_end/src/kernel_generator_impl.dart';
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index 3ce00b7..0c84922 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -601,10 +601,8 @@
       '--platform=${buildDir}/vm_platform_strong.dill',
       '--strong-mode',
       '--fatal=errors',
+      '--target-options=strong-aot',
     ];
-    if (_enableStrongModeOptimizations) {
-      args.add('--target-options=strong-aot');
-    }
     args.add('-o');
     args.add(tempKernelFile(tempDir));
     args.addAll(arguments.where((name) => name.endsWith('.dart')));
diff --git a/tools/testing/dart/summary_report.dart b/tools/testing/dart/summary_report.dart
index 2c9e935..a87f174 100644
--- a/tools/testing/dart/summary_report.dart
+++ b/tools/testing/dart/summary_report.dart
@@ -21,7 +21,6 @@
   int _fail = 0;
   int _crash = 0;
   int _timeout = 0;
-  int _compileErrorSkip = 0;
 
   int get total => _total;
 
@@ -98,11 +97,6 @@
     }
   }
 
-  void addCompileErrorSkipTest() {
-    _total++;
-    _compileErrorSkip++;
-  }
-
   Map<String, int> get values => {
         'total': _total,
         'skippedOther': skippedOther,
@@ -114,7 +108,6 @@
         'fail': _fail,
         'crash': _crash,
         'timeout': _timeout,
-        'compileErrorSkip': _compileErrorSkip,
         'bogus': bogus
       };
 
@@ -127,7 +120,6 @@
  * $_fail tests are expected to fail that we should fix
  * $_crash tests are expected to crash that we should fix
  * $_timeout tests are allowed to timeout
- * $_compileErrorSkip tests are skipped on browsers due to compile-time error
  * $bogus could not be categorized or are in multiple categories
 """;
 
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index c41a6f9..bcdd9d0 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -261,6 +261,15 @@
       [TestInformation info]) {
     var displayName = '$suiteName/$testName';
 
+    // If the test is not going to be run at all, then a RuntimeError will
+    // never occur. Instead, treat that as Pass.
+    if (configuration.runtime == Runtime.none &&
+        expectations.contains(Expectation.runtimeError)) {
+      expectations = expectations.toSet();
+      expectations.remove(Expectation.runtimeError);
+      if (expectations.isEmpty) expectations.add(Expectation.pass);
+    }
+
     var negative = info != null ? isNegative(info) : false;
     var testCase = new TestCase(
         displayName, commands, configuration, expectations,
@@ -296,14 +305,6 @@
     }
 
     // Update Summary report
-    if (testCase.expectCompileError &&
-        configuration.runtime.isBrowser &&
-        configuration.compilerConfiguration.hasCompiler) {
-      if (configuration.printReport) {
-        summaryReport.addCompileErrorSkipTest();
-      }
-      return;
-    }
     if (configuration.printReport) {
       summaryReport.add(testCase);
     }
diff --git a/utils/front_end/BUILD.gn b/utils/front_end/BUILD.gn
new file mode 100644
index 0000000..29b2df4
--- /dev/null
+++ b/utils/front_end/BUILD.gn
@@ -0,0 +1,10 @@
+# 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("../application_snapshot.gni")
+
+application_snapshot("front_end_worker") {
+  main_dart = "../../pkg/front_end/tool/bazel/worker.dart"
+  training_args = [ "--help" ]
+}