VERSION 0.2.1.0

svn merge -r 13839:14147 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

git-svn-id: http://dart.googlecode.com/svn/trunk@14152 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/README.dart-sdk b/README.dart-sdk
index 498b754..9a967c0 100644
--- a/README.dart-sdk
+++ b/README.dart-sdk
@@ -17,6 +17,6 @@
 pkg/             Additional packages that are shipped outside of the Dart 
                  runtime. More information is available at api.dartlang.org.
 
-revision         dart.googlecode.com SVN revision number used to build this SDK.
+version          The version number of the SDK (ex. 0.1.2.0_r1234).
 
 util/            Support files for dart_analyzer and pub.
diff --git a/client/tools/buildbot_annotated_steps.py b/client/tools/buildbot_annotated_steps.py
old mode 100644
new mode 100755
index 91bf125..a07d666
--- a/client/tools/buildbot_annotated_steps.py
+++ b/client/tools/buildbot_annotated_steps.py
@@ -96,7 +96,7 @@
 
   toolsBuildScript = os.path.join('.', 'editor', 'build', 'build.py')
 
-  # TODO(devoncarew): should we move this into GetBuildInfo()?  
+  # TODO(devoncarew): should we move this into GetBuildInfo()?
   # get the latest changed revision from the current repository sub-tree
   version = GetLatestChangedRevision()
 
@@ -120,18 +120,19 @@
 
   return subprocess.call(cmds, env=local_env)
 
-def ProcessCompiler(name):
+def ProcessBot(name, target):
   '''
-  build and test the compiler
+  Build and test the named bot target (compiler, android, pub). We look for
+  the supporting script in tools/bots/ to run the tests and build.
   '''
-  print 'ProcessCompiler'
+  print 'Process%s' % target.capitalize()
   has_shell=False
-  if 'windows' in name:
+  if '-win' in name:
     # In Windows we need to run in the shell, so that we have all the
     # environment variables available.
     has_shell=True
   return subprocess.call([sys.executable,
-      os.path.join('utils', 'compiler', 'buildbot.py')],
+      os.path.join('tools', 'bots', target + '.py')],
       env=os.environ, shell=has_shell)
 
 def FixJavaHome():
@@ -159,15 +160,15 @@
 def RunDart(scriptPath):
   if sys.platform == 'darwin':
     pipe = subprocess.Popen(
-          ['./tools/testing/bin/macos/dart', scriptPath], 
+          ['./tools/testing/bin/macos/dart', scriptPath],
           stdout=subprocess.PIPE, stderr=subprocess.PIPE)
   elif os.name == 'posix':
     pipe = subprocess.Popen(
-          ['./tools/testing/bin/linux/dart', scriptPath], 
+          ['./tools/testing/bin/linux/dart', scriptPath],
           stdout=subprocess.PIPE, stderr=subprocess.PIPE)
   else:
     pipe = subprocess.Popen(
-          ['tools\\testing\\bin\\windows\\dart.exe', scriptPath], 
+          ['tools\\testing\\bin\\windows\\dart.exe', scriptPath],
           stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
 
   output = pipe.communicate()
@@ -208,11 +209,15 @@
     # TODO (danrubel) Fix dart-editor builds so that we can call FixJavaHome() before the build
     FixJavaHome()
     status = ProcessTools('release', name, version)
+  elif name.startswith('pub-'):
+    status = ProcessBot(name, 'pub')
+  elif name.startswith('vm-android'):
+    status = ProcessBot(name, 'android')
   else:
     # The buildbot will set a BUILDBOT_JAVA_HOME relative to the dart
     # root directory, set JAVA_HOME based on that.
     FixJavaHome()
-    status = ProcessCompiler(name)
+    status = ProcessBot(name, 'compiler')
 
   if status:
     print '@@@STEP_FAILURE@@@'
diff --git a/compiler/java/com/google/dart/compiler/DartCompiler.java b/compiler/java/com/google/dart/compiler/DartCompiler.java
index 751c7f6..e82153e 100644
--- a/compiler/java/com/google/dart/compiler/DartCompiler.java
+++ b/compiler/java/com/google/dart/compiler/DartCompiler.java
@@ -649,9 +649,15 @@
         boolean hasIO = false;
         boolean hasHTML = false;
         for (LibraryNode importNode : lib.getImportPaths()) {
+          String libSpec = importNode.getText();
           String prefix = importNode.getPrefix();
-          hasIO |= "dart:io".equals(importNode.getText());
-          hasHTML |= "dart:html".equals(importNode.getText());
+          hasIO |= "dart:io".equals(libSpec);
+          hasHTML |= "dart:html".equals(libSpec);
+          // "dart:mirrors" are not done yet
+          if ("dart:mirrors".equals(libSpec)) {
+            context.onError(new DartCompilationError(importNode,
+                DartCompilerErrorCode.MIRRORS_NOT_FULLY_IMPLEMENTED));
+          }
           // validate import prefix
           if (DartParser.PSEUDO_KEYWORDS_SET.contains(prefix)) {
             context.onError(new DartCompilationError(importNode.getSourceInfo(),
@@ -1364,20 +1370,20 @@
   }
 
   private static void showVersion(CompilerOptions options) {
-    String revision = getSdkRevision(options);
-    if (revision == null) {
-      revision = "<unkown>";
+    String version = getSdkVersion(options);
+    if (version == null) {
+      version = "<unkown>";
     }
-    System.out.println("dart_analyzer version " + revision);
+    System.out.println("dart_analyzer version " + version);
   }
 
   /**
    * @return the numeric revision of SDK, may be <code>null</code> if cannot find.
    */
-  private static String getSdkRevision(CompilerOptions options) {
+  private static String getSdkVersion(CompilerOptions options) {
     try {
       File sdkPath = options.getDartSdkPath();
-      File revisionFile = new File(sdkPath, "revision");
+      File revisionFile = new File(sdkPath, "version");
       if (revisionFile.exists() && revisionFile.isFile()) {
         BufferedReader br = new BufferedReader(new FileReader(revisionFile));
         try {
diff --git a/compiler/java/com/google/dart/compiler/DartCompilerErrorCode.java b/compiler/java/com/google/dart/compiler/DartCompilerErrorCode.java
index 5fa71d3..0744833 100644
--- a/compiler/java/com/google/dart/compiler/DartCompilerErrorCode.java
+++ b/compiler/java/com/google/dart/compiler/DartCompilerErrorCode.java
@@ -19,6 +19,7 @@
   ILLEGAL_DIRECTIVES_IN_SOURCED_UNIT("This part was included by %s via a "
       + "part directive, so cannot itself contain directives other than a part of directive"),
   IO("Input/Output error: %s"),
+  MIRRORS_NOT_FULLY_IMPLEMENTED(ErrorSeverity.WARNING, "dart:mirrors is not fully implemented yet"),
   MISSING_LIBRARY_DIRECTIVE("a library which is imported is missing a library directive: %s"),
   MISSING_SOURCE("Cannot find referenced source: %s"),
   UNIT_WAS_ALREADY_INCLUDED("Unit '%s' was already included");
diff --git a/compiler/java/com/google/dart/compiler/ast/LibraryExport.java b/compiler/java/com/google/dart/compiler/ast/LibraryExport.java
index ef1d689..81104f5 100644
--- a/compiler/java/com/google/dart/compiler/ast/LibraryExport.java
+++ b/compiler/java/com/google/dart/compiler/ast/LibraryExport.java
@@ -4,7 +4,6 @@
 
 package com.google.dart.compiler.ast;
 
-import com.google.common.base.Objects;
 import com.google.common.collect.Sets;
 
 import java.util.List;
@@ -24,21 +23,6 @@
     this.hideNames = createCombinatorsSet(combinators, false);
   }
 
-  @Override
-  public int hashCode() {
-    return Objects.hashCode(library);
-  }
-
-  @Override
-  public boolean equals(Object obj) {
-    if (obj instanceof LibraryExport) {
-      LibraryExport other = (LibraryExport) obj;
-      return Objects.equal(library, other.library) && Objects.equal(showNames, other.showNames)
-          && Objects.equal(hideNames, other.hideNames);
-    }
-    return false;
-  }
-
   public LibraryUnit getLibrary() {
     return library;
   }
diff --git a/compiler/java/com/google/dart/compiler/ast/LibraryImport.java b/compiler/java/com/google/dart/compiler/ast/LibraryImport.java
index 986fb3c..300093d 100644
--- a/compiler/java/com/google/dart/compiler/ast/LibraryImport.java
+++ b/compiler/java/com/google/dart/compiler/ast/LibraryImport.java
@@ -4,7 +4,6 @@
 
 package com.google.dart.compiler.ast;
 
-import com.google.common.base.Objects;
 import com.google.common.collect.Sets;
 
 import java.util.List;
@@ -26,21 +25,6 @@
     this.hideNames = createCombinatorsSet(combinators, false);
   }
 
-  @Override
-  public int hashCode() {
-    return Objects.hashCode(prefix, library);
-  }
-
-  @Override
-  public boolean equals(Object obj) {
-    if (obj instanceof LibraryImport) {
-      LibraryImport other = (LibraryImport) obj;
-      return Objects.equal(library, other.library) && Objects.equal(prefix, other.prefix)
-          && Objects.equal(showNames, other.showNames) && Objects.equal(hideNames, other.hideNames);
-    }
-    return false;
-  }
-
   public LibraryUnit getLibrary() {
     return library;
   }
@@ -48,7 +32,7 @@
   public String getPrefix() {
     return prefix;
   }
-  
+
   public boolean isVisible(String name) {
     if (hideNames.contains(name)) {
       return false;
diff --git a/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java b/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java
index f5b0d3f..d6e2a31 100644
--- a/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java
+++ b/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java
@@ -164,7 +164,13 @@
   }
 
   public boolean hasImport(LibraryUnit unit) {
-    return imports.contains(new LibraryImport(unit, null, ImmutableList.<ImportCombinator> of()));
+    for (LibraryImport libraryImport : imports) {
+      if (libraryImport.getPrefix() == null && Objects.equal(libraryImport.getLibrary(), unit)) {
+        return true;
+      }
+    }
+    return false;
+//    return imports.contains(new LibraryImport(unit, null, ImmutableList.<ImportCombinator> of()));
   }
 
   public DartExpression getEntryPoint() {
diff --git a/compiler/java/com/google/dart/compiler/parser/AbstractParser.java b/compiler/java/com/google/dart/compiler/parser/AbstractParser.java
index a5c13b0..273313b 100644
--- a/compiler/java/com/google/dart/compiler/parser/AbstractParser.java
+++ b/compiler/java/com/google/dart/compiler/parser/AbstractParser.java
@@ -21,6 +21,7 @@
  */
 abstract class AbstractParser {
 
+  private final TerminalAnnotationsCache terminalAnnotationsCache = new TerminalAnnotationsCache();
   protected final ParserContext ctx;
   private int lastErrorPosition = Integer.MIN_VALUE;
 
@@ -33,10 +34,10 @@
   }
 
   private static class TerminalAnnotationsCache {
-    private static Map<String, Class<?>> classes;
-    private static Map<String, List<Token>> methods;
+    private Map<String, Class<?>> classes;
+    private Map<String, List<Token>> methods;
 
-    private static void init(StackTraceElement[] stackTrace) {
+    private void init(StackTraceElement[] stackTrace) {
       if (classes == null) {
         classes = Maps.newHashMap();
         methods = Maps.newHashMap();
@@ -72,7 +73,7 @@
       }
     }
 
-    public static Set<Token> terminalsForStack(StackTraceElement[] stackTrace) {
+    public Set<Token> terminalsForStack(StackTraceElement[] stackTrace) {
       Set<Token> results = Sets.newHashSet();
       for (StackTraceElement frame: stackTrace) {
         List<Token> found = methods.get(frame.getClassName() + "." + frame.getMethodName());
@@ -94,9 +95,9 @@
   protected Set<Token> collectTerminalAnnotations() {
     StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
     // Get methods for every class and associated Terminals annotations & stick them in a hash
-    TerminalAnnotationsCache.init(stackTrace);
+    terminalAnnotationsCache.init(stackTrace);
     // Create the set of terminals to return
-    return TerminalAnnotationsCache.terminalsForStack(stackTrace);
+    return terminalAnnotationsCache.terminalsForStack(stackTrace);
   }
 
   /**
diff --git a/compiler/java/com/google/dart/compiler/parser/DartParser.java b/compiler/java/com/google/dart/compiler/parser/DartParser.java
index c32c0d6..4b51d39 100644
--- a/compiler/java/com/google/dart/compiler/parser/DartParser.java
+++ b/compiler/java/com/google/dart/compiler/parser/DartParser.java
@@ -143,11 +143,7 @@
   private static final String ABSTRACT_KEYWORD = "abstract";
   private static final String AS_KEYWORD = "as";
   private static final String CALL_KEYWORD = "call";
-  public static final String DYNAMIC_KEYWORD = "dynamic";
-  // TODO(scheglov) remove "Dynamic" support after
-  // http://code.google.com/p/dart/issues/detail?id=5117
-  // http://code.google.com/p/dart/issues/detail?id=5118
-  public static final String DYNAMIC_KEYWORD_DEPRECATED = "Dynamic";
+  private static final String DYNAMIC_KEYWORD = "dynamic";
   private static final String EXPORT_KEYWORD = "export";
   private static final String EXTERNAL_KEYWORD = "external";
   private static final String FACTORY_KEYWORD = "factory";
@@ -175,7 +171,6 @@
     ABSTRACT_KEYWORD,
     AS_KEYWORD,
     DYNAMIC_KEYWORD,
-    DYNAMIC_KEYWORD_DEPRECATED,
     EXPORT_KEYWORD,
     EXTERNAL_KEYWORD,
     FACTORY_KEYWORD,
@@ -4878,6 +4873,7 @@
 
     List<DartSwitchMember> members = new ArrayList<DartSwitchMember>();
     if (peek(0) != Token.LBRACE) {
+      reportUnexpectedToken(position(), Token.LBRACE, peek(0));
       return done(new DartSwitchStatement(expr, members));
     }
     boolean foundOpenBrace = expect(Token.LBRACE);
diff --git a/compiler/java/com/google/dart/compiler/resolver/CompileTimeConstantAnalyzer.java b/compiler/java/com/google/dart/compiler/resolver/CompileTimeConstantAnalyzer.java
index 48e501d..4c15ab1 100644
--- a/compiler/java/com/google/dart/compiler/resolver/CompileTimeConstantAnalyzer.java
+++ b/compiler/java/com/google/dart/compiler/resolver/CompileTimeConstantAnalyzer.java
@@ -486,7 +486,7 @@
 
     @Override
     public Void visitPropertyAccess(DartPropertyAccess x) {
-      switch (ElementKind.of(x.getQualifier().getElement())) {
+      switch (ElementKind.of(x.getRealTarget().getElement())) {
         case CLASS:
         case LIBRARY_PREFIX:
         case LIBRARY:
diff --git a/compiler/java/com/google/dart/compiler/resolver/DynamicElementImplementation.java b/compiler/java/com/google/dart/compiler/resolver/DynamicElementImplementation.java
index fb2bd2b..33332a9 100644
--- a/compiler/java/com/google/dart/compiler/resolver/DynamicElementImplementation.java
+++ b/compiler/java/com/google/dart/compiler/resolver/DynamicElementImplementation.java
@@ -23,7 +23,7 @@
 class DynamicElementImplementation extends AbstractNodeElement implements DynamicElement, MethodNodeElement {
 
   private DynamicElementImplementation() {
-    super(null, "Dynamic");
+    super(null, "dynamic");
   }
 
   @Override
@@ -162,7 +162,7 @@
   
   @Override
   public String getDeclarationNameWithTypeParameters() {
-    return "Dynamic";
+    return "dynamic";
   }
 
   @Override
diff --git a/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java b/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java
index a38c424..8b6f83c 100644
--- a/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java
+++ b/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java
@@ -213,8 +213,7 @@
     // Built-in identifier can not be used as a type annotation.
     if (identifier instanceof DartIdentifier) {
       String name = ((DartIdentifier) identifier).getName();
-      if (DartParser.PSEUDO_KEYWORDS_SET.contains(name) && !DartParser.DYNAMIC_KEYWORD.equals(name)
-          && !DartParser.DYNAMIC_KEYWORD_DEPRECATED.equals(name)) {
+      if (DartParser.PSEUDO_KEYWORDS_SET.contains(name) && !"dynamic".equals(name)) {
         onError(identifier, ResolverErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, name);
         return Types.newDynamicType();
       }
@@ -258,10 +257,7 @@
         if (Elements.isIdentifierName(identifier, "void")) {
           return typeProvider.getVoidType();
         }
-        if (Elements.isIdentifierName(identifier, DartParser.DYNAMIC_KEYWORD)) {
-          return typeProvider.getDynamicType();
-        }
-        if (Elements.isIdentifierName(identifier, DartParser.DYNAMIC_KEYWORD_DEPRECATED)) {
+        if (Elements.isIdentifierName(identifier, "dynamic")) {
           return typeProvider.getDynamicType();
         }
         onError(identifier, errorCode, identifier);
diff --git a/compiler/java/com/google/dart/compiler/resolver/Resolver.java b/compiler/java/com/google/dart/compiler/resolver/Resolver.java
index 34d96b5..b95c726 100644
--- a/compiler/java/com/google/dart/compiler/resolver/Resolver.java
+++ b/compiler/java/com/google/dart/compiler/resolver/Resolver.java
@@ -2144,7 +2144,7 @@
           // fall through
         case 0:
           typeArgs.add(implicitKey);
-          DartTypeNode implicitValue = new DartTypeNode(new DartIdentifier("Dynamic"));
+          DartTypeNode implicitValue = new DartTypeNode(new DartIdentifier("dynamic"));
           typeArgs.add(implicitValue);
           break;
       }
diff --git a/compiler/java/com/google/dart/compiler/resolver/Scope.java b/compiler/java/com/google/dart/compiler/resolver/Scope.java
index 916d4b8..a20d7ee 100644
--- a/compiler/java/com/google/dart/compiler/resolver/Scope.java
+++ b/compiler/java/com/google/dart/compiler/resolver/Scope.java
@@ -101,14 +101,6 @@
     return false;
   }
   
-  public void markStateProgress() {
-    this.stateProgress = true;
-  }
-  
-  public boolean isStateProgress() {
-    return stateProgress;
-  }
-  
   public void markStateReady() {
     this.stateReady = true;
   }
diff --git a/compiler/java/com/google/dart/compiler/resolver/SupertypeResolver.java b/compiler/java/com/google/dart/compiler/resolver/SupertypeResolver.java
index 9d35c22..9481433 100644
--- a/compiler/java/com/google/dart/compiler/resolver/SupertypeResolver.java
+++ b/compiler/java/com/google/dart/compiler/resolver/SupertypeResolver.java
@@ -26,7 +26,7 @@
  */
 public class SupertypeResolver {
   private static final Set<String> BLACK_LISTED_TYPES = ImmutableSet.of(
-      "Dynamic",
+      "dynamic",
       "Function",
       "bool",
       "num",
diff --git a/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java b/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java
index 2a4e52b..3cb47c7 100644
--- a/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java
+++ b/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java
@@ -7,6 +7,7 @@
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import com.google.dart.compiler.DartCompilationError;
 import com.google.dart.compiler.DartCompilerContext;
 import com.google.dart.compiler.DartCompilerListener;
@@ -35,6 +36,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * Builds all class elements and types of a library. Once all libraries
@@ -63,18 +65,25 @@
    * libraries.
    */
   public void fillInLibraryScope(LibraryUnit library, DartCompilerListener listener) {
+    fillInLibraryScope(library, listener, Sets.newHashSet());
+  }
+    
+    /**
+     * Fill the scope for this library, using its own top-level elements and elements from imported
+     * libraries.
+     */
+  private void fillInLibraryScope(LibraryUnit library, DartCompilerListener listener,
+      Set<Object> processedObjects) {
     Scope importScope = library.getElement().getImportScope();
     Scope scope = library.getElement().getScope();
     
-    // We are processing this library now, or already done this. 
-    if (library.getElement().getScope().isStateProgress()
-        || library.getElement().getScope().isStateReady()) {
+    // We are done with this library. 
+    if (library.getElement().getScope().isStateReady()) {
       return;
     }
-    library.getElement().getScope().markStateProgress();
 
     // Fill "library" scope.
-    {
+    if (processedObjects.add(library)) {
       List<Element> exportedElements = Lists.newArrayList();
       {
         DartUnit selfUnit = library.getSelfDartUnit();
@@ -100,8 +109,12 @@
       }
     }
 
+    // Fill "import" scope.
     Map<String, LibraryPrefixElement> libraryPrefixElements = Maps.newHashMap();
     for (LibraryImport libraryImport : library.getImports()) {
+      if (!processedObjects.add(libraryImport)) {
+        continue;
+      }
       LibraryUnit lib = libraryImport.getLibrary();
       // Prepare scope for this import.
       Scope scopeForImport;
@@ -128,7 +141,7 @@
         }
       }
       // Prepare "lib" scope.
-      fillInLibraryScope(lib, listener);
+      fillInLibraryScope(lib, listener, processedObjects);
       // Fill "library" scope with element exported from "lib".
       for (Element element : lib.getElement().getExportedElements()) {
         String name = element.getName();
@@ -141,10 +154,14 @@
         }
       }
     }
+
     // Fill "library" export scope with re-exports.
     for (LibraryExport export : library.getExports()) {
+      if (!processedObjects.add(export)) {
+        continue;
+      }
       LibraryUnit lib = export.getLibrary();
-      fillInLibraryScope(lib, listener);
+      fillInLibraryScope(lib, listener, processedObjects);
       for (Element element : lib.getElement().getExportedElements()) {
         String name = element.getName();
         // re-export only in not defined locally
@@ -157,6 +174,7 @@
         }
       }
     }
+
     // Done.
     library.getElement().getScope().markStateReady();
   }
diff --git a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
index 8fad370..3ccd7e2 100644
--- a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
+++ b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
@@ -781,7 +781,7 @@
       }
 
       /**
-       * @return the {@link Type} which is both "a" and "b" types. May be "Dynamic" if "a" and "b"
+       * @return the {@link Type} which is both "a" and "b" types. May be "dynamic" if "a" and "b"
        *         don't form hierarchy.
        */
       Type getUnionType(Type a, Type b) {
diff --git a/compiler/java/com/google/dart/compiler/type/Types.java b/compiler/java/com/google/dart/compiler/type/Types.java
index 6250466..43d6813 100644
--- a/compiler/java/com/google/dart/compiler/type/Types.java
+++ b/compiler/java/com/google/dart/compiler/type/Types.java
@@ -72,7 +72,7 @@
   }
     
   public Type intersection(List<Type> types) {
-    // exclude Dynamic type
+    // exclude 'dynamic' type
     {
       List<Type> newTypes = Lists.newArrayList();
       for (Type type : types) {
diff --git a/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java b/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java
index 8f586e5..9b1c945 100644
--- a/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java
+++ b/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java
@@ -1123,6 +1123,115 @@
     assertTrue(errors.toString().contains("libB.TypeBB"));
   }
   
+  public void test_newLibrarySyntax_export2() throws Exception {
+    appSource.setContent(
+        "A.dart",
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler filler",
+            "library libA;",
+            "class SourceString {}",
+            ""));
+    appSource.setContent(
+        "B.dart",
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler filler",
+            "library libB;",
+            "import 'C.dart';",
+            "export 'A.dart' show SourceString;",
+            ""));
+    appSource.setContent(
+        "C.dart",
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler filler",
+            "library libC;",
+            "import 'B.dart';",
+            "foo() {",
+            "  SourceString s;",
+            "}",
+            ""));
+    appSource.setContent(
+        APP,
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler filler",
+            "library app;",
+            "import 'B.dart';",
+            ""));
+    compile();
+    assertErrors(errors);
+  }
+
+  public void test_newLibrarySyntax_export3() throws Exception {
+    appSource.setContent(
+        "A.dart",
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler filler",
+            "library libA;",
+            "class SourceString {}",
+            ""));
+    appSource.setContent(
+        "B.dart",
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler filler",
+            "library libB;",
+            "export 'C.dart';",
+            "export 'A.dart' show SourceString;",
+            ""));
+    appSource.setContent(
+        "C.dart",
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler filler",
+            "library libC;",
+            "import 'B.dart';",
+            "foo() {",
+            "  SourceString s;",
+            "}",
+            ""));
+    appSource.setContent(
+        APP,
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler filler",
+            "library app;",
+            "import 'B.dart';",
+            ""));
+    compile();
+    assertErrors(errors);
+  }
+  
+  public void test_newLibrarySyntax_export4() throws Exception {
+    appSource.setContent(
+        "p1.dart",
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler filler",
+            "library lib1;",
+            "export 'p3.dart';",
+            ""));
+    appSource.setContent(
+        "p2.dart",
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler filler",
+            "library lib2;",
+            "export 'p3.dart';",
+            ""));
+    appSource.setContent(
+        "p3.dart",
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler filler",
+            "library lib3;",
+            "class MyClass {}",
+            ""));
+    appSource.setContent(
+        APP,
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler filler",
+            "library app;",
+            "import 'p1.dart' hide MyClass;",
+            "import 'p2.dart';",
+            "MyClass topLevelField;",
+            ""));
+    compile();
+    assertErrors(errors);
+  }
+  
   public void test_newLibrarySyntax_export_hide() throws Exception {
     appSource.setContent(
         "A.dart",
@@ -1305,7 +1414,7 @@
             "library application;",
             "import 'A.dart' as abstract;",
             "import 'A.dart' as as;",
-            "import 'A.dart' as Dynamic;",
+            "import 'A.dart' as dynamic;",
             "import 'A.dart' as export;",
             "import 'A.dart' as external;",
             "import 'A.dart' as factory;",
@@ -1407,6 +1516,20 @@
     compile();
     assertErrors(errors);
   }
+  
+  /**
+   * <p>
+   * http://code.google.com/p/dart/issues/detail?id=6077
+   */
+  public void test_dartMirrors_notFullyImplemented() throws Exception {
+    appSource.setContent(
+        APP,
+        makeCode("// filler filler filler filler filler filler filler filler filler filler filler",
+            "import 'dart:mirrors';"));
+    // do compile, no errors expected
+    compile();
+    assertErrors(errors, errEx(DartCompilerErrorCode.MIRRORS_NOT_FULLY_IMPLEMENTED, 2, 1, 22));
+  }
 
   private void assertAppBuilt() {
     didWrite(APP, EXTENSION_DEPS);
diff --git a/compiler/javatests/com/google/dart/compiler/parser/NegativeParserTest.java b/compiler/javatests/com/google/dart/compiler/parser/NegativeParserTest.java
index f742650..f627314 100644
--- a/compiler/javatests/com/google/dart/compiler/parser/NegativeParserTest.java
+++ b/compiler/javatests/com/google/dart/compiler/parser/NegativeParserTest.java
@@ -823,7 +823,7 @@
             "// filler filler filler filler filler filler filler filler filler filler",
             "class abstract {}",
             "class as {}",
-            "class Dynamic {}",
+            "class dynamic {}",
             "class export {}",
             "class external {}",
             "class factory {}",
@@ -839,7 +839,7 @@
             ""),
             errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 2, 7, 8), // abstract
             errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 3, 7, 2), // as
-            errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 4, 7, 7), // Dynamic
+            errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 4, 7, 7), // dynamic
             errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 5, 7, 6), // export
             errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 6, 7, 8), // external
             errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 7, 7, 7), // factory
@@ -868,7 +868,7 @@
             "// filler filler filler filler filler filler filler filler filler filler",
             "class C01<abstract> {}",
             "class C02<as> {}",
-            "class C03<Dynamic> {}",
+            "class C03<dynamic> {}",
             "class C04<export> {}",
             "class C05<external> {}",
             "class C06<factory> {}",
@@ -884,7 +884,7 @@
             ""),
         errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 2, 11, 8), // abstract
         errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 3, 11, 2), // as
-        errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 4, 11, 7), // Dynamic
+        errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 4, 11, 7), // dynamic
         errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 5, 11, 6), // export
         errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 6, 11, 8), // external
         errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 7, 11, 7), // factory
@@ -913,7 +913,7 @@
             "// filler filler filler filler filler filler filler filler filler filler",
             "typedef abstract();",
             "typedef as();",
-            "typedef Dynamic();",
+            "typedef dynamic();",
             "typedef export();",
             "typedef external();",
             "typedef factory();",
@@ -929,7 +929,7 @@
             ""),
         errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 2, 9, 8), // abstract
         errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 3, 9, 2), // as
-        errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 4, 9, 7), // Dynamic
+        errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 4, 9, 7), // dynamic
         errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 5, 9, 6), // export
         errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 6, 9, 8), // external
         errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 7, 9, 7), // factory
diff --git a/compiler/javatests/com/google/dart/compiler/parser/StringBuffer.dart b/compiler/javatests/com/google/dart/compiler/parser/StringBuffer.dart
index 79faa29..8d247eb 100644
--- a/compiler/javatests/com/google/dart/compiler/parser/StringBuffer.dart
+++ b/compiler/javatests/com/google/dart/compiler/parser/StringBuffer.dart
@@ -49,7 +49,7 @@
    * Appends [str] to the buffer.
    */
   void append(String str) {
-    if (str === null || str.isEmpty()) return;
+    if (str === null || str.isEmpty) return;
     buffer_.add(str);
     length_ += str.length;
   }
diff --git a/compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java b/compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java
index 4b96e97..64474bd 100644
--- a/compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java
+++ b/compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java
@@ -64,6 +64,16 @@
     assertEquals("import ;\n", dir.toSource());
   }
 
+  public void test_switch_noLBrace() {
+    parseUnit("test.dart", Joiner.on("\n").join(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "main() {",
+        "  switch (0)",
+        "}",
+        ""),
+        ParserErrorCode.EXPECTED_TOKEN, 3, 12);
+  }
+
   public void test_getter() {
     parseUnit("getter.dart", Joiner.on("\n").join(
         "class G {",
diff --git a/compiler/javatests/com/google/dart/compiler/resolver/CompileTimeConstantTest.java b/compiler/javatests/com/google/dart/compiler/resolver/CompileTimeConstantTest.java
index 5b2d316..765bab7 100644
--- a/compiler/javatests/com/google/dart/compiler/resolver/CompileTimeConstantTest.java
+++ b/compiler/javatests/com/google/dart/compiler/resolver/CompileTimeConstantTest.java
@@ -247,6 +247,21 @@
             errEx(ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, 4, 21, 1));
   }
 
+  public void test_cascade() {
+    resolveAndTestCtConstExpectErrors(
+        Joiner.on("\n").join(
+            "// filler filler filler filler filler filler filler filler filler filler",
+            "main() {",
+            " var v;",
+            " const c = v..foo;",
+            "}",
+            "class Object {}",
+            "class int {}",
+            ""),
+        errEx(ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, 4, 12, 1),
+        errEx(ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, 4, 13, 5));
+  }
+
   public void test_stringInterpolation_referenceConstVar_String() {
     resolveAndTestCtConstExpectErrors(Joiner.on("\n").join(
         "// filler filler filler filler filler filler filler filler filler filler",
diff --git a/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java b/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java
index abf0f48..bba5949 100644
--- a/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java
+++ b/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java
@@ -898,18 +898,18 @@
     };
   }
 
-  public void test_blackListed_Dynamic() throws Exception {
+  public void test_blackListed_dynamic() throws Exception {
     checkSourceErrors(
         makeCode(
             "// filler filler filler filler filler filler filler filler filler filler",
-            "class A extends Dynamic {",
+            "class A extends dynamic {",
             "}",
-            "class B implements Dynamic {",
+            "class B implements dynamic {",
             "}"),
         errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 7),
         errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 7));
-    assertEquals("'Dynamic' can not be used as superclass", errors.get(0).getMessage());
-    assertEquals("'Dynamic' can not be used as superinterface", errors.get(1).getMessage());
+    assertEquals("'dynamic' can not be used as superclass", errors.get(0).getMessage());
+    assertEquals("'dynamic' can not be used as superinterface", errors.get(1).getMessage());
   }
 
   public void test_blackListed_Function() throws Exception {
@@ -1007,7 +1007,7 @@
   public void test_explicitDynamicTypeArgument() throws Exception {
     checkSourceErrors(makeCode(
         "// filler filler filler filler filler filler filler filler filler filler",
-        "class MyClass implements Map<Object, Dynamic> {",
+        "class MyClass implements Map<Object, dynamic> {",
         "}"));
   }
 
diff --git a/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java b/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java
index 3dbef86..9192064 100644
--- a/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java
+++ b/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java
@@ -1224,7 +1224,7 @@
     resolveAndTest(Joiner.on("\n").join(
         "class Object {}",
         "class int {}",
-        "typedef Dynamic F1<T>(Dynamic x, T y);",
+        "typedef dynamic F1<T>(dynamic x, T y);",
         "class MyClass {",
         "  main() {",
         "    F1<int> f1 = (Object o, int i) => null;",
diff --git a/compiler/javatests/com/google/dart/compiler/resolver/ResolverTestCase.java b/compiler/javatests/com/google/dart/compiler/resolver/ResolverTestCase.java
index 190d9e3..b5f4233 100644
--- a/compiler/javatests/com/google/dart/compiler/resolver/ResolverTestCase.java
+++ b/compiler/javatests/com/google/dart/compiler/resolver/ResolverTestCase.java
@@ -185,7 +185,7 @@
     private final ClassElement objectElement;
 
     {
-      ClassElement dynamicElement = Elements.classNamed("Dynamic");
+      ClassElement dynamicElement = Elements.classNamed("dynamic");
       dynamicType = Types.interfaceType(dynamicElement, Collections.<Type>emptyList());
       dynamicElement.setType(dynamicType);
 
diff --git a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
index 3bfd3fa..e532d26 100644
--- a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
+++ b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
@@ -863,7 +863,7 @@
                 "class A {",
                 "  void set foo(bool a) {}",
                 "  set bar(bool a) {}",
-                "  Dynamic set baz(bool a) {}",
+                "  dynamic set baz(bool a) {}",
                 "  bool set bob(bool a) {}",
                 "}"));
     assertErrors(
@@ -1212,7 +1212,7 @@
         "  assert('message');", // not 'bool'
         "  assert('null');", // not 'bool'
         "  assert(0);", // not 'bool'
-        "  assert(f() {});", // OK, Dynamic
+        "  assert(f() {});", // OK, dynamic
         "  assert(bool f() {});", // OK, '() -> bool'
         "  assert(Object f() {});", // OK, 'Object' compatible with 'bool'
         "  assert(String f() {});", // not '() -> bool', return type
@@ -1269,7 +1269,7 @@
         "// filler filler filler filler filler filler filler filler filler filler",
         "class A {",
         "  final double f;",
-        "  A.useDynamic(Dynamic this.f);",
+        "  A.useDynamic(dynamic this.f);",
         "  A.useNum(num this.f);",
         "  A.useString(String this.f);",
         "}",
@@ -1471,7 +1471,7 @@
             makeCode(
                 "// filler filler filler filler filler filler filler filler filler filler",
                 "int fA() {}",
-                "Dynamic fB() {}",
+                "dynamic fB() {}",
                 "void fC() {}",
                 "fD() {}",
                 ""));
@@ -1483,7 +1483,7 @@
     }
     {
       DartMethodDefinition fB = (DartMethodDefinition) unit.getTopLevelNodes().get(1);
-      assertEquals("Dynamic", fB.getElement().getReturnType().getElement().getName());
+      assertEquals("dynamic", fB.getElement().getReturnType().getElement().getName());
     }
     {
       DartMethodDefinition fC = (DartMethodDefinition) unit.getTopLevelNodes().get(2);
@@ -1491,7 +1491,7 @@
     }
     {
       DartMethodDefinition fD = (DartMethodDefinition) unit.getTopLevelNodes().get(3);
-      assertEquals("Dynamic", fD.getElement().getReturnType().getElement().getName());
+      assertEquals("dynamic", fD.getElement().getReturnType().getElement().getName());
     }
   }
 
@@ -2375,7 +2375,7 @@
   }
   
   /**
-   * Prefer specific type, not Dynamic type argument.
+   * Prefer specific type, not "dynamic" type argument.
    * <p>
    * http://code.google.com/p/dart/issues/detail?id=4792
    */
@@ -2436,7 +2436,7 @@
   }
 
   /**
-   * When we can not identify type of assigned value we should keep "Dynamic" as type of variable.
+   * When we can not identify type of assigned value we should keep "dynamic" as type of variable.
    */
   public void test_typesPropagation_assign_newUnknownType() throws Exception {
     analyzeLibrary(
@@ -2510,7 +2510,7 @@
         "  if (a is num) {",
         "    var a1 = a;",
         "  }",
-        "  if (a is Dynamic) {",
+        "  if (a is dynamic) {",
         "    var a2 = a;",
         "  }",
         "  if (b is int) {",
@@ -2525,7 +2525,7 @@
 
   /**
    * When single variable has conflicting type constraints, right now we don't try to unify them,
-   * instead we fall back to "Dynamic".
+   * instead we fall back to "dynamic".
    */
   public void test_typesPropagation_ifIsType_conflictingTypes() throws Exception {
     analyzeLibrary(
@@ -3464,7 +3464,7 @@
 
   /**
    * The spec in the section 10.28 says:
-   * "It is a compile-time error to use a built-in identifier other than Dynamic as a type annotation."
+   * "It is a compile-time error to use a built-in identifier other than dynamic as a type annotation."
    * <p>
    * http://code.google.com/p/dart/issues/detail?id=3307
    */
@@ -3474,7 +3474,7 @@
         "main() {",
         "  abstract   v01;",
         "  as         v02;",
-        "  Dynamic    v03;",
+        "  dynamic    v03;",
         "  export     v04;",
         "  external   v05;",
         "  factory    v06;",
@@ -3493,7 +3493,7 @@
         libraryResult.getErrors(),
         errEx(ResolverErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, 3, 3, 8),   // abstract
         errEx(ResolverErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, 4, 3, 2),   // as
-                                                                         // Dynamic
+                                                                         // dynamic
         errEx(ResolverErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, 6, 3, 6),   // export
         errEx(ResolverErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, 7, 3, 8),   // external
         errEx(ResolverErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, 8, 3, 7),   // factory
diff --git a/compiler/scripts/dart_analyzer.sh b/compiler/scripts/dart_analyzer.sh
index fc3c57e..8abaf52 100755
--- a/compiler/scripts/dart_analyzer.sh
+++ b/compiler/scripts/dart_analyzer.sh
@@ -57,13 +57,12 @@
 fi
 
 EXTRA_JVMARGS="-Xss2M "
-OS=`uname | tr [A-Z] [a-z]`
+OS=`uname | tr "[A-Z]" "[a-z]"`
 if [ "$OS" == "darwin" ] ; then
   # Bump up the heap on Mac VMs, some of which default to 128M or less.
-  # Users can specify DART_JVMARGS in the environment to override
-  # this setting. Force to 32 bit client vm. 64 bit and server VM make for 
-  # poor performance.
-  EXTRA_JVMARGS+=" -Xmx256M -client -d32 "
+  # Users can specify DART_JVMARGS in the environment to override this
+  # setting.
+  EXTRA_JVMARGS+=" -Xmx256M -client "
 else
   # On other architectures
   # -batch invocations will do better with a server vm
diff --git a/lib/compiler/implementation/closure.dart b/lib/compiler/implementation/closure.dart
index 090a8e9..23d5e9e 100644
--- a/lib/compiler/implementation/closure.dart
+++ b/lib/compiler/implementation/closure.dart
@@ -115,7 +115,7 @@
   ClosureScope(this.boxElement, this.capturedVariableMapping)
       : boxedLoopVariables = const <Element>[];
 
-  bool hasBoxedLoopVariables() => !boxedLoopVariables.isEmpty();
+  bool hasBoxedLoopVariables() => !boxedLoopVariables.isEmpty;
 }
 
 class ClosureClassMap {
@@ -231,7 +231,7 @@
       Map<Element, Element> freeVariableMapping = data.freeVariableMapping;
       // We get a copy of the keys and iterate over it, to avoid modifications
       // to the map while iterating over it.
-      freeVariableMapping.getKeys().forEach((Element fromElement) {
+      freeVariableMapping.keys.forEach((Element fromElement) {
         assert(fromElement == freeVariableMapping[fromElement]);
         Element updatedElement = capturedVariableMapping[fromElement];
         assert(updatedElement != null);
@@ -250,7 +250,7 @@
         }
       });
       ClassElement closureElement = data.closureClassElement;
-      assert(closureElement != null || fieldCaptures.isEmpty());
+      assert(closureElement != null || fieldCaptures.isEmpty);
       for (Element capturedElement in fieldCaptures) {
         SourceString name;
         if (capturedElement is BoxElement) {
@@ -302,7 +302,7 @@
 
   visitVariableDefinitions(VariableDefinitions node) {
     for (Link<Node> link = node.definitions.nodes;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
       Node definition = link.head;
       Element element = elements[definition];
@@ -436,7 +436,7 @@
         capturedVariableMapping[element] = boxed;
       }
     }
-    if (!scopeMapping.isEmpty()) {
+    if (!scopeMapping.isEmpty) {
       ClosureScope scope = new ClosureScope(box, scopeMapping);
       closureData.capturingScopes[node] = scope;
     }
@@ -469,7 +469,7 @@
     if (scopeData == null) return;
     List<Element> result = <Element>[];
     for (Link<Node> link = definitions.definitions.nodes;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
       Node definition = link.head;
       Element element = elements[definition];
@@ -586,8 +586,8 @@
 
     // Mark all free variables as captured and use them in the outer function.
     List<Element> freeVariables =
-        savedClosureData.freeVariableMapping.getKeys();
-    assert(freeVariables.isEmpty() || savedInsideClosure);
+        savedClosureData.freeVariableMapping.keys;
+    assert(freeVariables.isEmpty || savedInsideClosure);
     for (Element freeElement in freeVariables) {
       if (capturedVariableMapping[freeElement] != null &&
           capturedVariableMapping[freeElement] != freeElement) {
diff --git a/lib/compiler/implementation/code_buffer.dart b/lib/compiler/implementation/code_buffer.dart
index 1e618c5..023db92 100644
--- a/lib/compiler/implementation/code_buffer.dart
+++ b/lib/compiler/implementation/code_buffer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 class CodeBuffer implements StringBuffer {
   StringBuffer buffer;
   List<CodeBufferMarker> markers;
@@ -14,8 +16,8 @@
 
   int get length => buffer.length;
 
-  bool isEmpty() {
-    return buffer.isEmpty();
+  bool get isEmpty {
+    return buffer.isEmpty;
   }
 
   /**
diff --git a/lib/compiler/implementation/compile_time_constants.dart b/lib/compiler/implementation/compile_time_constants.dart
index aa6a7a5..1569de6 100644
--- a/lib/compiler/implementation/compile_time_constants.dart
+++ b/lib/compiler/implementation/compile_time_constants.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 /**
  * The [ConstantHandler] keeps track of compile-time constants,
  * initializations of global and static fields, and default values of
@@ -58,7 +60,7 @@
       if (result != null) return result;
       if (lazyStatics.contains(element)) return null;
       result = compileVariableWithDefinitions(element, work.resolutionTree);
-      assert(pendingVariables.isEmpty());
+      assert(pendingVariables.isEmpty);
       return result;
     });
   }
@@ -187,7 +189,7 @@
    * other.
    */
   List<VariableElement> getStaticNonFinalFieldsForEmission() {
-    return initialVariableValues.getKeys().filter((element) {
+    return initialVariableValues.keys.filter((element) {
       return element.kind == ElementKind.FIELD
           && !element.isInstanceMember()
           && !element.modifiers.isFinal();
@@ -200,7 +202,7 @@
    * other.
    */
   List<VariableElement> getStaticFinalFieldsForEmission() {
-    return initialVariableValues.getKeys().filter((element) {
+    return initialVariableValues.keys.filter((element) {
       return element.kind == ElementKind.FIELD
           && !element.isInstanceMember()
           && element.modifiers.isFinal();
@@ -286,7 +288,7 @@
     }
     List<Constant> arguments = <Constant>[];
     for (Link<Node> link = node.elements.nodes;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
       arguments.add(evaluateConstant(link.head));
     }
@@ -305,7 +307,7 @@
     List<StringConstant> keys = <StringConstant>[];
     Map<StringConstant, Constant> map = new Map<StringConstant, Constant>();
     for (Link<Node> link = node.entries.nodes;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
       LiteralMapEntry entry = link.head;
       Constant key = evaluateConstant(entry.key);
@@ -737,7 +739,7 @@
 
     if (initializerList != null) {
       for (Link<Node> link = initializerList.nodes;
-           !link.isEmpty();
+           !link.isEmpty;
            link = link.tail) {
         assert(link.head is Send);
         if (link.head is !SendSet) {
@@ -753,7 +755,7 @@
           // A field initializer.
           SendSet init = link.head;
           Link<Node> initArguments = init.arguments;
-          assert(!initArguments.isEmpty() && initArguments.tail.isEmpty());
+          assert(!initArguments.isEmpty && initArguments.tail.isEmpty);
           Constant fieldValue = evaluate(initArguments.head);
           updateFieldValue(init, elements[init], fieldValue);
         }
diff --git a/lib/compiler/implementation/compiler.dart b/lib/compiler/implementation/compiler.dart
index 6245eab..97fad39 100644
--- a/lib/compiler/implementation/compiler.dart
+++ b/lib/compiler/implementation/compiler.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.
 
+part of dart2js;
 
 /**
  * If true, print a warning for each method that was resolved, but not
@@ -106,7 +107,7 @@
 
   // TODO(5074): Remove this field once we don't accept the
   // deprecated parameter specification.
-  static final bool REJECT_NAMED_ARGUMENT_AS_POSITIONAL = false;
+  static final bool REJECT_NAMED_ARGUMENT_AS_POSITIONAL = true;
 
   final Tracer tracer;
 
@@ -143,7 +144,7 @@
       return f();
     } on CompilerCancelledException catch (ex) {
       throw;
-    } on StackOverflowException catch (ex) {
+    } on StackOverflowError catch (ex) {
       // We cannot report anything useful in this case, because we
       // do not have enough stack space.
       throw;
@@ -511,7 +512,7 @@
   }
 
   void processQueue(Enqueuer world, Element main) {
-    backend.processNativeClasses(world, libraries.getValues());
+    backend.processNativeClasses(world, libraries.values);
     world.addToWorkList(main);
     progress.reset();
     world.forEach((WorkItem work) {
@@ -537,8 +538,8 @@
         internalErrorOnElement(work.element, "Work list is not empty.");
       });
     }
-    var resolved = new Set.from(enqueuer.resolution.resolvedElements.getKeys());
-    for (Element e in codegenWorld.generatedCode.getKeys()) {
+    var resolved = new Set.from(enqueuer.resolution.resolvedElements.keys);
+    for (Element e in codegenWorld.generatedCode.keys) {
       resolved.remove(e);
     }
     for (Element e in new Set.from(resolved)) {
@@ -601,7 +602,7 @@
       enqueuer.resolution.resolvedElements[work.element] = work.resolutionTree;
       return work.resolutionTree;
     }
-    if (progress.elapsedInMs() > 500) {
+    if (progress.elapsedMilliseconds > 500) {
       // TODO(ahe): Add structured diagnostics to the compiler API and
       // use it to separate this from the --verbose option.
       if (phase == PHASE_RESOLVING) {
@@ -625,7 +626,7 @@
 
   void codegen(WorkItem work, Enqueuer world) {
     if (!identical(world, enqueuer.codegen)) return null;
-    if (progress.elapsedInMs() > 500) {
+    if (progress.elapsedMilliseconds > 500) {
       // TODO(ahe): Add structured diagnostics to the compiler API and
       // use it to separate this from the --verbose option.
       log('Compiled ${codegenWorld.generatedCode.length} methods.');
@@ -783,7 +784,7 @@
   CompilerTask(this.compiler) : watch = new Stopwatch();
 
   String get name => 'Unknown task';
-  int get timing => watch.elapsedInMs();
+  int get timing => watch.elapsedMilliseconds;
 
   measure(Function action) {
     // TODO(kasperl): Do we have to worry about exceptions here?
diff --git a/lib/compiler/implementation/constant_system.dart b/lib/compiler/implementation/constant_system.dart
index aef3a84..566c673 100644
--- a/lib/compiler/implementation/constant_system.dart
+++ b/lib/compiler/implementation/constant_system.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 interface Operation {
   final SourceString name;
   bool isUserDefinable();
diff --git a/lib/compiler/implementation/constant_system_dart.dart b/lib/compiler/implementation/constant_system_dart.dart
index ee38d71..ad01e99 100644
--- a/lib/compiler/implementation/constant_system_dart.dart
+++ b/lib/compiler/implementation/constant_system_dart.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 const DART_CONSTANT_SYSTEM = const DartConstantSystem();
 
 class BitNotOperation implements UnaryOperation {
diff --git a/lib/compiler/implementation/constants.dart b/lib/compiler/implementation/constants.dart
index 5268e8b..d4b0e8a 100644
--- a/lib/compiler/implementation/constants.dart
+++ b/lib/compiler/implementation/constants.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 abstract class ConstantVisitor<R> {
   R visitSentinel(SentinelConstant constant);
   R visitFunction(FunctionConstant constant);
@@ -54,7 +56,7 @@
   List<Constant> getDependencies() => const <Constant>[];
 
   // Just use a random value.
-  int hashCode() => 24297418;
+  int get hashCode => 24297418;
 
   bool isSentinel() => true;
 
@@ -85,7 +87,7 @@
     return compiler.functionClass.computeType(compiler);
   }
 
-  int hashCode() => (17 * element.hashCode()) & 0x7fffffff;
+  int get hashCode => (17 * element.hashCode) & 0x7fffffff;
 
   accept(ConstantVisitor visitor) => visitor.visitFunction(this);
 }
@@ -126,7 +128,7 @@
   }
 
   // The magic constant has no meaning. It is just a random value.
-  int hashCode() => 785965825;
+  int get hashCode => 785965825;
   DartString toDartString() => const LiteralDartString("null");
 
   accept(ConstantVisitor visitor) => visitor.visitNull(this);
@@ -175,7 +177,7 @@
     return value == otherInt.value;
   }
 
-  int hashCode() => value.hashCode();
+  int get hashCode => value.hashCode;
   DartString toDartString() => new DartString.literal(value.toString());
 
   accept(ConstantVisitor visitor) => visitor.visitInt(this);
@@ -184,13 +186,13 @@
 class DoubleConstant extends NumConstant {
   final double value;
   factory DoubleConstant(double value) {
-    if (value.isNaN()) {
+    if (value.isNaN) {
       return const DoubleConstant._internal(double.NAN);
     } else if (value == double.INFINITY) {
       return const DoubleConstant._internal(double.INFINITY);
     } else if (value == -double.INFINITY) {
       return const DoubleConstant._internal(-double.INFINITY);
-    } else if (value == 0.0 && !value.isNegative()) {
+    } else if (value == 0.0 && !value.isNegative) {
       return const DoubleConstant._internal(0.0);
     } else if (value == 1.0) {
       return const DoubleConstant._internal(1.0);
@@ -200,9 +202,9 @@
   }
   const DoubleConstant._internal(this.value);
   bool isDouble() => true;
-  bool isNaN() => value.isNaN();
+  bool isNaN() => value.isNaN;
   // We need to check for the negative sign since -0.0 == 0.0.
-  bool isMinusZero() => value == 0.0 && value.isNegative();
+  bool isMinusZero() => value == 0.0 && value.isNegative;
 
   DartType computeType(Compiler compiler) {
     return compiler.doubleClass.computeType(compiler);
@@ -213,15 +215,15 @@
     DoubleConstant otherDouble = other;
     double otherValue = otherDouble.value;
     if (value == 0.0 && otherValue == 0.0) {
-      return value.isNegative() == otherValue.isNegative();
-    } else if (value.isNaN()) {
-      return otherValue.isNaN();
+      return value.isNegative == otherValue.isNegative;
+    } else if (value.isNaN) {
+      return otherValue.isNaN;
     } else {
       return value == otherValue;
     }
   }
 
-  int hashCode() => value.hashCode();
+  int get hashCode => value.hashCode;
   DartString toDartString() => new DartString.literal(value.toString());
 
   accept(ConstantVisitor visitor) => visitor.visitDouble(this);
@@ -253,7 +255,7 @@
   bool operator ==(var other) => identical(this, other);
   // The magic constant is just a random value. It does not have any
   // significance.
-  int hashCode() => 499;
+  int get hashCode => 499;
   DartString toDartString() => const LiteralDartString("true");
 
   accept(ConstantVisitor visitor) => visitor.visitTrue(this);
@@ -271,7 +273,7 @@
   bool operator ==(var other) => identical(this, other);
   // The magic constant is just a random value. It does not have any
   // significance.
-  int hashCode() => 536555975;
+  int get hashCode => 536555975;
   DartString toDartString() => const LiteralDartString("false");
 
   accept(ConstantVisitor visitor) => visitor.visitFalse(this);
@@ -279,15 +281,15 @@
 
 class StringConstant extends PrimitiveConstant {
   final DartString value;
-  int _hashCode;
+  final int hashCode;
   final Node node;
 
-  StringConstant(this.value, this.node) {
-    // TODO(floitsch): cache StringConstants.
-    // TODO(floitsch): compute hashcode without calling toString() on the
-    // DartString.
-    _hashCode = value.slowToString().hashCode();
-  }
+  // TODO(floitsch): cache StringConstants.
+  // TODO(floitsch): compute hashcode without calling toString() on the
+  // DartString.
+  StringConstant(DartString value, this.node)
+      : this.value = value,
+        this.hashCode = value.slowToString().hashCode;
   bool isString() => true;
 
   DartType computeType(Compiler compiler) {
@@ -297,10 +299,9 @@
   bool operator ==(var other) {
     if (other is !StringConstant) return false;
     StringConstant otherString = other;
-    return (_hashCode == otherString._hashCode) && (value == otherString.value);
+    return (hashCode == otherString.hashCode) && (value == otherString.value);
   }
 
-  int hashCode() => _hashCode;
   DartString toDartString() => value;
   int get length => value.length;
 
@@ -317,25 +318,30 @@
 
   // TODO(1603): The class should be marked as abstract, but the VM doesn't
   // currently allow this.
-  abstract int hashCode();
+  abstract int get hashCode;
 }
 
 class ListConstant extends ObjectConstant {
   final List<Constant> entries;
-  int _hashCode;
+  final int hashCode;
 
-  ListConstant(DartType type, this.entries) : super(type) {
+  ListConstant(DartType type, List<Constant> entries)
+      : this.entries = entries,
+        hashCode = _computeHash(entries),
+        super(type);
+  bool isList() => true;
+
+  static int _computeHash(List<Constant> entries) {
     // TODO(floitsch): create a better hash.
     int hash = 0;
-    for (Constant input in entries) hash ^= input.hashCode();
-    _hashCode = hash;
+    for (Constant input in entries) hash ^= input.hashCode;
+    return hash;
   }
-  bool isList() => true;
 
   bool operator ==(var other) {
     if (other is !ListConstant) return false;
     ListConstant otherList = other;
-    if (hashCode() != otherList.hashCode()) return false;
+    if (hashCode != otherList.hashCode) return false;
     // TODO(floitsch): verify that the generic types are the same.
     if (entries.length != otherList.entries.length) return false;
     for (int i = 0; i < entries.length; i++) {
@@ -344,8 +350,6 @@
     return true;
   }
 
-  int hashCode() => _hashCode;
-
   List<Constant> getDependencies() => entries;
 
   int get length => entries.length;
@@ -373,21 +377,25 @@
   final ListConstant keys;
   final List<Constant> values;
   final Constant protoValue;
-  int _hashCode;
+  final int hashCode;
 
-  MapConstant(DartType type, this.keys, this.values, this.protoValue)
-      : super(type) {
+  MapConstant(DartType type, this.keys, List<Constant> values, this.protoValue)
+      : this.values = values,
+        this.hashCode = computeHash(values),
+        super(type);
+  bool isMap() => true;
+
+  static int computeHash(List<Constant> values) {
     // TODO(floitsch): create a better hash.
     int hash = 0;
-    for (Constant value in values) hash ^= value.hashCode();
-    _hashCode = hash;
+    for (Constant value in values) hash ^= value.hashCode;
+    return hash;
   }
-  bool isMap() => true;
 
   bool operator ==(var other) {
     if (other is !MapConstant) return false;
     MapConstant otherMap = other;
-    if (hashCode() != otherMap.hashCode()) return false;
+    if (hashCode != otherMap.hashCode) return false;
     // TODO(floitsch): verify that the generic types are the same.
     if (keys != otherMap.keys) return false;
     for (int i = 0; i < values.length; i++) {
@@ -396,8 +404,6 @@
     return true;
   }
 
-  int hashCode() => _hashCode;
-
   List<Constant> getDependencies() {
     List<Constant> result = <Constant>[keys];
     result.addAll(values);
@@ -411,24 +417,30 @@
 
 class ConstructedConstant extends ObjectConstant {
   final List<Constant> fields;
-  int _hashCode;
+  final int hashCode;
 
-  ConstructedConstant(DartType type, this.fields) : super(type) {
+  ConstructedConstant(DartType type, List<Constant> fields)
+    : this.fields = fields,
+      hashCode = computeHash(type, fields),
+      super(type) {
     assert(type != null);
+  }
+  bool isConstructedObject() => true;
+
+  static int computeHash(DartType type, List<Constant> fields) {
     // TODO(floitsch): create a better hash.
     int hash = 0;
     for (Constant field in fields) {
-      hash ^= field.hashCode();
+      hash ^= field.hashCode;
     }
-    hash ^= type.element.hashCode();
-    _hashCode = hash;
+    hash ^= type.element.hashCode;
+    return hash;
   }
-  bool isConstructedObject() => true;
 
   bool operator ==(var otherVar) {
     if (otherVar is !ConstructedConstant) return false;
     ConstructedConstant other = otherVar;
-    if (hashCode() != other.hashCode()) return false;
+    if (hashCode != other.hashCode) return false;
     // TODO(floitsch): verify that the (generic) types are the same.
     if (type.element != other.type.element) return false;
     if (fields.length != other.fields.length) return false;
@@ -438,7 +450,6 @@
     return true;
   }
 
-  int hashCode() => _hashCode;
   List<Constant> getDependencies() => fields;
 
   accept(ConstantVisitor visitor) => visitor.visitConstructed(this);
diff --git a/lib/compiler/implementation/dart2js.dart b/lib/compiler/implementation/dart2js.dart
index 526652c..eafb1e6 100644
--- a/lib/compiler/implementation/dart2js.dart
+++ b/lib/compiler/implementation/dart2js.dart
@@ -54,7 +54,7 @@
   var pattern = new RegExp('^(${Strings.join(patterns, ")\$|(")})\$');
   OUTER: for (String argument in argv) {
     Match match = pattern.firstMatch(argument);
-    assert(match.groupCount() == handlers.length);
+    assert(match.groupCount == handlers.length);
     for (int i = 0; i < handlers.length; i++) {
       if (match[i + 1] != null) {
         handlers[i].handle(argument);
@@ -173,7 +173,7 @@
     helpAndFail('Error: --force-strip may only be used with '
         '--output-type=dart');
   }
-  if (arguments.isEmpty()) {
+  if (arguments.isEmpty) {
     helpAndFail('Error: No Dart file specified.');
   }
   if (arguments.length > 1) {
diff --git a/lib/compiler/implementation/dart_backend/backend.dart b/lib/compiler/implementation/dart_backend/backend.dart
index 45eef3f..8f46463 100644
--- a/lib/compiler/implementation/dart_backend/backend.dart
+++ b/lib/compiler/implementation/dart_backend/backend.dart
@@ -2,6 +2,11 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart_backend;
+
+// TODO(ahe): This class is simply wrong.  This backend should use
+// elements when it can, not AST nodes.  Perhaps a [Map<Element,
+// TreeElements>] is what is needed.
 class ElementAst {
   final Node ast;
   final TreeElements treeElements;
@@ -15,13 +20,15 @@
   }
 
   ElementAst.forClassLike(this.ast)
-      : this.treeElements = new TreeElementMapping();
+      : this.treeElements = new TreeElementMapping(null);
 }
 
+// TODO(ahe): This class should not subclass [TreeElementMapping], if
+// anything, it should implement TreeElements.
 class AggregatedTreeElements extends TreeElementMapping {
   final List<TreeElements> treeElements;
 
-  AggregatedTreeElements() : treeElements = <TreeElements>[];
+  AggregatedTreeElements() : treeElements = <TreeElements>[], super(null);
 
   Element operator[](Node node) {
     final result = super[node];
@@ -85,7 +92,7 @@
     rewiteStatement(Statement statement) {
       if (statement is Block) {
         Link statements = statement.statements.nodes;
-        if (!statements.isEmpty() && statements.tail.isEmpty()) {
+        if (!statements.isEmpty && statements.tail.isEmpty) {
           Statement single = statements.head;
           bool isDeclaration =
               single is VariableDefinitions || single is FunctionDeclaration;
@@ -130,7 +137,7 @@
     Set<DartType> processedTypes = new Set<DartType>();
     List<DartType> workQueue = new List<DartType>();
     workQueue.addAll(
-        classMembers.getKeys().map((classElement) => classElement.type));
+        classMembers.keys.map((classElement) => classElement.type));
     workQueue.addAll(compiler.resolverWorld.isChecks);
     Element typeErrorElement =
         compiler.coreLibrary.find(new SourceString('TypeError'));
@@ -154,7 +161,7 @@
       }
     }
 
-    while (!workQueue.isEmpty()) {
+    while (!workQueue.isEmpty) {
       DartType type = workQueue.removeLast();
       if (processedTypes.contains(type)) continue;
       processedTypes.add(type);
@@ -221,7 +228,7 @@
     // however as of today there are problems with names of some core library
     // interfaces, most probably for interfaces of literals.
     final fixedMemberNames = new Set<String>();
-    for (final library in compiler.libraries.getValues()) {
+    for (final library in compiler.libraries.values) {
       if (!library.isPlatformLibrary) continue;
       library.implementation.forEachLocalMember((Element element) {
         if (element is ClassElement) {
@@ -237,7 +244,7 @@
             // Fetch name of named constructors and factories if any,
             // otherwise store regular name.
             // TODO(antonm): better way to analyze the name.
-            fixedMemberNames.add(name.split(r'$').last());
+            fixedMemberNames.add(name.split(r'$').last);
           }
         }
         // Even class names are added due to a delicate problem we have:
@@ -326,7 +333,7 @@
         processElement(element, elementAst);
       } else {
         if (!element.isTopLevel()) {
-          compiler.cancel(reason: 'Cannot process $element', element: element);
+          compiler.cancel('Cannot process $element', element: element);
         }
         addTopLevel(element, elementAst);
       }
@@ -339,11 +346,11 @@
         new Identifier(new StringToken(IDENTIFIER_INFO, '', -1));
 
     NextClassElement:
-    for (ClassElement classElement in classMembers.getKeys()) {
+    for (ClassElement classElement in classMembers.keys) {
       for (Element member in classMembers[classElement]) {
         if (member.isConstructor()) continue NextClassElement;
       }
-      if (classElement.constructors.isEmpty()) continue NextClassElement;
+      if (classElement.constructors.isEmpty) continue NextClassElement;
 
       // TODO(antonm): check with AAR team if there is better approach.
       // As an idea: provide template as a Dart code---class C { C.name(); }---
@@ -364,7 +371,7 @@
 
       classMembers[classElement].add(constructor);
       elementAsts[constructor] =
-          new ElementAst(constructor.cachedNode, new TreeElementMapping());
+          new ElementAst(constructor.cachedNode, new TreeElementMapping(null));
     }
 
     // Create all necessary placeholders.
@@ -440,7 +447,7 @@
 
   void logResultBundleSizeInfo(Set<Element> topLevelElements) {
     Collection<LibraryElement> referencedLibraries =
-        compiler.libraries.getValues().filter(isUserLibrary);
+        compiler.libraries.values.filter(isUserLibrary);
     // Sum total size of scripts in each referenced library.
     int nonPlatformSize = 0;
     for (LibraryElement lib in referencedLibraries) {
diff --git a/lib/compiler/implementation/dart_backend/emitter.dart b/lib/compiler/implementation/dart_backend/emitter.dart
index d3bc217..4cf87767 100644
--- a/lib/compiler/implementation/dart_backend/emitter.dart
+++ b/lib/compiler/implementation/dart_backend/emitter.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart_backend;
+
 String emitCode(
       Unparser unparser,
       Map<LibraryElement, String> imports,
diff --git a/lib/compiler/implementation/dart_backend/placeholder_collector.dart b/lib/compiler/implementation/dart_backend/placeholder_collector.dart
index d4c8c41..52a578a 100644
--- a/lib/compiler/implementation/dart_backend/placeholder_collector.dart
+++ b/lib/compiler/implementation/dart_backend/placeholder_collector.dart
@@ -2,11 +2,13 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart_backend;
+
 class LocalPlaceholder {
   final String identifier;
   final Set<Node> nodes;
   LocalPlaceholder(this.identifier) : nodes = new Set<Node>();
-  int hashCode() => identifier.hashCode();
+  int get hashCode => identifier.hashCode;
   String toString() =>
       'local_placeholder[id($identifier), nodes($nodes)]';
 }
@@ -368,7 +370,7 @@
   }
 
   void internalError(String reason, {Node node}) {
-    compiler.cancel(reason: reason, node: node);
+    compiler.cancel(reason, node: node);
   }
 
   void unreachable() { internalError('Unreachable case'); }
diff --git a/lib/compiler/implementation/dart_backend/renamer.dart b/lib/compiler/implementation/dart_backend/renamer.dart
index 8f8521e..bf35ab3 100644
--- a/lib/compiler/implementation/dart_backend/renamer.dart
+++ b/lib/compiler/implementation/dart_backend/renamer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart_backend;
+
 Function get _compareNodes =>
     compareBy((n) => n.getBeginToken().charOffset);
 
@@ -76,7 +78,7 @@
   }
 
   sortedForEach(Map<Element, Dynamic> map, f) {
-    for (Element element in sortElements(map.getKeys())) {
+    for (Element element in sortElements(map.keys)) {
       f(element, map[element]);
     }
   }
@@ -112,7 +114,7 @@
   if (compiler.enableMinification) {
     MinifyingGenerator generator = new MinifyingGenerator();
     Set<String> forbiddenIdentifiers = new Set<String>.from(['main']);
-    forbiddenIdentifiers.addAll(Keyword.keywords.getKeys());
+    forbiddenIdentifiers.addAll(Keyword.keywords.keys);
     forbiddenIdentifiers.addAll(fixedMemberNames);
     generateUniqueName = (_) =>
         generator.generate(forbiddenIdentifiers.contains);
@@ -120,14 +122,14 @@
     Function renameElement = makeElementRenamer(rename, generateUniqueName);
 
     Set<String> allParameterIdentifiers = new Set<String>();
-    for (var functionScope in placeholderCollector.functionScopes.getValues()) {
+    for (var functionScope in placeholderCollector.functionScopes.values) {
       allParameterIdentifiers.addAll(functionScope.parameterIdentifiers);
     }
     // Build a sorted (by usage) list of local nodes that will be renamed to
     // the same identifier. So the top-used local variables in all functions
     // will be renamed first and will all share the same new identifier.
     List<Set<Node>> allSortedLocals = new List<Set<Node>>();
-    for (var functionScope in placeholderCollector.functionScopes.getValues()) {
+    for (var functionScope in placeholderCollector.functionScopes.values) {
       // Add current sorted local identifiers to the whole sorted list
       // of all local identifiers for all functions.
       List<LocalPlaceholder> currentSortedPlaceholders =
@@ -175,11 +177,10 @@
       renameNodes(renamable.nodes, (_) => newName);
     }
   } else {
-    // TODO(antonm): we should also populate this set with top-level
-    // names from core library.
     // Never rename anything to 'main'.
     final usedTopLevelOrMemberIdentifiers = new Set<String>();
     usedTopLevelOrMemberIdentifiers.add('main');
+    usedTopLevelOrMemberIdentifiers.addAll(fixedMemberNames);
     generateUniqueName = (originalName) {
       String newName = conservativeGenerator(
           originalName, usedTopLevelOrMemberIdentifiers.contains);
diff --git a/lib/compiler/implementation/dart_backend/utils.dart b/lib/compiler/implementation/dart_backend/utils.dart
index 44ea494..4c4547d 100644
--- a/lib/compiler/implementation/dart_backend/utils.dart
+++ b/lib/compiler/implementation/dart_backend/utils.dart
@@ -2,27 +2,26 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart_backend;
+
 class CloningVisitor implements Visitor<Node> {
   final TreeElements originalTreeElements;
   final TreeElementMapping cloneTreeElements;
 
-  CloningVisitor(this.originalTreeElements)
-      : cloneTreeElements = new TreeElementMapping();
+  CloningVisitor(originalTreeElements)
+      : cloneTreeElements =
+            new TreeElementMapping(originalTreeElements.currentElement),
+        this.originalTreeElements = originalTreeElements;
 
   visit(Node node) {
     if (node == null) return null;
     final clone = node.accept(this);
+
     final originalElement = originalTreeElements[node];
-    if (originalElement != null) {
-      cloneTreeElements[clone] = originalElement;
-    }
-    TypeAnnotation asTypeAnnotation = node.asTypeAnnotation();
-    if (asTypeAnnotation != null) {
-      final originalType = originalTreeElements.getType(asTypeAnnotation);
-      if (originalType != null) {
-        cloneTreeElements.setType(clone.asTypeAnnotation(), originalType);
-      }
-    }
+    if (originalElement != null) cloneTreeElements[clone] = originalElement;
+
+    final originalType = originalTreeElements.getType(node);
+    if (originalType != null) cloneTreeElements.setType(clone, originalType);
     return clone;
   }
 
@@ -133,11 +132,11 @@
     // Special case for classes which exist in hierarchy, but not
     // in the visitor.
     if (node is Prefix) {
-      return node.nodes.isEmpty() ?
+      return node.nodes.isEmpty ?
           new Prefix() : new Prefix.singleton(visit(node.nodes.head));
     }
     if (node is Postfix) {
-      return node.nodes.isEmpty() ?
+      return node.nodes.isEmpty ?
           new Postfix() : new Postfix.singleton(visit(node.nodes.head));
     }
     LinkBuilder<Node> builder = new LinkBuilder<Node>();
diff --git a/lib/compiler/implementation/diagnostic_listener.dart b/lib/compiler/implementation/diagnostic_listener.dart
index e684e9e..fa335e0 100644
--- a/lib/compiler/implementation/diagnostic_listener.dart
+++ b/lib/compiler/implementation/diagnostic_listener.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 abstract class DiagnosticListener {
   // TODO(karlklose): replace cancel with better error reporting mechanism.
   void cancel(String reason, {node, token, instruction, element});
diff --git a/lib/compiler/implementation/elements/elements.dart b/lib/compiler/implementation/elements/elements.dart
index e3a46e2..1fcdac5 100644
--- a/lib/compiler/implementation/elements/elements.dart
+++ b/lib/compiler/implementation/elements/elements.dart
@@ -123,9 +123,12 @@
 }
 
 class Element implements Spannable {
+  static int elementHashCode = 0;
+
   final SourceString name;
   final ElementKind kind;
   final Element enclosingElement;
+  final int hashCode = ++elementHashCode;
   Link<MetadataAnnotation> metadata = const Link<MetadataAnnotation>();
 
   Element(this.name, this.kind, this.enclosingElement) {
@@ -231,11 +234,11 @@
   Element get declaration => isPatch ? origin : this;
 
   Element get patch {
-    throw new UnsupportedOperationException('patch is not supported on $this');
+    throw new UnsupportedError('patch is not supported on $this');
   }
 
   Element get origin {
-    throw new UnsupportedOperationException('origin is not supported on $this');
+    throw new UnsupportedError('origin is not supported on $this');
   }
 
   // TODO(johnniwinther): This breaks for libraries (for which enclosing
@@ -261,11 +264,6 @@
     return token;
   }
 
-  // TODO(kasperl): This is a very bad hash code for the element and
-  // there's no reason why two elements with the same name should have
-  // the same hash code. Replace this with a simple id in the element?
-  int hashCode() => name == null ? 0 : name.hashCode();
-
   CompilationUnitElement getCompilationUnit() {
     Element element = this;
     while (!element.isCompilationUnit()) {
@@ -316,20 +314,9 @@
   }
 
   /**
-   * Creates the scope for this element. The scope of the
-   * enclosing element will be the parent scope.
+   * Creates the scope for this element.
    */
-  // TODO(johnniwinther): Clean up scope generation. Possibly generation scopes
-  // externally.
-  Scope buildScope({bool patchScope: false}) =>
-      buildEnclosingScope(patchScope: patchScope);
-
-  /**
-   * Creates the scope for the enclosing element.
-   */
-  // TODO(johnniwinther): Remove buildEnclosingScope as part of scope clean-up.
-  Scope buildEnclosingScope({bool patchScope: false}) =>
-      enclosingElement.buildScope(patchScope: patchScope);
+  Scope buildScope() => enclosingElement.buildScope();
 
   String toString() {
     // TODO(johnniwinther): Test for nullness of name, or make non-nullness an
@@ -391,6 +378,11 @@
   Link<MetadataAnnotation> get metadata => unsupported();
 
   getLibrary() => enclosingElement.getLibrary();
+
+  String toString() {
+    String n = targetName.slowToString();
+    return '<$n: ${messageKind.message(messageArguments)}>';
+  }
 }
 
 class ErroneousFunctionElement extends ErroneousElement
@@ -546,7 +538,7 @@
           api_e.Diagnostic.WARNING);
       return;
     }
-    if (!localMembers.isEmpty()) {
+    if (!localMembers.isEmpty) {
       listener.reportMessage(
           listener.spanFromNode(tag),
           MessageKind.BEFORE_TOP_LEVEL.error(),
@@ -700,10 +692,18 @@
    */
   Element find(SourceString elementName) {
     Element result = localScope[elementName];
-    if (result == null) {
-      result = importScope[elementName];
+    if (result != null) return result;
+    if (origin != null) {
+      result = origin.localScope[elementName];
+      if (result != null) return result;
     }
-    return result;
+    result = importScope[elementName];
+    if (result != null) return result;
+    if (origin != null) {
+      result = origin.importScope[elementName];
+      if (result != null) return result;
+    }
+    return null;
   }
 
   /** Look up a top-level element in this library, but only look for
@@ -754,16 +754,7 @@
     }
   }
 
-  // TODO(johnniwinther): Rewrite to avoid the optional argument.
-  Scope buildEnclosingScope({bool patchScope: false}) {
-    if (origin != null) {
-      return new PatchLibraryScope(origin, this);
-    } if (patchScope && patch != null) {
-      return new PatchLibraryScope(this, patch);
-    } else {
-      return new TopScope(this);
-    }
-  }
+  Scope buildScope() => new LibraryScope(this);
 
   bool get isPlatformLibrary => uri.scheme == "dart";
 
@@ -826,10 +817,8 @@
 
   Link<DartType> get typeVariables => cachedType.typeArguments;
 
-  // TODO(johnniwinther): Rewrite to avoid the optional argument.
-  Scope buildScope({bool patchScope: false}) {
-    return new TypeDeclarationScope(
-      enclosingElement.buildScope(patchScope: patchScope), this);
+  Scope buildScope() {
+    return new TypeDeclarationScope(enclosingElement.buildScope(), this);
   }
 }
 
@@ -850,7 +839,7 @@
     if (cachedNode != null) return cachedNode;
     VariableDefinitions definitions = variables.parseNode(listener);
     for (Link<Node> link = definitions.definitions.nodes;
-         !link.isEmpty(); link = link.tail) {
+         !link.isEmpty; link = link.tail) {
       Expression initializedIdentifier = link.head;
       Identifier identifier = initializedIdentifier.asIdentifier();
       if (identifier == null) {
@@ -934,9 +923,9 @@
       } else {
         // Is node.definitions exactly one FunctionExpression?
         Link<Node> link = node.definitions.nodes;
-        if (!link.isEmpty() &&
+        if (!link.isEmpty &&
             link.head.asFunctionExpression() != null &&
-            link.tail.isEmpty()) {
+            link.tail.isEmpty) {
           FunctionExpression functionExpression = link.head;
           // We found exactly one FunctionExpression
           functionSignature =
@@ -1040,7 +1029,7 @@
 
   void forEachRequiredParameter(void function(Element parameter)) {
     for (Link<Element> link = requiredParameters;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
       function(link.head);
     }
@@ -1048,7 +1037,7 @@
 
   void forEachOptionalParameter(void function(Element parameter)) {
     for (Link<Element> link = optionalParameters;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
       function(link.head);
     }
@@ -1279,7 +1268,7 @@
 
     // Create types and elements for type variable.
     var arguments = new LinkBuilder<DartType>();
-    for (Link link = parameters.nodes; !link.isEmpty(); link = link.tail) {
+    for (Link link = parameters.nodes; !link.isEmpty; link = link.tail) {
       TypeVariable node = link.head;
       SourceString variableName = node.name.source;
       TypeVariableElement variableElement =
@@ -1493,9 +1482,7 @@
     SourceString normalizedName;
     SourceString className = this.name;
     SourceString constructorName = selector.name;
-    if (!identical(constructorName, const SourceString('')) &&
-        ((className == null) ||
-         (constructorName.slowToString() != className.slowToString()))) {
+    if (constructorName != const SourceString('')) {
       normalizedName = Elements.constructConstructorName(className,
                                                          constructorName);
     } else {
@@ -1514,7 +1501,7 @@
 
   bool get hasConstructor {
     // Search in scope to be sure we search patched constructors.
-    for (var element in localScope.getValues()) {
+    for (var element in localScope.values) {
       if (element.isConstructor()) return true;
     }
     return false;
@@ -1639,29 +1626,9 @@
 
   bool isInterface() => false;
   bool isNative() => nativeName != null;
-  int hashCode() => id;
+  int get hashCode => id;
 
-  // TODO(johnniwinther): Rewrite to avoid the optional argument.
-  Scope buildScope({bool patchScope: false}) {
-    if (origin != null) {
-      return new PatchClassScope(
-          enclosingElement.buildScope(patchScope: patchScope), origin, this);
-    } else if (patchScope && patch != null) {
-      return new PatchClassScope(
-          enclosingElement.buildScope(patchScope: patchScope), this, patch);
-    } else {
-      return new ClassScope(
-          enclosingElement.buildScope(patchScope: patchScope), this);
-    }
-  }
-
-  Scope buildLocalScope() {
-    if (origin != null) {
-      return new LocalPatchClassScope(origin, this);
-    } else {
-      return new LocalClassScope(this);
-    }
-  }
+  Scope buildScope() => new ClassScope(enclosingElement.buildScope(), this);
 
   Link<DartType> get allSupertypesAndSelf {
     return allSupertypes.prepend(new InterfaceType(this));
diff --git a/lib/compiler/implementation/enqueue.dart b/lib/compiler/implementation/enqueue.dart
index 0e97273..6ac8d8f 100644
--- a/lib/compiler/implementation/enqueue.dart
+++ b/lib/compiler/implementation/enqueue.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 class EnqueueTask extends CompilerTask {
   final Enqueuer codegen;
   final Enqueuer resolution;
@@ -209,7 +211,7 @@
       cls.ensureResolved(compiler);
 
       for (Link<DartType> supertypes = cls.allSupertypesAndSelf;
-           !supertypes.isEmpty(); supertypes = supertypes.tail) {
+           !supertypes.isEmpty; supertypes = supertypes.tail) {
         cls = supertypes.head.element;
         if (seenClasses.contains(cls)) continue;
         seenClasses.add(cls);
@@ -278,7 +280,7 @@
     Link<Element> members = instanceMembersByName[memberName];
     if (members != null) {
       LinkBuilder<Element> remaining = new LinkBuilder<Element>();
-      for (; !members.isEmpty(); members = members.tail) {
+      for (; !members.isEmpty; members = members.tail) {
         if (!f(members.head)) remaining.addLast(members.head);
       }
       instanceMembersByName[memberName] = remaining.toLink();
@@ -355,7 +357,7 @@
   }
 
   void forEach(f(WorkItem work)) {
-    while (!queue.isEmpty()) {
+    while (!queue.isEmpty) {
       f(queue.removeLast()); // TODO(kasperl): Why isn't this removeFirst?
     }
   }
diff --git a/lib/compiler/implementation/js/nodes.dart b/lib/compiler/implementation/js/nodes.dart
index dcdba6e..ae0ae14 100644
--- a/lib/compiler/implementation/js/nodes.dart
+++ b/lib/compiler/implementation/js/nodes.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of js;
+
 abstract class NodeVisitor<T> {
   T visitProgram(Program node);
 
diff --git a/lib/compiler/implementation/js/printer.dart b/lib/compiler/implementation/js/printer.dart
index 02982ff..d2f7fab 100644
--- a/lib/compiler/implementation/js/printer.dart
+++ b/lib/compiler/implementation/js/printer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of js;
+
 class Printer implements NodeVisitor {
   final bool shouldCompressOutput;
   leg.Compiler compiler;
@@ -18,7 +20,7 @@
         outBuffer = new leg.CodeBuffer(),
         danglingElseVisitor = new DanglingElseVisitor(compiler),
         namer = determineRenamer(compiler.enableMinification);
-  
+
   static Namer determineRenamer(bool shouldCompressOutput) {
     // TODO(erikcorry): Re-enable the MinifyRenamer after M1.
     return new IdentityNamer();
@@ -331,7 +333,7 @@
     visitNestedExpression(node.expression, EXPRESSION,
                           newInForInit: false, newAtStatementBegin: false);
     outLn(":");
-    if (!node.body.statements.isEmpty()) {
+    if (!node.body.statements.isEmpty) {
       indentLevel++;
       blockOutWithoutBraces(node.body);
       indentLevel--;
@@ -340,7 +342,7 @@
 
   visitDefault(Default node) {
     outIndentLn("default:");
-    if (!node.body.statements.isEmpty()) {
+    if (!node.body.statements.isEmpty) {
       indentLevel++;
       blockOutWithoutBraces(node.body);
       indentLevel--;
@@ -945,7 +947,7 @@
   String declareName(String oldName) {
     const LETTERS = 52;
     const DIGITS = 10;
-    if (maps.isEmpty()) return oldName;
+    if (maps.isEmpty) return oldName;
 
     String newName;
     int n = nameNumber;
@@ -978,7 +980,7 @@
     }
     assert(const RegExp(r'[a-zA-Z][a-zA-Z0-9]*').hasMatch(newName));
     nameNumber++;
-    maps.last()[oldName] = newName;
+    maps.last[oldName] = newName;
     return newName;
   }
 }
diff --git a/lib/compiler/implementation/js_backend/backend.dart b/lib/compiler/implementation/js_backend/backend.dart
index a196406..9f79fcc 100644
--- a/lib/compiler/implementation/js_backend/backend.dart
+++ b/lib/compiler/implementation/js_backend/backend.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of js_backend;
+
 typedef void Recompile(Element element);
 
 class ReturnInfo {
@@ -422,9 +424,9 @@
 
   void dump() {
     Set<Element> allFields = new Set<Element>();
-    fieldInitializerTypeMap.getKeys().forEach(allFields.add);
-    fieldConstructorTypeMap.getKeys().forEach(allFields.add);
-    fieldTypeMap.getKeys().forEach(allFields.add);
+    fieldInitializerTypeMap.keys.forEach(allFields.add);
+    fieldConstructorTypeMap.keys.forEach(allFields.add);
+    fieldTypeMap.keys.forEach(allFields.add);
     allFields.forEach((Element field) {
       print("Inferred $field has type ${optimisticFieldType(field)}");
     });
diff --git a/lib/compiler/implementation/js_backend/constant_emitter.dart b/lib/compiler/implementation/js_backend/constant_emitter.dart
index 792cf27..ad7b2b0 100644
--- a/lib/compiler/implementation/js_backend/constant_emitter.dart
+++ b/lib/compiler/implementation/js_backend/constant_emitter.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of js_backend;
+
 class ConstantEmitter implements ConstantVisitor {
   final Compiler compiler;
   final Namer namer;
@@ -63,7 +65,7 @@
 
   void visitDouble(DoubleConstant constant) {
     double value = constant.value;
-    if (value.isNaN()) {
+    if (value.isNaN) {
       buffer.add("(0/0)");
     } else if (value == double.INFINITY) {
       buffer.add("(1/0)");
@@ -91,7 +93,7 @@
                           CodeBuffer buffer,
                           Node diagnosticNode) {
     Iterator<int> iterator = string.iterator();
-    while (iterator.hasNext()) {
+    while (iterator.hasNext) {
       int code = iterator.next();
       if (identical(code, $SQ)) {
         buffer.add(r"\'");
diff --git a/lib/compiler/implementation/js_backend/constant_system_javascript.dart b/lib/compiler/implementation/js_backend/constant_system_javascript.dart
index f4532b5..b36c71c 100644
--- a/lib/compiler/implementation/js_backend/constant_system_javascript.dart
+++ b/lib/compiler/implementation/js_backend/constant_system_javascript.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of js_backend;
+
 const JAVA_SCRIPT_CONSTANT_SYSTEM = const JavaScriptConstantSystem();
 
 class JavaScriptBitNotOperation extends BitNotOperation {
@@ -196,7 +198,7 @@
     } else if (constant.isDouble()) {
       DoubleConstant doubleResult = constant;
       double doubleValue = doubleResult.value;
-      if (!doubleValue.isInfinite() && !doubleValue.isNaN() &&
+      if (!doubleValue.isInfinite && !doubleValue.isNaN &&
           !constant.isMinusZero()) {
         int intValue = doubleValue.toInt();
         if (intValue == doubleValue && integerFitsIntoDouble(intValue)) {
diff --git a/lib/compiler/implementation/js_backend/emitter.dart b/lib/compiler/implementation/js_backend/emitter.dart
index ad1d1fa..f164a85 100644
--- a/lib/compiler/implementation/js_backend/emitter.dart
+++ b/lib/compiler/implementation/js_backend/emitter.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of js_backend;
+
 /**
  * A function element that represents a closure call. The signature is copied
  * from the given element.
@@ -610,7 +612,7 @@
       }
       FunctionElement function = member;
       FunctionSignature parameters = function.computeSignature(compiler);
-      if (!parameters.optionalParameters.isEmpty()) {
+      if (!parameters.optionalParameters.isEmpty) {
         addParameterStubs(member, defineInstanceMember);
       }
     } else if (!member.isField()) {
@@ -1181,7 +1183,7 @@
     ConstantHandler handler = compiler.constantHandler;
     List<VariableElement> lazyFields =
         handler.getLazilyInitializedFieldsForEmission();
-    if (!lazyFields.isEmpty()) {
+    if (!lazyFields.isEmpty) {
       needsLazyInitializer = true;
       for (VariableElement element in lazyFields) {
         assert(compiler.codegenWorld.generatedBailoutCode[element] == null);
@@ -1214,6 +1216,8 @@
     for (Constant constant in constants) {
       // No need to emit functions. We already did that.
       if (constant.isFunction()) continue;
+      // Numbers, strings and booleans are currently always inlined.
+      if (constant.isPrimitive()) continue;
 
       String name = namer.constantName(constant);
       // The name is null when the constant is already a JS constant.
@@ -1250,7 +1254,7 @@
     assert(invariant(member, member.isDeclaration));
     if (member.isGetter() || member.isField()) {
       Set<Selector> selectors = compiler.codegenWorld.invokedNames[member.name];
-      if (selectors != null && !selectors.isEmpty()) {
+      if (selectors != null && !selectors.isEmpty) {
         emitCallStubForGetter(member, selectors, defineInstanceMember);
       }
     } else if (member.isFunction()) {
@@ -1262,7 +1266,7 @@
 
   void emitNoSuchMethodHandlers(DefineMemberFunction defineInstanceMember) {
     // Do not generate no such method handlers if there is no class.
-    if (compiler.codegenWorld.instantiatedClasses.isEmpty()) return;
+    if (compiler.codegenWorld.instantiatedClasses.isEmpty) return;
 
     String noSuchMethodName =
         namer.publicInstanceMethodNameByArity(Compiler.NO_SUCH_METHOD, 2);
diff --git a/lib/compiler/implementation/js_backend/emitter_no_eval.dart b/lib/compiler/implementation/js_backend/emitter_no_eval.dart
index f658c93..db2463e 100644
--- a/lib/compiler/implementation/js_backend/emitter_no_eval.dart
+++ b/lib/compiler/implementation/js_backend/emitter_no_eval.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of js_backend;
+
 class CodeEmitterNoEvalTask extends CodeEmitterTask {
   CodeEmitterNoEvalTask(Compiler compiler,
                         Namer namer,
diff --git a/lib/compiler/implementation/js_backend/namer.dart b/lib/compiler/implementation/js_backend/namer.dart
index 21c46c3..1236aa6 100644
--- a/lib/compiler/implementation/js_backend/namer.dart
+++ b/lib/compiler/implementation/js_backend/namer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of js_backend;
+
 /**
  * Assigns JavaScript identifiers to Dart variables, class-names and members.
  */
@@ -82,6 +84,10 @@
     return 'c\$${target.nestingLevel}';
   }
 
+  /**
+   * If the [name] is not private returns [:name.slowToString():]. Otherwise
+   * mangles the [name] so that each library has a unique name.
+   */
   String privateName(LibraryElement lib, SourceString name) {
     if (name.isPrivate()) {
       String nameString = name.slowToString();
@@ -116,7 +122,7 @@
         '${privateName(lib, name)}\$${signature.parameterCount}';
     if (!signature.optionalParametersAreNamed) {
       return methodName;
-    } else if (!signature.optionalParameters.isEmpty()) {
+    } else if (!signature.optionalParameters.isEmpty) {
       StringBuffer buffer = new StringBuffer();
       signature.orderedOptionalParameters.forEach((Element element) {
         buffer.add('\$${JsNames.getValid(element.name.slowToString())}');
@@ -163,6 +169,13 @@
     return 'set\$$fieldName';
   }
 
+  String publicGetterName(SourceString name) {
+    // We dynamically create getters from the field-name. The getter name must
+    // therefore be derived from the instance field-name.
+    String fieldName = safeName(name.slowToString());
+    return 'get\$$fieldName';
+  }
+
   String getterName(LibraryElement lib, SourceString name) {
     // We dynamically create getters from the field-name. The getter name must
     // therefore be derived from the instance field-name.
diff --git a/lib/compiler/implementation/js_backend/native_emitter.dart b/lib/compiler/implementation/js_backend/native_emitter.dart
index d4321b2..7b92fcd 100644
--- a/lib/compiler/implementation/js_backend/native_emitter.dart
+++ b/lib/compiler/implementation/js_backend/native_emitter.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of js_backend;
+
 class NativeEmitter {
 
   CodeEmitterTask emitter;
@@ -153,7 +155,7 @@
   void generateNativeClass(ClassElement classElement) {
     nativeClasses.add(classElement);
 
-    assert(classElement.backendMembers.isEmpty());
+    assert(classElement.backendMembers.isEmpty);
     String quotedName = classElement.nativeName.slowToString();
     if (isNativeLiteral(quotedName)) {
       generateNativeLiteral(classElement);
@@ -172,9 +174,9 @@
     CodeBuffer methodBuffer = new CodeBuffer();
     emitter.emitInstanceMembers(classElement, methodBuffer, false);
 
-    if (methodBuffer.isEmpty()
-        && fieldBuffer.isEmpty()
-        && getterSetterBuffer.isEmpty()) {
+    if (methodBuffer.isEmpty
+        && fieldBuffer.isEmpty
+        && getterSetterBuffer.isEmpty) {
       return;
     }
 
@@ -182,17 +184,17 @@
     nativeBuffer.add("$defineNativeClassName('$nativeName', ");
     nativeBuffer.add('{');
     bool firstInMap = true;
-    if (!fieldBuffer.isEmpty()) {
+    if (!fieldBuffer.isEmpty) {
       firstInMap = false;
       nativeBuffer.add(fieldBuffer);
     }
-    if (!getterSetterBuffer.isEmpty()) {
+    if (!getterSetterBuffer.isEmpty) {
       if (!firstInMap) nativeBuffer.add(",");
       firstInMap = false;
       nativeBuffer.add("\n ");
       nativeBuffer.add(getterSetterBuffer);
     }
-    if (!methodBuffer.isEmpty()) {
+    if (!methodBuffer.isEmpty) {
       if (!firstInMap) nativeBuffer.add(",");
       nativeBuffer.add(methodBuffer);
     }
@@ -275,7 +277,7 @@
   }
 
   void emitDynamicDispatchMetadata() {
-    if (classesWithDynamicDispatch.isEmpty()) return;
+    if (classesWithDynamicDispatch.isEmpty) return;
     int length = classesWithDynamicDispatch.length;
     nativeBuffer.add('// $length dynamic classes.\n');
 
@@ -295,12 +297,12 @@
     }
 
     Collection<ClassElement> dispatchClasses = classes.filter(
-        (cls) => !getDirectSubclasses(cls).isEmpty() &&
+        (cls) => !getDirectSubclasses(cls).isEmpty &&
                   classesWithDynamicDispatch.contains(cls));
 
     nativeBuffer.add('// ${classes.length} classes\n');
     Collection<ClassElement> classesThatHaveSubclasses = classes.filter(
-        (ClassElement t) => !getDirectSubclasses(t).isEmpty());
+        (ClassElement t) => !getDirectSubclasses(t).isEmpty);
     nativeBuffer.add('// ${classesThatHaveSubclasses.length} !leaf\n');
 
     // Generate code that builds the map from cls tags used in dynamic dispatch
@@ -365,7 +367,7 @@
     }
 
     // Write out a thunk that builds the metadata.
-    if (!tagDefns.isEmpty()) {
+    if (!tagDefns.isEmpty) {
       nativeBuffer.add('(function(){\n');
 
       for (final String varName in varNames) {
@@ -426,7 +428,7 @@
   }
 
   void assembleCode(CodeBuffer targetBuffer) {
-    if (nativeClasses.isEmpty()) return;
+    if (nativeClasses.isEmpty) return;
     emitDynamicDispatchMetadata();
     targetBuffer.add('$defineNativeClassName = '
                      '$defineNativeClassFunction;\n\n');
@@ -447,8 +449,8 @@
         'function() { return $toStringHelperName(this); }';
 
     // Same as above, but for hashCode.
-    String hashCodeName = backend.namer.publicInstanceMethodNameByArity(
-        const SourceString('hashCode'), 0);
+    String hashCodeName = backend.namer.publicGetterName(
+        const SourceString('hashCode'));
     objectProperties[hashCodeName] =
         'function() { return $hashCodeHelperName(this); }';
 
@@ -462,7 +464,7 @@
 
     // If we have any properties to add to Object.prototype, we run
     // through them and add them using defineProperty.
-    if (!objectProperties.isEmpty()) {
+    if (!objectProperties.isEmpty) {
       targetBuffer.add("(function(table) {\n"
                        "  for (var key in table) {\n"
                        "    $defPropName(Object.prototype, key, table[key]);\n"
diff --git a/lib/compiler/implementation/lib/constant_map.dart b/lib/compiler/implementation/lib/constant_map.dart
index 1407213..fcbd58a 100644
--- a/lib/compiler/implementation/lib/constant_map.dart
+++ b/lib/compiler/implementation/lib/constant_map.dart
@@ -11,7 +11,7 @@
   final List<String> _keys;
 
   bool containsValue(V needle) {
-    return getValues().some((V value) => value == needle);
+    return values.some((V value) => value == needle);
   }
 
   bool containsKey(String key) {
@@ -28,25 +28,25 @@
     _keys.forEach((String key) => f(key, this[key]));
   }
 
-  Collection<String> getKeys() => _keys;
+  Collection<String> get keys => _keys;
 
-  Collection<V> getValues() {
+  Collection<V> get values {
     List<V> result = <V>[];
     _keys.forEach((String key) => result.add(this[key]));
     return result;
   }
 
-  bool isEmpty() => length == 0;
+  bool get isEmpty => length == 0;
 
   String toString() => Maps.mapToString(this);
 
-  _throwImmutable() {
-    throw const IllegalAccessException();
+  _throwUnmodifiable() {
+    throw new UnsupportedError("Cannot modify unmodifiable Map");
   }
-  void operator []=(String key, V val) => _throwImmutable();
-  V putIfAbsent(String key, V ifAbsent()) => _throwImmutable();
-  V remove(String key) => _throwImmutable();
-  void clear() => _throwImmutable();
+  void operator []=(String key, V val) => _throwUnmodifiable();
+  V putIfAbsent(String key, V ifAbsent()) => _throwUnmodifiable();
+  V remove(String key) => _throwUnmodifiable();
+  void clear() => _throwUnmodifiable();
 }
 
 // This class has no constructor. This is on purpose since the instantiation
diff --git a/lib/compiler/implementation/lib/core_patch.dart b/lib/compiler/implementation/lib/core_patch.dart
index 9641920..d458e74 100644
--- a/lib/compiler/implementation/lib/core_patch.dart
+++ b/lib/compiler/implementation/lib/core_patch.dart
@@ -15,7 +15,7 @@
 
 // Patch for Object implementation.
 patch class Object {
-  patch int hashCode() => Primitives.objectHashCode(this);
+  patch int get hashCode => Primitives.objectHashCode(this);
 
   patch String toString() => Primitives.objectToString(this);
 
@@ -84,3 +84,60 @@
     return Primitives.objectToString(object);
   }
 }
+
+
+// Patch for Date implementation.
+patch class _DateImpl {
+  patch _DateImpl(int year,
+                  int month,
+                  int day,
+                  int hour,
+                  int minute,
+                  int second,
+                  int millisecond,
+                  bool isUtc)
+      : this.isUtc = checkNull(isUtc),
+        millisecondsSinceEpoch = Primitives.valueFromDecomposedDate(
+            year, month, day, hour, minute, second, millisecond, isUtc) {
+    Primitives.lazyAsJsDate(this);
+  }
+
+  patch _DateImpl.now()
+      : isUtc = false,
+        millisecondsSinceEpoch = Primitives.dateNow() {
+    Primitives.lazyAsJsDate(this);
+  }
+
+  patch static int _brokenDownDateToMillisecondsSinceEpoch(
+      int year, int month, int day, int hour, int minute, int second,
+      int millisecond, bool isUtc) {
+    return Primitives.valueFromDecomposedDate(
+        year, month, day, hour, minute, second, millisecond, isUtc);
+  }
+
+  patch String get timeZoneName {
+    if (isUtc) return "UTC";
+    return Primitives.getTimeZoneName(this);
+  }
+
+  patch Duration get timeZoneOffset {
+    if (isUtc) return new Duration();
+    return new Duration(minutes: Primitives.getTimeZoneOffsetInMinutes(this));
+  }
+
+  patch int get year => Primitives.getYear(this);
+
+  patch int get month => Primitives.getMonth(this);
+
+  patch int get day => Primitives.getDay(this);
+
+  patch int get hour => Primitives.getHours(this);
+
+  patch int get minute => Primitives.getMinutes(this);
+
+  patch int get second => Primitives.getSeconds(this);
+
+  patch int get millisecond => Primitives.getMilliseconds(this);
+
+  patch int get weekday => Primitives.getWeekday(this);
+}
diff --git a/lib/compiler/implementation/lib/coreimpl_patch.dart b/lib/compiler/implementation/lib/coreimpl_patch.dart
index 9b63064..ef73b1c 100644
--- a/lib/compiler/implementation/lib/coreimpl_patch.dart
+++ b/lib/compiler/implementation/lib/coreimpl_patch.dart
@@ -69,65 +69,6 @@
 }
 
 
-// Patch for Date implementation.
-// TODO(ager): Split out into date_patch.dart and allow #source
-// in patch files?
-patch class DateImplementation {
-  patch DateImplementation(int year,
-                           int month,
-                           int day,
-                           int hour,
-                           int minute,
-                           int second,
-                           int millisecond,
-                           bool isUtc)
-      : this.isUtc = checkNull(isUtc),
-        millisecondsSinceEpoch = Primitives.valueFromDecomposedDate(
-            year, month, day, hour, minute, second, millisecond, isUtc) {
-    Primitives.lazyAsJsDate(this);
-  }
-
-  patch DateImplementation.now()
-      : isUtc = false,
-        millisecondsSinceEpoch = Primitives.dateNow() {
-    Primitives.lazyAsJsDate(this);
-  }
-
-  patch static int _brokenDownDateToMillisecondsSinceEpoch(
-      int year, int month, int day, int hour, int minute, int second,
-      int millisecond, bool isUtc) {
-    return Primitives.valueFromDecomposedDate(
-        year, month, day, hour, minute, second, millisecond, isUtc);
-  }
-
-  patch String get timeZoneName {
-    if (isUtc) return "UTC";
-    return Primitives.getTimeZoneName(this);
-  }
-
-  patch Duration get timeZoneOffset {
-    if (isUtc) return new Duration();
-    return new Duration(minutes: Primitives.getTimeZoneOffsetInMinutes(this));
-  }
-
-  patch int get year => Primitives.getYear(this);
-
-  patch int get month => Primitives.getMonth(this);
-
-  patch int get day => Primitives.getDay(this);
-
-  patch int get hour => Primitives.getHours(this);
-
-  patch int get minute => Primitives.getMinutes(this);
-
-  patch int get second => Primitives.getSeconds(this);
-
-  patch int get millisecond => Primitives.getMilliseconds(this);
-
-  patch int get weekday => Primitives.getWeekday(this);
-}
-
-
 // Patch for Stopwatch implementation.
 // TODO(ager): Split out into stopwatch_patch.dart and allow #source
 // in patch files?
@@ -191,22 +132,20 @@
 class _MatchImplementation implements Match {
   final String pattern;
   final String str;
-  final int _start;
-  final int _end;
+  final int start;
+  final int end;
   final List<String> _groups;
 
   const _MatchImplementation(
       String this.pattern,
       String this.str,
-      int this._start,
-      int this._end,
+      int this.start,
+      int this.end,
       List<String> this._groups);
 
-  int start() => _start;
-  int end() => _end;
   String group(int index) => _groups[index];
   String operator [](int index) => group(index);
-  int groupCount() => _groups.length - 1;
+  int get groupCount => _groups.length - 1;
 
   List<String> groups(List<int> groups) {
     List<String> out = [];
@@ -236,8 +175,8 @@
     : _done = false, _re = JSSyntaxRegExp._globalVersionOf(re);
 
   Match next() {
-    if (!hasNext()) {
-      throw const NoMoreElementsException();
+    if (!hasNext) {
+      throw new StateError("No more elements");
     }
 
     // _next is set by [hasNext].
@@ -246,7 +185,7 @@
     return next;
   }
 
-  bool hasNext() {
+  bool get hasNext {
     if (_done) {
       return false;
     } else if (_next != null) {
diff --git a/lib/compiler/implementation/lib/interceptors.dart b/lib/compiler/implementation/lib/interceptors.dart
index 8aa6509..1467ca8 100644
--- a/lib/compiler/implementation/lib/interceptors.dart
+++ b/lib/compiler/implementation/lib/interceptors.dart
@@ -101,11 +101,11 @@
   }
 }
 
-isEmpty(receiver) {
+get$isEmpty(receiver) {
   if (receiver is String || isJsArray(receiver)) {
     return JS('bool', r'#.length === 0', receiver);
   }
-  return UNINTERCEPTED(receiver.isEmpty());
+  return UNINTERCEPTED(receiver.isEmpty);
 }
 
 compareTo(a, b) {
@@ -116,15 +116,15 @@
       return 1;
     } else if (a == b) {
       if (a == 0) {
-        bool aIsNegative = a.isNegative();
-        bool bIsNegative = b.isNegative();
+        bool aIsNegative = a.isNegative;
+        bool bIsNegative = b.isNegative;
         if (aIsNegative == bIsNegative) return 0;
         if (aIsNegative) return -1;
         return 1;
       }
       return 0;
-    } else if (a.isNaN()) {
-      if (b.isNaN()) {
+    } else if (a.isNaN) {
+      if (b.isNaN) {
         return 0;
       }
       return 1;
@@ -145,7 +145,7 @@
 
   // TODO(ahe): Use for-in when it is implemented correctly.
   var iterator = collection.iterator();
-  while (iterator.hasNext()) {
+  while (iterator.hasNext) {
     receiver.add(iterator.next());
   }
 }
@@ -246,9 +246,9 @@
   return listInsertRange(receiver, start, length, initialValue);
 }
 
-last(receiver) {
+get$last(receiver) {
   if (!isJsArray(receiver)) {
-    return UNINTERCEPTED(receiver.last());
+    return UNINTERCEPTED(receiver.last);
   }
   return receiver[receiver.length - 1];
 }
@@ -364,28 +364,28 @@
 sort$0(receiver) {
   if (!isJsArray(receiver)) return UNINTERCEPTED(receiver.sort());
   checkMutable(receiver, 'sort');
-  DualPivotQuicksort.sort(receiver, Comparable.compare);
+  coreSort(receiver, Comparable.compare);
 }
 
 sort$1(receiver, compare) {
   if (!isJsArray(receiver)) return UNINTERCEPTED(receiver.sort(compare));
   checkMutable(receiver, 'sort');
-  DualPivotQuicksort.sort(receiver, compare);
+  coreSort(receiver, compare);
 }
 
-isNegative(receiver) {
+get$isNegative(receiver) {
   if (receiver is num) {
     return (receiver == 0) ? (1 / receiver) < 0 : receiver < 0;
   } else {
-    return UNINTERCEPTED(receiver.isNegative());
+    return UNINTERCEPTED(receiver.isNegative);
   }
 }
 
-isNaN(receiver) {
+get$isNaN(receiver) {
   if (receiver is num) {
     return JS('bool', r'isNaN(#)', receiver);
   } else {
-    return UNINTERCEPTED(receiver.isNaN());
+    return UNINTERCEPTED(receiver.isNaN);
   }
 }
 
@@ -406,9 +406,9 @@
 toInt(receiver) {
   if (receiver is !num) return UNINTERCEPTED(receiver.toInt());
 
-  if (receiver.isNaN()) throw new FormatException('NaN');
+  if (receiver.isNaN) throw new FormatException('NaN');
 
-  if (receiver.isInfinite()) throw new FormatException('Infinity');
+  if (receiver.isInfinite) throw new FormatException('Infinity');
 
   var truncated = receiver.truncate();
   return JS('bool', r'# == -0.0', truncated) ? 0 : truncated;
@@ -426,8 +426,8 @@
   return JS('num', r'Math.floor(#)', receiver);
 }
 
-isInfinite(receiver) {
-  if (receiver is !num) return UNINTERCEPTED(receiver.isInfinite());
+get$isInfinite(receiver) {
+  if (receiver is !num) return UNINTERCEPTED(receiver.isInfinite);
 
   return JS('bool', r'# == Infinity', receiver)
     || JS('bool', r'# == -Infinity', receiver);
@@ -462,7 +462,7 @@
   checkNum(fractionDigits);
 
   String result = JS('String', r'#.toFixed(#)', receiver, fractionDigits);
-  if (receiver == 0 && receiver.isNegative()) return "-$result";
+  if (receiver == 0 && receiver.isNegative) return "-$result";
   return result;
 }
 
@@ -477,7 +477,7 @@
   } else {
     result = JS('String', r'#.toExponential()', receiver);
   }
-  if (receiver == 0 && receiver.isNegative()) return "-$result";
+  if (receiver == 0 && receiver.isNegative) return "-$result";
   return result;
 }
 
@@ -489,7 +489,7 @@
 
   String result = JS('String', r'#.toPrecision(#)',
                      receiver, fractionDigits);
-  if (receiver == 0 && receiver.isNegative()) return "-$result";
+  if (receiver == 0 && receiver.isNegative) return "-$result";
   return result;
 }
 
@@ -626,14 +626,14 @@
  *
  * [1]: http://en.wikipedia.org/wiki/Jenkins_hash_function
  */
-hashCode(receiver) {
+get$hashCode(receiver) {
   // TODO(ahe): This method shouldn't have to use JS. Update when our
   // optimizations are smarter.
   if (receiver == null) return 0;
   if (receiver is num) return JS('int', r'# & 0x1FFFFFFF', receiver);
   if (receiver is bool) return receiver ? 0x40377024 : 0xc18c0076;
   if (isJsArray(receiver)) return Primitives.objectHashCode(receiver);
-  if (receiver is !String) return UNINTERCEPTED(receiver.hashCode());
+  if (receiver is !String) return UNINTERCEPTED(receiver.hashCode);
   int hash = 0;
   int length = JS('int', r'#.length', receiver);
   for (int i = 0; i < length; i++) {
@@ -646,8 +646,8 @@
   return 0x1fffffff & (hash + JS('int', r'# << #', 0x00003fff & hash, 15));
 }
 
-charCodes(receiver) {
-  if (receiver is !String) return UNINTERCEPTED(receiver.charCodes());
+get$charCodes(receiver) {
+  if (receiver is !String) return UNINTERCEPTED(receiver.charCodes);
   int len = receiver.length;
   List<int> result = new List<int>(len);
   for (int i = 0; i < len; i++) {
@@ -656,13 +656,13 @@
   return result;
 }
 
-isEven(receiver) {
-  if (receiver is !int) return UNINTERCEPTED(receiver.isEven());
+get$isEven(receiver) {
+  if (receiver is !int) return UNINTERCEPTED(receiver.isEven);
   return (receiver & 1) == 0;
 }
 
-isOdd(receiver) {
-  if (receiver is !int) return UNINTERCEPTED(receiver.isOdd());
+get$isOdd(receiver) {
+  if (receiver is !int) return UNINTERCEPTED(receiver.isOdd);
   return (receiver & 1) == 1;
 }
 
@@ -687,5 +687,3 @@
 // TODO(lrn): These getters should be generated automatically for all
 // intercepted methods.
 get$toString(receiver) => () => toString(receiver);
-
-get$hashCode(receiver) => () => hashCode(receiver);
diff --git a/lib/compiler/implementation/lib/io.dart b/lib/compiler/implementation/lib/io.dart
index 8d544b2..aeeff9e 100644
--- a/lib/compiler/implementation/lib/io.dart
+++ b/lib/compiler/implementation/lib/io.dart
@@ -80,7 +80,7 @@
 
   /** Converts an OSError object to a string representation. */
   String toString() {
-    throw UnsupportedOperationException('OSError.toString');
+    throw new UnsupportedError('OSError.toString');
   }
 
   /**
@@ -97,52 +97,52 @@
 }
 
 List _ensureFastAndSerializableBuffer(List buffer, int offset, int bytes) {
-  throw new UnsupportedOperationException('_ensureFastAndSerializableBuffer');
+  throw new UnsupportedError('_ensureFastAndSerializableBuffer');
 }
 
 class _File {
   factory _File(arg) {
-    throw new UnsupportedOperationException('new File($arg)');
+    throw new UnsupportedError('new File($arg)');
   }
 
   factory _File.fromPath(arg) {
-    throw new UnsupportedOperationException('new File.fromPath($arg)');
+    throw new UnsupportedError('new File.fromPath($arg)');
   }
 }
 
 class _Platform {
   static int get numberOfProcessors {
-    throw new UnsupportedOperationException('_Platform.numberOfProcessors');
+    throw new UnsupportedError('_Platform.numberOfProcessors');
   }
 
   static String get pathSeparator {
-    throw new UnsupportedOperationException('_Platform.pathSeparator');
+    throw new UnsupportedError('_Platform.pathSeparator');
   }
 
   static String get operatingSystem {
-    throw new UnsupportedOperationException('_Platform.operatingSystem');
+    throw new UnsupportedError('_Platform.operatingSystem');
   }
 
   static String get localHostname {
-    throw new UnsupportedOperationException('_Platform.localHostname');
+    throw new UnsupportedError('_Platform.localHostname');
   }
 
   static Map<String, String> get environment {
-    throw new UnsupportedOperationException('_Platform.environment');
+    throw new UnsupportedError('_Platform.environment');
   }
 }
 
 class _Directory {
   factory _Directory(arg) {
-    throw new UnsupportedOperationException('new Directory($arg)');
+    throw new UnsupportedError('new Directory($arg)');
   }
 
   factory _Directory.fromPath(arg) {
-    throw new UnsupportedOperationException('new Directory.fromPath($arg)');
+    throw new UnsupportedError('new Directory.fromPath($arg)');
   }
 
   factory _Directory.current() {
-    throw new UnsupportedOperationException('new Directory.current()');
+    throw new UnsupportedError('new Directory.current()');
   }
 }
 
@@ -150,7 +150,7 @@
 }
 
 void _exit(int exitCode) {
-  throw new UnsupportedOperationException("exit($exitCode)");
+  throw new UnsupportedError("exit($exitCode)");
 }
 
 class _Process {
@@ -158,50 +158,50 @@
                                List<String> arguments,
                                [ProcessOptions options]) {
     var msg = 'Process.start($executable, $arguments, $options)';
-    throw new UnsupportedOperationException(msg);
+    throw new UnsupportedError(msg);
   }
 
   static Future<ProcessResult> run(String executable,
                                    List<String> arguments,
                                    [ProcessOptions options]) {
     var msg = 'Process.run($executable, $arguments, $options)';
-    throw new UnsupportedOperationException(msg);
+    throw new UnsupportedError(msg);
   }
 }
 
 class _ServerSocket {
   factory _ServerSocket(String bindAddress, int port, int backlog) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         'new ServerSocket($bindAddress, $port, $backlog)');
   }
 }
 
 class _Socket {
   factory _Socket(String host, int port) {
-    throw new UnsupportedOperationException('new Socket($host, $port)');
+    throw new UnsupportedError('new Socket($host, $port)');
   }
 }
 
 class _EventHandler {
   factory _EventHandler() {
-    throw new UnsupportedOperationException('new _EventHandler()');
+    throw new UnsupportedError('new _EventHandler()');
   }
 
   static void _start() {
-    throw new UnsupportedOperationException('_EventHandler._start()');
+    throw new UnsupportedError('_EventHandler._start()');
   }
 
   static _sendData(int id, ReceivePort receivePort, int data) {
     var msg = '_EventHandler._sendData($id, $receivePort, $data)';
-    throw new UnsupportedOperationException(msg);
+    throw new UnsupportedError(msg);
   }
 
   static _EventHandler get _eventHandler {
-    throw new UnsupportedOperationException('_EventHandler._eventhandler');
+    throw new UnsupportedError('_EventHandler._eventhandler');
   }
 
   static void set _eventHandler(_EventHandler e) {
-    throw new UnsupportedOperationException('_EventHandler._eventhandler = $e');
+    throw new UnsupportedError('_EventHandler._eventhandler = $e');
   }
 }
 
diff --git a/lib/compiler/implementation/lib/isolate_patch.dart b/lib/compiler/implementation/lib/isolate_patch.dart
index 5bec001..58b8093 100644
--- a/lib/compiler/implementation/lib/isolate_patch.dart
+++ b/lib/compiler/implementation/lib/isolate_patch.dart
@@ -85,7 +85,7 @@
 // TODO(eub, sigmund): move the "manager" to be entirely in JS.
 // Running any Dart code outside the context of an isolate gives it
 // the change to break the isolate abstraction.
-_Manager get _globalState() => JS("Object", r"$globalState");
+_Manager get _globalState => JS("Object", r"$globalState");
 set _globalState(_Manager val) {
   JS("void", r"$globalState = #", val);
 }
@@ -106,7 +106,7 @@
 patch SendPort spawnFunction(void topLevelFunction()) {
   final name = _IsolateNatives._getJSFunctionName(topLevelFunction);
   if (name == null) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "only top-level functions can be spawned.");
   }
   return _IsolateNatives._spawn(name, null, false);
@@ -208,7 +208,7 @@
 
   /** Close the worker running this code if all isolates are done. */
   void maybeCloseWorker() {
-    if (isolates.isEmpty()) {
+    if (isolates.isEmpty) {
       mainManager.postMessage(_serializeMessage({'command': 'close'}));
     }
   }
@@ -269,7 +269,7 @@
   /** Unregister a port on this isolate. */
   void unregister(int portId) {
     ports.remove(portId);
-    if (ports.isEmpty()) {
+    if (ports.isEmpty) {
       _globalState.isolates.remove(id); // indicate this isolate is not active
     }
   }
@@ -286,7 +286,7 @@
   }
 
   _IsolateEvent dequeue() {
-    if (events.isEmpty()) return null;
+    if (events.isEmpty) return null;
     return events.removeFirst();
   }
 
@@ -300,7 +300,7 @@
                  _globalState.isolates.containsKey(
                      _globalState.rootContext.id) &&
                  _globalState.fromCommandLine &&
-                 _globalState.rootContext.ports.isEmpty()) {
+                 _globalState.rootContext.ports.isEmpty) {
         // We want to reach here only on the main [_Manager] and only
         // on the command-line.  In the browser the isolate might
         // still be alive due to DOM callbacks, but the presumption is
@@ -409,7 +409,7 @@
    * The src url for the script tag that loaded this code. Used to create
    * JavaScript workers.
    */
-  static String get _thisScript() => JS("String", r"$thisScriptUrl");
+  static String get _thisScript => JS("String", r"$thisScriptUrl");
 
   /** Starts a new worker with the given URL. */
   static _WorkerStub _newWorker(url) => JS("Object", r"new Worker(#)", url);
@@ -561,7 +561,7 @@
   static SendPort _startNonWorker(
       String functionName, String uri, SendPort replyPort) {
     // TODO(eub): support IE9 using an iframe -- Dart issue 1702.
-    if (uri != null) throw new UnsupportedOperationException(
+    if (uri != null) throw new UnsupportedError(
             "Currently spawnUri is not supported without web workers.");
     _globalState.topEventLoop.enqueue(new _IsolateContext(), function() {
       final func = _getJSFunctionFromName(functionName);
@@ -650,7 +650,7 @@
 
   abstract void send(var message, [SendPort replyTo]);
   abstract bool operator ==(var other);
-  abstract int hashCode();
+  abstract int get hashCode;
 }
 
 /** A send port that delivers messages in-memory via native JavaScript calls. */
@@ -697,7 +697,7 @@
   bool operator ==(var other) => (other is _NativeJsSendPort) &&
       (_receivePort == other._receivePort);
 
-  int hashCode() => _receivePort._id;
+  int get hashCode => _receivePort._id;
 }
 
 /** A send port that delivers messages via worker.postMessage. */
@@ -734,7 +734,7 @@
         (_receivePortId == other._receivePortId);
   }
 
-  int hashCode() {
+  int get hashCode {
     // TODO(sigmund): use a standard hash when we get one available in corelib.
     return (_workerId << 16) ^ (_isolateId << 8) ^ _receivePortId;
   }
@@ -787,7 +787,7 @@
 
   bool operator ==(var other) =>
       other is _BufferingSendPort && _id == other._id;
-  int hashCode() => _id;
+  int get hashCode => _id;
 }
 
 /** Default factory for receive ports. */
@@ -855,8 +855,8 @@
 
     _visited[map] = true;
     // TODO(sigmund): replace with the following: (bug #1660)
-    // map.getValues().forEach(_dispatch);
-    map.getValues().forEach((e) => _dispatch(e));
+    // map.values.forEach(_dispatch);
+    map.values.forEach((e) => _dispatch(e));
   }
 
   visitSendPort(SendPort port) {
@@ -1153,8 +1153,8 @@
 
     int id = _nextFreeRefId++;
     _visited[map] = id;
-    var keys = _serializeList(map.getKeys());
-    var values = _serializeList(map.getValues());
+    var keys = _serializeList(map.keys);
+    var values = _serializeList(map.values);
     // TODO(floitsch): we are losing the generic type.
     return ['map', id, keys, values];
   }
diff --git a/lib/compiler/implementation/lib/js_helper.dart b/lib/compiler/implementation/lib/js_helper.dart
index d2e5810..fcfa49b 100644
--- a/lib/compiler/implementation/lib/js_helper.dart
+++ b/lib/compiler/implementation/lib/js_helper.dart
@@ -323,13 +323,13 @@
 
 checkMutable(list, reason) {
   if (JS('bool', r'!!(#.immutable$list)', list)) {
-    throw new UnsupportedOperationException(reason);
+    throw new UnsupportedError(reason);
   }
 }
 
 checkGrowable(list, reason) {
   if (JS('bool', r'!!(#.fixed$length)', list)) {
-    throw new UnsupportedOperationException(reason);
+    throw new UnsupportedError(reason);
   }
 }
 
@@ -343,9 +343,9 @@
   int i;
   List<T> list;
   ListIterator(List<T> this.list) : i = 0;
-  bool hasNext() => i < JS('int', r'#.length', list);
+  bool get hasNext => i < JS('int', r'#.length', list);
   T next() {
-    if (!hasNext()) throw new NoMoreElementsException();
+    if (!hasNext) throw new StateError("No more elements");
     var value = JS('Object', r'#[#]', list, i);
     i += 1;
     return value;
@@ -409,7 +409,7 @@
     var base = 10;
     if (match[1] != null) base = 16;
     var result = JS('num', r'parseInt(#, #)', string, base);
-    if (result.isNaN()) throw new FormatException(string);
+    if (result.isNaN) throw new FormatException(string);
     return result;
   }
 
@@ -427,7 +427,7 @@
       throw new FormatException(string);
     }
     var result = JS('num', r'parseFloat(#)', string);
-    if (result.isNaN() && string != 'NaN') {
+    if (result.isNaN && string != 'NaN') {
       throw new FormatException(string);
     }
     return result;
@@ -509,7 +509,7 @@
       value = JS('num', r'new Date(#, #, #, #, #, #, #).valueOf()',
                  years, jsMonth, day, hours, minutes, seconds, milliseconds);
     }
-    if (value.isNaN() ||
+    if (value.isNaN ||
         value < -MAX_MILLISECONDS_SINCE_EPOCH ||
         value > MAX_MILLISECONDS_SINCE_EPOCH) {
       throw new ArgumentError();
@@ -537,6 +537,10 @@
     return JS('Date', r'#.date', receiver);
   }
 
+  // The getters for date and time parts below add a positive integer to ensure
+  // that the result is really an integer, because the JavaScript implementation
+  // may return -0.0 instead of 0.
+
   static getYear(receiver) {
     return (receiver.isUtc)
       ? JS('int', r'(#.getUTCFullYear() + 0)', lazyAsJsDate(receiver))
@@ -591,7 +595,7 @@
     checkNull(str);
     if (str is !String) throw new ArgumentError(str);
     var value = JS('num', r'Date.parse(#)', str);
-    if (value.isNaN()) throw new ArgumentError(str);
+    if (value.isNaN) throw new ArgumentError(str);
     return value;
   }
 
@@ -625,10 +629,10 @@
 
     // Sort the named arguments to get the right selector name and
     // arguments order.
-    if (namedArguments != null && !namedArguments.isEmpty()) {
+    if (namedArguments != null && !namedArguments.isEmpty) {
       // Call new List.from to make sure we get a JavaScript array.
       List<String> listOfNamedArguments =
-          new List<String>.from(namedArguments.getKeys());
+          new List<String>.from(namedArguments.keys);
       argumentCount += namedArguments.length;
       // We're sorting on strings, and the behavior is the same between
       // Dart string sort and JS string sort. To avoid needing the Dart
@@ -757,7 +761,7 @@
       base = 16;
     }
     var ret = JS('num', r'parseInt(#, #)', trimmed, base);
-    if (ret.isNaN()) throw new FormatException(str);
+    if (ret.isNaN) throw new FormatException(str);
     return ret;
   }
 
@@ -768,7 +772,7 @@
       // TODO(ahe): This is unspecified, but tested by co19.
       ret = JS('num', r'parseInt(#)', str);
     }
-    if (ret.isNaN() && str != 'NaN' && str != '-NaN') {
+    if (ret.isNaN && str != 'NaN' && str != '-NaN') {
       throw new FormatException(str);
     }
     return ret;
@@ -882,17 +886,9 @@
         type == 'called_non_callable' ||
         type == 'non_object_property_call' ||
         type == 'non_object_property_load') {
-      if (name is String && name.startsWith(r'call$')) {
-        return new ObjectNotClosureException();
-      } else {
-        return new NullPointerException();
-      }
+      return new NullPointerException();
     } else if (type == 'undefined_method') {
-      if (name is String && name.startsWith(r'call$')) {
-        return new ObjectNotClosureException();
-      } else {
-        return new NoSuchMethodError('', name, []);
-      }
+      return new NoSuchMethodError('', name, []);
     }
 
     var ieErrorCode = JS('int', '#.number & 0xffff', ex);
@@ -925,7 +921,7 @@
 
   if (JS('bool', r'# instanceof RangeError', ex)) {
     if (message is String && message.contains('call stack')) {
-      return new StackOverflowException();
+      return new StackOverflowError();
     }
 
     // In general, a RangeError is thrown when trying to pass a number
@@ -939,7 +935,7 @@
          r"typeof InternalError == 'function' && # instanceof InternalError",
          ex)) {
     if (message is String && message == 'too much recursion') {
-      return new StackOverflowException();
+      return new StackOverflowError();
     }
   }
 
@@ -971,7 +967,7 @@
 makeLiteralMap(List keyValuePairs) {
   Iterator iterator = keyValuePairs.iterator();
   Map result = new LinkedHashMap();
-  while (iterator.hasNext()) {
+  while (iterator.hasNext) {
     String key = iterator.next();
     var value = iterator.next();
     result[key] = value;
@@ -1052,7 +1048,7 @@
  */
 class Null {
   factory Null() {
-    throw new UnsupportedOperationException('new Null()');
+    throw new UnsupportedError('new Null()');
   }
 }
 
diff --git a/lib/compiler/implementation/lib/mirrors.dart b/lib/compiler/implementation/lib/mirrors.dart
index f717d9b..243de22 100644
--- a/lib/compiler/implementation/lib/mirrors.dart
+++ b/lib/compiler/implementation/lib/mirrors.dart
@@ -13,14 +13,14 @@
  */
 class _Mirrors {
   static MirrorSystem currentMirrorSystem() {
-    throw new UnsupportedOperationException("MirrorSystem not implemented");
+    throw new UnsupportedError("MirrorSystem not implemented");
   }
 
   static Future<MirrorSystem> mirrorSystemOf(SendPort port) {
-    throw new UnsupportedOperationException("MirrorSystem not implemented");
+    throw new UnsupportedError("MirrorSystem not implemented");
   }
 
   static InstanceMirror reflect(Object reflectee) {
-    throw new UnsupportedOperationException("MirrorSystem not implemented");
+    throw new UnsupportedError("MirrorSystem not implemented");
   }
 }
diff --git a/lib/compiler/implementation/lib/scalarlist_patch.dart b/lib/compiler/implementation/lib/scalarlist_patch.dart
index b8df2d4..f743916 100644
--- a/lib/compiler/implementation/lib/scalarlist_patch.dart
+++ b/lib/compiler/implementation/lib/scalarlist_patch.dart
@@ -8,111 +8,111 @@
 
 patch class Int8List {
   patch factory Int8List(int length) {
-    throw new UnsupportedOperationException('Int8List');
+    throw new UnsupportedError('Int8List');
   }
 
   patch factory Int8List.view(ByteArray array, [int start = 0, int length]) {
-    throw new UnsupportedOperationException('Int8List.view');
+    throw new UnsupportedError('Int8List.view');
   }
 }
 
 
 patch class Uint8List {
   patch factory Uint8List(int length) {
-    throw new UnsupportedOperationException('Uint8List');
+    throw new UnsupportedError('Uint8List');
   }
 
   patch factory Uint8List.view(ByteArray array,
                                [int start = 0, int length]) {
-    throw new UnsupportedOperationException('Uint8List.view');
+    throw new UnsupportedError('Uint8List.view');
   }
 }
 
 
 patch class Int16List {
   patch factory Int16List(int length) {
-    throw new UnsupportedOperationException('Int16List');
+    throw new UnsupportedError('Int16List');
 
   }
 
   patch factory Int16List.view(ByteArray array, [int start = 0, int length]) {
-    throw new UnsupportedOperationException('Int16List.view');
+    throw new UnsupportedError('Int16List.view');
   }
 }
 
 
 patch class Uint16List {
   patch factory Uint16List(int length) {
-    throw new UnsupportedOperationException('Uint16List');
+    throw new UnsupportedError('Uint16List');
   }
 
   patch factory Uint16List.view(ByteArray array, [int start = 0, int length]) {
-    throw new UnsupportedOperationException('Uint16List.view');
+    throw new UnsupportedError('Uint16List.view');
   }
 }
 
 
 patch class Int32List {
   patch factory Int32List(int length) {
-    throw new UnsupportedOperationException('Int32List');
+    throw new UnsupportedError('Int32List');
   }
 
   patch factory Int32List.view(ByteArray array, [int start = 0, int length]) {
-    throw new UnsupportedOperationException('Int32List.view');
+    throw new UnsupportedError('Int32List.view');
   }
 }
 
 
 patch class Uint32List {
   patch factory Uint32List(int length) {
-    throw new UnsupportedOperationException('Uint32List');
+    throw new UnsupportedError('Uint32List');
   }
 
   patch factory Uint32List.view(ByteArray array, [int start = 0, int length]) {
-    throw new UnsupportedOperationException('Uint32List.view');
+    throw new UnsupportedError('Uint32List.view');
   }
 }
 
 
 patch class Int64List {
   patch factory Int64List(int length) {
-    throw new UnsupportedOperationException('Int64List');
+    throw new UnsupportedError('Int64List');
   }
 
   patch factory Int64List.view(ByteArray array, [int start = 0, int length]) {
-    throw new UnsupportedOperationException('Int64List.view');
+    throw new UnsupportedError('Int64List.view');
   }
 }
 
 
 patch class Uint64List {
   patch factory Uint64List(int length) {
-    throw new UnsupportedOperationException('Uint64List');
+    throw new UnsupportedError('Uint64List');
   }
 
   patch factory Uint64List.view(ByteArray array, [int start = 0, int length]) {
-    throw new UnsupportedOperationException('Uint64List.view');
+    throw new UnsupportedError('Uint64List.view');
   }
 }
 
 
 patch class Float32List {
   patch factory Float32List(int length) {
-    throw new UnsupportedOperationException('Float32List');
+    throw new UnsupportedError('Float32List');
   }
 
   patch factory Float32List.view(ByteArray array, [int start = 0, int length]) {
-    throw new UnsupportedOperationException('Float32List.view');
+    throw new UnsupportedError('Float32List.view');
   }
 }
 
 
 patch class Float64List {
   patch factory Float64List(int length) {
-    throw new UnsupportedOperationException('Float64List');
+    throw new UnsupportedError('Float64List');
   }
 
   patch factory Float64List.view(ByteArray array, [int start = 0, int length]) {
-    throw new UnsupportedOperationException('Float64List.view');
+    throw new UnsupportedError('Float64List.view');
   }
 }
diff --git a/lib/compiler/implementation/lib/string_helper.dart b/lib/compiler/implementation/lib/string_helper.dart
index a4b4ef4..eaf132c 100644
--- a/lib/compiler/implementation/lib/string_helper.dart
+++ b/lib/compiler/implementation/lib/string_helper.dart
@@ -3,14 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class StringMatch implements Match {
-  const StringMatch(int this._start,
+  const StringMatch(int this.start,
                     String this.str,
                     String this.pattern);
 
-  int start() => _start;
-  int end() => _start + pattern.length;
+  int get end => start + pattern.length;
   String operator[](int g) => group(g);
-  int groupCount() => 0;
+  int get groupCount => 0;
 
   String group(int group_) {
     if (group_ != 0) {
@@ -27,7 +26,7 @@
     return result;
   }
 
-  final int _start;
+  final int start;
   final String str;
   final String pattern;
 }
@@ -64,7 +63,7 @@
     return other.hasMatch(receiver.substring(startIndex));
   } else {
     var substr = receiver.substring(startIndex);
-    return other.allMatches(substr).iterator().hasNext();
+    return other.allMatches(substr).iterator().hasNext;
   }
 }
 
diff --git a/lib/compiler/implementation/library_loader.dart b/lib/compiler/implementation/library_loader.dart
index 7d6bef4..9b56a38 100644
--- a/lib/compiler/implementation/library_loader.dart
+++ b/lib/compiler/implementation/library_loader.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 /**
  * [CompilerTask] for loading libraries and setting up the import/export scopes.
  */
@@ -127,7 +129,7 @@
   String get name => 'LibraryLoader';
 
   final Map<String, LibraryElement> libraryNames =
-      new Map<String, LibraryElement>();
+      new LinkedHashMap<String, LibraryElement>();
 
   LibraryDependencyHandler currentHandler;
 
@@ -445,6 +447,9 @@
  */
 class LibraryDependencyNode {
   final LibraryElement library;
+  int get hashCode => ++hashCodeCounter; // VM implementation of hashCode is slow.
+  static int hashCodeCounter = 0;
+
 
   /**
    * A linked list of the import tags that import [library] mapped to the
@@ -463,7 +468,8 @@
    * The export scope for [library] which is gradually computed by the work-list
    * computation in [LibraryDependencyHandler.computeExports].
    */
-  Map<SourceString, Element> exportScope = new Map<SourceString, Element>();
+  Map<SourceString, Element> exportScope =
+      new LinkedHashMap<SourceString, Element>();
 
   /**
    * The set of exported elements that need to be propageted to dependent
@@ -500,7 +506,7 @@
    */
   void registerInitialExports() {
     pendingExportSet.addAll(
-        library.localScope.getValues().filter((Element element) {
+        library.localScope.values.filter((Element element) {
           // At this point [localScope] only contains members so we don't need
           // to check for foreign or prefix elements.
           return !element.name.isPrivate();
@@ -511,7 +517,7 @@
    * Registers the compute export scope with the node library.
    */
   void registerExports() {
-    library.setExports(exportScope.getValues());
+    library.setExports(exportScope.values);
   }
 
   /**
@@ -600,7 +606,7 @@
    * already been computed.
    */
   Map<LibraryElement,LibraryDependencyNode> nodeMap =
-      new Map<LibraryElement,LibraryDependencyNode>();
+      new LinkedHashMap<LibraryElement,LibraryDependencyNode>();
 
   LibraryDependencyHandler(Compiler this.compiler);
 
@@ -613,8 +619,19 @@
     bool changed = true;
     while (changed) {
       changed = false;
+      Map<LibraryDependencyNode, List<Element>> tasks =
+          new LinkedHashMap<LibraryDependencyNode, List<Element>>();
+
+      // Locally defined elements take precedence over exported
+      // elements.  So we must propagate local elements first.  We
+      // ensure this by pulling the pending exports before
+      // propagating.  This enforces that we handle exports
+      // breadth-first, with locally defined elements being level 0.
       nodeMap.forEach((_, LibraryDependencyNode node) {
-        var pendingExports = node.pullPendingExports();
+        List<Element> pendingExports = node.pullPendingExports();
+        tasks[node] = pendingExports;
+      });
+      tasks.forEach((LibraryDependencyNode node, List<Element> pendingExports) {
         pendingExports.forEach((Element element) {
           element = node.addElementToExportScope(compiler, element);
           if (node.propagateElement(element)) {
diff --git a/lib/compiler/implementation/patch_parser.dart b/lib/compiler/implementation/patch_parser.dart
index 9d1b7d3..009e22d 100644
--- a/lib/compiler/implementation/patch_parser.dart
+++ b/lib/compiler/implementation/patch_parser.dart
@@ -181,7 +181,7 @@
       Token token = parser.parseTopLevelDeclaration(element.beginToken);
       assert(identical(token, element.endToken.next));
       element.cachedNode = listener.popNode();
-      assert(listener.nodes.isEmpty());
+      assert(listener.nodes.isEmpty);
 
       Link<Element> patches = element.localMembers;
       applyContainerPatch(element.origin, patches);
@@ -190,7 +190,7 @@
 
   void applyContainerPatch(ScopeContainerElement original,
                            Link<Element> patches) {
-    while (!patches.isEmpty()) {
+    while (!patches.isEmpty) {
       Element patchElement = patches.head;
       Element originalElement = original.localLookup(patchElement.name);
       if (patchElement.isAccessor() && originalElement != null) {
@@ -221,7 +221,7 @@
   bool isPatchElement(Element element) {
     // TODO(lrn): More checks needed if we introduce metadata for real.
     // In that case, it must have the identifier "native" as metadata.
-    for (Link link = element.metadata; !link.isEmpty(); link = link.tail) {
+    for (Link link = element.metadata; !link.isEmpty; link = link.tail) {
       if (link.head is PatchMetadataAnnotation) return true;
     }
     return false;
diff --git a/lib/compiler/implementation/resolution/members.dart b/lib/compiler/implementation/resolution/members.dart
index d62146da..34cec51 100644
--- a/lib/compiler/implementation/resolution/members.dart
+++ b/lib/compiler/implementation/resolution/members.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of resolution;
+
 abstract class TreeElements {
   Element operator[](Node node);
   Selector getSelector(Send send);
@@ -11,14 +13,12 @@
 
 class TreeElementMapping implements TreeElements {
   final Element currentElement;
-  final Map<Node, Element> map;
   final Map<Node, Selector> selectors;
   final Map<Node, DartType> types;
   final Set<Element> checkedParameters;
 
-  TreeElementMapping([Element this.currentElement])
-      : map = new LinkedHashMap<Node, Element>(),
-        selectors = new LinkedHashMap<Node, Selector>(),
+  TreeElementMapping(this.currentElement)
+      : selectors = new LinkedHashMap<Node, Selector>(),
         types = new LinkedHashMap<Node, DartType>(),
         checkedParameters = new Set<Element>();
 
@@ -37,11 +37,20 @@
       }
       return true;
     }));
+    // TODO(ahe): Investigate why the invariant below doesn't hold.
+    // assert(invariant(node,
+    //                  getTreeElement(node) == element ||
+    //                  getTreeElement(node) == null,
+    //                  message: '${getTreeElement(node)}; $element'));
 
-    map[node] = element;
+    setTreeElement(node, element);
   }
-  operator [](Node node) => map[node];
-  void remove(Node node) { map.remove(node); }
+
+  operator [](Node node) => getTreeElement(node);
+
+  void remove(Node node) {
+    setTreeElement(node, null);
+  }
 
   void setType(Node node, DartType type) {
     types[node] = type;
@@ -87,51 +96,15 @@
     });
   }
 
-  bool isNamedConstructor(Send node) => node.receiver != null;
-
-  SourceString getConstructorName(Send node) {
-    return node.selector.asIdentifier().source;
-  }
-
   String constructorNameForDiagnostics(SourceString className,
                                    SourceString constructorName) {
     String classNameString = className.slowToString();
     String constructorNameString = constructorName.slowToString();
-    return (identical(constructorName, const SourceString('')))
+    return (constructorName == const SourceString(''))
         ? classNameString
         : "$classNameString.$constructorNameString";
    }
 
-  FunctionElement resolveConstructorRedirection(InitializerResolver resolver,
-                                                FunctionElement constructor) {
-    if (constructor.isPatched) {
-      checkMatchingPatchSignatures(constructor, constructor.patch);
-      constructor = constructor.patch;
-    }
-    FunctionExpression node = constructor.parseNode(compiler);
-
-    // A synthetic constructor does not have a node.
-    if (node == null) return null;
-    if (node.initializers == null) return null;
-    Link<Node> initializers = node.initializers.nodes;
-    if (!initializers.isEmpty() &&
-        Initializers.isConstructorRedirect(initializers.head)) {
-      final ClassElement classElement = constructor.getEnclosingClass();
-      Selector selector;
-      if (isNamedConstructor(initializers.head)) {
-        SourceString constructorName = getConstructorName(initializers.head);
-        selector = new Selector.callConstructor(
-            constructorName,
-            resolver.visitor.enclosingElement.getLibrary());
-      } else {
-        selector = new Selector.callDefaultConstructor(
-            resolver.visitor.enclosingElement.getLibrary());
-      }
-      return classElement.lookupConstructor(selector);
-    }
-    return null;
-  }
-
   void resolveRedirectingConstructor(InitializerResolver resolver,
                                      Node node,
                                      FunctionElement constructor,
@@ -144,14 +117,19 @@
         return;
       }
       seen.add(redirection);
-      redirection = resolveConstructorRedirection(resolver, redirection);
+
+      if (redirection.isPatched) {
+        checkMatchingPatchSignatures(constructor, redirection.patch);
+        redirection = redirection.patch;
+      }
+      redirection = resolver.visitor.resolveConstructorRedirection(redirection);
     }
   }
 
   void checkMatchingPatchParameters(FunctionElement origin,
                                     Link<Element> originParameters,
                                     Link<Element> patchParameters) {
-    while (!originParameters.isEmpty()) {
+    while (!originParameters.isEmpty) {
       Element originParameter = originParameters.head;
       Element patchParameter = patchParameters.head;
       // Hack: Use unparser to test parameter equality. This only works because
@@ -258,7 +236,7 @@
           }
           resolveConstructorImplementation(element, tree);
         }
-        ResolverVisitor visitor = new ResolverVisitor(compiler, element);
+        ResolverVisitor visitor = visitorFor(element);
         visitor.useElement(tree, element);
         visitor.setupFunction(tree, element);
 
@@ -281,6 +259,13 @@
     });
   }
 
+  /// This method should only be used by this library (or tests of
+  /// this library).
+  ResolverVisitor visitorFor(Element element) {
+    var mapping = new TreeElementMapping(element);
+    return new ResolverVisitor(compiler, element, mapping);
+  }
+
   void visitBody(ResolverVisitor visitor, Statement body) {
     visitor.visit(body);
   }
@@ -350,15 +335,14 @@
     if(element.modifiers.isStatic() && element.variables.isTopLevel()) {
       error(element.modifiers.getStatic(), MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC);
     }
-    ResolverVisitor visitor = new ResolverVisitor(compiler, element);
+    ResolverVisitor visitor = visitorFor(element);
     initializerDo(tree, visitor.visit);
     return visitor.mapping;
   }
 
   TreeElements resolveParameter(Element element) {
     Node tree = element.parseNode(compiler);
-    ResolverVisitor visitor =
-        new ResolverVisitor(compiler, element.enclosingElement);
+    ResolverVisitor visitor = visitorFor(element.enclosingElement);
     initializerDo(tree, visitor.visit);
     return visitor.mapping;
   }
@@ -373,8 +357,7 @@
 
   DartType resolveReturnType(Element element, TypeAnnotation annotation) {
     if (annotation == null) return compiler.types.dynamicType;
-    ResolverVisitor visitor = new ResolverVisitor(compiler, element);
-    DartType result = visitor.resolveTypeAnnotation(annotation);
+    DartType result = visitorFor(element).resolveTypeAnnotation(annotation);
     if (result == null) {
       // TODO(karklose): warning.
       return compiler.types.dynamicType;
@@ -624,7 +607,7 @@
                                    FunctionSignature signature) {
     LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>();
     for (Link<Element> link = signature.requiredParameters;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
        parameterTypes.addLast(link.head.computeType(compiler));
        // TODO(karlklose): optional parameters.
@@ -640,8 +623,8 @@
       annotation.resolutionState = STATE_STARTED;
 
       Node node = annotation.parseNode(compiler);
-      ResolverVisitor visitor = new ResolverVisitor(
-          compiler, annotation.annotatedElement.enclosingElement);
+      ResolverVisitor visitor =
+          visitorFor(annotation.annotatedElement.enclosingElement);
       node.accept(visitor);
       annotation.value = compiler.constantHandler.compileNodeWithDefinitions(
           node, visitor.mapping);
@@ -695,8 +678,7 @@
     // Lookup target field.
     Element target;
     if (isFieldInitializer(init)) {
-      Scope localScope = constructor.getEnclosingClass().buildLocalScope();
-      target = localScope.lookup(name);
+      target = constructor.getEnclosingClass().lookupLocalMember(name);
       if (target == null) {
         error(selector, MessageKind.CANNOT_RESOLVE, [name]);
       } else if (target.kind != ElementKind.FIELD) {
@@ -744,35 +726,23 @@
     ClassElement lookupTarget = getSuperOrThisLookupTarget(constructor,
                                                            isSuperCall,
                                                            call);
-    final SourceString className = lookupTarget.name;
-
-    SourceString constructorName;
-    Selector lookupSelector;
-    if (resolver.isNamedConstructor(call)) {
-      constructorName = resolver.getConstructorName(call);
-      lookupSelector = new Selector.callConstructor(
-          constructorName,
-          visitor.enclosingElement.getLibrary());
-    } else {
-      constructorName = const SourceString('');
-      lookupSelector = new Selector.callDefaultConstructor(
-          visitor.enclosingElement.getLibrary());
-    }
-
-    FunctionElement lookedupConstructor =
-        lookupTarget.lookupConstructor(lookupSelector);
+    Selector constructorSelector =
+        visitor.getRedirectingThisOrSuperConstructorSelector(call);
+    FunctionElement calledConstructor =
+        lookupTarget.lookupConstructor(constructorSelector);
 
     final bool isImplicitSuperCall = false;
-    verifyThatConstructorMatchesCall(lookedupConstructor,
+    final SourceString className = lookupTarget.name;
+    verifyThatConstructorMatchesCall(calledConstructor,
                                      selector,
                                      isImplicitSuperCall,
                                      call,
-                                     constructorName,
-                                     className);
+                                     className,
+                                     constructorSelector);
 
-    visitor.useElement(call, lookedupConstructor);
-    visitor.world.registerStaticUse(lookedupConstructor);
-    return lookedupConstructor;
+    visitor.useElement(call, calledConstructor);
+    visitor.world.registerStaticUse(calledConstructor);
+    return calledConstructor;
   }
 
   void resolveImplicitSuperConstructorSend(FunctionElement constructor,
@@ -793,18 +763,19 @@
       ClassElement lookupTarget = getSuperOrThisLookupTarget(constructor,
                                                              isSuperCall,
                                                              functionNode);
-      final SourceString className = lookupTarget.name;
+      Selector constructorSelector = new Selector.callDefaultConstructor(
+          visitor.enclosingElement.getLibrary());
       Element calledConstructor = lookupTarget.lookupConstructor(
-          new Selector.callDefaultConstructor(
-              visitor.enclosingElement.getLibrary()));
+          constructorSelector);
 
+      final SourceString className = lookupTarget.name;
       final bool isImplicitSuperCall = true;
       verifyThatConstructorMatchesCall(calledConstructor,
                                        callToMatch,
                                        isImplicitSuperCall,
                                        functionNode,
                                        className,
-                                       const SourceString(''));
+                                       constructorSelector);
 
       visitor.world.registerStaticUse(calledConstructor);
     }
@@ -816,12 +787,13 @@
       bool isImplicitSuperCall,
       Node diagnosticNode,
       SourceString className,
-      SourceString constructorName) {
+      Selector constructorSelector) {
     if (lookedupConstructor == null
         || !lookedupConstructor.isGenerativeConstructor()) {
       var fullConstructorName =
-          visitor.compiler.resolver.constructorNameForDiagnostics(className,
-                                                              constructorName);
+          visitor.compiler.resolver.constructorNameForDiagnostics(
+              className,
+              constructorSelector.name);
       MessageKind kind = isImplicitSuperCall
           ? MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT
           : MessageKind.CANNOT_RESOLVE_CONSTRUCTOR;
@@ -840,7 +812,7 @@
                                      FunctionExpression functionNode) {
     if (functionNode.initializers == null) return null;
     Link<Node> link = functionNode.initializers.nodes;
-    if (!link.isEmpty() && Initializers.isConstructorRedirect(link.head)) {
+    if (!link.isEmpty && Initializers.isConstructorRedirect(link.head)) {
       return resolveSuperOrThisForSend(constructor, functionNode, link.head);
     }
     return null;
@@ -871,7 +843,7 @@
     FunctionElement result;
     bool resolvedSuper = false;
     for (Link<Node> link = initializers;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
       if (link.head.asSendSet() != null) {
         final SendSet init = link.head.asSendSet();
@@ -890,7 +862,7 @@
             error(functionNode, MessageKind.REDIRECTING_CONSTRUCTOR_HAS_BODY);
           }
           // Check that there are no other initializers.
-          if (!initializers.tail.isEmpty()) {
+          if (!initializers.tail.isEmpty) {
             error(call, MessageKind.REDIRECTING_CONSTRUCTOR_HAS_INITIALIZER);
           }
           return resolveSuperOrThisForSend(constructor, functionNode, call);
@@ -1002,10 +974,10 @@
   }
 
   TargetElement currentBreakTarget() =>
-    breakTargetStack.isEmpty() ? null : breakTargetStack.head;
+    breakTargetStack.isEmpty ? null : breakTargetStack.head;
 
   TargetElement currentContinueTarget() =>
-    continueTargetStack.isEmpty() ? null : continueTargetStack.head;
+    continueTargetStack.isEmpty ? null : continueTargetStack.head;
 
   void enterLabelScope(Map<String, LabelElement> elements) {
     labels = new LabeledStatementLabelScope(labels, elements);
@@ -1127,7 +1099,7 @@
         Link<DartType> arguments =
             resolveTypeArguments(node, cls.typeVariables, scope,
                                  onFailure, whenResolved);
-        if (cls.typeVariables.isEmpty() && arguments.isEmpty()) {
+        if (cls.typeVariables.isEmpty && arguments.isEmpty) {
           // Use the canonical type if it has no type parameters.
           type = cls.computeType(compiler);
         } else {
@@ -1141,7 +1113,7 @@
         Link<DartType> arguments = resolveTypeArguments(
             node, typdef.typeVariables,
             scope, onFailure, whenResolved);
-        if (typdef.typeVariables.isEmpty() && arguments.isEmpty()) {
+        if (typdef.typeVariables.isEmpty && arguments.isEmpty) {
           // Return the canonical type if it has no type parameters.
           type = typdef.computeType(compiler);
         } else {
@@ -1166,9 +1138,9 @@
     }
     var arguments = new LinkBuilder<DartType>();
     for (Link<Node> typeArguments = node.typeArguments.nodes;
-         !typeArguments.isEmpty();
+         !typeArguments.isEmpty;
          typeArguments = typeArguments.tail) {
-      if (typeVariables.isEmpty()) {
+      if (typeVariables.isEmpty) {
         onFailure(typeArguments.head, MessageKind.ADDITIONAL_TYPE_ARGUMENT);
       }
       DartType argType = resolveTypeAnnotationInContext(scope,
@@ -1176,17 +1148,23 @@
                                                     onFailure,
                                                     whenResolved);
       arguments.addLast(argType);
-      if (!typeVariables.isEmpty()) {
+      if (!typeVariables.isEmpty) {
         typeVariables = typeVariables.tail;
       }
     }
-    if (!typeVariables.isEmpty()) {
+    if (!typeVariables.isEmpty) {
       onFailure(node.typeArguments, MessageKind.MISSING_TYPE_ARGUMENT);
     }
     return arguments.toLink();
   }
 }
 
+/**
+ * Core implementation of resolution.
+ *
+ * Do not subclass or instantiate this class outside this library
+ * except for testing.
+ */
 class ResolverVisitor extends CommonResolverVisitor<Element> {
   final TreeElementMapping mapping;
   Element enclosingElement;
@@ -1201,9 +1179,8 @@
   StatementScope statementScope;
   int allowedCategory = ElementCategory.VARIABLE | ElementCategory.FUNCTION;
 
-  ResolverVisitor(Compiler compiler, Element element)
-    : this.mapping  = new TreeElementMapping(element),
-      this.enclosingElement = element,
+  ResolverVisitor(Compiler compiler, Element element, this.mapping)
+    : this.enclosingElement = element,
       // When the element is a field, we are actually resolving its
       // initial value, which should not have access to instance
       // fields.
@@ -1346,6 +1323,37 @@
     return type;
   }
 
+  bool isNamedConstructor(Send node) => node.receiver != null;
+
+  Selector getRedirectingThisOrSuperConstructorSelector(Send node) {
+    if (isNamedConstructor(node)) {
+      SourceString constructorName = node.selector.asIdentifier().source;
+      return new Selector.callConstructor(
+          constructorName,
+          enclosingElement.getLibrary());
+    } else {
+      return new Selector.callDefaultConstructor(
+          enclosingElement.getLibrary());
+    }
+  }
+
+  FunctionElement resolveConstructorRedirection(FunctionElement constructor) {
+    FunctionExpression node = constructor.parseNode(compiler);
+
+    // A synthetic constructor does not have a node.
+    if (node == null) return null;
+    if (node.initializers == null) return null;
+    Link<Node> initializers = node.initializers.nodes;
+    if (!initializers.isEmpty &&
+        Initializers.isConstructorRedirect(initializers.head)) {
+      Selector selector =
+          getRedirectingThisOrSuperConstructorSelector(initializers.head);
+      final ClassElement classElement = constructor.getEnclosingClass();
+      return classElement.lookupConstructor(selector);
+    }
+    return null;
+  }
+
   void setupFunction(FunctionExpression node, FunctionElement function) {
     scope = new MethodScope(scope, function);
 
@@ -1386,9 +1394,10 @@
   }
 
   visitIn(Node node, Scope nestedScope) {
+    Scope oldScope = scope;
     scope = nestedScope;
     Element element = visit(node);
-    scope = scope.parent;
+    scope = oldScope;
     return element;
   }
 
@@ -1453,18 +1462,19 @@
     FunctionElement function = new FunctionElement.node(
         name, node, ElementKind.FUNCTION, Modifiers.EMPTY,
         enclosingElement);
+    Scope oldScope = scope; // The scope is modified by [setupFunction].
     setupFunction(node, function);
     defineElement(node, function, doAddToScope: node.name !== null);
 
     Element previousEnclosingElement = enclosingElement;
     enclosingElement = function;
     // Run the body in a fresh statement scope.
-    StatementScope oldScope = statementScope;
+    StatementScope oldStatementScope = statementScope;
     statementScope = new StatementScope();
     visit(node.body);
-    statementScope = oldScope;
+    statementScope = oldStatementScope;
 
-    scope = scope.parent;
+    scope = oldScope;
     enclosingElement = previousEnclosingElement;
   }
 
@@ -1537,7 +1547,7 @@
     } else if (identical(resolvedReceiver.kind, ElementKind.CLASS)) {
       ClassElement receiverClass = resolvedReceiver;
       receiverClass.ensureResolved(compiler);
-      target = receiverClass.buildLocalScope().lookup(name);
+      target = receiverClass.lookupLocalMember(name);
       if (target == null) {
         // TODO(johnniwinther): With the simplified [TreeElements] invariant,
         // try to resolve injected elements if [currentClass] is in the patch
@@ -1556,7 +1566,9 @@
       PrefixElement prefix = resolvedReceiver;
       target = prefix.lookupLocalMember(name);
       if (target == null) {
-        error(node, MessageKind.NO_SUCH_LIBRARY_MEMBER, [prefix.name, name]);
+        return warnAndCreateErroneousElement(
+            node, name, MessageKind.NO_SUCH_LIBRARY_MEMBER,
+            [prefix.name, name]);
       }
     }
     return target;
@@ -1589,7 +1601,7 @@
           identical(string, '>>>')) {
         return null;
       }
-      return node.arguments.isEmpty()
+      return node.arguments.isEmpty
           ? new Selector.unaryOperator(source)
           : new Selector.binaryOperator(source);
     }
@@ -1606,7 +1618,7 @@
     int arity = 0;
     List<SourceString> named = <SourceString>[];
     for (Link<Node> link = node.argumentsNode.nodes;
-        !link.isEmpty();
+        !link.isEmpty;
         link = link.tail) {
       Expression argument = link.head;
       NamedArgument namedArgument = argument.asNamedArgument();
@@ -1632,7 +1644,7 @@
   void resolveArguments(NodeList list) {
     if (list == null) return;
     bool seenNamedArgument = false;
-    for (Link<Node> link = list.nodes; !link.isEmpty(); link = link.tail) {
+    for (Link<Node> link = list.nodes; !link.isEmpty; link = link.tail) {
       Expression argument = link.head;
       visit(argument);
       if (argument.asNamedArgument() != null) {
@@ -1661,7 +1673,7 @@
     if (node.isOperator) {
       String operatorString = node.selector.asOperator().source.stringValue;
       if (identical(operatorString, 'is') || identical(operatorString, 'as')) {
-        assert(node.arguments.tail.isEmpty());
+        assert(node.arguments.tail.isEmpty);
         DartType type = resolveTypeTest(node.arguments.head);
         if (type != null) {
           compiler.enqueuer.resolution.registerIsCheck(type);
@@ -1821,7 +1833,7 @@
   }
 
   visitNodeList(NodeList node) {
-    for (Link<Node> link = node.nodes; !link.isEmpty(); link = link.tail) {
+    for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
       visit(link.head);
     }
   }
@@ -1990,11 +2002,11 @@
     NodeList arguments = node.typeArguments;
     if (arguments != null) {
       Link<Node> nodes = arguments.nodes;
-      if (nodes.isEmpty()) {
+      if (nodes.isEmpty) {
         error(arguments, MessageKind.MISSING_TYPE_ARGUMENT, []);
       } else {
         resolveTypeRequired(nodes.head);
-        for (nodes = nodes.tail; !nodes.isEmpty(); nodes = nodes.tail) {
+        for (nodes = nodes.tail; !nodes.isEmpty; nodes = nodes.tail) {
           error(nodes.head, MessageKind.ADDITIONAL_TYPE_ARGUMENT, []);
           resolveTypeRequired(nodes.head);
         }
@@ -2040,6 +2052,12 @@
       label.setBreakTarget();
       mapping[node.target] = label;
     }
+    if (mapping[node] != null) {
+      // TODO(ahe): I'm not sure why this node already has an element
+      // that is different from target.  I will talk to Lasse and
+      // figure out what is going on.
+      mapping.remove(node);
+    }
     mapping[node] = target;
   }
 
@@ -2078,13 +2096,18 @@
     world.registerDynamicInvocation(name, selector);
   }
 
+  registerImplicitFieldGet(SourceString name) {
+    Selector selector = new Selector.getter(name, null);
+    world.registerDynamicGetter(name, selector);
+  }
+
   visitForIn(ForIn node) {
     for (final name in const [
         const SourceString('iterator'),
-        const SourceString('next'),
-        const SourceString('hasNext')]) {
+        const SourceString('next')]) {
       registerImplicitInvocation(name, 0);
     }
+    registerImplicitFieldGet(const SourceString('hasNext'));
     visit(node.expression);
     Scope blockScope = new BlockScope(scope);
     Node declaration = node.declaredIdentifier;
@@ -2095,7 +2118,7 @@
     if ((declaration is !Send || declaration.asSend().selector is !Identifier
         || declaration.asSend().receiver != null)
         && (declaration is !VariableDefinitions ||
-        !declaration.asVariableDefinitions().definitions.nodes.tail.isEmpty()))
+        !declaration.asVariableDefinitions().definitions.nodes.tail.isEmpty))
     {
       // The variable declaration is either not an identifier, not a
       // declaration, or it's declaring more than one variable.
@@ -2152,7 +2175,7 @@
     TargetElement breakElement = getOrCreateTargetElement(node);
     Map<String, LabelElement> continueLabels = <String, LabelElement>{};
     Link<Node> cases = node.cases.nodes;
-    while (!cases.isEmpty()) {
+    while (!cases.isEmpty) {
       SwitchCase switchCase = cases.head;
       for (Node labelOrCase in switchCase.labelsAndCases) {
         if (labelOrCase is! Label) continue;
@@ -2178,6 +2201,10 @@
             new TargetElement(switchCase,
                               statementScope.nestingLevel,
                               enclosingElement);
+        if (mapping[switchCase] != null) {
+          // TODO(ahe): Talk to Lasse about this.
+          mapping.remove(switchCase);
+        }
         mapping[switchCase] = targetElement;
 
         LabelElement labelElement =
@@ -2188,7 +2215,7 @@
       }
       cases = cases.tail;
       // Test that only the last case, if any, is a default case.
-      if (switchCase.defaultKeyword != null && !cases.isEmpty()) {
+      if (switchCase.defaultKeyword != null && !cases.isEmpty) {
         error(switchCase, MessageKind.INVALID_CASE_DEFAULT);
       }
     }
@@ -2219,7 +2246,7 @@
 
   visitTryStatement(TryStatement node) {
     visit(node.tryBlock);
-    if (node.catchBlocks.isEmpty() && node.finallyBlock == null) {
+    if (node.catchBlocks.isEmpty && node.finallyBlock == null) {
       // TODO(ngeoffray): The precise location is
       // node.getEndtoken.next. Adjust when issue #1581 is fixed.
       error(node, MessageKind.NO_CATCH_NOR_FINALLY);
@@ -2232,11 +2259,11 @@
     // Check that if catch part is present, then
     // it has one or two formal parameters.
     if (node.formals != null) {
-      if (node.formals.isEmpty()) {
+      if (node.formals.isEmpty) {
         error(node, MessageKind.EMPTY_CATCH_DECLARATION);
       }
-      if (!node.formals.nodes.tail.isEmpty() &&
-          !node.formals.nodes.tail.tail.isEmpty()) {
+      if (!node.formals.nodes.tail.isEmpty &&
+          !node.formals.nodes.tail.tail.isEmpty) {
         for (Node extra in node.formals.nodes.tail.tail) {
           error(extra, MessageKind.EXTRA_CATCH_DECLARATION);
         }
@@ -2245,7 +2272,7 @@
       // Check that the formals aren't optional and that they have no
       // modifiers or type.
       for (Link<Node> link = node.formals.nodes;
-           !link.isEmpty();
+           !link.isEmpty;
            link = link.tail) {
         // If the formal parameter is a node list, it means that it is a
         // sequence of optional parameters.
@@ -2289,7 +2316,7 @@
 
   TypeDefinitionVisitor(Compiler compiler, TypeDeclarationElement element)
       : this.element = element,
-        scope = element.buildEnclosingScope(),
+        scope = Scope.buildEnclosingScope(element),
         typeResolver = new TypeResolver(compiler),
         super(compiler);
 
@@ -2300,7 +2327,7 @@
     // Resolve the bounds of type variables.
     Link<DartType> typeLink = element.typeVariables;
     Link<Node> nodeLink = node.nodes;
-    while (!nodeLink.isEmpty()) {
+    while (!nodeLink.isEmpty) {
       TypeVariableType typeVariable = typeLink.head;
       SourceString typeName = typeVariable.name;
       TypeVariable typeNode = nodeLink.head;
@@ -2330,7 +2357,7 @@
       nodeLink = nodeLink.tail;
       typeLink = typeLink.tail;
     }
-    assert(typeLink.isEmpty());
+    assert(typeLink.isEmpty);
   }
 }
 
@@ -2408,7 +2435,7 @@
     assert(element.interfaces == null);
     Link<DartType> interfaces = const Link<DartType>();
     for (Link<Node> link = node.interfaces.nodes;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
       DartType interfaceType = visit(link.head);
       if (interfaceType != null && interfaceType.element.isExtendable()) {
@@ -2489,7 +2516,7 @@
       assert(superSupertypes != null);
       Link<DartType> supertypes = superSupertypes.prepend(supertype);
       for (Link<DartType> interfaces = cls.interfaces;
-           !interfaces.isEmpty();
+           !interfaces.isEmpty;
            interfaces = interfaces.tail) {
         ClassElement element = interfaces.head.element;
         Link<DartType> interfaceSupertypes = element.allSupertypes;
@@ -2545,7 +2572,7 @@
   ClassElement classElement;
 
   ClassSupertypeResolver(Compiler compiler, ClassElement cls)
-    : context = cls.buildEnclosingScope(),
+    : context = Scope.buildEnclosingScope(cls),
       this.classElement = cls,
       super(compiler);
 
@@ -2563,7 +2590,7 @@
       node.superclass.accept(this);
     }
     for (Link<Node> link = node.interfaces.nodes;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
       link.head.accept(this);
     }
@@ -2623,11 +2650,11 @@
                              this.definitions, this.resolver, this.kind)
       : super(compiler) {
     variables = new VariableListElement.node(
-        definitions, ElementKind.VARIABLE_LIST, resolver.scope.element);
+        definitions, ElementKind.VARIABLE_LIST, resolver.enclosingElement);
   }
 
   SourceString visitSendSet(SendSet node) {
-    assert(node.arguments.tail.isEmpty()); // Sanity check
+    assert(node.arguments.tail.isEmpty); // Sanity check
     resolver.visit(node.arguments.head);
     return visit(node.selector);
   }
@@ -2635,7 +2662,7 @@
   SourceString visitIdentifier(Identifier node) => node.source;
 
   visitNodeList(NodeList node) {
-    for (Link<Node> link = node.nodes; !link.isEmpty(); link = link.tail) {
+    for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
       SourceString name = visit(link.head);
       VariableElement element =
           new VariableElement(name, variables, kind, link.head);
@@ -2671,11 +2698,11 @@
 
   Element visitVariableDefinitions(VariableDefinitions node) {
     Link<Node> definitions = node.definitions.nodes;
-    if (definitions.isEmpty()) {
+    if (definitions.isEmpty) {
       cancel(node, 'internal error: no parameter definition');
       return null;
     }
-    if (!definitions.tail.isEmpty()) {
+    if (!definitions.tail.isEmpty) {
       cancel(definitions.tail.head, 'internal error: extra definition');
       return null;
     }
@@ -2768,14 +2795,14 @@
 
   LinkBuilder<Element> analyzeNodes(Link<Node> link) {
     LinkBuilder<Element> elements = new LinkBuilder<Element>();
-    for (; !link.isEmpty(); link = link.tail) {
+    for (; !link.isEmpty; link = link.tail) {
       Element element = link.head.accept(this);
       if (element != null) {
         elements.addLast(element);
       } else {
         // If parameter is null, the current node should be the last,
         // and a list of optional named parameters.
-        if (!link.tail.isEmpty() || (link.head is !NodeList)) {
+        if (!link.tail.isEmpty || (link.head is !NodeList)) {
           internalError(link.head, "expected optional parameters");
         }
       }
@@ -2828,7 +2855,8 @@
   // TODO(ahe): This is temporary.
   void resolveExpression(Node node) {
     if (node == null) return;
-    node.accept(new ResolverVisitor(compiler, enclosingElement));
+    node.accept(new ResolverVisitor(compiler, enclosingElement,
+                                    new TreeElementMapping(enclosingElement)));
   }
 
   // TODO(ahe): This is temporary.
@@ -2965,235 +2993,3 @@
     return e;
   }
 }
-
-abstract class Scope {
-  final Element element;
-  final Scope parent;
-
-  Scope(this.parent, this.element);
-  abstract Element add(Element element);
-
-  Element lookup(SourceString name) {
-    Element result = localLookup(name);
-    if (result != null) return result;
-    return parent.lookup(name);
-  }
-
-  abstract Element localLookup(SourceString name);
-}
-
-/**
- * [TypeDeclarationScope] defines the outer scope of a type declaration in
- * which the declared type variables and the entities in the enclosing scope are
- * available but where declared and inherited members are not available. This
- * scope is only used for class/interface declarations during resolution of the
- * class hierarchy. In all other cases [ClassScope] is used.
- */
-class TypeDeclarationScope extends Scope {
-  TypeDeclarationElement get element => super.element;
-
-  TypeDeclarationScope(parent, TypeDeclarationElement element)
-      : super(parent, element) {
-    assert(parent != null);
-  }
-
-  Element add(Element newElement) {
-    throw "Cannot add element to TypeDeclarationScope";
-  }
-
-  Element localLookup(SourceString name) {
-    Link<DartType> typeVariableLink = element.typeVariables;
-    while (!typeVariableLink.isEmpty()) {
-      TypeVariableType typeVariable = typeVariableLink.head;
-      if (typeVariable.name == name) {
-        return typeVariable.element;
-      }
-      typeVariableLink = typeVariableLink.tail;
-    }
-    return null;
-  }
-
-  String toString() =>
-      'TypeDeclarationScope($element)';
-}
-
-class MethodScope extends Scope {
-  final Map<SourceString, Element> elements;
-
-  MethodScope(Scope parent, Element element)
-      : super(parent, element),
-        this.elements = new Map<SourceString, Element>() {
-    assert(parent != null);
-  }
-
-  Element localLookup(SourceString name) => elements[name];
-
-  Element add(Element newElement) {
-    if (elements.containsKey(newElement.name)) {
-      return elements[newElement.name];
-    }
-    elements[newElement.name] = newElement;
-    return newElement;
-  }
-
-  String toString() => '$element${elements.getKeys()}';
-}
-
-class BlockScope extends MethodScope {
-  BlockScope(Scope parent) : super(parent, parent.element);
-
-  String toString() => 'block${elements.getKeys()}';
-}
-
-/**
- * [ClassScope] defines the inner scope of a class/interface declaration in
- * which declared members, declared type variables, entities in the enclosing
- * scope and inherited members are available, in the given order.
- */
-class ClassScope extends TypeDeclarationScope {
-  ClassElement get element => super.element;
-
-  ClassScope(Scope parentScope, ClassElement element)
-      : super(parentScope, element)  {
-    assert(parent != null);
-  }
-
-  Element localLookup(SourceString name) {
-    Element result = element.lookupLocalMember(name);
-    if (result != null) return result;
-    return super.localLookup(name);
-  }
-
-  Element lookup(SourceString name) {
-    Element result = localLookup(name);
-    if (result != null) return result;
-    result = parent.lookup(name);
-    if (result != null) return result;
-    return element.lookupSuperMember(name);
-  }
-
-  Element add(Element newElement) {
-    throw "Cannot add an element in a class scope";
-  }
-
-  String toString() => 'ClassScope($element)';
-}
-
-// TODO(johnniwinther): Refactor scopes to avoid class explosion.
-class PatchClassScope extends TypeDeclarationScope {
-  ClassElement get origin => element;
-  final ClassElement patch;
-
-  PatchClassScope(Scope parentScope,
-                  ClassElement origin, ClassElement this.patch)
-      : super(parentScope, origin) {
-    assert(parent != null);
-  }
-
-  Element localLookup(SourceString name) {
-    Element result = patch.lookupLocalMember(name);
-    if (result != null) return result;
-    result = origin.lookupLocalMember(name);
-    if (result != null) return result;
-    result = super.localLookup(name);
-    if (result != null) return result;
-    result = parent.lookup(name);
-    if (result != null) return result;
-    return result;
-  }
-
-  Element lookup(SourceString name) {
-    Element result = localLookup(name);
-    if (result != null) return result;
-    // TODO(johnniwinther): Should we support patch lookup on supertypes?
-    return origin.lookupSuperMember(name);
-  }
-
-  Element add(Element newElement) {
-    throw "Cannot add an element in a class scope";
-  }
-
-  String toString() => 'PatchClassScope($origin,$patch)';
-}
-
-class LocalClassScope extends Scope {
-  LocalClassScope(ClassElement element)
-      : super(null, element);
-
-  Element lookup(SourceString name) => localLookup(name);
-
-  Element localLookup(SourceString name) {
-    ClassElement cls = element;
-    return cls.lookupLocalMember(name);
-  }
-
-  Element add(Element newElement) {
-    throw "Cannot add an element in a class scope";
-  }
-
-  String toString() => 'LocalClassScope($element)';
-}
-
-class LocalPatchClassScope extends Scope {
-  ClassElement get origin => element;
-  final ClassElement patch;
-
-  LocalPatchClassScope(ClassElement origin, ClassElement this.patch)
-      : super(null, origin);
-
-  Element lookup(SourceString name) => localLookup(name);
-
-  Element localLookup(SourceString name) {
-    Element result = patch.lookupLocalMember(name);
-    if (result != null) return result;
-    return origin.lookupLocalMember(name);
-  }
-
-  Element add(Element newElement) {
-    throw "Cannot add an element in a class scope";
-  }
-
-  String toString() => 'LocalPatchClassScope($origin,$patch)';
-}
-
-class TopScope extends Scope {
-  LibraryElement get library => element;
-
-  TopScope(LibraryElement library) : super(null, library);
-
-  Element localLookup(SourceString name) => library.find(name);
-  Element lookup(SourceString name) => localLookup(name);
-  Element lexicalLookup(SourceString name) => localLookup(name);
-
-  Element add(Element newElement) {
-    throw "Cannot add an element in the top scope";
-  }
-  String toString() => 'LibraryScope($element)';
-}
-
-class PatchLibraryScope extends Scope {
-  LibraryElement get origin => element;
-  final LibraryElement patch;
-
-  PatchLibraryScope(LibraryElement origin, LibraryElement this.patch)
-      : super(null, origin);
-
-  Element localLookup(SourceString name) {
-    Element result = patch.find(name);
-    if (result != null) {
-      return result;
-    }
-    result = origin.find(name);
-    if (result != null) {
-      return result;
-    }
-    return result;
-  }
-  Element lookup(SourceString name) => localLookup(name);
-  Element lexicalLookup(SourceString name) => localLookup(name);
-
-  Element add(Element newElement) {
-    throw "Cannot add an element in a patch library scope";
-  }
-  String toString() => 'PatchLibraryScope($origin,$patch)';
-}
diff --git a/lib/compiler/implementation/resolution/resolution.dart b/lib/compiler/implementation/resolution/resolution.dart
index 832090c..3d44fee 100644
--- a/lib/compiler/implementation/resolution/resolution.dart
+++ b/lib/compiler/implementation/resolution/resolution.dart
@@ -11,4 +11,7 @@
 import '../util/util.dart';
 import '../scanner/scannerlib.dart' show PartialMetadataAnnotation;
 
+import 'secret_tree_element.dart' show getTreeElement, setTreeElement;
+
 part 'members.dart';
+part 'scope.dart';
diff --git a/lib/compiler/implementation/resolution/scope.dart b/lib/compiler/implementation/resolution/scope.dart
new file mode 100644
index 0000000..519cb66
--- /dev/null
+++ b/lib/compiler/implementation/resolution/scope.dart
@@ -0,0 +1,163 @@
+// 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.
+
+part of resolution;
+
+abstract class Scope {
+  /**
+   * Adds [element] to this scope. This operation is only allowed on mutable
+   * scopes such as [MethodScope] and [BlockScope].
+   */
+  abstract Element add(Element element);
+
+  /**
+   * Looks up the [Element] for [name] in this scope.
+   */
+  abstract Element lookup(SourceString name);
+
+  static Scope buildEnclosingScope(Element element) {
+    return element.enclosingElement != null
+        ? element.enclosingElement.buildScope() : element.buildScope();
+  }
+}
+
+abstract class NestedScope extends Scope {
+  final Scope parent;
+
+  NestedScope(this.parent);
+
+  Element lookup(SourceString name) {
+    Element result = localLookup(name);
+    if (result != null) return result;
+    return parent.lookup(name);
+  }
+
+  abstract Element localLookup(SourceString name);
+
+  static Scope buildEnclosingScope(Element element) {
+    return element.enclosingElement != null
+        ? element.enclosingElement.buildScope() : element.buildScope();
+  }
+}
+
+/**
+ * [TypeDeclarationScope] defines the outer scope of a type declaration in
+ * which the declared type variables and the entities in the enclosing scope are
+ * available but where declared and inherited members are not available. This
+ * scope is only used for class/interface declarations during resolution of the
+ * class hierarchy. In all other cases [ClassScope] is used.
+ */
+class TypeDeclarationScope extends NestedScope {
+  final TypeDeclarationElement element;
+
+  TypeDeclarationScope(parent, this.element)
+      : super(parent) {
+    assert(parent != null);
+  }
+
+  Element add(Element newElement) {
+    throw "Cannot add element to TypeDeclarationScope";
+  }
+
+  Element lookupTypeVariable(SourceString name) {
+    Link<DartType> typeVariableLink = element.typeVariables;
+    while (!typeVariableLink.isEmpty) {
+      TypeVariableType typeVariable = typeVariableLink.head;
+      if (typeVariable.name == name) {
+        return typeVariable.element;
+      }
+      typeVariableLink = typeVariableLink.tail;
+    }
+    return null;
+  }
+
+  Element localLookup(SourceString name) => lookupTypeVariable(name);
+
+  String toString() =>
+      'TypeDeclarationScope($element)';
+}
+
+abstract class MutableScope extends NestedScope {
+  final Map<SourceString, Element> elements;
+
+  MutableScope(Scope parent)
+      : super(parent),
+        this.elements = new Map<SourceString, Element>() {
+    assert(parent != null);
+  }
+
+  Element add(Element newElement) {
+    if (elements.containsKey(newElement.name)) {
+      return elements[newElement.name];
+    }
+    elements[newElement.name] = newElement;
+    return newElement;
+  }
+
+  Element localLookup(SourceString name) => elements[name];
+}
+
+class MethodScope extends MutableScope {
+  final Element element;
+
+  MethodScope(Scope parent, this.element)
+      : super(parent);
+
+  String toString() => 'MethodScope($element${elements.keys})';
+}
+
+class BlockScope extends MutableScope {
+  BlockScope(Scope parent) : super(parent);
+
+  String toString() => 'BlockScope(${elements.keys})';
+}
+
+/**
+ * [ClassScope] defines the inner scope of a class/interface declaration in
+ * which declared members, declared type variables, entities in the enclosing
+ * scope and inherited members are available, in the given order.
+ */
+class ClassScope extends TypeDeclarationScope {
+  ClassElement get element => super.element;
+
+  ClassScope(Scope parentScope, ClassElement element)
+      : super(parentScope, element)  {
+    assert(parent != null);
+  }
+
+  Element localLookup(SourceString name) {
+    Element result = element.lookupLocalMember(name);
+    if (result != null) return result;
+    return super.localLookup(name);
+  }
+
+  Element lookup(SourceString name) {
+    Element result = localLookup(name);
+    if (result != null) return result;
+    result = parent.lookup(name);
+    if (result != null) return result;
+    return element.lookupSuperMember(name);
+  }
+
+  Element add(Element newElement) {
+    throw "Cannot add an element in a class scope";
+  }
+
+  String toString() => 'ClassScope($element)';
+}
+
+class LibraryScope implements Scope {
+  final LibraryElement library;
+
+  LibraryScope(LibraryElement this.library);
+
+  Element localLookup(SourceString name) => library.find(name);
+  Element lookup(SourceString name) => localLookup(name);
+
+  Element add(Element newElement) {
+    throw "Cannot add an element to a library scope";
+  }
+
+  String toString() => 'LibraryScope($library)';
+}
diff --git a/lib/compiler/implementation/resolution/secret_tree_element.dart b/lib/compiler/implementation/resolution/secret_tree_element.dart
new file mode 100644
index 0000000..e8ee0f1
--- /dev/null
+++ b/lib/compiler/implementation/resolution/secret_tree_element.dart
@@ -0,0 +1,46 @@
+// 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.
+
+/**
+ * Encapsulates the field [TreeElementMixin._element].
+ *
+ * This library is an implementation detail of dart2js, and should not
+ * be imported except by resolution and tree node libraries, or for
+ * testing.
+ *
+ * We have taken great care to ensure AST nodes can be cached between
+ * compiler instances.  Part of this is requires that we always access
+ * resolution results through [TreeElements].
+ *
+ * So please, do not add additional elements to this library, and do
+ * not import it.
+ */
+library secret_tree_element;
+
+/**
+ * The superclass of all AST nodes.
+ */
+abstract class TreeElementMixin {
+  // Deliberately using [Object] here to thwart code completion.
+  // You're not really supposed to access this field anyways.
+  Object _element;
+}
+
+/**
+ * Do not call this method directly.  Instead, use an instance of
+ * [TreeElements].
+ *
+ * Using [Object] as return type to thwart code completion.
+ */
+Object getTreeElement(TreeElementMixin node) {
+  return node._element;
+}
+
+/**
+ * Do not call this method directly.  Instead, use an instance of
+ * [TreeElements].
+ */
+void setTreeElement(TreeElementMixin node, Object value) {
+  node._element = value;
+}
diff --git a/lib/compiler/implementation/resolved_visitor.dart b/lib/compiler/implementation/resolved_visitor.dart
index 47fcb88..8120ac4 100644
--- a/lib/compiler/implementation/resolved_visitor.dart
+++ b/lib/compiler/implementation/resolved_visitor.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 abstract class ResolvedVisitor<R> extends Visitor<R> {
   TreeElements elements;
 
diff --git a/lib/compiler/implementation/runtime_types.dart b/lib/compiler/implementation/runtime_types.dart
index e1a51e6..9b0820f 100644
--- a/lib/compiler/implementation/runtime_types.dart
+++ b/lib/compiler/implementation/runtime_types.dart
@@ -33,7 +33,7 @@
   bool hasTypeArguments(DartType type) {
     if (type is InterfaceType) {
       InterfaceType interfaceType = type;
-      return !interfaceType.arguments.isEmpty();
+      return !interfaceType.arguments.isEmpty;
     }
     return false;
   }
@@ -69,7 +69,7 @@
    */
   String generateRuntimeTypeString(ClassElement element, int numberOfInputs) {
     String elementName = getName(element);
-    if (element.typeVariables.isEmpty()) return "'$elementName'";
+    if (element.typeVariables.isEmpty) return "'$elementName'";
     String stringify(_, bool hasValue) => hasValue ? "' + # + '" : "Dynamic";
     String arguments = stringifyTypeVariables(element.typeVariables,
                                               numberOfInputs,
diff --git a/lib/compiler/implementation/scanner/array_based_scanner.dart b/lib/compiler/implementation/scanner/array_based_scanner.dart
index 0e02b0d..f0cb22f 100644
--- a/lib/compiler/implementation/scanner/array_based_scanner.dart
+++ b/lib/compiler/implementation/scanner/array_based_scanner.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of scanner_implementation;
+
 abstract
 class ArrayBasedScanner<S extends SourceString> extends AbstractScanner<S> {
   int get charOffset => byteOffset + extraCharOffset;
@@ -65,7 +67,7 @@
     // EOF points to itself so there's always infinite look-ahead.
     tail.next = tail;
     discardOpenLt();
-    while (!groupingStack.isEmpty()) {
+    while (!groupingStack.isEmpty) {
       BeginGroupToken begin = groupingStack.head;
       begin.endGroup = tail;
       groupingStack = groupingStack.tail;
@@ -104,7 +106,7 @@
     assert(!identical(openKind, LT_TOKEN));
     appendStringToken(info, value);
     discardOpenLt();
-    if (groupingStack.isEmpty()) {
+    if (groupingStack.isEmpty) {
       return advance();
     }
     BeginGroupToken begin = groupingStack.head;
@@ -128,7 +130,7 @@
 
   void appendGt(PrecedenceInfo info, String value) {
     appendStringToken(info, value);
-    if (groupingStack.isEmpty()) return;
+    if (groupingStack.isEmpty) return;
     if (identical(groupingStack.head.kind, LT_TOKEN)) {
       groupingStack.head.endGroup = tail;
       groupingStack = groupingStack.tail;
@@ -137,11 +139,11 @@
 
   void appendGtGt(PrecedenceInfo info, String value) {
     appendStringToken(info, value);
-    if (groupingStack.isEmpty()) return;
+    if (groupingStack.isEmpty) return;
     if (identical(groupingStack.head.kind, LT_TOKEN)) {
       groupingStack = groupingStack.tail;
     }
-    if (groupingStack.isEmpty()) return;
+    if (groupingStack.isEmpty) return;
     if (identical(groupingStack.head.kind, LT_TOKEN)) {
       groupingStack.head.endGroup = tail;
       groupingStack = groupingStack.tail;
@@ -150,15 +152,15 @@
 
   void appendGtGtGt(PrecedenceInfo info, String value) {
     appendStringToken(info, value);
-    if (groupingStack.isEmpty()) return;
+    if (groupingStack.isEmpty) return;
     if (identical(groupingStack.head.kind, LT_TOKEN)) {
       groupingStack = groupingStack.tail;
     }
-    if (groupingStack.isEmpty()) return;
+    if (groupingStack.isEmpty) return;
     if (identical(groupingStack.head.kind, LT_TOKEN)) {
       groupingStack = groupingStack.tail;
     }
-    if (groupingStack.isEmpty()) return;
+    if (groupingStack.isEmpty) return;
     if (identical(groupingStack.head.kind, LT_TOKEN)) {
       groupingStack.head.endGroup = tail;
       groupingStack = groupingStack.tail;
@@ -172,7 +174,7 @@
   }
 
   void discardOpenLt() {
-    while (!groupingStack.isEmpty()
+    while (!groupingStack.isEmpty
         && identical(groupingStack.head.kind, LT_TOKEN)) {
       groupingStack = groupingStack.tail;
     }
diff --git a/lib/compiler/implementation/scanner/byte_strings.dart b/lib/compiler/implementation/scanner/byte_strings.dart
index 9f3c454..6a89fb2 100644
--- a/lib/compiler/implementation/scanner/byte_strings.dart
+++ b/lib/compiler/implementation/scanner/byte_strings.dart
@@ -26,7 +26,7 @@
 
   Iterator<int> iterator() => new Utf8Decoder(bytes, offset, length);
 
-  int hashCode() {
+  int get hashCode {
     if (_hashCode == null) {
       _hashCode = computeHashCode();
     }
@@ -46,8 +46,8 @@
     sb.add(slowToString());
   }
 
-  bool isEmpty() => length == 0;
-  bool isPrivate() => !isEmpty() && identical(bytes[offset], $_);
+  bool get isEmpty => length == 0;
+  bool isPrivate() => !isEmpty && identical(bytes[offset], $_);
 
   String get stringValue => null;
 }
@@ -75,7 +75,7 @@
 
 
   static AsciiString fromString(String string) {
-    List<int> bytes = string.charCodes();
+    List<int> bytes = string.charCodes;
     return AsciiString.of(bytes, 0, bytes.length);
   }
 }
@@ -89,7 +89,7 @@
       : this.bytes = bytes, offset = 0, end = bytes.length;
   AsciiStringIterator.range(List<int> bytes, int from, int length)
       : this.bytes = bytes, offset = from, end = from + length;
-  bool hasNext() => offset < end;
+  bool get hasNext => offset < end;
   int next() => bytes[offset++];
 }
 
diff --git a/lib/compiler/implementation/scanner/class_element_parser.dart b/lib/compiler/implementation/scanner/class_element_parser.dart
index 0e536d9..39e6d25 100644
--- a/lib/compiler/implementation/scanner/class_element_parser.dart
+++ b/lib/compiler/implementation/scanner/class_element_parser.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of scanner;
+
 class ClassElementParser extends PartialParser {
   ClassElementParser(Listener listener) : super(listener);
 
@@ -41,7 +43,7 @@
         Token token = parser.parseTopLevelDeclaration(beginToken);
         assert(identical(token, endToken.next));
         cachedNode = listener.popNode();
-        assert(listener.nodes.isEmpty());
+        assert(listener.nodes.isEmpty);
       });
       compiler.patchParser.measure(() {
         if (isPatched) {
@@ -169,7 +171,7 @@
   }
 
   void addMember(Element memberElement) {
-    for (Link link = metadata; !link.isEmpty(); link = link.tail) {
+    for (Link link = metadata; !link.isEmpty; link = link.tail) {
       memberElement.addMetadata(link.head);
     }
     metadata = const Link<MetadataAnnotation>();
diff --git a/lib/compiler/implementation/scanner/keyword.dart b/lib/compiler/implementation/scanner/keyword.dart
index 768dedf..335951c 100644
--- a/lib/compiler/implementation/scanner/keyword.dart
+++ b/lib/compiler/implementation/scanner/keyword.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of scanner;
+
 /**
  * A keyword in the Dart programming language.
  */
@@ -94,7 +96,7 @@
     return result;
   }
 
-  int hashCode() => syntax.hashCode();
+  int get hashCode => syntax.hashCode;
 
   bool operator ==(other) {
     return other is SourceString && toString() == other.slowToString();
@@ -115,7 +117,7 @@
     return this;
   }
 
-  bool isEmpty() => false;
+  bool get isEmpty => false;
   bool isPrivate() => false;
 }
 
diff --git a/lib/compiler/implementation/scanner/listener.dart b/lib/compiler/implementation/scanner/listener.dart
index 2a0572d..8d309ae 100644
--- a/lib/compiler/implementation/scanner/listener.dart
+++ b/lib/compiler/implementation/scanner/listener.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of scanner;
+
 const bool VERBOSE = false;
 
 /**
@@ -654,7 +656,7 @@
     // Library tags are only allowed in the library file itself, not
     // in sourced files.
     LibraryElement library = compilationUnitElement.getLibrary();
-    return compilationUnitElement.localMembers.isEmpty()
+    return compilationUnitElement.localMembers.isEmpty
       && library.entryCompilationUnit == compilationUnitElement;
   }
 
@@ -842,7 +844,7 @@
                                                  modifiers,
                                                  enclosingElement);
     for (Link<Node> variableNodes = variables.nodes;
-         !variableNodes.isEmpty();
+         !variableNodes.isEmpty;
          variableNodes = variableNodes.tail) {
       Expression initializedIdentifier = variableNodes.head;
       Identifier identifier = initializedIdentifier.asIdentifier();
@@ -990,7 +992,7 @@
   }
 
   void pushElement(Element element) {
-    for (Link link = metadata; !link.isEmpty(); link = link.tail) {
+    for (Link link = metadata; !link.isEmpty; link = link.tail) {
       element.addMetadata(link.head);
     }
     metadata = const Link<MetadataAnnotation>();
@@ -1019,7 +1021,7 @@
   }
 
   Node popNode() {
-    assert(!nodes.isEmpty());
+    assert(!nodes.isEmpty);
     Node node = nodes.head;
     nodes = nodes.tail;
     if (VERBOSE) log("pop $nodes");
@@ -1027,7 +1029,7 @@
   }
 
   Node peekNode() {
-    assert(!nodes.isEmpty());
+    assert(!nodes.isEmpty);
     Node node = nodes.head;
     if (VERBOSE) log("peek $node");
     return node;
@@ -1913,6 +1915,6 @@
   NodeListener listener = new NodeListener(diagnosticListener, element);
   doParse(new Parser(listener));
   Node node = listener.popNode();
-  assert(listener.nodes.isEmpty());
+  assert(listener.nodes.isEmpty);
   return node;
 }
diff --git a/lib/compiler/implementation/scanner/parser.dart b/lib/compiler/implementation/scanner/parser.dart
index a7f9fcd..5f3e99a 100644
--- a/lib/compiler/implementation/scanner/parser.dart
+++ b/lib/compiler/implementation/scanner/parser.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of scanner;
+
 /**
  * An event generating parser of Dart programs. This parser expects
  * all tokens in a linked list (aka a token stream).
@@ -573,13 +575,13 @@
     listener.beginTopLevelMember(token);
 
     Link<Token> identifiers = findMemberName(token);
-    if (identifiers.isEmpty()) {
+    if (identifiers.isEmpty) {
       return listener.unexpected(start);
     }
     Token name = identifiers.head;
     identifiers = identifiers.tail;
     Token getOrSet;
-    if (!identifiers.isEmpty()) {
+    if (!identifiers.isEmpty) {
       String value = identifiers.head.stringValue;
       if ((identical(value, 'get')) || (identical(value, 'set'))) {
         getOrSet = identifiers.head;
@@ -587,7 +589,7 @@
       }
     }
     Token type;
-    if (!identifiers.isEmpty()) {
+    if (!identifiers.isEmpty) {
       if (isValidTypeReference(identifiers.head)) {
         type = identifiers.head;
         identifiers = identifiers.tail;
@@ -771,7 +773,7 @@
 
   void parseModifierList(Link<Token> tokens) {
     int count = 0;
-    for (; !tokens.isEmpty(); tokens = tokens.tail) {
+    for (; !tokens.isEmpty; tokens = tokens.tail) {
       Token token = tokens.head;
       if (isModifier(token)) {
         parseModifier(token);
@@ -867,26 +869,26 @@
     listener.beginMember(token);
 
     Link<Token> identifiers = findMemberName(token);
-    if (identifiers.isEmpty()) {
+    if (identifiers.isEmpty) {
       return listener.unexpected(start);
     }
     Token name = identifiers.head;
     identifiers = identifiers.tail;
-    if (!identifiers.isEmpty()) {
+    if (!identifiers.isEmpty) {
       if (optional('operator', identifiers.head)) {
         name = identifiers.head;
         identifiers = identifiers.tail;
       }
     }
     Token getOrSet;
-    if (!identifiers.isEmpty()) {
+    if (!identifiers.isEmpty) {
       if (isGetOrSet(identifiers.head)) {
         getOrSet = identifiers.head;
         identifiers = identifiers.tail;
       }
     }
     Token type;
-    if (!identifiers.isEmpty()) {
+    if (!identifiers.isEmpty) {
       if (isValidTypeReference(identifiers.head)) {
         type = identifiers.head;
         identifiers = identifiers.tail;
@@ -1538,7 +1540,7 @@
   }
 
   Token parseParenthesizedExpression(Token token) {
-    Token begin = token;
+    var begin = token;
     token = expect('(', token);
     token = parseExpression(token);
     if (!identical(begin.endGroup, token)) {
diff --git a/lib/compiler/implementation/scanner/parser_task.dart b/lib/compiler/implementation/scanner/parser_task.dart
index 01d43ad..eca572b 100644
--- a/lib/compiler/implementation/scanner/parser_task.dart
+++ b/lib/compiler/implementation/scanner/parser_task.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of scanner;
+
 class ParserTask extends CompilerTask {
   ParserTask(Compiler compiler) : super(compiler);
   String get name => 'Parser';
diff --git a/lib/compiler/implementation/scanner/partial_parser.dart b/lib/compiler/implementation/scanner/partial_parser.dart
index fe2bcd7..7516e6c 100644
--- a/lib/compiler/implementation/scanner/partial_parser.dart
+++ b/lib/compiler/implementation/scanner/partial_parser.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of scanner;
+
 class PartialParser extends Parser {
   PartialParser(Listener listener) : super(listener);
 
diff --git a/lib/compiler/implementation/scanner/scanner.dart b/lib/compiler/implementation/scanner/scanner.dart
index 7c51c03..647880b 100644
--- a/lib/compiler/implementation/scanner/scanner.dart
+++ b/lib/compiler/implementation/scanner/scanner.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of scanner;
+
 abstract class Scanner {
   Token tokenize();
 }
@@ -256,7 +258,7 @@
     }
 
     // TODO(ahe): Would a range check be faster?
-    if (identical(next, $1) || identical(next, $2) || identical(next, $3) 
+    if (identical(next, $1) || identical(next, $2) || identical(next, $3)
         || identical(next, $4) ||  identical(next, $5) || identical(next, $6)
         || identical(next, $7) || identical(next, $8) || identical(next, $9)) {
       return tokenizeNumber(next);
diff --git a/lib/compiler/implementation/scanner/scanner_implementation.dart b/lib/compiler/implementation/scanner/scanner_implementation.dart
index 5bc43e7..1bd8327 100644
--- a/lib/compiler/implementation/scanner/scanner_implementation.dart
+++ b/lib/compiler/implementation/scanner/scanner_implementation.dart
@@ -2,8 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#library('scanner_implementation');
-#import('scannerlib.dart');
-#import('../util/util.dart');
-#import('../util/characters.dart');
-#source('array_based_scanner.dart');
+library scanner_implementation;
+
+import 'scannerlib.dart';
+import '../util/util.dart';
+import '../util/characters.dart';
+
+part 'array_based_scanner.dart';
diff --git a/lib/compiler/implementation/scanner/scanner_task.dart b/lib/compiler/implementation/scanner/scanner_task.dart
index 171a145..63b9381 100644
--- a/lib/compiler/implementation/scanner/scanner_task.dart
+++ b/lib/compiler/implementation/scanner/scanner_task.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of scanner;
+
 class ScannerTask extends CompilerTask {
   ScannerTask(Compiler compiler) : super(compiler);
   String get name => 'Scanner';
diff --git a/lib/compiler/implementation/scanner/string_scanner.dart b/lib/compiler/implementation/scanner/string_scanner.dart
index 51851e2..23f7c4bc 100644
--- a/lib/compiler/implementation/scanner/string_scanner.dart
+++ b/lib/compiler/implementation/scanner/string_scanner.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of scanner;
+
 /**
  * Scanner that reads from a String and creates tokens that points to
  * substrings.
@@ -38,11 +40,18 @@
   final String internalString;
   final int begin;
   final int end;
+  int cashedHash = 0;
+  String cachedSubString;
 
-  const SubstringWrapper(String this.internalString,
-                         int this.begin, int this.end);
+  SubstringWrapper(String this.internalString,
+                   int this.begin, int this.end);
 
-  int hashCode() => slowToString().hashCode();
+  int get hashCode {
+    if (0 == cashedHash) {
+      cashedHash = slowToString().hashCode;
+    }
+    return cashedHash;
+  }
 
   bool operator ==(other) {
     return other is SourceString && slowToString() == other.slowToString();
@@ -52,7 +61,12 @@
     sb.add(internalString.substring(begin, end));
   }
 
-  String slowToString() => internalString.substring(begin, end);
+  String slowToString() {
+    if (cachedSubString == null) {
+      cachedSubString = internalString.substring(begin, end);
+    }
+    return cachedSubString;
+  }
 
   String toString() => "SubstringWrapper(${slowToString()})";
 
@@ -69,7 +83,7 @@
                                 begin + initial, end - terminal);
   }
 
-  bool isEmpty() => begin == end;
+  bool get isEmpty => begin == end;
 
-  bool isPrivate() => !isEmpty() && identical(internalString.charCodeAt(begin), $_);
+  bool isPrivate() => !isEmpty && identical(internalString.charCodeAt(begin), $_);
 }
diff --git a/lib/compiler/implementation/scanner/token.dart b/lib/compiler/implementation/scanner/token.dart
index 99055fe..9012021 100644
--- a/lib/compiler/implementation/scanner/token.dart
+++ b/lib/compiler/implementation/scanner/token.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of scanner;
+
 const int EOF_TOKEN = 0;
 
 const int KEYWORD_TOKEN = $k;
@@ -190,7 +192,7 @@
 
   String slowToString();
 
-  bool isEmpty();
+  bool get isEmpty;
 
   bool isPrivate();
 }
@@ -200,7 +202,7 @@
 
   const StringWrapper(String this.stringValue);
 
-  int hashCode() => stringValue.hashCode();
+  int get hashCode => stringValue.hashCode;
 
   bool operator ==(other) {
     return other is SourceString && toString() == other.slowToString();
@@ -224,9 +226,9 @@
         stringValue.substring(initial, stringValue.length - terminal));
   }
 
-  bool isEmpty() => stringValue.isEmpty();
+  bool get isEmpty => stringValue.isEmpty;
 
-  bool isPrivate() => !isEmpty() && identical(stringValue.charCodeAt(0), $_);
+  bool isPrivate() => !isEmpty && identical(stringValue.charCodeAt(0), $_);
 }
 
 class StringCodeIterator implements Iterator<int> {
@@ -243,7 +245,7 @@
     assert(end <= string.length);
   }
 
-  bool hasNext() => index < end;
+  bool get hasNext => index < end;
   int next() => string.charCodeAt(index++);
 }
 
diff --git a/lib/compiler/implementation/script.dart b/lib/compiler/implementation/script.dart
index 79dc7d7..8383686 100644
--- a/lib/compiler/implementation/script.dart
+++ b/lib/compiler/implementation/script.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 class Script {
   // TODO(kasperl): Once MockFile in tests/compiler/dart2js/parser_helper.dart
   // implements SourceFile, we should be able to type the [file] field as
diff --git a/lib/compiler/implementation/source_file.dart b/lib/compiler/implementation/source_file.dart
index c32225b..d517e76 100644
--- a/lib/compiler/implementation/source_file.dart
+++ b/lib/compiler/implementation/source_file.dart
@@ -40,7 +40,7 @@
 
   int getLine(int position) {
     List<int> starts = lineStarts;
-    if (position < 0 || starts.last() <= position) {
+    if (position < 0 || starts.last <= position) {
       throw 'bad position #$position in file $filename with '
             'length ${text.length}.';
     }
diff --git a/lib/compiler/implementation/ssa/bailout.dart b/lib/compiler/implementation/ssa/bailout.dart
index af15533..bd6223f 100644
--- a/lib/compiler/implementation/ssa/bailout.dart
+++ b/lib/compiler/implementation/ssa/bailout.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of ssa;
+
 class BailoutInfo {
   int instructionId;
   int bailoutId;
@@ -59,7 +61,7 @@
     loopMarkers.addAll(other.loopMarkers);
   }
 
-  bool isEmpty() => lives.isEmpty() && loopMarkers.isEmpty();
+  bool get isEmpty => lives.isEmpty && loopMarkers.isEmpty;
 }
 
 
@@ -263,7 +265,7 @@
 
   void visitGraph(HGraph graph) {
     visitPostDominatorTree(graph);
-    if (!liveInstructions[graph.entry].isEmpty()) {
+    if (!liveInstructions[graph.entry].isEmpty) {
       compiler.internalError('Bailout environment computation',
           node: compiler.currentElement.parseNode(compiler));
     }
@@ -417,7 +419,7 @@
   void visitGraph(HGraph graph) {
     subGraph = new SubGraph(graph.entry, graph.exit);
     visitBasicBlock(graph.entry);
-    if (!blocks.isEmpty()) {
+    if (!blocks.isEmpty) {
       compiler.internalError('Bailout propagation',
           node: compiler.currentElement.parseNode(compiler));
     }
@@ -430,7 +432,7 @@
     if (block.isLoopHeader()) {
       blocks.addLast(block);
     } else if (block.isLabeledBlock()
-               && (blocks.isEmpty() || !identical(blocks.last(), block))) {
+               && (blocks.isEmpty || !identical(blocks.last, block))) {
       HLabeledBlockInformation info = block.blockFlow.body;
       visitStatements(info.body);
       return;
@@ -530,7 +532,7 @@
     if (inputLength > maxBailoutParameters) {
       maxBailoutParameters = inputLength;
     }
-    if (blocks.isEmpty()) {
+    if (blocks.isEmpty) {
       if (firstBailoutTarget == null) {
         firstBailoutTarget = target;
       } else {
diff --git a/lib/compiler/implementation/ssa/builder.dart b/lib/compiler/implementation/ssa/builder.dart
index d48f76e..1ef011b 100644
--- a/lib/compiler/implementation/ssa/builder.dart
+++ b/lib/compiler/implementation/ssa/builder.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of ssa;
+
 class Interceptors {
   Compiler compiler;
   Interceptors(Compiler this.compiler);
@@ -948,7 +950,7 @@
     SendSet node = variable.parseNode(compiler);
     openFunction(variable, node);
     Link<Node> link = node.arguments;
-    assert(!link.isEmpty() && link.tail.isEmpty());
+    assert(!link.isEmpty && link.tail.isEmpty);
     visit(link.head);
     HInstruction value = pop();
     value = potentiallyCheckType(value, variable);
@@ -970,12 +972,12 @@
     // If we know the body doesn't have any code, we don't generate it.
     if (node.body.asBlock() != null) {
       NodeList statements = node.body.asBlock().statements;
-      if (statements.isEmpty()) return null;
+      if (statements.isEmpty) return null;
     }
     ClassElement classElement = constructor.getEnclosingClass();
     ConstructorBodyElement bodyElement;
     for (Link<Element> backendMembers = classElement.backendMembers;
-         !backendMembers.isEmpty();
+         !backendMembers.isEmpty;
          backendMembers = backendMembers.tail) {
       Element backendMember = backendMembers.head;
       if (backendMember.isGenerativeConstructorBody()) {
@@ -991,7 +993,8 @@
       // [:resolveMethodElement:] require the passed element to be a
       // declaration.
       TreeElements treeElements =
-          compiler.resolver.resolveMethodElement(constructor.declaration);
+          compiler.enqueuer.resolution.getCachedElements(
+              constructor.declaration);
       classElement.backendMembers =
           classElement.backendMembers.prepend(bodyElement);
 
@@ -1161,7 +1164,8 @@
 
       // Build the initializers in the context of the new constructor.
       TreeElements oldElements = elements;
-      elements = compiler.resolver.resolveMethodElement(constructor);
+      elements =
+          compiler.enqueuer.resolution.getCachedElements(constructor);
       buildInitializers(constructor, constructors, fieldValues);
       elements = oldElements;
     });
@@ -1187,7 +1191,7 @@
 
     if (functionNode.initializers != null) {
       Link<Node> initializers = functionNode.initializers.nodes;
-      for (Link<Node> link = initializers; !link.isEmpty(); link = link.tail) {
+      for (Link<Node> link = initializers; !link.isEmpty; link = link.tail) {
         assert(link.head is Send);
         if (link.head is !SendSet) {
           // A super initializer or constructor redirection.
@@ -1204,7 +1208,7 @@
           // A field initializer.
           SendSet init = link.head;
           Link<Node> arguments = init.arguments;
-          assert(!arguments.isEmpty() && arguments.tail.isEmpty());
+          assert(!arguments.isEmpty && arguments.tail.isEmpty);
           sourceElementStack.add(constructor);
           visit(arguments.head);
           sourceElementStack.removeLast();
@@ -1545,7 +1549,7 @@
   }
 
   void dup() {
-    stack.add(stack.last());
+    stack.add(stack.last);
   }
 
   HInstruction popBoolified() {
@@ -1573,7 +1577,7 @@
       sourceFileLocationForToken(node, node.getEndToken());
 
   SourceFileLocation sourceFileLocationForToken(Node node, Token token) {
-    Element element = sourceElementStack.last();
+    Element element = sourceElementStack.last;
     // TODO(johnniwinther): remove the 'element.patch' hack.
     if (element is FunctionElement) {
       FunctionElement functionElement = element;
@@ -1595,17 +1599,17 @@
 
   visitBlock(Block node) {
     for (Link<Node> link = node.statements.nodes;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
       visit(link.head);
       if (isAborted()) {
         // The block has been aborted by a return or a throw.
-        if (!stack.isEmpty()) compiler.cancel('non-empty instruction stack');
+        if (!stack.isEmpty) compiler.cancel('non-empty instruction stack');
         return;
       }
     }
     assert(!current.isClosed());
-    if (!stack.isEmpty()) compiler.cancel('non-empty instruction stack');
+    if (!stack.isEmpty) compiler.cancel('non-empty instruction stack');
   }
 
   visitClassNode(ClassNode node) {
@@ -1657,7 +1661,7 @@
     branchBlock.addSuccessor(loopExitBlock);
     open(loopExitBlock);
     localsHandler.endLoop(loopEntry);
-    if (!breakLocals.isEmpty()) {
+    if (!breakLocals.isEmpty) {
       breakLocals.add(savedLocals);
       localsHandler = savedLocals.mergeMultiple(breakLocals, loopExitBlock);
     } else {
@@ -1751,7 +1755,7 @@
     HLabeledBlockInformation labelInfo;
     List<LabelElement> labels = jumpHandler.labels();
     TargetElement target = elements[loop];
-    if (!labels.isEmpty()) {
+    if (!labels.isEmpty) {
       beginBodyBlock.setBlockFlow(
           new HLabeledBlockInformation(
               new HSubGraphBlockInformation(bodyGraph),
@@ -1873,7 +1877,7 @@
       continueLocals.add(locals);
     });
     bodyExitBlock.addSuccessor(conditionBlock);
-    if (!continueLocals.isEmpty()) {
+    if (!continueLocals.isEmpty) {
       continueLocals.add(localsHandler);
       localsHandler = savedLocals.mergeMultiple(continueLocals, conditionBlock);
       SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock);
@@ -1881,7 +1885,7 @@
       HSubGraphBlockInformation bodyInfo =
           new HSubGraphBlockInformation(bodyGraph);
       HLabeledBlockInformation info;
-      if (!labels.isEmpty()) {
+      if (!labels.isEmpty) {
         info = new HLabeledBlockInformation(bodyInfo, labels, isContinue: true);
       } else {
         info = new HLabeledBlockInformation.implicit(bodyInfo, target,
@@ -1934,7 +1938,7 @@
     compiler.enqueuer.codegen.addToWorkList(callElement, elements);
     // TODO(ahe): This should be registered in codegen, not here.
     compiler.enqueuer.codegen.registerInstantiatedClass(closureClassElement);
-    assert(closureClassElement.localScope.isEmpty());
+    assert(closureClassElement.localScope.isEmpty);
 
     List<HInstruction> capturedVariables = <HInstruction>[];
     for (Element member in closureClassElement.backendMembers) {
@@ -2198,7 +2202,7 @@
       // An erroneous element indicates an unresolved static getter.
       generateThrowNoSuchMethod(send,
                                 getTargetName(element, 'get'),
-                                const Link<Node>());
+                                argumentNodes: const Link<Node>());
     } else {
       stack.add(localsHandler.readLocal(element));
     }
@@ -2247,7 +2251,7 @@
       // An erroneous element indicates an unresolved static setter.
       generateThrowNoSuchMethod(send,
                                 getTargetName(element, 'set'),
-                                send.arguments);
+                                argumentNodes: send.arguments);
     } else {
       stack.add(value);
       // If the value does not already have a name, give it here.
@@ -2395,7 +2399,7 @@
           new Map<SourceString, HInstruction>();
       List<SourceString> namedArguments = selector.namedArguments;
       int nameIndex = 0;
-      for (; !arguments.isEmpty(); arguments = arguments.tail) {
+      for (; !arguments.isEmpty; arguments = arguments.tail) {
         visit(arguments.head);
         instructions[namedArguments[nameIndex++]] = pop();
       }
@@ -2447,7 +2451,7 @@
   }
 
   void addGenericSendArgumentsToList(Link<Node> link, List<HInstruction> list) {
-    for (; !link.isEmpty(); link = link.tail) {
+    for (; !link.isEmpty; link = link.tail) {
       visit(link.head);
       list.add(pop());
     }
@@ -2459,7 +2463,7 @@
 
     SourceString dartMethodName;
     bool isNotEquals = false;
-    if (node.isIndex && !node.arguments.tail.isEmpty()) {
+    if (node.isIndex && !node.arguments.tail.isEmpty) {
       dartMethodName = Elements.constructOperatorName(
           const SourceString('[]='), false);
     } else if (node.selector.asOperator() != null) {
@@ -2528,7 +2532,7 @@
     // If the invoke is on foreign code, don't visit the first
     // argument, which is the type, and the second argument,
     // which is the foreign code.
-    if (link.isEmpty() || link.tail.isEmpty()) {
+    if (link.isEmpty || link.tail.isEmpty) {
       compiler.cancel('At least two arguments expected',
                       node: node.argumentsNode);
     }
@@ -2559,7 +2563,7 @@
 
   void handleForeignUnintercepted(Send node) {
     Link<Node> link = node.arguments;
-    if (!link.tail.isEmpty()) {
+    if (!link.tail.isEmpty) {
       compiler.cancel(
           'More than one expression in UNINTERCEPTED()', node: node);
     }
@@ -2571,7 +2575,7 @@
 
   void handleForeignJsHasEquals(Send node) {
     List<HInstruction> inputs = <HInstruction>[];
-    if (!node.arguments.tail.isEmpty()) {
+    if (!node.arguments.tail.isEmpty) {
       compiler.cancel(
           'More than one expression in JS_HAS_EQUALS()', node: node);
     }
@@ -2584,7 +2588,7 @@
   }
 
   void handleForeignJsCurrentIsolate(Send node) {
-    if (!node.arguments.isEmpty()) {
+    if (!node.arguments.isEmpty) {
       compiler.cancel(
           'Too many arguments to JS_CURRENT_ISOLATE', node: node);
     }
@@ -2635,7 +2639,7 @@
   }
 
   void handleForeignDartClosureToJs(Send node) {
-    if (node.arguments.isEmpty() || !node.arguments.tail.isEmpty()) {
+    if (node.arguments.isEmpty || !node.arguments.tail.isEmpty) {
       compiler.cancel('Exactly one argument required',
                       node: node.argumentsNode);
     }
@@ -2806,7 +2810,7 @@
       } else if (type is InterfaceType) {
         bool isFirstVariable = true;
         InterfaceType interfaceType = type;
-        bool hasTypeArguments = !interfaceType.arguments.isEmpty();
+        bool hasTypeArguments = !interfaceType.arguments.isEmpty;
         if (!isInQuotes) template.add("'");
         template.add(rti.getName(type.element));
         if (hasTypeArguments) {
@@ -2853,7 +2857,7 @@
   void callSetRuntimeTypeInfo(ClassElement element,
                               List<HInstruction> rtiInputs,
                               HInstruction newObject) {
-    bool needsRti = compiler.world.needsRti(element) && !rtiInputs.isEmpty();
+    bool needsRti = compiler.world.needsRti(element) && !rtiInputs.isEmpty;
     bool runtimeTypeIsUsed = compiler.enabledRuntimeType;
     if (!needsRti && !runtimeTypeIsUsed) return;
 
@@ -2904,7 +2908,7 @@
       Element originalElement = elements[node];
       if (identical(originalElement.getEnclosingClass(), compiler.listClass)) {
         isListConstructor = true;
-        if (node.arguments.isEmpty()) {
+        if (node.arguments.isEmpty) {
           return HType.EXTENDABLE_ARRAY;
         } else {
           return HType.MUTABLE_ARRAY;
@@ -2974,7 +2978,9 @@
     Selector selector = elements.getSelector(node);
     Element element = elements[node];
     if (element.isErroneous()) {
-      generateThrowNoSuchMethod(node, getTargetName(element), node.arguments);
+      generateThrowNoSuchMethod(node,
+                                getTargetName(element),
+                                argumentNodes: node.arguments);
       return;
     }
     if (identical(element, compiler.assertMethod) && !compiler.enableUserAssertions) {
@@ -3053,8 +3059,8 @@
 
   void generateThrowNoSuchMethod(Node diagnosticNode,
                                  String methodName,
-                                 [Link<Node> argumentNodes,
-                                  List<HInstruction> argumentValues]) {
+                                 {Link<Node> argumentNodes,
+                                  List<HInstruction> argumentValues}) {
     Element helper =
         compiler.findHelper(const SourceString('throwNoSuchMethod'));
     Constant receiverConstant =
@@ -3084,7 +3090,7 @@
       if (error.messageKind == MessageKind.CANNOT_FIND_CONSTRUCTOR) {
         generateThrowNoSuchMethod(node.send,
                                   getTargetName(error, 'constructor'),
-                                  node.send.arguments);
+                                  argumentNodes: node.send.arguments);
       } else if (error.messageKind == MessageKind.CANNOT_RESOLVE) {
         Message message = error.messageKind.message(error.messageArguments);
         generateRuntimeError(node.send, message.toString());
@@ -3167,7 +3173,7 @@
     } else if (const SourceString("=") == op.source) {
       Element element = elements[node];
       Link<Node> link = node.arguments;
-      assert(!link.isEmpty() && link.tail.isEmpty());
+      assert(!link.isEmpty && link.tail.isEmpty);
       visit(link.head);
       HInstruction value = pop();
       generateSetter(node, element, value);
@@ -3178,7 +3184,7 @@
              const SourceString("--") == op.source ||
              node.assignmentOperator.source.stringValue.endsWith("="));
       Element element = elements[node];
-      bool isCompoundAssignment = !node.arguments.isEmpty();
+      bool isCompoundAssignment = !node.arguments.isEmpty;
       bool isPrefix = !node.isPostfix;  // Compound assignments are prefix.
 
       // [receiver] is only used if the node is an instance send.
@@ -3246,7 +3252,7 @@
   }
 
   visitNodeList(NodeList node) {
-    for (Link<Node> link = node.nodes; !link.isEmpty(); link = link.tail) {
+    for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
       if (isAborted()) {
         compiler.reportWarning(link.head, 'dead code');
       } else {
@@ -3291,7 +3297,7 @@
       visit(node.expression);
       value = pop();
     }
-    if (!inliningStack.isEmpty()) {
+    if (!inliningStack.isEmpty) {
       localsHandler.updateLocal(returnElement, value);
     } else {
       close(attachPosition(new HReturn(value), node)).addSuccessor(graph.exit);
@@ -3320,7 +3326,7 @@
 
   visitVariableDefinitions(VariableDefinitions node) {
     for (Link<Node> link = node.definitions.nodes;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
       Node definition = link.head;
       if (definition is Identifier) {
@@ -3344,7 +3350,7 @@
 
     List<HInstruction> inputs = <HInstruction>[];
     for (Link<Node> link = node.elements.nodes;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
       visit(link.head);
       inputs.add(pop());
@@ -3424,7 +3430,7 @@
   visitForIn(ForIn node) {
     // Generate a structure equivalent to:
     //   Iterator<E> $iter = <iterable>.iterator()
-    //   while ($iter.hasNext()) {
+    //   while ($iter.hasNext) {
     //     E <declaredIdentifier> = $iter.next();
     //     <body>
     //   }
@@ -3441,8 +3447,13 @@
     }
     HInstruction buildCondition() {
       SourceString name = const SourceString('hasNext');
-      Selector call = new Selector.call(name, work.element.getLibrary(), 0);
-      push(new HInvokeDynamicMethod(call, <HInstruction>[iterator]));
+      Selector selector = new Selector.getter(name, work.element.getLibrary());
+      if (interceptors.getStaticGetInterceptor(name) != null) {
+        compiler.internalError("hasNext getter must not be intercepted",
+                               node: node);
+      }
+      bool hasGetter = compiler.world.hasAnyUserDefinedGetter(selector);
+      push(new HInvokeDynamicGetter(selector, null, iterator, !hasGetter));
       return popBoolified();
     }
     void buildBody() {
@@ -3462,7 +3473,7 @@
       if (variable.isErroneous()) {
         generateThrowNoSuchMethod(node,
                                   getTargetName(variable, 'set'),
-                                  <HInstruction>[oldVariable]);
+                                  argumentValues: <HInstruction>[oldVariable]);
         pop();
       } else {
         localsHandler.updateLocal(variable, oldVariable);
@@ -3535,7 +3546,7 @@
     }
     List<HInstruction> inputs = <HInstruction>[];
     for (Link<Node> link = node.entries.nodes;
-         !link.isEmpty();
+         !link.isEmpty;
          link = link.tail) {
       visit(link.head);
       inputs.addLast(pop());
@@ -3562,7 +3573,7 @@
     HBasicBlock startBlock = openNewBlock();
     visit(node.expression);
     HInstruction expression = pop();
-    if (node.cases.isEmpty()) {
+    if (node.cases.isEmpty) {
       return;
     }
 
@@ -3661,7 +3672,7 @@
     HBasicBlock expressionStart = openNewBlock();
     visit(node.expression);
     HInstruction expression = pop();
-    if (node.cases.isEmpty()) {
+    if (node.cases.isEmpty) {
       return true;
     }
     HBasicBlock expressionEnd = current;
@@ -3677,7 +3688,7 @@
     Element getFallThroughErrorElement =
         compiler.findHelper(const SourceString("getFallThroughError"));
     Iterator<Node> caseIterator = node.cases.iterator();
-    while (caseIterator.hasNext()) {
+    while (caseIterator.hasNext) {
       SwitchCase switchCase = caseIterator.next();
       List<Constant> caseConstants = <Constant>[];
       HBasicBlock block = graph.addNewBlock();
@@ -3702,7 +3713,7 @@
       open(block);
       localsHandler = new LocalsHandler.from(savedLocals);
       visit(switchCase.statements);
-      if (!isAborted() && caseIterator.hasNext()) {
+      if (!isAborted() && caseIterator.hasNext) {
         pushInvokeHelper0(getFallThroughErrorElement);
         HInstruction error = pop();
         close(new HThrow(error));
@@ -3827,14 +3838,14 @@
     }
 
     Link<Node> skipLabels(Link<Node> labelsAndCases) {
-      while (!labelsAndCases.isEmpty() && labelsAndCases.head is Label) {
+      while (!labelsAndCases.isEmpty && labelsAndCases.head is Label) {
         labelsAndCases = labelsAndCases.tail;
       }
       return labelsAndCases;
     }
 
     Link<Node> labelsAndCases = skipLabels(node.labelsAndCases.nodes);
-    if (labelsAndCases.isEmpty()) {
+    if (labelsAndCases.isEmpty) {
       // Default case with no expressions.
       if (!node.isDefaultCase) {
         compiler.internalError("Case with no expression and not default",
@@ -3870,7 +3881,7 @@
 
       // If this is the last expression, just return it.
       Link<Node> tail = skipLabels(remainingCases.tail);
-      if (tail.isEmpty()) {
+      if (tail.isEmpty) {
         left();
         return;
       }
@@ -3885,7 +3896,7 @@
 
     if (node.isDefaultCase) {
       // Default case must be last.
-      assert(cases.tail.isEmpty());
+      assert(cases.tail.isEmpty);
       // Perform the tests until one of them match, but then always execute the
       // statements.
       // TODO(lrn): Stop performing tests when all expressions are compile-time
@@ -3893,7 +3904,7 @@
       handleIf(node, () { buildTests(labelsAndCases); }, (){}, null);
       visit(node.statements);
     } else {
-      if (cases.tail.isEmpty()) {
+      if (cases.tail.isEmpty) {
         handleIf(node,
                  () { buildTests(labelsAndCases); },
                  () { visit(node.statements); },
@@ -3944,7 +3955,7 @@
     SubGraph catchGraph = null;
     HParameterValue exception = null;
 
-    if (!node.catchBlocks.isEmpty()) {
+    if (!node.catchBlocks.isEmpty) {
       localsHandler = new LocalsHandler.from(savedLocals);
       startCatchBlock = graph.addNewBlock();
       open(startCatchBlock);
@@ -4009,7 +4020,7 @@
       }
 
       void visitElse() {
-        if (link.isEmpty()) {
+        if (link.isEmpty) {
           close(new HThrow(exception, isRethrow: true));
         } else {
           CatchBlock newBlock = link.head;
@@ -4444,7 +4455,7 @@
         (isAnd ? send.isLogicalAnd : send.isLogicalOr)) {
       Node newLeft = send.receiver;
       Link<Node> link = send.argumentsNode.nodes;
-      assert(link.tail.isEmpty());
+      assert(link.tail.isEmpty);
       Node middle = link.head;
       handleLogicalAndOrWithLeftNode(
           newLeft,
@@ -4486,7 +4497,7 @@
     HBasicBlock elseBlock = elseBranch.block;
     HBasicBlock joinBlock;
     // If at least one branch did not abort, open the joinBranch.
-    if (!joinBranch.block.predecessors.isEmpty()) {
+    if (!joinBranch.block.predecessors.isEmpty) {
       startBranch(joinBranch);
       joinBlock = joinBranch.block;
     }
diff --git a/lib/compiler/implementation/ssa/codegen.dart b/lib/compiler/implementation/ssa/codegen.dart
index d8cda34..fdf877a 100644
--- a/lib/compiler/implementation/ssa/codegen.dart
+++ b/lib/compiler/implementation/ssa/codegen.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of ssa;
+
 class SsaCodeGeneratorTask extends CompilerTask {
 
   final JavaScriptBackend backend;
@@ -85,7 +87,7 @@
         parameters.add(new js.Parameter(name));
       });
       addTypeParameters(work.element, parameters, parameterNames);
-      String parametersString = Strings.join(parameterNames.getValues(), ", ");
+      String parametersString = Strings.join(parameterNames.values, ", ");
       SsaOptimizedCodeGenerator codegen = new SsaOptimizedCodeGenerator(
           backend, work, parameters, parameterNames);
       codegen.visitGraph(graph);
@@ -319,7 +321,7 @@
    * to the [statement].
    */
   void pushStatement(js.Statement statement, [HInstruction instruction]) {
-    assert(expressionStack.isEmpty());
+    assert(expressionStack.isEmpty);
     if (instruction != null) {
       attachLocation(statement, instruction);
     }
@@ -351,7 +353,7 @@
   }
 
   attachLocationToLast(HInstruction instruction) {
-    attachLocation(expressionStack.last(), instruction);
+    attachLocation(expressionStack.last, instruction);
   }
 
   js.Node attachLocation(js.Node jsNode, HInstruction instruction) {
@@ -405,7 +407,7 @@
     subGraph = new SubGraph(graph.entry, graph.exit);
     HBasicBlock start = beginGraph(graph);
     visitBasicBlock(start);
-    if (!delayedVariableDeclarations.isEmpty()) {
+    if (!delayedVariableDeclarations.isEmpty) {
       List<js.VariableInitialization> declarations =
           <js.VariableInitialization>[];
       delayedVariableDeclarations.forEach((String name) {
@@ -460,8 +462,8 @@
         // HFieldSet generates code on the form x.y = ..., which isn't
         // valid in a declaration, but it also always have no uses, so
         // it's caught by that test too.
-        assert(current is! HFieldSet || current.usedBy.isEmpty());
-        if (current.usedBy.isEmpty()) {
+        assert(current is! HFieldSet || current.usedBy.isEmpty);
+        if (current.usedBy.isEmpty) {
           result = TYPE_EXPRESSION;
         }
         current = current.next;
@@ -559,7 +561,7 @@
     visitSubGraph(expressionSubGraph.subExpression);
     expressionStack = oldExpressionStack;
     isGeneratingExpression = oldIsGeneratingExpression;
-    if (sequenceElements.isEmpty()) {
+    if (sequenceElements.isEmpty) {
       // Happens when the initializer, condition or update of a loop is empty.
       return null;
     } else if (sequenceElements.length == 1) {
@@ -687,7 +689,7 @@
   visitStatement(HInstruction node) {
     assert(!isGeneratingExpression);
     visit(node);
-    if (!expressionStack.isEmpty()) {
+    if (!expressionStack.isEmpty) {
       assert(expressionStack.length == 1);
       pushExpressionAsStatement(pop());
     }
@@ -1005,7 +1007,7 @@
     endLabeledBlock(labeledBlockInfo);
 
     if (labeledBlockInfo.isContinue) {
-      while (!continueOverrides.isEmpty()) {
+      while (!continueOverrides.isEmpty) {
         continueAction.remove(continueOverrides.head);
         continueOverrides = continueOverrides.tail;
       }
@@ -1146,8 +1148,8 @@
       }
     }
 
-    while (!worklist.isEmpty()) {
-      while (!ready.isEmpty()) {
+    while (!worklist.isEmpty) {
+      while (!ready.isEmpty) {
         String destination = ready.removeLast();
         String source = initialValue[destination];
         // Since [source] might have been updated, use the current
@@ -1323,7 +1325,7 @@
     // one dominated block (since it has only one successor).
     // If the successor is dominated by another block, then the other block
     // is responsible for visiting the successor.
-    if (dominated.isEmpty()) return;
+    if (dominated.isEmpty) return;
     if (dominated.length > 2) {
       compiler.internalError('dominated.length = ${dominated.length}',
                              instruction: node);
@@ -1675,7 +1677,7 @@
     String code = node.code.slowToString();
     List<HInstruction> inputs = node.inputs;
     if (node.isJsStatement(types)) {
-      if (!inputs.isEmpty()) {
+      if (!inputs.isEmpty) {
         compiler.internalError("foreign statement with inputs: $code",
                                instruction: node);
       }
@@ -2693,7 +2695,7 @@
   }
 
   String currentLabel() {
-    return labels.last();
+    return labels.last;
   }
 
   js.VariableUse generateStateUse()
@@ -2822,7 +2824,7 @@
 
   void startBailoutCase(List<HBailoutTarget> bailouts1,
                         [List<HBailoutTarget> bailouts2 = const []]) {
-    if (!defaultClauseUsedInBailoutStack.last() &&
+    if (!defaultClauseUsedInBailoutStack.last &&
         bailouts1.length + bailouts2.length >= 2) {
       currentContainer = new js.Block.empty();
       currentBailoutSwitch.cases.add(new js.Default(currentContainer));
@@ -2831,7 +2833,7 @@
     } else {
       _handleBailoutCase(bailouts1);
       _handleBailoutCase(bailouts2);
-      currentContainer = currentBailoutSwitch.cases.last().body;
+      currentContainer = currentBailoutSwitch.cases.last.body;
     }
   }
 
diff --git a/lib/compiler/implementation/ssa/codegen_helpers.dart b/lib/compiler/implementation/ssa/codegen_helpers.dart
index 611dcf1..d7c8547 100644
--- a/lib/compiler/implementation/ssa/codegen_helpers.dart
+++ b/lib/compiler/implementation/ssa/codegen_helpers.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of ssa;
+
 /**
  * Instead of emitting each SSA instruction with a temporary variable
  * mark instructions that can be emitted at their use-site.
@@ -132,7 +134,7 @@
     // Pop instructions from expectedInputs until instruction is found.
     // Return true if it is found, or false if not.
     bool findInInputsAndPopNonMatching(HInstruction instruction) {
-      while (!expectedInputs.isEmpty()) {
+      while (!expectedInputs.isEmpty) {
         HInstruction nextInput = expectedInputs.removeLast();
         assert(!generateAtUseSite.contains(nextInput));
         assert(nextInput.usedBy.length == 1);
@@ -162,14 +164,14 @@
       if (findInInputsAndPopNonMatching(instruction)) {
         tryGenerateAtUseSite(instruction);
       } else {
-        assert(expectedInputs.isEmpty());
+        assert(expectedInputs.isEmpty);
       }
       instruction.accept(this);
     }
 
     if (block.predecessors.length == 1
         && isBlockSinglePredecessor(block.predecessors[0])) {
-      assert(block.phis.isEmpty());
+      assert(block.phis.isEmpty);
       tryMergingExpressions(block.predecessors[0]);
     } else {
       expectedInputs = null;
@@ -276,7 +278,7 @@
     //             phi(phi1, true|false)
 
     if (end == null) return;
-    if (end.phis.isEmpty()) return;
+    if (end.phis.isEmpty) return;
     if (!identical(end.phis.first, end.phis.last)) return;
     HBasicBlock elseBlock = startIf.elseBlock;
 
@@ -308,7 +310,7 @@
         if (otherJoin.first != otherJoin.last) return;
         if (otherJoin.successors.length != 1) return;
         if (otherJoin.successors[0] != end) return;
-        if (otherJoin.phis.isEmpty()) return;
+        if (otherJoin.phis.isEmpty) return;
         if (!identical(otherJoin.phis.first, otherJoin.phis.last)) return;
         HPhi otherPhi = otherJoin.phis.first;
         if (thenInput != otherPhi) return;
diff --git a/lib/compiler/implementation/ssa/js_names.dart b/lib/compiler/implementation/ssa/js_names.dart
index baa468e..4a4ae60 100644
--- a/lib/compiler/implementation/ssa/js_names.dart
+++ b/lib/compiler/implementation/ssa/js_names.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of ssa;
+
 class JsNames {
   static const javaScriptKeywords = const <String>[
     // These are current keywords
diff --git a/lib/compiler/implementation/ssa/nodes.dart b/lib/compiler/implementation/ssa/nodes.dart
index 1dcd138..78e8e74 100644
--- a/lib/compiler/implementation/ssa/nodes.dart
+++ b/lib/compiler/implementation/ssa/nodes.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of ssa;
+
 abstract class HVisitor<R> {
   R visitAdd(HAdd node);
   R visitBailoutTarget(HBailoutTarget node);
@@ -365,13 +367,13 @@
   HInstruction first = null;
   HInstruction last = null;
 
-  bool isEmpty() {
+  bool get isEmpty {
     return first == null;
   }
 
   void addAfter(HInstruction cursor, HInstruction instruction) {
     if (cursor == null) {
-      assert(isEmpty());
+      assert(isEmpty);
       first = last = instruction;
     } else if (identical(cursor, last)) {
       last.next = instruction;
@@ -387,7 +389,7 @@
 
   void addBefore(HInstruction cursor, HInstruction instruction) {
     if (cursor == null) {
-      assert(isEmpty());
+      assert(isEmpty);
       first = last = instruction;
     } else if (identical(cursor, first)) {
       first.previous = instruction;
@@ -419,7 +421,7 @@
   }
 
   void remove(HInstruction instruction) {
-    assert(instruction.usedBy.isEmpty());
+    assert(instruction.usedBy.isEmpty);
     detach(instruction);
   }
 
@@ -465,7 +467,7 @@
         dominatedBlocks = <HBasicBlock>[],
         bailoutTargets = <HBailoutTarget>[];
 
-  int hashCode() => id;
+  int get hashCode => id;
 
   bool isNew() => status == STATUS_NEW;
   bool isOpen() => status == STATUS_OPEN;
@@ -488,7 +490,7 @@
     return parentLoopHeader;
   }
 
-  bool hasBailoutTargets() => !bailoutTargets.isEmpty();
+  bool hasBailoutTargets() => !bailoutTargets.isEmpty;
 
   void open() {
     assert(isNew());
@@ -581,7 +583,7 @@
   }
 
   void addSuccessor(HBasicBlock block) {
-    if (successors.isEmpty()) {
+    if (successors.isEmpty) {
       successors = [block];
     } else {
       successors.add(block);
@@ -623,7 +625,7 @@
       }
     }
 
-    if (better.isEmpty()) return rewrite(from, to);
+    if (better.isEmpty) return rewrite(from, to);
 
     L1: for (HInstruction user in from.usedBy) {
       for (HCheck check in better) {
@@ -816,7 +818,7 @@
       : id = idCounter++,
         usedBy = <HInstruction>[];
 
-  int hashCode() => id;
+  int get hashCode => id;
 
   bool getFlag(int position) => (flags & (1 << position)) != 0;
   void setFlag(int position) { flags |= (1 << position); }
@@ -985,7 +987,7 @@
 
   void notifyRemovedFromBlock() {
     assert(isInBasicBlock());
-    assert(usedBy.isEmpty());
+    assert(usedBy.isEmpty);
 
     // Remove [this] from the inputs' uses.
     for (int i = 0; i < inputs.length; i++) {
@@ -1765,7 +1767,7 @@
    * the expression. If the switch had no default case, this is the
    * following join-block.
    */
-  HBasicBlock get defaultTarget => block.successors.last();
+  HBasicBlock get defaultTarget => block.successors.last;
 
   accept(HVisitor visitor) => visitor.visitSwitch(this);
 
@@ -2015,7 +2017,7 @@
   HTry() : super(const <HInstruction>[]);
   toString() => 'try';
   accept(HVisitor visitor) => visitor.visitTry(this);
-  HBasicBlock get joinBlock => this.block.successors.last();
+  HBasicBlock get joinBlock => this.block.successors.last;
 }
 
 class HIf extends HConditionalBranch {
@@ -2421,7 +2423,7 @@
   toString() => 'static ${element.name}';
   accept(HVisitor visitor) => visitor.visitStatic(this);
 
-  int gvnHashCode() => super.gvnHashCode() ^ element.hashCode();
+  int gvnHashCode() => super.gvnHashCode() ^ element.hashCode;
   int typeCode() => HInstruction.STATIC_TYPECODE;
   bool typeEquals(other) => other is HStatic;
   bool dataEquals(HStatic other) => element == other.element;
@@ -2806,7 +2808,7 @@
   HStatementSequenceInformation(this.statements);
 
   HBasicBlock get start => statements[0].start;
-  HBasicBlock get end => statements.last().end;
+  HBasicBlock get end => statements.last.end;
 
   bool accept(HStatementInformationVisitor visitor) =>
     visitor.visitSequenceInfo(this);
@@ -2974,8 +2976,8 @@
   HBasicBlock get start => expression.start;
   HBasicBlock get end {
     // We don't create a switch block if there are no cases.
-    assert(!statements.isEmpty());
-    return statements.last().end;
+    assert(!statements.isEmpty);
+    return statements.last.end;
   }
 
   bool accept(HStatementInformationVisitor visitor) =>
diff --git a/lib/compiler/implementation/ssa/optimize.dart b/lib/compiler/implementation/ssa/optimize.dart
index d83f85b..5e2685c 100644
--- a/lib/compiler/implementation/ssa/optimize.dart
+++ b/lib/compiler/implementation/ssa/optimize.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of ssa;
+
 abstract class OptimizationPhase {
   String get name;
   void visitGraph(HGraph graph);
@@ -81,7 +83,7 @@
           // propagated the type array for a call to the List constructor.
           new SsaCheckInserter(backend, types, context.boundsChecked)];
       runPhases(graph, phases);
-      return !work.guards.isEmpty();
+      return !work.guards.isEmpty;
     });
   }
 
@@ -739,7 +741,7 @@
 
   bool isDeadCode(HInstruction instruction) {
     return !instruction.hasSideEffects(types)
-           && instruction.usedBy.isEmpty()
+           && instruction.usedBy.isEmpty
            // A dynamic getter that has no side effect can still throw
            // a NoSuchMethodError or a NullPointerException.
            && instruction is !HInvokeDynamicGetter
@@ -785,7 +787,7 @@
     }
 
     // Process the worklist by propagating liveness to phi inputs.
-    while (!worklist.isEmpty()) {
+    while (!worklist.isEmpty) {
       HPhi phi = worklist.removeLast();
       for (final input in phi.inputs) {
         if (input is HPhi && !livePhis.contains(input)) {
@@ -809,7 +811,7 @@
         next = current.next;
         if (!livePhis.contains(current)
             // TODO(ahe): Not sure the following is correct.
-            && current.usedBy.isEmpty()) {
+            && current.usedBy.isEmpty) {
           block.removePhi(current);
         }
         current = next;
@@ -829,7 +831,7 @@
       block.forEachPhi((HPhi phi) => worklist.add(phi));
     }
 
-    while (!worklist.isEmpty()) {
+    while (!worklist.isEmpty) {
       HPhi phi = worklist.removeLast();
 
       // If the phi has already been processed, continue.
@@ -972,7 +974,7 @@
       // any path from the current block to the dominated block so we
       // don't have to do anything either.
       assert(block.id < dominated.id);
-      if (!successorValues.isEmpty() && block.id + 1 < dominated.id) {
+      if (!successorValues.isEmpty && block.id + 1 < dominated.id) {
         visited.clear();
         int changesFlags = getChangesFlagsForDominatedBlock(block, dominated);
         successorValues.kill(changesFlags);
@@ -1083,7 +1085,7 @@
         instructions = instructions.intersection(other);
       }
 
-      if (!instructions.isEmpty()) {
+      if (!instructions.isEmpty) {
         List<HInstruction> list = instructions.toList();
         for (HInstruction instruction in list) {
           // Move the instruction to the current block.
@@ -1158,7 +1160,7 @@
                              HInstruction input,
                              HType convertedType) {
     Set<HInstruction> dominatedUsers = input.dominatedUsers(dominator.first);
-    if (dominatedUsers.isEmpty()) return;
+    if (dominatedUsers.isEmpty) return;
 
     HTypeConversion newInput = new HTypeConversion(convertedType, input);
     dominator.addBefore(dominator.first, newInput);
@@ -1185,7 +1187,7 @@
       }
     }
 
-    if (ifUsers.isEmpty() && notIfUsers.isEmpty()) return;
+    if (ifUsers.isEmpty && notIfUsers.isEmpty) return;
 
     for (HIf ifUser in ifUsers) {
       changeUsesDominatedBy(ifUser.thenBlock, input, convertedType);
diff --git a/lib/compiler/implementation/ssa/tracer.dart b/lib/compiler/implementation/ssa/tracer.dart
index 4b3520d..b08bfd0 100644
--- a/lib/compiler/implementation/ssa/tracer.dart
+++ b/lib/compiler/implementation/ssa/tracer.dart
@@ -50,7 +50,7 @@
   }
 
   void addPredecessors(HBasicBlock block) {
-    if (block.predecessors.isEmpty()) {
+    if (block.predecessors.isEmpty) {
       printEmptyProperty("predecessors");
     } else {
       addIndent();
@@ -63,7 +63,7 @@
   }
 
   void addSuccessors(HBasicBlock block) {
-    if (block.successors.isEmpty()) {
+    if (block.successors.isEmpty) {
       printEmptyProperty("successors");
     } else {
       addIndent();
@@ -446,7 +446,7 @@
       buf.add(", ");
     }
     buf.add("default: B");
-    buf.add(node.block.successors.last().id);
+    buf.add(node.block.successors.last.id);
     return buf.toString();
   }
 
@@ -472,7 +472,7 @@
     }
 
     return "Try: $tryBlock, Catch: $catchBlock, Finally: $finallyBlock, "
-        "Join: B${successors.last().id}";
+        "Join: B${successors.last.id}";
   }
 
   String visitTypeGuard(HTypeGuard node) {
diff --git a/lib/compiler/implementation/ssa/types.dart b/lib/compiler/implementation/ssa/types.dart
index b5dd364..b8277bf 100644
--- a/lib/compiler/implementation/ssa/types.dart
+++ b/lib/compiler/implementation/ssa/types.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of ssa;
+
 abstract class HType {
   const HType();
 
diff --git a/lib/compiler/implementation/ssa/types_propagation.dart b/lib/compiler/implementation/ssa/types_propagation.dart
index 377f233..e4809c87 100644
--- a/lib/compiler/implementation/ssa/types_propagation.dart
+++ b/lib/compiler/implementation/ssa/types_propagation.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of ssa;
+
 class SsaTypePropagator extends HGraphVisitor implements OptimizationPhase {
 
   final Map<int, HInstruction> workmap;
@@ -98,7 +100,7 @@
 
   void processWorklist() {
     do {
-      while (!worklist.isEmpty()) {
+      while (!worklist.isEmpty) {
         int id = worklist.removeLast();
         HInstruction instruction = workmap[id];
         assert(instruction != null);
@@ -112,7 +114,7 @@
       // replaced operands, so we may need to take another stab at
       // emptying the worklist afterwards.
       processPendingOptimizations();
-    } while (!worklist.isEmpty());
+    } while (!worklist.isEmpty);
   }
 
   void addDependentInstructionsToWorkList(HInstruction instruction) {
diff --git a/lib/compiler/implementation/ssa/validate.dart b/lib/compiler/implementation/ssa/validate.dart
index 94bc136..29051a2 100644
--- a/lib/compiler/implementation/ssa/validate.dart
+++ b/lib/compiler/implementation/ssa/validate.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of ssa;
+
 class HValidator extends HInstructionVisitor {
   bool isValid = true;
   HGraph graph;
@@ -46,14 +48,14 @@
         (block.successors.length != 1 || !block.successors[0].isExitBlock())) {
       markInvalid("Return node with > 1 succesor or not going to exit-block");
     }
-    if (block.last is HExit && !block.successors.isEmpty()) {
+    if (block.last is HExit && !block.successors.isEmpty) {
       markInvalid("Exit block with successor");
     }
-    if (block.last is HThrow && !block.successors.isEmpty()) {
+    if (block.last is HThrow && !block.successors.isEmpty) {
       markInvalid("Throw block with successor");
     }
 
-    if (block.successors.isEmpty() &&
+    if (block.successors.isEmpty &&
         block.last is !HThrow &&
         !block.isExitBlock()) {
       markInvalid("Non-exit or throw block without successor");
diff --git a/lib/compiler/implementation/ssa/value_range_analyzer.dart b/lib/compiler/implementation/ssa/value_range_analyzer.dart
index 0fd49fe..79970b7 100644
--- a/lib/compiler/implementation/ssa/value_range_analyzer.dart
+++ b/lib/compiler/implementation/ssa/value_range_analyzer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of ssa;
+
 /**
  * A [Value] represents both symbolic values like the value of a
  * parameter, or the length of an array, and concrete values, like
@@ -20,8 +22,8 @@
     if (other == const MinIntValue()) return other;
     if (other == const MaxIntValue()) return this;
     Value value = this - other;
-    if (value.isPositive()) return other;
-    if (value.isNegative()) return this;
+    if (value.isPositive) return other;
+    if (value.isNegative) return this;
     return const UnknownValue();
   }
 
@@ -30,14 +32,14 @@
     if (other == const MinIntValue()) return this;
     if (other == const MaxIntValue()) return other;
     Value value = this - other;
-    if (value.isPositive()) return this;
-    if (value.isNegative()) return other;
+    if (value.isPositive) return this;
+    if (value.isNegative) return other;
     return const UnknownValue();
   }
 
-  bool isNegative() => false;
-  bool isPositive() => false;
-  bool isZero() => false;
+  bool get isNegative => false;
+  bool get isPositive => false;
+  bool get isZero => false;
 }
 
 /**
@@ -48,26 +50,26 @@
   const IntValue(this.value);
 
   Value operator +(other) {
-    if (other.isZero()) return this;
+    if (other.isZero) return this;
     if (other is !IntValue) return other + this;
     return new IntValue(value + other.value);
   }
 
   Value operator -(other) {
-    if (other.isZero()) return this;
+    if (other.isZero) return this;
     if (other is !IntValue) return -other + this;
     return new IntValue(value - other.value);
   }
 
   Value operator -() {
-    if (isZero()) return this;
+    if (isZero) return this;
     return new IntValue(-value);
   }
 
   Value operator &(other) {
     if (other is !IntValue) {
-      if (isPositive()) return this;
-      if (other.isPositive()) return new IntValue(-value);
+      if (isPositive) return this;
+      if (other.isPositive) return new IntValue(-value);
       return const UnknownValue();
     }
     return new IntValue(value & other.value);
@@ -89,9 +91,9 @@
   }
 
   String toString() => 'IntValue $value';
-  bool isNegative() => value < 0;
-  bool isPositive() => value >= 0;
-  bool isZero() => value == 0;
+  bool get isNegative => value < 0;
+  bool get isPositive => value >= 0;
+  bool get isZero => value == 0;
 }
 
 /**
@@ -104,15 +106,15 @@
   Value operator -(Value other) => this;
   Value operator -() => const MinIntValue();
   Value operator &(Value other) {
-    if (other.isPositive()) return other;
-    if (other.isNegative()) return const IntValue(0);
+    if (other.isPositive) return other;
+    if (other.isNegative) return const IntValue(0);
     return this;
   }
   Value min(Value other) => other;
   Value max(Value other) => this;
   String toString() => 'Max';
-  bool isNegative() => false;
-  bool isPositive() => true;
+  bool get isNegative => false;
+  bool get isPositive => true;
 }
 
 /**
@@ -125,14 +127,14 @@
   Value operator -(Value other) => this;
   Value operator -() => const MaxIntValue();
   Value operator &(Value other) {
-    if (other.isPositive()) return const IntValue(0);
+    if (other.isPositive) return const IntValue(0);
     return this;
   }
   Value min(Value other) => this;
   Value max(Value other) => other;
   String toString() => 'Min';
-  bool isNegative() => true;
-  bool isPositive() => false;
+  bool get isNegative => true;
+  bool get isPositive => false;
 }
 
 /**
@@ -147,8 +149,8 @@
   Value operator &(Value other) => const UnknownValue();
   Value min(Value other) => const UnknownValue();
   Value max(Value other) => const UnknownValue();
-  bool isNegative() => false;
-  bool isPositive() => false;
+  bool get isNegative => false;
+  bool get isPositive => false;
   String toString() => 'Unknown';
 }
 
@@ -165,9 +167,9 @@
   }
 
   Value operator +(Value other) {
-    if (other.isZero()) return this;
+    if (other.isZero) return this;
     if (other is IntValue) {
-      if (other.isNegative()) {
+      if (other.isNegative) {
         return new SubtractValue(this, -other);
       }
       return new AddValue(this, other);
@@ -179,10 +181,10 @@
   }
 
   Value operator -(Value other) {
-    if (other.isZero()) return this;
+    if (other.isZero) return this;
     if (this == other) return const IntValue(0);
     if (other is IntValue) {
-      if (other.isNegative()) {
+      if (other.isNegative) {
         return new AddValue(this, -other);
       }
       return new SubtractValue(this, other);
@@ -202,8 +204,8 @@
     return this;
   }
 
-  bool isNegative() => false;
-  bool isPositive() => false;
+  bool get isNegative => false;
+  bool get isPositive => false;
 
   String toString() => 'Instruction: $instruction';
 }
@@ -215,7 +217,7 @@
  */
 class LengthValue extends InstructionValue {
   LengthValue(HInstruction instruction) : super(instruction);
-  bool isPositive() => true;
+  bool get isPositive => true;
   String toString() => 'Length: $instruction';
 }
 
@@ -246,7 +248,7 @@
   Value operator -() => -left - right;
 
   Value operator +(Value other) {
-    if (other.isZero()) return this;
+    if (other.isZero) return this;
     Value value = left + other;
     if (value != const UnknownValue() && value is! BinaryOperationValue) {
       return value + right;
@@ -261,7 +263,7 @@
   }
 
   Value operator -(Value other) {
-    if (other.isZero()) return this;
+    if (other.isZero) return this;
     Value value = left - other;
     if (value != const UnknownValue() && value is! BinaryOperationValue) {
       return value + right;
@@ -275,8 +277,8 @@
     return const UnknownValue();
   }
 
-  bool isNegative() => left.isNegative() && right.isNegative();
-  bool isPositive() => left.isPositive() && right.isPositive();
+  bool get isNegative => left.isNegative && right.isNegative;
+  bool get isPositive => left.isPositive && right.isPositive;
   String toString() => '$left + $right';
 }
 
@@ -292,7 +294,7 @@
   Value operator -() => right - left;
 
   Value operator +(Value other) {
-    if (other.isZero()) return this;
+    if (other.isZero) return this;
     Value value = left + other;
     if (value != const UnknownValue() && value is! BinaryOperationValue) {
       return value - right;
@@ -307,7 +309,7 @@
   }
 
   Value operator -(Value other) {
-    if (other.isZero()) return this;
+    if (other.isZero) return this;
     Value value = left - other;
     if (value != const UnknownValue() && value is! BinaryOperationValue) {
       return value - right;
@@ -321,8 +323,8 @@
     return const UnknownValue();
   }
 
-  bool isNegative() => left.isNegative() && right.isPositive();
-  bool isPositive() => left.isPositive() && right.isNegative();
+  bool get isNegative => left.isNegative && right.isPositive;
+  bool get isPositive => left.isPositive && right.isNegative;
   String toString() => '$left - $right';
 }
 
@@ -336,11 +338,11 @@
   }
 
   Value operator +(other) {
-    if (other.isZero()) return this;
+    if (other.isZero) return this;
     if (other == value) return const IntValue(0);
     if (other is NegateValue) return this - other.value;
     if (other is IntValue) {
-      if (other.isNegative()) {
+      if (other.isNegative) {
         return new SubtractValue(this, -other);
       }
       return new SubtractValue(other, value);
@@ -354,9 +356,9 @@
   Value operator &(Value other) => const UnknownValue();
 
   Value operator -(other) {
-    if (other.isZero()) return this;
+    if (other.isZero) return this;
     if (other is IntValue) {
-      if (other.isNegative()) {
+      if (other.isNegative) {
         return new SubtractValue(-other, value);
       }
       return new SubtractValue(this, other);
@@ -370,8 +372,8 @@
 
   Value operator -() => value;
 
-  bool isNegative() => value.isPositive();
-  bool isPositive() => value.isNegative();
+  bool get isNegative => value.isPositive;
+  bool get isPositive => value.isNegative;
   String toString() => '-$value';
 }
 
@@ -430,13 +432,13 @@
   }
 
   Range operator &(Range other) {
-    if (isSingleValue()
-        && other.isSingleValue()
+    if (isSingleValue
+        && other.isSingleValue
         && lower is IntValue
         && other.lower is IntValue) {
       return new Range(lower & other.lower, upper & other.upper);
     }
-    if (isPositive() && other.isPositive()) {
+    if (isPositive && other.isPositive) {
       Value up = upper.min(other.upper);
       if (up == const UnknownValue()) {
         // If we could not find a trivial bound, just try to use the
@@ -447,9 +449,9 @@
         if (up is! IntValue && upper != other.upper) up = const MaxIntValue();
       }
       return new Range(const IntValue(0), up);
-    } else if (isPositive()) {
+    } else if (isPositive) {
       return new Range(const IntValue(0), upper);
-    } else if (other.isPositive()) {
+    } else if (other.isPositive) {
       return new Range(const IntValue(0), other.upper);
     } else {
       return const Range.unbound();
@@ -477,9 +479,9 @@
     return lower.max(other.upper) == lower;
   }
 
-  bool isNegative() => upper.isNegative();
-  bool isPositive() => lower.isPositive();
-  bool isSingleValue() => lower == upper;
+  bool get isNegative => upper.isNegative;
+  bool get isPositive => lower.isPositive;
+  bool get isSingleValue => lower == upper;
 
   String toString() => '[$lower, $upper]';
 }
@@ -609,21 +611,21 @@
     belowLength = belowLength
         || (indexRange.upper != lengthRange.lower
             && indexRange.upper.min(lengthRange.lower) == indexRange.upper);
-    if (indexRange.isPositive() && belowLength) {
+    if (indexRange.isPositive && belowLength) {
       check.block.rewrite(check, check.index);
       check.block.remove(check);
-    } else if (indexRange.isNegative() || lengthRange < indexRange) {
+    } else if (indexRange.isNegative || lengthRange < indexRange) {
       check.staticChecks = HBoundsCheck.ALWAYS_FALSE;
       // The check is always false, and whatever instruction it
       // dominates is dead code.
       return indexRange;
-    } else if (indexRange.isPositive()) {
+    } else if (indexRange.isPositive) {
       check.staticChecks = HBoundsCheck.ALWAYS_ABOVE_ZERO;
     } else if (belowLength) {
       check.staticChecks = HBoundsCheck.ALWAYS_BELOW_LENGTH;
     }
 
-    if (indexRange.isPositive()) {
+    if (indexRange.isPositive) {
       // If the test passes, we know the lower bound of the length is
       // greater or equal than the lower bound of the index.
       Value low = lengthRange.lower.max(indexRange.lower);
@@ -653,7 +655,7 @@
     HInstruction left = relational.left;
     if (!left.isInteger(types)) return const Range.unbound();
     if (!right.isInteger(types)) return const Range.unbound();
-    Operation operation = relational.operation(constantSystem);
+    BinaryOperation operation = relational.operation(constantSystem);
     Range rightRange = ranges[relational.right];
     Range leftRange = ranges[relational.left];
 
@@ -674,7 +676,7 @@
   void handleEqualityCheck(HRelational node) {
     Range right = ranges[node.right];
     Range left = ranges[node.left];
-    if (left.isSingleValue() && right.isSingleValue() && left == right) {
+    if (left.isSingleValue && right.isSingleValue && left == right) {
       node.block.rewrite(
           node, graph.addConstantBool(true, constantSystem));
       node.block.remove(node);
@@ -705,9 +707,9 @@
 
     Range tryComputeRange(HInstruction instruction) {
       Range range = ranges[instruction];
-      if (range.isPositive()) {
+      if (range.isPositive) {
         return new Range(const IntValue(0), range.upper);
-      } else if (range.isNegative()) {
+      } else if (range.isNegative) {
         return new Range(range.lower, const IntValue(0));
       }
       return const Range.unbound();
@@ -742,7 +744,7 @@
     return newInstruction;
   }
 
-  static Operation reverseOperation(BinaryOperation operation) {
+  static BinaryOperation reverseOperation(BinaryOperation operation) {
     if (operation == const LessOperation()) {
       return const GreaterEqualOperation();
     } else if (operation == const LessEqualOperation()) {
@@ -855,9 +857,9 @@
     Range range = getRangeForRecognizableOperation(operation);
     if (range == null) return const Range.unbound();
     Range initial = ranges[loopPhi.inputs[0]];
-    if (range.isPositive()) {
+    if (range.isPositive) {
       return new Range(initial.lower, const MaxIntValue());
-    } else if (range.isNegative()) {
+    } else if (range.isNegative) {
       return new Range(const MinIntValue(), initial.upper);
     }
     return const Range.unbound();
@@ -867,9 +869,9 @@
     Range range = getRangeForRecognizableOperation(operation);
     if (range == null) return const Range.unbound();
     Range initial = ranges[loopPhi.inputs[0]];
-    if (range.isPositive()) {
+    if (range.isPositive) {
       return new Range(const MinIntValue(), initial.upper);
-    } else if (range.isNegative()) {
+    } else if (range.isNegative) {
       return new Range(initial.lower, const MaxIntValue());
     }
     return const Range.unbound();
diff --git a/lib/compiler/implementation/ssa/value_set.dart b/lib/compiler/implementation/ssa/value_set.dart
index bb50d61..b68e688 100644
--- a/lib/compiler/implementation/ssa/value_set.dart
+++ b/lib/compiler/implementation/ssa/value_set.dart
@@ -2,13 +2,15 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of ssa;
+
 class ValueSet {
   int size = 0;
   List<HInstruction> table;
   ValueSetNode collisions;
   ValueSet() : table = new List<HInstruction>(8);
 
-  bool isEmpty() => size == 0;
+  bool get isEmpty => size == 0;
   int get length => size;
 
   void add(HInstruction instruction) {
@@ -38,7 +40,7 @@
     if (probe != null && probe.gvnEquals(instruction)) return probe;
     // Look in the collisions list.
     for (ValueSetNode node = collisions; node != null; node = node.next) {
-      if (node.hashCode() == hashCode) {
+      if (node.hashCode == hashCode) {
         HInstruction cached = node.value;
         if (cached.gvnEquals(instruction)) return cached;
       }
@@ -149,7 +151,7 @@
 class ValueSetNode {
   final HInstruction value;
   final int hash;
-  int hashCode() => hash;
+  int get hashCode => hash;
   ValueSetNode next;
   ValueSetNode(this.value, this.hash, this.next);
 }
diff --git a/lib/compiler/implementation/ssa/variable_allocator.dart b/lib/compiler/implementation/ssa/variable_allocator.dart
index 8844a8c..50f308c 100644
--- a/lib/compiler/implementation/ssa/variable_allocator.dart
+++ b/lib/compiler/implementation/ssa/variable_allocator.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of ssa;
+
 /**
  * The [LiveRange] class covers a range where an instruction is live.
  */
@@ -180,7 +182,7 @@
     loopMarkers.remove(header);
   }
 
-  bool isEmpty() => liveInstructions.isEmpty() && loopMarkers.isEmpty();
+  bool get isEmpty => liveInstructions.isEmpty && loopMarkers.isEmpty;
   bool contains(HInstruction instruction) =>
       liveInstructions.containsKey(instruction);
   String toString() => liveInstructions.toString();
@@ -219,7 +221,7 @@
 
   void visitGraph(HGraph graph) {
     visitPostDominatorTree(graph);
-    if (!liveInstructions[graph.entry].isEmpty()) {
+    if (!liveInstructions[graph.entry].isEmpty) {
       compiler.internalError('LiveIntervalBuilder',
           node: compiler.currentElement.parseNode(compiler));
     }
@@ -358,7 +360,7 @@
   }
 
   String toString() => 'Copies: $copies, assignments: $assignments';
-  bool isEmpty() => copies.isEmpty() && assignments.isEmpty();
+  bool get isEmpty => copies.isEmpty && assignments.isEmpty;
 }
 
 /**
@@ -389,7 +391,7 @@
   /** Returns a fresh variable with the given prefix. */
   static String computeFreshWithPrefix(String prefix,
                                        Map<Element, String> parameterNames) {
-    Set<String> parameters = new Set<String>.from(parameterNames.getValues());
+    Set<String> parameters = new Set<String>.from(parameterNames.values);
     String name = '${prefix}0';
     int i = 1;
     while (parameters.contains(name)) name = '$prefix${i++}';
@@ -458,7 +460,7 @@
   }
 
   String allocateTemporary() {
-    while (!freeTemporaryNames.isEmpty()) {
+    while (!freeTemporaryNames.isEmpty) {
       String name = freeTemporaryNames.removeLast();
       if (!usedNames.contains(name)) return name;
     }
@@ -590,7 +592,7 @@
    * have no users or that are generated at use site does not need a name.
    */
   bool needsName(HInstruction instruction) {
-    if (instruction.usedBy.isEmpty()) return false;
+    if (instruction.usedBy.isEmpty) return false;
     // TODO(ngeoffray): locals/parameters are being generated at use site,
     // but we need a name for them. We should probably not make
     // them generate at use site to make things simpler.
diff --git a/lib/compiler/implementation/string_validator.dart b/lib/compiler/implementation/string_validator.dart
index 2951f56..a5f15e2 100644
--- a/lib/compiler/implementation/string_validator.dart
+++ b/lib/compiler/implementation/string_validator.dart
@@ -53,24 +53,24 @@
       raw = true;
       quoteChar = source.next();
     }
-    assert(identical(quoteChar, $SQ) || identical(quoteChar, $DQ));
+    assert(quoteChar == $SQ || quoteChar == $DQ);
     // String has at least one quote. Check it if has three.
     // If it only have two, the string must be an empty string literal,
     // and end after the second quote.
     bool multiline = false;
-    if (source.hasNext() && identical(source.next(), quoteChar) && source.hasNext()) {
+    if (source.hasNext && source.next() == quoteChar && source.hasNext) {
       int code = source.next();
-      assert(identical(code, quoteChar));  // If not, there is a bug in the parser.
+      assert(code == quoteChar);  // If not, there is a bug in the parser.
       quoteLength = 3;
       // Check if a multiline string starts with a newline (CR, LF or CR+LF).
-      if (source.hasNext()) {
+      if (source.hasNext) {
         code = source.next();
-        if (identical(code, $CR)) {
+        if (code == $CR) {
           quoteLength += 1;
-          if (source.hasNext() && identical(source.next(), $LF)) {
+          if (source.hasNext && source.next() == $LF) {
             quoteLength += 1;
           }
-        } else if (identical(code, $LF)) {
+        } else if (code == $LF) {
           quoteLength += 1;
         }
       }
@@ -96,21 +96,21 @@
     int length = 0;
     int index = startOffset;
     bool containsEscape = false;
-    for(Iterator<int> iter = string.iterator(); iter.hasNext(); length++) {
+    for(Iterator<int> iter = string.iterator(); iter.hasNext; length++) {
       index++;
       int code = iter.next();
-      if (identical(code, $BACKSLASH)) {
+      if (code == $BACKSLASH) {
         if (quoting.raw) continue;
         containsEscape = true;
-        if (!iter.hasNext()) {
+        if (!iter.hasNext) {
           stringParseError("Incomplete escape sequence",token, index);
           return null;
         }
         index++;
         code = iter.next();
-        if (identical(code, $x)) {
+        if (code == $x) {
           for (int i = 0; i < 2; i++) {
-            if (!iter.hasNext()) {
+            if (!iter.hasNext) {
               stringParseError("Incomplete escape sequence", token, index);
               return null;
             }
@@ -124,7 +124,7 @@
           }
           // A two-byte hex escape can't generate an invalid value.
           continue;
-        } else if (identical(code, $u)) {
+        } else if (code == $u) {
           int escapeStart = index - 1;
           index++;
           code = iter.next();
diff --git a/lib/compiler/implementation/tools/mini_parser.dart b/lib/compiler/implementation/tools/mini_parser.dart
index 492b815..356e6f0 100644
--- a/lib/compiler/implementation/tools/mini_parser.dart
+++ b/lib/compiler/implementation/tools/mini_parser.dart
@@ -38,7 +38,7 @@
   void printStats() {
     int kb = (charCount / 1024).round().toInt();
     String stats =
-        '$classCount classes (${kb}Kb) in ${stopwatch.elapsedInMs()}ms';
+        '$classCount classes (${kb}Kb) in ${stopwatch.elapsedMilliseconds}ms';
     if (errorCount != 0) {
       stats = '$stats with $errorCount errors';
     }
@@ -114,7 +114,7 @@
   }
   if (options.buildAst) {
     MyNodeListener l = listener;
-    if (!l.nodes.isEmpty()) {
+    if (!l.nodes.isEmpty) {
       String message = 'Stack not empty after parsing';
       print(formatError(message, l.nodes.head.getBeginToken(),
                         l.nodes.head.getEndToken(), file));
diff --git a/lib/compiler/implementation/tree/dartstring.dart b/lib/compiler/implementation/tree/dartstring.dart
index 0d7f70c..ac50e27 100644
--- a/lib/compiler/implementation/tree/dartstring.dart
+++ b/lib/compiler/implementation/tree/dartstring.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of tree;
+
 /**
  * The [DartString] type represents a Dart string value as a sequence of Unicode
  * Scalar Values.
@@ -19,13 +21,13 @@
   factory DartString.escapedString(SourceString source, int length) =>
       new EscapedSourceDartString(source, length);
   factory DartString.concat(DartString first, DartString second) {
-    if (first.isEmpty()) return second;
-    if (second.isEmpty()) return first;
+    if (first.isEmpty) return second;
+    if (second.isEmpty) return first;
     return new ConsDartString(first, second);
   }
   const DartString();
   abstract int get length;
-  bool isEmpty() => length == 0;
+  bool get isEmpty => length == 0;
   abstract Iterator<int> iterator();
   abstract String slowToString();
 
@@ -35,7 +37,7 @@
     if (length != otherString.length) return false;
     Iterator it1 = iterator();
     Iterator it2 = otherString.iterator();
-    while (it1.hasNext()) {
+    while (it1.hasNext) {
       if (it1.next() != it2.next()) return false;
     }
     return true;
@@ -96,7 +98,7 @@
     if (toStringCache != null) return toStringCache;
     StringBuffer buffer = new StringBuffer();
     StringEscapeIterator it = new StringEscapeIterator(source);
-    while (it.hasNext()) {
+    while (it.hasNext) {
       buffer.addCharCode(it.next());
     }
     toStringCache = buffer.toString();
@@ -134,18 +136,18 @@
   ConsDartStringIterator(ConsDartString cons)
       : current = cons.left.iterator(),
         right = cons.right {
-    hasNextLookAhead = current.hasNext();
+    hasNextLookAhead = current.hasNext;
     if (!hasNextLookAhead) {
       nextPart();
     }
   }
-  bool hasNext() {
+  bool get hasNext {
     return hasNextLookAhead;
   }
   int next() {
     assert(hasNextLookAhead);
     int result = current.next();
-    hasNextLookAhead = current.hasNext();
+    hasNextLookAhead = current.hasNext;
     if (!hasNextLookAhead) {
       nextPart();
     }
@@ -155,7 +157,7 @@
     if (right != null) {
       current = right.iterator();
       right = null;
-      hasNextLookAhead = current.hasNext();
+      hasNextLookAhead = current.hasNext;
     }
   }
 }
@@ -166,7 +168,7 @@
 class StringEscapeIterator implements Iterator<int>{
   final Iterator<int> source;
   StringEscapeIterator(SourceString source) : this.source = source.iterator();
-  bool hasNext() => source.hasNext();
+  bool get hasNext => source.hasNext;
   int next() {
     int code = source.next();
     if (!identical(code, $BACKSLASH)) {
diff --git a/lib/compiler/implementation/tree/nodes.dart b/lib/compiler/implementation/tree/nodes.dart
index 0024c59..3c261ec 100644
--- a/lib/compiler/implementation/tree/nodes.dart
+++ b/lib/compiler/implementation/tree/nodes.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of tree;
+
 abstract class Visitor<R> {
   const Visitor();
 
@@ -108,13 +110,11 @@
  * token stream. These references are stored in fields ending with
  * "Token".
  */
-abstract class Node implements Spannable {
-  final int _hashCode;
+abstract class Node extends TreeElementMixin implements Spannable {
+  final int hashCode;
   static int _HASH_COUNTER = 0;
 
-  Node() : _hashCode = ++_HASH_COUNTER;
-
-  hashCode() => _hashCode;
+  Node() : hashCode = ++_HASH_COUNTER;
 
   abstract accept(Visitor visitor);
 
@@ -434,7 +434,7 @@
   final Token beginToken;
   final Token endToken;
   final SourceString delimiter;
-  bool isEmpty() => nodes.isEmpty();
+  bool get isEmpty => nodes.isEmpty;
 
   NodeList([this.beginToken, this.nodes, this.endToken, this.delimiter]);
 
@@ -447,7 +447,7 @@
 
   int length() {
     int result = 0;
-    for (Link<Node> cursor = nodes; !cursor.isEmpty(); cursor = cursor.tail) {
+    for (Link<Node> cursor = nodes; !cursor.isEmpty; cursor = cursor.tail) {
       result++;
     }
     return result;
@@ -457,7 +457,7 @@
 
   visitChildren(Visitor visitor) {
     if (nodes == null) return;
-    for (Link<Node> link = nodes; !link.isEmpty(); link = link.tail) {
+    for (Link<Node> link = nodes; !link.isEmpty; link = link.tail) {
       if (link.head != null) link.head.accept(visitor);
     }
   }
@@ -465,7 +465,7 @@
   Token getBeginToken() {
     if (beginToken != null) return beginToken;
      if (nodes != null) {
-       for (Link<Node> link = nodes; !link.isEmpty(); link = link.tail) {
+       for (Link<Node> link = nodes; !link.isEmpty; link = link.tail) {
          if (link.head.getBeginToken() != null) {
            return link.head.getBeginToken();
          }
@@ -481,8 +481,8 @@
     if (endToken != null) return endToken;
     if (nodes != null) {
       Link<Node> link = nodes;
-      if (link.isEmpty()) return beginToken;
-      while (!link.tail.isEmpty()) link = link.tail;
+      if (link.isEmpty) return beginToken;
+      while (!link.tail.isEmpty) link = link.tail;
       if (link.head.getEndToken() != null) return link.head.getEndToken();
       if (link.head.getBeginToken() != null) return link.head.getBeginToken();
     }
@@ -661,7 +661,7 @@
     // TODO(karlklose,ahe): refactor AST nodes (issue 1713).
     if (body.asReturn() != null) return true;
     NodeList statements = body.asBlock().statements;
-    return (!statements.nodes.isEmpty() ||
+    return (!statements.nodes.isEmpty ||
             !identical(statements.getBeginToken().kind, $SEMICOLON));
   }
 
@@ -1160,7 +1160,7 @@
 
   static int computeFlags(Link<Node> nodes) {
     int flags = 0;
-    for (; !nodes.isEmpty(); nodes = nodes.tail) {
+    for (; !nodes.isEmpty; nodes = nodes.tail) {
       String value = nodes.head.asIdentifier().source.stringValue;
       if (identical(value, 'static')) flags |= FLAG_STATIC;
       else if (identical(value, 'abstract')) flags |= FLAG_ABSTRACT;
@@ -1176,7 +1176,7 @@
 
   Node findModifier(String modifier) {
     Link<Node> nodeList = nodes.nodes;
-    for (; !nodeList.isEmpty(); nodeList = nodeList.tail) {
+    for (; !nodeList.isEmpty; nodeList = nodeList.tail) {
       String value = nodeList.head.asIdentifier().source.stringValue;
       if(identical(value, modifier)) {
         return nodeList.head;
@@ -1494,7 +1494,7 @@
   }
 
   Token getEndToken() {
-    if (statements.nodes.isEmpty()) {
+    if (statements.nodes.isEmpty) {
       // All cases must have at least one expression or be the default.
       if (defaultKeyword != null) {
         // The colon after 'default'.
@@ -1896,7 +1896,7 @@
 
   Token getEndToken() {
     if (finallyBlock != null) return finallyBlock.getEndToken();
-    if (!catchBlocks.isEmpty()) return catchBlocks.getEndToken();
+    if (!catchBlocks.isEmpty) return catchBlocks.getEndToken();
     return tryBlock.getEndToken();
   }
 }
@@ -1950,15 +1950,15 @@
   accept(Visitor visitor) => visitor.visitCatchBlock(this);
 
   Node get exception {
-    if (formals == null || formals.nodes.isEmpty()) return null;
+    if (formals == null || formals.nodes.isEmpty) return null;
     VariableDefinitions declarations = formals.nodes.head;
     return declarations.definitions.nodes.head;
   }
 
   Node get trace {
-    if (formals == null || formals.nodes.isEmpty()) return null;
+    if (formals == null || formals.nodes.isEmpty) return null;
     Link<Node> declarations = formals.nodes.tail;
-    if (declarations.isEmpty()) return null;
+    if (declarations.isEmpty) return null;
     VariableDefinitions head = declarations.head;
     return head.definitions.nodes.head;
   }
diff --git a/lib/compiler/implementation/tree/prettyprint.dart b/lib/compiler/implementation/tree/prettyprint.dart
index 7f4470a..683ab5a 100644
--- a/lib/compiler/implementation/tree/prettyprint.dart
+++ b/lib/compiler/implementation/tree/prettyprint.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of tree;
+
 /**
  * Pretty-prints Node tree in XML-like format.
  *
@@ -25,7 +27,7 @@
   }
 
   String popTag() {
-    assert(!tagStack.isEmpty());
+    assert(!tagStack.isEmpty);
     String tag = tagStack.head;
     tagStack = tagStack.tail;
     return tag;
diff --git a/lib/compiler/implementation/tree/tree.dart b/lib/compiler/implementation/tree/tree.dart
index 2e4c5af..3222838 100644
--- a/lib/compiler/implementation/tree/tree.dart
+++ b/lib/compiler/implementation/tree/tree.dart
@@ -2,16 +2,18 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#library('tree');
+library tree;
 
-#import('dart:math');
+import 'dart:math';
 
-#import('../scanner/scannerlib.dart');
-#import('../util/util.dart');
-#import('../util/characters.dart');
+import '../scanner/scannerlib.dart';
+import '../util/util.dart';
+import '../util/characters.dart';
 
-#source('dartstring.dart');
-#source('nodes.dart');
-#source('prettyprint.dart');
-#source('unparser.dart');
-#source('visitors.dart');
+import '../resolution/secret_tree_element.dart' show TreeElementMixin;
+
+part 'dartstring.dart';
+part 'nodes.dart';
+part 'prettyprint.dart';
+part 'unparser.dart';
+part 'visitors.dart';
diff --git a/lib/compiler/implementation/tree/unparser.dart b/lib/compiler/implementation/tree/unparser.dart
index 4bfd890..9eb2794 100644
--- a/lib/compiler/implementation/tree/unparser.dart
+++ b/lib/compiler/implementation/tree/unparser.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of tree;
+
 String unparse(Node node) {
   Unparser unparser = new Unparser();
   unparser.unparse(node);
@@ -60,7 +62,7 @@
       addToken(node.extendsKeyword);
       visit(node.superclass);
     }
-    if (!node.interfaces.isEmpty()) {
+    if (!node.interfaces.isEmpty) {
       sb.add(' ');
       visit(node.interfaces);
     }
@@ -206,7 +208,7 @@
     visit(node.typeArguments);
     visit(node.elements);
     // If list is empty, emit space after [] to disambiguate cases like []==[].
-    if (node.elements.isEmpty()) sb.add(' ');
+    if (node.elements.isEmpty) sb.add(' ');
   }
 
   visitModifiers(Modifiers node) => node.visitChildren(this);
@@ -215,10 +217,10 @@
    * Unparses given NodeList starting from specific node.
    */
   unparseNodeListFrom(NodeList node, Link<Node> from) {
-    if (from.isEmpty()) return;
+    if (from.isEmpty) return;
     String delimiter = (node.delimiter == null) ? "" : "${node.delimiter}";
     visit(from.head);
-    for (Link link = from.tail; !link.isEmpty(); link = link.tail) {
+    for (Link link = from.tail; !link.isEmpty; link = link.tail) {
       sb.add(delimiter);
       visit(link.head);
     }
diff --git a/lib/compiler/implementation/tree/visitors.dart b/lib/compiler/implementation/tree/visitors.dart
index bab85b0..9096cff 100644
--- a/lib/compiler/implementation/tree/visitors.dart
+++ b/lib/compiler/implementation/tree/visitors.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of tree;
+
 /**
  * This visitor takes another visitor and applies it to every
  * node in the tree. There is currently no way to control the
diff --git a/lib/compiler/implementation/tree_validator.dart b/lib/compiler/implementation/tree_validator.dart
index bef2891..6a3b93f 100644
--- a/lib/compiler/implementation/tree_validator.dart
+++ b/lib/compiler/implementation/tree_validator.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 class TreeValidatorTask extends CompilerTask {
   TreeValidatorTask(Compiler compiler) : super(compiler);
 
@@ -19,7 +21,7 @@
     final validator = new ValidatorVisitor(report);
     tree.accept(new TraversingVisitor(validator));
 
-    return errors.isEmpty();
+    return errors.isEmpty;
   }
 }
 
@@ -44,12 +46,12 @@
     if (identical(name, '++') || identical(name, '--')) {
       expect(node, node.assignmentOperator is Operator);
       if (node.isIndex) {
-        expect(node.arguments.tail.head, node.arguments.tail.isEmpty());
+        expect(node.arguments.tail.head, node.arguments.tail.isEmpty);
       } else {
-        expect(node.arguments.head, node.arguments.isEmpty());
+        expect(node.arguments.head, node.arguments.isEmpty);
       }
     } else {
-      expect(node, !node.arguments.isEmpty());
+      expect(node, !node.arguments.isEmpty);
     }
   }
 
diff --git a/lib/compiler/implementation/typechecker.dart b/lib/compiler/implementation/typechecker.dart
index 33b1dce..81d0e23 100644
--- a/lib/compiler/implementation/typechecker.dart
+++ b/lib/compiler/implementation/typechecker.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 class TypeCheckerTask extends CompilerTask {
   TypeCheckerTask(Compiler compiler) : super(compiler);
   String get name => "Type checker";
@@ -62,7 +64,7 @@
 
   DartType unalias(Compiler compiler) => this;
 
-  int hashCode() => 17 * element.hashCode();
+  int get hashCode => 17 * element.hashCode;
 
   bool operator ==(other) {
     if (other is !TypeVariableType) return false;
@@ -94,7 +96,7 @@
 
   DartType unalias(Compiler compiler) => this;
 
-  int hashCode() => 17 * stringName.hashCode();
+  int get hashCode => 17 * stringName.hashCode;
 
   bool operator ==(other) {
     if (other is !StatementType) return false;
@@ -111,7 +113,7 @@
 
   DartType unalias(Compiler compiler) => this;
 
-  int hashCode() => 1729;
+  int get hashCode => 1729;
 
   bool operator ==(other) => other is VoidType;
 
@@ -132,7 +134,7 @@
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.add(name.slowToString());
-    if (!arguments.isEmpty()) {
+    if (!arguments.isEmpty) {
       sb.add('<');
       arguments.printOn(sb, ', ');
       sb.add('>');
@@ -140,12 +142,12 @@
     return sb.toString();
   }
 
-  int hashCode() {
-    int hash = element.hashCode();
+  int get hashCode {
+    int hash = element.hashCode;
     for (Link<DartType> arguments = this.arguments;
-         !arguments.isEmpty();
+         !arguments.isEmpty;
          arguments = arguments.tail) {
-      int argumentHash = arguments.head != null ? arguments.head.hashCode() : 0;
+      int argumentHash = arguments.head != null ? arguments.head.hashCode : 0;
       hash = 17 * hash + 3 * argumentHash;
     }
     return hash;
@@ -194,12 +196,12 @@
     parameterTypes = other.parameterTypes;
   }
 
-  int hashCode() {
-    int hash = 17 * element.hashCode() + 3 * returnType.hashCode();
+  int get hashCode {
+    int hash = 17 * element.hashCode + 3 * returnType.hashCode;
     for (Link<DartType> parameters = parameterTypes;
-         !parameters.isEmpty();
+         !parameters.isEmpty;
         parameters = parameters.tail) {
-      hash = 17 * hash + 3 * parameters.head.hashCode();
+      hash = 17 * hash + 3 * parameters.head.hashCode;
     }
     return hash;
   }
@@ -229,7 +231,7 @@
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.add(name.slowToString());
-    if (!typeArguments.isEmpty()) {
+    if (!typeArguments.isEmpty) {
       sb.add('<');
       typeArguments.printOn(sb, ', ');
       sb.add('>');
@@ -237,7 +239,7 @@
     return sb.toString();
   }
 
-  int hashCode() => 17 * element.hashCode();
+  int get hashCode => 17 * element.hashCode;
 
   bool operator ==(other) {
     if (other is !TypedefType) return false;
@@ -281,7 +283,7 @@
       ClassElement tc = t.element;
       if (identical(tc, s.element)) return true;
       for (Link<DartType> supertypes = tc.allSupertypes;
-           supertypes != null && !supertypes.isEmpty();
+           supertypes != null && !supertypes.isEmpty;
            supertypes = supertypes.tail) {
         DartType supertype = supertypes.head;
         if (identical(supertype.element, s.element)) return true;
@@ -294,12 +296,12 @@
       FunctionType sf = s;
       Link<DartType> tps = tf.parameterTypes;
       Link<DartType> sps = sf.parameterTypes;
-      while (!tps.isEmpty() && !sps.isEmpty()) {
+      while (!tps.isEmpty && !sps.isEmpty) {
         if (!isAssignable(tps.head, sps.head)) return false;
         tps = tps.tail;
         sps = sps.tail;
       }
-      if (!tps.isEmpty() || !sps.isEmpty()) return false;
+      if (!tps.isEmpty || !sps.isEmpty) return false;
       if (!isAssignable(sf.returnType, tf.returnType)) return false;
       return true;
     } else if (t is TypeVariableType) {
@@ -524,7 +526,7 @@
     if (member == null) {
       classElement.ensureResolved(compiler);
       for (Link<DartType> supertypes = classElement.allSupertypes;
-           !supertypes.isEmpty() && member == null;
+           !supertypes.isEmpty && member == null;
            supertypes = supertypes.tail) {
         ClassElement lookupTarget = supertypes.head.element;
         member = lookupTarget.lookupLocalMember(name);
@@ -541,22 +543,22 @@
   void analyzeArguments(Send send, DartType type) {
     Link<Node> arguments = send.arguments;
     if (type == null || identical(type, types.dynamicType)) {
-      while(!arguments.isEmpty()) {
+      while(!arguments.isEmpty) {
         analyze(arguments.head);
         arguments = arguments.tail;
       }
     } else {
       FunctionType funType = type;
       Link<DartType> parameterTypes = funType.parameterTypes;
-      while (!arguments.isEmpty() && !parameterTypes.isEmpty()) {
+      while (!arguments.isEmpty && !parameterTypes.isEmpty) {
         checkAssignable(arguments.head, parameterTypes.head,
                         analyze(arguments.head));
         arguments = arguments.tail;
         parameterTypes = parameterTypes.tail;
       }
-      if (!arguments.isEmpty()) {
+      if (!arguments.isEmpty) {
         reportTypeWarning(arguments.head, MessageKind.ADDITIONAL_ARGUMENT);
-      } else if (!parameterTypes.isEmpty()) {
+      } else if (!parameterTypes.isEmpty) {
         reportTypeWarning(send, MessageKind.MISSING_ARGUMENT,
                           [parameterTypes.head]);
       }
@@ -581,7 +583,7 @@
       final Node firstArgument = node.receiver;
       final DartType firstArgumentType = analyze(node.receiver);
       final arguments = node.arguments;
-      final Node secondArgument = arguments.isEmpty() ? null : arguments.head;
+      final Node secondArgument = arguments.isEmpty ? null : arguments.head;
       final DartType secondArgumentType =
           analyzeWithDefault(secondArgument, null);
 
@@ -597,7 +599,7 @@
         return boolType;
       } else if (identical(name, '||') || identical(name, '&&') || identical(name, '!')) {
         checkAssignable(firstArgument, boolType, firstArgumentType);
-        if (!arguments.isEmpty()) {
+        if (!arguments.isEmpty) {
           // TODO(karlklose): check number of arguments in validator.
           checkAssignable(secondArgument, boolType, secondArgumentType);
         }
@@ -723,7 +725,7 @@
   DartType visitNodeList(NodeList node) {
     DartType type = StatementType.NOT_RETURNING;
     bool reportedDeadCode = false;
-    for (Link<Node> link = node.nodes; !link.isEmpty(); link = link.tail) {
+    for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
       DartType nextType = analyze(link.head);
       if (type == StatementType.RETURNING) {
         if (!reportedDeadCode) {
@@ -808,7 +810,7 @@
       reportTypeWarning(node.type, MessageKind.VOID_VARIABLE);
       type = types.dynamicType;
     }
-    for (Link<Node> link = node.definitions.nodes; !link.isEmpty();
+    for (Link<Node> link = node.definitions.nodes; !link.isEmpty;
          link = link.tail) {
       Node initialization = link.head;
       compiler.ensure(initialization is Identifier
@@ -989,4 +991,8 @@
   DartType visitStringNode(StringNode node) {
     compiler.unimplemented('visitNode', node: node);
   }
+
+  DartType visitLibraryDependency(LibraryDependency node) {
+    compiler.unimplemented('visitNode', node: node);
+  }
 }
diff --git a/lib/compiler/implementation/types/concrete_types_inferrer.dart b/lib/compiler/implementation/types/concrete_types_inferrer.dart
index 780241d..dd66e61 100644
--- a/lib/compiler/implementation/types/concrete_types_inferrer.dart
+++ b/lib/compiler/implementation/types/concrete_types_inferrer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of types;
+
 class CancelTypeInferenceException {
   final Node node;
   final String reason;
@@ -35,7 +37,7 @@
     if (other is! ClassBaseType) return false;
     return element == other.element;
   }
-  int hashCode() => element.hashCode();
+  int get hashCode => element.hashCode;
   String toString() => element.name.slowToString();
   bool isClass() => true;
   bool isUnknown() => false;
@@ -48,7 +50,7 @@
 class UnknownBaseType implements BaseType {
   const UnknownBaseType();
   bool operator ==(BaseType other) => other is UnknownBaseType;
-  int hashCode() => 0;
+  int get hashCode => 0;
   bool isClass() => false;
   bool isUnknown() => true;
   bool isNull() => false;
@@ -61,7 +63,7 @@
 class NullBaseType implements BaseType {
   const NullBaseType();
   bool operator ==(BaseType other) => other is NullBaseType;
-  int hashCode() => 1;
+  int get hashCode => 1;
   bool isClass() => false;
   bool isUnknown() => false;
   bool isNull() => true;
@@ -110,7 +112,7 @@
   bool operator ==(ConcreteType other) => identical(this, other);
   Set<BaseType> get baseTypes =>
       new Set<BaseType>.from([const UnknownBaseType()]);
-  int hashCode() => 0;
+  int get hashCode => 0;
   ConcreteType union(ConcreteType other) => this;
   ClassElement getUniqueType() => null;
   toString() => "unknown";
@@ -136,14 +138,18 @@
     return baseTypes.containsAll(other.baseTypes);
   }
 
-  int hashCode() {
+  int get hashCode {
     int result = 1;
     for (final baseType in baseTypes) {
-      result = 31 * result + baseType.hashCode();
+      result = 31 * result + baseType.hashCode;
     }
     return result;
   }
 
+  // TODO(polux): Collapse {num, int, ...}, {num, double, ...} and
+  // {int, double,...} into {num, ...} as an optimization. It will require
+  // UnionType to know about these class elements, which is cumbersome because
+  // there are no nested classes. We need factory methods instead.
   ConcreteType union(ConcreteType other) {
     if (other.isUnkown()) {
       return const UnknownConcreteType();
@@ -179,7 +185,7 @@
   final BaseType baseTypeOfThis;
   final Map<Element, ConcreteType> concreteTypes;
   ConcreteTypeCartesianProduct(this.baseTypeOfThis, this.concreteTypes);
-  Iterator iterator() => concreteTypes.isEmpty()
+  Iterator iterator() => concreteTypes.isEmpty
       ? [new ConcreteTypesEnvironment(baseTypeOfThis)].iterator()
       : new ConcreteTypeCartesianProductIterator(baseTypeOfThis, concreteTypes);
   String toString() {
@@ -205,17 +211,17 @@
     this.concreteTypes = concreteTypes,
     nextValues = new Map<Element, BaseType>(),
     state = new Map<Element, Iterator>() {
-    if (concreteTypes.isEmpty()) {
+    if (concreteTypes.isEmpty) {
       size = 0;
       return;
     }
-    for (final e in concreteTypes.getKeys()) {
+    for (final e in concreteTypes.keys) {
       final baseTypes = concreteTypes[e].baseTypes;
       size *= baseTypes.length;
     }
   }
 
-  bool hasNext() {
+  bool get hasNext {
     return counter < size;
   }
 
@@ -226,11 +232,11 @@
   }
 
   ConcreteTypesEnvironment next() {
-    if (!hasNext()) throw new NoMoreElementsException();
+    if (!hasNext) throw new StateError("No more elements");
     Element keyToIncrement = null;
-    for (final key in concreteTypes.getKeys()) {
+    for (final key in concreteTypes.keys) {
       final iterator = state[key];
-      if (iterator != null && iterator.hasNext()) {
+      if (iterator != null && iterator.hasNext) {
         nextValues[key] = state[key].next();
         break;
       }
@@ -249,6 +255,7 @@
 class BaseTypes {
   final BaseType intBaseType;
   final BaseType doubleBaseType;
+  final BaseType numBaseType;
   final BaseType boolBaseType;
   final BaseType stringBaseType;
   final BaseType listBaseType;
@@ -258,6 +265,7 @@
   BaseTypes(Compiler compiler) :
     intBaseType = new ClassBaseType(compiler.intClass),
     doubleBaseType = new ClassBaseType(compiler.doubleClass),
+    numBaseType = new ClassBaseType(compiler.numClass),
     boolBaseType = new ClassBaseType(compiler.boolClass),
     stringBaseType = new ClassBaseType(compiler.stringClass),
     listBaseType = new ClassBaseType(compiler.listClass),
@@ -311,7 +319,7 @@
     if (other is! ConcreteTypesEnvironment) return false;
     if (typeOfThis != other.typeOfThis) return false;
     if (environment.length != other.environment.length) return false;
-    for (Element key in environment.getKeys()) {
+    for (Element key in environment.keys) {
       if (!other.environment.containsKey(key)
           || (environment[key] != other.environment[key])) {
         return false;
@@ -320,11 +328,11 @@
     return true;
   }
 
-  int hashCode() {
-    int result = (typeOfThis != null) ? typeOfThis.hashCode() : 1;
+  int get hashCode {
+    int result = (typeOfThis != null) ? typeOfThis.hashCode : 1;
     environment.forEach((element, concreteType) {
-      result = 31 * (31 * result + element.hashCode()) +
-          concreteType.hashCode();
+      result = 31 * (31 * result + element.hashCode) +
+          concreteType.hashCode;
     });
     return result;
   }
@@ -403,6 +411,69 @@
         callers = new Map<FunctionElement, Set<FunctionElement>>(),
         readers = new Map<Element, Set<FunctionElement>>();
 
+  /**
+   * Populates [cache] with ad hoc rules like:
+   *
+   *     {int} + {int}    -> {int}
+   *     {int} + {double} -> {num}
+   *     {int} + {num}    -> {double}
+   *     ...
+   */
+  populateCacheWithBuiltinRules() {
+    // Builds the environment that would be looked up if we were to analyze
+    // o.method(arg) where o has concrete type {receiverType} and arg has
+    // concrete type {argumentType}.
+    ConcreteTypesEnvironment makeEnvironment(BaseType receiverType,
+                                             FunctionElement method,
+                                             BaseType argumentType) {
+      ArgumentsTypes argumentsTypes = new ArgumentsTypes(
+          [new ConcreteType.singleton(argumentType)],
+          new Map());
+      Map<Element, ConcreteType> argumentMap =
+          associateArguments(method, argumentsTypes);
+      return new ConcreteTypesEnvironment.of(argumentMap, receiverType);
+    }
+
+    // Adds the rule {receiverType}.method({argumentType}) -> {returnType}
+    // to cache.
+    void rule(ClassBaseType receiverType, String method,
+              BaseType argumentType, BaseType returnType) {
+      // The following line shouldn't be needed but the mock compiler doesn't
+      // resolve num for some reason.
+      receiverType.element.ensureResolved(compiler);
+      FunctionElement methodElement =
+          receiverType.element.lookupMember(new SourceString(method));
+      ConcreteTypesEnvironment environment =
+          makeEnvironment(receiverType, methodElement, argumentType);
+      Map<ConcreteTypesEnvironment, ConcreteType> map =
+          cache.containsKey(methodElement)
+              ? cache[methodElement]
+              : new Map<ConcreteTypesEnvironment, ConcreteType>();
+      map[environment] = new ConcreteType.singleton(returnType);
+      cache[methodElement] = map;
+    }
+
+    // The hardcoded typing rules.
+    final ClassBaseType int = baseTypes.intBaseType;
+    final ClassBaseType double = baseTypes.doubleBaseType;
+    final ClassBaseType num = baseTypes.numBaseType;
+    for (String operator in ['add', 'mul', 'sub']) {
+      final String method = r"operator$".concat(operator);
+
+      rule(int, method, int, int);
+      rule(int, method, double, num);
+      rule(int, method, num, num);
+
+      rule(double, method, double, double);
+      rule(double, method, int, num);
+      rule(double, method, num, num);
+
+      rule(num, method, int, num);
+      rule(num, method, double, num);
+      rule(num, method, num, num);
+    }
+  }
+
   // --- utility methods ---
 
   /**
@@ -554,7 +625,7 @@
   Map<Element, ConcreteType> associateArguments(FunctionElement function,
                                                 ArgumentsTypes argumentsTypes) {
     final Map<Element, ConcreteType> result = new Map<Element, ConcreteType>();
-    final FunctionSignature signature = function.functionSignature;
+    final FunctionSignature signature = function.computeSignature(compiler);
     // too many arguments
     if (argumentsTypes.length > signature.parameterCount) {
       return null;
@@ -568,7 +639,7 @@
     // we attach each positional parameter to its corresponding positional
     // argument
     for (Link<Element> requiredParameters = signature.requiredParameters;
-         !requiredParameters.isEmpty();
+         !requiredParameters.isEmpty;
          requiredParameters = requiredParameters.tail) {
       final Element requiredParameter = requiredParameters.head;
       // we know next() is defined because of the guard above
@@ -577,7 +648,7 @@
     // we attach the remaining positional arguments to their corresponding
     // named arguments
     Link<Element> remainingNamedParameters = signature.optionalParameters;
-    while (remainingPositionalArguments.hasNext()) {
+    while (remainingPositionalArguments.hasNext) {
       final Element namedParameter = remainingNamedParameters.head;
       result[namedParameter] = remainingPositionalArguments.next();
       // we know tail is defined because of the guard above
@@ -587,14 +658,14 @@
     final Map<SourceString, Element> leftOverNamedParameters =
         new Map<SourceString, Element>();
     for (;
-         !remainingNamedParameters.isEmpty();
+         !remainingNamedParameters.isEmpty;
          remainingNamedParameters = remainingNamedParameters.tail) {
       final Element namedParameter = remainingNamedParameters.head;
       leftOverNamedParameters[namedParameter.name] = namedParameter;
     }
     // we attach the named arguments to their corresponding named paramaters
     // (we don't use foreach because we want to be able to return early)
-    for (Identifier identifier in argumentsTypes.named.getKeys()) {
+    for (Identifier identifier in argumentsTypes.named.keys) {
       final ConcreteType concreteType = argumentsTypes.named[identifier];
       SourceString source = identifier.source;
       final Element namedParameter = leftOverNamedParameters[source];
@@ -644,6 +715,11 @@
   ConcreteType analyzeMethod(FunctionElement element,
                              ConcreteTypesEnvironment environment) {
     FunctionExpression tree = element.parseNode(compiler);
+    // This should never happen since we only deal with concrete types, except
+    // for external methods whose typing rules have not been hardcoded yet.
+    if (!tree.hasBody()) {
+      return new ConcreteType.unknown();
+    }
     TreeElements elements =
         compiler.enqueuer.resolution.resolvedElements[element];
     Visitor visitor =
@@ -702,10 +778,11 @@
   void analyzeMain(Element element) {
     baseTypes = new BaseTypes(compiler);
     cache[element] = new Map<ConcreteTypesEnvironment, ConcreteType>();
+    populateCacheWithBuiltinRules();
     try {
       workQueue.addLast(
           new InferenceWorkItem(element, new ConcreteTypesEnvironment()));
-      while (!workQueue.isEmpty()) {
+      while (!workQueue.isEmpty) {
         InferenceWorkItem item = workQueue.removeFirst();
         ConcreteType concreteType = analyze(item.method, item.environment);
         var template = cache[item.method];
@@ -802,7 +879,7 @@
     final positional = new List<ConcreteType>();
     final named = new Map<Identifier, ConcreteType>();
     for(Link<Node> iterator = arguments;
-        !iterator.isEmpty();
+        !iterator.isEmpty;
         iterator = iterator.tail) {
       Node node = iterator.head;
       NamedArgument namedArgument = node.asNamedArgument();
@@ -861,7 +938,23 @@
   }
 
   ConcreteType visitFor(For node) {
-    inferrer.fail(node, 'not yet implemented');
+    if (node.initializer != null) {
+      analyze(node.initializer);
+    }
+    analyze(node.conditionStatement);
+    ConcreteType result = new ConcreteType.empty();
+    ConcreteTypesEnvironment oldEnvironment;
+    do {
+      oldEnvironment = environment;
+      analyze(node.conditionStatement);
+      analyze(node.body);
+      analyze(node.update);
+      environment = oldEnvironment.join(environment);
+    // TODO(polux): Maybe have a destructive join-method that returns a boolean
+    // value indicating whether something changed to avoid performing this
+    // comparison twice.
+    } while (oldEnvironment != environment);
+    return result;
   }
 
   ConcreteType visitFunctionDeclaration(FunctionDeclaration node) {
@@ -991,7 +1084,7 @@
     ConcreteType type = new ConcreteType.empty();
     // The concrete type of a sequence of statements is the union of the
     // statement's types.
-    for (Link<Node> link = node.nodes; !link.isEmpty(); link = link.tail) {
+    for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
       type = type.union(analyze(link.head));
     }
     return type;
@@ -1022,7 +1115,7 @@
   }
 
   ConcreteType visitVariableDefinitions(VariableDefinitions node) {
-    for (Link<Node> link = node.definitions.nodes; !link.isEmpty();
+    for (Link<Node> link = node.definitions.nodes; !link.isEmpty;
          link = link.tail) {
       analyze(link.head);
     }
@@ -1098,6 +1191,7 @@
   }
 
   ConcreteType visitLiteralMapEntry(LiteralMapEntry node) {
+    // We don't need to visit the key, it's always a string.
     return analyze(node.value);
   }
 
@@ -1138,7 +1232,7 @@
   }
 
   ConcreteType visitOperatorSend(Send node) {
-    inferrer.fail(node, 'not implemented');
+    return visitDynamicSend(node);
   }
 
   ConcreteType visitGetterSend(Send node) {
@@ -1205,14 +1299,58 @@
     inferrer.fail(node, 'not implemented');
   }
 
+  // TODO(polux): handle unary operators and share this list with the rest of
+  // dart2js.
+  final Set<SourceString> operators = new Set<SourceString>()
+      ..add(const SourceString('=='))
+      ..add(const SourceString('!='))
+      ..add(const SourceString('~'))
+      ..add(const SourceString('[]'))
+      ..add(const SourceString('[]='))
+      ..add(const SourceString('*'))
+      ..add(const SourceString('*='))
+      ..add(const SourceString('/'))
+      ..add(const SourceString('/='))
+      ..add(const SourceString('%'))
+      ..add(const SourceString('%='))
+      ..add(const SourceString('~/'))
+      ..add(const SourceString('~/='))
+      ..add(const SourceString('+'))
+      ..add(const SourceString('+='))
+      ..add(const SourceString('-'))
+      ..add(const SourceString('-='))
+      ..add(const SourceString('<<'))
+      ..add(const SourceString('<<='))
+      ..add(const SourceString('>>'))
+      ..add(const SourceString('>>='))
+      ..add(const SourceString('>='))
+      ..add(const SourceString('>'))
+      ..add(const SourceString('<='))
+      ..add(const SourceString('<'))
+      ..add(const SourceString('&'))
+      ..add(const SourceString('&='))
+      ..add(const SourceString('^'))
+      ..add(const SourceString('^='))
+      ..add(const SourceString('|'))
+      ..add(const SourceString('|='));
+
+  SourceString canonicalizeMethodName(SourceString s) {
+    return operators.contains(s)
+        ? Elements.constructOperatorName(s, false)
+        : s;
+  }
+
   ConcreteType visitDynamicSend(Send node) {
-    ConcreteType receiverType = analyze(node.receiver);
+    ConcreteType receiverType = (node.receiver != null)
+        ? analyze(node.receiver)
+        : new ConcreteType.singleton(
+            new ClassBaseType(currentMethod.getEnclosingClass()));
     ConcreteType result = new ConcreteType.empty();
     final argumentsTypes = analyzeArguments(node.arguments);
 
     if (receiverType.isUnkown()) {
-      List<FunctionElement> methods =
-          inferrer.getMembersByName(node.selector.asIdentifier().source);
+      List<FunctionElement> methods = inferrer.getMembersByName(
+          canonicalizeMethodName(node.selector.asIdentifier().source));
       for (final method in methods) {
         inferrer.addCaller(method, currentMethod);
         Element classElem = method.enclosingElement;
@@ -1224,8 +1362,9 @@
     } else {
       for (BaseType baseReceiverType in receiverType.baseTypes) {
         if (!baseReceiverType.isNull()) {
-          FunctionElement method = (baseReceiverType as ClassBaseType).element
-              .lookupMember(node.selector.asIdentifier().source);
+          ClassBaseType classBaseReceiverType = baseReceiverType;
+          FunctionElement method = classBaseReceiverType.element
+              .lookupMember(canonicalizeMethodName(node.selector.asIdentifier().source));
           if (method != null) {
             inferrer.addCaller(method, currentMethod);
             result = result.union(inferrer.getSendReturnType(method,
diff --git a/lib/compiler/implementation/types/types.dart b/lib/compiler/implementation/types/types.dart
index 428102b..c41fd93 100644
--- a/lib/compiler/implementation/types/types.dart
+++ b/lib/compiler/implementation/types/types.dart
@@ -68,7 +68,7 @@
       FunctionElement function = holder;
       FunctionSignature signature = function.computeSignature(compiler);
       for (Element parameter in signature.requiredParameters) {
-        if (types.isEmpty()) return null;
+        if (types.isEmpty) return null;
         if (element == parameter) {
           return new ConcreteType.singleton(new ClassBaseType(types.head));
         }
@@ -165,7 +165,7 @@
 
   Link<Element> computeConcreteSendArguments(Send node) {
     if (node.argumentsNode == null) return null;
-    if (node.arguments.isEmpty()) return const Link<Element>();
+    if (node.arguments.isEmpty) return const Link<Element>();
     if (node.receiver != null && concreteTypes[node.receiver] == null) {
       return null;
     }
@@ -226,14 +226,14 @@
    */
   Link<Element> computeLubs(Link<Element> a, Link<Element> b) {
     LinkBuilder<Element> lubs = new LinkBuilder<Element>();
-    while (!a.isEmpty() && !b.isEmpty()) {
+    while (!a.isEmpty && !b.isEmpty) {
       Element lub = computeLub(a.head, b.head);
       if (lub == null) return null;
       lubs.addLast(lub);
       a = a.tail;
       b = b.tail;
     }
-    return (a.isEmpty() && b.isEmpty()) ? lubs.toLink() : null;
+    return (a.isEmpty && b.isEmpty) ? lubs.toLink() : null;
   }
 
   /**
diff --git a/lib/compiler/implementation/universe/function_set.dart b/lib/compiler/implementation/universe/function_set.dart
index 8dd7d58..f55ad50 100644
--- a/lib/compiler/implementation/universe/function_set.dart
+++ b/lib/compiler/implementation/universe/function_set.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of universe;
+
 // TODO(kasperl): This actually holds getters and setters just fine
 // too and stricly they aren't functions. Maybe this needs a better
 // name -- something like ElementSet seems a bit too generic.
diff --git a/lib/compiler/implementation/universe/partial_type_tree.dart b/lib/compiler/implementation/universe/partial_type_tree.dart
index 721585f..cbe1be0 100644
--- a/lib/compiler/implementation/universe/partial_type_tree.dart
+++ b/lib/compiler/implementation/universe/partial_type_tree.dart
@@ -2,7 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-class PartialTypeTree {
+part of universe;
+
+abstract class PartialTypeTree {
 
   final Compiler compiler;
   PartialTypeTreeNode root;
@@ -44,7 +46,7 @@
     // tree. If so, we have a tree with interface subtypes. If not,
     // keep track of them so we can deal with it if the interface is
     // added to the tree later.
-    for (Link link = type.interfaces; !link.isEmpty(); link = link.tail) {
+    for (Link link = type.interfaces; !link.isEmpty; link = link.tail) {
       InterfaceType superType = link.head;
       ClassElement superTypeElement = superType.element;
       if (nodes.containsKey(superTypeElement)) {
@@ -86,11 +88,11 @@
       // current node to being children of a new node if we need
       // to insert that.
       Link<PartialTypeTreeNode> subtypes = const Link();
-      for (Link link = current.children; !link.isEmpty(); link = link.tail) {
+      for (Link link = current.children; !link.isEmpty; link = link.tail) {
         PartialTypeTreeNode child = link.head;
         ClassElement childType = child.type;
         if (type.isSubclassOf(childType)) {
-          assert(subtypes.isEmpty());
+          assert(subtypes.isEmpty);
           current = child;
           continue L;
         } else if (childType.isSubclassOf(type)) {
@@ -105,10 +107,10 @@
       // that are subtypes of the type of the new node below the new
       // node in the hierarchy.
       PartialTypeTreeNode newNode = newNode(type);
-      if (!subtypes.isEmpty()) {
+      if (!subtypes.isEmpty) {
         newNode.children = subtypes;
         Link<PartialTypeTreeNode> remaining = const Link();
-        for (Link link = current.children; !link.isEmpty(); link = link.tail) {
+        for (Link link = current.children; !link.isEmpty; link = link.tail) {
           PartialTypeTreeNode child = link.head;
           if (!child.type.isSubclassOf(type)) {
             remaining = remaining.prepend(child);
@@ -137,7 +139,7 @@
     L: while (!identical(current.type, type)) {
       assert(type.isSubclassOf(current.type));
       if (!visit(current)) return;
-      for (Link link = current.children; !link.isEmpty(); link = link.tail) {
+      for (Link link = current.children; !link.isEmpty; link = link.tail) {
         PartialTypeTreeNode child = link.head;
         ClassElement childType = child.type;
         if (type.isSubclassOf(childType)) {
@@ -167,7 +169,7 @@
    */
   bool visitRecursively(bool visit(PartialTypeTreeNode node)) {
     if (!visit(this)) return false;
-    for (Link link = children; !link.isEmpty(); link = link.tail) {
+    for (Link link = children; !link.isEmpty; link = link.tail) {
       PartialTypeTreeNode child = link.head;
       if (!child.visitRecursively(visit)) return false;
     }
diff --git a/lib/compiler/implementation/universe/selector_map.dart b/lib/compiler/implementation/universe/selector_map.dart
index b5aa0d2..f4a416d 100644
--- a/lib/compiler/implementation/universe/selector_map.dart
+++ b/lib/compiler/implementation/universe/selector_map.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of universe;
+
 class SelectorMap<T> extends PartialTypeTree {
 
   SelectorMap(Compiler compiler) : super(compiler);
@@ -14,7 +16,7 @@
     if (node == null) return null;
     Link<SelectorValue<T>> selectors = node.selectorsByName[selector.name];
     if (selectors == null) return null;
-    for (Link link = selectors; !link.isEmpty(); link = link.tail) {
+    for (Link link = selectors; !link.isEmpty; link = link.tail) {
       SelectorValue<T> existing = link.head;
       if (existing.selector.equalsUntyped(selector)) return existing.value;
     }
@@ -33,7 +35,7 @@
     } else {
       // Run through the linked list of selectors with the same name. If
       // we find one that matches, we update the value in the mapping.
-      for (Link link = selectors; !link.isEmpty(); link = link.tail) {
+      for (Link link = selectors; !link.isEmpty; link = link.tail) {
         SelectorValue<T> existing = link.head;
         // It is safe to ignore the type here, because all selector
         // mappings that are stored in a single node have the same type.
@@ -55,7 +57,7 @@
     if (node == null) return false;
     Link<SelectorValue<T>> selectors = node.selectorsByName[selector.name];
     if (selectors == null) return false;
-    for (Link link = selectors; !link.isEmpty(); link = link.tail) {
+    for (Link link = selectors; !link.isEmpty; link = link.tail) {
       SelectorValue<T> existing = link.head;
       if (existing.selector.equalsUntyped(selector)) return true;
     }
@@ -83,7 +85,7 @@
     root.visitRecursively((SelectorMapNode<T> node) {
       Link<SelectorValue<T>> selectors = node.selectorsByName[member.name];
       if (selectors == null) return true;
-      for (Link link = selectors; !link.isEmpty(); link = link.tail) {
+      for (Link link = selectors; !link.isEmpty; link = link.tail) {
         SelectorValue<T> existing = link.head;
         Selector selector = existing.selector;
         // Since we're running through the entire tree we have to use
@@ -100,7 +102,7 @@
     visitHierarchy(member.getEnclosingClass(), (SelectorMapNode<T> node) {
       Link<SelectorValue<T>> selectors = node.selectorsByName[member.name];
       if (selectors == null) return true;
-      for (Link link = selectors; !link.isEmpty(); link = link.tail) {
+      for (Link link = selectors; !link.isEmpty; link = link.tail) {
         SelectorValue<T> existing = link.head;
         Selector selector = existing.selector;
         if (selector.appliesUntyped(member, compiler)) {
diff --git a/lib/compiler/implementation/universe/universe.dart b/lib/compiler/implementation/universe/universe.dart
index 76a9aa5..d9df893 100644
--- a/lib/compiler/implementation/universe/universe.dart
+++ b/lib/compiler/implementation/universe/universe.dart
@@ -136,7 +136,7 @@
     : this.name = name,
       this.library = name.isPrivate() ? library : null,
       this.namedArguments = namedArguments,
-      this.orderedNamedArguments = namedArguments.isEmpty()
+      this.orderedNamedArguments = namedArguments.isEmpty
           ? namedArguments
           : <SourceString>[] {
     assert(!name.isPrivate() || library != null);
@@ -214,7 +214,7 @@
   /** Check whether this is a call to 'assert'. */
   bool isAssert() => isCall() && identical(name.stringValue, "assert");
 
-  int hashCode() => argumentCount + 1000 * namedArguments.length;
+  int get hashCode => argumentCount + 1000 * namedArguments.length;
   int get namedArgumentCount => namedArguments.length;
   int get positionalArgumentCount => argumentCount - namedArgumentCount;
   DartType get receiverType => null;
@@ -246,7 +246,7 @@
         // number of positional arguments are not greater than the
         // number of parameters.
         assert(positionalArgumentCount <= parameters.parameterCount);
-        return namedArguments.isEmpty();
+        return namedArguments.isEmpty;
       }
     } else {
       if (positionalArgumentCount > requiredParameterCount) return false;
@@ -275,8 +275,8 @@
     int requiredParameterCount = parameters.requiredParameterCount;
     int optionalParameterCount = parameters.optionalParameterCount;
 
-    bool hasOptionalParameters = !parameters.optionalParameters.isEmpty();
-    if (namedArguments.isEmpty()) {
+    bool hasOptionalParameters = !parameters.optionalParameters.isEmpty;
+    if (namedArguments.isEmpty) {
       if (!hasOptionalParameters) {
         return requiredParameterCount == argumentCount;
       } else {
@@ -291,7 +291,7 @@
       }
       Set<SourceString> nameSet = new Set<SourceString>();
       for (;
-           !remainingNamedParameters.isEmpty();
+           !remainingNamedParameters.isEmpty;
            remainingNamedParameters = remainingNamedParameters.tail) {
         nameSet.add(remainingNamedParameters.head.name);
       }
@@ -328,7 +328,7 @@
 
     // Visit named arguments and add them into a temporary list.
     List compiledNamedArguments = [];
-    for (; !arguments.isEmpty(); arguments = arguments.tail) {
+    for (; !arguments.isEmpty; arguments = arguments.tail) {
       NamedArgument namedArgument = arguments.head;
       compiledNamedArguments.add(compileArgument(namedArgument.expression));
     }
@@ -346,7 +346,7 @@
     // their values: either in the temporary list or using the
     // default value.
     for (;
-         !remainingNamedParameters.isEmpty();
+         !remainingNamedParameters.isEmpty;
          remainingNamedParameters = remainingNamedParameters.tail) {
       Element parameter = remainingNamedParameters.head;
       int foundIndex = namedArguments.indexOf(parameter.name);
@@ -389,7 +389,7 @@
             compiler);
       } else {
         parameters.forEachOptionalParameter((element) {
-          if (!arguments.isEmpty()) {
+          if (!arguments.isEmpty) {
             list.add(compileArgument(arguments.head));
             arguments = arguments.tail;
           } else {
@@ -400,7 +400,7 @@
     } else {
       // Visit named arguments and add them into a temporary list.
       List compiledNamedArguments = [];
-      for (; !arguments.isEmpty(); arguments = arguments.tail) {
+      for (; !arguments.isEmpty; arguments = arguments.tail) {
         NamedArgument namedArgument = arguments.head;
         compiledNamedArguments.add(compileArgument(namedArgument.expression));
       }
@@ -441,8 +441,8 @@
   }
 
   List<SourceString> getOrderedNamedArguments() {
-    if (namedArguments.isEmpty()) return namedArguments;
-    if (!orderedNamedArguments.isEmpty()) return orderedNamedArguments;
+    if (namedArguments.isEmpty) return namedArguments;
+    if (!orderedNamedArguments.isEmpty) return orderedNamedArguments;
 
     orderedNamedArguments.addAll(namedArguments);
     orderedNamedArguments.sort((SourceString first, SourceString second) {
diff --git a/lib/compiler/implementation/util/characters.dart b/lib/compiler/implementation/util/characters.dart
index c6815c2..064efe7 100644
--- a/lib/compiler/implementation/util/characters.dart
+++ b/lib/compiler/implementation/util/characters.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.
 
-#library("characters");
+library characters;
 
 const int $EOF = 0;
 const int $STX = 2;
diff --git a/lib/compiler/implementation/util/link.dart b/lib/compiler/implementation/util/link.dart
index 1029363..b50b86a 100644
--- a/lib/compiler/implementation/util/link.dart
+++ b/lib/compiler/implementation/util/link.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of org_dartlang_compiler_util;
+
 class Link<T> implements Iterable<T> {
   T get head => null;
   Link<T> get tail => null;
@@ -39,12 +41,12 @@
 
   List toList() => new List<T>(0);
 
-  bool isEmpty() => true;
+  bool get isEmpty => true;
 
   Link<T> reverse() => this;
 
   Link<T> reversePrependAll(Link<T> from) {
-    if (from.isEmpty()) return this;
+    if (from.isEmpty) return this;
     return this.prepend(from.head).reversePrependAll(from.tail);
   }
 
@@ -52,7 +54,7 @@
 
   bool operator ==(other) {
     if (other is !Link<T>) return false;
-    return other.isEmpty();
+    return other.isEmpty;
   }
 
   String toString() => "[]";
diff --git a/lib/compiler/implementation/util/link_implementation.dart b/lib/compiler/implementation/util/link_implementation.dart
index a7da8ec..15da76f 100644
--- a/lib/compiler/implementation/util/link_implementation.dart
+++ b/lib/compiler/implementation/util/link_implementation.dart
@@ -2,10 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of util_implementation;
+
 class LinkIterator<T> implements Iterator<T> {
   Link<T> current;
   LinkIterator(Link<T> this.current);
-  bool hasNext() => !current.isEmpty();
+  bool get hasNext => !current.isEmpty;
   T next() {
     T result = current.head;
     current = current.tail;
@@ -28,7 +30,7 @@
   void printOn(StringBuffer buffer, [separatedBy]) {
     buffer.add(head);
     if (separatedBy == null) separatedBy = '';
-    for (Link link = tail; !link.isEmpty(); link = link.tail) {
+    for (Link link = tail; !link.isEmpty; link = link.tail) {
       buffer.add(separatedBy);
       buffer.add(link.head);
     }
@@ -44,7 +46,7 @@
 
   Link<T> reverse() {
     Link<T> result = const Link();
-    for (Link<T> link = this; !link.isEmpty(); link = link.tail) {
+    for (Link<T> link = this; !link.isEmpty; link = link.tail) {
       result = result.prepend(link.head);
     }
     return result;
@@ -52,25 +54,25 @@
 
   Link<T> reversePrependAll(Link<T> from) {
     Link<T> result;
-    for (result = this; !from.isEmpty(); from = from.tail) {
+    for (result = this; !from.isEmpty; from = from.tail) {
       result = result.prepend(from.head);
     }
     return result;
   }
 
 
-  bool isEmpty() => false;
+  bool get isEmpty => false;
 
   List<T> toList() {
     List<T> list = new List<T>();
-    for (Link<T> link = this; !link.isEmpty(); link = link.tail) {
+    for (Link<T> link = this; !link.isEmpty; link = link.tail) {
       list.addLast(link.head);
     }
     return list;
   }
 
   void forEach(void f(T element)) {
-    for (Link<T> link = this; !link.isEmpty(); link = link.tail) {
+    for (Link<T> link = this; !link.isEmpty; link = link.tail) {
       f(link.head);
     }
   }
@@ -78,14 +80,14 @@
   bool operator ==(other) {
     if (other is !Link<T>) return false;
     Link<T> myElements = this;
-    while (!myElements.isEmpty() && !other.isEmpty()) {
+    while (!myElements.isEmpty && !other.isEmpty) {
       if (myElements.head != other.head) {
         return false;
       }
       myElements = myElements.tail;
       other = other.tail;
     }
-    return myElements.isEmpty() && other.isEmpty();
+    return myElements.isEmpty && other.isEmpty;
   }
 }
 
diff --git a/lib/compiler/implementation/util/uri_extras.dart b/lib/compiler/implementation/util/uri_extras.dart
index 6c3d767..aa2f93a 100644
--- a/lib/compiler/implementation/util/uri_extras.dart
+++ b/lib/compiler/implementation/util/uri_extras.dart
@@ -58,7 +58,7 @@
     for (int i = common; i < uriParts.length - 1; i++) {
       sb.add('${uriParts[i]}/');
     }
-    sb.add('${uriParts.last()}');
+    sb.add('${uriParts.last}');
     return sb.toString();
   }
   return uri.toString();
diff --git a/lib/compiler/implementation/util/util.dart b/lib/compiler/implementation/util/util.dart
index f00d146..ef3b0f6 100644
--- a/lib/compiler/implementation/util/util.dart
+++ b/lib/compiler/implementation/util/util.dart
@@ -2,9 +2,11 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#library('org.dartlang.compiler.util');
-#import('util_implementation.dart');
-#source('link.dart');
+library org_dartlang_compiler_util;
+
+import 'util_implementation.dart';
+
+part 'link.dart';
 
 /**
  * Tagging interface for classes from which source spans can be generated.
diff --git a/lib/compiler/implementation/util/util_implementation.dart b/lib/compiler/implementation/util/util_implementation.dart
index ed4228a..bbb852a 100644
--- a/lib/compiler/implementation/util/util_implementation.dart
+++ b/lib/compiler/implementation/util/util_implementation.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#library('util_implementation');
-#import('util.dart');
-#source('link_implementation.dart');
+library util_implementation;
+
+import 'util.dart';
+
+part 'link_implementation.dart';
diff --git a/lib/compiler/implementation/warnings.dart b/lib/compiler/implementation/warnings.dart
index 5814036..f1198a2 100644
--- a/lib/compiler/implementation/warnings.dart
+++ b/lib/compiler/implementation/warnings.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 class MessageKind {
   final String template;
   const MessageKind(this.template);
diff --git a/lib/compiler/implementation/world.dart b/lib/compiler/implementation/world.dart
index ee91eef..836d47c 100644
--- a/lib/compiler/implementation/world.dart
+++ b/lib/compiler/implementation/world.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart2js;
+
 class World {
   final Compiler compiler;
   final Map<ClassElement, Set<ClassElement>> subtypes;
@@ -40,7 +42,7 @@
     // (3) subclasses of (2) and (3).
 
     void potentiallyAddForRti(ClassElement cls, Function callback) {
-      if (cls.typeVariables.isEmpty()) return;
+      if (cls.typeVariables.isEmpty) return;
       if (classesNeedingRti.contains(cls)) return;
       classesNeedingRti.add(cls);
       if (callback != null) {
@@ -56,7 +58,7 @@
     compiler.resolverWorld.isChecks.forEach((DartType type) {
       if (type is InterfaceType) {
         InterfaceType itf = type;
-        if (!itf.arguments.isEmpty()) {
+        if (!itf.arguments.isEmpty) {
           potentiallyAddForRti(itf.element, null);
         }
       }
@@ -64,7 +66,7 @@
 
     List<ClassElement> worklist =
         new List<ClassElement>.from(classesNeedingRti);
-    while (!worklist.isEmpty()) {
+    while (!worklist.isEmpty) {
       Element e = worklist.removeLast();
       Set<Element> dependencies = rtiDependencies[e];
       if (dependencies == null) continue;
@@ -189,5 +191,5 @@
     elements.add(element);
   }
 
-  bool isEmpty() => elements.isEmpty();
+  bool get isEmpty => elements.isEmpty;
 }
diff --git a/lib/compiler/samples/leap/leap_leg.dart b/lib/compiler/samples/leap/leap_leg.dart
index 5890ab9..c04f674 100644
--- a/lib/compiler/samples/leap/leap_leg.dart
+++ b/lib/compiler/samples/leap/leap_leg.dart
@@ -127,7 +127,7 @@
     Stopwatch sw = new Stopwatch()..start();
     compiler.scanBuiltinLibraries();
     sw.stop();
-    return 'Scanned core libraries in ${sw.elapsedInMs()}ms';
+    return 'Scanned core libraries in ${sw.elapsedMilliseconds}ms';
   }
 
   String update(String codeText) {
@@ -197,7 +197,7 @@
       }
     }
 
-    compiler.log("Outline ${sw.elapsedInMs()}");
+    compiler.log("Outline ${sw.elapsedMilliseconds}");
     return sb.toString();
   }
 
@@ -270,7 +270,7 @@
       log('compilation failed');
       return null;
     }
-    log('compilation succeeded: ${sw.elapsedInMs()}ms');
+    log('compilation succeeded: ${sw.elapsedMilliseconds}ms');
     return e;
   }
 
diff --git a/lib/core/bool.dart b/lib/core/bool.dart
index 3225a99..e34b058 100644
--- a/lib/core/bool.dart
+++ b/lib/core/bool.dart
@@ -6,7 +6,7 @@
 
 class bool {
   factory bool._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "class bool cannot be instantiated");
   }
 }
diff --git a/lib/core/collection.dart b/lib/core/collection.dart
index 22381ab..51ffc39 100644
--- a/lib/core/collection.dart
+++ b/lib/core/collection.dart
@@ -95,5 +95,5 @@
   /**
    * Returns true if there is no element in this collection.
    */
-  bool isEmpty() => !iterator().hasNext();
+  bool get isEmpty => !iterator().hasNext;
 }
diff --git a/lib/core/core.dart b/lib/core/core.dart
index 5ba5969..f602943 100644
--- a/lib/core/core.dart
+++ b/lib/core/core.dart
@@ -18,9 +18,11 @@
 #source("expect.dart");
 #source("function.dart");
 #source("future.dart");
+#source("future_impl.dart");
 #source("hashable.dart");
 #source("identical.dart");
 #source("int.dart");
+#source("invocation_mirror.dart");
 #source("iterable.dart");
 #source("iterator.dart");
 #source("list.dart");
@@ -34,6 +36,7 @@
 #source("regexp.dart");
 #source("sequences.dart");
 #source("set.dart");
+#source("sort.dart");
 #source("stopwatch.dart");
 #source("string.dart");
 #source("string_buffer.dart");
diff --git a/lib/core/corelib_sources.gypi b/lib/core/corelib_sources.gypi
index a94025b..91f7ff5 100644
--- a/lib/core/corelib_sources.gypi
+++ b/lib/core/corelib_sources.gypi
@@ -15,9 +15,11 @@
     'expando.dart',
     'expect.dart',
     'future.dart',
+    'future_impl.dart',
     'function.dart',
     'identical.dart',
     'int.dart',
+    'invocation_mirror.dart',
     'hashable.dart',
     'iterable.dart',
     'iterator.dart',
@@ -32,6 +34,7 @@
     'regexp.dart',
     'sequences.dart',
     'set.dart',
+    'sort.dart',
     'stopwatch.dart',
     'string.dart',
     'strings.dart',
diff --git a/lib/core/date.dart b/lib/core/date.dart
index 1c496ae..7ab46cf 100644
--- a/lib/core/date.dart
+++ b/lib/core/date.dart
@@ -52,9 +52,8 @@
                 int minute = 0,
                 int second = 0,
                 int millisecond = 0]) {
-    return new DateImplementation(year, month, day,
-                                  hour, minute, second,
-                                  millisecond, false);
+    return new _DateImpl(
+        year, month, day, hour, minute, second, millisecond, false);
   }
 
   /**
@@ -72,22 +71,21 @@
                     int minute = 0,
                     int second = 0,
                     int millisecond = 0]) {
-    return new DateImplementation(year, month, day,
-                                  hour, minute, second,
-                                  millisecond, true);
+    return new _DateImpl(
+        year, month, day, hour, minute, second, millisecond, true);
   }
 
   /**
    * Constructs a new [Date] instance with current date time value in the
    * local time zone.
    */
-  factory Date.now() => new DateImplementation.now();
+  factory Date.now() => new _DateImpl.now();
 
   /**
    * Constructs a new [Date] instance based on [formattedString].
    */
   factory Date.fromString(String formattedString)
-      => new DateImplementation.fromString(formattedString);
+      => new _DateImpl.fromString(formattedString);
 
   /**
    * Constructs a new [Date] instance with the given [millisecondsSinceEpoch].
@@ -102,8 +100,8 @@
   // TODO(lrn): Have two constructors instead of taking an optional bool.
   factory Date.fromMillisecondsSinceEpoch(int millisecondsSinceEpoch,
                                           {bool isUtc: false}) {
-    return new DateImplementation.fromMillisecondsSinceEpoch(
-        millisecondsSinceEpoch, isUtc);
+    return new _DateImpl.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
+                                                    isUtc);
   }
 
   /**
@@ -244,3 +242,187 @@
    */
   Duration difference(Date other);
 }
+
+class _DateImpl implements Date {
+  final int millisecondsSinceEpoch;
+  final bool isUtc;
+
+  factory _DateImpl.fromString(String formattedString) {
+    // Read in (a subset of) ISO 8601.
+    // Examples:
+    //    - "2012-02-27 13:27:00"
+    //    - "2012-02-27 13:27:00.423z"
+    //    - "20120227 13:27:00"
+    //    - "20120227T132700"
+    //    - "20120227"
+    //    - "2012-02-27T14Z"
+    //    - "-123450101 00:00:00 Z"  // In the year -12345.
+    final RegExp re = const RegExp(
+        r'^([+-]?\d?\d\d\d\d)-?(\d\d)-?(\d\d)'  // The day part.
+        r'(?:[ T](\d\d)(?::?(\d\d)(?::?(\d\d)(.\d{1,6})?)?)? ?([zZ])?)?$');
+    Match match = re.firstMatch(formattedString);
+    if (match !== null) {
+      int parseIntOrZero(String matched) {
+        // TODO(floitsch): we should not need to test against the empty string.
+        if (matched === null || matched == "") return 0;
+        return int.parse(matched);
+      }
+
+      double parseDoubleOrZero(String matched) {
+        // TODO(floitsch): we should not need to test against the empty string.
+        if (matched === null || matched == "") return 0.0;
+        return double.parse(matched);
+      }
+
+      int years = int.parse(match[1]);
+      int month = int.parse(match[2]);
+      int day = int.parse(match[3]);
+      int hour = parseIntOrZero(match[4]);
+      int minute = parseIntOrZero(match[5]);
+      int second = parseIntOrZero(match[6]);
+      bool addOneMillisecond = false;
+      int millisecond = (parseDoubleOrZero(match[7]) * 1000).round().toInt();
+      if (millisecond == 1000) {
+        addOneMillisecond = true;
+        millisecond = 999;
+      }
+      // TODO(floitsch): we should not need to test against the empty string.
+      bool isUtc = (match[8] !== null) && (match[8] != "");
+      int millisecondsSinceEpoch = _brokenDownDateToMillisecondsSinceEpoch(
+          years, month, day, hour, minute, second, millisecond, isUtc);
+      if (millisecondsSinceEpoch === null) {
+        throw new ArgumentError(formattedString);
+      }
+      if (addOneMillisecond) millisecondsSinceEpoch++;
+      return new Date.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
+                                                 isUtc: isUtc);
+    } else {
+      throw new ArgumentError(formattedString);
+    }
+  }
+
+  static const int _MAX_MILLISECONDS_SINCE_EPOCH = 8640000000000000;
+
+  _DateImpl.fromMillisecondsSinceEpoch(this.millisecondsSinceEpoch,
+                                       this.isUtc) {
+    if (millisecondsSinceEpoch.abs() > _MAX_MILLISECONDS_SINCE_EPOCH) {
+      throw new ArgumentError(millisecondsSinceEpoch);
+    }
+    if (isUtc === null) throw new ArgumentError(isUtc);
+  }
+
+  bool operator ==(other) {
+    if (!(other is Date)) return false;
+    return (millisecondsSinceEpoch == other.millisecondsSinceEpoch);
+  }
+
+  bool operator <(Date other)
+      => millisecondsSinceEpoch < other.millisecondsSinceEpoch;
+
+  bool operator <=(Date other)
+      => millisecondsSinceEpoch <= other.millisecondsSinceEpoch;
+
+  bool operator >(Date other)
+      => millisecondsSinceEpoch > other.millisecondsSinceEpoch;
+
+  bool operator >=(Date other)
+      => millisecondsSinceEpoch >= other.millisecondsSinceEpoch;
+
+  int compareTo(Date other)
+      => millisecondsSinceEpoch.compareTo(other.millisecondsSinceEpoch);
+
+  int get hashCode => millisecondsSinceEpoch;
+
+  Date toLocal() {
+    if (isUtc) {
+      return new Date.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
+                                                 isUtc: false);
+    }
+    return this;
+  }
+
+  Date toUtc() {
+    if (isUtc) return this;
+    return new Date.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
+                                               isUtc: true);
+  }
+
+  String toString() {
+    String fourDigits(int n) {
+      int absN = n.abs();
+      String sign = n < 0 ? "-" : "";
+      if (absN >= 1000) return "$n";
+      if (absN >= 100) return "${sign}0$absN";
+      if (absN >= 10) return "${sign}00$absN";
+      return "${sign}000$absN";
+    }
+
+    String threeDigits(int n) {
+      if (n >= 100) return "${n}";
+      if (n >= 10) return "0${n}";
+      return "00${n}";
+    }
+
+    String twoDigits(int n) {
+      if (n >= 10) return "${n}";
+      return "0${n}";
+    }
+
+    String y = fourDigits(year);
+    String m = twoDigits(month);
+    String d = twoDigits(day);
+    String h = twoDigits(hour);
+    String min = twoDigits(minute);
+    String sec = twoDigits(second);
+    String ms = threeDigits(millisecond);
+    if (isUtc) {
+      return "$y-$m-$d $h:$min:$sec.${ms}Z";
+    } else {
+      return "$y-$m-$d $h:$min:$sec.$ms";
+    }
+  }
+
+  /** Returns a new [Date] with the [duration] added to [this]. */
+  Date add(Duration duration) {
+    int ms = millisecondsSinceEpoch;
+    return new Date.fromMillisecondsSinceEpoch(
+        ms + duration.inMilliseconds, isUtc: isUtc);
+  }
+
+  /** Returns a new [Date] with the [duration] subtracted from [this]. */
+  Date subtract(Duration duration) {
+    int ms = millisecondsSinceEpoch;
+    return new Date.fromMillisecondsSinceEpoch(
+        ms - duration.inMilliseconds, isUtc: isUtc);
+  }
+
+  /** Returns a [Duration] with the difference of [this] and [other]. */
+  Duration difference(Date other) {
+    int ms = millisecondsSinceEpoch;
+    int otherMs = other.millisecondsSinceEpoch;
+    return new Duration(milliseconds: ms - otherMs);
+  }
+
+  external _DateImpl(int year,
+                     int month,
+                     int day,
+                     int hour,
+                     int minute,
+                     int second,
+                     int millisecond,
+                     bool isUtc);
+  external _DateImpl.now();
+  external static int _brokenDownDateToMillisecondsSinceEpoch(
+      int year, int month, int day, int hour, int minute, int second,
+      int millisecond, bool isUtc);
+  external String get timeZoneName;
+  external Duration get timeZoneOffset;
+  external int get year;
+  external int get month;
+  external int get day;
+  external int get hour;
+  external int get minute;
+  external int get second;
+  external int get millisecond;
+  external int get weekday;
+}
diff --git a/lib/core/duration.dart b/lib/core/duration.dart
index aa3d4be..710d877 100644
--- a/lib/core/duration.dart
+++ b/lib/core/duration.dart
@@ -85,8 +85,8 @@
     return inMilliseconds == other.inMilliseconds;
   }
 
-  int hashCode() {
-    return inMilliseconds.hashCode();
+  int get hashCode {
+    return inMilliseconds.hashCode;
   }
 
   int compareTo(Duration other) {
diff --git a/lib/core/errors.dart b/lib/core/errors.dart
index 97465fc..9a16d83 100644
--- a/lib/core/errors.dart
+++ b/lib/core/errors.dart
@@ -6,19 +6,28 @@
   const Error();
 }
 
+/**
+ * Error thrown by the runtime system when an assert statement fails.
+ */
 class AssertionError implements Error {
 }
 
+/**
+ * Error thrown by the runtime system when a type assertion fails.
+ */
 class TypeError implements AssertionError {
 }
 
+/**
+ * Error thrown by the runtime system when a cast operation fails.
+ */
 class CastError implements Error {
 }
 
 /**
  * Error thrown when a function is passed an unacceptable argument.
  */
-class ArgumentError implements Error {
+ class ArgumentError implements Error {
   final message;
 
   /** The [message] describes the erroneous argument. */
@@ -41,7 +50,14 @@
   const IllegalArgumentException([argument = ""]) : super(argument);
 }
 
-
+/**
+ * Error thrown when control reaches the end of a switch case.
+ *
+ * The Dart specification requires this error to be thrown when
+ * control reaches the end of a switch case (except the last case
+ * of a switch) without meeting a break or similar end of the control
+ * flow.
+ */
 class FallThroughError implements Error {
   const FallThroughError();
 }
@@ -131,7 +147,37 @@
 }
 
 
-class OutOfMemoryError implements Exception {
+/**
+ * The operation was not allowed by the object.
+ *
+ * This [Error] is thrown when a class cannot implement
+ * one of the methods in its signature.
+ */
+class UnsupportedError implements Error {
+  final String message;
+  UnsupportedError(this.message);
+  String toString() => "Unsupported operation: message";
+}
+
+/**
+ * The operation was not allowed by the current state of the object.
+ *
+ * This is a generic error used for a variety of different erroneous
+ * actions. The message should be descriptive.
+ */
+class StateError implements Error {
+  final String message;
+  StateError(this.message);
+  String toString() => "Bad state: message";
+}
+
+
+class OutOfMemoryError implements Error {
   const OutOfMemoryError();
   String toString() => "Out of Memory";
 }
+
+class StackOverflowError implements Error {
+  const StackOverflowError();
+  String toString() => "Stack Overflow";
+}
diff --git a/lib/core/exceptions.dart b/lib/core/exceptions.dart
index c57603a..c1774ef 100644
--- a/lib/core/exceptions.dart
+++ b/lib/core/exceptions.dart
@@ -34,32 +34,6 @@
   final _value;
 }
 
-/**
- * Exception thrown because of attempt to modify an immutable object.
- */
-class IllegalAccessException implements Exception {
-  const IllegalAccessException();
-  String toString() => "Attempt to modify an immutable object";
-}
-
-
-class ClosureArgumentMismatchException implements Exception {
-  const ClosureArgumentMismatchException();
-  String toString() => "Closure argument mismatch";
-}
-
-
-class ObjectNotClosureException implements Exception {
-  const ObjectNotClosureException();
-  String toString() => "Object is not closure";
-}
-
-
-class StackOverflowException implements Exception {
-  const StackOverflowException();
-  String toString() => "Stack Overflow";
-}
-
 
 /**
  * Exception thrown when a string or some other data does not have an expected
@@ -80,12 +54,6 @@
 }
 
 
-class WrongArgumentCountException implements Exception {
-  const WrongArgumentCountException();
-  String toString() => "WrongArgumentCountException";
-}
-
-
 class NullPointerException implements Exception {
   const NullPointerException([this.functionName, this.arguments = const []]);
   String toString() {
@@ -105,25 +73,6 @@
 }
 
 
-class NoMoreElementsException implements Exception {
-  const NoMoreElementsException();
-  String toString() => "NoMoreElementsException";
-}
-
-
-class EmptyQueueException implements Exception {
-  const EmptyQueueException();
-  String toString() => "EmptyQueueException";
-}
-
-
-class UnsupportedOperationException implements Exception {
-  const UnsupportedOperationException(String this._message);
-  String toString() => "UnsupportedOperationException: $_message";
-  final String _message;
-}
-
-
 class NotImplementedException implements Exception {
   const NotImplementedException([String message]) : this._message = message;
   String toString() => (this._message !== null
diff --git a/lib/core/expect.dart b/lib/core/expect.dart
index 2b87297..adf0604 100644
--- a/lib/core/expect.dart
+++ b/lib/core/expect.dart
@@ -131,7 +131,7 @@
     String msg = _getMessage(reason);
 
     // Make sure all of the values are present in both and match.
-    for (final key in expected.getKeys()) {
+    for (final key in expected.keys) {
       if (!actual.containsKey(key)) {
         _fail('Expect.mapEquals(missing expected key: <$key>$msg) fails');
       }
@@ -140,7 +140,7 @@
     }
 
     // Make sure the actual map doesn't have any extra keys.
-    for (final key in actual.getKeys()) {
+    for (final key in actual.keys) {
       if (!expected.containsKey(key)) {
         _fail('Expect.mapEquals(unexpected key: <$key>$msg) fails');
       }
@@ -227,12 +227,12 @@
     final extraSet = new Set.from(actual);
     extraSet.removeAll(expected);
 
-    if (extraSet.isEmpty() && missingSet.isEmpty()) return;
+    if (extraSet.isEmpty && missingSet.isEmpty) return;
     String msg = _getMessage(reason);
 
     StringBuffer sb = new StringBuffer("Expect.setEquals($msg) fails");
     // Report any missing items.
-    if (!missingSet.isEmpty()) {
+    if (!missingSet.isEmpty) {
       sb.add('\nExpected collection does not contain: ');
     }
 
@@ -241,7 +241,7 @@
     }
 
     // Report any extra items.
-    if (!extraSet.isEmpty()) {
+    if (!extraSet.isEmpty) {
       sb.add('\nExpected collection should not contain: ');
     }
 
diff --git a/lib/core/future.dart b/lib/core/future.dart
index 99af241..c14318b 100644
--- a/lib/core/future.dart
+++ b/lib/core/future.dart
@@ -29,7 +29,7 @@
  */
 abstract class Future<T> {
   /** A future whose value is immediately available. */
-  factory Future.immediate(T value) => new FutureImpl<T>.immediate(value);
+  factory Future.immediate(T value) => new _FutureImpl<T>.immediate(value);
 
   /** The value provided. Throws an exception if [hasValue] is false. */
   T get value;
@@ -161,7 +161,7 @@
  */
 abstract class Completer<T> {
 
-  factory Completer() => new CompleterImpl<T>();
+  factory Completer() => new _CompleterImpl<T>();
 
   /** The future that will contain the value produced by this completer. */
   Future get future;
@@ -193,6 +193,28 @@
   String toString() => "Exception: future already completed";
 }
 
+/**
+ * Wraps unhandled exceptions provided to [Completer.completeException]. It is
+ * used to show both the error message and the stack trace for unhandled
+ * exceptions.
+ */
+class FutureUnhandledException implements Exception {
+  /** Wrapped exception. */
+  var source;
+
+  /** Trace for the wrapped exception. */
+  Object stackTrace;
+
+  FutureUnhandledException(this.source, this.stackTrace);
+
+  String toString() {
+    return 'FutureUnhandledException: exception while executing Future\n  '
+        '${source.toString().replaceAll("\n", "\n  ")}\n'
+        'original stack trace:\n  '
+        '${stackTrace.toString().replaceAll("\n","\n  ")}';
+  }
+}
+
 
 /**
  * [Futures] holds additional utility functions that operate on [Future]s (for
@@ -206,7 +228,7 @@
    * returned future will be a list of all the values that were produced.)
    */
   static Future<List> wait(List<Future> futures) {
-    if (futures.isEmpty()) {
+    if (futures.isEmpty) {
       return new Future<List>.immediate(const []);
     }
 
diff --git a/lib/coreimpl/future_implementation.dart b/lib/core/future_impl.dart
similarity index 89%
rename from lib/coreimpl/future_implementation.dart
rename to lib/core/future_impl.dart
index 9f0caff..bbae82d 100644
--- a/lib/coreimpl/future_implementation.dart
+++ b/lib/core/future_impl.dart
@@ -1,7 +1,7 @@
 // Copyright 2012 Google Inc. All Rights Reserved.
 // Dart core library.
 
-class FutureImpl<T> implements Future<T> {
+class _FutureImpl<T> implements Future<T> {
 
   bool _isComplete = false;
 
@@ -41,13 +41,13 @@
    */
   final List<Function> _completionListeners;
 
-  FutureImpl()
+  _FutureImpl()
     : _successListeners = [],
       _exceptionHandlers = [],
       _completionListeners = [];
 
-  factory FutureImpl.immediate(T value) {
-    final res = new FutureImpl();
+  factory _FutureImpl.immediate(T value) {
+    final res = new _FutureImpl();
     res._setValue(value);
     return res;
   }
@@ -56,8 +56,8 @@
     if (!isComplete) {
       throw new FutureNotCompleteException();
     }
-    if (_exception !== null) {
-      throw _exception;
+    if (_exception != null) {
+      throw new FutureUnhandledException(_exception, stackTrace);
     }
     return _value;
   }
@@ -81,7 +81,7 @@
   }
 
   bool get hasValue {
-    return isComplete && _exception === null;
+    return isComplete && _exception == null;
   }
 
   void then(void onSuccess(T value)) {
@@ -90,7 +90,7 @@
     } else if (!isComplete) {
       _successListeners.add(onSuccess);
     } else if (!_exceptionHandled) {
-      throw _exception;
+      throw new FutureUnhandledException(_exception, stackTrace);
     }
   }
 
@@ -119,7 +119,7 @@
     _isComplete = true;
 
     try {
-      if (_exception !== null) {
+      if (_exception != null) {
         for (Function handler in _exceptionHandlers) {
           // Explicitly check for true here so that if the handler returns null,
           // we don't get an exception in checked mode.
@@ -136,7 +136,7 @@
         }
       } else {
         if (!_exceptionHandled && _successListeners.length > 0) {
-          throw _exception;
+          throw new FutureUnhandledException(_exception, stackTrace);
         }
       }
     } finally {
@@ -157,7 +157,7 @@
   }
 
   void _setException(Object exception, Object stackTrace) {
-    if (exception === null) {
+    if (exception == null) {
       // null is not a legal value for the exception of a Future.
       throw new ArgumentError(null);
     }
@@ -250,11 +250,11 @@
   }
 }
 
-class CompleterImpl<T> implements Completer<T> {
+class _CompleterImpl<T> implements Completer<T> {
 
-  final FutureImpl<T> _futureImpl;
+  final _FutureImpl<T> _futureImpl;
 
-  CompleterImpl() : _futureImpl = new FutureImpl() {}
+  _CompleterImpl() : _futureImpl = new _FutureImpl() {}
 
   Future<T> get future {
     return _futureImpl;
@@ -268,3 +268,4 @@
     _futureImpl._setException(exception, stackTrace);
   }
 }
+
diff --git a/lib/core/hashable.dart b/lib/core/hashable.dart
index f9f35ff..aaf345b 100644
--- a/lib/core/hashable.dart
+++ b/lib/core/hashable.dart
@@ -13,5 +13,5 @@
  */
 abstract class Hashable {
   // TODO(lrn): http://darbug.com/5522
-  abstract int hashCode();
+  abstract int get hashCode;
 }
diff --git a/lib/core/int.dart b/lib/core/int.dart
index 2bc75be..b0f6c13 100644
--- a/lib/core/int.dart
+++ b/lib/core/int.dart
@@ -36,10 +36,10 @@
   int operator >>(int shiftAmount);
 
   /** Returns true if and only if this integer is even. */
-  bool isEven();
+  bool get isEven;
 
   /** Returns true if and only if this integer is odd. */
-  bool isOdd();
+  bool get isOdd;
 
   /** Negate operator. Negating an integer produces an integer. */
   int operator -();
@@ -47,16 +47,16 @@
   /** Returns the absolute value of this integer. */
   int abs();
 
-  /** For integers the round method is the identify function. */
+  /** Returns [this]. */
   int round();
 
-  /** For integers the floor method is the identify function. */
+  /** Returns [this]. */
   int floor();
 
-  /** For integers the ceil method is the identify function. */
+  /** Returns [this]. */
   int ceil();
 
-  /** For integers the truncate method is the identify function. */
+  /** Returns [this]. */
   int truncate();
 
   /**
diff --git a/lib/core/invocation_mirror.dart b/lib/core/invocation_mirror.dart
new file mode 100644
index 0000000..b83ced2
--- /dev/null
+++ b/lib/core/invocation_mirror.dart
@@ -0,0 +1,50 @@
+// 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.
+
+/**
+ * Representation of the invocation of a member on an object.
+ *
+ * This is the type of objects passed to [Object.noSuchMethod] when
+ * an object doesn't support the member invocation that was attempted
+ * on it.
+ */
+abstract class InvocationMirror {
+  /** The name of the invoked member. */
+  String get memberName;
+
+  /** An unmodifiable view of the positional arguments of the call. */
+  List get positionalArguments;
+
+  /** An unmodifiable view of the named arguments of the call. */
+  Map<String, Dynamic> get namedArguments;
+
+  /** Whether the invocation was a method call. */
+  bool get isMethod;
+
+  /**
+   * Whether the invocation was a getter call.
+   * If so, both types of arguments will be null.
+   */
+  bool get isGetter;
+
+  /**
+   * Whether the invocation was a setter call.
+   *
+   * If so, [arguments] will have exactly one positonal argument,
+   * and namedArguments will be null.
+   */
+  bool get isSetter;
+
+  /** Whether the invocation was a getter or a setter call. */
+  bool get isAccessor => isGetter || isSetter;
+
+  /**
+   * Perform the invocation on the provided object.
+   *
+   * If the object doesn't support the invocation, its [noSuchMethod]
+   * method will be called with either this [InvocationMirror] or another
+   * equivalent [InvocationMirror].
+   */
+  invokeOn(Object receiver);
+}
diff --git a/lib/core/iterator.dart b/lib/core/iterator.dart
index c3a346d..2e324f6 100644
--- a/lib/core/iterator.dart
+++ b/lib/core/iterator.dart
@@ -13,12 +13,12 @@
 abstract class Iterator<E> {
   /**
    * Gets the next element in the iteration. Throws a
-   * [NoMoreElementsException] if no element is left.
+   * [StateError] if no element is left.
    */
   E next();
 
   /**
    * Returns whether the [Iterator] has elements left.
    */
-  bool hasNext();
+  bool hasNext;
 }
diff --git a/lib/core/list.dart b/lib/core/list.dart
index 04ad11f..6dd841f 100644
--- a/lib/core/list.dart
+++ b/lib/core/list.dart
@@ -40,20 +40,20 @@
   /**
    * Changes the length of the list. If [newLength] is greater than
    * the current [length], entries are initialized to [:null:]. Throws
-   * an [UnsupportedOperationException] if the list is not extendable.
+   * an [UnsupportedError] if the list is not extendable.
    */
   void set length(int newLength);
 
   /**
    * Adds [value] at the end of the list, extending the length by
-   * one. Throws an [UnsupportedOperationException] if the list is not
+   * one. Throws an [UnsupportedError] if the list is not
    * extendable.
    */
   void add(E value);
 
   /**
    * Adds [value] at the end of the list, extending the length by
-   * one. Throws an [UnsupportedOperationException] if the list is not
+   * one. Throws an [UnsupportedError] if the list is not
    * extendable.
    */
   void addLast(E value);
@@ -61,7 +61,7 @@
   /**
    * Appends all elements of the [collection] to the end of this list.
    * Extends the length of the list by the number of elements in [collection].
-   * Throws an [UnsupportedOperationException] if this list is not
+   * Throws an [UnsupportedError] if this list is not
    * extendable.
    */
   void addAll(Collection<E> collection);
@@ -96,7 +96,7 @@
    * Removes all elements in the list.
    *
    * The length of the list becomes zero.
-   * Throws an [UnsupportedOperationException], and retains all elements, if the
+   * Throws an [UnsupportedError], and retains all elements, if the
    * length of the list cannot be changed.
    */
   void clear();
@@ -110,14 +110,14 @@
    * Throws an [ArgumentError] if [index] is not an [int].
    * Throws an [IndexOutOfRangeException] if the [index] does not point inside
    * the list.
-   * Throws an [UnsupportedOperationException], and doesn't remove the element,
+   * Throws an [UnsupportedError], and doesn't remove the element,
    * if the length of the list cannot be changed.
    */
   E removeAt(int index);
 
   /**
    * Pops and returns the last element of the list.
-   * Throws a [UnsupportedOperationException] if the length of the
+   * Throws a [UnsupportedError] if the length of the
    * list cannot be changed.
    */
   E removeLast();
@@ -126,7 +126,7 @@
    * Returns the last element of the list, or throws an out of bounds
    * exception if the list is empty.
    */
-  E last();
+  E get last;
 
   /**
    * Returns a new list containing [length] elements from the list,
@@ -151,7 +151,7 @@
 
   /**
    * Removes [length] elements from the list, beginning at [start].
-   * Throws an [UnsupportedOperationException] if the list is
+   * Throws an [UnsupportedError] if the list is
    * not extendable.
    * If [length] is 0, this method does not do anything.
    * Throws an [ArgumentError] if [length] is negative.
@@ -163,7 +163,7 @@
   /**
    * Inserts a new range into the list, starting from [start] to
    * [:start + length - 1:]. The entries are filled with [initialValue].
-   * Throws an [UnsupportedOperationException] if the list is
+   * Throws an [UnsupportedError] if the list is
    * not extendable.
    * If [length] is 0, this method does not do anything.
    * If [start] is the length of the list, this method inserts the
diff --git a/lib/core/map.dart b/lib/core/map.dart
index f984deb..530d4ee 100644
--- a/lib/core/map.dart
+++ b/lib/core/map.dart
@@ -69,12 +69,12 @@
   /**
    * Returns a collection containing all the keys in the map.
    */
-  Collection<K> getKeys();
+  Collection<K> get keys;
 
   /**
    * Returns a collection containing all the values in the map.
    */
-  Collection<V> getValues();
+  Collection<V> get values;
 
   /**
    * The number of {key, value} pairs in the map.
@@ -84,13 +84,13 @@
   /**
    * Returns true if there is no {key, value} pair in the map.
    */
-  bool isEmpty();
+  bool get isEmpty;
 }
 
 /**
  * Hash map version of the [Map] interface. A [HashMap] does not
- * provide any guarantees on the order of keys and values in [getKeys]
- * and [getValues].
+ * provide any guarantees on the order of keys and values in [keys]
+ * and [values].
  */
 interface HashMap<K, V> extends Map<K, V>
     default HashMapImplementation<K, V> {
diff --git a/lib/core/num.dart b/lib/core/num.dart
index 6bcee59..a506ade 100644
--- a/lib/core/num.dart
+++ b/lib/core/num.dart
@@ -49,11 +49,11 @@
   /** Relational greater than or equal operator. */
   bool operator >=(num other);
 
-  bool isNaN();
+  bool get isNaN;
 
-  bool isNegative();
+  bool get isNegative;
 
-  bool isInfinite();
+  bool get isInfinite;
 
   /** Returns the absolute value of this [num]. */
   num abs();
diff --git a/lib/core/object.dart b/lib/core/object.dart
index 30de4df..ba41cb8 100644
--- a/lib/core/object.dart
+++ b/lib/core/object.dart
@@ -38,7 +38,7 @@
    * If a subclass overrides [hashCode] it should override the
    * equality operator as well to maintain consistency.
    */
-  external int hashCode();
+  external int get hashCode;
 
   /**
    * Returns a string representation of this object.
diff --git a/lib/core/options.dart b/lib/core/options.dart
index 0685d17..3377c30 100644
--- a/lib/core/options.dart
+++ b/lib/core/options.dart
@@ -13,7 +13,7 @@
    * A newly constructed Options object contains the arguments exactly as they
    * have been passed to the isolate.
    */
-  factory Options() => new RuntimeOptions();
+  factory Options() => new _OptionsImpl();
 
   /**
    * Returns a list of arguments that have been passed to this isolate. Any
@@ -42,3 +42,32 @@
    */
   String get script;
 }
+
+class _OptionsImpl implements Options {
+  List<String> get arguments {
+    if (_arguments === null) {
+      // On first access make a copy of the native arguments.
+      _arguments = _nativeArguments.getRange(0, _nativeArguments.length);
+    }
+    return _arguments;
+  }
+
+  String get executable {
+    return _nativeExecutable;
+  }
+
+  String get script {
+    return _nativeScript;
+  }
+
+  List<String> _arguments = null;
+
+  // This arguments singleton is written to by the embedder if applicable.
+  static List<String> _nativeArguments = const [];
+
+  // This executable singleton is written to by the embedder if applicable.
+  static String _nativeExecutable = '';
+
+  // This script singleton is written to by the embedder if applicable.
+  static String _nativeScript = '';
+}
diff --git a/lib/core/queue.dart b/lib/core/queue.dart
index beff3d7..ecdfe36 100644
--- a/lib/core/queue.dart
+++ b/lib/core/queue.dart
@@ -22,13 +22,13 @@
 
   /**
    * Removes and returns the first element of this queue. Throws an
-   * [EmptyQueueException] exception if this queue is empty.
+   * [StateError] exception if this queue is empty.
    */
   E removeFirst();
 
   /**
    * Removes and returns the last element of the queue. Throws an
-   * [EmptyQueueException] exception if this queue is empty.
+   * [StateError] exception if this queue is empty.
    */
   E removeLast();
 
@@ -55,15 +55,15 @@
 
   /**
    * Returns the first element of the queue. Throws an
-   * [EmptyQueueException] exception if this queue is empty.
+   * [StateError] exception if this queue is empty.
    */
-  E first();
+  E get first;
 
   /**
    * Returns the last element of the queue. Throws an
-   * [EmptyQueueException] exception if this queue is empty.
+   * [StateError] exception if this queue is empty.
    */
-  E last();
+  E get last;
 
   /**
    * Removes all elements in the queue. The size of the queue becomes zero.
diff --git a/lib/core/regexp.dart b/lib/core/regexp.dart
index 5d2db7f..99f8bef 100644
--- a/lib/core/regexp.dart
+++ b/lib/core/regexp.dart
@@ -28,13 +28,13 @@
   /**
    * Returns the index in the string where the match starts.
    */
-  int start();
+  int get start;
 
   /**
    * Returns the index in the string after the last character of the
    * match.
    */
-  int end();
+  int get end;
 
   /**
    * Returns the string matched by the given [group]. If [group] is 0,
@@ -52,7 +52,7 @@
   /**
    * Returns the number of groups in the regular expression.
    */
-  int groupCount();
+  int get groupCount;
 
   /**
    * The string on which this matcher was computed.
diff --git a/lib/core/sequences.dart b/lib/core/sequences.dart
index 5ed4366..32a3b40 100644
--- a/lib/core/sequences.dart
+++ b/lib/core/sequences.dart
@@ -85,7 +85,7 @@
     return false;
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     return this.length == 0;
   }
 }
@@ -117,7 +117,7 @@
     return -1;
   }
 
-  E last() => sequence[sequence.length - 1];
+  E get last => sequence[sequence.length - 1];
 
   List<E> getRange(int start, int length) {
     List<E> result = <E>[];
@@ -128,62 +128,62 @@
   }
 
   void operator []=(int index, E value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot modify an unmodifiable list");
   }
 
   void set length(int newLength) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot change the length of an unmodifiable list");
   }
 
   void add(E value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to an unmodifiable list");
   }
 
   void addLast(E value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to an unmodifiable list");
   }
 
   void addAll(Collection<E> collection) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to an unmodifiable list");
   }
 
   void sort([Comparator<E> compare]) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot modify an unmodifiable list");
   }
 
   void clear() {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot clear an unmodifiable list");
   }
 
   E removeAt(int index) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove in an unmodifiable list");
   }
 
   E removeLast() {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove in an unmodifiable list");
   }
 
   void setRange(int start, int length, List<E> from, [int startFrom]) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot modify an unmodifiable list");
   }
 
   void removeRange(int start, int length) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove in an unmodifiable list");
   }
 
   void insertRange(int start, int length, [E initialValue]) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot insert range in an unmodifiable list");
   }
 }
@@ -195,10 +195,10 @@
   Sequence<E> _sequence;
   int _position;
   SequenceIterator(this._sequence) : _position = 0;
-  bool hasNext() => _position < _sequence.length;
+  bool get hasNext => _position < _sequence.length;
   E next() {
-    if (hasNext()) return _sequence[_position++];
-    throw new NoMoreElementsException();
+    if (hasNext) return _sequence[_position++];
+    throw new StateError("No more elements");
   }
 }
 
diff --git a/lib/coreimpl/dual_pivot_quicksort.dart b/lib/core/sort.dart
similarity index 97%
rename from lib/coreimpl/dual_pivot_quicksort.dart
rename to lib/core/sort.dart
index c74e90f..252a110 100644
--- a/lib/coreimpl/dual_pivot_quicksort.dart
+++ b/lib/core/sort.dart
@@ -2,6 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// TODO(ajohnsen): Remove once coreimpl is eliminated.
+/**
+ * WARNING: This method is temporary and will go away soon.
+ */
+void coreSort(List l, int compare(a, b)) => _Sort.sort(l, compare);
+
 /**
  * Dual-Pivot Quicksort algorithm.
  *
@@ -10,7 +16,7 @@
  *
  * Some improvements have been copied from Android's implementation.
  */
-class DualPivotQuicksort {
+class _Sort {
   // When a list has less then [:_INSERTION_SORT_THRESHOLD:] elements it will
   // be sorted by an insertion sort.
   static const int _INSERTION_SORT_THRESHOLD = 32;
diff --git a/lib/core/stopwatch.dart b/lib/core/stopwatch.dart
index e43f52d..2cb77a7 100644
--- a/lib/core/stopwatch.dart
+++ b/lib/core/stopwatch.dart
@@ -45,21 +45,20 @@
    * Returns 0 if the [Stopwatch] has never been started.
    * The elapsed number of clock ticks increases by [frequency] every second.
    */
-  int elapsed();
+  int get elapsedTicks;
 
   /**
-   * Returns the [elapsed] counter converted to microseconds.
+   * Returns the [elapsedTicks] counter converted to microseconds.
    */
-  int elapsedInUs();
+  int get elapsedMicroseconds;
 
   /**
-   * Returns the [elapsed] counter converted to milliseconds.
+   * Returns the [elapsedTicks] counter converted to milliseconds.
    */
-  int elapsedInMs();
+  int get elapsedMilliseconds;
 
   /**
    * Returns the frequency of the elapsed counter in Hz.
    */
-  int frequency();
-
+  int get frequency;
 }
diff --git a/lib/core/string.dart b/lib/core/string.dart
index 7d23302..801e415 100644
--- a/lib/core/string.dart
+++ b/lib/core/string.dart
@@ -64,7 +64,7 @@
   /**
    * Returns whether this string is empty.
    */
-  bool isEmpty();
+  bool get isEmpty;
 
   /**
    * Creates a new string by concatenating this string with [other].
@@ -117,7 +117,7 @@
   /**
    * Returns a list of the scalar character codes of this string.
    */
-  List<int> charCodes();
+  List<int> get charCodes;
 
   /**
    * If this string is not already all lower case, returns a new string
diff --git a/lib/core/string_buffer.dart b/lib/core/string_buffer.dart
index 8095f6a..7530cdb 100644
--- a/lib/core/string_buffer.dart
+++ b/lib/core/string_buffer.dart
@@ -11,7 +11,8 @@
   /**
    * Creates the string buffer with an initial content.
    */
-  factory StringBuffer([Object content = ""]) => new StringBufferImpl(content);
+  factory StringBuffer([Object content = ""])
+    => new _StringBufferImpl(content);
 
   /**
    * Returns the length of the buffer.
@@ -21,7 +22,7 @@
   /**
    * Returns whether the buffer is empty.
    */
-  bool isEmpty();
+  bool get isEmpty;
 
   /**
    * Converts [obj] to a string and adds it to the buffer. Returns [:this:].
@@ -49,3 +50,81 @@
    */
   String toString();
 }
+
+class _StringBufferImpl implements StringBuffer {
+  /**
+   * Creates the string buffer with an initial content.
+   */
+  _StringBufferImpl(Object content) {
+    clear();
+    add(content);
+  }
+
+  /**
+   * Returns the length of the buffer.
+   */
+  int get length {
+    return _length;
+  }
+
+  bool get isEmpty {
+    return _length === 0;
+  }
+
+  /**
+   * Adds [obj] to the buffer. Returns [this].
+   */
+  StringBuffer add(Object obj) {
+    String str = obj.toString();
+    if (str === null || str.isEmpty) {
+      return this;
+    }
+    _buffer.add(str);
+    _length += str.length;
+    return this;
+  }
+
+  /**
+   * Adds all items in [objects] to the buffer. Returns [this].
+   */
+  StringBuffer addAll(Collection objects) {
+    for (Object obj in objects) {
+      add(obj);
+    }
+    return this;
+  }
+
+  /**
+   * Adds the string representation of [charCode] to the buffer.
+   * Returns [this].
+   */
+  StringBuffer addCharCode(int charCode) {
+    return add(new String.fromCharCodes([charCode]));
+  }
+
+  /**
+   * Clears the string buffer. Returns [this].
+   */
+  StringBuffer clear() {
+    _buffer = new List<String>();
+    _length = 0;
+    return this;
+  }
+
+  /**
+   * Returns the contents of buffer as a concatenated string.
+   */
+  String toString() {
+    if (_buffer.length === 0) return "";
+    if (_buffer.length === 1) return _buffer[0];
+    String result = StringImplementation.concatAll(_buffer);
+    _buffer.clear();
+    _buffer.add(result);
+    // Since we track the length at each add operation, there is no
+    // need to update it in this function.
+    return result;
+  }
+
+  List<String> _buffer;
+  int _length;
+}
diff --git a/lib/coreimpl/collections.dart b/lib/coreimpl/collections.dart
index 55e76fa..873e9cd 100644
--- a/lib/coreimpl/collections.dart
+++ b/lib/coreimpl/collections.dart
@@ -59,7 +59,7 @@
   }
 
   static bool isEmpty(Iterable iterable) {
-    return !iterable.iterator().hasNext();
+    return !iterable.iterator().hasNext;
   }
 
   // TODO(jjb): visiting list should be an identityHashSet when it exists
diff --git a/lib/coreimpl/coreimpl.dart b/lib/coreimpl/coreimpl.dart
index d3817e7..7e5b7ec 100644
--- a/lib/coreimpl/coreimpl.dart
+++ b/lib/coreimpl/coreimpl.dart
@@ -6,17 +6,12 @@
 
 #source("arrays.dart");
 #source("collections.dart");
-#source("date.dart");
-#source("dual_pivot_quicksort.dart");
-#source("future_implementation.dart");
 #source("hash_map_set.dart");
 #source("linked_hash_map.dart");
 #source("list.dart");
 #source("maps.dart");
-#source("options.dart");
 #source("queue.dart");
 #source("regexp.dart");
 #source("splay_tree.dart");
 #source("stopwatch_implementation.dart");
 #source("string.dart");
-#source("string_buffer.dart");
diff --git a/lib/coreimpl/corelib_impl_sources.gypi b/lib/coreimpl/corelib_impl_sources.gypi
index 3128f67..0ff6644 100644
--- a/lib/coreimpl/corelib_impl_sources.gypi
+++ b/lib/coreimpl/corelib_impl_sources.gypi
@@ -6,19 +6,14 @@
   'sources': [
     'arrays.dart',
     'collections.dart',
-    'date.dart',
-    'dual_pivot_quicksort.dart',
-    'future_implementation.dart',
     'hash_map_set.dart',
     'linked_hash_map.dart',
     'list.dart',
     'maps.dart',
-    'options.dart',
     'queue.dart',
     'regexp.dart',
     'splay_tree.dart',
     'stopwatch_implementation.dart',
     'string.dart',
-    'string_buffer.dart',
   ],
 }
diff --git a/lib/coreimpl/date.dart b/lib/coreimpl/date.dart
deleted file mode 100644
index 6aba63f..0000000
--- a/lib/coreimpl/date.dart
+++ /dev/null
@@ -1,187 +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.
-
-class DateImplementation implements Date {
-  final int millisecondsSinceEpoch;
-  final bool isUtc;
-
-  factory DateImplementation.fromString(String formattedString) {
-    // Read in (a subset of) ISO 8601.
-    // Examples:
-    //    - "2012-02-27 13:27:00"
-    //    - "2012-02-27 13:27:00.423z"
-    //    - "20120227 13:27:00"
-    //    - "20120227T132700"
-    //    - "20120227"
-    //    - "2012-02-27T14Z"
-    //    - "-123450101 00:00:00 Z"  // In the year -12345.
-    final RegExp re = const RegExp(
-        r'^([+-]?\d?\d\d\d\d)-?(\d\d)-?(\d\d)'  // The day part.
-        r'(?:[ T](\d\d)(?::?(\d\d)(?::?(\d\d)(.\d{1,6})?)?)? ?([zZ])?)?$');
-    Match match = re.firstMatch(formattedString);
-    if (match !== null) {
-      int parseIntOrZero(String matched) {
-        // TODO(floitsch): we should not need to test against the empty string.
-        if (matched === null || matched == "") return 0;
-        return int.parse(matched);
-      }
-
-      double parseDoubleOrZero(String matched) {
-        // TODO(floitsch): we should not need to test against the empty string.
-        if (matched === null || matched == "") return 0.0;
-        return double.parse(matched);
-      }
-
-      int years = int.parse(match[1]);
-      int month = int.parse(match[2]);
-      int day = int.parse(match[3]);
-      int hour = parseIntOrZero(match[4]);
-      int minute = parseIntOrZero(match[5]);
-      int second = parseIntOrZero(match[6]);
-      bool addOneMillisecond = false;
-      int millisecond = (parseDoubleOrZero(match[7]) * 1000).round().toInt();
-      if (millisecond == 1000) {
-        addOneMillisecond = true;
-        millisecond = 999;
-      }
-      // TODO(floitsch): we should not need to test against the empty string.
-      bool isUtc = (match[8] !== null) && (match[8] != "");
-      int millisecondsSinceEpoch = _brokenDownDateToMillisecondsSinceEpoch(
-          years, month, day, hour, minute, second, millisecond, isUtc);
-      if (millisecondsSinceEpoch === null) {
-        throw new ArgumentError(formattedString);
-      }
-      if (addOneMillisecond) millisecondsSinceEpoch++;
-      return new Date.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
-                                                 isUtc: isUtc);
-    } else {
-      throw new ArgumentError(formattedString);
-    }
-  }
-
-  static const int _MAX_MILLISECONDS_SINCE_EPOCH = 8640000000000000;
-
-  DateImplementation.fromMillisecondsSinceEpoch(this.millisecondsSinceEpoch,
-                                                this.isUtc) {
-    if (millisecondsSinceEpoch.abs() > _MAX_MILLISECONDS_SINCE_EPOCH) {
-      throw new ArgumentError(millisecondsSinceEpoch);
-    }
-    if (isUtc === null) throw new ArgumentError(isUtc);
-  }
-
-  bool operator ==(other) {
-    if (!(other is Date)) return false;
-    return (millisecondsSinceEpoch == other.millisecondsSinceEpoch);
-  }
-
-  bool operator <(Date other)
-      => millisecondsSinceEpoch < other.millisecondsSinceEpoch;
-
-  bool operator <=(Date other)
-      => millisecondsSinceEpoch <= other.millisecondsSinceEpoch;
-
-  bool operator >(Date other)
-      => millisecondsSinceEpoch > other.millisecondsSinceEpoch;
-
-  bool operator >=(Date other)
-      => millisecondsSinceEpoch >= other.millisecondsSinceEpoch;
-
-  int compareTo(Date other)
-      => millisecondsSinceEpoch.compareTo(other.millisecondsSinceEpoch);
-
-  int hashCode() => millisecondsSinceEpoch;
-
-  Date toLocal() {
-    if (isUtc) {
-      return new Date.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
-                                                 isUtc: false);
-    }
-    return this;
-  }
-
-  Date toUtc() {
-    if (isUtc) return this;
-    return new Date.fromMillisecondsSinceEpoch(millisecondsSinceEpoch,
-                                               isUtc: true);
-  }
-
-  String toString() {
-    String fourDigits(int n) {
-      int absN = n.abs();
-      String sign = n < 0 ? "-" : "";
-      if (absN >= 1000) return "$n";
-      if (absN >= 100) return "${sign}0$absN";
-      if (absN >= 10) return "${sign}00$absN";
-      return "${sign}000$absN";
-    }
-
-    String threeDigits(int n) {
-      if (n >= 100) return "${n}";
-      if (n >= 10) return "0${n}";
-      return "00${n}";
-    }
-
-    String twoDigits(int n) {
-      if (n >= 10) return "${n}";
-      return "0${n}";
-    }
-
-    String y = fourDigits(year);
-    String m = twoDigits(month);
-    String d = twoDigits(day);
-    String h = twoDigits(hour);
-    String min = twoDigits(minute);
-    String sec = twoDigits(second);
-    String ms = threeDigits(millisecond);
-    if (isUtc) {
-      return "$y-$m-$d $h:$min:$sec.${ms}Z";
-    } else {
-      return "$y-$m-$d $h:$min:$sec.$ms";
-    }
-  }
-
-  /** Returns a new [Date] with the [duration] added to [this]. */
-  Date add(Duration duration) {
-    int ms = millisecondsSinceEpoch;
-    return new Date.fromMillisecondsSinceEpoch(
-        ms + duration.inMilliseconds, isUtc: isUtc);
-  }
-
-  /** Returns a new [Date] with the [duration] subtracted from [this]. */
-  Date subtract(Duration duration) {
-    int ms = millisecondsSinceEpoch;
-    return new Date.fromMillisecondsSinceEpoch(
-        ms - duration.inMilliseconds, isUtc: isUtc);
-  }
-
-  /** Returns a [Duration] with the difference of [this] and [other]. */
-  Duration difference(Date other) {
-    int ms = millisecondsSinceEpoch;
-    int otherMs = other.millisecondsSinceEpoch;
-    return new Duration(milliseconds: ms - otherMs);
-  }
-
-  external DateImplementation(int year,
-                              int month,
-                              int day,
-                              int hour,
-                              int minute,
-                              int second,
-                              int millisecond,
-                              bool isUtc);
-  external DateImplementation.now();
-  external static int _brokenDownDateToMillisecondsSinceEpoch(
-      int year, int month, int day, int hour, int minute, int second,
-      int millisecond, bool isUtc);
-  external String get timeZoneName;
-  external Duration get timeZoneOffset;
-  external int get year;
-  external int get month;
-  external int get day;
-  external int get hour;
-  external int get minute;
-  external int get second;
-  external int get millisecond;
-  external int get weekday;
-}
diff --git a/lib/coreimpl/hash_map_set.dart b/lib/coreimpl/hash_map_set.dart
index cb723a5..d696150 100644
--- a/lib/coreimpl/hash_map_set.dart
+++ b/lib/coreimpl/hash_map_set.dart
@@ -70,7 +70,7 @@
 
   int _probeForAdding(K key) {
     if (key == null) throw const NullPointerException();
-    int hash = _firstProbe(key.hashCode(), _keys.length);
+    int hash = _firstProbe(key.hashCode, _keys.length);
     int numberOfProbes = 1;
     int initialHash = hash;
     // insertionIndex points to a slot where a key was deleted.
@@ -104,7 +104,7 @@
 
   int _probeForLookup(K key) {
     if (key == null) throw const NullPointerException();
-    int hash = _firstProbe(key.hashCode(), _keys.length);
+    int hash = _firstProbe(key.hashCode, _keys.length);
     int numberOfProbes = 1;
     int initialHash = hash;
     while (true) {
@@ -219,7 +219,7 @@
     return null;
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     return _numberOfEntries == 0;
   }
 
@@ -238,7 +238,7 @@
   }
 
 
-  Collection<K> getKeys() {
+  Collection<K> get keys {
     List<K> list = new List<K>(length);
     int i = 0;
     forEach(void _(K key, V value) {
@@ -247,7 +247,7 @@
     return list;
   }
 
-  Collection<V> getValues() {
+  Collection<V> get values {
     List<V> list = new List<V>(length);
     int i = 0;
     forEach(void _(K key, V value) {
@@ -366,17 +366,17 @@
   }
 
   bool every(bool f(E element)) {
-    Collection<E> keys = _backingMap.getKeys();
+    Collection<E> keys = _backingMap.keys;
     return keys.every(f);
   }
 
   bool some(bool f(E element)) {
-    Collection<E> keys = _backingMap.getKeys();
+    Collection<E> keys = _backingMap.keys;
     return keys.some(f);
   }
 
-  bool isEmpty() {
-    return _backingMap.isEmpty();
+  bool get isEmpty {
+    return _backingMap.isEmpty;
   }
 
   int get length {
@@ -406,7 +406,7 @@
     _advance();
   }
 
-  bool hasNext() {
+  bool get hasNext {
     if (_nextValidIndex >= _entries.length) return false;
     if (_entries[_nextValidIndex] === HashMapImplementation._DELETED_KEY) {
       // This happens in case the set was modified in the meantime.
@@ -418,8 +418,8 @@
   }
 
   E next() {
-    if (!hasNext()) {
-      throw const NoMoreElementsException();
+    if (!hasNext) {
+      throw new StateError("No more elements");
     }
     E res = _entries[_nextValidIndex];
     _advance();
diff --git a/lib/coreimpl/linked_hash_map.dart b/lib/coreimpl/linked_hash_map.dart
index 37f3169..3534028 100644
--- a/lib/coreimpl/linked_hash_map.dart
+++ b/lib/coreimpl/linked_hash_map.dart
@@ -65,7 +65,7 @@
     return value;
   }
 
-  Collection<K> getKeys() {
+  Collection<K> get keys {
     List<K> list = new List<K>(length);
     int index = 0;
     _list.forEach(void _(KeyValuePair<K, V> entry) {
@@ -76,7 +76,7 @@
   }
 
 
-  Collection<V> getValues() {
+  Collection<V> get values {
     List<V> list = new List<V>(length);
     int index = 0;
     _list.forEach(void _(KeyValuePair<K, V> entry) {
@@ -106,7 +106,7 @@
     return _map.length;
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     return length == 0;
   }
 
diff --git a/lib/coreimpl/maps.dart b/lib/coreimpl/maps.dart
index d120729..a8b4308 100644
--- a/lib/coreimpl/maps.dart
+++ b/lib/coreimpl/maps.dart
@@ -4,13 +4,13 @@
 
 /*
  * Helper class which implements complex [Map] operations
- * in term of basic ones ([Map.getKeys], [Map.operator []],
+ * in term of basic ones ([Map.keys], [Map.operator []],
  * [Map.operator []=] and [Map.remove].)  Not all methods are
  * necessary to implement each particular operation.
  */
 class Maps {
   static bool containsValue(Map map, value) {
-    for (final v in map.getValues()) {
+    for (final v in map.values) {
       if (value == v) {
         return true;
       }
@@ -19,7 +19,7 @@
   }
 
   static bool containsKey(Map map, key) {
-    for (final k in map.getKeys()) {
+    for (final k in map.keys) {
       if (key == k) {
         return true;
       }
@@ -37,26 +37,26 @@
   }
 
   static clear(Map map) {
-    for (final k in map.getKeys()) {
+    for (final k in map.keys) {
       map.remove(k);
     }
   }
 
   static forEach(Map map, void f(key, value)) {
-    for (final k in map.getKeys()) {
+    for (final k in map.keys) {
       f(k, map[k]);
     }
   }
 
   static Collection getValues(Map map) {
     final result = [];
-    for (final k in map.getKeys()) {
+    for (final k in map.keys) {
       result.add(map[k]);
     }
     return result;
   }
 
-  static int length(Map map) => map.getKeys().length;
+  static int length(Map map) => map.keys.length;
 
   static bool isEmpty(Map map) => length(map) == 0;
 
diff --git a/lib/coreimpl/options.dart b/lib/coreimpl/options.dart
deleted file mode 100644
index 87f70e2..0000000
--- a/lib/coreimpl/options.dart
+++ /dev/null
@@ -1,32 +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.
-
-class RuntimeOptions implements Options {
-  List<String> get arguments {
-    if (_arguments === null) {
-      // On first access make a copy of the native arguments.
-      _arguments = _nativeArguments.getRange(0, _nativeArguments.length);
-    }
-    return _arguments;
-  }
-
-  String get executable {
-    return _nativeExecutable;
-  }
-
-  String get script {
-    return _nativeScript;
-  }
-
-  List<String> _arguments = null;
-
-  // This arguments singleton is written to by the embedder if applicable.
-  static List<String> _nativeArguments = const [];
-
-  // This executable singleton is written to by the embedder if applicable.
-  static String _nativeExecutable = '';
-
-  // This script singleton is written to by the embedder if applicable.
-  static String _nativeScript = '';
-}
diff --git a/lib/coreimpl/queue.dart b/lib/coreimpl/queue.dart
index 150752a7..b56d7d1 100644
--- a/lib/coreimpl/queue.dart
+++ b/lib/coreimpl/queue.dart
@@ -74,7 +74,7 @@
   }
 
   E remove() {
-    throw const EmptyQueueException();
+    throw new StateError("Empty queue");
   }
 
   DoubleLinkedQueueEntry<E> _asNonSentinelEntry() {
@@ -87,7 +87,7 @@
   }
 
   E get element {
-    throw const EmptyQueueException();
+    throw new StateError("Empty queue");
   }
 }
 
@@ -136,11 +136,11 @@
     return _sentinel._next.remove();
   }
 
-  E first() {
+  E get first {
     return _sentinel._next.element;
   }
 
-  E last() {
+  E get last {
     return _sentinel._previous.element;
   }
 
@@ -158,7 +158,7 @@
     return counter;
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     return (_sentinel._next === _sentinel);
   }
 
@@ -249,13 +249,13 @@
     _currentEntry = _sentinel;
   }
 
-  bool hasNext() {
+  bool get hasNext {
     return _currentEntry._next !== _sentinel;
   }
 
   E next() {
-    if (!hasNext()) {
-      throw const NoMoreElementsException();
+    if (!hasNext) {
+      throw new StateError("No more elements");
     }
     _currentEntry = _currentEntry._next;
     return _currentEntry.element;
diff --git a/lib/coreimpl/splay_tree.dart b/lib/coreimpl/splay_tree.dart
index d5dcef5..974c2bc 100644
--- a/lib/coreimpl/splay_tree.dart
+++ b/lib/coreimpl/splay_tree.dart
@@ -51,7 +51,7 @@
    * "Self-adjusting Binary Search Trees" by Sleator and Tarjan.
    */
   void splay_(K key) {
-    if (isEmpty()) return;
+    if (isEmpty) return;
 
     // The right child of the dummy node will hold
     // the L tree of the algorithm.  The left child of the dummy node
@@ -106,7 +106,7 @@
   }
 
   V operator [](K key) {
-    if (!isEmpty()) {
+    if (!isEmpty) {
       splay_(key);
       if (_root.key.compareTo(key) == 0) return _root.value;
     }
@@ -114,7 +114,7 @@
   }
 
   V remove(K key) {
-    if (isEmpty()) return null;
+    if (isEmpty) return null;
     splay_(key);
     if (_root.key.compareTo(key) != 0) return null;
     V value = _root.value;
@@ -136,7 +136,7 @@
   }
 
   void operator []=(K key, V value) {
-    if (isEmpty()) {
+    if (isEmpty) {
       _count++;
       _root = new SplayTreeNode(key, value);
       return;
@@ -170,7 +170,7 @@
     return value;
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     // assert(!((_root === null) && (_count != 0)));
     // assert(!((_count == 0) && (_root !== null)));
     return (_root === null);
@@ -186,7 +186,7 @@
       } else {
         f(current.key, current.value);
         while (current.right === null) {
-          if (list.isEmpty()) return;
+          if (list.isEmpty) return;
           current = list.removeLast();
           f(current.key, current.value);
         }
@@ -205,7 +205,7 @@
   }
 
   bool containsKey(K key) {
-    if (!isEmpty()) {
+    if (!isEmpty) {
       splay_(key);
       if (_root.key.compareTo(key) == 0) return true;
     }
@@ -222,13 +222,13 @@
     return visit(_root);
   }
 
-  Collection<K> getKeys() {
+  Collection<K> get keys {
     List<K> list = new List<K>();
     forEach((K k, V v) { list.add(k); });
     return list;
   }
 
-  Collection<V> getValues() {
+  Collection<V> get values {
     List<V> list = new List<V>();
     forEach((K k, V v) { list.add(v); });
     return list;
diff --git a/lib/coreimpl/stopwatch_implementation.dart b/lib/coreimpl/stopwatch_implementation.dart
index f22f210..30b4ca2 100644
--- a/lib/coreimpl/stopwatch_implementation.dart
+++ b/lib/coreimpl/stopwatch_implementation.dart
@@ -50,22 +50,22 @@
     }
   }
 
-  int elapsed() {
+  int get elapsedTicks {
     if (_start === null) {
       return 0;
     }
     return (_stop === null) ? (_now() - _start) : (_stop - _start);
   }
 
-  int elapsedInUs() {
-    return (elapsed() * 1000000) ~/ frequency();
+  int get elapsedMicroseconds {
+    return (elapsedTicks * 1000000) ~/ frequency;
   }
 
-  int elapsedInMs() {
-    return (elapsed() * 1000) ~/ frequency();
+  int get elapsedMilliseconds {
+    return (elapsedTicks * 1000) ~/ frequency;
   }
 
-  int frequency() => _frequency();
+  int get frequency => _frequency();
 
   external static int _frequency();
   external static int _now();
diff --git a/lib/coreimpl/string_buffer.dart b/lib/coreimpl/string_buffer.dart
deleted file mode 100644
index ceb5935..0000000
--- a/lib/coreimpl/string_buffer.dart
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * The StringBuffer class is useful for concatenating strings
- * efficiently. Only on a call to [toString] are the strings
- * concatenated to a single String.
- */
-class StringBufferImpl implements StringBuffer {
-  /**
-   * Creates the string buffer with an initial content.
-   */
-  StringBufferImpl(Object content) {
-    clear();
-    add(content);
-  }
-
-  /**
-   * Returns the length of the buffer.
-   */
-  int get length {
-    return _length;
-  }
-
-  bool isEmpty() {
-    return _length === 0;
-  }
-
-  /**
-   * Adds [obj] to the buffer. Returns [this].
-   */
-  StringBuffer add(Object obj) {
-    String str = obj.toString();
-    if (str === null || str.isEmpty()) {
-      return this;
-    }
-    _buffer.add(str);
-    _length += str.length;
-    return this;
-  }
-
-  /**
-   * Adds all items in [objects] to the buffer. Returns [this].
-   */
-  StringBuffer addAll(Collection objects) {
-    for (Object obj in objects) {
-      add(obj);
-    }
-    return this;
-  }
-
-  /**
-   * Adds the string representation of [charCode] to the buffer.
-   * Returns [this].
-   */
-  StringBuffer addCharCode(int charCode) {
-    return add(new String.fromCharCodes([charCode]));
-  }
-
-  /**
-   * Clears the string buffer. Returns [this].
-   */
-  StringBuffer clear() {
-    _buffer = new List<String>();
-    _length = 0;
-    return this;
-  }
-
-  /**
-   * Returns the contents of buffer as a concatenated string.
-   */
-  String toString() {
-    if (_buffer.length === 0) return "";
-    if (_buffer.length === 1) return _buffer[0];
-    String result = StringImplementation.concatAll(_buffer);
-    _buffer.clear();
-    _buffer.add(result);
-    // Since we track the length at each add operation, there is no
-    // need to update it in this function.
-    return result;
-  }
-
-  List<String> _buffer;
-  int _length;
-}
diff --git a/lib/html/dart2js/html_dart2js.dart b/lib/html/dart2js/html_dart2js.dart
index 537402a..738c5d4 100644
--- a/lib/html/dart2js/html_dart2js.dart
+++ b/lib/html/dart2js/html_dart2js.dart
@@ -1,7 +1,7 @@
-#library('dart:html');
+library html;
 
-#import('dart:isolate');
-#import('dart:json');
+import 'dart:isolate';
+import 'dart:json';
 // 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.
@@ -15,12 +15,12 @@
 
 
 
-LocalWindow get window() => JS('LocalWindow', 'window');
-_LocalWindowImpl get _window() => JS('_LocalWindowImpl', 'window');
+LocalWindow get window => JS('LocalWindow', 'window');
+_LocalWindowImpl get _window => JS('_LocalWindowImpl', 'window');
 
-Document get document() => JS('Document', 'document');
+Document get document => JS('Document', 'document');
 
-_DocumentImpl get _document() => JS('_DocumentImpl', 'document');
+_DocumentImpl get _document => JS('_DocumentImpl', 'document');
 
 Element query(String selector) => _document.query(selector);
 List<Element> queryAll(String selector) => _document.queryAll(selector);
@@ -135,7 +135,7 @@
   String name;
 
   /** @domName HTMLAnchorElement.origin */
-  abstract String get origin;
+  String get origin;
 
   /** @domName HTMLAnchorElement.pathname */
   String pathname;
@@ -237,31 +237,31 @@
   static const int FILL_NONE = 0;
 
   /** @domName WebKitAnimation.delay */
-  abstract num get delay;
+  num get delay;
 
   /** @domName WebKitAnimation.direction */
-  abstract int get direction;
+  int get direction;
 
   /** @domName WebKitAnimation.duration */
-  abstract num get duration;
+  num get duration;
 
   /** @domName WebKitAnimation.elapsedTime */
   num elapsedTime;
 
   /** @domName WebKitAnimation.ended */
-  abstract bool get ended;
+  bool get ended;
 
   /** @domName WebKitAnimation.fillMode */
-  abstract int get fillMode;
+  int get fillMode;
 
   /** @domName WebKitAnimation.iterationCount */
-  abstract int get iterationCount;
+  int get iterationCount;
 
   /** @domName WebKitAnimation.name */
-  abstract String get name;
+  String get name;
 
   /** @domName WebKitAnimation.paused */
-  abstract bool get paused;
+  bool get paused;
 
   /** @domName WebKitAnimation.pause */
   void pause();
@@ -279,10 +279,10 @@
 abstract class AnimationEvent implements Event {
 
   /** @domName WebKitAnimationEvent.animationName */
-  abstract String get animationName;
+  String get animationName;
 
   /** @domName WebKitAnimationEvent.elapsedTime */
-  abstract num get elapsedTime;
+  num get elapsedTime;
 }
 
 class _AnimationEventImpl extends _EventImpl implements AnimationEvent native "*WebKitAnimationEvent" {
@@ -401,13 +401,13 @@
   String coords;
 
   /** @domName HTMLAreaElement.hash */
-  abstract String get hash;
+  String get hash;
 
   /** @domName HTMLAreaElement.host */
-  abstract String get host;
+  String get host;
 
   /** @domName HTMLAreaElement.hostname */
-  abstract String get hostname;
+  String get hostname;
 
   /** @domName HTMLAreaElement.href */
   String href;
@@ -416,19 +416,19 @@
   bool noHref;
 
   /** @domName HTMLAreaElement.pathname */
-  abstract String get pathname;
+  String get pathname;
 
   /** @domName HTMLAreaElement.ping */
   String ping;
 
   /** @domName HTMLAreaElement.port */
-  abstract String get port;
+  String get port;
 
   /** @domName HTMLAreaElement.protocol */
-  abstract String get protocol;
+  String get protocol;
 
   /** @domName HTMLAreaElement.search */
-  abstract String get search;
+  String get search;
 
   /** @domName HTMLAreaElement.shape */
   String shape;
@@ -479,7 +479,7 @@
   factory ArrayBuffer(int length) => _ArrayBufferFactoryProvider.createArrayBuffer(length);
 
   /** @domName ArrayBuffer.byteLength */
-  abstract int get byteLength;
+  int get byteLength;
 
   /** @domName ArrayBuffer.slice */
   ArrayBuffer slice(int begin, [int end]);
@@ -501,13 +501,13 @@
 abstract class ArrayBufferView {
 
   /** @domName ArrayBufferView.buffer */
-  abstract ArrayBuffer get buffer;
+  ArrayBuffer get buffer;
 
   /** @domName ArrayBufferView.byteLength */
-  abstract int get byteLength;
+  int get byteLength;
 
   /** @domName ArrayBufferView.byteOffset */
-  abstract int get byteOffset;
+  int get byteOffset;
 }
 
 class _ArrayBufferViewImpl implements ArrayBufferView native "*ArrayBufferView" {
@@ -528,16 +528,16 @@
 abstract class Attr implements Node {
 
   /** @domName Attr.isId */
-  abstract bool get isId;
+  bool get isId;
 
   /** @domName Attr.name */
-  abstract String get name;
+  String get name;
 
   /** @domName Attr.ownerElement */
-  abstract Element get ownerElement;
+  Element get ownerElement;
 
   /** @domName Attr.specified */
-  abstract bool get specified;
+  bool get specified;
 
   /** @domName Attr.value */
   String value;
@@ -565,19 +565,19 @@
 abstract class AudioBuffer {
 
   /** @domName AudioBuffer.duration */
-  abstract num get duration;
+  num get duration;
 
   /** @domName AudioBuffer.gain */
   num gain;
 
   /** @domName AudioBuffer.length */
-  abstract int get length;
+  int get length;
 
   /** @domName AudioBuffer.numberOfChannels */
-  abstract int get numberOfChannels;
+  int get numberOfChannels;
 
   /** @domName AudioBuffer.sampleRate */
-  abstract num get sampleRate;
+  num get sampleRate;
 
   /** @domName AudioBuffer.getChannelData */
   Float32Array getChannelData(int channelIndex);
@@ -588,6 +588,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void AudioBufferCallback(AudioBuffer audioBuffer);
 
 class _AudioBufferImpl implements AudioBuffer native "*AudioBuffer" {
@@ -625,7 +626,7 @@
   AudioBuffer buffer;
 
   /** @domName AudioBufferSourceNode.gain */
-  abstract AudioGain get gain;
+  AudioGain get gain;
 
   /** @domName AudioBufferSourceNode.loop */
   bool loop;
@@ -634,10 +635,10 @@
   bool looping;
 
   /** @domName AudioBufferSourceNode.playbackRate */
-  abstract AudioParam get playbackRate;
+  AudioParam get playbackRate;
 
   /** @domName AudioBufferSourceNode.playbackState */
-  abstract int get playbackState;
+  int get playbackState;
 
   /** @domName AudioBufferSourceNode.start */
   void start(num when, [num grainOffset, num grainDuration]);
@@ -724,6 +725,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName AudioContext
 abstract class AudioContext implements EventTarget {
   factory AudioContext() => _AudioContextFactoryProvider.createAudioContext();
@@ -734,19 +736,19 @@
   AudioContextEvents get on;
 
   /** @domName AudioContext.activeSourceCount */
-  abstract int get activeSourceCount;
+  int get activeSourceCount;
 
   /** @domName AudioContext.currentTime */
-  abstract num get currentTime;
+  num get currentTime;
 
   /** @domName AudioContext.destination */
-  abstract AudioDestinationNode get destination;
+  AudioDestinationNode get destination;
 
   /** @domName AudioContext.listener */
-  abstract AudioListener get listener;
+  AudioListener get listener;
 
   /** @domName AudioContext.sampleRate */
-  abstract num get sampleRate;
+  num get sampleRate;
 
   /** @domName AudioContext.createAnalyser */
   RealtimeAnalyserNode createAnalyser();
@@ -880,7 +882,7 @@
 abstract class AudioDestinationNode implements AudioNode {
 
   /** @domName AudioDestinationNode.numberOfChannels */
-  abstract int get numberOfChannels;
+  int get numberOfChannels;
 }
 
 class _AudioDestinationNodeImpl extends _AudioNodeImpl implements AudioDestinationNode native "*AudioDestinationNode" {
@@ -928,7 +930,7 @@
 abstract class AudioGainNode implements AudioNode {
 
   /** @domName AudioGainNode.gain */
-  abstract AudioGain get gain;
+  AudioGain get gain;
 }
 
 class _AudioGainNodeImpl extends _AudioNodeImpl implements AudioGainNode native "*AudioGainNode" {
@@ -982,13 +984,13 @@
 abstract class AudioNode {
 
   /** @domName AudioNode.context */
-  abstract AudioContext get context;
+  AudioContext get context;
 
   /** @domName AudioNode.numberOfInputs */
-  abstract int get numberOfInputs;
+  int get numberOfInputs;
 
   /** @domName AudioNode.numberOfOutputs */
-  abstract int get numberOfOutputs;
+  int get numberOfOutputs;
 
   /** @domName AudioNode.connect */
   void connect(destination, int output, [int input]);
@@ -1031,7 +1033,7 @@
   static const int SOUNDFIELD = 2;
 
   /** @domName AudioPannerNode.coneGain */
-  abstract AudioGain get coneGain;
+  AudioGain get coneGain;
 
   /** @domName AudioPannerNode.coneInnerAngle */
   num coneInnerAngle;
@@ -1043,7 +1045,7 @@
   num coneOuterGain;
 
   /** @domName AudioPannerNode.distanceGain */
-  abstract AudioGain get distanceGain;
+  AudioGain get distanceGain;
 
   /** @domName AudioPannerNode.distanceModel */
   int distanceModel;
@@ -1108,19 +1110,19 @@
 abstract class AudioParam {
 
   /** @domName AudioParam.defaultValue */
-  abstract num get defaultValue;
+  num get defaultValue;
 
   /** @domName AudioParam.maxValue */
-  abstract num get maxValue;
+  num get maxValue;
 
   /** @domName AudioParam.minValue */
-  abstract num get minValue;
+  num get minValue;
 
   /** @domName AudioParam.name */
-  abstract String get name;
+  String get name;
 
   /** @domName AudioParam.units */
-  abstract int get units;
+  int get units;
 
   /** @domName AudioParam.value */
   num value;
@@ -1180,10 +1182,10 @@
 abstract class AudioProcessingEvent implements Event {
 
   /** @domName AudioProcessingEvent.inputBuffer */
-  abstract AudioBuffer get inputBuffer;
+  AudioBuffer get inputBuffer;
 
   /** @domName AudioProcessingEvent.outputBuffer */
-  abstract AudioBuffer get outputBuffer;
+  AudioBuffer get outputBuffer;
 }
 
 class _AudioProcessingEventImpl extends _EventImpl implements AudioProcessingEvent native "*AudioProcessingEvent" {
@@ -1233,7 +1235,7 @@
 abstract class BarInfo {
 
   /** @domName BarInfo.visible */
-  abstract bool get visible;
+  bool get visible;
 }
 
 class _BarInfoImpl implements BarInfo native "*BarInfo" {
@@ -1306,16 +1308,16 @@
   BatteryManagerEvents get on;
 
   /** @domName BatteryManager.charging */
-  abstract bool get charging;
+  bool get charging;
 
   /** @domName BatteryManager.chargingTime */
-  abstract num get chargingTime;
+  num get chargingTime;
 
   /** @domName BatteryManager.dischargingTime */
-  abstract num get dischargingTime;
+  num get dischargingTime;
 
   /** @domName BatteryManager.level */
-  abstract num get level;
+  num get level;
 
   /** @domName BatteryManager.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -1379,7 +1381,7 @@
 abstract class BeforeLoadEvent implements Event {
 
   /** @domName BeforeLoadEvent.url */
-  abstract String get url;
+  String get url;
 }
 
 class _BeforeLoadEventImpl extends _EventImpl implements BeforeLoadEvent native "*BeforeLoadEvent" {
@@ -1412,13 +1414,13 @@
   static const int PEAKING = 5;
 
   /** @domName BiquadFilterNode.Q */
-  abstract AudioParam get Q;
+  AudioParam get Q;
 
   /** @domName BiquadFilterNode.frequency */
-  abstract AudioParam get frequency;
+  AudioParam get frequency;
 
   /** @domName BiquadFilterNode.gain */
-  abstract AudioParam get gain;
+  AudioParam get gain;
 
   /** @domName BiquadFilterNode.type */
   int type;
@@ -1459,10 +1461,10 @@
   }
 
   /** @domName Blob.size */
-  abstract int get size;
+  int get size;
 
   /** @domName Blob.type */
-  abstract String get type;
+  String get type;
 
   /** @domName Blob.slice */
   Blob slice([int start, int end, String contentType]);
@@ -1600,7 +1602,7 @@
   bool disabled;
 
   /** @domName HTMLButtonElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLButtonElement.formAction */
   String formAction;
@@ -1618,7 +1620,7 @@
   String formTarget;
 
   /** @domName HTMLButtonElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLButtonElement.name */
   String name;
@@ -1627,16 +1629,16 @@
   String type;
 
   /** @domName HTMLButtonElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLButtonElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLButtonElement.value */
   String value;
 
   /** @domName HTMLButtonElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLButtonElement.checkValidity */
   bool checkValidity();
@@ -1720,7 +1722,7 @@
 abstract class CSSFontFaceRule implements CSSRule {
 
   /** @domName CSSFontFaceRule.style */
-  abstract CSSStyleDeclaration get style;
+  CSSStyleDeclaration get style;
 }
 
 class _CSSFontFaceRuleImpl extends _CSSRuleImpl implements CSSFontFaceRule native "*CSSFontFaceRule" {
@@ -1737,13 +1739,13 @@
 abstract class CSSImportRule implements CSSRule {
 
   /** @domName CSSImportRule.href */
-  abstract String get href;
+  String get href;
 
   /** @domName CSSImportRule.media */
-  abstract MediaList get media;
+  MediaList get media;
 
   /** @domName CSSImportRule.styleSheet */
-  abstract CSSStyleSheet get styleSheet;
+  CSSStyleSheet get styleSheet;
 }
 
 class _CSSImportRuleImpl extends _CSSRuleImpl implements CSSImportRule native "*CSSImportRule" {
@@ -1767,7 +1769,7 @@
   String keyText;
 
   /** @domName WebKitCSSKeyframeRule.style */
-  abstract CSSStyleDeclaration get style;
+  CSSStyleDeclaration get style;
 }
 
 class _CSSKeyframeRuleImpl extends _CSSRuleImpl implements CSSKeyframeRule native "*WebKitCSSKeyframeRule" {
@@ -1786,7 +1788,7 @@
 abstract class CSSKeyframesRule implements CSSRule {
 
   /** @domName WebKitCSSKeyframesRule.cssRules */
-  abstract List<CSSRule> get cssRules;
+  List<CSSRule> get cssRules;
 
   /** @domName WebKitCSSKeyframesRule.name */
   String name;
@@ -2002,10 +2004,10 @@
 abstract class CSSMediaRule implements CSSRule {
 
   /** @domName CSSMediaRule.cssRules */
-  abstract List<CSSRule> get cssRules;
+  List<CSSRule> get cssRules;
 
   /** @domName CSSMediaRule.media */
-  abstract MediaList get media;
+  MediaList get media;
 
   /** @domName CSSMediaRule.deleteRule */
   void deleteRule(int index);
@@ -2037,7 +2039,7 @@
   String selectorText;
 
   /** @domName CSSPageRule.style */
-  abstract CSSStyleDeclaration get style;
+  CSSStyleDeclaration get style;
 }
 
 class _CSSPageRuleImpl extends _CSSRuleImpl implements CSSPageRule native "*CSSPageRule" {
@@ -2114,7 +2116,7 @@
   static const int CSS_VW = 26;
 
   /** @domName CSSPrimitiveValue.primitiveType */
-  abstract int get primitiveType;
+  int get primitiveType;
 
   /** @domName CSSPrimitiveValue.getCounterValue */
   Counter getCounterValue();
@@ -2187,13 +2189,13 @@
   String cssText;
 
   /** @domName CSSRule.parentRule */
-  abstract CSSRule get parentRule;
+  CSSRule get parentRule;
 
   /** @domName CSSRule.parentStyleSheet */
-  abstract CSSStyleSheet get parentStyleSheet;
+  CSSStyleSheet get parentStyleSheet;
 
   /** @domName CSSRule.type */
-  abstract int get type;
+  int get type;
 }
 
 class _CSSRuleImpl implements CSSRule native "*CSSRule" {
@@ -2214,7 +2216,7 @@
   _CSSRuleImpl operator[](int index) => JS("_CSSRuleImpl", "#[#]", this, index);
 
   void operator[]=(int index, _CSSRuleImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<CSSRule> mixins.
   // CSSRule is the element type.
@@ -2231,15 +2233,15 @@
   // From Collection<CSSRule>:
 
   void add(CSSRule value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(CSSRule value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<CSSRule> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(CSSRule element) => _Collections.contains(this, element);
@@ -2255,38 +2257,38 @@
 
   bool some(bool f(CSSRule element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<CSSRule>:
 
   void sort([Comparator<CSSRule> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(CSSRule element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(CSSRule element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  CSSRule last() => this[length - 1];
+  CSSRule get last => this[length - 1];
 
   CSSRule removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<CSSRule> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [CSSRule initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<CSSRule> getRange(int start, int rangeLength) =>
@@ -2302,6 +2304,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName CSSStyleDeclaration
 abstract class CSSStyleDeclaration  {
   factory CSSStyleDeclaration() => _CSSStyleDeclarationFactoryProvider.createCSSStyleDeclaration();
@@ -2312,10 +2315,10 @@
   String cssText;
 
   /** @domName CSSStyleDeclaration.length */
-  abstract int get length;
+  int get length;
 
   /** @domName CSSStyleDeclaration.parentRule */
-  abstract CSSRule get parentRule;
+  CSSRule get parentRule;
 
   /** @domName CSSStyleDeclaration.getPropertyCSSValue */
   CSSValue getPropertyCSSValue(String propertyName);
@@ -4191,7 +4194,7 @@
 String _cachedBrowserPrefix;
 
 String get _browserPrefix {
-  if (_cachedBrowserPrefix === null) {
+  if (_cachedBrowserPrefix == null) {
     if (_Device.isFirefox) {
       _cachedBrowserPrefix = '-moz-';
     } else if (_Device.isIE) {
@@ -7019,7 +7022,7 @@
   String selectorText;
 
   /** @domName CSSStyleRule.style */
-  abstract CSSStyleDeclaration get style;
+  CSSStyleDeclaration get style;
 }
 
 class _CSSStyleRuleImpl extends _CSSRuleImpl implements CSSStyleRule native "*CSSStyleRule" {
@@ -7038,13 +7041,13 @@
 abstract class CSSStyleSheet implements StyleSheet {
 
   /** @domName CSSStyleSheet.cssRules */
-  abstract List<CSSRule> get cssRules;
+  List<CSSRule> get cssRules;
 
   /** @domName CSSStyleSheet.ownerRule */
-  abstract CSSRule get ownerRule;
+  CSSRule get ownerRule;
 
   /** @domName CSSStyleSheet.rules */
-  abstract List<CSSRule> get rules;
+  List<CSSRule> get rules;
 
   /** @domName CSSStyleSheet.addRule */
   int addRule(String selector, String style, [int index]);
@@ -7127,7 +7130,7 @@
   static const int CSS_TRANSLATEZ = 12;
 
   /** @domName WebKitCSSTransformValue.operationType */
-  abstract int get operationType;
+  int get operationType;
 }
 
 class _CSSTransformValueImpl extends _CSSValueListImpl implements CSSTransformValue native "*WebKitCSSTransformValue" {
@@ -7167,7 +7170,7 @@
   String cssText;
 
   /** @domName CSSValue.cssValueType */
-  abstract int get cssValueType;
+  int get cssValueType;
 }
 
 class _CSSValueImpl implements CSSValue native "*CSSValue" {
@@ -7184,7 +7187,7 @@
   _CSSValueImpl operator[](int index) => JS("_CSSValueImpl", "#[#]", this, index);
 
   void operator[]=(int index, _CSSValueImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<CSSValue> mixins.
   // CSSValue is the element type.
@@ -7201,15 +7204,15 @@
   // From Collection<CSSValue>:
 
   void add(CSSValue value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(CSSValue value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<CSSValue> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(CSSValue element) => _Collections.contains(this, element);
@@ -7225,38 +7228,38 @@
 
   bool some(bool f(CSSValue element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<CSSValue>:
 
   void sort([Comparator<CSSValue> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(CSSValue element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(CSSValue element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  CSSValue last() => this[length - 1];
+  CSSValue get last => this[length - 1];
 
   CSSValue removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<CSSValue> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [CSSValue initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<CSSValue> getRange(int start, int rangeLength) =>
@@ -7272,6 +7275,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName HTMLCanvasElement
 abstract class CanvasElement implements Element {
 
@@ -7355,7 +7359,7 @@
 abstract class CanvasRenderingContext {
 
   /** @domName CanvasRenderingContext.canvas */
-  abstract CanvasElement get canvas;
+  CanvasElement get canvas;
 }
 // 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
@@ -7363,11 +7367,12 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName CanvasRenderingContext2D
 abstract class CanvasRenderingContext2D implements CanvasRenderingContext {
 
   /** @domName CanvasRenderingContext2D.fillStyle */
-  Dynamic fillStyle;
+  dynamic fillStyle;
 
   /** @domName CanvasRenderingContext2D.font */
   String font;
@@ -7406,7 +7411,7 @@
   num shadowOffsetY;
 
   /** @domName CanvasRenderingContext2D.strokeStyle */
-  Dynamic strokeStyle;
+  dynamic strokeStyle;
 
   /** @domName CanvasRenderingContext2D.textAlign */
   String textAlign;
@@ -7415,7 +7420,7 @@
   String textBaseline;
 
   /** @domName CanvasRenderingContext2D.webkitBackingStorePixelRatio */
-  abstract num get webkitBackingStorePixelRatio;
+  num get webkitBackingStorePixelRatio;
 
   /** @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled */
   bool webkitImageSmoothingEnabled;
@@ -7599,7 +7604,7 @@
 
 class _CanvasRenderingContext2DImpl extends _CanvasRenderingContextImpl implements CanvasRenderingContext2D native "*CanvasRenderingContext2D" {
 
-  Dynamic fillStyle;
+  dynamic fillStyle;
 
   String font;
 
@@ -7625,7 +7630,7 @@
 
   num shadowOffsetY;
 
-  Dynamic strokeStyle;
+  dynamic strokeStyle;
 
   String textAlign;
 
@@ -7656,13 +7661,13 @@
   void closePath() native;
 
   ImageData createImageData(imagedata_OR_sw, [sh]) {
-    if ((imagedata_OR_sw is ImageData || imagedata_OR_sw === null) &&
+    if ((imagedata_OR_sw is ImageData || imagedata_OR_sw == null) &&
         !?sh) {
       var imagedata_1 = _convertDartToNative_ImageData(imagedata_OR_sw);
       return _convertNativeToDart_ImageData(_createImageData_1(imagedata_1));
     }
-    if ((imagedata_OR_sw is num || imagedata_OR_sw === null) &&
-        (sh is num || sh === null)) {
+    if ((imagedata_OR_sw is num || imagedata_OR_sw == null) &&
+        (sh is num || sh == null)) {
       return _convertNativeToDart_ImageData(_createImageData_2(imagedata_OR_sw, sh));
     }
     throw const Exception("Incorrect number or type of arguments");
@@ -7710,10 +7715,10 @@
       _putImageData_1(imagedata_1, dx, dy);
       return;
     }
-    if ((dirtyX is num || dirtyX === null) &&
-        (dirtyY is num || dirtyY === null) &&
-        (dirtyWidth is num || dirtyWidth === null) &&
-        (dirtyHeight is num || dirtyHeight === null)) {
+    if ((dirtyX is num || dirtyX == null) &&
+        (dirtyY is num || dirtyY == null) &&
+        (dirtyWidth is num || dirtyWidth == null) &&
+        (dirtyHeight is num || dirtyHeight == null)) {
       var imagedata_2 = _convertDartToNative_ImageData(imagedata);
       _putImageData_2(imagedata_2, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
       return;
@@ -7777,10 +7782,10 @@
       _webkitPutImageDataHD_1(imagedata_1, dx, dy);
       return;
     }
-    if ((dirtyX is num || dirtyX === null) &&
-        (dirtyY is num || dirtyY === null) &&
-        (dirtyWidth is num || dirtyWidth === null) &&
-        (dirtyHeight is num || dirtyHeight === null)) {
+    if ((dirtyX is num || dirtyX == null) &&
+        (dirtyY is num || dirtyY == null) &&
+        (dirtyWidth is num || dirtyWidth == null) &&
+        (dirtyHeight is num || dirtyHeight == null)) {
       var imagedata_2 = _convertDartToNative_ImageData(imagedata);
       _webkitPutImageDataHD_2(imagedata_2, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
       return;
@@ -7825,7 +7830,7 @@
   String data;
 
   /** @domName CharacterData.length */
-  abstract int get length;
+  int get length;
 
   /** @domName CharacterData.appendData */
   void appendData(String data);
@@ -7874,22 +7879,22 @@
 abstract class ClientRect {
 
   /** @domName ClientRect.bottom */
-  abstract num get bottom;
+  num get bottom;
 
   /** @domName ClientRect.height */
-  abstract num get height;
+  num get height;
 
   /** @domName ClientRect.left */
-  abstract num get left;
+  num get left;
 
   /** @domName ClientRect.right */
-  abstract num get right;
+  num get right;
 
   /** @domName ClientRect.top */
-  abstract num get top;
+  num get top;
 
   /** @domName ClientRect.width */
-  abstract num get width;
+  num get width;
 }
 
 class _ClientRectImpl implements ClientRect native "*ClientRect" {
@@ -7914,7 +7919,7 @@
   _ClientRectImpl operator[](int index) => JS("_ClientRectImpl", "#[#]", this, index);
 
   void operator[]=(int index, _ClientRectImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<ClientRect> mixins.
   // ClientRect is the element type.
@@ -7931,15 +7936,15 @@
   // From Collection<ClientRect>:
 
   void add(ClientRect value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(ClientRect value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<ClientRect> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(ClientRect element) => _Collections.contains(this, element);
@@ -7955,38 +7960,38 @@
 
   bool some(bool f(ClientRect element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<ClientRect>:
 
   void sort([Comparator<ClientRect> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(ClientRect element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(ClientRect element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  ClientRect last() => this[length - 1];
+  ClientRect get last => this[length - 1];
 
   ClientRect removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<ClientRect> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [ClientRect initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<ClientRect> getRange(int start, int rangeLength) =>
@@ -8012,13 +8017,13 @@
   String effectAllowed;
 
   /** @domName Clipboard.files */
-  abstract List<File> get files;
+  List<File> get files;
 
   /** @domName Clipboard.items */
-  abstract DataTransferItemList get items;
+  DataTransferItemList get items;
 
   /** @domName Clipboard.types */
-  abstract List get types;
+  List get types;
 
   /** @domName Clipboard.clearData */
   void clearData([String type]);
@@ -8063,13 +8068,13 @@
 abstract class CloseEvent implements Event {
 
   /** @domName CloseEvent.code */
-  abstract int get code;
+  int get code;
 
   /** @domName CloseEvent.reason */
-  abstract String get reason;
+  String get reason;
 
   /** @domName CloseEvent.wasClean */
-  abstract bool get wasClean;
+  bool get wasClean;
 }
 
 class _CloseEventImpl extends _EventImpl implements CloseEvent native "*CloseEvent" {
@@ -8102,7 +8107,7 @@
 abstract class CompositionEvent implements UIEvent {
 
   /** @domName CompositionEvent.data */
-  abstract String get data;
+  String get data;
 
   /** @domName CompositionEvent.initCompositionEvent */
   void initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg);
@@ -8124,10 +8129,10 @@
 abstract class Console {
 
   /** @domName Console.memory */
-  abstract MemoryInfo get memory;
+  MemoryInfo get memory;
 
   /** @domName Console.profiles */
-  abstract List<ScriptProfile> get profiles;
+  List<ScriptProfile> get profiles;
 
   /** @domName Console.assertCondition */
   void assertCondition(bool condition, Object arg);
@@ -8249,12 +8254,17 @@
 
   factory ContentElement() => _Elements.createContentElement();
 
+  /** @domName HTMLContentElement.resetStyleInheritance */
+  bool resetStyleInheritance;
+
   /** @domName HTMLContentElement.select */
   String select;
 }
 
 class _ContentElementImpl extends _ElementImpl implements ContentElement native "*HTMLContentElement" {
 
+  bool resetStyleInheritance;
+
   String select;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8289,25 +8299,25 @@
 abstract class Coordinates {
 
   /** @domName Coordinates.accuracy */
-  abstract num get accuracy;
+  num get accuracy;
 
   /** @domName Coordinates.altitude */
-  abstract num get altitude;
+  num get altitude;
 
   /** @domName Coordinates.altitudeAccuracy */
-  abstract num get altitudeAccuracy;
+  num get altitudeAccuracy;
 
   /** @domName Coordinates.heading */
-  abstract num get heading;
+  num get heading;
 
   /** @domName Coordinates.latitude */
-  abstract num get latitude;
+  num get latitude;
 
   /** @domName Coordinates.longitude */
-  abstract num get longitude;
+  num get longitude;
 
   /** @domName Coordinates.speed */
-  abstract num get speed;
+  num get speed;
 }
 
 class _CoordinatesImpl implements Coordinates native "*Coordinates" {
@@ -8336,13 +8346,13 @@
 abstract class Counter {
 
   /** @domName Counter.identifier */
-  abstract String get identifier;
+  String get identifier;
 
   /** @domName Counter.listStyle */
-  abstract String get listStyle;
+  String get listStyle;
 
   /** @domName Counter.separator */
-  abstract String get separator;
+  String get separator;
 }
 
 class _CounterImpl implements Counter native "*Counter" {
@@ -8376,6 +8386,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName CustomEvent
 abstract class CustomEvent implements Event {
 
@@ -8385,7 +8396,7 @@
 
 
   /** @domName CustomEvent.detail */
-  abstract Object get detail;
+  Object get detail;
 
   /** @domName CustomEvent.initCustomEvent */
   void $dom_initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg);
@@ -8443,7 +8454,7 @@
   static const int UPDATEREADY = 4;
 
   /** @domName DOMApplicationCache.status */
-  abstract int get status;
+  int get status;
 
   /** @domName DOMApplicationCache.abort */
   void abort();
@@ -8532,7 +8543,7 @@
 abstract class DOMError {
 
   /** @domName DOMError.name */
-  abstract String get name;
+  String get name;
 }
 
 class _DOMErrorImpl implements DOMError native "*DOMError" {
@@ -8599,13 +8610,13 @@
   static const int WRONG_DOCUMENT_ERR = 4;
 
   /** @domName DOMException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName DOMException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName DOMException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName DOMException.toString */
   String toString();
@@ -8631,10 +8642,10 @@
 abstract class DOMFileSystem {
 
   /** @domName DOMFileSystem.name */
-  abstract String get name;
+  String get name;
 
   /** @domName DOMFileSystem.root */
-  abstract DirectoryEntry get root;
+  DirectoryEntry get root;
 }
 
 class _DOMFileSystemImpl implements DOMFileSystem native "*DOMFileSystem" {
@@ -8653,10 +8664,10 @@
 abstract class DOMFileSystemSync {
 
   /** @domName DOMFileSystemSync.name */
-  abstract String get name;
+  String get name;
 
   /** @domName DOMFileSystemSync.root */
-  abstract DirectoryEntrySync get root;
+  DirectoryEntrySync get root;
 }
 
 class _DOMFileSystemSyncImpl implements DOMFileSystemSync native "*DOMFileSystemSync" {
@@ -8712,16 +8723,16 @@
 abstract class DOMMimeType {
 
   /** @domName MimeType.description */
-  abstract String get description;
+  String get description;
 
   /** @domName MimeType.enabledPlugin */
-  abstract DOMPlugin get enabledPlugin;
+  DOMPlugin get enabledPlugin;
 
   /** @domName MimeType.suffixes */
-  abstract String get suffixes;
+  String get suffixes;
 
   /** @domName MimeType.type */
-  abstract String get type;
+  String get type;
 }
 // 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
@@ -8733,7 +8744,7 @@
 abstract class DOMMimeTypeArray implements List<DOMMimeType> {
 
   /** @domName MimeTypeArray.length */
-  abstract int get length;
+  int get length;
 
   /** @domName MimeTypeArray.item */
   DOMMimeType item(int index);
@@ -8749,7 +8760,7 @@
   _DOMMimeTypeImpl operator[](int index) => JS("_DOMMimeTypeImpl", "#[#]", this, index);
 
   void operator[]=(int index, _DOMMimeTypeImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<DOMMimeType> mixins.
   // DOMMimeType is the element type.
@@ -8766,15 +8777,15 @@
   // From Collection<DOMMimeType>:
 
   void add(DOMMimeType value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(DOMMimeType value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<DOMMimeType> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(DOMMimeType element) => _Collections.contains(this, element);
@@ -8790,38 +8801,38 @@
 
   bool some(bool f(DOMMimeType element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<DOMMimeType>:
 
   void sort([Comparator<DOMMimeType> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(DOMMimeType element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(DOMMimeType element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  DOMMimeType last() => this[length - 1];
+  DOMMimeType get last => this[length - 1];
 
   DOMMimeType removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<DOMMimeType> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [DOMMimeType initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<DOMMimeType> getRange(int start, int rangeLength) =>
@@ -8873,16 +8884,16 @@
 abstract class DOMPlugin {
 
   /** @domName Plugin.description */
-  abstract String get description;
+  String get description;
 
   /** @domName Plugin.filename */
-  abstract String get filename;
+  String get filename;
 
   /** @domName Plugin.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Plugin.name */
-  abstract String get name;
+  String get name;
 
   /** @domName Plugin.item */
   DOMMimeType item(int index);
@@ -8900,7 +8911,7 @@
 abstract class DOMPluginArray implements List<DOMPlugin> {
 
   /** @domName PluginArray.length */
-  abstract int get length;
+  int get length;
 
   /** @domName PluginArray.item */
   DOMPlugin item(int index);
@@ -8919,7 +8930,7 @@
   _DOMPluginImpl operator[](int index) => JS("_DOMPluginImpl", "#[#]", this, index);
 
   void operator[]=(int index, _DOMPluginImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<DOMPlugin> mixins.
   // DOMPlugin is the element type.
@@ -8936,15 +8947,15 @@
   // From Collection<DOMPlugin>:
 
   void add(DOMPlugin value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(DOMPlugin value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<DOMPlugin> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(DOMPlugin element) => _Collections.contains(this, element);
@@ -8960,38 +8971,38 @@
 
   bool some(bool f(DOMPlugin element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<DOMPlugin>:
 
   void sort([Comparator<DOMPlugin> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(DOMPlugin element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(DOMPlugin element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  DOMPlugin last() => this[length - 1];
+  DOMPlugin get last => this[length - 1];
 
   DOMPlugin removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<DOMPlugin> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [DOMPlugin initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<DOMPlugin> getRange(int start, int rangeLength) =>
@@ -9030,37 +9041,37 @@
 abstract class DOMSelection {
 
   /** @domName Selection.anchorNode */
-  abstract Node get anchorNode;
+  Node get anchorNode;
 
   /** @domName Selection.anchorOffset */
-  abstract int get anchorOffset;
+  int get anchorOffset;
 
   /** @domName Selection.baseNode */
-  abstract Node get baseNode;
+  Node get baseNode;
 
   /** @domName Selection.baseOffset */
-  abstract int get baseOffset;
+  int get baseOffset;
 
   /** @domName Selection.extentNode */
-  abstract Node get extentNode;
+  Node get extentNode;
 
   /** @domName Selection.extentOffset */
-  abstract int get extentOffset;
+  int get extentOffset;
 
   /** @domName Selection.focusNode */
-  abstract Node get focusNode;
+  Node get focusNode;
 
   /** @domName Selection.focusOffset */
-  abstract int get focusOffset;
+  int get focusOffset;
 
   /** @domName Selection.isCollapsed */
-  abstract bool get isCollapsed;
+  bool get isCollapsed;
 
   /** @domName Selection.rangeCount */
-  abstract int get rangeCount;
+  int get rangeCount;
 
   /** @domName Selection.type */
-  abstract String get type;
+  String get type;
 
   /** @domName Selection.addRange */
   void addRange(Range range);
@@ -9187,7 +9198,7 @@
   String operator[](int index) => JS("String", "#[#]", this, index);
 
   void operator[]=(int index, String value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<String> mixins.
   // String is the element type.
@@ -9204,15 +9215,15 @@
   // From Collection<String>:
 
   void add(String value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(String value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<String> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   // contains() defined by IDL.
@@ -9228,38 +9239,38 @@
 
   bool some(bool f(String element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<String>:
 
   void sort([Comparator<String> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(String element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(String element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  String last() => this[length - 1];
+  String get last => this[length - 1];
 
   String removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [String initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<String> getRange(int start, int rangeLength) =>
@@ -9290,7 +9301,7 @@
 abstract class DOMTokenList {
 
   /** @domName DOMTokenList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName DOMTokenList.contains */
   bool contains(String token);
@@ -9353,7 +9364,7 @@
   factory DataListElement() => _Elements.createDataListElement();
 
   /** @domName HTMLDataListElement.options */
-  abstract HTMLCollection get options;
+  HTMLCollection get options;
 }
 
 class _DataListElementImpl extends _ElementImpl implements DataListElement native "*HTMLDataListElement" {
@@ -9370,10 +9381,10 @@
 abstract class DataTransferItem {
 
   /** @domName DataTransferItem.kind */
-  abstract String get kind;
+  String get kind;
 
   /** @domName DataTransferItem.type */
-  abstract String get type;
+  String get type;
 
   /** @domName DataTransferItem.getAsFile */
   Blob getAsFile();
@@ -9407,7 +9418,7 @@
 abstract class DataTransferItemList {
 
   /** @domName DataTransferItemList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName DataTransferItemList.add */
   void add(data_OR_file, [String type]);
@@ -9449,49 +9460,49 @@
   }
 
   /** @domName DataView.getFloat32 */
-  num getFloat32(int byteOffset, [bool littleEndian]);
+  num getFloat32(int byteOffset, {bool littleEndian});
 
   /** @domName DataView.getFloat64 */
-  num getFloat64(int byteOffset, [bool littleEndian]);
+  num getFloat64(int byteOffset, {bool littleEndian});
 
   /** @domName DataView.getInt16 */
-  int getInt16(int byteOffset, [bool littleEndian]);
+  int getInt16(int byteOffset, {bool littleEndian});
 
   /** @domName DataView.getInt32 */
-  int getInt32(int byteOffset, [bool littleEndian]);
+  int getInt32(int byteOffset, {bool littleEndian});
 
   /** @domName DataView.getInt8 */
   int getInt8(int byteOffset);
 
   /** @domName DataView.getUint16 */
-  int getUint16(int byteOffset, [bool littleEndian]);
+  int getUint16(int byteOffset, {bool littleEndian});
 
   /** @domName DataView.getUint32 */
-  int getUint32(int byteOffset, [bool littleEndian]);
+  int getUint32(int byteOffset, {bool littleEndian});
 
   /** @domName DataView.getUint8 */
   int getUint8(int byteOffset);
 
   /** @domName DataView.setFloat32 */
-  void setFloat32(int byteOffset, num value, [bool littleEndian]);
+  void setFloat32(int byteOffset, num value, {bool littleEndian});
 
   /** @domName DataView.setFloat64 */
-  void setFloat64(int byteOffset, num value, [bool littleEndian]);
+  void setFloat64(int byteOffset, num value, {bool littleEndian});
 
   /** @domName DataView.setInt16 */
-  void setInt16(int byteOffset, int value, [bool littleEndian]);
+  void setInt16(int byteOffset, int value, {bool littleEndian});
 
   /** @domName DataView.setInt32 */
-  void setInt32(int byteOffset, int value, [bool littleEndian]);
+  void setInt32(int byteOffset, int value, {bool littleEndian});
 
   /** @domName DataView.setInt8 */
   void setInt8(int byteOffset, int value);
 
   /** @domName DataView.setUint16 */
-  void setUint16(int byteOffset, int value, [bool littleEndian]);
+  void setUint16(int byteOffset, int value, {bool littleEndian});
 
   /** @domName DataView.setUint32 */
-  void setUint32(int byteOffset, int value, [bool littleEndian]);
+  void setUint32(int byteOffset, int value, {bool littleEndian});
 
   /** @domName DataView.setUint8 */
   void setUint8(int byteOffset, int value);
@@ -9499,35 +9510,35 @@
 
 class _DataViewImpl extends _ArrayBufferViewImpl implements DataView native "*DataView" {
 
-  num getFloat32(int byteOffset, [bool littleEndian]) native;
+  num getFloat32(int byteOffset, {bool littleEndian}) native;
 
-  num getFloat64(int byteOffset, [bool littleEndian]) native;
+  num getFloat64(int byteOffset, {bool littleEndian}) native;
 
-  int getInt16(int byteOffset, [bool littleEndian]) native;
+  int getInt16(int byteOffset, {bool littleEndian}) native;
 
-  int getInt32(int byteOffset, [bool littleEndian]) native;
+  int getInt32(int byteOffset, {bool littleEndian}) native;
 
   int getInt8(int byteOffset) native;
 
-  int getUint16(int byteOffset, [bool littleEndian]) native;
+  int getUint16(int byteOffset, {bool littleEndian}) native;
 
-  int getUint32(int byteOffset, [bool littleEndian]) native;
+  int getUint32(int byteOffset, {bool littleEndian}) native;
 
   int getUint8(int byteOffset) native;
 
-  void setFloat32(int byteOffset, num value, [bool littleEndian]) native;
+  void setFloat32(int byteOffset, num value, {bool littleEndian}) native;
 
-  void setFloat64(int byteOffset, num value, [bool littleEndian]) native;
+  void setFloat64(int byteOffset, num value, {bool littleEndian}) native;
 
-  void setInt16(int byteOffset, int value, [bool littleEndian]) native;
+  void setInt16(int byteOffset, int value, {bool littleEndian}) native;
 
-  void setInt32(int byteOffset, int value, [bool littleEndian]) native;
+  void setInt32(int byteOffset, int value, {bool littleEndian}) native;
 
   void setInt8(int byteOffset, int value) native;
 
-  void setUint16(int byteOffset, int value, [bool littleEndian]) native;
+  void setUint16(int byteOffset, int value, {bool littleEndian}) native;
 
-  void setUint32(int byteOffset, int value, [bool littleEndian]) native;
+  void setUint32(int byteOffset, int value, {bool littleEndian}) native;
 
   void setUint8(int byteOffset, int value) native;
 }
@@ -9541,7 +9552,7 @@
 abstract class Database {
 
   /** @domName Database.version */
-  abstract String get version;
+  String get version;
 
   /** @domName Database.changeVersion */
   void changeVersion(String oldVersion, String newVersion, [SQLTransactionCallback callback, SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]);
@@ -9558,6 +9569,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void DatabaseCallback(database);
 
 class _DatabaseImpl implements Database native "*Database" {
@@ -9580,10 +9592,10 @@
 abstract class DatabaseSync {
 
   /** @domName DatabaseSync.lastErrorMessage */
-  abstract String get lastErrorMessage;
+  String get lastErrorMessage;
 
   /** @domName DatabaseSync.version */
-  abstract String get version;
+  String get version;
 
   /** @domName DatabaseSync.changeVersion */
   void changeVersion(String oldVersion, String newVersion, [SQLTransactionSyncCallback callback]);
@@ -9664,7 +9676,7 @@
 abstract class DelayNode implements AudioNode {
 
   /** @domName DelayNode.delayTime */
-  abstract AudioParam get delayTime;
+  AudioParam get delayTime;
 }
 
 class _DelayNodeImpl extends _AudioNodeImpl implements DelayNode native "*DelayNode" {
@@ -9700,7 +9712,7 @@
 abstract class DeviceMotionEvent implements Event {
 
   /** @domName DeviceMotionEvent.interval */
-  abstract num get interval;
+  num get interval;
 }
 
 class _DeviceMotionEventImpl extends _EventImpl implements DeviceMotionEvent native "*DeviceMotionEvent" {
@@ -9717,16 +9729,16 @@
 abstract class DeviceOrientationEvent implements Event {
 
   /** @domName DeviceOrientationEvent.absolute */
-  abstract bool get absolute;
+  bool get absolute;
 
   /** @domName DeviceOrientationEvent.alpha */
-  abstract num get alpha;
+  num get alpha;
 
   /** @domName DeviceOrientationEvent.beta */
-  abstract num get beta;
+  num get beta;
 
   /** @domName DeviceOrientationEvent.gamma */
-  abstract num get gamma;
+  num get gamma;
 
   /** @domName DeviceOrientationEvent.initDeviceOrientationEvent */
   void initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute);
@@ -9774,10 +9786,10 @@
   DirectoryReader createReader();
 
   /** @domName DirectoryEntry.getDirectory */
-  void getDirectory(String path, [Map options, EntryCallback successCallback, ErrorCallback errorCallback]);
+  void getDirectory(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});
 
   /** @domName DirectoryEntry.getFile */
-  void getFile(String path, [Map options, EntryCallback successCallback, ErrorCallback errorCallback]);
+  void getFile(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});
 
   /** @domName DirectoryEntry.removeRecursively */
   void removeRecursively(VoidCallback successCallback, [ErrorCallback errorCallback]);
@@ -9787,7 +9799,7 @@
 
   _DirectoryReaderImpl createReader() native;
 
-  void getDirectory(String path, [options, successCallback, errorCallback]) {
+  void getDirectory(String path, {options, successCallback, errorCallback}) {
     if (?errorCallback) {
       var options_1 = _convertDartToNative_Dictionary(options);
       _getDirectory_1(path, options_1, successCallback, errorCallback);
@@ -9811,7 +9823,7 @@
   void _getDirectory_3(path, options) native "getDirectory";
   void _getDirectory_4(path) native "getDirectory";
 
-  void getFile(String path, [options, successCallback, errorCallback]) {
+  void getFile(String path, {options, successCallback, errorCallback}) {
     if (?errorCallback) {
       var options_1 = _convertDartToNative_Dictionary(options);
       _getFile_1(path, options_1, successCallback, errorCallback);
@@ -9934,6 +9946,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.
 
+
 /// @domName Document
 abstract class Document extends HtmlElement {
 
@@ -9944,7 +9957,7 @@
   DocumentEvents get on;
 
   /** @domName HTMLDocument.activeElement */
-  abstract Element get activeElement;
+  Element get activeElement;
 
   /** @domName Document.body */
   Element body;
@@ -9956,64 +9969,64 @@
   String cookie;
 
   /** @domName Document.defaultView */
-  abstract Window get window;
+  Window get window;
 
   /** @domName Document.documentElement */
-  abstract Element get documentElement;
+  Element get documentElement;
 
   /** @domName Document.domain */
-  abstract String get domain;
+  String get domain;
 
   /** @domName Document.head */
-  abstract HeadElement get head;
+  HeadElement get head;
 
   /** @domName Document.implementation */
-  abstract DOMImplementation get implementation;
+  DOMImplementation get implementation;
 
   /** @domName Document.lastModified */
-  abstract String get lastModified;
+  String get lastModified;
 
   /** @domName Document.preferredStylesheetSet */
-  abstract String get preferredStylesheetSet;
+  String get preferredStylesheetSet;
 
   /** @domName Document.readyState */
-  abstract String get readyState;
+  String get readyState;
 
   /** @domName Document.referrer */
-  abstract String get referrer;
+  String get referrer;
 
   /** @domName Document.selectedStylesheetSet */
   String selectedStylesheetSet;
 
   /** @domName Document.styleSheets */
-  abstract List<StyleSheet> get styleSheets;
+  List<StyleSheet> get styleSheets;
 
   /** @domName Document.title */
   String title;
 
   /** @domName Document.webkitCurrentFullScreenElement */
-  abstract Element get webkitCurrentFullScreenElement;
+  Element get webkitCurrentFullScreenElement;
 
   /** @domName Document.webkitFullScreenKeyboardInputAllowed */
-  abstract bool get webkitFullScreenKeyboardInputAllowed;
+  bool get webkitFullScreenKeyboardInputAllowed;
 
   /** @domName Document.webkitFullscreenElement */
-  abstract Element get webkitFullscreenElement;
+  Element get webkitFullscreenElement;
 
   /** @domName Document.webkitFullscreenEnabled */
-  abstract bool get webkitFullscreenEnabled;
+  bool get webkitFullscreenEnabled;
 
   /** @domName Document.webkitHidden */
-  abstract bool get webkitHidden;
+  bool get webkitHidden;
 
   /** @domName Document.webkitIsFullScreen */
-  abstract bool get webkitIsFullScreen;
+  bool get webkitIsFullScreen;
 
   /** @domName Document.webkitPointerLockElement */
-  abstract Element get webkitPointerLockElement;
+  Element get webkitPointerLockElement;
 
   /** @domName Document.webkitVisibilityState */
-  abstract String get webkitVisibilityState;
+  String get webkitVisibilityState;
 
   /** @domName Document.caretRangeFromPoint */
   Range caretRangeFromPoint(int x, int y);
@@ -10202,6 +10215,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.
 
+
 /// @domName DocumentFragment
 abstract class DocumentFragment extends Element {
 
@@ -10262,7 +10276,7 @@
     if (newLength >= len) {
       return;
     } else if (newLength < 0) {
-      throw const ArgumentError("Invalid list length");
+      throw new ArgumentError("Invalid list length");
     }
 
     removeRange(newLength - 1, len - newLength);
@@ -10285,7 +10299,7 @@
   }
 
   void sort([Comparator<Element> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
+    throw new UnsupportedError('TODO(jacobr): should we impl?');
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -10307,7 +10321,7 @@
   }
 
   Element removeLast() {
-    final result = this.last();
+    final result = this.last;
     if (result != null) {
       result.remove();
     }
@@ -10318,7 +10332,7 @@
   Collection<Element> filter(bool f(Element element)) => _filtered.filter(f);
   bool every(bool f(Element element)) => _filtered.every(f);
   bool some(bool f(Element element)) => _filtered.some(f);
-  bool isEmpty() => _filtered.isEmpty();
+  bool get isEmpty => _filtered.isEmpty;
   int get length => _filtered.length;
   Element operator [](int index) => _filtered[index];
   Iterator<Element> iterator() => _filtered.iterator();
@@ -10328,11 +10342,11 @@
     _filtered.indexOf(element, start);
 
   int lastIndexOf(Element element, [int start = null]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _filtered.lastIndexOf(element, start);
   }
 
-  Element last() => _filtered.last();
+  Element get last => _filtered.last;
 }
 
 Future<CSSStyleDeclaration> _emptyStyleFuture() {
@@ -10354,7 +10368,7 @@
   _FrozenCSSClassSet() : super(null);
 
   void _write(Set s) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         'frozen class set cannot be modified');
   }
   Set<String> _read() => new Set<String>();
@@ -10468,7 +10482,7 @@
     }
     return null;
   }
-  Element get $m_lastElementChild() => elements.last();
+  Element get $m_lastElementChild() => elements.last;
   Element get nextElementSibling => null;
   Element get previousElementSibling => null;
   Element get offsetParent => null;
@@ -10497,97 +10511,97 @@
   // Setters throw errors rather than being no-ops because we aren't going to
   // retain the values that were set, and erroring out seems clearer.
   void set attributes(Map<String, String> value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Attributes can't be set for document fragments.");
   }
 
   void set classes(Collection<String> value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Classes can't be set for document fragments.");
   }
 
   void set dataAttributes(Map<String, String> value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Data attributes can't be set for document fragments.");
   }
 
   void set contentEditable(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Content editable can't be set for document fragments.");
   }
 
   String get dir {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support text direction.");
   }
 
   void set dir(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support text direction.");
   }
 
   void set draggable(bool value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Draggable can't be set for document fragments.");
   }
 
   void set hidden(bool value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Hidden can't be set for document fragments.");
   }
 
   void set id(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "ID can't be set for document fragments.");
   }
 
   String get lang {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support language.");
   }
 
   void set lang(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support language.");
   }
 
   void set scrollLeft(int value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support scrolling.");
   }
 
   void set scrollTop(int value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support scrolling.");
   }
 
   void set spellcheck(bool value) {
-     throw new UnsupportedOperationException(
+     throw new UnsupportedError(
       "Spellcheck can't be set for document fragments.");
   }
 
   void set translate(bool value) {
-     throw new UnsupportedOperationException(
+     throw new UnsupportedError(
       "Spellcheck can't be set for document fragments.");
   }
 
   void set tabIndex(int value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Tab index can't be set for document fragments.");
   }
 
   void set title(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Title can't be set for document fragments.");
   }
 
   void set webkitdropzone(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "WebKit drop zone can't be set for document fragments.");
   }
 
   void set webkitRegionOverflow(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "WebKit region overflow can't be set for document fragments.");
   }
 
@@ -10621,7 +10635,7 @@
   String cookie;
 
   Window get window => _convertNativeToDart_Window(this._window);
-  Window get _window() => JS("Window", "#.defaultView", this);
+  Window get _window => JS("Window", "#.defaultView", this);
 
   final _ElementImpl documentElement;
 
@@ -10865,22 +10879,22 @@
 abstract class DocumentType implements Node {
 
   /** @domName DocumentType.entities */
-  abstract NamedNodeMap get entities;
+  NamedNodeMap get entities;
 
   /** @domName DocumentType.internalSubset */
-  abstract String get internalSubset;
+  String get internalSubset;
 
   /** @domName DocumentType.name */
-  abstract String get name;
+  String get name;
 
   /** @domName DocumentType.notations */
-  abstract NamedNodeMap get notations;
+  NamedNodeMap get notations;
 
   /** @domName DocumentType.publicId */
-  abstract String get publicId;
+  String get publicId;
 
   /** @domName DocumentType.systemId */
-  abstract String get systemId;
+  String get systemId;
 
   /** @domName DocumentType.remove */
   void remove();
@@ -10912,22 +10926,22 @@
 abstract class DynamicsCompressorNode implements AudioNode {
 
   /** @domName DynamicsCompressorNode.attack */
-  abstract AudioParam get attack;
+  AudioParam get attack;
 
   /** @domName DynamicsCompressorNode.knee */
-  abstract AudioParam get knee;
+  AudioParam get knee;
 
   /** @domName DynamicsCompressorNode.ratio */
-  abstract AudioParam get ratio;
+  AudioParam get ratio;
 
   /** @domName DynamicsCompressorNode.reduction */
-  abstract AudioParam get reduction;
+  AudioParam get reduction;
 
   /** @domName DynamicsCompressorNode.release */
-  abstract AudioParam get release;
+  AudioParam get release;
 
   /** @domName DynamicsCompressorNode.threshold */
-  abstract AudioParam get threshold;
+  AudioParam get threshold;
 }
 
 class _DynamicsCompressorNodeImpl extends _AudioNodeImpl implements DynamicsCompressorNode native "*DynamicsCompressorNode" {
@@ -10966,6 +10980,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /**
  * All your attribute manipulation needs in one place.
  * Extends the regular Map interface by automatically coercing non-string
@@ -11081,7 +11096,7 @@
   ElementEvents get on;
 
   /** @domName HTMLElement.children */
-  abstract HTMLCollection get $dom_children;
+  HTMLCollection get $dom_children;
 
   /** @domName HTMLElement.contentEditable */
   String contentEditable;
@@ -11102,13 +11117,13 @@
   String innerHTML;
 
   /** @domName HTMLElement.isContentEditable */
-  abstract bool get isContentEditable;
+  bool get isContentEditable;
 
   /** @domName HTMLElement.lang */
   String lang;
 
   /** @domName HTMLElement.outerHTML */
-  abstract String get outerHTML;
+  String get outerHTML;
 
   /** @domName HTMLElement.spellcheck */
   bool spellcheck;
@@ -11140,55 +11155,55 @@
   static const int ALLOW_KEYBOARD_INPUT = 1;
 
   /** @domName Element.childElementCount */
-  abstract int get $dom_childElementCount;
+  int get $dom_childElementCount;
 
   /** @domName Element.className */
   String $dom_className;
 
   /** @domName Element.clientHeight */
-  abstract int get clientHeight;
+  int get clientHeight;
 
   /** @domName Element.clientLeft */
-  abstract int get clientLeft;
+  int get clientLeft;
 
   /** @domName Element.clientTop */
-  abstract int get clientTop;
+  int get clientTop;
 
   /** @domName Element.clientWidth */
-  abstract int get clientWidth;
+  int get clientWidth;
 
   /** @domName Element.dataset */
-  abstract Map<String, String> get dataset;
+  Map<String, String> get dataset;
 
   /** @domName Element.firstElementChild */
-  abstract Element get $dom_firstElementChild;
+  Element get $dom_firstElementChild;
 
   /** @domName Element.lastElementChild */
-  abstract Element get $dom_lastElementChild;
+  Element get $dom_lastElementChild;
 
   /** @domName Element.nextElementSibling */
-  abstract Element get nextElementSibling;
+  Element get nextElementSibling;
 
   /** @domName Element.offsetHeight */
-  abstract int get offsetHeight;
+  int get offsetHeight;
 
   /** @domName Element.offsetLeft */
-  abstract int get offsetLeft;
+  int get offsetLeft;
 
   /** @domName Element.offsetParent */
-  abstract Element get offsetParent;
+  Element get offsetParent;
 
   /** @domName Element.offsetTop */
-  abstract int get offsetTop;
+  int get offsetTop;
 
   /** @domName Element.offsetWidth */
-  abstract int get offsetWidth;
+  int get offsetWidth;
 
   /** @domName Element.previousElementSibling */
-  abstract Element get previousElementSibling;
+  Element get previousElementSibling;
 
   /** @domName Element.scrollHeight */
-  abstract int get scrollHeight;
+  int get scrollHeight;
 
   /** @domName Element.scrollLeft */
   int scrollLeft;
@@ -11197,13 +11212,13 @@
   int scrollTop;
 
   /** @domName Element.scrollWidth */
-  abstract int get scrollWidth;
+  int get scrollWidth;
 
   /** @domName Element.style */
-  abstract CSSStyleDeclaration get style;
+  CSSStyleDeclaration get style;
 
   /** @domName Element.tagName */
-  abstract String get tagName;
+  String get tagName;
 
   /** @domName Element.blur */
   void blur();
@@ -11432,7 +11447,7 @@
     return out;
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     return _element.$dom_firstElementChild == null;
   }
 
@@ -11450,7 +11465,7 @@
 
    void set length(int newLength) {
      // TODO(jacobr): remove children when length is reduced.
-     throw const UnsupportedOperationException('');
+     throw new UnsupportedError('');
    }
 
   Element add(_ElementImpl value) {
@@ -11469,7 +11484,7 @@
   }
 
   void sort([Comparator<Element> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
+    throw new UnsupportedError('TODO(jacobr): should we impl?');
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -11493,7 +11508,7 @@
   }
 
   int lastIndexOf(Element element, [int start = null]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
@@ -11503,14 +11518,14 @@
   }
 
   Element removeLast() {
-    final result = this.last();
+    final result = this.last;
     if (result != null) {
       _element.$dom_removeChild(result);
     }
     return result;
   }
 
-  Element last() {
+  Element get last {
     return _element.$dom_lastElementChild;
   }
 }
@@ -11575,14 +11590,14 @@
     return false;
   }
 
-  bool isEmpty() => _nodeList.isEmpty();
+  bool get isEmpty => _nodeList.isEmpty;
 
   int get length => _nodeList.length;
 
   Element operator [](int index) => _nodeList[index];
 
   void operator []=(int index, Element value) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void set length(int newLength) {
@@ -11590,33 +11605,33 @@
   }
 
   void add(Element value) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void addLast(Element value) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   Iterator<Element> iterator() => new _FrozenElementListIterator(this);
 
   void addAll(Collection<Element> collection) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void sort([Comparator<Element> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void insertRange(int start, int rangeLength, [initialValue = null]) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   List<Element> getRange(int start, int rangeLength) =>
@@ -11629,14 +11644,14 @@
     _nodeList.lastIndexOf(element, start);
 
   void clear() {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   Element removeLast() {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
-  Element last() => _nodeList.last();
+  Element get last => _nodeList.last;
 }
 
 class _FrozenElementListIterator implements Iterator<Element> {
@@ -11647,11 +11662,11 @@
 
   /**
    * Gets the next element in the iteration. Throws a
-   * [NoMoreElementsException] if no element is left.
+   * [StateError("No more elements")] if no element is left.
    */
   Element next() {
-    if (!hasNext()) {
-      throw const NoMoreElementsException();
+    if (!hasNext) {
+      throw new StateError("No more elements");
     }
 
     return _list[_index++];
@@ -11660,7 +11675,7 @@
   /**
    * Returns whether the [Iterator] has elements left.
    */
-  bool hasNext() => _index < _list.length;
+  bool get hasNext => _index < _list.length;
 }
 
 class _ElementAttributeMap implements AttributeMap {
@@ -11719,7 +11734,7 @@
     }
   }
 
-  Collection<String> getKeys() {
+  Collection<String> get keys {
     // TODO(jacobr): generate a lazy collection instead.
     final attributes = _element.$dom_attributes;
     final keys = new List<String>(attributes.length);
@@ -11729,7 +11744,7 @@
     return keys;
   }
 
-  Collection<String> getValues() {
+  Collection<String> get values {
     // TODO(jacobr): generate a lazy collection instead.
     final attributes = _element.$dom_attributes;
     final values = new List<String>(attributes.length);
@@ -11749,7 +11764,7 @@
   /**
    * Returns true if there is no {key, value} pair in the map.
    */
-  bool isEmpty() {
+  bool get isEmpty {
     return length == 0;
   }
 }
@@ -11767,7 +11782,7 @@
   // interface Map
 
   // TODO: Use lazy iterator when it is available on Map.
-  bool containsValue(String value) => getValues().some((v) => v == value);
+  bool containsValue(String value) => values.some((v) => v == value);
 
   bool containsKey(String key) => $dom_attributes.containsKey(_attr(key));
 
@@ -11784,7 +11799,7 @@
 
   void clear() {
     // Needs to operate on a snapshot since we are mutating the collection.
-    for (String key in getKeys()) {
+    for (String key in keys) {
       remove(key);
     }
   }
@@ -11797,7 +11812,7 @@
     });
   }
 
-  Collection<String> getKeys() {
+  Collection<String> get keys {
     final keys = new List<String>();
     $dom_attributes.forEach((String key, String value) {
       if (_matches(key)) {
@@ -11807,7 +11822,7 @@
     return keys;
   }
 
-  Collection<String> getValues() {
+  Collection<String> get values {
     final values = new List<String>();
     $dom_attributes.forEach((String key, String value) {
       if (_matches(key)) {
@@ -11817,10 +11832,10 @@
     return values;
   }
 
-  int get length => getKeys().length;
+  int get length => keys.length;
 
   // TODO: Use lazy iterator when it is available on Map.
-  bool isEmpty() => length == 0;
+  bool get isEmpty => length == 0;
 
   // Helpers.
   String _attr(String key) => 'data-$key';
@@ -11853,7 +11868,7 @@
 
   bool some(bool f(String element)) => _read().some(f);
 
-  bool isEmpty() => _read().isEmpty();
+  bool get isEmpty => _read().isEmpty;
 
   bool get frozen => false;
 
@@ -11937,7 +11952,7 @@
     Set<String> s = new Set<String>();
     for (String name in _classname().split(' ')) {
       String trimmed = name.trim();
-      if (!trimmed.isEmpty()) {
+      if (!trimmed.isEmpty) {
         s.add(trimmed);
       }
     }
@@ -11976,7 +11991,7 @@
   const _SimpleClientRect(this.left, this.top, this.width, this.height);
 
   bool operator ==(ClientRect other) {
-    return other !== null && left == other.left && top == other.top
+    return other != null && left == other.left && top == other.top
         && width == other.width && height == other.height;
   }
 
@@ -12039,7 +12054,7 @@
   void set attributes(Map<String, String> value) {
     Map<String, String> attributes = this.attributes;
     attributes.clear();
-    for (String key in value.getKeys()) {
+    for (String key in value.keys) {
       attributes[key] = value[key];
     }
   }
@@ -12071,7 +12086,7 @@
   void set dataAttributes(Map<String, String> value) {
     final dataAttributes = this.dataAttributes;
     dataAttributes.clear();
-    for (String key in value.getKeys()) {
+    for (String key in value.keys) {
       dataAttributes[key] = value[key];
     }
   }
@@ -12167,7 +12182,7 @@
   _ElementEventsImpl get on =>
     new _ElementEventsImpl(this);
 
-  _HTMLCollectionImpl get $dom_children() => JS("_HTMLCollectionImpl", "#.children", this);
+  _HTMLCollectionImpl get $dom_children => JS("_HTMLCollectionImpl", "#.children", this);
 
   String contentEditable;
 
@@ -12199,9 +12214,9 @@
 
   void click() native;
 
-  int get $dom_childElementCount() => JS("int", "#.childElementCount", this);
+  int get $dom_childElementCount => JS("int", "#.childElementCount", this);
 
-  String get $dom_className() => JS("String", "#.className", this);
+  String get $dom_className => JS("String", "#.className", this);
 
   void set $dom_className(String value) {
     JS("void", "#.className = #", this, value);
@@ -12217,9 +12232,9 @@
 
   final Map<String, String> dataset;
 
-  _ElementImpl get $dom_firstElementChild() => JS("_ElementImpl", "#.firstElementChild", this);
+  _ElementImpl get $dom_firstElementChild => JS("_ElementImpl", "#.firstElementChild", this);
 
-  _ElementImpl get $dom_lastElementChild() => JS("_ElementImpl", "#.lastElementChild", this);
+  _ElementImpl get $dom_lastElementChild => JS("_ElementImpl", "#.lastElementChild", this);
 
   final _ElementImpl nextElementSibling;
 
@@ -12317,7 +12332,7 @@
     String parentTag = 'div';
     String tag;
     final match = _START_TAG_REGEXP.firstMatch(html);
-    if (match !== null) {
+    if (match != null) {
       tag = match.group(1).toLowerCase();
       if (_CUSTOM_PARENT_TAG_MAP.containsKey(tag)) {
         parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
@@ -12493,19 +12508,19 @@
 abstract class ElementTraversal {
 
   /** @domName ElementTraversal.childElementCount */
-  abstract int get childElementCount;
+  int get childElementCount;
 
   /** @domName ElementTraversal.firstElementChild */
-  abstract Element get firstElementChild;
+  Element get firstElementChild;
 
   /** @domName ElementTraversal.lastElementChild */
-  abstract Element get lastElementChild;
+  Element get lastElementChild;
 
   /** @domName ElementTraversal.nextElementSibling */
-  abstract Element get nextElementSibling;
+  Element get nextElementSibling;
 
   /** @domName ElementTraversal.previousElementSibling */
-  abstract Element get previousElementSibling;
+  Element get previousElementSibling;
 }
 // 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
@@ -12569,6 +12584,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void EntriesCallback(List<Entry> entries);
 // 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
@@ -12580,19 +12596,19 @@
 abstract class Entry {
 
   /** @domName Entry.filesystem */
-  abstract DOMFileSystem get filesystem;
+  DOMFileSystem get filesystem;
 
   /** @domName Entry.fullPath */
-  abstract String get fullPath;
+  String get fullPath;
 
   /** @domName Entry.isDirectory */
-  abstract bool get isDirectory;
+  bool get isDirectory;
 
   /** @domName Entry.isFile */
-  abstract bool get isFile;
+  bool get isFile;
 
   /** @domName Entry.name */
-  abstract String get name;
+  String get name;
 
   /** @domName Entry.copyTo */
   void copyTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]);
@@ -12620,7 +12636,7 @@
   _EntryImpl operator[](int index) => JS("_EntryImpl", "#[#]", this, index);
 
   void operator[]=(int index, _EntryImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Entry> mixins.
   // Entry is the element type.
@@ -12637,15 +12653,15 @@
   // From Collection<Entry>:
 
   void add(Entry value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Entry value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Entry> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Entry element) => _Collections.contains(this, element);
@@ -12661,38 +12677,38 @@
 
   bool some(bool f(Entry element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Entry>:
 
   void sort([Comparator<Entry> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Entry element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Entry element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Entry last() => this[length - 1];
+  Entry get last => this[length - 1];
 
   Entry removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Entry> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Entry initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Entry> getRange(int start, int rangeLength) =>
@@ -12710,7 +12726,7 @@
   _EntrySyncImpl operator[](int index) => JS("_EntrySyncImpl", "#[#]", this, index);
 
   void operator[]=(int index, _EntrySyncImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<EntrySync> mixins.
   // EntrySync is the element type.
@@ -12727,15 +12743,15 @@
   // From Collection<EntrySync>:
 
   void add(EntrySync value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(EntrySync value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<EntrySync> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(EntrySync element) => _Collections.contains(this, element);
@@ -12751,38 +12767,38 @@
 
   bool some(bool f(EntrySync element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<EntrySync>:
 
   void sort([Comparator<EntrySync> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(EntrySync element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(EntrySync element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  EntrySync last() => this[length - 1];
+  EntrySync get last => this[length - 1];
 
   EntrySync removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<EntrySync> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [EntrySync initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<EntrySync> getRange(int start, int rangeLength) =>
@@ -12798,6 +12814,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void EntryCallback(Entry entry);
 
 class _EntryImpl implements Entry native "*Entry" {
@@ -12834,19 +12851,19 @@
 abstract class EntrySync {
 
   /** @domName EntrySync.filesystem */
-  abstract DOMFileSystemSync get filesystem;
+  DOMFileSystemSync get filesystem;
 
   /** @domName EntrySync.fullPath */
-  abstract String get fullPath;
+  String get fullPath;
 
   /** @domName EntrySync.isDirectory */
-  abstract bool get isDirectory;
+  bool get isDirectory;
 
   /** @domName EntrySync.isFile */
-  abstract bool get isFile;
+  bool get isFile;
 
   /** @domName EntrySync.name */
-  abstract String get name;
+  String get name;
 
   /** @domName EntrySync.copyTo */
   EntrySync copyTo(DirectoryEntrySync parent, String name);
@@ -12897,6 +12914,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void ErrorCallback(FileError error);
 // 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
@@ -12908,13 +12926,13 @@
 abstract class ErrorEvent implements Event {
 
   /** @domName ErrorEvent.filename */
-  abstract String get filename;
+  String get filename;
 
   /** @domName ErrorEvent.lineno */
-  abstract int get lineno;
+  int get lineno;
 
   /** @domName ErrorEvent.message */
-  abstract String get message;
+  String get message;
 }
 
 class _ErrorEventImpl extends _EventImpl implements ErrorEvent native "*ErrorEvent" {
@@ -12931,6 +12949,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName Event
 abstract class Event {
 
@@ -12984,40 +13003,40 @@
   static const int SELECT = 16384;
 
   /** @domName Event.bubbles */
-  abstract bool get bubbles;
+  bool get bubbles;
 
   /** @domName Event.cancelBubble */
   bool cancelBubble;
 
   /** @domName Event.cancelable */
-  abstract bool get cancelable;
+  bool get cancelable;
 
   /** @domName Event.clipboardData */
-  abstract Clipboard get clipboardData;
+  Clipboard get clipboardData;
 
   /** @domName Event.currentTarget */
-  abstract EventTarget get currentTarget;
+  EventTarget get currentTarget;
 
   /** @domName Event.defaultPrevented */
-  abstract bool get defaultPrevented;
+  bool get defaultPrevented;
 
   /** @domName Event.eventPhase */
-  abstract int get eventPhase;
+  int get eventPhase;
 
   /** @domName Event.returnValue */
   bool returnValue;
 
   /** @domName Event.srcElement */
-  abstract EventTarget get srcElement;
+  EventTarget get srcElement;
 
   /** @domName Event.target */
-  abstract EventTarget get target;
+  EventTarget get target;
 
   /** @domName Event.timeStamp */
-  abstract int get timeStamp;
+  int get timeStamp;
 
   /** @domName Event.type */
-  abstract String get type;
+  String get type;
 
   /** @domName Event.initEvent */
   void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg);
@@ -13045,13 +13064,13 @@
   static const int UNSPECIFIED_EVENT_TYPE_ERR = 0;
 
   /** @domName EventException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName EventException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName EventException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName EventException.toString */
   String toString();
@@ -13079,7 +13098,7 @@
   final _ClipboardImpl clipboardData;
 
   EventTarget get currentTarget => _convertNativeToDart_EventTarget(this._currentTarget);
-  EventTarget get _currentTarget() => JS("EventTarget", "#.currentTarget", this);
+  EventTarget get _currentTarget => JS("EventTarget", "#.currentTarget", this);
 
   final bool defaultPrevented;
 
@@ -13088,10 +13107,10 @@
   bool returnValue;
 
   EventTarget get srcElement => _convertNativeToDart_EventTarget(this._srcElement);
-  EventTarget get _srcElement() => JS("EventTarget", "#.srcElement", this);
+  EventTarget get _srcElement => JS("EventTarget", "#.srcElement", this);
 
   EventTarget get target => _convertNativeToDart_EventTarget(this._target);
-  EventTarget get _target() => JS("EventTarget", "#.target", this);
+  EventTarget get _target => JS("EventTarget", "#.target", this);
 
   final int timeStamp;
 
@@ -13128,13 +13147,13 @@
   static const int OPEN = 1;
 
   /** @domName EventSource.URL */
-  abstract String get URL;
+  String get URL;
 
   /** @domName EventSource.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName EventSource.url */
-  abstract String get url;
+  String get url;
 
   /** @domName EventSource.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -13193,6 +13212,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 abstract class EventListenerList {
   EventListenerList add(EventListener handler, [bool useCapture]);
 
@@ -13229,7 +13249,7 @@
   /* Raw event target. */
   // TODO(jacobr): it would be nice if we could specify this as
   // _EventTargetImpl or EventTarget
-  final Dynamic _ptr;
+  final _ptr;
 
   _EventsImpl(this._ptr);
 
@@ -13241,7 +13261,7 @@
 class _EventListenerListImpl implements EventListenerList {
 
   // TODO(jacobr): make this _EventTargetImpl
-  final Dynamic _ptr;
+  final _ptr;
   final String _type;
 
   _EventListenerListImpl(this._ptr, this._type);
@@ -13300,25 +13320,25 @@
   bool disabled;
 
   /** @domName HTMLFieldSetElement.elements */
-  abstract HTMLCollection get elements;
+  HTMLCollection get elements;
 
   /** @domName HTMLFieldSetElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLFieldSetElement.name */
   String name;
 
   /** @domName HTMLFieldSetElement.type */
-  abstract String get type;
+  String get type;
 
   /** @domName HTMLFieldSetElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLFieldSetElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLFieldSetElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLFieldSetElement.checkValidity */
   bool checkValidity();
@@ -13359,13 +13379,13 @@
 abstract class File implements Blob {
 
   /** @domName File.lastModifiedDate */
-  abstract Date get lastModifiedDate;
+  Date get lastModifiedDate;
 
   /** @domName File.name */
-  abstract String get name;
+  String get name;
 
   /** @domName File.webkitRelativePath */
-  abstract String get webkitRelativePath;
+  String get webkitRelativePath;
 }
 // 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
@@ -13373,6 +13393,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void FileCallback(File file);
 // 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
@@ -13452,7 +13473,7 @@
   static const int TYPE_MISMATCH_ERR = 11;
 
   /** @domName FileError.code */
-  abstract int get code;
+  int get code;
 }
 
 class _FileErrorImpl implements FileError native "*FileError" {
@@ -13493,13 +13514,13 @@
   static const int TYPE_MISMATCH_ERR = 11;
 
   /** @domName FileException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName FileException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName FileException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName FileException.toString */
   String toString();
@@ -13532,7 +13553,7 @@
   _FileImpl operator[](int index) => JS("_FileImpl", "#[#]", this, index);
 
   void operator[]=(int index, _FileImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<File> mixins.
   // File is the element type.
@@ -13549,15 +13570,15 @@
   // From Collection<File>:
 
   void add(File value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(File value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<File> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(File element) => _Collections.contains(this, element);
@@ -13573,38 +13594,38 @@
 
   bool some(bool f(File element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<File>:
 
   void sort([Comparator<File> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(File element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(File element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  File last() => this[length - 1];
+  File get last => this[length - 1];
 
   File removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<File> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [File initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<File> getRange(int start, int rangeLength) =>
@@ -13637,13 +13658,13 @@
   static const int LOADING = 1;
 
   /** @domName FileReader.error */
-  abstract FileError get error;
+  FileError get error;
 
   /** @domName FileReader.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName FileReader.result */
-  abstract Object get result;
+  Object get result;
 
   /** @domName FileReader.abort */
   void abort();
@@ -13768,6 +13789,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void FileSystemCallback(DOMFileSystem fileSystem);
 // 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
@@ -13790,16 +13812,16 @@
   static const int WRITING = 1;
 
   /** @domName FileWriter.error */
-  abstract FileError get error;
+  FileError get error;
 
   /** @domName FileWriter.length */
-  abstract int get length;
+  int get length;
 
   /** @domName FileWriter.position */
-  abstract int get position;
+  int get position;
 
   /** @domName FileWriter.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName FileWriter.abort */
   void abort();
@@ -13843,6 +13865,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void FileWriterCallback(FileWriter fileWriter);
 
 class _FileWriterImpl extends _EventTargetImpl implements FileWriter native "*FileWriter" {
@@ -13898,10 +13921,10 @@
 abstract class FileWriterSync {
 
   /** @domName FileWriterSync.length */
-  abstract int get length;
+  int get length;
 
   /** @domName FileWriterSync.position */
-  abstract int get position;
+  int get position;
 
   /** @domName FileWriterSync.seek */
   void seek(int position);
@@ -13946,7 +13969,7 @@
   static const int BYTES_PER_ELEMENT = 4;
 
   /** @domName Float32Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Float32Array.setElements */
   void setElements(Object array, [int offset]);
@@ -13977,15 +14000,15 @@
   // From Collection<num>:
 
   void add(num value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(num value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<num> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(num element) => _Collections.contains(this, element);
@@ -14001,38 +14024,38 @@
 
   bool some(bool f(num element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<num>:
 
   void sort([Comparator<num> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(num element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(num element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  num last() => this[length - 1];
+  num get last => this[length - 1];
 
   num removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [num initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<num> getRange(int start, int rangeLength) =>
@@ -14065,7 +14088,7 @@
   static const int BYTES_PER_ELEMENT = 8;
 
   /** @domName Float64Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Float64Array.setElements */
   void setElements(Object array, [int offset]);
@@ -14096,15 +14119,15 @@
   // From Collection<num>:
 
   void add(num value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(num value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<num> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(num element) => _Collections.contains(this, element);
@@ -14120,38 +14143,38 @@
 
   bool some(bool f(num element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<num>:
 
   void sort([Comparator<num> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(num element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(num element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  num last() => this[length - 1];
+  num get last => this[length - 1];
 
   num removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [num initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<num> getRange(int start, int rangeLength) =>
@@ -14241,7 +14264,7 @@
   String enctype;
 
   /** @domName HTMLFormElement.length */
-  abstract int get length;
+  int get length;
 
   /** @domName HTMLFormElement.method */
   String method;
@@ -14302,17 +14325,14 @@
 /// @domName HTMLFrameElement
 abstract class FrameElement implements Element {
 
-  /** @domName HTMLFrameElement.contentDocument */
-  abstract Document get contentDocument;
-
   /** @domName HTMLFrameElement.contentWindow */
-  abstract Window get contentWindow;
+  Window get contentWindow;
 
   /** @domName HTMLFrameElement.frameBorder */
   String frameBorder;
 
   /** @domName HTMLFrameElement.height */
-  abstract int get height;
+  int get height;
 
   /** @domName HTMLFrameElement.location */
   String location;
@@ -14339,18 +14359,13 @@
   String src;
 
   /** @domName HTMLFrameElement.width */
-  abstract int get width;
-
-  /** @domName HTMLFrameElement.getSVGDocument */
-  SVGDocument getSVGDocument();
+  int get width;
 }
 
 class _FrameElementImpl extends _ElementImpl implements FrameElement native "*HTMLFrameElement" {
 
-  final _DocumentImpl contentDocument;
-
   Window get contentWindow => _convertNativeToDart_Window(this._contentWindow);
-  Window get _contentWindow() => JS("Window", "#.contentWindow", this);
+  Window get _contentWindow => JS("Window", "#.contentWindow", this);
 
   String frameBorder;
 
@@ -14373,8 +14388,6 @@
   String src;
 
   final int width;
-
-  _SVGDocumentImpl getSVGDocument() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -14475,19 +14488,19 @@
 abstract class Gamepad {
 
   /** @domName Gamepad.axes */
-  abstract List<num> get axes;
+  List<num> get axes;
 
   /** @domName Gamepad.buttons */
-  abstract List<num> get buttons;
+  List<num> get buttons;
 
   /** @domName Gamepad.id */
-  abstract String get id;
+  String get id;
 
   /** @domName Gamepad.index */
-  abstract int get index;
+  int get index;
 
   /** @domName Gamepad.timestamp */
-  abstract int get timestamp;
+  int get timestamp;
 }
 
 class _GamepadImpl implements Gamepad native "*Gamepad" {
@@ -14510,7 +14523,7 @@
   _GamepadImpl operator[](int index) => JS("_GamepadImpl", "#[#]", this, index);
 
   void operator[]=(int index, _GamepadImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Gamepad> mixins.
   // Gamepad is the element type.
@@ -14527,15 +14540,15 @@
   // From Collection<Gamepad>:
 
   void add(Gamepad value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Gamepad value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Gamepad> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Gamepad element) => _Collections.contains(this, element);
@@ -14551,38 +14564,38 @@
 
   bool some(bool f(Gamepad element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Gamepad>:
 
   void sort([Comparator<Gamepad> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Gamepad element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Gamepad element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Gamepad last() => this[length - 1];
+  Gamepad get last => this[length - 1];
 
   Gamepad removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Gamepad> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Gamepad initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Gamepad> getRange(int start, int rangeLength) =>
@@ -14629,10 +14642,10 @@
 abstract class Geoposition {
 
   /** @domName Geoposition.coords */
-  abstract Coordinates get coords;
+  Coordinates get coords;
 
   /** @domName Geoposition.timestamp */
-  abstract int get timestamp;
+  int get timestamp;
 }
 
 class _GeopositionImpl implements Geoposition native "*Geoposition" {
@@ -14685,7 +14698,7 @@
 abstract class HTMLAllCollection implements List<Node> {
 
   /** @domName HTMLAllCollection.length */
-  abstract int get length;
+  int get length;
 
   /** @domName HTMLAllCollection.item */
   Node item(int index);
@@ -14704,7 +14717,7 @@
   _NodeImpl operator[](int index) => JS("_NodeImpl", "#[#]", this, index);
 
   void operator[]=(int index, _NodeImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Node> mixins.
   // Node is the element type.
@@ -14721,15 +14734,15 @@
   // From Collection<Node>:
 
   void add(Node value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Node value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Node> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Node element) => _Collections.contains(this, element);
@@ -14745,38 +14758,38 @@
 
   bool some(bool f(Node element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Node>:
 
   void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Node element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Node element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Node last() => this[length - 1];
+  Node get last => this[length - 1];
 
   Node removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Node> getRange(int start, int rangeLength) =>
@@ -14800,7 +14813,7 @@
 abstract class HTMLCollection implements List<Node> {
 
   /** @domName HTMLCollection.length */
-  abstract int get length;
+  int get length;
 
   /** @domName HTMLCollection.item */
   Node item(int index);
@@ -14816,7 +14829,7 @@
   _NodeImpl operator[](int index) => JS("_NodeImpl", "#[#]", this, index);
 
   void operator[]=(int index, _NodeImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Node> mixins.
   // Node is the element type.
@@ -14833,15 +14846,15 @@
   // From Collection<Node>:
 
   void add(Node value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Node value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Node> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Node element) => _Collections.contains(this, element);
@@ -14857,38 +14870,38 @@
 
   bool some(bool f(Node element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Node>:
 
   void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Node element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Node element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Node last() => this[length - 1];
+  Node get last => this[length - 1];
 
   Node removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Node> getRange(int start, int rangeLength) =>
@@ -14922,7 +14935,7 @@
 class _HTMLOptionsCollectionImpl extends _HTMLCollectionImpl implements HTMLOptionsCollection native "*HTMLOptionsCollection" {
 
   // Shadowing definition.
-  int get length() => JS("int", "#.length", this);
+  int get length => JS("int", "#.length", this);
 
   void set length(int value) {
     JS("void", "#.length = #", this, value);
@@ -14942,10 +14955,10 @@
 abstract class HashChangeEvent implements Event {
 
   /** @domName HashChangeEvent.newURL */
-  abstract String get newURL;
+  String get newURL;
 
   /** @domName HashChangeEvent.oldURL */
-  abstract String get oldURL;
+  String get oldURL;
 
   /** @domName HashChangeEvent.initHashChangeEvent */
   void initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL);
@@ -15027,6 +15040,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName XMLHttpRequest
 abstract class HttpRequest implements EventTarget {
   factory HttpRequest.get(String url, onSuccess(HttpRequest request)) =>
@@ -15053,28 +15067,28 @@
   static const int UNSENT = 0;
 
   /** @domName XMLHttpRequest.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName XMLHttpRequest.response */
-  abstract Object get response;
+  Object get response;
 
   /** @domName XMLHttpRequest.responseText */
-  abstract String get responseText;
+  String get responseText;
 
   /** @domName XMLHttpRequest.responseType */
   String responseType;
 
   /** @domName XMLHttpRequest.responseXML */
-  abstract Document get responseXML;
+  Document get responseXML;
 
   /** @domName XMLHttpRequest.status */
-  abstract int get status;
+  int get status;
 
   /** @domName XMLHttpRequest.statusText */
-  abstract String get statusText;
+  String get statusText;
 
   /** @domName XMLHttpRequest.upload */
-  abstract HttpRequestUpload get upload;
+  HttpRequestUpload get upload;
 
   /** @domName XMLHttpRequest.withCredentials */
   bool withCredentials;
@@ -15140,13 +15154,13 @@
   static const int NETWORK_ERR = 101;
 
   /** @domName XMLHttpRequestException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName XMLHttpRequestException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName XMLHttpRequestException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName XMLHttpRequestException.toString */
   String toString();
@@ -15234,10 +15248,10 @@
 abstract class HttpRequestProgressEvent implements ProgressEvent {
 
   /** @domName XMLHttpRequestProgressEvent.position */
-  abstract int get position;
+  int get position;
 
   /** @domName XMLHttpRequestProgressEvent.totalSize */
-  abstract int get totalSize;
+  int get totalSize;
 }
 
 class _HttpRequestProgressEventImpl extends _ProgressEventImpl implements HttpRequestProgressEvent native "*XMLHttpRequestProgressEvent" {
@@ -15342,16 +15356,16 @@
   static const int PREV_NO_DUPLICATE = 3;
 
   /** @domName IDBCursor.direction */
-  abstract String get direction;
+  String get direction;
 
   /** @domName IDBCursor.key */
-  abstract Dynamic get key;
+  dynamic get key;
 
   /** @domName IDBCursor.primaryKey */
-  abstract Dynamic get primaryKey;
+  dynamic get primaryKey;
 
   /** @domName IDBCursor.source */
-  abstract Dynamic get source;
+  dynamic get source;
 
   /** @domName IDBCursor.advance */
   void advance(int count);
@@ -15370,13 +15384,13 @@
 
   final String direction;
 
-  Dynamic get key => _convertNativeToDart_IDBKey(this._key);
-  Dynamic get _key() => JS("Dynamic", "#.key", this);
+  dynamic get key => _convertNativeToDart_IDBKey(this._key);
+  dynamic get _key => JS("dynamic", "#.key", this);
 
-  Dynamic get primaryKey => _convertNativeToDart_IDBKey(this._primaryKey);
-  Dynamic get _primaryKey() => JS("Dynamic", "#.primaryKey", this);
+  dynamic get primaryKey => _convertNativeToDart_IDBKey(this._primaryKey);
+  dynamic get _primaryKey => JS("dynamic", "#.primaryKey", this);
 
-  final Dynamic source;
+  final dynamic source;
 
   void advance(int count) native;
 
@@ -15410,13 +15424,13 @@
 abstract class IDBCursorWithValue implements IDBCursor {
 
   /** @domName IDBCursorWithValue.value */
-  abstract Dynamic get value;
+  dynamic get value;
 }
 
 class _IDBCursorWithValueImpl extends _IDBCursorImpl implements IDBCursorWithValue native "*IDBCursorWithValue" {
 
-  Dynamic get value => _convertNativeToDart_IDBAny(this._value);
-  Dynamic get _value() => JS("Dynamic", "#.value", this);
+  dynamic get value => _convertNativeToDart_IDBAny(this._value);
+  dynamic get _value => JS("dynamic", "#.value", this);
 }
 // 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
@@ -15433,13 +15447,13 @@
   IDBDatabaseEvents get on;
 
   /** @domName IDBDatabase.name */
-  abstract String get name;
+  String get name;
 
   /** @domName IDBDatabase.objectStoreNames */
-  abstract List<String> get objectStoreNames;
+  List<String> get objectStoreNames;
 
   /** @domName IDBDatabase.version */
-  abstract Dynamic get version;
+  dynamic get version;
 
   /** @domName IDBDatabase.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -15510,13 +15524,13 @@
   static const int VER_ERR = 12;
 
   /** @domName IDBDatabaseException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName IDBDatabaseException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName IDBDatabaseException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName IDBDatabaseException.toString */
   String toString();
@@ -15587,7 +15601,7 @@
 
   final _DOMStringListImpl objectStoreNames;
 
-  final Dynamic version;
+  final dynamic version;
 
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
@@ -15672,19 +15686,19 @@
 abstract class IDBIndex {
 
   /** @domName IDBIndex.keyPath */
-  abstract Dynamic get keyPath;
+  dynamic get keyPath;
 
   /** @domName IDBIndex.multiEntry */
-  abstract bool get multiEntry;
+  bool get multiEntry;
 
   /** @domName IDBIndex.name */
-  abstract String get name;
+  String get name;
 
   /** @domName IDBIndex.objectStore */
-  abstract IDBObjectStore get objectStore;
+  IDBObjectStore get objectStore;
 
   /** @domName IDBIndex.unique */
-  abstract bool get unique;
+  bool get unique;
 
   /** @domName IDBIndex.count */
   IDBRequest count([key_OR_range]);
@@ -15696,15 +15710,15 @@
   IDBRequest getKey(key);
 
   /** @domName IDBIndex.openCursor */
-  IDBRequest openCursor([key_OR_range, direction]);
+  IDBRequest openCursor([key_OR_range, String direction]);
 
   /** @domName IDBIndex.openKeyCursor */
-  IDBRequest openKeyCursor([key_OR_range, direction]);
+  IDBRequest openKeyCursor([key_OR_range, String direction]);
 }
 
 class _IDBIndexImpl implements IDBIndex native "*IDBIndex" {
 
-  final Dynamic keyPath;
+  final dynamic keyPath;
 
   final bool multiEntry;
 
@@ -15718,7 +15732,7 @@
     if (!?key_OR_range) {
       return _count_1();
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null)) {
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null)) {
       return _count_2(key_OR_range);
     }
     if (?key_OR_range) {
@@ -15732,7 +15746,7 @@
   _IDBRequestImpl _count_3(key) native "count";
 
   _IDBRequestImpl get(key) {
-    if ((key is IDBKeyRange || key === null)) {
+    if ((key is IDBKeyRange || key == null)) {
       return _get_1(key);
     }
     if (?key) {
@@ -15745,7 +15759,7 @@
   _IDBRequestImpl _get_2(key) native "get";
 
   _IDBRequestImpl getKey(key) {
-    if ((key is IDBKeyRange || key === null)) {
+    if ((key is IDBKeyRange || key == null)) {
       return _getKey_1(key);
     }
     if (?key) {
@@ -15762,12 +15776,12 @@
         !?direction) {
       return _openCursor_1();
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
         !?direction) {
       return _openCursor_2(key_OR_range);
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
-        (direction is String || direction === null)) {
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
+        (direction is String || direction == null)) {
       return _openCursor_3(key_OR_range, direction);
     }
     if (?key_OR_range &&
@@ -15776,27 +15790,10 @@
       return _openCursor_4(key_1);
     }
     if (?key_OR_range &&
-        (direction is String || direction === null)) {
+        (direction is String || direction == null)) {
       var key_2 = _convertDartToNative_IDBKey(key_OR_range);
       return _openCursor_5(key_2, direction);
     }
-    if (!?key_OR_range &&
-        !?direction) {
-      return _openCursor_6();
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
-        !?direction) {
-      return _openCursor_7(key_OR_range);
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
-        (direction is int || direction === null)) {
-      return _openCursor_8(key_OR_range, direction);
-    }
-    if (?key_OR_range &&
-        (direction is int || direction === null)) {
-      var key_3 = _convertDartToNative_IDBKey(key_OR_range);
-      return _openCursor_9(key_3, direction);
-    }
     throw const Exception("Incorrect number or type of arguments");
   }
   _IDBRequestImpl _openCursor_1() native "openCursor";
@@ -15804,22 +15801,18 @@
   _IDBRequestImpl _openCursor_3(_IDBKeyRangeImpl range, String direction) native "openCursor";
   _IDBRequestImpl _openCursor_4(key) native "openCursor";
   _IDBRequestImpl _openCursor_5(key, String direction) native "openCursor";
-  _IDBRequestImpl _openCursor_6() native "openCursor";
-  _IDBRequestImpl _openCursor_7(_IDBKeyRangeImpl range) native "openCursor";
-  _IDBRequestImpl _openCursor_8(_IDBKeyRangeImpl range, int direction) native "openCursor";
-  _IDBRequestImpl _openCursor_9(key, int direction) native "openCursor";
 
   _IDBRequestImpl openKeyCursor([key_OR_range, direction]) {
     if (!?key_OR_range &&
         !?direction) {
       return _openKeyCursor_1();
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
         !?direction) {
       return _openKeyCursor_2(key_OR_range);
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
-        (direction is String || direction === null)) {
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
+        (direction is String || direction == null)) {
       return _openKeyCursor_3(key_OR_range, direction);
     }
     if (?key_OR_range &&
@@ -15828,27 +15821,10 @@
       return _openKeyCursor_4(key_1);
     }
     if (?key_OR_range &&
-        (direction is String || direction === null)) {
+        (direction is String || direction == null)) {
       var key_2 = _convertDartToNative_IDBKey(key_OR_range);
       return _openKeyCursor_5(key_2, direction);
     }
-    if (!?key_OR_range &&
-        !?direction) {
-      return _openKeyCursor_6();
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
-        !?direction) {
-      return _openKeyCursor_7(key_OR_range);
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
-        (direction is int || direction === null)) {
-      return _openKeyCursor_8(key_OR_range, direction);
-    }
-    if (?key_OR_range &&
-        (direction is int || direction === null)) {
-      var key_3 = _convertDartToNative_IDBKey(key_OR_range);
-      return _openKeyCursor_9(key_3, direction);
-    }
     throw const Exception("Incorrect number or type of arguments");
   }
   _IDBRequestImpl _openKeyCursor_1() native "openKeyCursor";
@@ -15856,10 +15832,6 @@
   _IDBRequestImpl _openKeyCursor_3(_IDBKeyRangeImpl range, String direction) native "openKeyCursor";
   _IDBRequestImpl _openKeyCursor_4(key) native "openKeyCursor";
   _IDBRequestImpl _openKeyCursor_5(key, String direction) native "openKeyCursor";
-  _IDBRequestImpl _openKeyCursor_6() native "openKeyCursor";
-  _IDBRequestImpl _openKeyCursor_7(_IDBKeyRangeImpl range) native "openKeyCursor";
-  _IDBRequestImpl _openKeyCursor_8(_IDBKeyRangeImpl range, int direction) native "openKeyCursor";
-  _IDBRequestImpl _openKeyCursor_9(key, int direction) native "openKeyCursor";
 }
 // 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
@@ -15879,6 +15851,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName IDBKeyRange
 abstract class IDBKeyRange {
 
@@ -15910,16 +15883,16 @@
 
 
   /** @domName IDBKeyRange.lower */
-  abstract Dynamic get lower;
+  dynamic get lower;
 
   /** @domName IDBKeyRange.lowerOpen */
-  abstract bool get lowerOpen;
+  bool get lowerOpen;
 
   /** @domName IDBKeyRange.upper */
-  abstract Dynamic get upper;
+  dynamic get upper;
 
   /** @domName IDBKeyRange.upperOpen */
-  abstract bool get upperOpen;
+  bool get upperOpen;
 
   /** @domName IDBKeyRange.bound_ */
   static final bound_ = _IDBKeyRangeImpl.bound_;
@@ -15936,13 +15909,13 @@
 
 class _IDBKeyRangeImpl implements IDBKeyRange native "*IDBKeyRange" {
 
-  Dynamic get lower => _convertNativeToDart_IDBKey(this._lower);
-  Dynamic get _lower() => JS("Dynamic", "#.lower", this);
+  dynamic get lower => _convertNativeToDart_IDBKey(this._lower);
+  dynamic get _lower => JS("dynamic", "#.lower", this);
 
   final bool lowerOpen;
 
-  Dynamic get upper => _convertNativeToDart_IDBKey(this._upper);
-  Dynamic get _upper() => JS("Dynamic", "#.upper", this);
+  dynamic get upper => _convertNativeToDart_IDBKey(this._upper);
+  dynamic get _upper => JS("dynamic", "#.upper", this);
 
   final bool upperOpen;
 
@@ -16003,19 +15976,19 @@
 abstract class IDBObjectStore {
 
   /** @domName IDBObjectStore.autoIncrement */
-  abstract bool get autoIncrement;
+  bool get autoIncrement;
 
   /** @domName IDBObjectStore.indexNames */
-  abstract List<String> get indexNames;
+  List<String> get indexNames;
 
   /** @domName IDBObjectStore.keyPath */
-  abstract Dynamic get keyPath;
+  dynamic get keyPath;
 
   /** @domName IDBObjectStore.name */
-  abstract String get name;
+  String get name;
 
   /** @domName IDBObjectStore.transaction */
-  abstract IDBTransaction get transaction;
+  IDBTransaction get transaction;
 
   /** @domName IDBObjectStore.add */
   IDBRequest add(Object value, [/*IDBKey*/ key]);
@@ -16042,7 +16015,7 @@
   IDBIndex index(String name);
 
   /** @domName IDBObjectStore.openCursor */
-  IDBRequest openCursor([key_OR_range, direction]);
+  IDBRequest openCursor([key_OR_range, String direction]);
 
   /** @domName IDBObjectStore.put */
   IDBRequest put(Object value, [/*IDBKey*/ key]);
@@ -16054,7 +16027,7 @@
 
   final _DOMStringListImpl indexNames;
 
-  final Dynamic keyPath;
+  final dynamic keyPath;
 
   final String name;
 
@@ -16078,7 +16051,7 @@
     if (!?key_OR_range) {
       return _count_1();
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null)) {
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null)) {
       return _count_2(key_OR_range);
     }
     if (?key_OR_range) {
@@ -16092,23 +16065,23 @@
   _IDBRequestImpl _count_3(key) native "count";
 
   _IDBIndexImpl createIndex(String name, keyPath, [options]) {
-    if ((keyPath is List<String> || keyPath === null) &&
+    if ((keyPath is List<String> || keyPath == null) &&
         !?options) {
       List keyPath_1 = _convertDartToNative_StringArray(keyPath);
       return _createIndex_1(name, keyPath_1);
     }
-    if ((keyPath is List<String> || keyPath === null) &&
-        (options is Map || options === null)) {
+    if ((keyPath is List<String> || keyPath == null) &&
+        (options is Map || options == null)) {
       List keyPath_2 = _convertDartToNative_StringArray(keyPath);
       var options_3 = _convertDartToNative_Dictionary(options);
       return _createIndex_2(name, keyPath_2, options_3);
     }
-    if ((keyPath is String || keyPath === null) &&
+    if ((keyPath is String || keyPath == null) &&
         !?options) {
       return _createIndex_3(name, keyPath);
     }
-    if ((keyPath is String || keyPath === null) &&
-        (options is Map || options === null)) {
+    if ((keyPath is String || keyPath == null) &&
+        (options is Map || options == null)) {
       var options_4 = _convertDartToNative_Dictionary(options);
       return _createIndex_4(name, keyPath, options_4);
     }
@@ -16120,7 +16093,7 @@
   _IDBIndexImpl _createIndex_4(name, String keyPath, options) native "createIndex";
 
   _IDBRequestImpl delete(key_OR_keyRange) {
-    if ((key_OR_keyRange is IDBKeyRange || key_OR_keyRange === null)) {
+    if ((key_OR_keyRange is IDBKeyRange || key_OR_keyRange == null)) {
       return _delete_1(key_OR_keyRange);
     }
     if (?key_OR_keyRange) {
@@ -16135,7 +16108,7 @@
   void deleteIndex(String name) native;
 
   _IDBRequestImpl getObject(key) {
-    if ((key is IDBKeyRange || key === null)) {
+    if ((key is IDBKeyRange || key == null)) {
       return _getObject_1(key);
     }
     if (?key) {
@@ -16154,12 +16127,12 @@
         !?direction) {
       return _openCursor_1();
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
         !?direction) {
       return _openCursor_2(key_OR_range);
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
-        (direction is String || direction === null)) {
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
+        (direction is String || direction == null)) {
       return _openCursor_3(key_OR_range, direction);
     }
     if (?key_OR_range &&
@@ -16168,27 +16141,10 @@
       return _openCursor_4(key_1);
     }
     if (?key_OR_range &&
-        (direction is String || direction === null)) {
+        (direction is String || direction == null)) {
       var key_2 = _convertDartToNative_IDBKey(key_OR_range);
       return _openCursor_5(key_2, direction);
     }
-    if (!?key_OR_range &&
-        !?direction) {
-      return _openCursor_6();
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
-        !?direction) {
-      return _openCursor_7(key_OR_range);
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) &&
-        (direction is int || direction === null)) {
-      return _openCursor_8(key_OR_range, direction);
-    }
-    if (?key_OR_range &&
-        (direction is int || direction === null)) {
-      var key_3 = _convertDartToNative_IDBKey(key_OR_range);
-      return _openCursor_9(key_3, direction);
-    }
     throw const Exception("Incorrect number or type of arguments");
   }
   _IDBRequestImpl _openCursor_1() native "openCursor";
@@ -16196,10 +16152,6 @@
   _IDBRequestImpl _openCursor_3(_IDBKeyRangeImpl range, String direction) native "openCursor";
   _IDBRequestImpl _openCursor_4(key) native "openCursor";
   _IDBRequestImpl _openCursor_5(key, String direction) native "openCursor";
-  _IDBRequestImpl _openCursor_6() native "openCursor";
-  _IDBRequestImpl _openCursor_7(_IDBKeyRangeImpl range) native "openCursor";
-  _IDBRequestImpl _openCursor_8(_IDBKeyRangeImpl range, int direction) native "openCursor";
-  _IDBRequestImpl _openCursor_9(key, int direction) native "openCursor";
 
   _IDBRequestImpl put(/*any*/ value, [key]) {
     if (?key) {
@@ -16271,25 +16223,25 @@
   IDBRequestEvents get on;
 
   /** @domName IDBRequest.error */
-  abstract DOMError get error;
+  DOMError get error;
 
   /** @domName IDBRequest.errorCode */
-  abstract int get errorCode;
+  int get errorCode;
 
   /** @domName IDBRequest.readyState */
-  abstract String get readyState;
+  String get readyState;
 
   /** @domName IDBRequest.result */
-  abstract Dynamic get result;
+  dynamic get result;
 
   /** @domName IDBRequest.source */
-  abstract Dynamic get source;
+  dynamic get source;
 
   /** @domName IDBRequest.transaction */
-  abstract IDBTransaction get transaction;
+  IDBTransaction get transaction;
 
   /** @domName IDBRequest.webkitErrorMessage */
-  abstract String get webkitErrorMessage;
+  String get webkitErrorMessage;
 
   /** @domName IDBRequest.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -16319,10 +16271,10 @@
 
   final String readyState;
 
-  Dynamic get result => _convertNativeToDart_IDBAny(this._result);
-  Dynamic get _result() => JS("Dynamic", "#.result", this);
+  dynamic get result => _convertNativeToDart_IDBAny(this._result);
+  dynamic get _result => JS("dynamic", "#.result", this);
 
-  final Dynamic source;
+  final dynamic source;
 
   final _IDBTransactionImpl transaction;
 
@@ -16363,13 +16315,13 @@
   static const int VERSION_CHANGE = 2;
 
   /** @domName IDBTransaction.db */
-  abstract IDBDatabase get db;
+  IDBDatabase get db;
 
   /** @domName IDBTransaction.error */
-  abstract DOMError get error;
+  DOMError get error;
 
   /** @domName IDBTransaction.mode */
-  abstract String get mode;
+  String get mode;
 
   /** @domName IDBTransaction.abort */
   void abort();
@@ -16437,10 +16389,10 @@
 abstract class IDBUpgradeNeededEvent implements Event {
 
   /** @domName IDBVersionChangeEvent.newVersion */
-  abstract int get newVersion;
+  int get newVersion;
 
   /** @domName IDBVersionChangeEvent.oldVersion */
-  abstract int get oldVersion;
+  int get oldVersion;
 }
 
 class _IDBUpgradeNeededEventImpl extends _EventImpl implements IDBUpgradeNeededEvent native "*IDBVersionChangeEvent" {
@@ -16459,7 +16411,7 @@
 abstract class IDBVersionChangeEvent implements Event {
 
   /** @domName IDBVersionChangeEvent.version */
-  abstract String get version;
+  String get version;
 }
 
 class _IDBVersionChangeEventImpl extends _EventImpl implements IDBVersionChangeEvent native "*IDBVersionChangeEvent" {
@@ -16520,7 +16472,7 @@
   String align;
 
   /** @domName HTMLIFrameElement.contentWindow */
-  abstract Window get contentWindow;
+  Window get contentWindow;
 
   /** @domName HTMLIFrameElement.frameBorder */
   String frameBorder;
@@ -16554,9 +16506,6 @@
 
   /** @domName HTMLIFrameElement.width */
   String width;
-
-  /** @domName HTMLIFrameElement.getSVGDocument */
-  SVGDocument getSVGDocument();
 }
 
 class _IFrameElementImpl extends _ElementImpl implements IFrameElement native "*HTMLIFrameElement" {
@@ -16564,7 +16513,7 @@
   String align;
 
   Window get contentWindow => _convertNativeToDart_Window(this._contentWindow);
-  Window get _contentWindow() => JS("Window", "#.contentWindow", this);
+  Window get _contentWindow => JS("Window", "#.contentWindow", this);
 
   String frameBorder;
 
@@ -16587,8 +16536,6 @@
   String srcdoc;
 
   String width;
-
-  _SVGDocumentImpl getSVGDocument() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -16596,6 +16543,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void IceCallback(IceCandidate candidate, bool moreToFollow, PeerConnection00 source);
 // 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
@@ -16609,7 +16557,7 @@
   factory IceCandidate(String label, String candidateLine) => _IceCandidateFactoryProvider.createIceCandidate(label, candidateLine);
 
   /** @domName IceCandidate.label */
-  abstract String get label;
+  String get label;
 
   /** @domName IceCandidate.toSdp */
   String toSdp();
@@ -16631,13 +16579,13 @@
 abstract class ImageData {
 
   /** @domName ImageData.data */
-  abstract Uint8ClampedArray get data;
+  Uint8ClampedArray get data;
 
   /** @domName ImageData.height */
-  abstract int get height;
+  int get height;
 
   /** @domName ImageData.width */
-  abstract int get width;
+  int get width;
 }
 
 class _ImageDataImpl implements ImageData native "*ImageData" {
@@ -16680,7 +16628,7 @@
   String border;
 
   /** @domName HTMLImageElement.complete */
-  abstract bool get complete;
+  bool get complete;
 
   /** @domName HTMLImageElement.crossOrigin */
   String crossOrigin;
@@ -16704,10 +16652,10 @@
   String name;
 
   /** @domName HTMLImageElement.naturalHeight */
-  abstract int get naturalHeight;
+  int get naturalHeight;
 
   /** @domName HTMLImageElement.naturalWidth */
-  abstract int get naturalWidth;
+  int get naturalWidth;
 
   /** @domName HTMLImageElement.src */
   String src;
@@ -16722,10 +16670,10 @@
   int width;
 
   /** @domName HTMLImageElement.x */
-  abstract int get x;
+  int get x;
 
   /** @domName HTMLImageElement.y */
-  abstract int get y;
+  int get y;
 }
 
 class _ImageElementImpl extends _ElementImpl implements ImageElement native "*HTMLImageElement" {
@@ -16820,7 +16768,7 @@
   List<File> files;
 
   /** @domName HTMLInputElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLInputElement.formAction */
   String formAction;
@@ -16847,10 +16795,10 @@
   bool indeterminate;
 
   /** @domName HTMLInputElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLInputElement.list */
-  abstract Element get list;
+  Element get list;
 
   /** @domName HTMLInputElement.max */
   String max;
@@ -16904,10 +16852,10 @@
   String useMap;
 
   /** @domName HTMLInputElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLInputElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLInputElement.value */
   String value;
@@ -16919,7 +16867,7 @@
   num valueAsNumber;
 
   /** @domName HTMLInputElement.webkitEntries */
-  abstract List<Entry> get webkitEntries;
+  List<Entry> get webkitEntries;
 
   /** @domName HTMLInputElement.webkitGrammar */
   bool webkitGrammar;
@@ -16934,7 +16882,7 @@
   int width;
 
   /** @domName HTMLInputElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLInputElement.checkValidity */
   bool checkValidity();
@@ -17102,7 +17050,7 @@
   static const int BYTES_PER_ELEMENT = 2;
 
   /** @domName Int16Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Int16Array.setElements */
   void setElements(Object array, [int offset]);
@@ -17133,15 +17081,15 @@
   // From Collection<int>:
 
   void add(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<int> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(int element) => _Collections.contains(this, element);
@@ -17157,38 +17105,38 @@
 
   bool some(bool f(int element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<int>:
 
   void sort([Comparator<int> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(int element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(int element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  int last() => this[length - 1];
+  int get last => this[length - 1];
 
   int removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<int> getRange(int start, int rangeLength) =>
@@ -17221,7 +17169,7 @@
   static const int BYTES_PER_ELEMENT = 4;
 
   /** @domName Int32Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Int32Array.setElements */
   void setElements(Object array, [int offset]);
@@ -17252,15 +17200,15 @@
   // From Collection<int>:
 
   void add(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<int> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(int element) => _Collections.contains(this, element);
@@ -17276,38 +17224,38 @@
 
   bool some(bool f(int element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<int>:
 
   void sort([Comparator<int> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(int element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(int element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  int last() => this[length - 1];
+  int get last => this[length - 1];
 
   int removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<int> getRange(int start, int rangeLength) =>
@@ -17340,7 +17288,7 @@
   static const int BYTES_PER_ELEMENT = 1;
 
   /** @domName Int8Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Int8Array.setElements */
   void setElements(Object array, [int offset]);
@@ -17371,15 +17319,15 @@
   // From Collection<int>:
 
   void add(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<int> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(int element) => _Collections.contains(this, element);
@@ -17395,38 +17343,38 @@
 
   bool some(bool f(int element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<int>:
 
   void sort([Comparator<int> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(int element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(int element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  int last() => this[length - 1];
+  int get last => this[length - 1];
 
   int removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<int> getRange(int start, int rangeLength) =>
@@ -17453,7 +17401,7 @@
   JavaScriptAudioNodeEvents get on;
 
   /** @domName JavaScriptAudioNode.bufferSize */
-  abstract int get bufferSize;
+  int get bufferSize;
 }
 
 abstract class JavaScriptAudioNodeEvents implements Events {
@@ -17502,28 +17450,28 @@
   static const int WITH_SCOPE = 2;
 
   /** @domName JavaScriptCallFrame.caller */
-  abstract JavaScriptCallFrame get caller;
+  JavaScriptCallFrame get caller;
 
   /** @domName JavaScriptCallFrame.column */
-  abstract int get column;
+  int get column;
 
   /** @domName JavaScriptCallFrame.functionName */
-  abstract String get functionName;
+  String get functionName;
 
   /** @domName JavaScriptCallFrame.line */
-  abstract int get line;
+  int get line;
 
   /** @domName JavaScriptCallFrame.scopeChain */
-  abstract List get scopeChain;
+  List get scopeChain;
 
   /** @domName JavaScriptCallFrame.sourceID */
-  abstract int get sourceID;
+  int get sourceID;
 
   /** @domName JavaScriptCallFrame.thisObject */
-  abstract Object get thisObject;
+  Object get thisObject;
 
   /** @domName JavaScriptCallFrame.type */
-  abstract String get type;
+  String get type;
 
   /** @domName JavaScriptCallFrame.evaluate */
   void evaluate(String script);
@@ -17569,25 +17517,25 @@
 abstract class KeyboardEvent implements UIEvent {
 
   /** @domName KeyboardEvent.altGraphKey */
-  abstract bool get altGraphKey;
+  bool get altGraphKey;
 
   /** @domName KeyboardEvent.altKey */
-  abstract bool get altKey;
+  bool get altKey;
 
   /** @domName KeyboardEvent.ctrlKey */
-  abstract bool get ctrlKey;
+  bool get ctrlKey;
 
   /** @domName KeyboardEvent.keyIdentifier */
-  abstract String get keyIdentifier;
+  String get keyIdentifier;
 
   /** @domName KeyboardEvent.keyLocation */
-  abstract int get keyLocation;
+  int get keyLocation;
 
   /** @domName KeyboardEvent.metaKey */
-  abstract bool get metaKey;
+  bool get metaKey;
 
   /** @domName KeyboardEvent.shiftKey */
-  abstract bool get shiftKey;
+  bool get shiftKey;
 
   /** @domName KeyboardEvent.initKeyboardEvent */
   void initKeyboardEvent(String type, bool canBubble, bool cancelable, LocalWindow view, String keyIdentifier, int keyLocation, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey);
@@ -17632,28 +17580,28 @@
   bool disabled;
 
   /** @domName HTMLKeygenElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLKeygenElement.keytype */
   String keytype;
 
   /** @domName HTMLKeygenElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLKeygenElement.name */
   String name;
 
   /** @domName HTMLKeygenElement.type */
-  abstract String get type;
+  String get type;
 
   /** @domName HTMLKeygenElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLKeygenElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLKeygenElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLKeygenElement.checkValidity */
   bool checkValidity();
@@ -17726,10 +17674,10 @@
   factory LabelElement() => _Elements.createLabelElement();
 
   /** @domName HTMLLabelElement.control */
-  abstract Element get control;
+  Element get control;
 
   /** @domName HTMLLabelElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLLabelElement.htmlFor */
   String htmlFor;
@@ -17758,7 +17706,7 @@
   String align;
 
   /** @domName HTMLLegendElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 }
 
 class _LegendElementImpl extends _ElementImpl implements LegendElement native "*HTMLLegendElement" {
@@ -17800,7 +17748,7 @@
   String rev;
 
   /** @domName HTMLLinkElement.sheet */
-  abstract StyleSheet get sheet;
+  StyleSheet get sheet;
 
   /** @domName HTMLLinkElement.sizes */
   DOMSettableTokenList sizes;
@@ -17846,10 +17794,10 @@
 abstract class LocalHistory implements History {
 
   /** @domName History.length */
-  abstract int get length;
+  int get length;
 
   /** @domName History.state */
-  abstract Dynamic get state;
+  dynamic get state;
 
   /** @domName History.back */
   void back();
@@ -17871,7 +17819,7 @@
 
   final int length;
 
-  final Dynamic state;
+  final dynamic state;
 
   void back() native;
 
@@ -17893,7 +17841,7 @@
 abstract class LocalLocation implements Location {
 
   /** @domName Location.ancestorOrigins */
-  abstract List<String> get ancestorOrigins;
+  List<String> get ancestorOrigins;
 
   /** @domName Location.hash */
   String hash;
@@ -17908,7 +17856,7 @@
   String href;
 
   /** @domName Location.origin */
-  abstract String get origin;
+  String get origin;
 
   /** @domName Location.pathname */
   String pathname;
@@ -17996,6 +17944,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName Window
 abstract class LocalWindow implements EventTarget, Window {
 
@@ -18040,19 +17989,19 @@
   static const int TEMPORARY = 0;
 
   /** @domName Window.applicationCache */
-  abstract DOMApplicationCache get applicationCache;
+  DOMApplicationCache get applicationCache;
 
   /** @domName Window.clientInformation */
-  abstract Navigator get clientInformation;
+  Navigator get clientInformation;
 
   /** @domName Window.closed */
-  abstract bool get closed;
+  bool get closed;
 
   /** @domName Window.console */
-  abstract Console get console;
+  Console get console;
 
   /** @domName Window.crypto */
-  abstract Crypto get crypto;
+  Crypto get crypto;
 
   /** @domName Window.defaultStatus */
   String defaultStatus;
@@ -18061,130 +18010,130 @@
   String defaultstatus;
 
   /** @domName Window.devicePixelRatio */
-  abstract num get devicePixelRatio;
+  num get devicePixelRatio;
 
   /** @domName Window.document */
-  abstract Document get document;
+  Document get document;
 
   /** @domName Window.event */
-  abstract Event get event;
+  Event get event;
 
   /** @domName Window.history */
-  abstract LocalHistory get history;
+  LocalHistory get history;
 
   /** @domName DOMWindow.indexedDB */
-  abstract IDBFactory get indexedDB;
+  IDBFactory get indexedDB;
 
   /** @domName Window.innerHeight */
-  abstract int get innerHeight;
+  int get innerHeight;
 
   /** @domName Window.innerWidth */
-  abstract int get innerWidth;
+  int get innerWidth;
 
   /** @domName Window.localStorage */
-  abstract Storage get localStorage;
+  Storage get localStorage;
 
   /** @domName Window.location */
   LocalLocation location;
 
   /** @domName Window.locationbar */
-  abstract BarInfo get locationbar;
+  BarInfo get locationbar;
 
   /** @domName Window.menubar */
-  abstract BarInfo get menubar;
+  BarInfo get menubar;
 
   /** @domName Window.name */
   String name;
 
   /** @domName Window.navigator */
-  abstract Navigator get navigator;
+  Navigator get navigator;
 
   /** @domName Window.offscreenBuffering */
-  abstract bool get offscreenBuffering;
+  bool get offscreenBuffering;
 
   /** @domName Window.opener */
-  abstract Window get opener;
+  Window get opener;
 
   /** @domName Window.outerHeight */
-  abstract int get outerHeight;
+  int get outerHeight;
 
   /** @domName Window.outerWidth */
-  abstract int get outerWidth;
+  int get outerWidth;
 
   /** @domName DOMWindow.pagePopupController */
-  abstract PagePopupController get pagePopupController;
+  PagePopupController get pagePopupController;
 
   /** @domName Window.pageXOffset */
-  abstract int get pageXOffset;
+  int get pageXOffset;
 
   /** @domName Window.pageYOffset */
-  abstract int get pageYOffset;
+  int get pageYOffset;
 
   /** @domName Window.parent */
-  abstract Window get parent;
+  Window get parent;
 
   /** @domName Window.performance */
-  abstract Performance get performance;
+  Performance get performance;
 
   /** @domName Window.personalbar */
-  abstract BarInfo get personalbar;
+  BarInfo get personalbar;
 
   /** @domName Window.screen */
-  abstract Screen get screen;
+  Screen get screen;
 
   /** @domName Window.screenLeft */
-  abstract int get screenLeft;
+  int get screenLeft;
 
   /** @domName Window.screenTop */
-  abstract int get screenTop;
+  int get screenTop;
 
   /** @domName Window.screenX */
-  abstract int get screenX;
+  int get screenX;
 
   /** @domName Window.screenY */
-  abstract int get screenY;
+  int get screenY;
 
   /** @domName Window.scrollX */
-  abstract int get scrollX;
+  int get scrollX;
 
   /** @domName Window.scrollY */
-  abstract int get scrollY;
+  int get scrollY;
 
   /** @domName Window.scrollbars */
-  abstract BarInfo get scrollbars;
+  BarInfo get scrollbars;
 
   /** @domName Window.self */
-  abstract Window get self;
+  Window get self;
 
   /** @domName Window.sessionStorage */
-  abstract Storage get sessionStorage;
+  Storage get sessionStorage;
 
   /** @domName Window.status */
   String status;
 
   /** @domName Window.statusbar */
-  abstract BarInfo get statusbar;
+  BarInfo get statusbar;
 
   /** @domName Window.styleMedia */
-  abstract StyleMedia get styleMedia;
+  StyleMedia get styleMedia;
 
   /** @domName Window.toolbar */
-  abstract BarInfo get toolbar;
+  BarInfo get toolbar;
 
   /** @domName Window.top */
-  abstract Window get top;
+  Window get top;
 
   /** @domName DOMWindow.webkitIndexedDB */
-  abstract IDBFactory get webkitIndexedDB;
+  IDBFactory get webkitIndexedDB;
 
   /** @domName DOMWindow.webkitNotifications */
-  abstract NotificationCenter get webkitNotifications;
+  NotificationCenter get webkitNotifications;
 
   /** @domName DOMWindow.webkitStorageInfo */
-  abstract StorageInfo get webkitStorageInfo;
+  StorageInfo get webkitStorageInfo;
 
   /** @domName Window.window */
-  abstract Window get window;
+  Window get window;
 
   /** @domName Window.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -18201,6 +18150,9 @@
   /** @domName Window.btoa */
   String btoa(String string);
 
+  /** @domName Window.cancelAnimationFrame */
+  void cancelAnimationFrame(int id);
+
   /** @domName Window.captureEvents */
   void captureEvents();
 
@@ -18264,6 +18216,9 @@
   /** @domName Window.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
 
+  /** @domName Window.requestAnimationFrame */
+  int requestAnimationFrame(RequestAnimationFrameCallback callback);
+
   /** @domName Window.resizeBy */
   void resizeBy(num x, num y);
 
@@ -18292,7 +18247,7 @@
   void stop();
 
   /** @domName Window.webkitCancelAnimationFrame */
-  void cancelAnimationFrame(int id);
+  void webkitCancelAnimationFrame(int id);
 
   /** @domName Window.webkitConvertPointFromNodeToPage */
   Point webkitConvertPointFromNodeToPage(Node node, Point p);
@@ -18301,7 +18256,7 @@
   Point webkitConvertPointFromPageToNode(Node node, Point p);
 
   /** @domName Window.webkitRequestAnimationFrame */
-  int requestAnimationFrame(RequestAnimationFrameCallback callback);
+  int webkitRequestAnimationFrame(RequestAnimationFrameCallback callback);
 
   /** @domName DOMWindow.webkitRequestFileSystem */
   void webkitRequestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]);
@@ -18465,7 +18420,7 @@
 
 class _LocalWindowImpl extends _EventTargetImpl implements LocalWindow native "@*DOMWindow" {
 
-  _DocumentImpl get document() => JS('_DocumentImpl', '#.document', this);
+  _DocumentImpl get document => JS('_DocumentImpl', '#.document', this);
 
   Window _open2(url, name) => JS('Window', '#.open(#,#)', this, url, name);
 
@@ -18515,7 +18470,7 @@
   var _location_wrapper;  // Cached wrapped Location object.
 
   // Native getter and setter to access raw Location object.
-  Location get _location() => JS('Location', '#.location', this);
+  Location get _location => JS('Location', '#.location', this);
   void set _location(Location value) {
     JS('void', '#.location = #', this, value);
   }
@@ -18650,7 +18605,7 @@
   final bool offscreenBuffering;
 
   Window get opener => _convertNativeToDart_Window(this._opener);
-  Window get _opener() => JS("Window", "#.opener", this);
+  Window get _opener => JS("Window", "#.opener", this);
 
   final int outerHeight;
 
@@ -18663,7 +18618,7 @@
   final int pageYOffset;
 
   Window get parent => _convertNativeToDart_Window(this._parent);
-  Window get _parent() => JS("Window", "#.parent", this);
+  Window get _parent => JS("Window", "#.parent", this);
 
   final _PerformanceImpl performance;
 
@@ -18686,7 +18641,7 @@
   final _BarInfoImpl scrollbars;
 
   Window get self => _convertNativeToDart_Window(this._self);
-  Window get _self() => JS("Window", "#.self", this);
+  Window get _self => JS("Window", "#.self", this);
 
   final _StorageImpl sessionStorage;
 
@@ -18699,7 +18654,7 @@
   final _BarInfoImpl toolbar;
 
   Window get top => _convertNativeToDart_Window(this._top);
-  Window get _top() => JS("Window", "#.top", this);
+  Window get _top => JS("Window", "#.top", this);
 
   final _IDBFactoryImpl webkitIndexedDB;
 
@@ -18708,7 +18663,7 @@
   final _StorageInfoImpl webkitStorageInfo;
 
   Window get window => _convertNativeToDart_Window(this._window);
-  Window get _window() => JS("Window", "#.window", this);
+  Window get _window => JS("Window", "#.window", this);
 
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
@@ -18758,7 +18713,7 @@
       return;
     }
     if (?message &&
-        (messagePorts is List || messagePorts === null)) {
+        (messagePorts is List || messagePorts == null)) {
       var message_2 = _convertDartToNative_SerializedScriptValue(message);
       _postMessage_2(message_2, targetOrigin, messagePorts);
       return;
@@ -18965,7 +18920,7 @@
   factory MapElement() => _Elements.createMapElement();
 
   /** @domName HTMLMapElement.areas */
-  abstract HTMLCollection get areas;
+  HTMLCollection get areas;
 
   /** @domName HTMLMapElement.name */
   String name;
@@ -19066,7 +19021,7 @@
   factory MediaController() => _MediaControllerFactoryProvider.createMediaController();
 
   /** @domName MediaController.buffered */
-  abstract TimeRanges get buffered;
+  TimeRanges get buffered;
 
   /** @domName MediaController.currentTime */
   num currentTime;
@@ -19075,22 +19030,22 @@
   num defaultPlaybackRate;
 
   /** @domName MediaController.duration */
-  abstract num get duration;
+  num get duration;
 
   /** @domName MediaController.muted */
   bool muted;
 
   /** @domName MediaController.paused */
-  abstract bool get paused;
+  bool get paused;
 
   /** @domName MediaController.playbackRate */
   num playbackRate;
 
   /** @domName MediaController.played */
-  abstract TimeRanges get played;
+  TimeRanges get played;
 
   /** @domName MediaController.seekable */
-  abstract TimeRanges get seekable;
+  TimeRanges get seekable;
 
   /** @domName MediaController.volume */
   num volume;
@@ -19179,7 +19134,7 @@
   bool autoplay;
 
   /** @domName HTMLMediaElement.buffered */
-  abstract TimeRanges get buffered;
+  TimeRanges get buffered;
 
   /** @domName HTMLMediaElement.controller */
   MediaController controller;
@@ -19188,7 +19143,7 @@
   bool controls;
 
   /** @domName HTMLMediaElement.currentSrc */
-  abstract String get currentSrc;
+  String get currentSrc;
 
   /** @domName HTMLMediaElement.currentTime */
   num currentTime;
@@ -19200,16 +19155,16 @@
   num defaultPlaybackRate;
 
   /** @domName HTMLMediaElement.duration */
-  abstract num get duration;
+  num get duration;
 
   /** @domName HTMLMediaElement.ended */
-  abstract bool get ended;
+  bool get ended;
 
   /** @domName HTMLMediaElement.error */
-  abstract MediaError get error;
+  MediaError get error;
 
   /** @domName HTMLMediaElement.initialTime */
-  abstract num get initialTime;
+  num get initialTime;
 
   /** @domName HTMLMediaElement.loop */
   bool loop;
@@ -19221,55 +19176,55 @@
   bool muted;
 
   /** @domName HTMLMediaElement.networkState */
-  abstract int get networkState;
+  int get networkState;
 
   /** @domName HTMLMediaElement.paused */
-  abstract bool get paused;
+  bool get paused;
 
   /** @domName HTMLMediaElement.playbackRate */
   num playbackRate;
 
   /** @domName HTMLMediaElement.played */
-  abstract TimeRanges get played;
+  TimeRanges get played;
 
   /** @domName HTMLMediaElement.preload */
   String preload;
 
   /** @domName HTMLMediaElement.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName HTMLMediaElement.seekable */
-  abstract TimeRanges get seekable;
+  TimeRanges get seekable;
 
   /** @domName HTMLMediaElement.seeking */
-  abstract bool get seeking;
+  bool get seeking;
 
   /** @domName HTMLMediaElement.src */
   String src;
 
   /** @domName HTMLMediaElement.startTime */
-  abstract num get startTime;
+  num get startTime;
 
   /** @domName HTMLMediaElement.textTracks */
-  abstract TextTrackList get textTracks;
+  TextTrackList get textTracks;
 
   /** @domName HTMLMediaElement.volume */
   num volume;
 
   /** @domName HTMLMediaElement.webkitAudioDecodedByteCount */
-  abstract int get webkitAudioDecodedByteCount;
+  int get webkitAudioDecodedByteCount;
 
   /** @domName HTMLMediaElement.webkitClosedCaptionsVisible */
   bool webkitClosedCaptionsVisible;
 
   /** @domName HTMLMediaElement.webkitHasClosedCaptions */
-  abstract bool get webkitHasClosedCaptions;
+  bool get webkitHasClosedCaptions;
 
   /** @domName HTMLMediaElement.webkitPreservesPitch */
   bool webkitPreservesPitch;
 
   /** @domName HTMLMediaElement.webkitVideoDecodedByteCount */
-  abstract int get webkitVideoDecodedByteCount;
+  int get webkitVideoDecodedByteCount;
 
   /** @domName HTMLMediaElement.addTextTrack */
   TextTrack addTextTrack(String kind, [String label, String language]);
@@ -19358,7 +19313,7 @@
 abstract class MediaElementAudioSourceNode implements AudioSourceNode {
 
   /** @domName MediaElementAudioSourceNode.mediaElement */
-  abstract MediaElement get mediaElement;
+  MediaElement get mediaElement;
 }
 
 class _MediaElementAudioSourceNodeImpl extends _AudioSourceNodeImpl implements MediaElementAudioSourceNode native "*MediaElementAudioSourceNode" {
@@ -19525,7 +19480,7 @@
   static const int MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
 
   /** @domName MediaError.code */
-  abstract int get code;
+  int get code;
 }
 
 class _MediaErrorImpl implements MediaError native "*MediaError" {
@@ -19554,7 +19509,7 @@
   static const int MEDIA_KEYERR_UNKNOWN = 1;
 
   /** @domName MediaKeyError.code */
-  abstract int get code;
+  int get code;
 }
 
 class _MediaKeyErrorImpl implements MediaKeyError native "*MediaKeyError" {
@@ -19571,25 +19526,25 @@
 abstract class MediaKeyEvent implements Event {
 
   /** @domName MediaKeyEvent.defaultURL */
-  abstract String get defaultURL;
+  String get defaultURL;
 
   /** @domName MediaKeyEvent.errorCode */
-  abstract MediaKeyError get errorCode;
+  MediaKeyError get errorCode;
 
   /** @domName MediaKeyEvent.initData */
-  abstract Uint8Array get initData;
+  Uint8Array get initData;
 
   /** @domName MediaKeyEvent.keySystem */
-  abstract String get keySystem;
+  String get keySystem;
 
   /** @domName MediaKeyEvent.message */
-  abstract Uint8Array get message;
+  Uint8Array get message;
 
   /** @domName MediaKeyEvent.sessionId */
-  abstract String get sessionId;
+  String get sessionId;
 
   /** @domName MediaKeyEvent.systemCode */
-  abstract int get systemCode;
+  int get systemCode;
 }
 
 class _MediaKeyEventImpl extends _EventImpl implements MediaKeyEvent native "*MediaKeyEvent" {
@@ -19618,7 +19573,7 @@
 abstract class MediaList {
 
   /** @domName MediaList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName MediaList.mediaText */
   String mediaText;
@@ -19655,10 +19610,10 @@
 abstract class MediaQueryList {
 
   /** @domName MediaQueryList.matches */
-  abstract bool get matches;
+  bool get matches;
 
   /** @domName MediaQueryList.media */
-  abstract String get media;
+  String get media;
 
   /** @domName MediaQueryList.addListener */
   void addListener(MediaQueryListListener listener);
@@ -19701,16 +19656,16 @@
   factory MediaSource() => _MediaSourceFactoryProvider.createMediaSource();
 
   /** @domName MediaSource.activeSourceBuffers */
-  abstract SourceBufferList get activeSourceBuffers;
+  SourceBufferList get activeSourceBuffers;
 
   /** @domName MediaSource.duration */
   num duration;
 
   /** @domName MediaSource.readyState */
-  abstract String get readyState;
+  String get readyState;
 
   /** @domName MediaSource.sourceBuffers */
-  abstract SourceBufferList get sourceBuffers;
+  SourceBufferList get sourceBuffers;
 
   /** @domName MediaSource.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -19774,16 +19729,16 @@
   static const int LIVE = 1;
 
   /** @domName MediaStream.audioTracks */
-  abstract MediaStreamTrackList get audioTracks;
+  MediaStreamTrackList get audioTracks;
 
   /** @domName MediaStream.label */
-  abstract String get label;
+  String get label;
 
   /** @domName MediaStream.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName MediaStream.videoTracks */
-  abstract MediaStreamTrackList get videoTracks;
+  MediaStreamTrackList get videoTracks;
 
   /** @domName MediaStream.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -19809,7 +19764,7 @@
 abstract class MediaStreamAudioSourceNode implements AudioSourceNode {
 
   /** @domName MediaStreamAudioSourceNode.mediaStream */
-  abstract MediaStream get mediaStream;
+  MediaStream get mediaStream;
 }
 
 class _MediaStreamAudioSourceNodeImpl extends _AudioSourceNodeImpl implements MediaStreamAudioSourceNode native "*MediaStreamAudioSourceNode" {
@@ -19826,7 +19781,7 @@
 abstract class MediaStreamEvent implements Event {
 
   /** @domName MediaStreamEvent.stream */
-  abstract MediaStream get stream;
+  MediaStream get stream;
 }
 
 class _MediaStreamEventImpl extends _EventImpl implements MediaStreamEvent native "*MediaStreamEvent" {
@@ -19867,7 +19822,7 @@
   _MediaStreamImpl operator[](int index) => JS("_MediaStreamImpl", "#[#]", this, index);
 
   void operator[]=(int index, _MediaStreamImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<MediaStream> mixins.
   // MediaStream is the element type.
@@ -19884,15 +19839,15 @@
   // From Collection<MediaStream>:
 
   void add(MediaStream value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(MediaStream value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<MediaStream> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(MediaStream element) => _Collections.contains(this, element);
@@ -19908,38 +19863,38 @@
 
   bool some(bool f(MediaStream element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<MediaStream>:
 
   void sort([Comparator<MediaStream> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(MediaStream element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(MediaStream element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  MediaStream last() => this[length - 1];
+  MediaStream get last => this[length - 1];
 
   MediaStream removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<MediaStream> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [MediaStream initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<MediaStream> getRange(int start, int rangeLength) =>
@@ -19973,13 +19928,13 @@
   bool enabled;
 
   /** @domName MediaStreamTrack.kind */
-  abstract String get kind;
+  String get kind;
 
   /** @domName MediaStreamTrack.label */
-  abstract String get label;
+  String get label;
 
   /** @domName MediaStreamTrack.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName MediaStreamTrack.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -20009,7 +19964,7 @@
 abstract class MediaStreamTrackEvent implements Event {
 
   /** @domName MediaStreamTrackEvent.track */
-  abstract MediaStreamTrack get track;
+  MediaStreamTrack get track;
 }
 
 class _MediaStreamTrackEventImpl extends _EventImpl implements MediaStreamTrackEvent native "*MediaStreamTrackEvent" {
@@ -20061,7 +20016,7 @@
   MediaStreamTrackListEvents get on;
 
   /** @domName MediaStreamTrackList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName MediaStreamTrackList.add */
   void add(MediaStreamTrack track);
@@ -20126,13 +20081,13 @@
 abstract class MemoryInfo {
 
   /** @domName MemoryInfo.jsHeapSizeLimit */
-  abstract int get jsHeapSizeLimit;
+  int get jsHeapSizeLimit;
 
   /** @domName MemoryInfo.totalJSHeapSize */
-  abstract int get totalJSHeapSize;
+  int get totalJSHeapSize;
 
   /** @domName MemoryInfo.usedJSHeapSize */
-  abstract int get usedJSHeapSize;
+  int get usedJSHeapSize;
 }
 
 class _MemoryInfoImpl implements MemoryInfo native "*MemoryInfo" {
@@ -20174,10 +20129,10 @@
   factory MessageChannel() => _MessageChannelFactoryProvider.createMessageChannel();
 
   /** @domName MessageChannel.port1 */
-  abstract MessagePort get port1;
+  MessagePort get port1;
 
   /** @domName MessageChannel.port2 */
-  abstract MessagePort get port2;
+  MessagePort get port2;
 }
 
 class _MessageChannelImpl implements MessageChannel native "*MessageChannel" {
@@ -20196,19 +20151,19 @@
 abstract class MessageEvent implements Event {
 
   /** @domName MessageEvent.data */
-  abstract Object get data;
+  Object get data;
 
   /** @domName MessageEvent.lastEventId */
-  abstract String get lastEventId;
+  String get lastEventId;
 
   /** @domName MessageEvent.origin */
-  abstract String get origin;
+  String get origin;
 
   /** @domName MessageEvent.ports */
-  abstract List get ports;
+  List get ports;
 
   /** @domName MessageEvent.source */
-  abstract Window get source;
+  Window get source;
 
   /** @domName MessageEvent.initMessageEvent */
   void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List messagePorts);
@@ -20219,8 +20174,8 @@
 
 class _MessageEventImpl extends _EventImpl implements MessageEvent native "*MessageEvent" {
 
-  Dynamic get data => _convertNativeToDart_SerializedScriptValue(this._data);
-  Dynamic get _data() => JS("Dynamic", "#.data", this);
+  dynamic get data => _convertNativeToDart_SerializedScriptValue(this._data);
+  dynamic get _data => JS("dynamic", "#.data", this);
 
   final String lastEventId;
 
@@ -20229,7 +20184,7 @@
   final List ports;
 
   Window get source => _convertNativeToDart_Window(this._source);
-  Window get _source() => JS("Window", "#.source", this);
+  Window get _source => JS("Window", "#.source", this);
 
   void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, _LocalWindowImpl sourceArg, List messagePorts) native;
 
@@ -20349,10 +20304,10 @@
 abstract class Metadata {
 
   /** @domName Metadata.modificationTime */
-  abstract Date get modificationTime;
+  Date get modificationTime;
 
   /** @domName Metadata.size */
-  abstract int get size;
+  int get size;
 }
 // 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
@@ -20360,6 +20315,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void MetadataCallback(Metadata metadata);
 
 class _MetadataImpl implements Metadata native "*Metadata" {
@@ -20383,7 +20339,7 @@
   num high;
 
   /** @domName HTMLMeterElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLMeterElement.low */
   num low;
@@ -20445,6 +20401,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName MouseEvent
 abstract class MouseEvent implements UIEvent {
 
@@ -20461,61 +20418,61 @@
 
 
   /** @domName MouseEvent.altKey */
-  abstract bool get altKey;
+  bool get altKey;
 
   /** @domName MouseEvent.button */
-  abstract int get button;
+  int get button;
 
   /** @domName MouseEvent.clientX */
-  abstract int get clientX;
+  int get clientX;
 
   /** @domName MouseEvent.clientY */
-  abstract int get clientY;
+  int get clientY;
 
   /** @domName MouseEvent.ctrlKey */
-  abstract bool get ctrlKey;
+  bool get ctrlKey;
 
   /** @domName MouseEvent.dataTransfer */
-  abstract Clipboard get dataTransfer;
+  Clipboard get dataTransfer;
 
   /** @domName MouseEvent.fromElement */
-  abstract Node get fromElement;
+  Node get fromElement;
 
   /** @domName MouseEvent.metaKey */
-  abstract bool get metaKey;
+  bool get metaKey;
 
   /** @domName MouseEvent.offsetX */
-  abstract int get offsetX;
+  int get offsetX;
 
   /** @domName MouseEvent.offsetY */
-  abstract int get offsetY;
+  int get offsetY;
 
   /** @domName MouseEvent.relatedTarget */
-  abstract EventTarget get relatedTarget;
+  EventTarget get relatedTarget;
 
   /** @domName MouseEvent.screenX */
-  abstract int get screenX;
+  int get screenX;
 
   /** @domName MouseEvent.screenY */
-  abstract int get screenY;
+  int get screenY;
 
   /** @domName MouseEvent.shiftKey */
-  abstract bool get shiftKey;
+  bool get shiftKey;
 
   /** @domName MouseEvent.toElement */
-  abstract Node get toElement;
+  Node get toElement;
 
   /** @domName MouseEvent.webkitMovementX */
-  abstract int get webkitMovementX;
+  int get webkitMovementX;
 
   /** @domName MouseEvent.webkitMovementY */
-  abstract int get webkitMovementY;
+  int get webkitMovementY;
 
   /** @domName MouseEvent.x */
-  abstract int get x;
+  int get x;
 
   /** @domName MouseEvent.y */
-  abstract int get y;
+  int get y;
 
   /** @domName MouseEvent.initMouseEvent */
   void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget);
@@ -20543,7 +20500,7 @@
   final bool metaKey;
 
   EventTarget get relatedTarget => _convertNativeToDart_EventTarget(this._relatedTarget);
-  EventTarget get _relatedTarget() => JS("EventTarget", "#.relatedTarget", this);
+  EventTarget get _relatedTarget => JS("EventTarget", "#.relatedTarget", this);
 
   final int screenX;
 
@@ -20576,7 +20533,7 @@
       // Firefox does not support offsetX.
       var target = this.target;
       if (!(target is Element)) {
-        throw const UnsupportedOperationException(
+        throw new UnsupportedError(
             'offsetX is only supported on elements');
       }
       return this.clientX - this.target.getBoundingClientRect().left;
@@ -20590,7 +20547,7 @@
       // Firefox does not support offsetY.
       var target = this.target;
       if (!(target is Element)) {
-        throw const UnsupportedOperationException(
+        throw new UnsupportedError(
             'offsetY is only supported on elements');
       }
       return this.clientY - this.target.getBoundingClientRect().top;
@@ -20603,6 +20560,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void MutationCallback(List<MutationRecord> mutations, MutationObserver observer);
 // 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
@@ -20620,19 +20578,19 @@
   static const int REMOVAL = 3;
 
   /** @domName MutationEvent.attrChange */
-  abstract int get attrChange;
+  int get attrChange;
 
   /** @domName MutationEvent.attrName */
-  abstract String get attrName;
+  String get attrName;
 
   /** @domName MutationEvent.newValue */
-  abstract String get newValue;
+  String get newValue;
 
   /** @domName MutationEvent.prevValue */
-  abstract String get prevValue;
+  String get prevValue;
 
   /** @domName MutationEvent.relatedNode */
-  abstract Node get relatedNode;
+  Node get relatedNode;
 
   /** @domName MutationEvent.initMutationEvent */
   void initMutationEvent(String type, bool canBubble, bool cancelable, Node relatedNode, String prevValue, String newValue, String attrName, int attrChange);
@@ -20658,6 +20616,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName MutationObserver
 abstract class MutationObserver {
 
@@ -20712,7 +20671,7 @@
     if (options != null) {
       options.forEach((k, v) {
           if (_boolKeys.containsKey(k)) {
-            _add(parsedOptions, k, true === v);
+            _add(parsedOptions, k, true == v);
           } else if (k == 'attributeFilter') {
             _add(parsedOptions, k, _fixupList(v));
           } else {
@@ -20767,31 +20726,31 @@
 abstract class MutationRecord {
 
   /** @domName MutationRecord.addedNodes */
-  abstract List<Node> get addedNodes;
+  List<Node> get addedNodes;
 
   /** @domName MutationRecord.attributeName */
-  abstract String get attributeName;
+  String get attributeName;
 
   /** @domName MutationRecord.attributeNamespace */
-  abstract String get attributeNamespace;
+  String get attributeNamespace;
 
   /** @domName MutationRecord.nextSibling */
-  abstract Node get nextSibling;
+  Node get nextSibling;
 
   /** @domName MutationRecord.oldValue */
-  abstract String get oldValue;
+  String get oldValue;
 
   /** @domName MutationRecord.previousSibling */
-  abstract Node get previousSibling;
+  Node get previousSibling;
 
   /** @domName MutationRecord.removedNodes */
-  abstract List<Node> get removedNodes;
+  List<Node> get removedNodes;
 
   /** @domName MutationRecord.target */
-  abstract Node get target;
+  Node get target;
 
   /** @domName MutationRecord.type */
-  abstract String get type;
+  String get type;
 }
 
 class _MutationRecordImpl implements MutationRecord native "*MutationRecord" {
@@ -20824,7 +20783,7 @@
 abstract class NamedNodeMap implements List<Node> {
 
   /** @domName NamedNodeMap.length */
-  abstract int get length;
+  int get length;
 
   /** @domName NamedNodeMap.getNamedItem */
   Node getNamedItem(String name);
@@ -20855,7 +20814,7 @@
   _NodeImpl operator[](int index) => JS("_NodeImpl", "#[#]", this, index);
 
   void operator[]=(int index, _NodeImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Node> mixins.
   // Node is the element type.
@@ -20872,15 +20831,15 @@
   // From Collection<Node>:
 
   void add(Node value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Node value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Node> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Node element) => _Collections.contains(this, element);
@@ -20896,38 +20855,38 @@
 
   bool some(bool f(Node element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Node>:
 
   void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Node element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Node element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Node last() => this[length - 1];
+  Node get last => this[length - 1];
 
   Node removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Node> getRange(int start, int rangeLength) =>
@@ -20959,52 +20918,52 @@
 abstract class Navigator {
 
   /** @domName Navigator.appCodeName */
-  abstract String get appCodeName;
+  String get appCodeName;
 
   /** @domName Navigator.appName */
-  abstract String get appName;
+  String get appName;
 
   /** @domName Navigator.appVersion */
-  abstract String get appVersion;
+  String get appVersion;
 
   /** @domName Navigator.cookieEnabled */
-  abstract bool get cookieEnabled;
+  bool get cookieEnabled;
 
   /** @domName Navigator.geolocation */
-  abstract Geolocation get geolocation;
+  Geolocation get geolocation;
 
   /** @domName Navigator.language */
-  abstract String get language;
+  String get language;
 
   /** @domName Navigator.mimeTypes */
-  abstract DOMMimeTypeArray get mimeTypes;
+  DOMMimeTypeArray get mimeTypes;
 
   /** @domName Navigator.onLine */
-  abstract bool get onLine;
+  bool get onLine;
 
   /** @domName Navigator.platform */
-  abstract String get platform;
+  String get platform;
 
   /** @domName Navigator.plugins */
-  abstract DOMPluginArray get plugins;
+  DOMPluginArray get plugins;
 
   /** @domName Navigator.product */
-  abstract String get product;
+  String get product;
 
   /** @domName Navigator.productSub */
-  abstract String get productSub;
+  String get productSub;
 
   /** @domName Navigator.userAgent */
-  abstract String get userAgent;
+  String get userAgent;
 
   /** @domName Navigator.vendor */
-  abstract String get vendor;
+  String get vendor;
 
   /** @domName Navigator.vendorSub */
-  abstract String get vendorSub;
+  String get vendorSub;
 
   /** @domName Navigator.webkitBattery */
-  abstract BatteryManager get webkitBattery;
+  BatteryManager get webkitBattery;
 
   /** @domName Navigator.getStorageUpdates */
   void getStorageUpdates();
@@ -21084,7 +21043,7 @@
   static const int PERMISSION_DENIED = 1;
 
   /** @domName NavigatorUserMediaError.code */
-  abstract int get code;
+  int get code;
 }
 // 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
@@ -21092,6 +21051,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void NavigatorUserMediaErrorCallback(NavigatorUserMediaError error);
 
 class _NavigatorUserMediaErrorImpl implements NavigatorUserMediaError native "*NavigatorUserMediaError" {
@@ -21104,6 +21064,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void NavigatorUserMediaSuccessCallback(LocalMediaStream stream);
 // 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
@@ -21111,6 +21072,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName Node
 abstract class Node implements EventTarget {
   List<Node> get nodes;
@@ -21167,31 +21129,31 @@
   static const int TEXT_NODE = 3;
 
   /** @domName Node.attributes */
-  abstract NamedNodeMap get $dom_attributes;
+  NamedNodeMap get $dom_attributes;
 
   /** @domName Node.childNodes */
-  abstract List<Node> get $dom_childNodes;
+  List<Node> get $dom_childNodes;
 
   /** @domName Node.firstChild */
-  abstract Node get $dom_firstChild;
+  Node get $dom_firstChild;
 
   /** @domName Node.lastChild */
-  abstract Node get $dom_lastChild;
+  Node get $dom_lastChild;
 
   /** @domName Node.nextSibling */
-  abstract Node get nextNode;
+  Node get nextNode;
 
   /** @domName Node.nodeType */
-  abstract int get $dom_nodeType;
+  int get $dom_nodeType;
 
   /** @domName Node.ownerDocument */
-  abstract Document get document;
+  Document get document;
 
   /** @domName Node.parentNode */
-  abstract Node get parent;
+  Node get parent;
 
   /** @domName Node.previousSibling */
-  abstract Node get previousNode;
+  Node get previousNode;
 
   /** @domName Node.textContent */
   String text;
@@ -21292,7 +21254,7 @@
 
 
   _NodeImpl get first => JS('_NodeImpl', '#.firstChild', _this);
-  _NodeImpl last() => JS('_NodeImpl', '#.lastChild', _this);
+  _NodeImpl get last => JS('_NodeImpl', '#.lastChild', _this);
 
   void add(_NodeImpl value) {
     _this.$dom_appendChild(value);
@@ -21310,7 +21272,7 @@
   }
 
   _NodeImpl removeLast() {
-    final result = last();
+    final result = last;
     if (result != null) {
       _this.$dom_removeChild(result);
     }
@@ -21342,14 +21304,14 @@
 
   bool some(bool f(Node element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Node>:
 
   // TODO(jacobr): this could be implemented for child node lists.
   // The exception we throw here is misleading.
   void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Node element, [int start = 0]) =>
@@ -21360,15 +21322,15 @@
 
   // FIXME: implement these.
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot setRange on immutable List.");
   }
   void removeRange(int start, int rangeLength) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot removeRange on immutable List.");
   }
   void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot insertRange on immutable List.");
   }
   List<Node> getRange(int start, int rangeLength) =>
@@ -21418,25 +21380,25 @@
   }
 
 
-  _NamedNodeMapImpl get $dom_attributes() => JS("_NamedNodeMapImpl", "#.attributes", this);
+  _NamedNodeMapImpl get $dom_attributes => JS("_NamedNodeMapImpl", "#.attributes", this);
 
-  List<Node> get $dom_childNodes() => JS("List<Node>", "#.childNodes", this);
+  List<Node> get $dom_childNodes => JS("List<Node>", "#.childNodes", this);
 
-  _NodeImpl get $dom_firstChild() => JS("_NodeImpl", "#.firstChild", this);
+  _NodeImpl get $dom_firstChild => JS("_NodeImpl", "#.firstChild", this);
 
-  _NodeImpl get $dom_lastChild() => JS("_NodeImpl", "#.lastChild", this);
+  _NodeImpl get $dom_lastChild => JS("_NodeImpl", "#.lastChild", this);
 
-  _NodeImpl get nextNode() => JS("_NodeImpl", "#.nextSibling", this);
+  _NodeImpl get nextNode => JS("_NodeImpl", "#.nextSibling", this);
 
-  int get $dom_nodeType() => JS("int", "#.nodeType", this);
+  int get $dom_nodeType => JS("int", "#.nodeType", this);
 
-  _DocumentImpl get document() => JS("_DocumentImpl", "#.ownerDocument", this);
+  _DocumentImpl get document => JS("_DocumentImpl", "#.ownerDocument", this);
 
-  _NodeImpl get parent() => JS("_NodeImpl", "#.parentNode", this);
+  _NodeImpl get parent => JS("_NodeImpl", "#.parentNode", this);
 
-  _NodeImpl get previousNode() => JS("_NodeImpl", "#.previousSibling", this);
+  _NodeImpl get previousNode => JS("_NodeImpl", "#.previousSibling", this);
 
-  String get text() => JS("String", "#.textContent", this);
+  String get text => JS("String", "#.textContent", this);
 
   void set text(String value) {
     JS("void", "#.textContent = #", this, value);
@@ -21473,22 +21435,22 @@
 abstract class NodeIterator {
 
   /** @domName NodeIterator.expandEntityReferences */
-  abstract bool get expandEntityReferences;
+  bool get expandEntityReferences;
 
   /** @domName NodeIterator.filter */
-  abstract NodeFilter get filter;
+  NodeFilter get filter;
 
   /** @domName NodeIterator.pointerBeforeReferenceNode */
-  abstract bool get pointerBeforeReferenceNode;
+  bool get pointerBeforeReferenceNode;
 
   /** @domName NodeIterator.referenceNode */
-  abstract Node get referenceNode;
+  Node get referenceNode;
 
   /** @domName NodeIterator.root */
-  abstract Node get root;
+  Node get root;
 
   /** @domName NodeIterator.whatToShow */
-  abstract int get whatToShow;
+  int get whatToShow;
 
   /** @domName NodeIterator.detach */
   void detach();
@@ -21526,6 +21488,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName NodeList
 abstract class NodeList implements List<Node> {
 
@@ -21537,7 +21500,7 @@
 
 
   /** @domName NodeList.length */
-  abstract int get length;
+  int get length;
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21565,7 +21528,7 @@
 
   bool some(bool f(E element)) => _list.some(f);
 
-  bool isEmpty() => _list.isEmpty();
+  bool get isEmpty => _list.isEmpty;
 
   int get length => _list.length;
 
@@ -21592,7 +21555,7 @@
 
   E removeLast() => _list.removeLast();
 
-  E last() => _list.last();
+  E get last => _list.last;
 
   List<E> getRange(int start, int rangeLength) =>
     _list.getRange(start, rangeLength);
@@ -21655,7 +21618,7 @@
   }
 
   _NodeImpl removeLast() {
-    final result = this.last();
+    final result = this.last;
     if (result != null) {
       _parent.$dom_removeChild(result);
     }
@@ -21683,12 +21646,12 @@
 
   bool some(bool f(Node element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Node>:
 
   void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Node element, [int start = 0]) =>
@@ -21697,18 +21660,18 @@
   int lastIndexOf(Node element, [int start = 0]) =>
       _Lists.lastIndexOf(this, element, start);
 
-  Node last() => this[length - 1];
+  Node get last => this[length - 1];
   Node get first => this[0];
 
   // FIXME: implement thesee.
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
   void removeRange(int start, int rangeLength) {
-    throw new UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
   void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
   List<Node> getRange(int start, int rangeLength) =>
     new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
@@ -21733,10 +21696,10 @@
 abstract class Notation implements Node {
 
   /** @domName Notation.publicId */
-  abstract String get publicId;
+  String get publicId;
 
   /** @domName Notation.systemId */
-  abstract String get systemId;
+  String get systemId;
 }
 
 class _NotationImpl extends _NodeImpl implements Notation native "*Notation" {
@@ -21770,7 +21733,7 @@
   String dir;
 
   /** @domName Notification.permission */
-  abstract String get permission;
+  String get permission;
 
   /** @domName Notification.replaceId */
   String replaceId;
@@ -21892,6 +21855,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void NotificationPermissionCallback(String permission);
 // 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
@@ -22016,9 +21980,6 @@
   /** @domName HTMLObjectElement.codeType */
   String codeType;
 
-  /** @domName HTMLObjectElement.contentDocument */
-  abstract Document get contentDocument;
-
   /** @domName HTMLObjectElement.data */
   String data;
 
@@ -22026,7 +21987,7 @@
   bool declare;
 
   /** @domName HTMLObjectElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLObjectElement.height */
   String height;
@@ -22047,10 +22008,10 @@
   String useMap;
 
   /** @domName HTMLObjectElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLObjectElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLObjectElement.vspace */
   int vspace;
@@ -22059,7 +22020,7 @@
   String width;
 
   /** @domName HTMLObjectElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLObjectElement.checkValidity */
   bool checkValidity();
@@ -22082,8 +22043,6 @@
 
   String codeType;
 
-  final _DocumentImpl contentDocument;
-
   String data;
 
   bool declare;
@@ -22126,7 +22085,7 @@
 abstract class OfflineAudioCompletionEvent implements Event {
 
   /** @domName OfflineAudioCompletionEvent.renderedBuffer */
-  abstract AudioBuffer get renderedBuffer;
+  AudioBuffer get renderedBuffer;
 }
 
 class _OfflineAudioCompletionEventImpl extends _EventImpl implements OfflineAudioCompletionEvent native "*OfflineAudioCompletionEvent" {
@@ -22189,10 +22148,10 @@
   bool disabled;
 
   /** @domName HTMLOptionElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLOptionElement.index */
-  abstract int get index;
+  int get index;
 
   /** @domName HTMLOptionElement.label */
   String label;
@@ -22248,13 +22207,13 @@
   static const int UNSCHEDULED_STATE = 0;
 
   /** @domName Oscillator.detune */
-  abstract AudioParam get detune;
+  AudioParam get detune;
 
   /** @domName Oscillator.frequency */
-  abstract AudioParam get frequency;
+  AudioParam get frequency;
 
   /** @domName Oscillator.playbackState */
-  abstract int get playbackState;
+  int get playbackState;
 
   /** @domName Oscillator.type */
   int type;
@@ -22300,31 +22259,31 @@
   String defaultValue;
 
   /** @domName HTMLOutputElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLOutputElement.htmlFor */
   DOMSettableTokenList htmlFor;
 
   /** @domName HTMLOutputElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLOutputElement.name */
   String name;
 
   /** @domName HTMLOutputElement.type */
-  abstract String get type;
+  String get type;
 
   /** @domName HTMLOutputElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLOutputElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLOutputElement.value */
   String value;
 
   /** @domName HTMLOutputElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLOutputElement.checkValidity */
   bool checkValidity();
@@ -22375,13 +22334,13 @@
   static const int VERTICAL = 1;
 
   /** @domName OverflowEvent.horizontalOverflow */
-  abstract bool get horizontalOverflow;
+  bool get horizontalOverflow;
 
   /** @domName OverflowEvent.orient */
-  abstract int get orient;
+  int get orient;
 
   /** @domName OverflowEvent.verticalOverflow */
-  abstract bool get verticalOverflow;
+  bool get verticalOverflow;
 }
 
 class _OverflowEventImpl extends _EventImpl implements OverflowEvent native "*OverflowEvent" {
@@ -22424,7 +22383,7 @@
 abstract class PageTransitionEvent implements Event {
 
   /** @domName PageTransitionEvent.persisted */
-  abstract bool get persisted;
+  bool get persisted;
 }
 
 class _PageTransitionEventImpl extends _EventImpl implements PageTransitionEvent native "*PageTransitionEvent" {
@@ -22529,22 +22488,22 @@
   static const int SDP_PRANSWER = 0x200;
 
   /** @domName PeerConnection00.iceState */
-  abstract int get iceState;
+  int get iceState;
 
   /** @domName PeerConnection00.localDescription */
-  abstract SessionDescription get localDescription;
+  SessionDescription get localDescription;
 
   /** @domName PeerConnection00.localStreams */
-  abstract List<MediaStream> get localStreams;
+  List<MediaStream> get localStreams;
 
   /** @domName PeerConnection00.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName PeerConnection00.remoteDescription */
-  abstract SessionDescription get remoteDescription;
+  SessionDescription get remoteDescription;
 
   /** @domName PeerConnection00.remoteStreams */
-  abstract List<MediaStream> get remoteStreams;
+  List<MediaStream> get remoteStreams;
 
   /** @domName PeerConnection00.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -22697,16 +22656,16 @@
 abstract class Performance implements EventTarget {
 
   /** @domName Performance.memory */
-  abstract MemoryInfo get memory;
+  MemoryInfo get memory;
 
   /** @domName Performance.navigation */
-  abstract PerformanceNavigation get navigation;
+  PerformanceNavigation get navigation;
 
   /** @domName Performance.timing */
-  abstract PerformanceTiming get timing;
+  PerformanceTiming get timing;
 
-  /** @domName Performance.webkitNow */
-  num webkitNow();
+  /** @domName Performance.now */
+  num now();
 }
 
 class _PerformanceImpl extends _EventTargetImpl implements Performance native "*Performance" {
@@ -22717,7 +22676,7 @@
 
   final _PerformanceTimingImpl timing;
 
-  num webkitNow() native;
+  num now() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -22737,10 +22696,10 @@
   static const int TYPE_RESERVED = 255;
 
   /** @domName PerformanceNavigation.redirectCount */
-  abstract int get redirectCount;
+  int get redirectCount;
 
   /** @domName PerformanceNavigation.type */
-  abstract int get type;
+  int get type;
 }
 
 class _PerformanceNavigationImpl implements PerformanceNavigation native "*PerformanceNavigation" {
@@ -22759,67 +22718,67 @@
 abstract class PerformanceTiming {
 
   /** @domName PerformanceTiming.connectEnd */
-  abstract int get connectEnd;
+  int get connectEnd;
 
   /** @domName PerformanceTiming.connectStart */
-  abstract int get connectStart;
+  int get connectStart;
 
   /** @domName PerformanceTiming.domComplete */
-  abstract int get domComplete;
+  int get domComplete;
 
   /** @domName PerformanceTiming.domContentLoadedEventEnd */
-  abstract int get domContentLoadedEventEnd;
+  int get domContentLoadedEventEnd;
 
   /** @domName PerformanceTiming.domContentLoadedEventStart */
-  abstract int get domContentLoadedEventStart;
+  int get domContentLoadedEventStart;
 
   /** @domName PerformanceTiming.domInteractive */
-  abstract int get domInteractive;
+  int get domInteractive;
 
   /** @domName PerformanceTiming.domLoading */
-  abstract int get domLoading;
+  int get domLoading;
 
   /** @domName PerformanceTiming.domainLookupEnd */
-  abstract int get domainLookupEnd;
+  int get domainLookupEnd;
 
   /** @domName PerformanceTiming.domainLookupStart */
-  abstract int get domainLookupStart;
+  int get domainLookupStart;
 
   /** @domName PerformanceTiming.fetchStart */
-  abstract int get fetchStart;
+  int get fetchStart;
 
   /** @domName PerformanceTiming.loadEventEnd */
-  abstract int get loadEventEnd;
+  int get loadEventEnd;
 
   /** @domName PerformanceTiming.loadEventStart */
-  abstract int get loadEventStart;
+  int get loadEventStart;
 
   /** @domName PerformanceTiming.navigationStart */
-  abstract int get navigationStart;
+  int get navigationStart;
 
   /** @domName PerformanceTiming.redirectEnd */
-  abstract int get redirectEnd;
+  int get redirectEnd;
 
   /** @domName PerformanceTiming.redirectStart */
-  abstract int get redirectStart;
+  int get redirectStart;
 
   /** @domName PerformanceTiming.requestStart */
-  abstract int get requestStart;
+  int get requestStart;
 
   /** @domName PerformanceTiming.responseEnd */
-  abstract int get responseEnd;
+  int get responseEnd;
 
   /** @domName PerformanceTiming.responseStart */
-  abstract int get responseStart;
+  int get responseStart;
 
   /** @domName PerformanceTiming.secureConnectionStart */
-  abstract int get secureConnectionStart;
+  int get secureConnectionStart;
 
   /** @domName PerformanceTiming.unloadEventEnd */
-  abstract int get unloadEventEnd;
+  int get unloadEventEnd;
 
   /** @domName PerformanceTiming.unloadEventStart */
-  abstract int get unloadEventStart;
+  int get unloadEventStart;
 }
 
 class _PerformanceTimingImpl implements PerformanceTiming native "*PerformanceTiming" {
@@ -22872,6 +22831,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName WebKitPoint
 abstract class Point {
 
@@ -22900,7 +22860,7 @@
 abstract class PopStateEvent implements Event {
 
   /** @domName PopStateEvent.state */
-  abstract Object get state;
+  Object get state;
 }
 
 class _PopStateEventImpl extends _EventImpl implements PopStateEvent native "*PopStateEvent" {
@@ -22913,6 +22873,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void PositionCallback(Geoposition position);
 // 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
@@ -22930,10 +22891,10 @@
   static const int TIMEOUT = 3;
 
   /** @domName PositionError.code */
-  abstract int get code;
+  int get code;
 
   /** @domName PositionError.message */
-  abstract String get message;
+  String get message;
 }
 // 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
@@ -22941,6 +22902,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void PositionErrorCallback(PositionError error);
 
 class _PositionErrorImpl implements PositionError native "*PositionError" {
@@ -22986,10 +22948,10 @@
   String data;
 
   /** @domName ProcessingInstruction.sheet */
-  abstract StyleSheet get sheet;
+  StyleSheet get sheet;
 
   /** @domName ProcessingInstruction.target */
-  abstract String get target;
+  String get target;
 }
 
 class _ProcessingInstructionImpl extends _NodeImpl implements ProcessingInstruction native "*ProcessingInstruction" {
@@ -23012,13 +22974,13 @@
   factory ProgressElement() => _Elements.createProgressElement();
 
   /** @domName HTMLProgressElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLProgressElement.max */
   num max;
 
   /** @domName HTMLProgressElement.position */
-  abstract num get position;
+  num get position;
 
   /** @domName HTMLProgressElement.value */
   num value;
@@ -23044,13 +23006,13 @@
 abstract class ProgressEvent implements Event {
 
   /** @domName ProgressEvent.lengthComputable */
-  abstract bool get lengthComputable;
+  bool get lengthComputable;
 
   /** @domName ProgressEvent.loaded */
-  abstract int get loaded;
+  int get loaded;
 
   /** @domName ProgressEvent.total */
-  abstract int get total;
+  int get total;
 }
 
 class _ProgressEventImpl extends _EventImpl implements ProgressEvent native "*ProgressEvent" {
@@ -23088,13 +23050,13 @@
 abstract class RGBColor {
 
   /** @domName RGBColor.blue */
-  abstract CSSPrimitiveValue get blue;
+  CSSPrimitiveValue get blue;
 
   /** @domName RGBColor.green */
-  abstract CSSPrimitiveValue get green;
+  CSSPrimitiveValue get green;
 
   /** @domName RGBColor.red */
-  abstract CSSPrimitiveValue get red;
+  CSSPrimitiveValue get red;
 }
 
 class _RGBColorImpl implements RGBColor native "*RGBColor" {
@@ -23111,6 +23073,117 @@
 
 // WARNING: Do not edit - generated code.
 
+/// @domName RTCDataChannel
+abstract class RTCDataChannel implements EventTarget {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  RTCDataChannelEvents get on;
+
+  /** @domName RTCDataChannel.binaryType */
+  String binaryType;
+
+  /** @domName RTCDataChannel.bufferedAmount */
+  int get bufferedAmount;
+
+  /** @domName RTCDataChannel.label */
+  String get label;
+
+  /** @domName RTCDataChannel.readyState */
+  String get readyState;
+
+  /** @domName RTCDataChannel.reliable */
+  bool get reliable;
+
+  /** @domName RTCDataChannel.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
+
+  /** @domName RTCDataChannel.close */
+  void close();
+
+  /** @domName RTCDataChannel.dispatchEvent */
+  bool $dom_dispatchEvent(Event event);
+
+  /** @domName RTCDataChannel.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
+
+  /** @domName RTCDataChannel.send */
+  void send(data);
+}
+
+abstract class RTCDataChannelEvents implements Events {
+
+  EventListenerList get close;
+
+  EventListenerList get error;
+
+  EventListenerList get message;
+
+  EventListenerList get open;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName RTCDataChannelEvent
+abstract class RTCDataChannelEvent implements Event {
+
+  /** @domName RTCDataChannelEvent.channel */
+  RTCDataChannel get channel;
+}
+
+class _RTCDataChannelEventImpl extends _EventImpl implements RTCDataChannelEvent native "*RTCDataChannelEvent" {
+
+  final _RTCDataChannelImpl channel;
+}
+
+class _RTCDataChannelImpl extends _EventTargetImpl implements RTCDataChannel native "*RTCDataChannel" {
+
+  _RTCDataChannelEventsImpl get on =>
+    new _RTCDataChannelEventsImpl(this);
+
+  String binaryType;
+
+  final int bufferedAmount;
+
+  final String label;
+
+  final String readyState;
+
+  final bool reliable;
+
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  void close() native;
+
+  bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
+
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  void send(data) native;
+}
+
+class _RTCDataChannelEventsImpl extends _EventsImpl implements RTCDataChannelEvents {
+  _RTCDataChannelEventsImpl(_ptr) : super(_ptr);
+
+  EventListenerList get close => this['close'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get message => this['message'];
+
+  EventListenerList get open => this['open'];
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
 typedef void RTCErrorCallback(String errorInformation);
 // 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
@@ -23124,13 +23197,13 @@
   factory RTCIceCandidate(Map dictionary) => _RTCIceCandidateFactoryProvider.createRTCIceCandidate(dictionary);
 
   /** @domName RTCIceCandidate.candidate */
-  abstract String get candidate;
+  String get candidate;
 
   /** @domName RTCIceCandidate.sdpMLineIndex */
-  abstract int get sdpMLineIndex;
+  int get sdpMLineIndex;
 
   /** @domName RTCIceCandidate.sdpMid */
-  abstract String get sdpMid;
+  String get sdpMid;
 }
 // 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
@@ -23142,7 +23215,7 @@
 abstract class RTCIceCandidateEvent implements Event {
 
   /** @domName RTCIceCandidateEvent.candidate */
-  abstract RTCIceCandidate get candidate;
+  RTCIceCandidate get candidate;
 }
 
 class _RTCIceCandidateEventImpl extends _EventImpl implements RTCIceCandidateEvent native "*RTCIceCandidateEvent" {
@@ -23180,22 +23253,22 @@
   RTCPeerConnectionEvents get on;
 
   /** @domName RTCPeerConnection.iceState */
-  abstract String get iceState;
+  String get iceState;
 
   /** @domName RTCPeerConnection.localDescription */
-  abstract RTCSessionDescription get localDescription;
+  RTCSessionDescription get localDescription;
 
   /** @domName RTCPeerConnection.localStreams */
-  abstract List<MediaStream> get localStreams;
+  List<MediaStream> get localStreams;
 
   /** @domName RTCPeerConnection.readyState */
-  abstract String get readyState;
+  String get readyState;
 
   /** @domName RTCPeerConnection.remoteDescription */
-  abstract RTCSessionDescription get remoteDescription;
+  RTCSessionDescription get remoteDescription;
 
   /** @domName RTCPeerConnection.remoteStreams */
-  abstract List<MediaStream> get remoteStreams;
+  List<MediaStream> get remoteStreams;
 
   /** @domName RTCPeerConnection.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -23212,6 +23285,9 @@
   /** @domName RTCPeerConnection.createAnswer */
   void createAnswer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]);
 
+  /** @domName RTCPeerConnection.createDataChannel */
+  RTCDataChannel createDataChannel(String label, Map options);
+
   /** @domName RTCPeerConnection.createOffer */
   void createOffer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]);
 
@@ -23291,6 +23367,12 @@
   }
   void _createAnswer_1(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback, mediaConstraints) native "createAnswer";
 
+  _RTCDataChannelImpl createDataChannel(String label, Map options) {
+    var options_1 = _convertDartToNative_Dictionary(options);
+    return _createDataChannel_1(label, options_1);
+  }
+  _RTCDataChannelImpl _createDataChannel_1(label, options) native "createDataChannel";
+
   void createOffer(RTCSessionDescriptionCallback successCallback, [failureCallback, mediaConstraints]) {
     var mediaConstraints_1 = _convertDartToNative_Dictionary(mediaConstraints);
     _createOffer_1(successCallback, failureCallback, mediaConstraints_1);
@@ -23359,6 +23441,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void RTCSessionDescriptionCallback(RTCSessionDescription sdp);
 
 class _RTCSessionDescriptionImpl implements RTCSessionDescription native "*RTCSessionDescription" {
@@ -23373,6 +23456,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void RTCStatsCallback(RTCStatsResponse response);
 // 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
@@ -23384,7 +23468,7 @@
 abstract class RTCStatsElement {
 
   /** @domName RTCStatsElement.timestamp */
-  abstract int get timestamp;
+  Date get timestamp;
 
   /** @domName RTCStatsElement.stat */
   String stat(String name);
@@ -23392,7 +23476,7 @@
 
 class _RTCStatsElementImpl implements RTCStatsElement native "*RTCStatsElement" {
 
-  final int timestamp;
+  final Date timestamp;
 
   String stat(String name) native;
 }
@@ -23406,17 +23490,17 @@
 abstract class RTCStatsReport {
 
   /** @domName RTCStatsReport.local */
-  List<RTCStatsElement> local();
+  RTCStatsElement get local;
 
   /** @domName RTCStatsReport.remote */
-  List<RTCStatsElement> remote();
+  RTCStatsElement get remote;
 }
 
 class _RTCStatsReportImpl implements RTCStatsReport native "*RTCStatsReport" {
 
-  List<RTCStatsElement> local() native;
+  final _RTCStatsElementImpl local;
 
-  List<RTCStatsElement> remote() native;
+  final _RTCStatsElementImpl remote;
 }
 // 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
@@ -23478,22 +23562,22 @@
   static const int START_TO_START = 0;
 
   /** @domName Range.collapsed */
-  abstract bool get collapsed;
+  bool get collapsed;
 
   /** @domName Range.commonAncestorContainer */
-  abstract Node get commonAncestorContainer;
+  Node get commonAncestorContainer;
 
   /** @domName Range.endContainer */
-  abstract Node get endContainer;
+  Node get endContainer;
 
   /** @domName Range.endOffset */
-  abstract int get endOffset;
+  int get endOffset;
 
   /** @domName Range.startContainer */
-  abstract Node get startContainer;
+  Node get startContainer;
 
   /** @domName Range.startOffset */
-  abstract int get startOffset;
+  int get startOffset;
 
   /** @domName Range.cloneContents */
   DocumentFragment cloneContents();
@@ -23584,13 +23668,13 @@
   static const int INVALID_NODE_TYPE_ERR = 2;
 
   /** @domName RangeException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName RangeException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName RangeException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName RangeException.toString */
   String toString();
@@ -23684,7 +23768,7 @@
   int fftSize;
 
   /** @domName RealtimeAnalyserNode.frequencyBinCount */
-  abstract int get frequencyBinCount;
+  int get frequencyBinCount;
 
   /** @domName RealtimeAnalyserNode.maxDecibels */
   num maxDecibels;
@@ -23733,16 +23817,16 @@
 abstract class Rect {
 
   /** @domName Rect.bottom */
-  abstract CSSPrimitiveValue get bottom;
+  CSSPrimitiveValue get bottom;
 
   /** @domName Rect.left */
-  abstract CSSPrimitiveValue get left;
+  CSSPrimitiveValue get left;
 
   /** @domName Rect.right */
-  abstract CSSPrimitiveValue get right;
+  CSSPrimitiveValue get right;
 
   /** @domName Rect.top */
-  abstract CSSPrimitiveValue get top;
+  CSSPrimitiveValue get top;
 }
 
 class _RectImpl implements Rect native "*Rect" {
@@ -23761,7 +23845,8 @@
 
 // WARNING: Do not edit - generated code.
 
-typedef void RequestAnimationFrameCallback(int time);
+
+typedef void RequestAnimationFrameCallback(num highResTime);
 // 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.
@@ -23788,10 +23873,10 @@
   static const int VERSION_ERR = 2;
 
   /** @domName SQLError.code */
-  abstract int get code;
+  int get code;
 
   /** @domName SQLError.message */
-  abstract String get message;
+  String get message;
 }
 
 class _SQLErrorImpl implements SQLError native "*SQLError" {
@@ -23826,10 +23911,10 @@
   static const int VERSION_ERR = 2;
 
   /** @domName SQLException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName SQLException.message */
-  abstract String get message;
+  String get message;
 }
 
 class _SQLExceptionImpl implements SQLException native "*SQLException" {
@@ -23848,13 +23933,13 @@
 abstract class SQLResultSet {
 
   /** @domName SQLResultSet.insertId */
-  abstract int get insertId;
+  int get insertId;
 
   /** @domName SQLResultSet.rows */
-  abstract SQLResultSetRowList get rows;
+  SQLResultSetRowList get rows;
 
   /** @domName SQLResultSet.rowsAffected */
-  abstract int get rowsAffected;
+  int get rowsAffected;
 }
 
 class _SQLResultSetImpl implements SQLResultSet native "*SQLResultSet" {
@@ -23875,7 +23960,7 @@
 abstract class SQLResultSetRowList implements List<Map> {
 
   /** @domName SQLResultSetRowList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName SQLResultSetRowList.item */
   Map item(int index);
@@ -23888,7 +23973,7 @@
   Map operator[](int index) => JS("Map", "#[#]", this, index);
 
   void operator[]=(int index, Map value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Map> mixins.
   // Map is the element type.
@@ -23905,15 +23990,15 @@
   // From Collection<Map>:
 
   void add(Map value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Map value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Map> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Map element) => _Collections.contains(this, element);
@@ -23929,38 +24014,38 @@
 
   bool some(bool f(Map element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Map>:
 
   void sort([Comparator<Map> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Map element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Map element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Map last() => this[length - 1];
+  Map get last => this[length - 1];
 
   Map removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Map> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Map initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Map> getRange(int start, int rangeLength) =>
@@ -23979,6 +24064,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void SQLStatementCallback(SQLTransaction transaction, SQLResultSet resultSet);
 // 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
@@ -23986,6 +24072,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void SQLStatementErrorCallback(SQLTransaction transaction, SQLError error);
 // 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
@@ -24005,6 +24092,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void SQLTransactionCallback(SQLTransaction transaction);
 // 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
@@ -24012,6 +24100,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void SQLTransactionErrorCallback(SQLError error);
 
 class _SQLTransactionImpl implements SQLTransaction native "*SQLTransaction" {
@@ -24036,6 +24125,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void SQLTransactionSyncCallback(SQLTransactionSync transaction);
 
 class _SQLTransactionSyncImpl implements SQLTransactionSync native "*SQLTransactionSync" {
@@ -24052,7 +24142,7 @@
 abstract class SVGAElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGAElement.target */
-  abstract SVGAnimatedString get target;
+  SVGAnimatedString get target;
 }
 
 class _SVGAElementImpl extends _SVGElementImpl implements SVGAElement native "*SVGAElement" {
@@ -24085,7 +24175,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -24180,7 +24270,7 @@
   static const int SVG_ANGLETYPE_UNSPECIFIED = 1;
 
   /** @domName SVGAngle.unitType */
-  abstract int get unitType;
+  int get unitType;
 
   /** @domName SVGAngle.value */
   num value;
@@ -24270,10 +24360,10 @@
 abstract class SVGAnimatedAngle {
 
   /** @domName SVGAnimatedAngle.animVal */
-  abstract SVGAngle get animVal;
+  SVGAngle get animVal;
 
   /** @domName SVGAnimatedAngle.baseVal */
-  abstract SVGAngle get baseVal;
+  SVGAngle get baseVal;
 }
 
 class _SVGAnimatedAngleImpl implements SVGAnimatedAngle native "*SVGAnimatedAngle" {
@@ -24292,7 +24382,7 @@
 abstract class SVGAnimatedBoolean {
 
   /** @domName SVGAnimatedBoolean.animVal */
-  abstract bool get animVal;
+  bool get animVal;
 
   /** @domName SVGAnimatedBoolean.baseVal */
   bool baseVal;
@@ -24314,7 +24404,7 @@
 abstract class SVGAnimatedEnumeration {
 
   /** @domName SVGAnimatedEnumeration.animVal */
-  abstract int get animVal;
+  int get animVal;
 
   /** @domName SVGAnimatedEnumeration.baseVal */
   int baseVal;
@@ -24336,7 +24426,7 @@
 abstract class SVGAnimatedInteger {
 
   /** @domName SVGAnimatedInteger.animVal */
-  abstract int get animVal;
+  int get animVal;
 
   /** @domName SVGAnimatedInteger.baseVal */
   int baseVal;
@@ -24358,10 +24448,10 @@
 abstract class SVGAnimatedLength {
 
   /** @domName SVGAnimatedLength.animVal */
-  abstract SVGLength get animVal;
+  SVGLength get animVal;
 
   /** @domName SVGAnimatedLength.baseVal */
-  abstract SVGLength get baseVal;
+  SVGLength get baseVal;
 }
 
 class _SVGAnimatedLengthImpl implements SVGAnimatedLength native "*SVGAnimatedLength" {
@@ -24380,10 +24470,10 @@
 abstract class SVGAnimatedLengthList implements List<SVGAnimatedLength> {
 
   /** @domName SVGAnimatedLengthList.animVal */
-  abstract SVGLengthList get animVal;
+  SVGLengthList get animVal;
 
   /** @domName SVGAnimatedLengthList.baseVal */
-  abstract SVGLengthList get baseVal;
+  SVGLengthList get baseVal;
 }
 
 class _SVGAnimatedLengthListImpl implements SVGAnimatedLengthList, JavaScriptIndexingBehavior native "*SVGAnimatedLengthList" {
@@ -24395,7 +24485,7 @@
   _SVGAnimatedLengthImpl operator[](int index) => JS("_SVGAnimatedLengthImpl", "#[#]", this, index);
 
   void operator[]=(int index, _SVGAnimatedLengthImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGAnimatedLength> mixins.
   // SVGAnimatedLength is the element type.
@@ -24412,15 +24502,15 @@
   // From Collection<SVGAnimatedLength>:
 
   void add(SVGAnimatedLength value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGAnimatedLength value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGAnimatedLength> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGAnimatedLength element) => _Collections.contains(this, element);
@@ -24436,38 +24526,38 @@
 
   bool some(bool f(SVGAnimatedLength element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGAnimatedLength>:
 
   void sort([Comparator<SVGAnimatedLength> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGAnimatedLength element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGAnimatedLength element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGAnimatedLength last() => this[length - 1];
+  SVGAnimatedLength get last => this[length - 1];
 
   SVGAnimatedLength removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGAnimatedLength> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGAnimatedLength initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGAnimatedLength> getRange(int start, int rangeLength) =>
@@ -24485,7 +24575,7 @@
 abstract class SVGAnimatedNumber {
 
   /** @domName SVGAnimatedNumber.animVal */
-  abstract num get animVal;
+  num get animVal;
 
   /** @domName SVGAnimatedNumber.baseVal */
   num baseVal;
@@ -24507,10 +24597,10 @@
 abstract class SVGAnimatedNumberList implements List<SVGAnimatedNumber> {
 
   /** @domName SVGAnimatedNumberList.animVal */
-  abstract SVGNumberList get animVal;
+  SVGNumberList get animVal;
 
   /** @domName SVGAnimatedNumberList.baseVal */
-  abstract SVGNumberList get baseVal;
+  SVGNumberList get baseVal;
 }
 
 class _SVGAnimatedNumberListImpl implements SVGAnimatedNumberList, JavaScriptIndexingBehavior native "*SVGAnimatedNumberList" {
@@ -24522,7 +24612,7 @@
   _SVGAnimatedNumberImpl operator[](int index) => JS("_SVGAnimatedNumberImpl", "#[#]", this, index);
 
   void operator[]=(int index, _SVGAnimatedNumberImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGAnimatedNumber> mixins.
   // SVGAnimatedNumber is the element type.
@@ -24539,15 +24629,15 @@
   // From Collection<SVGAnimatedNumber>:
 
   void add(SVGAnimatedNumber value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGAnimatedNumber value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGAnimatedNumber> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGAnimatedNumber element) => _Collections.contains(this, element);
@@ -24563,38 +24653,38 @@
 
   bool some(bool f(SVGAnimatedNumber element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGAnimatedNumber>:
 
   void sort([Comparator<SVGAnimatedNumber> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGAnimatedNumber element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGAnimatedNumber element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGAnimatedNumber last() => this[length - 1];
+  SVGAnimatedNumber get last => this[length - 1];
 
   SVGAnimatedNumber removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGAnimatedNumber> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGAnimatedNumber initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGAnimatedNumber> getRange(int start, int rangeLength) =>
@@ -24612,10 +24702,10 @@
 abstract class SVGAnimatedPreserveAspectRatio {
 
   /** @domName SVGAnimatedPreserveAspectRatio.animVal */
-  abstract SVGPreserveAspectRatio get animVal;
+  SVGPreserveAspectRatio get animVal;
 
   /** @domName SVGAnimatedPreserveAspectRatio.baseVal */
-  abstract SVGPreserveAspectRatio get baseVal;
+  SVGPreserveAspectRatio get baseVal;
 }
 
 class _SVGAnimatedPreserveAspectRatioImpl implements SVGAnimatedPreserveAspectRatio native "*SVGAnimatedPreserveAspectRatio" {
@@ -24634,10 +24724,10 @@
 abstract class SVGAnimatedRect {
 
   /** @domName SVGAnimatedRect.animVal */
-  abstract SVGRect get animVal;
+  SVGRect get animVal;
 
   /** @domName SVGAnimatedRect.baseVal */
-  abstract SVGRect get baseVal;
+  SVGRect get baseVal;
 }
 
 class _SVGAnimatedRectImpl implements SVGAnimatedRect native "*SVGAnimatedRect" {
@@ -24656,7 +24746,7 @@
 abstract class SVGAnimatedString {
 
   /** @domName SVGAnimatedString.animVal */
-  abstract String get animVal;
+  String get animVal;
 
   /** @domName SVGAnimatedString.baseVal */
   String baseVal;
@@ -24678,10 +24768,10 @@
 abstract class SVGAnimatedTransformList implements List<SVGAnimateTransformElement> {
 
   /** @domName SVGAnimatedTransformList.animVal */
-  abstract SVGTransformList get animVal;
+  SVGTransformList get animVal;
 
   /** @domName SVGAnimatedTransformList.baseVal */
-  abstract SVGTransformList get baseVal;
+  SVGTransformList get baseVal;
 }
 
 class _SVGAnimatedTransformListImpl implements SVGAnimatedTransformList, JavaScriptIndexingBehavior native "*SVGAnimatedTransformList" {
@@ -24693,7 +24783,7 @@
   _SVGAnimateTransformElementImpl operator[](int index) => JS("_SVGAnimateTransformElementImpl", "#[#]", this, index);
 
   void operator[]=(int index, _SVGAnimateTransformElementImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGAnimateTransformElement> mixins.
   // SVGAnimateTransformElement is the element type.
@@ -24710,15 +24800,15 @@
   // From Collection<SVGAnimateTransformElement>:
 
   void add(SVGAnimateTransformElement value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGAnimateTransformElement value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGAnimateTransformElement> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGAnimateTransformElement element) => _Collections.contains(this, element);
@@ -24734,38 +24824,38 @@
 
   bool some(bool f(SVGAnimateTransformElement element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGAnimateTransformElement>:
 
   void sort([Comparator<SVGAnimateTransformElement> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGAnimateTransformElement element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGAnimateTransformElement element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGAnimateTransformElement last() => this[length - 1];
+  SVGAnimateTransformElement get last => this[length - 1];
 
   SVGAnimateTransformElement removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGAnimateTransformElement> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGAnimateTransformElement initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGAnimateTransformElement> getRange(int start, int rangeLength) =>
@@ -24783,7 +24873,7 @@
 abstract class SVGAnimationElement implements SVGElement, SVGTests, SVGExternalResourcesRequired, ElementTimeControl {
 
   /** @domName SVGAnimationElement.targetElement */
-  abstract SVGElement get targetElement;
+  SVGElement get targetElement;
 
   /** @domName SVGAnimationElement.getCurrentTime */
   num getCurrentTime();
@@ -24839,13 +24929,13 @@
 abstract class SVGCircleElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGCircleElement.cx */
-  abstract SVGAnimatedLength get cx;
+  SVGAnimatedLength get cx;
 
   /** @domName SVGCircleElement.cy */
-  abstract SVGAnimatedLength get cy;
+  SVGAnimatedLength get cy;
 
   /** @domName SVGCircleElement.r */
-  abstract SVGAnimatedLength get r;
+  SVGAnimatedLength get r;
 }
 
 class _SVGCircleElementImpl extends _SVGElementImpl implements SVGCircleElement native "*SVGCircleElement" {
@@ -24878,7 +24968,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -24913,7 +25003,7 @@
 abstract class SVGClipPathElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGClipPathElement.clipPathUnits */
-  abstract SVGAnimatedEnumeration get clipPathUnits;
+  SVGAnimatedEnumeration get clipPathUnits;
 }
 
 class _SVGClipPathElementImpl extends _SVGElementImpl implements SVGClipPathElement native "*SVGClipPathElement" {
@@ -24942,7 +25032,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -24985,10 +25075,10 @@
   static const int SVG_COLORTYPE_UNKNOWN = 0;
 
   /** @domName SVGColor.colorType */
-  abstract int get colorType;
+  int get colorType;
 
   /** @domName SVGColor.rgbColor */
-  abstract RGBColor get rgbColor;
+  RGBColor get rgbColor;
 
   /** @domName SVGColor.setColor */
   void setColor(int colorType, String rgbColor, String iccColor);
@@ -25034,25 +25124,25 @@
   static const int SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
 
   /** @domName SVGComponentTransferFunctionElement.amplitude */
-  abstract SVGAnimatedNumber get amplitude;
+  SVGAnimatedNumber get amplitude;
 
   /** @domName SVGComponentTransferFunctionElement.exponent */
-  abstract SVGAnimatedNumber get exponent;
+  SVGAnimatedNumber get exponent;
 
   /** @domName SVGComponentTransferFunctionElement.intercept */
-  abstract SVGAnimatedNumber get intercept;
+  SVGAnimatedNumber get intercept;
 
   /** @domName SVGComponentTransferFunctionElement.offset */
-  abstract SVGAnimatedNumber get offset;
+  SVGAnimatedNumber get offset;
 
   /** @domName SVGComponentTransferFunctionElement.slope */
-  abstract SVGAnimatedNumber get slope;
+  SVGAnimatedNumber get slope;
 
   /** @domName SVGComponentTransferFunctionElement.tableValues */
-  abstract SVGAnimatedNumberList get tableValues;
+  SVGAnimatedNumberList get tableValues;
 
   /** @domName SVGComponentTransferFunctionElement.type */
-  abstract SVGAnimatedEnumeration get type;
+  SVGAnimatedEnumeration get type;
 }
 
 class _SVGComponentTransferFunctionElementImpl extends _SVGElementImpl implements SVGComponentTransferFunctionElement native "*SVGComponentTransferFunctionElement" {
@@ -25081,10 +25171,10 @@
 abstract class SVGCursorElement implements SVGElement, SVGURIReference, SVGTests, SVGExternalResourcesRequired {
 
   /** @domName SVGCursorElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGCursorElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 
 class _SVGCursorElementImpl extends _SVGElementImpl implements SVGCursorElement native "*SVGCursorElement" {
@@ -25145,7 +25235,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -25190,7 +25280,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -25207,7 +25297,7 @@
 abstract class SVGDocument implements Document {
 
   /** @domName SVGDocument.rootElement */
-  abstract SVGSVGElement get rootElement;
+  SVGSVGElement get rootElement;
 
   /** @domName SVGDocument.createEvent */
   Event $dom_createEvent(String eventType);
@@ -25223,6 +25313,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.
 
+
 /// @domName SVGElement
 abstract class SVGElement implements Element {
 
@@ -25238,10 +25329,10 @@
   String id;
 
   /** @domName SVGElement.ownerSVGElement */
-  abstract SVGSVGElement get ownerSVGElement;
+  SVGSVGElement get ownerSVGElement;
 
   /** @domName SVGElement.viewportElement */
-  abstract SVGElement get viewportElement;
+  SVGElement get viewportElement;
 
   /** @domName SVGElement.xmlbase */
   String xmlbase;
@@ -25263,7 +25354,7 @@
 
 class _SVGElementImpl extends _ElementImpl implements SVGElement native "*SVGElement" {
   CSSClassSet get classes {
-    if (_cssClassSet === null) {
+    if (_cssClassSet == null) {
       _cssClassSet = new _AttributeClassSet(_ptr);
     }
     return _cssClassSet;
@@ -25301,7 +25392,7 @@
 
 
   // Shadowing definition.
-  String get id() => JS("String", "#.id", this);
+  String get id => JS("String", "#.id", this);
 
   void set id(String value) {
     JS("void", "#.id = #", this, value);
@@ -25329,28 +25420,28 @@
   SVGElementInstanceEvents get on;
 
   /** @domName SVGElementInstance.childNodes */
-  abstract List<SVGElementInstance> get childNodes;
+  List<SVGElementInstance> get childNodes;
 
   /** @domName SVGElementInstance.correspondingElement */
-  abstract SVGElement get correspondingElement;
+  SVGElement get correspondingElement;
 
   /** @domName SVGElementInstance.correspondingUseElement */
-  abstract SVGUseElement get correspondingUseElement;
+  SVGUseElement get correspondingUseElement;
 
   /** @domName SVGElementInstance.firstChild */
-  abstract SVGElementInstance get firstChild;
+  SVGElementInstance get firstChild;
 
   /** @domName SVGElementInstance.lastChild */
-  abstract SVGElementInstance get lastChild;
+  SVGElementInstance get lastChild;
 
   /** @domName SVGElementInstance.nextSibling */
-  abstract SVGElementInstance get nextSibling;
+  SVGElementInstance get nextSibling;
 
   /** @domName SVGElementInstance.parentNode */
-  abstract SVGElementInstance get parentNode;
+  SVGElementInstance get parentNode;
 
   /** @domName SVGElementInstance.previousSibling */
-  abstract SVGElementInstance get previousSibling;
+  SVGElementInstance get previousSibling;
 }
 
 abstract class SVGElementInstanceEvents implements Events {
@@ -25549,7 +25640,7 @@
   _SVGElementInstanceImpl operator[](int index) => JS("_SVGElementInstanceImpl", "#[#]", this, index);
 
   void operator[]=(int index, _SVGElementInstanceImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGElementInstance> mixins.
   // SVGElementInstance is the element type.
@@ -25566,15 +25657,15 @@
   // From Collection<SVGElementInstance>:
 
   void add(SVGElementInstance value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGElementInstance value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGElementInstance> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGElementInstance element) => _Collections.contains(this, element);
@@ -25590,38 +25681,38 @@
 
   bool some(bool f(SVGElementInstance element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGElementInstance>:
 
   void sort([Comparator<SVGElementInstance> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGElementInstance element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGElementInstance element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGElementInstance last() => this[length - 1];
+  SVGElementInstance get last => this[length - 1];
 
   SVGElementInstance removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGElementInstance> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGElementInstance initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGElementInstance> getRange(int start, int rangeLength) =>
@@ -25641,16 +25732,16 @@
 abstract class SVGEllipseElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGEllipseElement.cx */
-  abstract SVGAnimatedLength get cx;
+  SVGAnimatedLength get cx;
 
   /** @domName SVGEllipseElement.cy */
-  abstract SVGAnimatedLength get cy;
+  SVGAnimatedLength get cy;
 
   /** @domName SVGEllipseElement.rx */
-  abstract SVGAnimatedLength get rx;
+  SVGAnimatedLength get rx;
 
   /** @domName SVGEllipseElement.ry */
-  abstract SVGAnimatedLength get ry;
+  SVGAnimatedLength get ry;
 }
 
 class _SVGEllipseElementImpl extends _SVGElementImpl implements SVGEllipseElement native "*SVGEllipseElement" {
@@ -25685,7 +25776,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -25726,13 +25817,13 @@
   static const int SVG_WRONG_TYPE_ERR = 0;
 
   /** @domName SVGException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName SVGException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName SVGException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName SVGException.toString */
   String toString();
@@ -25758,7 +25849,7 @@
 abstract class SVGExternalResourcesRequired {
 
   /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  abstract SVGAnimatedBoolean get externalResourcesRequired;
+  SVGAnimatedBoolean get externalResourcesRequired;
 }
 // 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
@@ -25782,13 +25873,13 @@
   static const int SVG_FEBLEND_MODE_UNKNOWN = 0;
 
   /** @domName SVGFEBlendElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEBlendElement.in2 */
-  abstract SVGAnimatedString get in2;
+  SVGAnimatedString get in2;
 
   /** @domName SVGFEBlendElement.mode */
-  abstract SVGAnimatedEnumeration get mode;
+  SVGAnimatedEnumeration get mode;
 }
 
 class _SVGFEBlendElementImpl extends _SVGElementImpl implements SVGFEBlendElement native "*SVGFEBlendElement" {
@@ -25813,7 +25904,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -25840,13 +25931,13 @@
   static const int SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
 
   /** @domName SVGFEColorMatrixElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEColorMatrixElement.type */
-  abstract SVGAnimatedEnumeration get type;
+  SVGAnimatedEnumeration get type;
 
   /** @domName SVGFEColorMatrixElement.values */
-  abstract SVGAnimatedNumberList get values;
+  SVGAnimatedNumberList get values;
 }
 
 class _SVGFEColorMatrixElementImpl extends _SVGElementImpl implements SVGFEColorMatrixElement native "*SVGFEColorMatrixElement" {
@@ -25871,7 +25962,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -25888,7 +25979,7 @@
 abstract class SVGFEComponentTransferElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFEComponentTransferElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 }
 
 class _SVGFEComponentTransferElementImpl extends _SVGElementImpl implements SVGFEComponentTransferElement native "*SVGFEComponentTransferElement" {
@@ -25909,7 +26000,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -25940,25 +26031,25 @@
   static const int SVG_FECOMPOSITE_OPERATOR_XOR = 5;
 
   /** @domName SVGFECompositeElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFECompositeElement.in2 */
-  abstract SVGAnimatedString get in2;
+  SVGAnimatedString get in2;
 
   /** @domName SVGFECompositeElement.k1 */
-  abstract SVGAnimatedNumber get k1;
+  SVGAnimatedNumber get k1;
 
   /** @domName SVGFECompositeElement.k2 */
-  abstract SVGAnimatedNumber get k2;
+  SVGAnimatedNumber get k2;
 
   /** @domName SVGFECompositeElement.k3 */
-  abstract SVGAnimatedNumber get k3;
+  SVGAnimatedNumber get k3;
 
   /** @domName SVGFECompositeElement.k4 */
-  abstract SVGAnimatedNumber get k4;
+  SVGAnimatedNumber get k4;
 
   /** @domName SVGFECompositeElement.operator */
-  abstract SVGAnimatedEnumeration get operator;
+  SVGAnimatedEnumeration get operator;
 }
 
 class _SVGFECompositeElementImpl extends _SVGElementImpl implements SVGFECompositeElement native "*SVGFECompositeElement" {
@@ -25991,7 +26082,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26016,40 +26107,40 @@
   static const int SVG_EDGEMODE_WRAP = 2;
 
   /** @domName SVGFEConvolveMatrixElement.bias */
-  abstract SVGAnimatedNumber get bias;
+  SVGAnimatedNumber get bias;
 
   /** @domName SVGFEConvolveMatrixElement.divisor */
-  abstract SVGAnimatedNumber get divisor;
+  SVGAnimatedNumber get divisor;
 
   /** @domName SVGFEConvolveMatrixElement.edgeMode */
-  abstract SVGAnimatedEnumeration get edgeMode;
+  SVGAnimatedEnumeration get edgeMode;
 
   /** @domName SVGFEConvolveMatrixElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEConvolveMatrixElement.kernelMatrix */
-  abstract SVGAnimatedNumberList get kernelMatrix;
+  SVGAnimatedNumberList get kernelMatrix;
 
   /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthX */
-  abstract SVGAnimatedNumber get kernelUnitLengthX;
+  SVGAnimatedNumber get kernelUnitLengthX;
 
   /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthY */
-  abstract SVGAnimatedNumber get kernelUnitLengthY;
+  SVGAnimatedNumber get kernelUnitLengthY;
 
   /** @domName SVGFEConvolveMatrixElement.orderX */
-  abstract SVGAnimatedInteger get orderX;
+  SVGAnimatedInteger get orderX;
 
   /** @domName SVGFEConvolveMatrixElement.orderY */
-  abstract SVGAnimatedInteger get orderY;
+  SVGAnimatedInteger get orderY;
 
   /** @domName SVGFEConvolveMatrixElement.preserveAlpha */
-  abstract SVGAnimatedBoolean get preserveAlpha;
+  SVGAnimatedBoolean get preserveAlpha;
 
   /** @domName SVGFEConvolveMatrixElement.targetX */
-  abstract SVGAnimatedInteger get targetX;
+  SVGAnimatedInteger get targetX;
 
   /** @domName SVGFEConvolveMatrixElement.targetY */
-  abstract SVGAnimatedInteger get targetY;
+  SVGAnimatedInteger get targetY;
 }
 
 class _SVGFEConvolveMatrixElementImpl extends _SVGElementImpl implements SVGFEConvolveMatrixElement native "*SVGFEConvolveMatrixElement" {
@@ -26092,7 +26183,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26109,19 +26200,19 @@
 abstract class SVGFEDiffuseLightingElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFEDiffuseLightingElement.diffuseConstant */
-  abstract SVGAnimatedNumber get diffuseConstant;
+  SVGAnimatedNumber get diffuseConstant;
 
   /** @domName SVGFEDiffuseLightingElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthX */
-  abstract SVGAnimatedNumber get kernelUnitLengthX;
+  SVGAnimatedNumber get kernelUnitLengthX;
 
   /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthY */
-  abstract SVGAnimatedNumber get kernelUnitLengthY;
+  SVGAnimatedNumber get kernelUnitLengthY;
 
   /** @domName SVGFEDiffuseLightingElement.surfaceScale */
-  abstract SVGAnimatedNumber get surfaceScale;
+  SVGAnimatedNumber get surfaceScale;
 }
 
 class _SVGFEDiffuseLightingElementImpl extends _SVGElementImpl implements SVGFEDiffuseLightingElement native "*SVGFEDiffuseLightingElement" {
@@ -26150,7 +26241,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26177,19 +26268,19 @@
   static const int SVG_CHANNEL_UNKNOWN = 0;
 
   /** @domName SVGFEDisplacementMapElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEDisplacementMapElement.in2 */
-  abstract SVGAnimatedString get in2;
+  SVGAnimatedString get in2;
 
   /** @domName SVGFEDisplacementMapElement.scale */
-  abstract SVGAnimatedNumber get scale;
+  SVGAnimatedNumber get scale;
 
   /** @domName SVGFEDisplacementMapElement.xChannelSelector */
-  abstract SVGAnimatedEnumeration get xChannelSelector;
+  SVGAnimatedEnumeration get xChannelSelector;
 
   /** @domName SVGFEDisplacementMapElement.yChannelSelector */
-  abstract SVGAnimatedEnumeration get yChannelSelector;
+  SVGAnimatedEnumeration get yChannelSelector;
 }
 
 class _SVGFEDisplacementMapElementImpl extends _SVGElementImpl implements SVGFEDisplacementMapElement native "*SVGFEDisplacementMapElement" {
@@ -26218,7 +26309,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26235,10 +26326,10 @@
 abstract class SVGFEDistantLightElement implements SVGElement {
 
   /** @domName SVGFEDistantLightElement.azimuth */
-  abstract SVGAnimatedNumber get azimuth;
+  SVGAnimatedNumber get azimuth;
 
   /** @domName SVGFEDistantLightElement.elevation */
-  abstract SVGAnimatedNumber get elevation;
+  SVGAnimatedNumber get elevation;
 }
 
 class _SVGFEDistantLightElementImpl extends _SVGElementImpl implements SVGFEDistantLightElement native "*SVGFEDistantLightElement" {
@@ -26257,19 +26348,19 @@
 abstract class SVGFEDropShadowElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFEDropShadowElement.dx */
-  abstract SVGAnimatedNumber get dx;
+  SVGAnimatedNumber get dx;
 
   /** @domName SVGFEDropShadowElement.dy */
-  abstract SVGAnimatedNumber get dy;
+  SVGAnimatedNumber get dy;
 
   /** @domName SVGFEDropShadowElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEDropShadowElement.stdDeviationX */
-  abstract SVGAnimatedNumber get stdDeviationX;
+  SVGAnimatedNumber get stdDeviationX;
 
   /** @domName SVGFEDropShadowElement.stdDeviationY */
-  abstract SVGAnimatedNumber get stdDeviationY;
+  SVGAnimatedNumber get stdDeviationY;
 
   /** @domName SVGFEDropShadowElement.setStdDeviation */
   void setStdDeviation(num stdDeviationX, num stdDeviationY);
@@ -26303,7 +26394,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26336,7 +26427,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26401,13 +26492,13 @@
 abstract class SVGFEGaussianBlurElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFEGaussianBlurElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEGaussianBlurElement.stdDeviationX */
-  abstract SVGAnimatedNumber get stdDeviationX;
+  SVGAnimatedNumber get stdDeviationX;
 
   /** @domName SVGFEGaussianBlurElement.stdDeviationY */
-  abstract SVGAnimatedNumber get stdDeviationY;
+  SVGAnimatedNumber get stdDeviationY;
 
   /** @domName SVGFEGaussianBlurElement.setStdDeviation */
   void setStdDeviation(num stdDeviationX, num stdDeviationY);
@@ -26437,7 +26528,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26454,7 +26545,7 @@
 abstract class SVGFEImageElement implements SVGElement, SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFEImageElement.preserveAspectRatio */
-  abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
 }
 
 class _SVGFEImageElementImpl extends _SVGElementImpl implements SVGFEImageElement native "*SVGFEImageElement" {
@@ -26489,7 +26580,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26522,7 +26613,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26539,7 +26630,7 @@
 abstract class SVGFEMergeNodeElement implements SVGElement {
 
   /** @domName SVGFEMergeNodeElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 }
 
 class _SVGFEMergeNodeElementImpl extends _SVGElementImpl implements SVGFEMergeNodeElement native "*SVGFEMergeNodeElement" {
@@ -26562,16 +26653,16 @@
   static const int SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
 
   /** @domName SVGFEMorphologyElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEMorphologyElement.operator */
-  abstract SVGAnimatedEnumeration get operator;
+  SVGAnimatedEnumeration get operator;
 
   /** @domName SVGFEMorphologyElement.radiusX */
-  abstract SVGAnimatedNumber get radiusX;
+  SVGAnimatedNumber get radiusX;
 
   /** @domName SVGFEMorphologyElement.radiusY */
-  abstract SVGAnimatedNumber get radiusY;
+  SVGAnimatedNumber get radiusY;
 
   /** @domName SVGFEMorphologyElement.setRadius */
   void setRadius(num radiusX, num radiusY);
@@ -26603,7 +26694,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26620,13 +26711,13 @@
 abstract class SVGFEOffsetElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFEOffsetElement.dx */
-  abstract SVGAnimatedNumber get dx;
+  SVGAnimatedNumber get dx;
 
   /** @domName SVGFEOffsetElement.dy */
-  abstract SVGAnimatedNumber get dy;
+  SVGAnimatedNumber get dy;
 
   /** @domName SVGFEOffsetElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 }
 
 class _SVGFEOffsetElementImpl extends _SVGElementImpl implements SVGFEOffsetElement native "*SVGFEOffsetElement" {
@@ -26651,7 +26742,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26668,13 +26759,13 @@
 abstract class SVGFEPointLightElement implements SVGElement {
 
   /** @domName SVGFEPointLightElement.x */
-  abstract SVGAnimatedNumber get x;
+  SVGAnimatedNumber get x;
 
   /** @domName SVGFEPointLightElement.y */
-  abstract SVGAnimatedNumber get y;
+  SVGAnimatedNumber get y;
 
   /** @domName SVGFEPointLightElement.z */
-  abstract SVGAnimatedNumber get z;
+  SVGAnimatedNumber get z;
 }
 
 class _SVGFEPointLightElementImpl extends _SVGElementImpl implements SVGFEPointLightElement native "*SVGFEPointLightElement" {
@@ -26695,16 +26786,16 @@
 abstract class SVGFESpecularLightingElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFESpecularLightingElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFESpecularLightingElement.specularConstant */
-  abstract SVGAnimatedNumber get specularConstant;
+  SVGAnimatedNumber get specularConstant;
 
   /** @domName SVGFESpecularLightingElement.specularExponent */
-  abstract SVGAnimatedNumber get specularExponent;
+  SVGAnimatedNumber get specularExponent;
 
   /** @domName SVGFESpecularLightingElement.surfaceScale */
-  abstract SVGAnimatedNumber get surfaceScale;
+  SVGAnimatedNumber get surfaceScale;
 }
 
 class _SVGFESpecularLightingElementImpl extends _SVGElementImpl implements SVGFESpecularLightingElement native "*SVGFESpecularLightingElement" {
@@ -26731,7 +26822,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26748,28 +26839,28 @@
 abstract class SVGFESpotLightElement implements SVGElement {
 
   /** @domName SVGFESpotLightElement.limitingConeAngle */
-  abstract SVGAnimatedNumber get limitingConeAngle;
+  SVGAnimatedNumber get limitingConeAngle;
 
   /** @domName SVGFESpotLightElement.pointsAtX */
-  abstract SVGAnimatedNumber get pointsAtX;
+  SVGAnimatedNumber get pointsAtX;
 
   /** @domName SVGFESpotLightElement.pointsAtY */
-  abstract SVGAnimatedNumber get pointsAtY;
+  SVGAnimatedNumber get pointsAtY;
 
   /** @domName SVGFESpotLightElement.pointsAtZ */
-  abstract SVGAnimatedNumber get pointsAtZ;
+  SVGAnimatedNumber get pointsAtZ;
 
   /** @domName SVGFESpotLightElement.specularExponent */
-  abstract SVGAnimatedNumber get specularExponent;
+  SVGAnimatedNumber get specularExponent;
 
   /** @domName SVGFESpotLightElement.x */
-  abstract SVGAnimatedNumber get x;
+  SVGAnimatedNumber get x;
 
   /** @domName SVGFESpotLightElement.y */
-  abstract SVGAnimatedNumber get y;
+  SVGAnimatedNumber get y;
 
   /** @domName SVGFESpotLightElement.z */
-  abstract SVGAnimatedNumber get z;
+  SVGAnimatedNumber get z;
 }
 
 class _SVGFESpotLightElementImpl extends _SVGElementImpl implements SVGFESpotLightElement native "*SVGFESpotLightElement" {
@@ -26800,7 +26891,7 @@
 abstract class SVGFETileElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFETileElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 }
 
 class _SVGFETileElementImpl extends _SVGElementImpl implements SVGFETileElement native "*SVGFETileElement" {
@@ -26821,7 +26912,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26850,22 +26941,22 @@
   static const int SVG_TURBULENCE_TYPE_UNKNOWN = 0;
 
   /** @domName SVGFETurbulenceElement.baseFrequencyX */
-  abstract SVGAnimatedNumber get baseFrequencyX;
+  SVGAnimatedNumber get baseFrequencyX;
 
   /** @domName SVGFETurbulenceElement.baseFrequencyY */
-  abstract SVGAnimatedNumber get baseFrequencyY;
+  SVGAnimatedNumber get baseFrequencyY;
 
   /** @domName SVGFETurbulenceElement.numOctaves */
-  abstract SVGAnimatedInteger get numOctaves;
+  SVGAnimatedInteger get numOctaves;
 
   /** @domName SVGFETurbulenceElement.seed */
-  abstract SVGAnimatedNumber get seed;
+  SVGAnimatedNumber get seed;
 
   /** @domName SVGFETurbulenceElement.stitchTiles */
-  abstract SVGAnimatedEnumeration get stitchTiles;
+  SVGAnimatedEnumeration get stitchTiles;
 
   /** @domName SVGFETurbulenceElement.type */
-  abstract SVGAnimatedEnumeration get type;
+  SVGAnimatedEnumeration get type;
 }
 
 class _SVGFETurbulenceElementImpl extends _SVGElementImpl implements SVGFETurbulenceElement native "*SVGFETurbulenceElement" {
@@ -26896,7 +26987,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26913,28 +27004,28 @@
 abstract class SVGFilterElement implements SVGElement, SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
 
   /** @domName SVGFilterElement.filterResX */
-  abstract SVGAnimatedInteger get filterResX;
+  SVGAnimatedInteger get filterResX;
 
   /** @domName SVGFilterElement.filterResY */
-  abstract SVGAnimatedInteger get filterResY;
+  SVGAnimatedInteger get filterResY;
 
   /** @domName SVGFilterElement.filterUnits */
-  abstract SVGAnimatedEnumeration get filterUnits;
+  SVGAnimatedEnumeration get filterUnits;
 
   /** @domName SVGFilterElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGFilterElement.primitiveUnits */
-  abstract SVGAnimatedEnumeration get primitiveUnits;
+  SVGAnimatedEnumeration get primitiveUnits;
 
   /** @domName SVGFilterElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGFilterElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGFilterElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 
   /** @domName SVGFilterElement.setFilterRes */
   void setFilterRes(int filterResX, int filterResY);
@@ -26976,7 +27067,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -26993,19 +27084,19 @@
 abstract class SVGFilterPrimitiveStandardAttributes implements SVGStylable {
 
   /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  abstract SVGAnimatedString get result;
+  SVGAnimatedString get result;
 
   /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 // 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
@@ -27017,10 +27108,10 @@
 abstract class SVGFitToViewBox {
 
   /** @domName SVGFitToViewBox.preserveAspectRatio */
-  abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
 
   /** @domName SVGFitToViewBox.viewBox */
-  abstract SVGAnimatedRect get viewBox;
+  SVGAnimatedRect get viewBox;
 }
 // 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
@@ -27104,16 +27195,16 @@
 abstract class SVGForeignObjectElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGForeignObjectElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGForeignObjectElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGForeignObjectElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGForeignObjectElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 
 class _SVGForeignObjectElementImpl extends _SVGElementImpl implements SVGForeignObjectElement native "*SVGForeignObjectElement" {
@@ -27148,7 +27239,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -27207,7 +27298,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -27292,7 +27383,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -27317,13 +27408,13 @@
   static const int SVG_SPREADMETHOD_UNKNOWN = 0;
 
   /** @domName SVGGradientElement.gradientTransform */
-  abstract SVGAnimatedTransformList get gradientTransform;
+  SVGAnimatedTransformList get gradientTransform;
 
   /** @domName SVGGradientElement.gradientUnits */
-  abstract SVGAnimatedEnumeration get gradientUnits;
+  SVGAnimatedEnumeration get gradientUnits;
 
   /** @domName SVGGradientElement.spreadMethod */
-  abstract SVGAnimatedEnumeration get spreadMethod;
+  SVGAnimatedEnumeration get spreadMethod;
 }
 
 class _SVGGradientElementImpl extends _SVGElementImpl implements SVGGradientElement native "*SVGGradientElement" {
@@ -27344,7 +27435,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -27373,19 +27464,19 @@
 abstract class SVGImageElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGImageElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGImageElement.preserveAspectRatio */
-  abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
 
   /** @domName SVGImageElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGImageElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGImageElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 
 class _SVGImageElementImpl extends _SVGElementImpl implements SVGImageElement native "*SVGImageElement" {
@@ -27426,7 +27517,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -27498,7 +27589,7 @@
   static const int SVG_LENGTHTYPE_UNKNOWN = 0;
 
   /** @domName SVGLength.unitType */
-  abstract int get unitType;
+  int get unitType;
 
   /** @domName SVGLength.value */
   num value;
@@ -27540,7 +27631,7 @@
 abstract class SVGLengthList implements List<SVGLength> {
 
   /** @domName SVGLengthList.numberOfItems */
-  abstract int get numberOfItems;
+  int get numberOfItems;
 
   /** @domName SVGLengthList.appendItem */
   SVGLength appendItem(SVGLength item);
@@ -27571,7 +27662,7 @@
   _SVGLengthImpl operator[](int index) => JS("_SVGLengthImpl", "#[#]", this, index);
 
   void operator[]=(int index, _SVGLengthImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGLength> mixins.
   // SVGLength is the element type.
@@ -27588,15 +27679,15 @@
   // From Collection<SVGLength>:
 
   void add(SVGLength value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGLength value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGLength> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGLength element) => _Collections.contains(this, element);
@@ -27612,38 +27703,38 @@
 
   bool some(bool f(SVGLength element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGLength>:
 
   void sort([Comparator<SVGLength> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGLength element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGLength element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGLength last() => this[length - 1];
+  SVGLength get last => this[length - 1];
 
   SVGLength removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGLength> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGLength initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGLength> getRange(int start, int rangeLength) =>
@@ -27675,16 +27766,16 @@
 abstract class SVGLineElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGLineElement.x1 */
-  abstract SVGAnimatedLength get x1;
+  SVGAnimatedLength get x1;
 
   /** @domName SVGLineElement.x2 */
-  abstract SVGAnimatedLength get x2;
+  SVGAnimatedLength get x2;
 
   /** @domName SVGLineElement.y1 */
-  abstract SVGAnimatedLength get y1;
+  SVGAnimatedLength get y1;
 
   /** @domName SVGLineElement.y2 */
-  abstract SVGAnimatedLength get y2;
+  SVGAnimatedLength get y2;
 }
 
 class _SVGLineElementImpl extends _SVGElementImpl implements SVGLineElement native "*SVGLineElement" {
@@ -27719,7 +27810,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -27754,16 +27845,16 @@
 abstract class SVGLinearGradientElement implements SVGGradientElement {
 
   /** @domName SVGLinearGradientElement.x1 */
-  abstract SVGAnimatedLength get x1;
+  SVGAnimatedLength get x1;
 
   /** @domName SVGLinearGradientElement.x2 */
-  abstract SVGAnimatedLength get x2;
+  SVGAnimatedLength get x2;
 
   /** @domName SVGLinearGradientElement.y1 */
-  abstract SVGAnimatedLength get y1;
+  SVGAnimatedLength get y1;
 
   /** @domName SVGLinearGradientElement.y2 */
-  abstract SVGAnimatedLength get y2;
+  SVGAnimatedLength get y2;
 }
 
 class _SVGLinearGradientElementImpl extends _SVGGradientElementImpl implements SVGLinearGradientElement native "*SVGLinearGradientElement" {
@@ -27786,10 +27877,10 @@
 abstract class SVGLocatable {
 
   /** @domName SVGLocatable.farthestViewportElement */
-  abstract SVGElement get farthestViewportElement;
+  SVGElement get farthestViewportElement;
 
   /** @domName SVGLocatable.nearestViewportElement */
-  abstract SVGElement get nearestViewportElement;
+  SVGElement get nearestViewportElement;
 
   /** @domName SVGLocatable.getBBox */
   SVGRect getBBox();
@@ -27845,25 +27936,25 @@
   static const int SVG_MARKER_ORIENT_UNKNOWN = 0;
 
   /** @domName SVGMarkerElement.markerHeight */
-  abstract SVGAnimatedLength get markerHeight;
+  SVGAnimatedLength get markerHeight;
 
   /** @domName SVGMarkerElement.markerUnits */
-  abstract SVGAnimatedEnumeration get markerUnits;
+  SVGAnimatedEnumeration get markerUnits;
 
   /** @domName SVGMarkerElement.markerWidth */
-  abstract SVGAnimatedLength get markerWidth;
+  SVGAnimatedLength get markerWidth;
 
   /** @domName SVGMarkerElement.orientAngle */
-  abstract SVGAnimatedAngle get orientAngle;
+  SVGAnimatedAngle get orientAngle;
 
   /** @domName SVGMarkerElement.orientType */
-  abstract SVGAnimatedEnumeration get orientType;
+  SVGAnimatedEnumeration get orientType;
 
   /** @domName SVGMarkerElement.refX */
-  abstract SVGAnimatedLength get refX;
+  SVGAnimatedLength get refX;
 
   /** @domName SVGMarkerElement.refY */
-  abstract SVGAnimatedLength get refY;
+  SVGAnimatedLength get refY;
 
   /** @domName SVGMarkerElement.setOrientToAngle */
   void setOrientToAngle(SVGAngle angle);
@@ -27904,7 +27995,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -27927,22 +28018,22 @@
 abstract class SVGMaskElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
 
   /** @domName SVGMaskElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGMaskElement.maskContentUnits */
-  abstract SVGAnimatedEnumeration get maskContentUnits;
+  SVGAnimatedEnumeration get maskContentUnits;
 
   /** @domName SVGMaskElement.maskUnits */
-  abstract SVGAnimatedEnumeration get maskUnits;
+  SVGAnimatedEnumeration get maskUnits;
 
   /** @domName SVGMaskElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGMaskElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGMaskElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 
 class _SVGMaskElementImpl extends _SVGElementImpl implements SVGMaskElement native "*SVGMaskElement" {
@@ -27981,7 +28072,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -28136,7 +28227,7 @@
 abstract class SVGNumberList implements List<SVGNumber> {
 
   /** @domName SVGNumberList.numberOfItems */
-  abstract int get numberOfItems;
+  int get numberOfItems;
 
   /** @domName SVGNumberList.appendItem */
   SVGNumber appendItem(SVGNumber item);
@@ -28167,7 +28258,7 @@
   _SVGNumberImpl operator[](int index) => JS("_SVGNumberImpl", "#[#]", this, index);
 
   void operator[]=(int index, _SVGNumberImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGNumber> mixins.
   // SVGNumber is the element type.
@@ -28184,15 +28275,15 @@
   // From Collection<SVGNumber>:
 
   void add(SVGNumber value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGNumber value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGNumber> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGNumber element) => _Collections.contains(this, element);
@@ -28208,38 +28299,38 @@
 
   bool some(bool f(SVGNumber element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGNumber>:
 
   void sort([Comparator<SVGNumber> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGNumber element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGNumber element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGNumber last() => this[length - 1];
+  SVGNumber get last => this[length - 1];
 
   SVGNumber removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGNumber> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGNumber initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGNumber> getRange(int start, int rangeLength) =>
@@ -28291,10 +28382,10 @@
   static const int SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106;
 
   /** @domName SVGPaint.paintType */
-  abstract int get paintType;
+  int get paintType;
 
   /** @domName SVGPaint.uri */
-  abstract String get uri;
+  String get uri;
 
   /** @domName SVGPaint.setPaint */
   void setPaint(int paintType, String uri, String rgbColor, String iccColor);
@@ -28323,19 +28414,19 @@
 abstract class SVGPathElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGPathElement.animatedNormalizedPathSegList */
-  abstract SVGPathSegList get animatedNormalizedPathSegList;
+  SVGPathSegList get animatedNormalizedPathSegList;
 
   /** @domName SVGPathElement.animatedPathSegList */
-  abstract SVGPathSegList get animatedPathSegList;
+  SVGPathSegList get animatedPathSegList;
 
   /** @domName SVGPathElement.normalizedPathSegList */
-  abstract SVGPathSegList get normalizedPathSegList;
+  SVGPathSegList get normalizedPathSegList;
 
   /** @domName SVGPathElement.pathLength */
-  abstract SVGAnimatedNumber get pathLength;
+  SVGAnimatedNumber get pathLength;
 
   /** @domName SVGPathElement.pathSegList */
-  abstract SVGPathSegList get pathSegList;
+  SVGPathSegList get pathSegList;
 
   /** @domName SVGPathElement.createSVGPathSegArcAbs */
   SVGPathSegArcAbs createSVGPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag);
@@ -28482,7 +28573,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -28557,10 +28648,10 @@
   static const int PATHSEG_UNKNOWN = 0;
 
   /** @domName SVGPathSeg.pathSegType */
-  abstract int get pathSegType;
+  int get pathSegType;
 
   /** @domName SVGPathSeg.pathSegTypeAsLetter */
-  abstract String get pathSegTypeAsLetter;
+  String get pathSegTypeAsLetter;
 }
 // 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
@@ -29053,7 +29144,7 @@
 abstract class SVGPathSegList implements List<SVGPathSeg> {
 
   /** @domName SVGPathSegList.numberOfItems */
-  abstract int get numberOfItems;
+  int get numberOfItems;
 
   /** @domName SVGPathSegList.appendItem */
   SVGPathSeg appendItem(SVGPathSeg newItem);
@@ -29084,7 +29175,7 @@
   _SVGPathSegImpl operator[](int index) => JS("_SVGPathSegImpl", "#[#]", this, index);
 
   void operator[]=(int index, _SVGPathSegImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGPathSeg> mixins.
   // SVGPathSeg is the element type.
@@ -29101,15 +29192,15 @@
   // From Collection<SVGPathSeg>:
 
   void add(SVGPathSeg value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGPathSeg value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGPathSeg> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGPathSeg element) => _Collections.contains(this, element);
@@ -29125,38 +29216,38 @@
 
   bool some(bool f(SVGPathSeg element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGPathSeg>:
 
   void sort([Comparator<SVGPathSeg> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGPathSeg element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGPathSeg element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGPathSeg last() => this[length - 1];
+  SVGPathSeg get last => this[length - 1];
 
   SVGPathSeg removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGPathSeg> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGPathSeg initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGPathSeg> getRange(int start, int rangeLength) =>
@@ -29232,25 +29323,25 @@
 abstract class SVGPatternElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGFitToViewBox {
 
   /** @domName SVGPatternElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGPatternElement.patternContentUnits */
-  abstract SVGAnimatedEnumeration get patternContentUnits;
+  SVGAnimatedEnumeration get patternContentUnits;
 
   /** @domName SVGPatternElement.patternTransform */
-  abstract SVGAnimatedTransformList get patternTransform;
+  SVGAnimatedTransformList get patternTransform;
 
   /** @domName SVGPatternElement.patternUnits */
-  abstract SVGAnimatedEnumeration get patternUnits;
+  SVGAnimatedEnumeration get patternUnits;
 
   /** @domName SVGPatternElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGPatternElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGPatternElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 
 class _SVGPatternElementImpl extends _SVGElementImpl implements SVGPatternElement native "*SVGPatternElement" {
@@ -29295,7 +29386,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -29345,7 +29436,7 @@
 abstract class SVGPointList {
 
   /** @domName SVGPointList.numberOfItems */
-  abstract int get numberOfItems;
+  int get numberOfItems;
 
   /** @domName SVGPointList.appendItem */
   SVGPoint appendItem(SVGPoint item);
@@ -29397,10 +29488,10 @@
 abstract class SVGPolygonElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGPolygonElement.animatedPoints */
-  abstract SVGPointList get animatedPoints;
+  SVGPointList get animatedPoints;
 
   /** @domName SVGPolygonElement.points */
-  abstract SVGPointList get points;
+  SVGPointList get points;
 }
 
 class _SVGPolygonElementImpl extends _SVGElementImpl implements SVGPolygonElement native "*SVGPolygonElement" {
@@ -29431,7 +29522,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -29466,10 +29557,10 @@
 abstract class SVGPolylineElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGPolylineElement.animatedPoints */
-  abstract SVGPointList get animatedPoints;
+  SVGPointList get animatedPoints;
 
   /** @domName SVGPolylineElement.points */
-  abstract SVGPointList get points;
+  SVGPointList get points;
 }
 
 class _SVGPolylineElementImpl extends _SVGElementImpl implements SVGPolylineElement native "*SVGPolylineElement" {
@@ -29500,7 +29591,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -29585,19 +29676,22 @@
 abstract class SVGRadialGradientElement implements SVGGradientElement {
 
   /** @domName SVGRadialGradientElement.cx */
-  abstract SVGAnimatedLength get cx;
+  SVGAnimatedLength get cx;
 
   /** @domName SVGRadialGradientElement.cy */
-  abstract SVGAnimatedLength get cy;
+  SVGAnimatedLength get cy;
+
+  /** @domName SVGRadialGradientElement.fr */
+  SVGAnimatedLength get fr;
 
   /** @domName SVGRadialGradientElement.fx */
-  abstract SVGAnimatedLength get fx;
+  SVGAnimatedLength get fx;
 
   /** @domName SVGRadialGradientElement.fy */
-  abstract SVGAnimatedLength get fy;
+  SVGAnimatedLength get fy;
 
   /** @domName SVGRadialGradientElement.r */
-  abstract SVGAnimatedLength get r;
+  SVGAnimatedLength get r;
 }
 
 class _SVGRadialGradientElementImpl extends _SVGGradientElementImpl implements SVGRadialGradientElement native "*SVGRadialGradientElement" {
@@ -29606,6 +29700,8 @@
 
   final _SVGAnimatedLengthImpl cy;
 
+  final _SVGAnimatedLengthImpl fr;
+
   final _SVGAnimatedLengthImpl fx;
 
   final _SVGAnimatedLengthImpl fy;
@@ -29643,22 +29739,22 @@
 abstract class SVGRectElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGRectElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGRectElement.rx */
-  abstract SVGAnimatedLength get rx;
+  SVGAnimatedLength get rx;
 
   /** @domName SVGRectElement.ry */
-  abstract SVGAnimatedLength get ry;
+  SVGAnimatedLength get ry;
 
   /** @domName SVGRectElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGRectElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGRectElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 
 class _SVGRectElementImpl extends _SVGElementImpl implements SVGRectElement native "*SVGRectElement" {
@@ -29697,7 +29793,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -29761,6 +29857,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.
 
+
 /// @domName SVGSVGElement
 abstract class SVGSVGElement extends SVGElement implements SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGLocatable, SVGFitToViewBox, SVGZoomAndPan {
   factory SVGSVGElement() => _SVGSVGElementFactoryProvider.createSVGSVGElement();
@@ -29776,40 +29873,40 @@
   num currentScale;
 
   /** @domName SVGSVGElement.currentTranslate */
-  abstract SVGPoint get currentTranslate;
+  SVGPoint get currentTranslate;
 
   /** @domName SVGSVGElement.currentView */
-  abstract SVGViewSpec get currentView;
+  SVGViewSpec get currentView;
 
   /** @domName SVGSVGElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGSVGElement.pixelUnitToMillimeterX */
-  abstract num get pixelUnitToMillimeterX;
+  num get pixelUnitToMillimeterX;
 
   /** @domName SVGSVGElement.pixelUnitToMillimeterY */
-  abstract num get pixelUnitToMillimeterY;
+  num get pixelUnitToMillimeterY;
 
   /** @domName SVGSVGElement.screenPixelToMillimeterX */
-  abstract num get screenPixelToMillimeterX;
+  num get screenPixelToMillimeterX;
 
   /** @domName SVGSVGElement.screenPixelToMillimeterY */
-  abstract num get screenPixelToMillimeterY;
+  num get screenPixelToMillimeterY;
 
   /** @domName SVGSVGElement.useCurrentView */
-  abstract bool get useCurrentView;
+  bool get useCurrentView;
 
   /** @domName SVGSVGElement.viewport */
-  abstract SVGRect get viewport;
+  SVGRect get viewport;
 
   /** @domName SVGSVGElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGSVGElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGSVGElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 
   /** @domName SVGSVGElement.animationsPaused */
   bool animationsPaused();
@@ -29982,7 +30079,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -30060,7 +30157,7 @@
 abstract class SVGStopElement implements SVGElement, SVGStylable {
 
   /** @domName SVGStopElement.offset */
-  abstract SVGAnimatedNumber get offset;
+  SVGAnimatedNumber get offset;
 }
 
 class _SVGStopElementImpl extends _SVGElementImpl implements SVGStopElement native "*SVGStopElement" {
@@ -30069,7 +30166,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -30086,7 +30183,7 @@
 abstract class SVGStringList implements List<String> {
 
   /** @domName SVGStringList.numberOfItems */
-  abstract int get numberOfItems;
+  int get numberOfItems;
 
   /** @domName SVGStringList.appendItem */
   String appendItem(String item);
@@ -30117,7 +30214,7 @@
   String operator[](int index) => JS("String", "#[#]", this, index);
 
   void operator[]=(int index, String value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<String> mixins.
   // String is the element type.
@@ -30134,15 +30231,15 @@
   // From Collection<String>:
 
   void add(String value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(String value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<String> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(String element) => _Collections.contains(this, element);
@@ -30158,38 +30255,38 @@
 
   bool some(bool f(String element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<String>:
 
   void sort([Comparator<String> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(String element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(String element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  String last() => this[length - 1];
+  String get last => this[length - 1];
 
   String removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [String initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<String> getRange(int start, int rangeLength) =>
@@ -30221,10 +30318,10 @@
 abstract class SVGStylable {
 
   /** @domName SVGStylable.className */
-  abstract SVGAnimatedString get $dom_svgClassName;
+  SVGAnimatedString get $dom_svgClassName;
 
   /** @domName SVGStylable.style */
-  abstract CSSStyleDeclaration get style;
+  CSSStyleDeclaration get style;
 
   /** @domName SVGStylable.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name);
@@ -30258,7 +30355,7 @@
   String media;
 
   // Shadowing definition.
-  String get title() => JS("String", "#.title", this);
+  String get title => JS("String", "#.title", this);
 
   void set title(String value) {
     JS("void", "#.title = #", this, value);
@@ -30306,7 +30403,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -30355,7 +30452,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -30406,13 +30503,13 @@
 abstract class SVGTests {
 
   /** @domName SVGTests.requiredExtensions */
-  abstract SVGStringList get requiredExtensions;
+  SVGStringList get requiredExtensions;
 
   /** @domName SVGTests.requiredFeatures */
-  abstract SVGStringList get requiredFeatures;
+  SVGStringList get requiredFeatures;
 
   /** @domName SVGTests.systemLanguage */
-  abstract SVGStringList get systemLanguage;
+  SVGStringList get systemLanguage;
 
   /** @domName SVGTests.hasExtension */
   bool hasExtension(String extension);
@@ -30433,10 +30530,10 @@
   static const int LENGTHADJUST_UNKNOWN = 0;
 
   /** @domName SVGTextContentElement.lengthAdjust */
-  abstract SVGAnimatedEnumeration get lengthAdjust;
+  SVGAnimatedEnumeration get lengthAdjust;
 
   /** @domName SVGTextContentElement.textLength */
-  abstract SVGAnimatedLength get textLength;
+  SVGAnimatedLength get textLength;
 
   /** @domName SVGTextContentElement.getCharNumAtPosition */
   int getCharNumAtPosition(SVGPoint point);
@@ -30512,7 +30609,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -30571,13 +30668,13 @@
   static const int TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
 
   /** @domName SVGTextPathElement.method */
-  abstract SVGAnimatedEnumeration get method;
+  SVGAnimatedEnumeration get method;
 
   /** @domName SVGTextPathElement.spacing */
-  abstract SVGAnimatedEnumeration get spacing;
+  SVGAnimatedEnumeration get spacing;
 
   /** @domName SVGTextPathElement.startOffset */
-  abstract SVGAnimatedLength get startOffset;
+  SVGAnimatedLength get startOffset;
 }
 
 class _SVGTextPathElementImpl extends _SVGTextContentElementImpl implements SVGTextPathElement native "*SVGTextPathElement" {
@@ -30602,19 +30699,19 @@
 abstract class SVGTextPositioningElement implements SVGTextContentElement {
 
   /** @domName SVGTextPositioningElement.dx */
-  abstract SVGAnimatedLengthList get dx;
+  SVGAnimatedLengthList get dx;
 
   /** @domName SVGTextPositioningElement.dy */
-  abstract SVGAnimatedLengthList get dy;
+  SVGAnimatedLengthList get dy;
 
   /** @domName SVGTextPositioningElement.rotate */
-  abstract SVGAnimatedNumberList get rotate;
+  SVGAnimatedNumberList get rotate;
 
   /** @domName SVGTextPositioningElement.x */
-  abstract SVGAnimatedLengthList get x;
+  SVGAnimatedLengthList get x;
 
   /** @domName SVGTextPositioningElement.y */
-  abstract SVGAnimatedLengthList get y;
+  SVGAnimatedLengthList get y;
 }
 
 class _SVGTextPositioningElementImpl extends _SVGTextContentElementImpl implements SVGTextPositioningElement native "*SVGTextPositioningElement" {
@@ -30649,7 +30746,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -30680,13 +30777,13 @@
   static const int SVG_TRANSFORM_UNKNOWN = 0;
 
   /** @domName SVGTransform.angle */
-  abstract num get angle;
+  num get angle;
 
   /** @domName SVGTransform.matrix */
-  abstract SVGMatrix get matrix;
+  SVGMatrix get matrix;
 
   /** @domName SVGTransform.type */
-  abstract int get type;
+  int get type;
 
   /** @domName SVGTransform.setMatrix */
   void setMatrix(SVGMatrix matrix);
@@ -30737,7 +30834,7 @@
 abstract class SVGTransformList implements List<SVGTransform> {
 
   /** @domName SVGTransformList.numberOfItems */
-  abstract int get numberOfItems;
+  int get numberOfItems;
 
   /** @domName SVGTransformList.appendItem */
   SVGTransform appendItem(SVGTransform item);
@@ -30774,7 +30871,7 @@
   _SVGTransformImpl operator[](int index) => JS("_SVGTransformImpl", "#[#]", this, index);
 
   void operator[]=(int index, _SVGTransformImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGTransform> mixins.
   // SVGTransform is the element type.
@@ -30791,15 +30888,15 @@
   // From Collection<SVGTransform>:
 
   void add(SVGTransform value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGTransform value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGTransform> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGTransform element) => _Collections.contains(this, element);
@@ -30815,38 +30912,38 @@
 
   bool some(bool f(SVGTransform element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGTransform>:
 
   void sort([Comparator<SVGTransform> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGTransform element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGTransform element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGTransform last() => this[length - 1];
+  SVGTransform get last => this[length - 1];
 
   SVGTransform removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGTransform> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGTransform initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGTransform> getRange(int start, int rangeLength) =>
@@ -30882,7 +30979,7 @@
 abstract class SVGTransformable implements SVGLocatable {
 
   /** @domName SVGTransformable.transform */
-  abstract SVGAnimatedTransformList get transform;
+  SVGAnimatedTransformList get transform;
 }
 // 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
@@ -30894,7 +30991,7 @@
 abstract class SVGURIReference {
 
   /** @domName SVGURIReference.href */
-  abstract SVGAnimatedString get href;
+  SVGAnimatedString get href;
 }
 // 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
@@ -30924,22 +31021,22 @@
 abstract class SVGUseElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGUseElement.animatedInstanceRoot */
-  abstract SVGElementInstance get animatedInstanceRoot;
+  SVGElementInstance get animatedInstanceRoot;
 
   /** @domName SVGUseElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGUseElement.instanceRoot */
-  abstract SVGElementInstance get instanceRoot;
+  SVGElementInstance get instanceRoot;
 
   /** @domName SVGUseElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGUseElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGUseElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 
 class _SVGUseElementImpl extends _SVGElementImpl implements SVGUseElement native "*SVGUseElement" {
@@ -30982,7 +31079,7 @@
 
   // From SVGStylable
 
-  _SVGAnimatedStringImpl get $dom_svgClassName() => JS("_SVGAnimatedStringImpl", "#.className", this);
+  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
 
   // Use implementation from Element.
   // final _CSSStyleDeclarationImpl style;
@@ -31029,7 +31126,7 @@
 abstract class SVGViewElement implements SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox, SVGZoomAndPan {
 
   /** @domName SVGViewElement.viewTarget */
-  abstract SVGStringList get viewTarget;
+  SVGStringList get viewTarget;
 }
 
 class _SVGViewElementImpl extends _SVGElementImpl implements SVGViewElement native "*SVGViewElement" {
@@ -31060,28 +31157,28 @@
 abstract class SVGViewSpec {
 
   /** @domName SVGViewSpec.preserveAspectRatio */
-  abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
 
   /** @domName SVGViewSpec.preserveAspectRatioString */
-  abstract String get preserveAspectRatioString;
+  String get preserveAspectRatioString;
 
   /** @domName SVGViewSpec.transform */
-  abstract SVGTransformList get transform;
+  SVGTransformList get transform;
 
   /** @domName SVGViewSpec.transformString */
-  abstract String get transformString;
+  String get transformString;
 
   /** @domName SVGViewSpec.viewBox */
-  abstract SVGAnimatedRect get viewBox;
+  SVGAnimatedRect get viewBox;
 
   /** @domName SVGViewSpec.viewBoxString */
-  abstract String get viewBoxString;
+  String get viewBoxString;
 
   /** @domName SVGViewSpec.viewTarget */
-  abstract SVGElement get viewTarget;
+  SVGElement get viewTarget;
 
   /** @domName SVGViewSpec.viewTargetString */
-  abstract String get viewTargetString;
+  String get viewTargetString;
 
   /** @domName SVGViewSpec.zoomAndPan */
   int zoomAndPan;
@@ -31135,19 +31232,19 @@
 abstract class SVGZoomEvent implements UIEvent {
 
   /** @domName SVGZoomEvent.newScale */
-  abstract num get newScale;
+  num get newScale;
 
   /** @domName SVGZoomEvent.newTranslate */
-  abstract SVGPoint get newTranslate;
+  SVGPoint get newTranslate;
 
   /** @domName SVGZoomEvent.previousScale */
-  abstract num get previousScale;
+  num get previousScale;
 
   /** @domName SVGZoomEvent.previousTranslate */
-  abstract SVGPoint get previousTranslate;
+  SVGPoint get previousTranslate;
 
   /** @domName SVGZoomEvent.zoomRectScreen */
-  abstract SVGRect get zoomRectScreen;
+  SVGRect get zoomRectScreen;
 }
 
 class _SVGZoomEventImpl extends _UIEventImpl implements SVGZoomEvent native "*SVGZoomEvent" {
@@ -31172,28 +31269,28 @@
 abstract class Screen {
 
   /** @domName Screen.availHeight */
-  abstract int get availHeight;
+  int get availHeight;
 
   /** @domName Screen.availLeft */
-  abstract int get availLeft;
+  int get availLeft;
 
   /** @domName Screen.availTop */
-  abstract int get availTop;
+  int get availTop;
 
   /** @domName Screen.availWidth */
-  abstract int get availWidth;
+  int get availWidth;
 
   /** @domName Screen.colorDepth */
-  abstract int get colorDepth;
+  int get colorDepth;
 
   /** @domName Screen.height */
-  abstract int get height;
+  int get height;
 
   /** @domName Screen.pixelDepth */
-  abstract int get pixelDepth;
+  int get pixelDepth;
 
   /** @domName Screen.width */
-  abstract int get width;
+  int get width;
 }
 
 class _ScreenImpl implements Screen native "*Screen" {
@@ -31278,13 +31375,13 @@
 abstract class ScriptProfile {
 
   /** @domName ScriptProfile.head */
-  abstract ScriptProfileNode get head;
+  ScriptProfileNode get head;
 
   /** @domName ScriptProfile.title */
-  abstract String get title;
+  String get title;
 
   /** @domName ScriptProfile.uid */
-  abstract int get uid;
+  int get uid;
 }
 
 class _ScriptProfileImpl implements ScriptProfile native "*ScriptProfile" {
@@ -31305,28 +31402,28 @@
 abstract class ScriptProfileNode {
 
   /** @domName ScriptProfileNode.callUID */
-  abstract int get callUID;
+  int get callUID;
 
   /** @domName ScriptProfileNode.functionName */
-  abstract String get functionName;
+  String get functionName;
 
   /** @domName ScriptProfileNode.lineNumber */
-  abstract int get lineNumber;
+  int get lineNumber;
 
   /** @domName ScriptProfileNode.numberOfCalls */
-  abstract int get numberOfCalls;
+  int get numberOfCalls;
 
   /** @domName ScriptProfileNode.selfTime */
-  abstract num get selfTime;
+  num get selfTime;
 
   /** @domName ScriptProfileNode.totalTime */
-  abstract num get totalTime;
+  num get totalTime;
 
   /** @domName ScriptProfileNode.url */
-  abstract String get url;
+  String get url;
 
   /** @domName ScriptProfileNode.visible */
-  abstract bool get visible;
+  bool get visible;
 
   /** @domName ScriptProfileNode.children */
   List<ScriptProfileNode> children();
@@ -31370,10 +31467,10 @@
   bool disabled;
 
   /** @domName HTMLSelectElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLSelectElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLSelectElement.length */
   int length;
@@ -31385,7 +31482,7 @@
   String name;
 
   /** @domName HTMLSelectElement.options */
-  abstract HTMLOptionsCollection get options;
+  HTMLOptionsCollection get options;
 
   /** @domName HTMLSelectElement.required */
   bool required;
@@ -31394,25 +31491,25 @@
   int selectedIndex;
 
   /** @domName HTMLSelectElement.selectedOptions */
-  abstract HTMLCollection get selectedOptions;
+  HTMLCollection get selectedOptions;
 
   /** @domName HTMLSelectElement.size */
   int size;
 
   /** @domName HTMLSelectElement.type */
-  abstract String get type;
+  String get type;
 
   /** @domName HTMLSelectElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLSelectElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLSelectElement.value */
   String value;
 
   /** @domName HTMLSelectElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLSelectElement.checkValidity */
   bool checkValidity();
@@ -31473,11 +31570,11 @@
 
   // Override default options, since IE returns SelectElement itself and it
   // does not operate as a List.
-  List<OptionElement> get options() {
+  List<OptionElement> get options {
     return this.elements.filter((e) => e is OptionElement);
   }
 
-  List<OptionElement> get selectedOptions() {
+  List<OptionElement> get selectedOptions {
     // IE does not change the selected flag for single-selection items.
     if (this.multiple) {
       return this.options.filter((o) => o.selected);
@@ -31518,9 +31615,14 @@
 
 /// @domName HTMLShadowElement
 abstract class ShadowElement implements Element {
+
+  /** @domName HTMLShadowElement.resetStyleInheritance */
+  bool resetStyleInheritance;
 }
 
 class _ShadowElementImpl extends _ElementImpl implements ShadowElement native "*HTMLShadowElement" {
+
+  bool resetStyleInheritance;
 }
 // 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
@@ -31528,13 +31630,14 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName ShadowRoot
 abstract class ShadowRoot implements DocumentFragment {
 
   factory ShadowRoot(Element host) => _ShadowRootFactoryProvider.createShadowRoot(host);
 
   /** @domName ShadowRoot.activeElement */
-  abstract Element get activeElement;
+  Element get activeElement;
 
   /** @domName ShadowRoot.applyAuthorStyles */
   bool applyAuthorStyles;
@@ -31608,7 +31711,7 @@
   }
 
   /** @domName SharedWorker.port */
-  abstract MessagePort get port;
+  MessagePort get port;
 }
 // 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
@@ -31625,7 +31728,7 @@
   SharedWorkerContextEvents get on;
 
   /** @domName SharedWorkerContext.name */
-  abstract String get name;
+  String get name;
 }
 
 abstract class SharedWorkerContextEvents implements WorkerContextEvents {
@@ -31661,7 +31764,7 @@
 abstract class SourceBuffer {
 
   /** @domName SourceBuffer.buffered */
-  abstract TimeRanges get buffered;
+  TimeRanges get buffered;
 
   /** @domName SourceBuffer.timestampOffset */
   num timestampOffset;
@@ -31690,10 +31793,10 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SourceBufferList
-abstract class SourceBufferList implements List<SourceBuffer>, EventTarget {
+abstract class SourceBufferList implements EventTarget, List<SourceBuffer> {
 
   /** @domName SourceBufferList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName SourceBufferList.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -31708,14 +31811,14 @@
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
 }
 
-class _SourceBufferListImpl implements SourceBufferList, JavaScriptIndexingBehavior native "*SourceBufferList" {
+class _SourceBufferListImpl extends _EventTargetImpl implements SourceBufferList, JavaScriptIndexingBehavior native "*SourceBufferList" {
 
   final int length;
 
   _SourceBufferImpl operator[](int index) => JS("_SourceBufferImpl", "#[#]", this, index);
 
   void operator[]=(int index, _SourceBufferImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SourceBuffer> mixins.
   // SourceBuffer is the element type.
@@ -31732,15 +31835,15 @@
   // From Collection<SourceBuffer>:
 
   void add(SourceBuffer value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SourceBuffer value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SourceBuffer> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SourceBuffer element) => _Collections.contains(this, element);
@@ -31756,38 +31859,38 @@
 
   bool some(bool f(SourceBuffer element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SourceBuffer>:
 
   void sort([Comparator<SourceBuffer> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SourceBuffer element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SourceBuffer element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SourceBuffer last() => this[length - 1];
+  SourceBuffer get last => this[length - 1];
 
   SourceBuffer removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SourceBuffer> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SourceBuffer initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SourceBuffer> getRange(int start, int rangeLength) =>
@@ -31882,7 +31985,7 @@
   factory SpeechGrammarList() => _SpeechGrammarListFactoryProvider.createSpeechGrammarList();
 
   /** @domName SpeechGrammarList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName SpeechGrammarList.addFromString */
   void addFromString(String string, [num weight]);
@@ -31901,7 +32004,7 @@
   _SpeechGrammarImpl operator[](int index) => JS("_SpeechGrammarImpl", "#[#]", this, index);
 
   void operator[]=(int index, _SpeechGrammarImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SpeechGrammar> mixins.
   // SpeechGrammar is the element type.
@@ -31918,15 +32021,15 @@
   // From Collection<SpeechGrammar>:
 
   void add(SpeechGrammar value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SpeechGrammar value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SpeechGrammar> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SpeechGrammar element) => _Collections.contains(this, element);
@@ -31942,38 +32045,38 @@
 
   bool some(bool f(SpeechGrammar element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SpeechGrammar>:
 
   void sort([Comparator<SpeechGrammar> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SpeechGrammar element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SpeechGrammar element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SpeechGrammar last() => this[length - 1];
+  SpeechGrammar get last => this[length - 1];
 
   SpeechGrammar removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SpeechGrammar> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SpeechGrammar initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SpeechGrammar> getRange(int start, int rangeLength) =>
@@ -31997,7 +32100,7 @@
 abstract class SpeechInputEvent implements Event {
 
   /** @domName SpeechInputEvent.results */
-  abstract List<SpeechInputResult> get results;
+  List<SpeechInputResult> get results;
 }
 
 class _SpeechInputEventImpl extends _EventImpl implements SpeechInputEvent native "*SpeechInputEvent" {
@@ -32014,10 +32117,10 @@
 abstract class SpeechInputResult {
 
   /** @domName SpeechInputResult.confidence */
-  abstract num get confidence;
+  num get confidence;
 
   /** @domName SpeechInputResult.utterance */
-  abstract String get utterance;
+  String get utterance;
 }
 
 class _SpeechInputResultImpl implements SpeechInputResult native "*SpeechInputResult" {
@@ -32034,7 +32137,7 @@
   _SpeechInputResultImpl operator[](int index) => JS("_SpeechInputResultImpl", "#[#]", this, index);
 
   void operator[]=(int index, _SpeechInputResultImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SpeechInputResult> mixins.
   // SpeechInputResult is the element type.
@@ -32051,15 +32154,15 @@
   // From Collection<SpeechInputResult>:
 
   void add(SpeechInputResult value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SpeechInputResult value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SpeechInputResult> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SpeechInputResult element) => _Collections.contains(this, element);
@@ -32075,38 +32178,38 @@
 
   bool some(bool f(SpeechInputResult element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SpeechInputResult>:
 
   void sort([Comparator<SpeechInputResult> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SpeechInputResult element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SpeechInputResult element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SpeechInputResult last() => this[length - 1];
+  SpeechInputResult get last => this[length - 1];
 
   SpeechInputResult removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SpeechInputResult> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SpeechInputResult initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SpeechInputResult> getRange(int start, int rangeLength) =>
@@ -32138,6 +32241,9 @@
   /** @domName SpeechRecognition.grammars */
   SpeechGrammarList grammars;
 
+  /** @domName SpeechRecognition.interimResults */
+  bool interimResults;
+
   /** @domName SpeechRecognition.lang */
   String lang;
 
@@ -32177,8 +32283,6 @@
 
   EventListenerList get result;
 
-  EventListenerList get resultDeleted;
-
   EventListenerList get soundEnd;
 
   EventListenerList get soundStart;
@@ -32199,10 +32303,10 @@
 abstract class SpeechRecognitionAlternative {
 
   /** @domName SpeechRecognitionAlternative.confidence */
-  abstract num get confidence;
+  num get confidence;
 
   /** @domName SpeechRecognitionAlternative.transcript */
-  abstract String get transcript;
+  String get transcript;
 }
 
 class _SpeechRecognitionAlternativeImpl implements SpeechRecognitionAlternative native "*SpeechRecognitionAlternative" {
@@ -32239,10 +32343,10 @@
   static const int SERVICE_NOT_ALLOWED = 6;
 
   /** @domName SpeechRecognitionError.code */
-  abstract int get code;
+  int get code;
 
   /** @domName SpeechRecognitionError.message */
-  abstract String get message;
+  String get message;
 }
 
 class _SpeechRecognitionErrorImpl extends _EventImpl implements SpeechRecognitionError native "*SpeechRecognitionError" {
@@ -32261,13 +32365,13 @@
 abstract class SpeechRecognitionEvent implements Event {
 
   /** @domName SpeechRecognitionEvent.result */
-  abstract SpeechRecognitionResult get result;
+  SpeechRecognitionResult get result;
 
   /** @domName SpeechRecognitionEvent.resultHistory */
-  abstract List<SpeechRecognitionResult> get resultHistory;
+  List<SpeechRecognitionResult> get resultHistory;
 
   /** @domName SpeechRecognitionEvent.resultIndex */
-  abstract int get resultIndex;
+  int get resultIndex;
 }
 
 class _SpeechRecognitionEventImpl extends _EventImpl implements SpeechRecognitionEvent native "*SpeechRecognitionEvent" {
@@ -32288,6 +32392,8 @@
 
   _SpeechGrammarListImpl grammars;
 
+  bool interimResults;
+
   String lang;
 
   int maxAlternatives;
@@ -32320,8 +32426,6 @@
 
   EventListenerList get result => this['result'];
 
-  EventListenerList get resultDeleted => this['resultdeleted'];
-
   EventListenerList get soundEnd => this['soundend'];
 
   EventListenerList get soundStart => this['soundstart'];
@@ -32342,13 +32446,13 @@
 abstract class SpeechRecognitionResult {
 
   /** @domName SpeechRecognitionResult.emma */
-  abstract Document get emma;
+  Document get emma;
 
   /** @domName SpeechRecognitionResult.finalValue */
-  abstract bool get finalValue;
+  bool get finalValue;
 
   /** @domName SpeechRecognitionResult.length */
-  abstract int get length;
+  int get length;
 
   /** @domName SpeechRecognitionResult.item */
   SpeechRecognitionAlternative item(int index);
@@ -32358,7 +32462,7 @@
 
   final _DocumentImpl emma;
 
-  bool get finalValue() => JS("bool", "#.final", this);
+  bool get finalValue => JS("bool", "#.final", this);
 
   final int length;
 
@@ -32372,7 +32476,7 @@
   _SpeechRecognitionResultImpl operator[](int index) => JS("_SpeechRecognitionResultImpl", "#[#]", this, index);
 
   void operator[]=(int index, _SpeechRecognitionResultImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SpeechRecognitionResult> mixins.
   // SpeechRecognitionResult is the element type.
@@ -32389,15 +32493,15 @@
   // From Collection<SpeechRecognitionResult>:
 
   void add(SpeechRecognitionResult value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SpeechRecognitionResult value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SpeechRecognitionResult> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SpeechRecognitionResult element) => _Collections.contains(this, element);
@@ -32413,38 +32517,38 @@
 
   bool some(bool f(SpeechRecognitionResult element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SpeechRecognitionResult>:
 
   void sort([Comparator<SpeechRecognitionResult> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SpeechRecognitionResult element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SpeechRecognitionResult element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SpeechRecognitionResult last() => this[length - 1];
+  SpeechRecognitionResult get last => this[length - 1];
 
   SpeechRecognitionResult removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SpeechRecognitionResult> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SpeechRecognitionResult initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SpeechRecognitionResult> getRange(int start, int rangeLength) =>
@@ -32458,11 +32562,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+
 /// @domName Storage
 abstract class Storage implements Map<String, String> {
 
   /** @domName Storage.length */
-  abstract int get $dom_length;
+  int get $dom_length;
 
   /** @domName Storage.clear */
   void $dom_clear();
@@ -32490,19 +32595,19 @@
 abstract class StorageEvent implements Event {
 
   /** @domName StorageEvent.key */
-  abstract String get key;
+  String get key;
 
   /** @domName StorageEvent.newValue */
-  abstract String get newValue;
+  String get newValue;
 
   /** @domName StorageEvent.oldValue */
-  abstract String get oldValue;
+  String get oldValue;
 
   /** @domName StorageEvent.storageArea */
-  abstract Storage get storageArea;
+  Storage get storageArea;
 
   /** @domName StorageEvent.url */
-  abstract String get url;
+  String get url;
 
   /** @domName StorageEvent.initStorageEvent */
   void initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg);
@@ -32529,7 +32634,7 @@
 class _StorageImpl implements Storage native "*Storage" {
 
   // TODO(nweiz): update this when maps support lazy iteration
-  bool containsValue(String value) => getValues().some((e) => e == value);
+  bool containsValue(String value) => values.some((e) => e == value);
 
   bool containsKey(String key) => $dom_getItem(key) != null;
 
@@ -32559,13 +32664,13 @@
     }
   }
 
-  Collection<String> getKeys() {
+  Collection<String> get keys {
     final keys = [];
     forEach((k, v) => keys.add(k));
     return keys;
   }
 
-  Collection<String> getValues() {
+  Collection<String> get values {
     final values = [];
     forEach((k, v) => values.add(v));
     return values;
@@ -32573,9 +32678,9 @@
 
   int get length => $dom_length;
 
-  bool isEmpty() => $dom_key(0) == null;
+  bool get isEmpty => $dom_key(0) == null;
 
-  int get $dom_length() => JS("int", "#.length", this);
+  int get $dom_length => JS("int", "#.length", this);
 
   void $dom_clear() native "clear";
 
@@ -32613,6 +32718,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void StorageInfoErrorCallback(DOMException error);
 
 class _StorageInfoImpl implements StorageInfo native "*StorageInfo" {
@@ -32627,6 +32733,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void StorageInfoQuotaCallback(int grantedQuotaInBytes);
 // 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
@@ -32634,6 +32741,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void StorageInfoUsageCallback(int currentUsageInBytes, int currentQuotaInBytes);
 // 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
@@ -32641,6 +32749,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void StringCallback(String data);
 // 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
@@ -32663,7 +32772,7 @@
   bool scoped;
 
   /** @domName HTMLStyleElement.sheet */
-  abstract StyleSheet get sheet;
+  StyleSheet get sheet;
 
   /** @domName HTMLStyleElement.type */
   String type;
@@ -32691,7 +32800,7 @@
 abstract class StyleMedia {
 
   /** @domName StyleMedia.type */
-  abstract String get type;
+  String get type;
 
   /** @domName StyleMedia.matchMedium */
   bool matchMedium(String mediaquery);
@@ -32716,22 +32825,22 @@
   bool disabled;
 
   /** @domName StyleSheet.href */
-  abstract String get href;
+  String get href;
 
   /** @domName StyleSheet.media */
-  abstract MediaList get media;
+  MediaList get media;
 
   /** @domName StyleSheet.ownerNode */
-  abstract Node get ownerNode;
+  Node get ownerNode;
 
   /** @domName StyleSheet.parentStyleSheet */
-  abstract StyleSheet get parentStyleSheet;
+  StyleSheet get parentStyleSheet;
 
   /** @domName StyleSheet.title */
-  abstract String get title;
+  String get title;
 
   /** @domName StyleSheet.type */
-  abstract String get type;
+  String get type;
 }
 
 class _StyleSheetImpl implements StyleSheet native "*StyleSheet" {
@@ -32758,7 +32867,7 @@
   _StyleSheetImpl operator[](int index) => JS("_StyleSheetImpl", "#[#]", this, index);
 
   void operator[]=(int index, _StyleSheetImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<StyleSheet> mixins.
   // StyleSheet is the element type.
@@ -32775,15 +32884,15 @@
   // From Collection<StyleSheet>:
 
   void add(StyleSheet value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(StyleSheet value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<StyleSheet> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(StyleSheet element) => _Collections.contains(this, element);
@@ -32799,38 +32908,38 @@
 
   bool some(bool f(StyleSheet element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<StyleSheet>:
 
   void sort([Comparator<StyleSheet> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(StyleSheet element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(StyleSheet element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  StyleSheet last() => this[length - 1];
+  StyleSheet get last => this[length - 1];
 
   StyleSheet removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<StyleSheet> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [StyleSheet initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<StyleSheet> getRange(int start, int rangeLength) =>
@@ -32883,7 +32992,7 @@
   String bgColor;
 
   /** @domName HTMLTableCellElement.cellIndex */
-  abstract int get cellIndex;
+  int get cellIndex;
 
   /** @domName HTMLTableCellElement.ch */
   String ch;
@@ -33025,7 +33134,7 @@
   String frame;
 
   /** @domName HTMLTableElement.rows */
-  abstract HTMLCollection get rows;
+  HTMLCollection get rows;
 
   /** @domName HTMLTableElement.rules */
   String rules;
@@ -33034,7 +33143,7 @@
   String summary;
 
   /** @domName HTMLTableElement.tBodies */
-  abstract HTMLCollection get tBodies;
+  HTMLCollection get tBodies;
 
   /** @domName HTMLTableElement.tFoot */
   TableSectionElement tFoot;
@@ -33152,7 +33261,7 @@
   String bgColor;
 
   /** @domName HTMLTableRowElement.cells */
-  abstract HTMLCollection get cells;
+  HTMLCollection get cells;
 
   /** @domName HTMLTableRowElement.ch */
   String ch;
@@ -33161,10 +33270,10 @@
   String chOff;
 
   /** @domName HTMLTableRowElement.rowIndex */
-  abstract int get rowIndex;
+  int get rowIndex;
 
   /** @domName HTMLTableRowElement.sectionRowIndex */
-  abstract int get sectionRowIndex;
+  int get sectionRowIndex;
 
   /** @domName HTMLTableRowElement.vAlign */
   String vAlign;
@@ -33217,7 +33326,7 @@
   String chOff;
 
   /** @domName HTMLTableSectionElement.rows */
-  abstract HTMLCollection get rows;
+  HTMLCollection get rows;
 
   /** @domName HTMLTableSectionElement.vAlign */
   String vAlign;
@@ -33251,13 +33360,14 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName Text
 abstract class Text implements CharacterData {
 
   factory Text(String data) => _TextFactoryProvider.createText(data);
 
   /** @domName Text.wholeText */
-  abstract String get wholeText;
+  String get wholeText;
 
   /** @domName Text.replaceWholeText */
   Text replaceWholeText(String content);
@@ -33289,10 +33399,10 @@
   bool disabled;
 
   /** @domName HTMLTextAreaElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLTextAreaElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLTextAreaElement.maxLength */
   int maxLength;
@@ -33322,22 +33432,22 @@
   int selectionStart;
 
   /** @domName HTMLTextAreaElement.textLength */
-  abstract int get textLength;
+  int get textLength;
 
   /** @domName HTMLTextAreaElement.type */
-  abstract String get type;
+  String get type;
 
   /** @domName HTMLTextAreaElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLTextAreaElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLTextAreaElement.value */
   String value;
 
   /** @domName HTMLTextAreaElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLTextAreaElement.wrap */
   String wrap;
@@ -33419,7 +33529,7 @@
 abstract class TextEvent implements UIEvent {
 
   /** @domName TextEvent.data */
-  abstract String get data;
+  String get data;
 
   /** @domName TextEvent.initTextEvent */
   void initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg);
@@ -33450,7 +33560,7 @@
 abstract class TextMetrics {
 
   /** @domName TextMetrics.width */
-  abstract num get width;
+  num get width;
 }
 
 class _TextMetricsImpl implements TextMetrics native "*TextMetrics" {
@@ -33472,19 +33582,19 @@
   TextTrackEvents get on;
 
   /** @domName TextTrack.activeCues */
-  abstract TextTrackCueList get activeCues;
+  TextTrackCueList get activeCues;
 
   /** @domName TextTrack.cues */
-  abstract TextTrackCueList get cues;
+  TextTrackCueList get cues;
 
   /** @domName TextTrack.kind */
-  abstract String get kind;
+  String get kind;
 
   /** @domName TextTrack.label */
-  abstract String get label;
+  String get label;
 
   /** @domName TextTrack.language */
-  abstract String get language;
+  String get language;
 
   /** @domName TextTrack.mode */
   String mode;
@@ -33556,7 +33666,7 @@
   String text;
 
   /** @domName TextTrackCue.track */
-  abstract TextTrack get track;
+  TextTrack get track;
 
   /** @domName TextTrackCue.vertical */
   String vertical;
@@ -33636,7 +33746,7 @@
 abstract class TextTrackCueList implements List<TextTrackCue> {
 
   /** @domName TextTrackCueList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName TextTrackCueList.getCueById */
   TextTrackCue getCueById(String id);
@@ -33652,7 +33762,7 @@
   _TextTrackCueImpl operator[](int index) => JS("_TextTrackCueImpl", "#[#]", this, index);
 
   void operator[]=(int index, _TextTrackCueImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<TextTrackCue> mixins.
   // TextTrackCue is the element type.
@@ -33669,15 +33779,15 @@
   // From Collection<TextTrackCue>:
 
   void add(TextTrackCue value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(TextTrackCue value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<TextTrackCue> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(TextTrackCue element) => _Collections.contains(this, element);
@@ -33693,38 +33803,38 @@
 
   bool some(bool f(TextTrackCue element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<TextTrackCue>:
 
   void sort([Comparator<TextTrackCue> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(TextTrackCue element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(TextTrackCue element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  TextTrackCue last() => this[length - 1];
+  TextTrackCue get last => this[length - 1];
 
   TextTrackCue removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<TextTrackCue> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [TextTrackCue initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<TextTrackCue> getRange(int start, int rangeLength) =>
@@ -33777,7 +33887,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName TextTrackList
-abstract class TextTrackList implements List<TextTrack>, EventTarget {
+abstract class TextTrackList implements EventTarget, List<TextTrack> {
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
@@ -33785,7 +33895,7 @@
   TextTrackListEvents get on;
 
   /** @domName TextTrackList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName TextTrackList.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -33805,7 +33915,7 @@
   EventListenerList get addTrack;
 }
 
-class _TextTrackListImpl implements TextTrackList, JavaScriptIndexingBehavior native "*TextTrackList" {
+class _TextTrackListImpl extends _EventTargetImpl implements TextTrackList, JavaScriptIndexingBehavior native "*TextTrackList" {
 
   _TextTrackListEventsImpl get on =>
     new _TextTrackListEventsImpl(this);
@@ -33815,7 +33925,7 @@
   _TextTrackImpl operator[](int index) => JS("_TextTrackImpl", "#[#]", this, index);
 
   void operator[]=(int index, _TextTrackImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<TextTrack> mixins.
   // TextTrack is the element type.
@@ -33832,15 +33942,15 @@
   // From Collection<TextTrack>:
 
   void add(TextTrack value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(TextTrack value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<TextTrack> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(TextTrack element) => _Collections.contains(this, element);
@@ -33856,38 +33966,38 @@
 
   bool some(bool f(TextTrack element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<TextTrack>:
 
   void sort([Comparator<TextTrack> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(TextTrack element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(TextTrack element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  TextTrack last() => this[length - 1];
+  TextTrack get last => this[length - 1];
 
   TextTrack removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<TextTrack> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [TextTrack initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<TextTrack> getRange(int start, int rangeLength) =>
@@ -33919,7 +34029,7 @@
 abstract class TimeRanges {
 
   /** @domName TimeRanges.length */
-  abstract int get length;
+  int get length;
 
   /** @domName TimeRanges.end */
   num end(int index);
@@ -33942,6 +34052,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void TimeoutHandler();
 // 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
@@ -33967,40 +34078,40 @@
 abstract class Touch {
 
   /** @domName Touch.clientX */
-  abstract int get clientX;
+  int get clientX;
 
   /** @domName Touch.clientY */
-  abstract int get clientY;
+  int get clientY;
 
   /** @domName Touch.identifier */
-  abstract int get identifier;
+  int get identifier;
 
   /** @domName Touch.pageX */
-  abstract int get pageX;
+  int get pageX;
 
   /** @domName Touch.pageY */
-  abstract int get pageY;
+  int get pageY;
 
   /** @domName Touch.screenX */
-  abstract int get screenX;
+  int get screenX;
 
   /** @domName Touch.screenY */
-  abstract int get screenY;
+  int get screenY;
 
   /** @domName Touch.target */
-  abstract EventTarget get target;
+  EventTarget get target;
 
   /** @domName Touch.webkitForce */
-  abstract num get webkitForce;
+  num get webkitForce;
 
   /** @domName Touch.webkitRadiusX */
-  abstract int get webkitRadiusX;
+  int get webkitRadiusX;
 
   /** @domName Touch.webkitRadiusY */
-  abstract int get webkitRadiusY;
+  int get webkitRadiusY;
 
   /** @domName Touch.webkitRotationAngle */
-  abstract num get webkitRotationAngle;
+  num get webkitRotationAngle;
 }
 // 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
@@ -34012,25 +34123,25 @@
 abstract class TouchEvent implements UIEvent {
 
   /** @domName TouchEvent.altKey */
-  abstract bool get altKey;
+  bool get altKey;
 
   /** @domName TouchEvent.changedTouches */
-  abstract TouchList get changedTouches;
+  TouchList get changedTouches;
 
   /** @domName TouchEvent.ctrlKey */
-  abstract bool get ctrlKey;
+  bool get ctrlKey;
 
   /** @domName TouchEvent.metaKey */
-  abstract bool get metaKey;
+  bool get metaKey;
 
   /** @domName TouchEvent.shiftKey */
-  abstract bool get shiftKey;
+  bool get shiftKey;
 
   /** @domName TouchEvent.targetTouches */
-  abstract TouchList get targetTouches;
+  TouchList get targetTouches;
 
   /** @domName TouchEvent.touches */
-  abstract TouchList get touches;
+  TouchList get touches;
 
   /** @domName TouchEvent.initTouchEvent */
   void initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
@@ -34072,7 +34183,7 @@
   final int screenY;
 
   EventTarget get target => _convertNativeToDart_EventTarget(this._target);
-  EventTarget get _target() => JS("EventTarget", "#.target", this);
+  EventTarget get _target => JS("EventTarget", "#.target", this);
 
   final num webkitForce;
 
@@ -34092,7 +34203,7 @@
 abstract class TouchList implements List<Touch> {
 
   /** @domName TouchList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName TouchList.item */
   Touch item(int index);
@@ -34105,7 +34216,7 @@
   _TouchImpl operator[](int index) => JS("_TouchImpl", "#[#]", this, index);
 
   void operator[]=(int index, _TouchImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Touch> mixins.
   // Touch is the element type.
@@ -34122,15 +34233,15 @@
   // From Collection<Touch>:
 
   void add(Touch value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Touch value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Touch> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Touch element) => _Collections.contains(this, element);
@@ -34146,38 +34257,38 @@
 
   bool some(bool f(Touch element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Touch>:
 
   void sort([Comparator<Touch> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Touch element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Touch element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Touch last() => this[length - 1];
+  Touch get last => this[length - 1];
 
   Touch removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Touch> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Touch initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Touch> getRange(int start, int rangeLength) =>
@@ -34216,7 +34327,7 @@
   String label;
 
   /** @domName HTMLTrackElement.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName HTMLTrackElement.src */
   String src;
@@ -34225,12 +34336,12 @@
   String srclang;
 
   /** @domName HTMLTrackElement.track */
-  abstract TextTrack get track;
+  TextTrack get track;
 }
 
 class _TrackElementImpl extends _ElementImpl implements TrackElement native "*HTMLTrackElement" {
 
-  bool get defaultValue() => JS("bool", "#.default", this);
+  bool get defaultValue => JS("bool", "#.default", this);
 
   void set defaultValue(bool value) {
     JS("void", "#.default = #", this, value);
@@ -34258,7 +34369,7 @@
 abstract class TrackEvent implements Event {
 
   /** @domName TrackEvent.track */
-  abstract Object get track;
+  Object get track;
 }
 
 class _TrackEventImpl extends _EventImpl implements TrackEvent native "*TrackEvent" {
@@ -34275,10 +34386,10 @@
 abstract class TransitionEvent implements Event {
 
   /** @domName WebKitTransitionEvent.elapsedTime */
-  abstract num get elapsedTime;
+  num get elapsedTime;
 
   /** @domName WebKitTransitionEvent.propertyName */
-  abstract String get propertyName;
+  String get propertyName;
 }
 
 class _TransitionEventImpl extends _EventImpl implements TransitionEvent native "*WebKitTransitionEvent" {
@@ -34300,16 +34411,16 @@
   Node currentNode;
 
   /** @domName TreeWalker.expandEntityReferences */
-  abstract bool get expandEntityReferences;
+  bool get expandEntityReferences;
 
   /** @domName TreeWalker.filter */
-  abstract NodeFilter get filter;
+  NodeFilter get filter;
 
   /** @domName TreeWalker.root */
-  abstract Node get root;
+  Node get root;
 
   /** @domName TreeWalker.whatToShow */
-  abstract int get whatToShow;
+  int get whatToShow;
 
   /** @domName TreeWalker.firstChild */
   Node firstChild();
@@ -34369,31 +34480,31 @@
 abstract class UIEvent implements Event {
 
   /** @domName UIEvent.charCode */
-  abstract int get charCode;
+  int get charCode;
 
   /** @domName UIEvent.detail */
-  abstract int get detail;
+  int get detail;
 
   /** @domName UIEvent.keyCode */
-  abstract int get keyCode;
+  int get keyCode;
 
   /** @domName UIEvent.layerX */
-  abstract int get layerX;
+  int get layerX;
 
   /** @domName UIEvent.layerY */
-  abstract int get layerY;
+  int get layerY;
 
   /** @domName UIEvent.pageX */
-  abstract int get pageX;
+  int get pageX;
 
   /** @domName UIEvent.pageY */
-  abstract int get pageY;
+  int get pageY;
 
   /** @domName UIEvent.view */
-  abstract Window get view;
+  Window get view;
 
   /** @domName UIEvent.which */
-  abstract int get which;
+  int get which;
 
   /** @domName UIEvent.initUIEvent */
   void initUIEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail);
@@ -34416,7 +34527,7 @@
   final int pageY;
 
   Window get view => _convertNativeToDart_Window(this._view);
-  Window get _view() => JS("Window", "#.view", this);
+  Window get _view => JS("Window", "#.view", this);
 
   final int which;
 
@@ -34467,7 +34578,7 @@
   static const int BYTES_PER_ELEMENT = 2;
 
   /** @domName Uint16Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Uint16Array.setElements */
   void setElements(Object array, [int offset]);
@@ -34498,15 +34609,15 @@
   // From Collection<int>:
 
   void add(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<int> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(int element) => _Collections.contains(this, element);
@@ -34522,38 +34633,38 @@
 
   bool some(bool f(int element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<int>:
 
   void sort([Comparator<int> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(int element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(int element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  int last() => this[length - 1];
+  int get last => this[length - 1];
 
   int removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<int> getRange(int start, int rangeLength) =>
@@ -34586,7 +34697,7 @@
   static const int BYTES_PER_ELEMENT = 4;
 
   /** @domName Uint32Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Uint32Array.setElements */
   void setElements(Object array, [int offset]);
@@ -34617,15 +34728,15 @@
   // From Collection<int>:
 
   void add(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<int> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(int element) => _Collections.contains(this, element);
@@ -34641,38 +34752,38 @@
 
   bool some(bool f(int element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<int>:
 
   void sort([Comparator<int> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(int element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(int element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  int last() => this[length - 1];
+  int get last => this[length - 1];
 
   int removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<int> getRange(int start, int rangeLength) =>
@@ -34705,7 +34816,7 @@
   static const int BYTES_PER_ELEMENT = 1;
 
   /** @domName Uint8Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Uint8Array.setElements */
   void setElements(Object array, [int offset]);
@@ -34736,15 +34847,15 @@
   // From Collection<int>:
 
   void add(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<int> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(int element) => _Collections.contains(this, element);
@@ -34760,38 +34871,38 @@
 
   bool some(bool f(int element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<int>:
 
   void sort([Comparator<int> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(int element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(int element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  int last() => this[length - 1];
+  int get last => this[length - 1];
 
   int removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<int> getRange(int start, int rangeLength) =>
@@ -34822,7 +34933,7 @@
     _TypedArrayFactoryProvider.createUint8ClampedArray_fromBuffer(buffer, byteOffset, length);
 
   /** @domName Uint8ClampedArray.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Uint8ClampedArray.setElements */
   void setElements(Object array, [int offset]);
@@ -34862,31 +34973,31 @@
 abstract class ValidityState {
 
   /** @domName ValidityState.customError */
-  abstract bool get customError;
+  bool get customError;
 
   /** @domName ValidityState.patternMismatch */
-  abstract bool get patternMismatch;
+  bool get patternMismatch;
 
   /** @domName ValidityState.rangeOverflow */
-  abstract bool get rangeOverflow;
+  bool get rangeOverflow;
 
   /** @domName ValidityState.rangeUnderflow */
-  abstract bool get rangeUnderflow;
+  bool get rangeUnderflow;
 
   /** @domName ValidityState.stepMismatch */
-  abstract bool get stepMismatch;
+  bool get stepMismatch;
 
   /** @domName ValidityState.tooLong */
-  abstract bool get tooLong;
+  bool get tooLong;
 
   /** @domName ValidityState.typeMismatch */
-  abstract bool get typeMismatch;
+  bool get typeMismatch;
 
   /** @domName ValidityState.valid */
-  abstract bool get valid;
+  bool get valid;
 
   /** @domName ValidityState.valueMissing */
-  abstract bool get valueMissing;
+  bool get valueMissing;
 }
 
 class _ValidityStateImpl implements ValidityState native "*ValidityState" {
@@ -34927,22 +35038,22 @@
   String poster;
 
   /** @domName HTMLVideoElement.videoHeight */
-  abstract int get videoHeight;
+  int get videoHeight;
 
   /** @domName HTMLVideoElement.videoWidth */
-  abstract int get videoWidth;
+  int get videoWidth;
 
   /** @domName HTMLVideoElement.webkitDecodedFrameCount */
-  abstract int get webkitDecodedFrameCount;
+  int get webkitDecodedFrameCount;
 
   /** @domName HTMLVideoElement.webkitDisplayingFullscreen */
-  abstract bool get webkitDisplayingFullscreen;
+  bool get webkitDisplayingFullscreen;
 
   /** @domName HTMLVideoElement.webkitDroppedFrameCount */
-  abstract int get webkitDroppedFrameCount;
+  int get webkitDroppedFrameCount;
 
   /** @domName HTMLVideoElement.webkitSupportsFullscreen */
-  abstract bool get webkitSupportsFullscreen;
+  bool get webkitSupportsFullscreen;
 
   /** @domName HTMLVideoElement.width */
   int width;
@@ -34994,6 +35105,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void VoidCallback();
 // 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
@@ -35034,13 +35146,13 @@
 abstract class WebGLActiveInfo {
 
   /** @domName WebGLActiveInfo.name */
-  abstract String get name;
+  String get name;
 
   /** @domName WebGLActiveInfo.size */
-  abstract int get size;
+  int get size;
 
   /** @domName WebGLActiveInfo.type */
-  abstract int get type;
+  int get type;
 }
 
 class _WebGLActiveInfoImpl implements WebGLActiveInfo native "*WebGLActiveInfo" {
@@ -35135,7 +35247,7 @@
 abstract class WebGLContextEvent implements Event {
 
   /** @domName WebGLContextEvent.statusMessage */
-  abstract String get statusMessage;
+  String get statusMessage;
 }
 
 class _WebGLContextEventImpl extends _EventImpl implements WebGLContextEvent native "*WebGLContextEvent" {
@@ -35847,10 +35959,10 @@
   static const int ZERO = 0;
 
   /** @domName WebGLRenderingContext.drawingBufferHeight */
-  abstract int get drawingBufferHeight;
+  int get drawingBufferHeight;
 
   /** @domName WebGLRenderingContext.drawingBufferWidth */
-  abstract int get drawingBufferWidth;
+  int get drawingBufferWidth;
 
   /** @domName WebGLRenderingContext.activeTexture */
   void activeTexture(int texture);
@@ -36021,7 +36133,7 @@
   WebGLActiveInfo getActiveUniform(WebGLProgram program, int index);
 
   /** @domName WebGLRenderingContext.getAttachedShaders */
-  List<Object> getAttachedShaders(WebGLProgram program);
+  void getAttachedShaders(WebGLProgram program);
 
   /** @domName WebGLRenderingContext.getAttribLocation */
   int getAttribLocation(WebGLProgram program, String name);
@@ -36036,7 +36148,7 @@
   int getError();
 
   /** @domName WebGLRenderingContext.getExtension */
-  Object getExtension(String name);
+  void getExtension(String name);
 
   /** @domName WebGLRenderingContext.getFramebufferAttachmentParameter */
   Object getFramebufferAttachmentParameter(int target, int attachment, int pname);
@@ -36382,7 +36494,7 @@
 
   _WebGLActiveInfoImpl getActiveUniform(_WebGLProgramImpl program, int index) native;
 
-  List<Object> getAttachedShaders(_WebGLProgramImpl program) native;
+  void getAttachedShaders(_WebGLProgramImpl program) native;
 
   int getAttribLocation(_WebGLProgramImpl program, String name) native;
 
@@ -36392,7 +36504,7 @@
 
   int getError() native;
 
-  Object getExtension(String name) native;
+  void getExtension(String name) native;
 
   Object getFramebufferAttachmentParameter(int target, int attachment, int pname) native;
 
@@ -36475,14 +36587,14 @@
   void stencilOpSeparate(int face, int fail, int zfail, int zpass) native;
 
   void texImage2D(int target, int level, int internalformat, int format_OR_width, int height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [format, type, pixels]) {
-    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video === null) &&
-        (format is int || format === null) &&
-        (type is int || type === null) &&
-        (pixels is ArrayBufferView || pixels === null)) {
+    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
+        (format is int || format == null) &&
+        (type is int || type == null) &&
+        (pixels is ArrayBufferView || pixels == null)) {
       _texImage2D_1(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
       return;
     }
-    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData || border_OR_canvas_OR_image_OR_pixels_OR_video === null) &&
+    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
         !?format &&
         !?type &&
         !?pixels) {
@@ -36490,21 +36602,21 @@
       _texImage2D_2(target, level, internalformat, format_OR_width, height_OR_type, pixels_1);
       return;
     }
-    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageElement || border_OR_canvas_OR_image_OR_pixels_OR_video === null) &&
+    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
         !?format &&
         !?type &&
         !?pixels) {
       _texImage2D_3(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
-    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is CanvasElement || border_OR_canvas_OR_image_OR_pixels_OR_video === null) &&
+    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is CanvasElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
         !?format &&
         !?type &&
         !?pixels) {
       _texImage2D_4(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
-    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is VideoElement || border_OR_canvas_OR_image_OR_pixels_OR_video === null) &&
+    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is VideoElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
         !?format &&
         !?type &&
         !?pixels) {
@@ -36524,32 +36636,32 @@
   void texParameteri(int target, int pname, int param) native;
 
   void texSubImage2D(int target, int level, int xoffset, int yoffset, int format_OR_width, int height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [type, pixels]) {
-    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video === null) &&
-        (type is int || type === null) &&
-        (pixels is ArrayBufferView || pixels === null)) {
+    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
+        (type is int || type == null) &&
+        (pixels is ArrayBufferView || pixels == null)) {
       _texSubImage2D_1(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
       return;
     }
-    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData || canvas_OR_format_OR_image_OR_pixels_OR_video === null) &&
+    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
         !?type &&
         !?pixels) {
       var pixels_1 = _convertDartToNative_ImageData(canvas_OR_format_OR_image_OR_pixels_OR_video);
       _texSubImage2D_2(target, level, xoffset, yoffset, format_OR_width, height_OR_type, pixels_1);
       return;
     }
-    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageElement || canvas_OR_format_OR_image_OR_pixels_OR_video === null) &&
+    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
         !?type &&
         !?pixels) {
       _texSubImage2D_3(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
-    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is CanvasElement || canvas_OR_format_OR_image_OR_pixels_OR_video === null) &&
+    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is CanvasElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
         !?type &&
         !?pixels) {
       _texSubImage2D_4(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
-    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is VideoElement || canvas_OR_format_OR_image_OR_pixels_OR_video === null) &&
+    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is VideoElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
         !?type &&
         !?pixels) {
       _texSubImage2D_5(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
@@ -36647,13 +36759,13 @@
 abstract class WebGLShaderPrecisionFormat {
 
   /** @domName WebGLShaderPrecisionFormat.precision */
-  abstract int get precision;
+  int get precision;
 
   /** @domName WebGLShaderPrecisionFormat.rangeMax */
-  abstract int get rangeMax;
+  int get rangeMax;
 
   /** @domName WebGLShaderPrecisionFormat.rangeMin */
-  abstract int get rangeMin;
+  int get rangeMin;
 }
 
 class _WebGLShaderPrecisionFormatImpl implements WebGLShaderPrecisionFormat native "*WebGLShaderPrecisionFormat" {
@@ -36708,7 +36820,7 @@
   _AnimationImpl operator[](int index) => JS("_AnimationImpl", "#[#]", this, index);
 
   void operator[]=(int index, _AnimationImpl value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Animation> mixins.
   // Animation is the element type.
@@ -36725,15 +36837,15 @@
   // From Collection<Animation>:
 
   void add(Animation value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Animation value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Animation> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Animation element) => _Collections.contains(this, element);
@@ -36749,38 +36861,38 @@
 
   bool some(bool f(Animation element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Animation>:
 
   void sort([Comparator<Animation> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Animation element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Animation element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Animation last() => this[length - 1];
+  Animation get last => this[length - 1];
 
   Animation removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Animation> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Animation initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Animation> getRange(int start, int rangeLength) =>
@@ -36824,7 +36936,7 @@
   static const int CSS_FILTER_SEPIA = 3;
 
   /** @domName WebKitCSSFilterValue.operationType */
-  abstract int get operationType;
+  int get operationType;
 }
 
 class _WebKitCSSFilterValueImpl extends _CSSValueListImpl implements WebKitCSSFilterValue native "*WebKitCSSFilterValue" {
@@ -36841,13 +36953,13 @@
 abstract class WebKitNamedFlow implements EventTarget {
 
   /** @domName WebKitNamedFlow.firstEmptyRegionIndex */
-  abstract int get firstEmptyRegionIndex;
+  int get firstEmptyRegionIndex;
 
   /** @domName WebKitNamedFlow.name */
-  abstract String get name;
+  String get name;
 
   /** @domName WebKitNamedFlow.overset */
-  abstract bool get overset;
+  bool get overset;
 
   /** @domName WebKitNamedFlow.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -36894,6 +37006,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName WebSocket
 abstract class WebSocket implements EventTarget {
 
@@ -36913,25 +37026,25 @@
   static const int OPEN = 1;
 
   /** @domName WebSocket.URL */
-  abstract String get URL;
+  String get URL;
 
   /** @domName WebSocket.binaryType */
   String binaryType;
 
   /** @domName WebSocket.bufferedAmount */
-  abstract int get bufferedAmount;
+  int get bufferedAmount;
 
   /** @domName WebSocket.extensions */
-  abstract String get extensions;
+  String get extensions;
 
   /** @domName WebSocket.protocol */
-  abstract String get protocol;
+  String get protocol;
 
   /** @domName WebSocket.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName WebSocket.url */
-  abstract String get url;
+  String get url;
 
   /** @domName WebSocket.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -37005,17 +37118,18 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+
 /// @domName WheelEvent
 abstract class WheelEvent implements MouseEvent {
 
   /** @domName WheelEvent.webkitDirectionInvertedFromDevice */
-  abstract bool get webkitDirectionInvertedFromDevice;
+  bool get webkitDirectionInvertedFromDevice;
 
   /** @domName WheelEvent.wheelDeltaX */
-  abstract int get $dom_wheelDeltaX;
+  int get $dom_wheelDeltaX;
 
   /** @domName WheelEvent.wheelDeltaY */
-  abstract int get $dom_wheelDeltaY;
+  int get $dom_wheelDeltaY;
 
   /** @domName WheelEvent.initWebKitWheelEvent */
   void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
@@ -37064,7 +37178,7 @@
       }
       return 0;
     }
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         'deltaY is not supported');
   }
 
@@ -37092,7 +37206,7 @@
       }
       return 0;
     }
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         'deltaX is not supported');
   }
 
@@ -37158,22 +37272,22 @@
   static const int TEMPORARY = 0;
 
   /** @domName WorkerContext.indexedDB */
-  abstract IDBFactory get indexedDB;
+  IDBFactory get indexedDB;
 
   /** @domName WorkerContext.location */
-  abstract WorkerLocation get location;
+  WorkerLocation get location;
 
   /** @domName WorkerContext.navigator */
-  abstract WorkerNavigator get navigator;
+  WorkerNavigator get navigator;
 
   /** @domName WorkerContext.self */
-  abstract WorkerContext get self;
+  WorkerContext get self;
 
   /** @domName WorkerContext.webkitIndexedDB */
-  abstract IDBFactory get webkitIndexedDB;
+  IDBFactory get webkitIndexedDB;
 
   /** @domName WorkerContext.webkitNotifications */
-  abstract NotificationCenter get webkitNotifications;
+  NotificationCenter get webkitNotifications;
 
   /** @domName WorkerContext.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -37316,28 +37430,28 @@
 abstract class WorkerLocation {
 
   /** @domName WorkerLocation.hash */
-  abstract String get hash;
+  String get hash;
 
   /** @domName WorkerLocation.host */
-  abstract String get host;
+  String get host;
 
   /** @domName WorkerLocation.hostname */
-  abstract String get hostname;
+  String get hostname;
 
   /** @domName WorkerLocation.href */
-  abstract String get href;
+  String get href;
 
   /** @domName WorkerLocation.pathname */
-  abstract String get pathname;
+  String get pathname;
 
   /** @domName WorkerLocation.port */
-  abstract String get port;
+  String get port;
 
   /** @domName WorkerLocation.protocol */
-  abstract String get protocol;
+  String get protocol;
 
   /** @domName WorkerLocation.search */
-  abstract String get search;
+  String get search;
 
   /** @domName WorkerLocation.toString */
   String toString();
@@ -37373,19 +37487,19 @@
 abstract class WorkerNavigator {
 
   /** @domName WorkerNavigator.appName */
-  abstract String get appName;
+  String get appName;
 
   /** @domName WorkerNavigator.appVersion */
-  abstract String get appVersion;
+  String get appVersion;
 
   /** @domName WorkerNavigator.onLine */
-  abstract bool get onLine;
+  bool get onLine;
 
   /** @domName WorkerNavigator.platform */
-  abstract String get platform;
+  String get platform;
 
   /** @domName WorkerNavigator.userAgent */
-  abstract String get userAgent;
+  String get userAgent;
 }
 
 class _WorkerNavigatorImpl implements WorkerNavigator native "*WorkerNavigator" {
@@ -37462,13 +37576,13 @@
   static const int TYPE_ERR = 52;
 
   /** @domName XPathException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName XPathException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName XPathException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName XPathException.toString */
   String toString();
@@ -37548,25 +37662,25 @@
   static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6;
 
   /** @domName XPathResult.booleanValue */
-  abstract bool get booleanValue;
+  bool get booleanValue;
 
   /** @domName XPathResult.invalidIteratorState */
-  abstract bool get invalidIteratorState;
+  bool get invalidIteratorState;
 
   /** @domName XPathResult.numberValue */
-  abstract num get numberValue;
+  num get numberValue;
 
   /** @domName XPathResult.resultType */
-  abstract int get resultType;
+  int get resultType;
 
   /** @domName XPathResult.singleNodeValue */
-  abstract Node get singleNodeValue;
+  Node get singleNodeValue;
 
   /** @domName XPathResult.snapshotLength */
-  abstract int get snapshotLength;
+  int get snapshotLength;
 
   /** @domName XPathResult.stringValue */
-  abstract String get stringValue;
+  String get stringValue;
 
   /** @domName XPathResult.iterateNext */
   Node iterateNext();
@@ -37735,6 +37849,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.
 
+
 class _Elements {
 
 
@@ -38335,9 +38450,7 @@
   void focus();
   void blur();
   void close();
-  void postMessage(Dynamic message,
-                   String targetOrigin,
-		   [List messagePorts = null]);
+  void postMessage(var message, String targetOrigin, [List messagePorts = null]);
 }
 
 abstract class Location {
@@ -38348,7 +38461,8 @@
   void back();
   void forward();
   void go(int distance);
-}// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+}
+// Copyright (c) 2011, 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.
 
@@ -38999,7 +39113,7 @@
   }
 
   static bool isEmpty(Iterable<Object> iterable) {
-    return !iterable.iterator().hasNext();
+    return !iterable.iterator().hasNext;
   }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -39192,7 +39306,7 @@
 
   void receive(callback(var message)) {
     _callback = callback;
-    if (_listener === null) {
+    if (_listener == null) {
       _listener = (Event e) {
         var data = JSON.parse(_getPortSyncEventData(e));
         var replyTo = data[0];
@@ -39206,7 +39320,7 @@
 
   void close() {
     _portMap.remove(_portId);
-    if (_listener !== null) window.on[_listenerName].remove(_listener);
+    if (_listener != null) window.on[_listenerName].remove(_listener);
   }
 
   SendPortSync toSendPort() {
@@ -39364,7 +39478,7 @@
  * no measurements were actually requested.
  */
 void _addMeasurementFrameCallback(TimeoutHandler callback) {
-  if (_pendingMeasurementFrameCallbacks === null) {
+  if (_pendingMeasurementFrameCallbacks == null) {
     _pendingMeasurementFrameCallbacks = <TimeoutHandler>[];
     _maybeScheduleMeasurementFrame();
   }
@@ -39381,7 +39495,7 @@
  */
 Future _createMeasurementFuture(ComputeValue computeValue,
                                 Completer completer) {
-  if (_pendingRequests === null) {
+  if (_pendingRequests == null) {
     _pendingRequests = <_MeasurementRequest>[];
     _maybeScheduleMeasurementFrame();
   }
@@ -39397,7 +39511,7 @@
   // We must compute all new values before fulfilling the futures as
   // the onComplete callbacks for the futures could modify the DOM making
   // subsequent measurement calculations expensive to compute.
-  if (_pendingRequests !== null) {
+  if (_pendingRequests != null) {
     for (_MeasurementRequest request in _pendingRequests) {
       try {
         request.value = request.computeValue();
@@ -39412,7 +39526,7 @@
   final readyMeasurementFrameCallbacks = _pendingMeasurementFrameCallbacks;
   _pendingRequests = null;
   _pendingMeasurementFrameCallbacks = null;
-  if (completedRequests !== null) {
+  if (completedRequests != null) {
     for (_MeasurementRequest request in completedRequests) {
       if (request.exception) {
         request.completer.completeException(request.value);
@@ -39422,7 +39536,7 @@
     }
   }
 
-  if (readyMeasurementFrameCallbacks !== null) {
+  if (readyMeasurementFrameCallbacks != null) {
     for (TimeoutHandler handler in readyMeasurementFrameCallbacks) {
       // TODO(jacobr): wrap each call to a handler in a try-catch block.
       handler();
@@ -39491,7 +39605,7 @@
   }
 
   static bool isPrimitive(x) {
-    return (x === null) || (x is String) || (x is num) || (x is bool);
+    return (x == null) || (x is String) || (x is num) || (x is bool);
   }
 }
 
@@ -39503,7 +39617,7 @@
 
   List visitList(List list) {
     List copy = _visited[list];
-    if (copy !== null) return copy;
+    if (copy != null) return copy;
 
     int len = list.length;
 
@@ -39518,7 +39632,7 @@
 
   Map visitMap(Map map) {
     Map copy = _visited[map];
-    if (copy !== null) return copy;
+    if (copy != null) return copy;
 
     // TODO(floitsch): we loose the generic type of the map.
     copy = new Map();
@@ -39539,7 +39653,7 @@
 
   visitList(List list) {
     int copyId = _visited[list];
-    if (copyId !== null) return ['ref', copyId];
+    if (copyId != null) return ['ref', copyId];
 
     int id = _nextFreeRefId++;
     _visited[list] = id;
@@ -39550,12 +39664,12 @@
 
   visitMap(Map map) {
     int copyId = _visited[map];
-    if (copyId !== null) return ['ref', copyId];
+    if (copyId != null) return ['ref', copyId];
 
     int id = _nextFreeRefId++;
     _visited[map] = id;
-    var keys = _serializeList(map.getKeys());
-    var values = _serializeList(map.getValues());
+    var keys = _serializeList(map.keys);
+    var values = _serializeList(map.values);
     // TODO(floitsch): we are losing the generic type.
     return ['map', id, keys, values];
   }
@@ -39572,17 +39686,17 @@
 
 /** Deserializes arrays created with [_Serializer]. */
 class _Deserializer {
-  Map<int, Dynamic> _deserialized;
+  Map<int, dynamic> _deserialized;
 
   _Deserializer();
 
   static bool isPrimitive(x) {
-    return (x === null) || (x is String) || (x is num) || (x is bool);
+    return (x == null) || (x is String) || (x is num) || (x is bool);
   }
 
   deserialize(x) {
     if (isPrimitive(x)) return x;
-    // TODO(floitsch): this should be new HashMap<int, var|Dynamic>()
+    // TODO(floitsch): this should be new HashMap<int, dynamic>()
     _deserialized = new HashMap();
     return _deserializeHelper(x);
   }
@@ -39602,7 +39716,7 @@
   _deserializeRef(List x) {
     int id = x[1];
     var result = _deserialized[id];
-    assert(result !== null);
+    assert(result != null);
     return result;
   }
 
@@ -39959,7 +40073,7 @@
   int findSlot(value) {
     int length = values.length;
     for (int i = 0; i < length; i++) {
-      if (values[i] === value) return i;
+      if (identical(values[i], value)) return i;
     }
     values.add(value);
     copies.add(null);
@@ -40058,7 +40172,7 @@
         for ( ; i < length; i++) {
           var element = e[i];
           var elementCopy = walk(element);
-          if (elementCopy !== element) {
+          if (!identical(elementCopy, element)) {
             copy = readSlot(slot);   // Cyclic reference may have created it.
             if (true == copy) {
               copy = JS('List', 'new Array(#)', length);
@@ -40124,7 +40238,7 @@
   int findSlot(value) {
     int length = values.length;
     for (int i = 0; i < length; i++) {
-      if (values[i] === value) return i;
+      if (identical(values[i], value)) return i;
     }
     values.add(value);
     copies.add(null);
@@ -40232,9 +40346,7 @@
 
   void close() => JS('void', '#.close()', _window);
 
-  void postMessage(Dynamic message,
-                   String targetOrigin,
-                   [List messagePorts = null]) {
+  void postMessage(var message, String targetOrigin, [List messagePorts = null]) {
     if (messagePorts == null) {
       JS('void', '#.postMessage(#,#)', _window, message, targetOrigin);
     } else {
@@ -40246,7 +40358,7 @@
   _DOMWindowCrossFrameImpl(this._window);
 
   static Window _createSafe(w) {
-    if (w === window) {
+    if (identical(w, window)) {
       return w;
     } else {
       // TODO(vsm): Cache or implement equality.
@@ -40270,7 +40382,7 @@
   _LocationCrossFrameImpl(this._location);
 
   static Location _createSafe(location) {
-    if (location === window.location) {
+    if (identical(location, window.location)) {
       return location;
     } else {
       // TODO(vsm): Cache or implement equality.
@@ -40295,7 +40407,7 @@
   _HistoryCrossFrameImpl(this._history);
 
   static History _createSafe(h) {
-    if (h === window.history) {
+    if (identical(h, window.history)) {
       return h;
     } else {
       // TODO(vsm): Cache or implement equality.
@@ -40668,7 +40780,7 @@
       : super(array),
         _length = array.length;
 
-  bool hasNext() => _length > _pos;
+  bool get hasNext => _length > _pos;
 
   final int _length;  // Cache array length for faster access.
 }
@@ -40679,11 +40791,11 @@
       : _array = array,
         _pos = 0;
 
-  bool hasNext() => _array.length > _pos;
+  bool get hasNext => _array.length > _pos;
 
   T next() {
-    if (!hasNext()) {
-      throw const NoMoreElementsException();
+    if (!hasNext) {
+      throw new StateError("No more elements");
     }
     return _array[_pos++];
   }
diff --git a/lib/html/dartium/html_dartium.dart b/lib/html/dartium/html_dartium.dart
index c1e51fe..c9d103a 100644
--- a/lib/html/dartium/html_dartium.dart
+++ b/lib/html/dartium/html_dartium.dart
@@ -1,8 +1,8 @@
-#library('dart:html');
+library html;
 
-#import('dart:isolate');
-#import('dart:json');
-#import('dart:nativewrappers');
+import 'dart:isolate';
+import 'dart:json';
+import 'dart:nativewrappers';
 // 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.
@@ -19,7 +19,7 @@
 LocalWindow __window;
 
 LocalWindow get window {
-  if (__window !== null) {
+  if (__window != null) {
     return __window;
   }
   __window = _Utils.window();
@@ -31,7 +31,7 @@
 Document __document;
 
 Document get document {
-  if (__document !== null) {
+  if (__document != null) {
     return __document;
   }
   __document = _document;
@@ -157,7 +157,7 @@
   String name;
 
   /** @domName HTMLAnchorElement.origin */
-  abstract String get origin;
+  String get origin;
 
   /** @domName HTMLAnchorElement.pathname */
   String pathname;
@@ -303,31 +303,31 @@
   static const int FILL_NONE = 0;
 
   /** @domName WebKitAnimation.delay */
-  abstract num get delay;
+  num get delay;
 
   /** @domName WebKitAnimation.direction */
-  abstract int get direction;
+  int get direction;
 
   /** @domName WebKitAnimation.duration */
-  abstract num get duration;
+  num get duration;
 
   /** @domName WebKitAnimation.elapsedTime */
   num elapsedTime;
 
   /** @domName WebKitAnimation.ended */
-  abstract bool get ended;
+  bool get ended;
 
   /** @domName WebKitAnimation.fillMode */
-  abstract int get fillMode;
+  int get fillMode;
 
   /** @domName WebKitAnimation.iterationCount */
-  abstract int get iterationCount;
+  int get iterationCount;
 
   /** @domName WebKitAnimation.name */
-  abstract String get name;
+  String get name;
 
   /** @domName WebKitAnimation.paused */
-  abstract bool get paused;
+  bool get paused;
 
   /** @domName WebKitAnimation.pause */
   void pause();
@@ -345,10 +345,10 @@
 abstract class AnimationEvent implements Event {
 
   /** @domName WebKitAnimationEvent.animationName */
-  abstract String get animationName;
+  String get animationName;
 
   /** @domName WebKitAnimationEvent.elapsedTime */
-  abstract num get elapsedTime;
+  num get elapsedTime;
 }
 // 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
@@ -509,13 +509,13 @@
   String coords;
 
   /** @domName HTMLAreaElement.hash */
-  abstract String get hash;
+  String get hash;
 
   /** @domName HTMLAreaElement.host */
-  abstract String get host;
+  String get host;
 
   /** @domName HTMLAreaElement.hostname */
-  abstract String get hostname;
+  String get hostname;
 
   /** @domName HTMLAreaElement.href */
   String href;
@@ -524,19 +524,19 @@
   bool noHref;
 
   /** @domName HTMLAreaElement.pathname */
-  abstract String get pathname;
+  String get pathname;
 
   /** @domName HTMLAreaElement.ping */
   String ping;
 
   /** @domName HTMLAreaElement.port */
-  abstract String get port;
+  String get port;
 
   /** @domName HTMLAreaElement.protocol */
-  abstract String get protocol;
+  String get protocol;
 
   /** @domName HTMLAreaElement.search */
-  abstract String get search;
+  String get search;
 
   /** @domName HTMLAreaElement.shape */
   String shape;
@@ -607,7 +607,7 @@
   factory ArrayBuffer(int length) => _ArrayBufferFactoryProvider.createArrayBuffer(length);
 
   /** @domName ArrayBuffer.byteLength */
-  abstract int get byteLength;
+  int get byteLength;
 
   /** @domName ArrayBuffer.slice */
   ArrayBuffer slice(int begin, [int end]);
@@ -644,13 +644,13 @@
 abstract class ArrayBufferView {
 
   /** @domName ArrayBufferView.buffer */
-  abstract ArrayBuffer get buffer;
+  ArrayBuffer get buffer;
 
   /** @domName ArrayBufferView.byteLength */
-  abstract int get byteLength;
+  int get byteLength;
 
   /** @domName ArrayBufferView.byteOffset */
-  abstract int get byteOffset;
+  int get byteOffset;
 }
 // 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
@@ -677,16 +677,16 @@
 abstract class Attr implements Node {
 
   /** @domName Attr.isId */
-  abstract bool get isId;
+  bool get isId;
 
   /** @domName Attr.name */
-  abstract String get name;
+  String get name;
 
   /** @domName Attr.ownerElement */
-  abstract Element get ownerElement;
+  Element get ownerElement;
 
   /** @domName Attr.specified */
-  abstract bool get specified;
+  bool get specified;
 
   /** @domName Attr.value */
   String value;
@@ -722,19 +722,19 @@
 abstract class AudioBuffer {
 
   /** @domName AudioBuffer.duration */
-  abstract num get duration;
+  num get duration;
 
   /** @domName AudioBuffer.gain */
   num gain;
 
   /** @domName AudioBuffer.length */
-  abstract int get length;
+  int get length;
 
   /** @domName AudioBuffer.numberOfChannels */
-  abstract int get numberOfChannels;
+  int get numberOfChannels;
 
   /** @domName AudioBuffer.sampleRate */
-  abstract num get sampleRate;
+  num get sampleRate;
 
   /** @domName AudioBuffer.getChannelData */
   Float32Array getChannelData(int channelIndex);
@@ -745,6 +745,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void AudioBufferCallback(AudioBuffer audioBuffer);
 // 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
@@ -790,7 +791,7 @@
   AudioBuffer buffer;
 
   /** @domName AudioBufferSourceNode.gain */
-  abstract AudioGain get gain;
+  AudioGain get gain;
 
   /** @domName AudioBufferSourceNode.loop */
   bool loop;
@@ -799,10 +800,10 @@
   bool looping;
 
   /** @domName AudioBufferSourceNode.playbackRate */
-  abstract AudioParam get playbackRate;
+  AudioParam get playbackRate;
 
   /** @domName AudioBufferSourceNode.playbackState */
-  abstract int get playbackState;
+  int get playbackState;
 
   /** @domName AudioBufferSourceNode.start */
   void start(num when, [num grainOffset, num grainDuration]);
@@ -837,11 +838,11 @@
   int get playbackState native "AudioBufferSourceNode_playbackState_Getter";
 
   void start(/*double*/ when, [/*double*/ grainOffset, /*double*/ grainDuration]) {
-    if ((when is num || when === null) && !?grainOffset && !?grainDuration) {
+    if ((when is num || when == null) && !?grainOffset && !?grainDuration) {
       _start_1(when);
       return;
     }
-    if ((when is num || when === null) && (grainOffset is num || grainOffset === null) && (grainDuration is num || grainDuration === null)) {
+    if ((when is num || when == null) && (grainOffset is num || grainOffset == null) && (grainDuration is num || grainDuration == null)) {
       _start_2(when, grainOffset, grainDuration);
       return;
     }
@@ -897,6 +898,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName AudioContext
 abstract class AudioContext implements EventTarget {
   factory AudioContext() => _AudioContextFactoryProvider.createAudioContext();
@@ -907,19 +909,19 @@
   AudioContextEvents get on;
 
   /** @domName AudioContext.activeSourceCount */
-  abstract int get activeSourceCount;
+  int get activeSourceCount;
 
   /** @domName AudioContext.currentTime */
-  abstract num get currentTime;
+  num get currentTime;
 
   /** @domName AudioContext.destination */
-  abstract AudioDestinationNode get destination;
+  AudioDestinationNode get destination;
 
   /** @domName AudioContext.listener */
-  abstract AudioListener get listener;
+  AudioListener get listener;
 
   /** @domName AudioContext.sampleRate */
-  abstract num get sampleRate;
+  num get sampleRate;
 
   /** @domName AudioContext.createAnalyser */
   RealtimeAnalyserNode createAnalyser();
@@ -1009,10 +1011,10 @@
   BiquadFilterNode createBiquadFilter() native "AudioContext_createBiquadFilter_Callback";
 
   AudioBuffer createBuffer(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, [/*float*/ sampleRate]) {
-    if ((buffer_OR_numberOfChannels is int || buffer_OR_numberOfChannels === null) && (mixToMono_OR_numberOfFrames is int || mixToMono_OR_numberOfFrames === null) && (sampleRate is num || sampleRate === null)) {
+    if ((buffer_OR_numberOfChannels is int || buffer_OR_numberOfChannels == null) && (mixToMono_OR_numberOfFrames is int || mixToMono_OR_numberOfFrames == null) && (sampleRate is num || sampleRate == null)) {
       return _createBuffer_1(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, sampleRate);
     }
-    if ((buffer_OR_numberOfChannels is ArrayBuffer || buffer_OR_numberOfChannels === null) && (mixToMono_OR_numberOfFrames is bool || mixToMono_OR_numberOfFrames === null) && !?sampleRate) {
+    if ((buffer_OR_numberOfChannels is ArrayBuffer || buffer_OR_numberOfChannels == null) && (mixToMono_OR_numberOfFrames is bool || mixToMono_OR_numberOfFrames == null) && !?sampleRate) {
       return _createBuffer_2(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames);
     }
     throw "Incorrect number or type of arguments";
@@ -1112,7 +1114,7 @@
 abstract class AudioDestinationNode implements AudioNode {
 
   /** @domName AudioDestinationNode.numberOfChannels */
-  abstract int get numberOfChannels;
+  int get numberOfChannels;
 }
 // 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
@@ -1178,7 +1180,7 @@
 abstract class AudioGainNode implements AudioNode {
 
   /** @domName AudioGainNode.gain */
-  abstract AudioGain get gain;
+  AudioGain get gain;
 }
 // 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
@@ -1248,13 +1250,13 @@
 abstract class AudioNode {
 
   /** @domName AudioNode.context */
-  abstract AudioContext get context;
+  AudioContext get context;
 
   /** @domName AudioNode.numberOfInputs */
-  abstract int get numberOfInputs;
+  int get numberOfInputs;
 
   /** @domName AudioNode.numberOfOutputs */
-  abstract int get numberOfOutputs;
+  int get numberOfOutputs;
 
   /** @domName AudioNode.connect */
   void connect(destination, int output, [int input]);
@@ -1277,11 +1279,11 @@
   int get numberOfOutputs native "AudioNode_numberOfOutputs_Getter";
 
   void connect(destination, /*unsigned long*/ output, [/*unsigned long*/ input]) {
-    if ((destination is AudioNode || destination === null) && (output is int || output === null) && (input is int || input === null)) {
+    if ((destination is AudioNode || destination == null) && (output is int || output == null) && (input is int || input == null)) {
       _connect_1(destination, output, input);
       return;
     }
-    if ((destination is AudioParam || destination === null) && (output is int || output === null) && !?input) {
+    if ((destination is AudioParam || destination == null) && (output is int || output == null) && !?input) {
       _connect_2(destination, output);
       return;
     }
@@ -1317,7 +1319,7 @@
   static const int SOUNDFIELD = 2;
 
   /** @domName AudioPannerNode.coneGain */
-  abstract AudioGain get coneGain;
+  AudioGain get coneGain;
 
   /** @domName AudioPannerNode.coneInnerAngle */
   num coneInnerAngle;
@@ -1329,7 +1331,7 @@
   num coneOuterGain;
 
   /** @domName AudioPannerNode.distanceGain */
-  abstract AudioGain get distanceGain;
+  AudioGain get distanceGain;
 
   /** @domName AudioPannerNode.distanceModel */
   int distanceModel;
@@ -1416,19 +1418,19 @@
 abstract class AudioParam {
 
   /** @domName AudioParam.defaultValue */
-  abstract num get defaultValue;
+  num get defaultValue;
 
   /** @domName AudioParam.maxValue */
-  abstract num get maxValue;
+  num get maxValue;
 
   /** @domName AudioParam.minValue */
-  abstract num get minValue;
+  num get minValue;
 
   /** @domName AudioParam.name */
-  abstract String get name;
+  String get name;
 
   /** @domName AudioParam.units */
-  abstract int get units;
+  int get units;
 
   /** @domName AudioParam.value */
   num value;
@@ -1496,10 +1498,10 @@
 abstract class AudioProcessingEvent implements Event {
 
   /** @domName AudioProcessingEvent.inputBuffer */
-  abstract AudioBuffer get inputBuffer;
+  AudioBuffer get inputBuffer;
 
   /** @domName AudioProcessingEvent.outputBuffer */
-  abstract AudioBuffer get outputBuffer;
+  AudioBuffer get outputBuffer;
 }
 // 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
@@ -1569,7 +1571,7 @@
 abstract class BarInfo {
 
   /** @domName BarInfo.visible */
-  abstract bool get visible;
+  bool get visible;
 }
 // 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
@@ -1670,16 +1672,16 @@
   BatteryManagerEvents get on;
 
   /** @domName BatteryManager.charging */
-  abstract bool get charging;
+  bool get charging;
 
   /** @domName BatteryManager.chargingTime */
-  abstract num get chargingTime;
+  num get chargingTime;
 
   /** @domName BatteryManager.dischargingTime */
-  abstract num get dischargingTime;
+  num get dischargingTime;
 
   /** @domName BatteryManager.level */
-  abstract num get level;
+  num get level;
 
   /** @domName BatteryManager.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -1749,7 +1751,7 @@
 abstract class BeforeLoadEvent implements Event {
 
   /** @domName BeforeLoadEvent.url */
-  abstract String get url;
+  String get url;
 }
 // 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
@@ -1788,13 +1790,13 @@
   static const int PEAKING = 5;
 
   /** @domName BiquadFilterNode.Q */
-  abstract AudioParam get Q;
+  AudioParam get Q;
 
   /** @domName BiquadFilterNode.frequency */
-  abstract AudioParam get frequency;
+  AudioParam get frequency;
 
   /** @domName BiquadFilterNode.gain */
-  abstract AudioParam get gain;
+  AudioParam get gain;
 
   /** @domName BiquadFilterNode.type */
   int type;
@@ -1843,10 +1845,10 @@
   }
 
   /** @domName Blob.size */
-  abstract int get size;
+  int get size;
 
   /** @domName Blob.type */
-  abstract String get type;
+  String get type;
 
   /** @domName Blob.slice */
   Blob slice([int start, int end, String contentType]);
@@ -2025,7 +2027,7 @@
   bool disabled;
 
   /** @domName HTMLButtonElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLButtonElement.formAction */
   String formAction;
@@ -2043,7 +2045,7 @@
   String formTarget;
 
   /** @domName HTMLButtonElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLButtonElement.name */
   String name;
@@ -2052,16 +2054,16 @@
   String type;
 
   /** @domName HTMLButtonElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLButtonElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLButtonElement.value */
   String value;
 
   /** @domName HTMLButtonElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLButtonElement.checkValidity */
   bool checkValidity();
@@ -2185,7 +2187,7 @@
 abstract class CSSFontFaceRule implements CSSRule {
 
   /** @domName CSSFontFaceRule.style */
-  abstract CSSStyleDeclaration get style;
+  CSSStyleDeclaration get style;
 }
 // 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
@@ -2208,13 +2210,13 @@
 abstract class CSSImportRule implements CSSRule {
 
   /** @domName CSSImportRule.href */
-  abstract String get href;
+  String get href;
 
   /** @domName CSSImportRule.media */
-  abstract MediaList get media;
+  MediaList get media;
 
   /** @domName CSSImportRule.styleSheet */
-  abstract CSSStyleSheet get styleSheet;
+  CSSStyleSheet get styleSheet;
 }
 // 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
@@ -2244,7 +2246,7 @@
   String keyText;
 
   /** @domName WebKitCSSKeyframeRule.style */
-  abstract CSSStyleDeclaration get style;
+  CSSStyleDeclaration get style;
 }
 // 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
@@ -2271,7 +2273,7 @@
 abstract class CSSKeyframesRule implements CSSRule {
 
   /** @domName WebKitCSSKeyframesRule.cssRules */
-  abstract List<CSSRule> get cssRules;
+  List<CSSRule> get cssRules;
 
   /** @domName WebKitCSSKeyframesRule.name */
   String name;
@@ -2545,10 +2547,10 @@
 abstract class CSSMediaRule implements CSSRule {
 
   /** @domName CSSMediaRule.cssRules */
-  abstract List<CSSRule> get cssRules;
+  List<CSSRule> get cssRules;
 
   /** @domName CSSMediaRule.media */
-  abstract MediaList get media;
+  MediaList get media;
 
   /** @domName CSSMediaRule.deleteRule */
   void deleteRule(int index);
@@ -2586,7 +2588,7 @@
   String selectorText;
 
   /** @domName CSSPageRule.style */
-  abstract CSSStyleDeclaration get style;
+  CSSStyleDeclaration get style;
 }
 // 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
@@ -2671,7 +2673,7 @@
   static const int CSS_VW = 26;
 
   /** @domName CSSPrimitiveValue.primitiveType */
-  abstract int get primitiveType;
+  int get primitiveType;
 
   /** @domName CSSPrimitiveValue.getCounterValue */
   Counter getCounterValue();
@@ -2750,13 +2752,13 @@
   String cssText;
 
   /** @domName CSSRule.parentRule */
-  abstract CSSRule get parentRule;
+  CSSRule get parentRule;
 
   /** @domName CSSRule.parentStyleSheet */
-  abstract CSSStyleSheet get parentStyleSheet;
+  CSSStyleSheet get parentStyleSheet;
 
   /** @domName CSSRule.type */
-  abstract int get type;
+  int get type;
 }
 // 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
@@ -2790,7 +2792,7 @@
   CSSRule operator[](int index) native "CSSRuleList_item_Callback";
 
   void operator[]=(int index, CSSRule value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<CSSRule> mixins.
   // CSSRule is the element type.
@@ -2807,15 +2809,15 @@
   // From Collection<CSSRule>:
 
   void add(CSSRule value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(CSSRule value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<CSSRule> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(CSSRule element) => _Collections.contains(this, element);
@@ -2831,38 +2833,38 @@
 
   bool some(bool f(CSSRule element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<CSSRule>:
 
   void sort([Comparator<CSSRule> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(CSSRule element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(CSSRule element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  CSSRule last() => this[length - 1];
+  CSSRule get last => this[length - 1];
 
   CSSRule removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<CSSRule> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [CSSRule initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<CSSRule> getRange(int start, int rangeLength) =>
@@ -2879,6 +2881,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName CSSStyleDeclaration
 abstract class CSSStyleDeclaration  {
   factory CSSStyleDeclaration() => _CSSStyleDeclarationFactoryProvider.createCSSStyleDeclaration();
@@ -2889,10 +2892,10 @@
   String cssText;
 
   /** @domName CSSStyleDeclaration.length */
-  abstract int get length;
+  int get length;
 
   /** @domName CSSStyleDeclaration.parentRule */
-  abstract CSSRule get parentRule;
+  CSSRule get parentRule;
 
   /** @domName CSSStyleDeclaration.getPropertyCSSValue */
   CSSValue getPropertyCSSValue(String propertyName);
@@ -4768,7 +4771,7 @@
 String _cachedBrowserPrefix;
 
 String get _browserPrefix {
-  if (_cachedBrowserPrefix === null) {
+  if (_cachedBrowserPrefix == null) {
     if (_Device.isFirefox) {
       _cachedBrowserPrefix = '-moz-';
     } else if (_Device.isIE) {
@@ -7593,7 +7596,7 @@
   String selectorText;
 
   /** @domName CSSStyleRule.style */
-  abstract CSSStyleDeclaration get style;
+  CSSStyleDeclaration get style;
 }
 // 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
@@ -7620,13 +7623,13 @@
 abstract class CSSStyleSheet implements StyleSheet {
 
   /** @domName CSSStyleSheet.cssRules */
-  abstract List<CSSRule> get cssRules;
+  List<CSSRule> get cssRules;
 
   /** @domName CSSStyleSheet.ownerRule */
-  abstract CSSRule get ownerRule;
+  CSSRule get ownerRule;
 
   /** @domName CSSStyleSheet.rules */
-  abstract List<CSSRule> get rules;
+  List<CSSRule> get rules;
 
   /** @domName CSSStyleSheet.addRule */
   int addRule(String selector, String style, [int index]);
@@ -7724,7 +7727,7 @@
   static const int CSS_TRANSLATEZ = 12;
 
   /** @domName WebKitCSSTransformValue.operationType */
-  abstract int get operationType;
+  int get operationType;
 }
 // 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
@@ -7776,7 +7779,7 @@
   String cssText;
 
   /** @domName CSSValue.cssValueType */
-  abstract int get cssValueType;
+  int get cssValueType;
 }
 // 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
@@ -7806,7 +7809,7 @@
   CSSValue operator[](int index) native "CSSValueList_item_Callback";
 
   void operator[]=(int index, CSSValue value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<CSSValue> mixins.
   // CSSValue is the element type.
@@ -7823,15 +7826,15 @@
   // From Collection<CSSValue>:
 
   void add(CSSValue value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(CSSValue value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<CSSValue> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(CSSValue element) => _Collections.contains(this, element);
@@ -7847,38 +7850,38 @@
 
   bool some(bool f(CSSValue element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<CSSValue>:
 
   void sort([Comparator<CSSValue> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(CSSValue element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(CSSValue element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  CSSValue last() => this[length - 1];
+  CSSValue get last => this[length - 1];
 
   CSSValue removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<CSSValue> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [CSSValue initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<CSSValue> getRange(int start, int rangeLength) =>
@@ -7895,6 +7898,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName HTMLCanvasElement
 abstract class CanvasElement implements Element {
 
@@ -7994,7 +7998,7 @@
 abstract class CanvasRenderingContext {
 
   /** @domName CanvasRenderingContext.canvas */
-  abstract CanvasElement get canvas;
+  CanvasElement get canvas;
 }
 // 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
@@ -8002,11 +8006,12 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName CanvasRenderingContext2D
 abstract class CanvasRenderingContext2D implements CanvasRenderingContext {
 
   /** @domName CanvasRenderingContext2D.fillStyle */
-  Dynamic fillStyle;
+  dynamic fillStyle;
 
   /** @domName CanvasRenderingContext2D.font */
   String font;
@@ -8045,7 +8050,7 @@
   num shadowOffsetY;
 
   /** @domName CanvasRenderingContext2D.strokeStyle */
-  Dynamic strokeStyle;
+  dynamic strokeStyle;
 
   /** @domName CanvasRenderingContext2D.textAlign */
   String textAlign;
@@ -8054,7 +8059,7 @@
   String textBaseline;
 
   /** @domName CanvasRenderingContext2D.webkitBackingStorePixelRatio */
-  abstract num get webkitBackingStorePixelRatio;
+  num get webkitBackingStorePixelRatio;
 
   /** @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled */
   bool webkitImageSmoothingEnabled;
@@ -8238,9 +8243,9 @@
 
 class _CanvasRenderingContext2DImpl extends _CanvasRenderingContextImpl implements CanvasRenderingContext2D {
 
-  Dynamic get fillStyle native "CanvasRenderingContext2D_fillStyle_Getter";
+  dynamic get fillStyle native "CanvasRenderingContext2D_fillStyle_Getter";
 
-  void set fillStyle(Dynamic value) native "CanvasRenderingContext2D_fillStyle_Setter";
+  void set fillStyle(dynamic value) native "CanvasRenderingContext2D_fillStyle_Setter";
 
   String get font native "CanvasRenderingContext2D_font_Getter";
 
@@ -8290,9 +8295,9 @@
 
   void set shadowOffsetY(num value) native "CanvasRenderingContext2D_shadowOffsetY_Setter";
 
-  Dynamic get strokeStyle native "CanvasRenderingContext2D_strokeStyle_Getter";
+  dynamic get strokeStyle native "CanvasRenderingContext2D_strokeStyle_Getter";
 
-  void set strokeStyle(Dynamic value) native "CanvasRenderingContext2D_strokeStyle_Setter";
+  void set strokeStyle(dynamic value) native "CanvasRenderingContext2D_strokeStyle_Setter";
 
   String get textAlign native "CanvasRenderingContext2D_textAlign_Getter";
 
@@ -8333,10 +8338,10 @@
   void closePath() native "CanvasRenderingContext2D_closePath_Callback";
 
   ImageData createImageData(imagedata_OR_sw, [/*float*/ sh]) {
-    if ((imagedata_OR_sw is ImageData || imagedata_OR_sw === null) && !?sh) {
+    if ((imagedata_OR_sw is ImageData || imagedata_OR_sw == null) && !?sh) {
       return _createImageData_1(imagedata_OR_sw);
     }
-    if ((imagedata_OR_sw is num || imagedata_OR_sw === null) && (sh is num || sh === null)) {
+    if ((imagedata_OR_sw is num || imagedata_OR_sw == null) && (sh is num || sh == null)) {
       return _createImageData_2(imagedata_OR_sw, sh);
     }
     throw "Incorrect number or type of arguments";
@@ -8349,10 +8354,10 @@
   CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) native "CanvasRenderingContext2D_createLinearGradient_Callback";
 
   CanvasPattern createPattern(canvas_OR_image, /*DOMString*/ repetitionType) {
-    if ((canvas_OR_image is CanvasElement || canvas_OR_image === null) && (repetitionType is String || repetitionType === null)) {
+    if ((canvas_OR_image is CanvasElement || canvas_OR_image == null) && (repetitionType is String || repetitionType == null)) {
       return _createPattern_1(canvas_OR_image, repetitionType);
     }
-    if ((canvas_OR_image is ImageElement || canvas_OR_image === null) && (repetitionType is String || repetitionType === null)) {
+    if ((canvas_OR_image is ImageElement || canvas_OR_image == null) && (repetitionType is String || repetitionType == null)) {
       return _createPattern_2(canvas_OR_image, repetitionType);
     }
     throw "Incorrect number or type of arguments";
@@ -8365,39 +8370,39 @@
   CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) native "CanvasRenderingContext2D_createRadialGradient_Callback";
 
   void drawImage(canvas_OR_image_OR_video, /*float*/ sx_OR_x, /*float*/ sy_OR_y, [/*float*/ sw_OR_width, /*float*/ height_OR_sh, /*float*/ dx, /*float*/ dy, /*float*/ dw, /*float*/ dh]) {
-    if ((canvas_OR_image_OR_video is ImageElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && !?sw_OR_width && !?height_OR_sh && !?dx && !?dy && !?dw && !?dh) {
+    if ((canvas_OR_image_OR_video is ImageElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && !?sw_OR_width && !?height_OR_sh && !?dx && !?dy && !?dw && !?dh) {
       _drawImage_1(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y);
       return;
     }
-    if ((canvas_OR_image_OR_video is ImageElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && (sw_OR_width is num || sw_OR_width === null) && (height_OR_sh is num || height_OR_sh === null) && !?dx && !?dy && !?dw && !?dh) {
+    if ((canvas_OR_image_OR_video is ImageElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && (sw_OR_width is num || sw_OR_width == null) && (height_OR_sh is num || height_OR_sh == null) && !?dx && !?dy && !?dw && !?dh) {
       _drawImage_2(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
-    if ((canvas_OR_image_OR_video is ImageElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && (sw_OR_width is num || sw_OR_width === null) && (height_OR_sh is num || height_OR_sh === null) && (dx is num || dx === null) && (dy is num || dy === null) && (dw is num || dw === null) && (dh is num || dh === null)) {
+    if ((canvas_OR_image_OR_video is ImageElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && (sw_OR_width is num || sw_OR_width == null) && (height_OR_sh is num || height_OR_sh == null) && (dx is num || dx == null) && (dy is num || dy == null) && (dw is num || dw == null) && (dh is num || dh == null)) {
       _drawImage_3(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
-    if ((canvas_OR_image_OR_video is CanvasElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && !?sw_OR_width && !?height_OR_sh && !?dx && !?dy && !?dw && !?dh) {
+    if ((canvas_OR_image_OR_video is CanvasElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && !?sw_OR_width && !?height_OR_sh && !?dx && !?dy && !?dw && !?dh) {
       _drawImage_4(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y);
       return;
     }
-    if ((canvas_OR_image_OR_video is CanvasElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && (sw_OR_width is num || sw_OR_width === null) && (height_OR_sh is num || height_OR_sh === null) && !?dx && !?dy && !?dw && !?dh) {
+    if ((canvas_OR_image_OR_video is CanvasElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && (sw_OR_width is num || sw_OR_width == null) && (height_OR_sh is num || height_OR_sh == null) && !?dx && !?dy && !?dw && !?dh) {
       _drawImage_5(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
-    if ((canvas_OR_image_OR_video is CanvasElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && (sw_OR_width is num || sw_OR_width === null) && (height_OR_sh is num || height_OR_sh === null) && (dx is num || dx === null) && (dy is num || dy === null) && (dw is num || dw === null) && (dh is num || dh === null)) {
+    if ((canvas_OR_image_OR_video is CanvasElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && (sw_OR_width is num || sw_OR_width == null) && (height_OR_sh is num || height_OR_sh == null) && (dx is num || dx == null) && (dy is num || dy == null) && (dw is num || dw == null) && (dh is num || dh == null)) {
       _drawImage_6(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
-    if ((canvas_OR_image_OR_video is VideoElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && !?sw_OR_width && !?height_OR_sh && !?dx && !?dy && !?dw && !?dh) {
+    if ((canvas_OR_image_OR_video is VideoElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && !?sw_OR_width && !?height_OR_sh && !?dx && !?dy && !?dw && !?dh) {
       _drawImage_7(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y);
       return;
     }
-    if ((canvas_OR_image_OR_video is VideoElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && (sw_OR_width is num || sw_OR_width === null) && (height_OR_sh is num || height_OR_sh === null) && !?dx && !?dy && !?dw && !?dh) {
+    if ((canvas_OR_image_OR_video is VideoElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && (sw_OR_width is num || sw_OR_width == null) && (height_OR_sh is num || height_OR_sh == null) && !?dx && !?dy && !?dw && !?dh) {
       _drawImage_8(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
-    if ((canvas_OR_image_OR_video is VideoElement || canvas_OR_image_OR_video === null) && (sx_OR_x is num || sx_OR_x === null) && (sy_OR_y is num || sy_OR_y === null) && (sw_OR_width is num || sw_OR_width === null) && (height_OR_sh is num || height_OR_sh === null) && (dx is num || dx === null) && (dy is num || dy === null) && (dw is num || dw === null) && (dh is num || dh === null)) {
+    if ((canvas_OR_image_OR_video is VideoElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && (sw_OR_width is num || sw_OR_width == null) && (height_OR_sh is num || height_OR_sh == null) && (dx is num || dx == null) && (dy is num || dy == null) && (dw is num || dw == null) && (dh is num || dh == null)) {
       _drawImage_9(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
@@ -8511,11 +8516,11 @@
   void moveTo(num x, num y) native "CanvasRenderingContext2D_moveTo_Callback";
 
   void putImageData(/*ImageData*/ imagedata, /*float*/ dx, /*float*/ dy, [/*float*/ dirtyX, /*float*/ dirtyY, /*float*/ dirtyWidth, /*float*/ dirtyHeight]) {
-    if ((imagedata is ImageData || imagedata === null) && (dx is num || dx === null) && (dy is num || dy === null) && !?dirtyX && !?dirtyY && !?dirtyWidth && !?dirtyHeight) {
+    if ((imagedata is ImageData || imagedata == null) && (dx is num || dx == null) && (dy is num || dy == null) && !?dirtyX && !?dirtyY && !?dirtyWidth && !?dirtyHeight) {
       _putImageData_1(imagedata, dx, dy);
       return;
     }
-    if ((imagedata is ImageData || imagedata === null) && (dx is num || dx === null) && (dy is num || dy === null) && (dirtyX is num || dirtyX === null) && (dirtyY is num || dirtyY === null) && (dirtyWidth is num || dirtyWidth === null) && (dirtyHeight is num || dirtyHeight === null)) {
+    if ((imagedata is ImageData || imagedata == null) && (dx is num || dx == null) && (dy is num || dy == null) && (dirtyX is num || dirtyX == null) && (dirtyY is num || dirtyY == null) && (dirtyWidth is num || dirtyWidth == null) && (dirtyHeight is num || dirtyHeight == null)) {
       _putImageData_2(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
       return;
     }
@@ -8553,31 +8558,31 @@
   void setMiterLimit(num limit) native "CanvasRenderingContext2D_setMiterLimit_Callback";
 
   void setShadow(/*float*/ width, /*float*/ height, /*float*/ blur, [c_OR_color_OR_grayLevel_OR_r, /*float*/ alpha_OR_g_OR_m, /*float*/ b_OR_y, /*float*/ a_OR_k, /*float*/ a]) {
-    if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && !?c_OR_color_OR_grayLevel_OR_r && !?alpha_OR_g_OR_m && !?b_OR_y && !?a_OR_k && !?a) {
+    if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && !?c_OR_color_OR_grayLevel_OR_r && !?alpha_OR_g_OR_m && !?b_OR_y && !?a_OR_k && !?a) {
       _setShadow_1(width, height, blur);
       return;
     }
-    if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && (c_OR_color_OR_grayLevel_OR_r is String || c_OR_color_OR_grayLevel_OR_r === null) && !?alpha_OR_g_OR_m && !?b_OR_y && !?a_OR_k && !?a) {
+    if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && (c_OR_color_OR_grayLevel_OR_r is String || c_OR_color_OR_grayLevel_OR_r == null) && !?alpha_OR_g_OR_m && !?b_OR_y && !?a_OR_k && !?a) {
       _setShadow_2(width, height, blur, c_OR_color_OR_grayLevel_OR_r);
       return;
     }
-    if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && (c_OR_color_OR_grayLevel_OR_r is String || c_OR_color_OR_grayLevel_OR_r === null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m === null) && !?b_OR_y && !?a_OR_k && !?a) {
+    if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && (c_OR_color_OR_grayLevel_OR_r is String || c_OR_color_OR_grayLevel_OR_r == null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m == null) && !?b_OR_y && !?a_OR_k && !?a) {
       _setShadow_3(width, height, blur, c_OR_color_OR_grayLevel_OR_r, alpha_OR_g_OR_m);
       return;
     }
-    if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r === null) && !?alpha_OR_g_OR_m && !?b_OR_y && !?a_OR_k && !?a) {
+    if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r == null) && !?alpha_OR_g_OR_m && !?b_OR_y && !?a_OR_k && !?a) {
       _setShadow_4(width, height, blur, c_OR_color_OR_grayLevel_OR_r);
       return;
     }
-    if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r === null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m === null) && !?b_OR_y && !?a_OR_k && !?a) {
+    if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r == null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m == null) && !?b_OR_y && !?a_OR_k && !?a) {
       _setShadow_5(width, height, blur, c_OR_color_OR_grayLevel_OR_r, alpha_OR_g_OR_m);
       return;
     }
-    if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r === null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m === null) && (b_OR_y is num || b_OR_y === null) && (a_OR_k is num || a_OR_k === null) && !?a) {
+    if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r == null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m == null) && (b_OR_y is num || b_OR_y == null) && (a_OR_k is num || a_OR_k == null) && !?a) {
       _setShadow_6(width, height, blur, c_OR_color_OR_grayLevel_OR_r, alpha_OR_g_OR_m, b_OR_y, a_OR_k);
       return;
     }
-    if ((width is num || width === null) && (height is num || height === null) && (blur is num || blur === null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r === null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m === null) && (b_OR_y is num || b_OR_y === null) && (a_OR_k is num || a_OR_k === null) && (a is num || a === null)) {
+    if ((width is num || width == null) && (height is num || height == null) && (blur is num || blur == null) && (c_OR_color_OR_grayLevel_OR_r is num || c_OR_color_OR_grayLevel_OR_r == null) && (alpha_OR_g_OR_m is num || alpha_OR_g_OR_m == null) && (b_OR_y is num || b_OR_y == null) && (a_OR_k is num || a_OR_k == null) && (a is num || a == null)) {
       _setShadow_7(width, height, blur, c_OR_color_OR_grayLevel_OR_r, alpha_OR_g_OR_m, b_OR_y, a_OR_k, a);
       return;
     }
@@ -8633,11 +8638,11 @@
   ImageData webkitGetImageDataHD(num sx, num sy, num sw, num sh) native "CanvasRenderingContext2D_webkitGetImageDataHD_Callback";
 
   void webkitPutImageDataHD(/*ImageData*/ imagedata, /*float*/ dx, /*float*/ dy, [/*float*/ dirtyX, /*float*/ dirtyY, /*float*/ dirtyWidth, /*float*/ dirtyHeight]) {
-    if ((imagedata is ImageData || imagedata === null) && (dx is num || dx === null) && (dy is num || dy === null) && !?dirtyX && !?dirtyY && !?dirtyWidth && !?dirtyHeight) {
+    if ((imagedata is ImageData || imagedata == null) && (dx is num || dx == null) && (dy is num || dy == null) && !?dirtyX && !?dirtyY && !?dirtyWidth && !?dirtyHeight) {
       _webkitPutImageDataHD_1(imagedata, dx, dy);
       return;
     }
-    if ((imagedata is ImageData || imagedata === null) && (dx is num || dx === null) && (dy is num || dy === null) && (dirtyX is num || dirtyX === null) && (dirtyY is num || dirtyY === null) && (dirtyWidth is num || dirtyWidth === null) && (dirtyHeight is num || dirtyHeight === null)) {
+    if ((imagedata is ImageData || imagedata == null) && (dx is num || dx == null) && (dy is num || dy == null) && (dirtyX is num || dirtyX == null) && (dirtyY is num || dirtyY == null) && (dirtyWidth is num || dirtyWidth == null) && (dirtyHeight is num || dirtyHeight == null)) {
       _webkitPutImageDataHD_2(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
       return;
     }
@@ -8689,7 +8694,7 @@
   String data;
 
   /** @domName CharacterData.length */
-  abstract int get length;
+  int get length;
 
   /** @domName CharacterData.appendData */
   void appendData(String data);
@@ -8746,22 +8751,22 @@
 abstract class ClientRect {
 
   /** @domName ClientRect.bottom */
-  abstract num get bottom;
+  num get bottom;
 
   /** @domName ClientRect.height */
-  abstract num get height;
+  num get height;
 
   /** @domName ClientRect.left */
-  abstract num get left;
+  num get left;
 
   /** @domName ClientRect.right */
-  abstract num get right;
+  num get right;
 
   /** @domName ClientRect.top */
-  abstract num get top;
+  num get top;
 
   /** @domName ClientRect.width */
-  abstract num get width;
+  num get width;
 }
 // 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
@@ -8797,7 +8802,7 @@
   ClientRect operator[](int index) native "ClientRectList_item_Callback";
 
   void operator[]=(int index, ClientRect value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<ClientRect> mixins.
   // ClientRect is the element type.
@@ -8814,15 +8819,15 @@
   // From Collection<ClientRect>:
 
   void add(ClientRect value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(ClientRect value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<ClientRect> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(ClientRect element) => _Collections.contains(this, element);
@@ -8838,38 +8843,38 @@
 
   bool some(bool f(ClientRect element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<ClientRect>:
 
   void sort([Comparator<ClientRect> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(ClientRect element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(ClientRect element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  ClientRect last() => this[length - 1];
+  ClientRect get last => this[length - 1];
 
   ClientRect removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<ClientRect> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [ClientRect initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<ClientRect> getRange(int start, int rangeLength) =>
@@ -8896,13 +8901,13 @@
   String effectAllowed;
 
   /** @domName Clipboard.files */
-  abstract List<File> get files;
+  List<File> get files;
 
   /** @domName Clipboard.items */
-  abstract DataTransferItemList get items;
+  DataTransferItemList get items;
 
   /** @domName Clipboard.types */
-  abstract List get types;
+  List get types;
 
   /** @domName Clipboard.clearData */
   void clearData([String type]);
@@ -8957,13 +8962,13 @@
 abstract class CloseEvent implements Event {
 
   /** @domName CloseEvent.code */
-  abstract int get code;
+  int get code;
 
   /** @domName CloseEvent.reason */
-  abstract String get reason;
+  String get reason;
 
   /** @domName CloseEvent.wasClean */
-  abstract bool get wasClean;
+  bool get wasClean;
 }
 // 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
@@ -9008,7 +9013,7 @@
 abstract class CompositionEvent implements UIEvent {
 
   /** @domName CompositionEvent.data */
-  abstract String get data;
+  String get data;
 
   /** @domName CompositionEvent.initCompositionEvent */
   void initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg);
@@ -9036,10 +9041,10 @@
 abstract class Console {
 
   /** @domName Console.memory */
-  abstract MemoryInfo get memory;
+  MemoryInfo get memory;
 
   /** @domName Console.profiles */
-  abstract List<ScriptProfile> get profiles;
+  List<ScriptProfile> get profiles;
 
   /** @domName Console.assertCondition */
   void assertCondition(bool condition, Object arg);
@@ -9160,6 +9165,9 @@
 
   factory ContentElement() => _Elements.createContentElement();
 
+  /** @domName HTMLContentElement.resetStyleInheritance */
+  bool resetStyleInheritance;
+
   /** @domName HTMLContentElement.select */
   String select;
 }
@@ -9171,6 +9179,10 @@
 
 class _ContentElementImpl extends _ElementImpl_Merged implements ContentElement {
 
+  bool get resetStyleInheritance native "HTMLContentElement_resetStyleInheritance_Getter";
+
+  void set resetStyleInheritance(bool value) native "HTMLContentElement_resetStyleInheritance_Setter";
+
   String get select native "HTMLContentElement_select_Getter";
 
   void set select(String value) native "HTMLContentElement_select_Setter";
@@ -9218,25 +9230,25 @@
 abstract class Coordinates {
 
   /** @domName Coordinates.accuracy */
-  abstract num get accuracy;
+  num get accuracy;
 
   /** @domName Coordinates.altitude */
-  abstract num get altitude;
+  num get altitude;
 
   /** @domName Coordinates.altitudeAccuracy */
-  abstract num get altitudeAccuracy;
+  num get altitudeAccuracy;
 
   /** @domName Coordinates.heading */
-  abstract num get heading;
+  num get heading;
 
   /** @domName Coordinates.latitude */
-  abstract num get latitude;
+  num get latitude;
 
   /** @domName Coordinates.longitude */
-  abstract num get longitude;
+  num get longitude;
 
   /** @domName Coordinates.speed */
-  abstract num get speed;
+  num get speed;
 }
 // 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
@@ -9271,13 +9283,13 @@
 abstract class Counter {
 
   /** @domName Counter.identifier */
-  abstract String get identifier;
+  String get identifier;
 
   /** @domName Counter.listStyle */
-  abstract String get listStyle;
+  String get listStyle;
 
   /** @domName Counter.separator */
-  abstract String get separator;
+  String get separator;
 }
 // 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
@@ -9323,6 +9335,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName CustomEvent
 abstract class CustomEvent implements Event {
 
@@ -9332,7 +9345,7 @@
 
 
   /** @domName CustomEvent.detail */
-  abstract Object get detail;
+  Object get detail;
 
   /** @domName CustomEvent.initCustomEvent */
   void $dom_initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg);
@@ -9404,7 +9417,7 @@
   static const int UPDATEREADY = 4;
 
   /** @domName DOMApplicationCache.status */
-  abstract int get status;
+  int get status;
 
   /** @domName DOMApplicationCache.abort */
   void abort();
@@ -9499,7 +9512,7 @@
 abstract class DOMError {
 
   /** @domName DOMError.name */
-  abstract String get name;
+  String get name;
 }
 // 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
@@ -9572,13 +9585,13 @@
   static const int WRONG_DOCUMENT_ERR = 4;
 
   /** @domName DOMException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName DOMException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName DOMException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName DOMException.toString */
   String toString();
@@ -9610,10 +9623,10 @@
 abstract class DOMFileSystem {
 
   /** @domName DOMFileSystem.name */
-  abstract String get name;
+  String get name;
 
   /** @domName DOMFileSystem.root */
-  abstract DirectoryEntry get root;
+  DirectoryEntry get root;
 }
 // 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
@@ -9638,10 +9651,10 @@
 abstract class DOMFileSystemSync {
 
   /** @domName DOMFileSystemSync.name */
-  abstract String get name;
+  String get name;
 
   /** @domName DOMFileSystemSync.root */
-  abstract DirectoryEntrySync get root;
+  DirectoryEntrySync get root;
 }
 // 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
@@ -9709,16 +9722,16 @@
 abstract class DOMMimeType {
 
   /** @domName MimeType.description */
-  abstract String get description;
+  String get description;
 
   /** @domName MimeType.enabledPlugin */
-  abstract DOMPlugin get enabledPlugin;
+  DOMPlugin get enabledPlugin;
 
   /** @domName MimeType.suffixes */
-  abstract String get suffixes;
+  String get suffixes;
 
   /** @domName MimeType.type */
-  abstract String get type;
+  String get type;
 }
 // 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
@@ -9730,7 +9743,7 @@
 abstract class DOMMimeTypeArray implements List<DOMMimeType> {
 
   /** @domName MimeTypeArray.length */
-  abstract int get length;
+  int get length;
 
   /** @domName MimeTypeArray.item */
   DOMMimeType item(int index);
@@ -9751,7 +9764,7 @@
   DOMMimeType operator[](int index) native "DOMMimeTypeArray_item_Callback";
 
   void operator[]=(int index, DOMMimeType value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<DOMMimeType> mixins.
   // DOMMimeType is the element type.
@@ -9768,15 +9781,15 @@
   // From Collection<DOMMimeType>:
 
   void add(DOMMimeType value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(DOMMimeType value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<DOMMimeType> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(DOMMimeType element) => _Collections.contains(this, element);
@@ -9792,38 +9805,38 @@
 
   bool some(bool f(DOMMimeType element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<DOMMimeType>:
 
   void sort([Comparator<DOMMimeType> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(DOMMimeType element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(DOMMimeType element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  DOMMimeType last() => this[length - 1];
+  DOMMimeType get last => this[length - 1];
 
   DOMMimeType removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<DOMMimeType> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [DOMMimeType initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<DOMMimeType> getRange(int start, int rangeLength) =>
@@ -9888,16 +9901,16 @@
 abstract class DOMPlugin {
 
   /** @domName Plugin.description */
-  abstract String get description;
+  String get description;
 
   /** @domName Plugin.filename */
-  abstract String get filename;
+  String get filename;
 
   /** @domName Plugin.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Plugin.name */
-  abstract String get name;
+  String get name;
 
   /** @domName Plugin.item */
   DOMMimeType item(int index);
@@ -9915,7 +9928,7 @@
 abstract class DOMPluginArray implements List<DOMPlugin> {
 
   /** @domName PluginArray.length */
-  abstract int get length;
+  int get length;
 
   /** @domName PluginArray.item */
   DOMPlugin item(int index);
@@ -9939,7 +9952,7 @@
   DOMPlugin operator[](int index) native "DOMPluginArray_item_Callback";
 
   void operator[]=(int index, DOMPlugin value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<DOMPlugin> mixins.
   // DOMPlugin is the element type.
@@ -9956,15 +9969,15 @@
   // From Collection<DOMPlugin>:
 
   void add(DOMPlugin value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(DOMPlugin value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<DOMPlugin> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(DOMPlugin element) => _Collections.contains(this, element);
@@ -9980,38 +9993,38 @@
 
   bool some(bool f(DOMPlugin element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<DOMPlugin>:
 
   void sort([Comparator<DOMPlugin> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(DOMPlugin element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(DOMPlugin element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  DOMPlugin last() => this[length - 1];
+  DOMPlugin get last => this[length - 1];
 
   DOMPlugin removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<DOMPlugin> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [DOMPlugin initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<DOMPlugin> getRange(int start, int rangeLength) =>
@@ -10057,37 +10070,37 @@
 abstract class DOMSelection {
 
   /** @domName Selection.anchorNode */
-  abstract Node get anchorNode;
+  Node get anchorNode;
 
   /** @domName Selection.anchorOffset */
-  abstract int get anchorOffset;
+  int get anchorOffset;
 
   /** @domName Selection.baseNode */
-  abstract Node get baseNode;
+  Node get baseNode;
 
   /** @domName Selection.baseOffset */
-  abstract int get baseOffset;
+  int get baseOffset;
 
   /** @domName Selection.extentNode */
-  abstract Node get extentNode;
+  Node get extentNode;
 
   /** @domName Selection.extentOffset */
-  abstract int get extentOffset;
+  int get extentOffset;
 
   /** @domName Selection.focusNode */
-  abstract Node get focusNode;
+  Node get focusNode;
 
   /** @domName Selection.focusOffset */
-  abstract int get focusOffset;
+  int get focusOffset;
 
   /** @domName Selection.isCollapsed */
-  abstract bool get isCollapsed;
+  bool get isCollapsed;
 
   /** @domName Selection.rangeCount */
-  abstract int get rangeCount;
+  int get rangeCount;
 
   /** @domName Selection.type */
-  abstract String get type;
+  String get type;
 
   /** @domName Selection.addRange */
   void addRange(Range range);
@@ -10233,7 +10246,7 @@
   String operator[](int index) native "DOMStringList_item_Callback";
 
   void operator[]=(int index, String value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<String> mixins.
   // String is the element type.
@@ -10250,15 +10263,15 @@
   // From Collection<String>:
 
   void add(String value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(String value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<String> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   // contains() defined by IDL.
@@ -10274,38 +10287,38 @@
 
   bool some(bool f(String element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<String>:
 
   void sort([Comparator<String> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(String element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(String element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  String last() => this[length - 1];
+  String get last => this[length - 1];
 
   String removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [String initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<String> getRange(int start, int rangeLength) =>
@@ -10337,7 +10350,7 @@
 abstract class DOMTokenList {
 
   /** @domName DOMTokenList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName DOMTokenList.contains */
   bool contains(String token);
@@ -10396,13 +10409,13 @@
 class _DOMURLImpl extends NativeFieldWrapperClass1 implements DOMURL {
 
   static String createObjectURL(blob_OR_source_OR_stream) {
-    if ((blob_OR_source_OR_stream is MediaSource || blob_OR_source_OR_stream === null)) {
+    if ((blob_OR_source_OR_stream is MediaSource || blob_OR_source_OR_stream == null)) {
       return _createObjectURL_1(blob_OR_source_OR_stream);
     }
-    if ((blob_OR_source_OR_stream is MediaStream || blob_OR_source_OR_stream === null)) {
+    if ((blob_OR_source_OR_stream is MediaStream || blob_OR_source_OR_stream == null)) {
       return _createObjectURL_2(blob_OR_source_OR_stream);
     }
-    if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream === null)) {
+    if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream == null)) {
       return _createObjectURL_3(blob_OR_source_OR_stream);
     }
     throw "Incorrect number or type of arguments";
@@ -10429,7 +10442,7 @@
   factory DataListElement() => _Elements.createDataListElement();
 
   /** @domName HTMLDataListElement.options */
-  abstract HTMLCollection get options;
+  HTMLCollection get options;
 }
 // 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
@@ -10452,10 +10465,10 @@
 abstract class DataTransferItem {
 
   /** @domName DataTransferItem.kind */
-  abstract String get kind;
+  String get kind;
 
   /** @domName DataTransferItem.type */
-  abstract String get type;
+  String get type;
 
   /** @domName DataTransferItem.getAsFile */
   Blob getAsFile();
@@ -10495,7 +10508,7 @@
 abstract class DataTransferItemList {
 
   /** @domName DataTransferItemList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName DataTransferItemList.add */
   void add(data_OR_file, [String type]);
@@ -10517,11 +10530,11 @@
   int get length native "DataTransferItemList_length_Getter";
 
   void add(data_OR_file, [/*DOMString*/ type]) {
-    if ((data_OR_file is File || data_OR_file === null) && !?type) {
+    if ((data_OR_file is File || data_OR_file == null) && !?type) {
       _add_1(data_OR_file);
       return;
     }
-    if ((data_OR_file is String || data_OR_file === null) && (type is String || type === null)) {
+    if ((data_OR_file is String || data_OR_file == null) && (type is String || type == null)) {
       _add_2(data_OR_file, type);
       return;
     }
@@ -10557,49 +10570,49 @@
   }
 
   /** @domName DataView.getFloat32 */
-  num getFloat32(int byteOffset, [bool littleEndian]);
+  num getFloat32(int byteOffset, {bool littleEndian});
 
   /** @domName DataView.getFloat64 */
-  num getFloat64(int byteOffset, [bool littleEndian]);
+  num getFloat64(int byteOffset, {bool littleEndian});
 
   /** @domName DataView.getInt16 */
-  int getInt16(int byteOffset, [bool littleEndian]);
+  int getInt16(int byteOffset, {bool littleEndian});
 
   /** @domName DataView.getInt32 */
-  int getInt32(int byteOffset, [bool littleEndian]);
+  int getInt32(int byteOffset, {bool littleEndian});
 
   /** @domName DataView.getInt8 */
   int getInt8(int byteOffset);
 
   /** @domName DataView.getUint16 */
-  int getUint16(int byteOffset, [bool littleEndian]);
+  int getUint16(int byteOffset, {bool littleEndian});
 
   /** @domName DataView.getUint32 */
-  int getUint32(int byteOffset, [bool littleEndian]);
+  int getUint32(int byteOffset, {bool littleEndian});
 
   /** @domName DataView.getUint8 */
   int getUint8(int byteOffset);
 
   /** @domName DataView.setFloat32 */
-  void setFloat32(int byteOffset, num value, [bool littleEndian]);
+  void setFloat32(int byteOffset, num value, {bool littleEndian});
 
   /** @domName DataView.setFloat64 */
-  void setFloat64(int byteOffset, num value, [bool littleEndian]);
+  void setFloat64(int byteOffset, num value, {bool littleEndian});
 
   /** @domName DataView.setInt16 */
-  void setInt16(int byteOffset, int value, [bool littleEndian]);
+  void setInt16(int byteOffset, int value, {bool littleEndian});
 
   /** @domName DataView.setInt32 */
-  void setInt32(int byteOffset, int value, [bool littleEndian]);
+  void setInt32(int byteOffset, int value, {bool littleEndian});
 
   /** @domName DataView.setInt8 */
   void setInt8(int byteOffset, int value);
 
   /** @domName DataView.setUint16 */
-  void setUint16(int byteOffset, int value, [bool littleEndian]);
+  void setUint16(int byteOffset, int value, {bool littleEndian});
 
   /** @domName DataView.setUint32 */
-  void setUint32(int byteOffset, int value, [bool littleEndian]);
+  void setUint32(int byteOffset, int value, {bool littleEndian});
 
   /** @domName DataView.setUint8 */
   void setUint8(int byteOffset, int value);
@@ -10612,7 +10625,7 @@
 
 class _DataViewImpl extends _ArrayBufferViewImpl implements DataView {
 
-  num getFloat32(/*unsigned long*/ byteOffset, [/*boolean*/ littleEndian]) {
+  num getFloat32(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
     if (?littleEndian) {
       return _getFloat32_1(byteOffset, littleEndian);
     }
@@ -10623,7 +10636,7 @@
 
   num _getFloat32_2(byteOffset) native "DataView_getFloat32_2_Callback";
 
-  num getFloat64(/*unsigned long*/ byteOffset, [/*boolean*/ littleEndian]) {
+  num getFloat64(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
     if (?littleEndian) {
       return _getFloat64_1(byteOffset, littleEndian);
     }
@@ -10634,7 +10647,7 @@
 
   num _getFloat64_2(byteOffset) native "DataView_getFloat64_2_Callback";
 
-  int getInt16(/*unsigned long*/ byteOffset, [/*boolean*/ littleEndian]) {
+  int getInt16(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
     if (?littleEndian) {
       return _getInt16_1(byteOffset, littleEndian);
     }
@@ -10645,7 +10658,7 @@
 
   int _getInt16_2(byteOffset) native "DataView_getInt16_2_Callback";
 
-  int getInt32(/*unsigned long*/ byteOffset, [/*boolean*/ littleEndian]) {
+  int getInt32(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
     if (?littleEndian) {
       return _getInt32_1(byteOffset, littleEndian);
     }
@@ -10658,7 +10671,7 @@
 
   int getInt8(int byteOffset) native "DataView_getInt8_Callback";
 
-  int getUint16(/*unsigned long*/ byteOffset, [/*boolean*/ littleEndian]) {
+  int getUint16(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
     if (?littleEndian) {
       return _getUint16_1(byteOffset, littleEndian);
     }
@@ -10669,7 +10682,7 @@
 
   int _getUint16_2(byteOffset) native "DataView_getUint16_2_Callback";
 
-  int getUint32(/*unsigned long*/ byteOffset, [/*boolean*/ littleEndian]) {
+  int getUint32(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
     if (?littleEndian) {
       return _getUint32_1(byteOffset, littleEndian);
     }
@@ -10682,7 +10695,7 @@
 
   int getUint8(int byteOffset) native "DataView_getUint8_Callback";
 
-  void setFloat32(/*unsigned long*/ byteOffset, /*float*/ value, [/*boolean*/ littleEndian]) {
+  void setFloat32(/*unsigned long*/ byteOffset, /*float*/ value, {/*boolean*/ littleEndian}) {
     if (?littleEndian) {
       _setFloat32_1(byteOffset, value, littleEndian);
       return;
@@ -10694,7 +10707,7 @@
 
   void _setFloat32_2(byteOffset, value) native "DataView_setFloat32_2_Callback";
 
-  void setFloat64(/*unsigned long*/ byteOffset, /*double*/ value, [/*boolean*/ littleEndian]) {
+  void setFloat64(/*unsigned long*/ byteOffset, /*double*/ value, {/*boolean*/ littleEndian}) {
     if (?littleEndian) {
       _setFloat64_1(byteOffset, value, littleEndian);
       return;
@@ -10706,7 +10719,7 @@
 
   void _setFloat64_2(byteOffset, value) native "DataView_setFloat64_2_Callback";
 
-  void setInt16(/*unsigned long*/ byteOffset, /*short*/ value, [/*boolean*/ littleEndian]) {
+  void setInt16(/*unsigned long*/ byteOffset, /*short*/ value, {/*boolean*/ littleEndian}) {
     if (?littleEndian) {
       _setInt16_1(byteOffset, value, littleEndian);
       return;
@@ -10718,7 +10731,7 @@
 
   void _setInt16_2(byteOffset, value) native "DataView_setInt16_2_Callback";
 
-  void setInt32(/*unsigned long*/ byteOffset, /*long*/ value, [/*boolean*/ littleEndian]) {
+  void setInt32(/*unsigned long*/ byteOffset, /*long*/ value, {/*boolean*/ littleEndian}) {
     if (?littleEndian) {
       _setInt32_1(byteOffset, value, littleEndian);
       return;
@@ -10732,7 +10745,7 @@
 
   void setInt8(int byteOffset, int value) native "DataView_setInt8_Callback";
 
-  void setUint16(/*unsigned long*/ byteOffset, /*unsigned short*/ value, [/*boolean*/ littleEndian]) {
+  void setUint16(/*unsigned long*/ byteOffset, /*unsigned short*/ value, {/*boolean*/ littleEndian}) {
     if (?littleEndian) {
       _setUint16_1(byteOffset, value, littleEndian);
       return;
@@ -10744,7 +10757,7 @@
 
   void _setUint16_2(byteOffset, value) native "DataView_setUint16_2_Callback";
 
-  void setUint32(/*unsigned long*/ byteOffset, /*unsigned long*/ value, [/*boolean*/ littleEndian]) {
+  void setUint32(/*unsigned long*/ byteOffset, /*unsigned long*/ value, {/*boolean*/ littleEndian}) {
     if (?littleEndian) {
       _setUint32_1(byteOffset, value, littleEndian);
       return;
@@ -10769,7 +10782,7 @@
 abstract class Database {
 
   /** @domName Database.version */
-  abstract String get version;
+  String get version;
 
   /** @domName Database.changeVersion */
   void changeVersion(String oldVersion, String newVersion, [SQLTransactionCallback callback, SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]);
@@ -10786,6 +10799,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void DatabaseCallback(database);
 // 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
@@ -10814,10 +10828,10 @@
 abstract class DatabaseSync {
 
   /** @domName DatabaseSync.lastErrorMessage */
-  abstract String get lastErrorMessage;
+  String get lastErrorMessage;
 
   /** @domName DatabaseSync.version */
-  abstract String get version;
+  String get version;
 
   /** @domName DatabaseSync.changeVersion */
   void changeVersion(String oldVersion, String newVersion, [SQLTransactionSyncCallback callback]);
@@ -10899,7 +10913,7 @@
 abstract class DelayNode implements AudioNode {
 
   /** @domName DelayNode.delayTime */
-  abstract AudioParam get delayTime;
+  AudioParam get delayTime;
 }
 // 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
@@ -10949,7 +10963,7 @@
 abstract class DeviceMotionEvent implements Event {
 
   /** @domName DeviceMotionEvent.interval */
-  abstract num get interval;
+  num get interval;
 }
 // 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
@@ -10972,16 +10986,16 @@
 abstract class DeviceOrientationEvent implements Event {
 
   /** @domName DeviceOrientationEvent.absolute */
-  abstract bool get absolute;
+  bool get absolute;
 
   /** @domName DeviceOrientationEvent.alpha */
-  abstract num get alpha;
+  num get alpha;
 
   /** @domName DeviceOrientationEvent.beta */
-  abstract num get beta;
+  num get beta;
 
   /** @domName DeviceOrientationEvent.gamma */
-  abstract num get gamma;
+  num get gamma;
 
   /** @domName DeviceOrientationEvent.initDeviceOrientationEvent */
   void initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute);
@@ -11043,10 +11057,10 @@
   DirectoryReader createReader();
 
   /** @domName DirectoryEntry.getDirectory */
-  void getDirectory(String path, [Map options, EntryCallback successCallback, ErrorCallback errorCallback]);
+  void getDirectory(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});
 
   /** @domName DirectoryEntry.getFile */
-  void getFile(String path, [Map options, EntryCallback successCallback, ErrorCallback errorCallback]);
+  void getFile(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});
 
   /** @domName DirectoryEntry.removeRecursively */
   void removeRecursively(VoidCallback successCallback, [ErrorCallback errorCallback]);
@@ -11061,7 +11075,7 @@
 
   DirectoryReader createReader() native "DirectoryEntry_createReader_Callback";
 
-  void getDirectory(/*DOMString*/ path, [/*Dictionary*/ options, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback]) {
+  void getDirectory(/*DOMString*/ path, {/*Dictionary*/ options, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback}) {
     if (?options) {
       _getDirectory_1(path, options, successCallback, errorCallback);
       return;
@@ -11073,7 +11087,7 @@
 
   void _getDirectory_2(path) native "DirectoryEntry_getDirectory_2_Callback";
 
-  void getFile(/*DOMString*/ path, [/*Dictionary*/ options, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback]) {
+  void getFile(/*DOMString*/ path, {/*Dictionary*/ options, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback}) {
     if (?options) {
       _getFile_1(path, options, successCallback, errorCallback);
       return;
@@ -11203,6 +11217,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.
 
+
 /// @domName Document
 abstract class Document extends HtmlElement {
 
@@ -11213,7 +11228,7 @@
   DocumentEvents get on;
 
   /** @domName HTMLDocument.activeElement */
-  abstract Element get activeElement;
+  Element get activeElement;
 
   /** @domName Document.body */
   Element body;
@@ -11225,64 +11240,64 @@
   String cookie;
 
   /** @domName Document.defaultView */
-  abstract Window get window;
+  Window get window;
 
   /** @domName Document.documentElement */
-  abstract Element get documentElement;
+  Element get documentElement;
 
   /** @domName Document.domain */
-  abstract String get domain;
+  String get domain;
 
   /** @domName Document.head */
-  abstract HeadElement get head;
+  HeadElement get head;
 
   /** @domName Document.implementation */
-  abstract DOMImplementation get implementation;
+  DOMImplementation get implementation;
 
   /** @domName Document.lastModified */
-  abstract String get lastModified;
+  String get lastModified;
 
   /** @domName Document.preferredStylesheetSet */
-  abstract String get preferredStylesheetSet;
+  String get preferredStylesheetSet;
 
   /** @domName Document.readyState */
-  abstract String get readyState;
+  String get readyState;
 
   /** @domName Document.referrer */
-  abstract String get referrer;
+  String get referrer;
 
   /** @domName Document.selectedStylesheetSet */
   String selectedStylesheetSet;
 
   /** @domName Document.styleSheets */
-  abstract List<StyleSheet> get styleSheets;
+  List<StyleSheet> get styleSheets;
 
   /** @domName Document.title */
   String title;
 
   /** @domName Document.webkitCurrentFullScreenElement */
-  abstract Element get webkitCurrentFullScreenElement;
+  Element get webkitCurrentFullScreenElement;
 
   /** @domName Document.webkitFullScreenKeyboardInputAllowed */
-  abstract bool get webkitFullScreenKeyboardInputAllowed;
+  bool get webkitFullScreenKeyboardInputAllowed;
 
   /** @domName Document.webkitFullscreenElement */
-  abstract Element get webkitFullscreenElement;
+  Element get webkitFullscreenElement;
 
   /** @domName Document.webkitFullscreenEnabled */
-  abstract bool get webkitFullscreenEnabled;
+  bool get webkitFullscreenEnabled;
 
   /** @domName Document.webkitHidden */
-  abstract bool get webkitHidden;
+  bool get webkitHidden;
 
   /** @domName Document.webkitIsFullScreen */
-  abstract bool get webkitIsFullScreen;
+  bool get webkitIsFullScreen;
 
   /** @domName Document.webkitPointerLockElement */
-  abstract Element get webkitPointerLockElement;
+  Element get webkitPointerLockElement;
 
   /** @domName Document.webkitVisibilityState */
-  abstract String get webkitVisibilityState;
+  String get webkitVisibilityState;
 
   /** @domName Document.caretRangeFromPoint */
   Range caretRangeFromPoint(int x, int y);
@@ -11471,6 +11486,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.
 
+
 /// @domName DocumentFragment
 abstract class DocumentFragment extends Element {
 
@@ -11531,7 +11547,7 @@
     if (newLength >= len) {
       return;
     } else if (newLength < 0) {
-      throw const ArgumentError("Invalid list length");
+      throw new ArgumentError("Invalid list length");
     }
 
     removeRange(newLength - 1, len - newLength);
@@ -11554,7 +11570,7 @@
   }
 
   void sort([Comparator<Element> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
+    throw new UnsupportedError('TODO(jacobr): should we impl?');
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -11576,7 +11592,7 @@
   }
 
   Element removeLast() {
-    final result = this.last();
+    final result = this.last;
     if (result != null) {
       result.remove();
     }
@@ -11587,7 +11603,7 @@
   Collection<Element> filter(bool f(Element element)) => _filtered.filter(f);
   bool every(bool f(Element element)) => _filtered.every(f);
   bool some(bool f(Element element)) => _filtered.some(f);
-  bool isEmpty() => _filtered.isEmpty();
+  bool get isEmpty => _filtered.isEmpty;
   int get length => _filtered.length;
   Element operator [](int index) => _filtered[index];
   Iterator<Element> iterator() => _filtered.iterator();
@@ -11597,11 +11613,11 @@
     _filtered.indexOf(element, start);
 
   int lastIndexOf(Element element, [int start = null]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _filtered.lastIndexOf(element, start);
   }
 
-  Element last() => _filtered.last();
+  Element get last => _filtered.last;
 }
 
 Future<CSSStyleDeclaration> _emptyStyleFuture() {
@@ -11623,7 +11639,7 @@
   _FrozenCSSClassSet() : super(null);
 
   void _write(Set s) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         'frozen class set cannot be modified');
   }
   Set<String> _read() => new Set<String>();
@@ -11737,7 +11753,7 @@
     }
     return null;
   }
-  Element get $m_lastElementChild() => elements.last();
+  Element get $m_lastElementChild() => elements.last;
   Element get nextElementSibling => null;
   Element get previousElementSibling => null;
   Element get offsetParent => null;
@@ -11766,97 +11782,97 @@
   // Setters throw errors rather than being no-ops because we aren't going to
   // retain the values that were set, and erroring out seems clearer.
   void set attributes(Map<String, String> value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Attributes can't be set for document fragments.");
   }
 
   void set classes(Collection<String> value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Classes can't be set for document fragments.");
   }
 
   void set dataAttributes(Map<String, String> value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Data attributes can't be set for document fragments.");
   }
 
   void set contentEditable(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Content editable can't be set for document fragments.");
   }
 
   String get dir {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support text direction.");
   }
 
   void set dir(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support text direction.");
   }
 
   void set draggable(bool value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Draggable can't be set for document fragments.");
   }
 
   void set hidden(bool value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Hidden can't be set for document fragments.");
   }
 
   void set id(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "ID can't be set for document fragments.");
   }
 
   String get lang {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support language.");
   }
 
   void set lang(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support language.");
   }
 
   void set scrollLeft(int value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support scrolling.");
   }
 
   void set scrollTop(int value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support scrolling.");
   }
 
   void set spellcheck(bool value) {
-     throw new UnsupportedOperationException(
+     throw new UnsupportedError(
       "Spellcheck can't be set for document fragments.");
   }
 
   void set translate(bool value) {
-     throw new UnsupportedOperationException(
+     throw new UnsupportedError(
       "Spellcheck can't be set for document fragments.");
   }
 
   void set tabIndex(int value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Tab index can't be set for document fragments.");
   }
 
   void set title(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Title can't be set for document fragments.");
   }
 
   void set webkitdropzone(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "WebKit drop zone can't be set for document fragments.");
   }
 
   void set webkitRegionOverflow(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "WebKit region overflow can't be set for document fragments.");
   }
 
@@ -12147,22 +12163,22 @@
 abstract class DocumentType implements Node {
 
   /** @domName DocumentType.entities */
-  abstract NamedNodeMap get entities;
+  NamedNodeMap get entities;
 
   /** @domName DocumentType.internalSubset */
-  abstract String get internalSubset;
+  String get internalSubset;
 
   /** @domName DocumentType.name */
-  abstract String get name;
+  String get name;
 
   /** @domName DocumentType.notations */
-  abstract NamedNodeMap get notations;
+  NamedNodeMap get notations;
 
   /** @domName DocumentType.publicId */
-  abstract String get publicId;
+  String get publicId;
 
   /** @domName DocumentType.systemId */
-  abstract String get systemId;
+  String get systemId;
 
   /** @domName DocumentType.remove */
   void remove();
@@ -12200,22 +12216,22 @@
 abstract class DynamicsCompressorNode implements AudioNode {
 
   /** @domName DynamicsCompressorNode.attack */
-  abstract AudioParam get attack;
+  AudioParam get attack;
 
   /** @domName DynamicsCompressorNode.knee */
-  abstract AudioParam get knee;
+  AudioParam get knee;
 
   /** @domName DynamicsCompressorNode.ratio */
-  abstract AudioParam get ratio;
+  AudioParam get ratio;
 
   /** @domName DynamicsCompressorNode.reduction */
-  abstract AudioParam get reduction;
+  AudioParam get reduction;
 
   /** @domName DynamicsCompressorNode.release */
-  abstract AudioParam get release;
+  AudioParam get release;
 
   /** @domName DynamicsCompressorNode.threshold */
-  abstract AudioParam get threshold;
+  AudioParam get threshold;
 }
 // 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
@@ -12266,6 +12282,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /**
  * All your attribute manipulation needs in one place.
  * Extends the regular Map interface by automatically coercing non-string
@@ -12381,7 +12398,7 @@
   ElementEvents get on;
 
   /** @domName HTMLElement.children */
-  abstract HTMLCollection get $dom_children;
+  HTMLCollection get $dom_children;
 
   /** @domName HTMLElement.contentEditable */
   String contentEditable;
@@ -12402,13 +12419,13 @@
   String innerHTML;
 
   /** @domName HTMLElement.isContentEditable */
-  abstract bool get isContentEditable;
+  bool get isContentEditable;
 
   /** @domName HTMLElement.lang */
   String lang;
 
   /** @domName HTMLElement.outerHTML */
-  abstract String get outerHTML;
+  String get outerHTML;
 
   /** @domName HTMLElement.spellcheck */
   bool spellcheck;
@@ -12440,55 +12457,55 @@
   static const int ALLOW_KEYBOARD_INPUT = 1;
 
   /** @domName Element.childElementCount */
-  abstract int get $dom_childElementCount;
+  int get $dom_childElementCount;
 
   /** @domName Element.className */
   String $dom_className;
 
   /** @domName Element.clientHeight */
-  abstract int get clientHeight;
+  int get clientHeight;
 
   /** @domName Element.clientLeft */
-  abstract int get clientLeft;
+  int get clientLeft;
 
   /** @domName Element.clientTop */
-  abstract int get clientTop;
+  int get clientTop;
 
   /** @domName Element.clientWidth */
-  abstract int get clientWidth;
+  int get clientWidth;
 
   /** @domName Element.dataset */
-  abstract Map<String, String> get dataset;
+  Map<String, String> get dataset;
 
   /** @domName Element.firstElementChild */
-  abstract Element get $dom_firstElementChild;
+  Element get $dom_firstElementChild;
 
   /** @domName Element.lastElementChild */
-  abstract Element get $dom_lastElementChild;
+  Element get $dom_lastElementChild;
 
   /** @domName Element.nextElementSibling */
-  abstract Element get nextElementSibling;
+  Element get nextElementSibling;
 
   /** @domName Element.offsetHeight */
-  abstract int get offsetHeight;
+  int get offsetHeight;
 
   /** @domName Element.offsetLeft */
-  abstract int get offsetLeft;
+  int get offsetLeft;
 
   /** @domName Element.offsetParent */
-  abstract Element get offsetParent;
+  Element get offsetParent;
 
   /** @domName Element.offsetTop */
-  abstract int get offsetTop;
+  int get offsetTop;
 
   /** @domName Element.offsetWidth */
-  abstract int get offsetWidth;
+  int get offsetWidth;
 
   /** @domName Element.previousElementSibling */
-  abstract Element get previousElementSibling;
+  Element get previousElementSibling;
 
   /** @domName Element.scrollHeight */
-  abstract int get scrollHeight;
+  int get scrollHeight;
 
   /** @domName Element.scrollLeft */
   int scrollLeft;
@@ -12497,13 +12514,13 @@
   int scrollTop;
 
   /** @domName Element.scrollWidth */
-  abstract int get scrollWidth;
+  int get scrollWidth;
 
   /** @domName Element.style */
-  abstract CSSStyleDeclaration get style;
+  CSSStyleDeclaration get style;
 
   /** @domName Element.tagName */
-  abstract String get tagName;
+  String get tagName;
 
   /** @domName Element.blur */
   void blur();
@@ -12732,7 +12749,7 @@
     return out;
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     return _element.$dom_firstElementChild == null;
   }
 
@@ -12750,7 +12767,7 @@
 
    void set length(int newLength) {
      // TODO(jacobr): remove children when length is reduced.
-     throw const UnsupportedOperationException('');
+     throw new UnsupportedError('');
    }
 
   Element add(_ElementImpl value) {
@@ -12769,7 +12786,7 @@
   }
 
   void sort([Comparator<Element> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
+    throw new UnsupportedError('TODO(jacobr): should we impl?');
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -12793,7 +12810,7 @@
   }
 
   int lastIndexOf(Element element, [int start = null]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
@@ -12803,14 +12820,14 @@
   }
 
   Element removeLast() {
-    final result = this.last();
+    final result = this.last;
     if (result != null) {
       _element.$dom_removeChild(result);
     }
     return result;
   }
 
-  Element last() {
+  Element get last {
     return _element.$dom_lastElementChild;
   }
 }
@@ -12875,14 +12892,14 @@
     return false;
   }
 
-  bool isEmpty() => _nodeList.isEmpty();
+  bool get isEmpty => _nodeList.isEmpty;
 
   int get length => _nodeList.length;
 
   Element operator [](int index) => _nodeList[index];
 
   void operator []=(int index, Element value) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void set length(int newLength) {
@@ -12890,33 +12907,33 @@
   }
 
   void add(Element value) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void addLast(Element value) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   Iterator<Element> iterator() => new _FrozenElementListIterator(this);
 
   void addAll(Collection<Element> collection) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void sort([Comparator<Element> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void insertRange(int start, int rangeLength, [initialValue = null]) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   List<Element> getRange(int start, int rangeLength) =>
@@ -12929,14 +12946,14 @@
     _nodeList.lastIndexOf(element, start);
 
   void clear() {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   Element removeLast() {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
-  Element last() => _nodeList.last();
+  Element get last => _nodeList.last;
 }
 
 class _FrozenElementListIterator implements Iterator<Element> {
@@ -12947,11 +12964,11 @@
 
   /**
    * Gets the next element in the iteration. Throws a
-   * [NoMoreElementsException] if no element is left.
+   * [StateError("No more elements")] if no element is left.
    */
   Element next() {
-    if (!hasNext()) {
-      throw const NoMoreElementsException();
+    if (!hasNext) {
+      throw new StateError("No more elements");
     }
 
     return _list[_index++];
@@ -12960,7 +12977,7 @@
   /**
    * Returns whether the [Iterator] has elements left.
    */
-  bool hasNext() => _index < _list.length;
+  bool get hasNext => _index < _list.length;
 }
 
 class _ElementAttributeMap implements AttributeMap {
@@ -13019,7 +13036,7 @@
     }
   }
 
-  Collection<String> getKeys() {
+  Collection<String> get keys {
     // TODO(jacobr): generate a lazy collection instead.
     final attributes = _element.$dom_attributes;
     final keys = new List<String>(attributes.length);
@@ -13029,7 +13046,7 @@
     return keys;
   }
 
-  Collection<String> getValues() {
+  Collection<String> get values {
     // TODO(jacobr): generate a lazy collection instead.
     final attributes = _element.$dom_attributes;
     final values = new List<String>(attributes.length);
@@ -13049,7 +13066,7 @@
   /**
    * Returns true if there is no {key, value} pair in the map.
    */
-  bool isEmpty() {
+  bool get isEmpty {
     return length == 0;
   }
 }
@@ -13067,7 +13084,7 @@
   // interface Map
 
   // TODO: Use lazy iterator when it is available on Map.
-  bool containsValue(String value) => getValues().some((v) => v == value);
+  bool containsValue(String value) => values.some((v) => v == value);
 
   bool containsKey(String key) => $dom_attributes.containsKey(_attr(key));
 
@@ -13084,7 +13101,7 @@
 
   void clear() {
     // Needs to operate on a snapshot since we are mutating the collection.
-    for (String key in getKeys()) {
+    for (String key in keys) {
       remove(key);
     }
   }
@@ -13097,7 +13114,7 @@
     });
   }
 
-  Collection<String> getKeys() {
+  Collection<String> get keys {
     final keys = new List<String>();
     $dom_attributes.forEach((String key, String value) {
       if (_matches(key)) {
@@ -13107,7 +13124,7 @@
     return keys;
   }
 
-  Collection<String> getValues() {
+  Collection<String> get values {
     final values = new List<String>();
     $dom_attributes.forEach((String key, String value) {
       if (_matches(key)) {
@@ -13117,10 +13134,10 @@
     return values;
   }
 
-  int get length => getKeys().length;
+  int get length => keys.length;
 
   // TODO: Use lazy iterator when it is available on Map.
-  bool isEmpty() => length == 0;
+  bool get isEmpty => length == 0;
 
   // Helpers.
   String _attr(String key) => 'data-$key';
@@ -13153,7 +13170,7 @@
 
   bool some(bool f(String element)) => _read().some(f);
 
-  bool isEmpty() => _read().isEmpty();
+  bool get isEmpty => _read().isEmpty;
 
   bool get frozen => false;
 
@@ -13237,7 +13254,7 @@
     Set<String> s = new Set<String>();
     for (String name in _classname().split(' ')) {
       String trimmed = name.trim();
-      if (!trimmed.isEmpty()) {
+      if (!trimmed.isEmpty) {
         s.add(trimmed);
       }
     }
@@ -13276,7 +13293,7 @@
   const _SimpleClientRect(this.left, this.top, this.width, this.height);
 
   bool operator ==(ClientRect other) {
-    return other !== null && left == other.left && top == other.top
+    return other != null && left == other.left && top == other.top
         && width == other.width && height == other.height;
   }
 
@@ -13339,7 +13356,7 @@
   void set attributes(Map<String, String> value) {
     Map<String, String> attributes = this.attributes;
     attributes.clear();
-    for (String key in value.getKeys()) {
+    for (String key in value.keys) {
       attributes[key] = value[key];
     }
   }
@@ -13371,7 +13388,7 @@
   void set dataAttributes(Map<String, String> value) {
     final dataAttributes = this.dataAttributes;
     dataAttributes.clear();
-    for (String key in value.getKeys()) {
+    for (String key in value.keys) {
       dataAttributes[key] = value[key];
     }
   }
@@ -13549,7 +13566,7 @@
     String parentTag = 'div';
     String tag;
     final match = _START_TAG_REGEXP.firstMatch(html);
-    if (match !== null) {
+    if (match != null) {
       tag = match.group(1).toLowerCase();
       if (_CUSTOM_PARENT_TAG_MAP.containsKey(tag)) {
         parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
@@ -13780,19 +13797,19 @@
 abstract class ElementTraversal {
 
   /** @domName ElementTraversal.childElementCount */
-  abstract int get childElementCount;
+  int get childElementCount;
 
   /** @domName ElementTraversal.firstElementChild */
-  abstract Element get firstElementChild;
+  Element get firstElementChild;
 
   /** @domName ElementTraversal.lastElementChild */
-  abstract Element get lastElementChild;
+  Element get lastElementChild;
 
   /** @domName ElementTraversal.nextElementSibling */
-  abstract Element get nextElementSibling;
+  Element get nextElementSibling;
 
   /** @domName ElementTraversal.previousElementSibling */
-  abstract Element get previousElementSibling;
+  Element get previousElementSibling;
 }
 // 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
@@ -13880,6 +13897,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void EntriesCallback(List<Entry> entries);
 // 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
@@ -13891,19 +13909,19 @@
 abstract class Entry {
 
   /** @domName Entry.filesystem */
-  abstract DOMFileSystem get filesystem;
+  DOMFileSystem get filesystem;
 
   /** @domName Entry.fullPath */
-  abstract String get fullPath;
+  String get fullPath;
 
   /** @domName Entry.isDirectory */
-  abstract bool get isDirectory;
+  bool get isDirectory;
 
   /** @domName Entry.isFile */
-  abstract bool get isFile;
+  bool get isFile;
 
   /** @domName Entry.name */
-  abstract String get name;
+  String get name;
 
   /** @domName Entry.copyTo */
   void copyTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]);
@@ -13936,7 +13954,7 @@
   Entry operator[](int index) native "EntryArray_item_Callback";
 
   void operator[]=(int index, Entry value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Entry> mixins.
   // Entry is the element type.
@@ -13953,15 +13971,15 @@
   // From Collection<Entry>:
 
   void add(Entry value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Entry value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Entry> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Entry element) => _Collections.contains(this, element);
@@ -13977,38 +13995,38 @@
 
   bool some(bool f(Entry element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Entry>:
 
   void sort([Comparator<Entry> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Entry element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Entry element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Entry last() => this[length - 1];
+  Entry get last => this[length - 1];
 
   Entry removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Entry> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Entry initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Entry> getRange(int start, int rangeLength) =>
@@ -14032,7 +14050,7 @@
   EntrySync operator[](int index) native "EntryArraySync_item_Callback";
 
   void operator[]=(int index, EntrySync value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<EntrySync> mixins.
   // EntrySync is the element type.
@@ -14049,15 +14067,15 @@
   // From Collection<EntrySync>:
 
   void add(EntrySync value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(EntrySync value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<EntrySync> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(EntrySync element) => _Collections.contains(this, element);
@@ -14073,38 +14091,38 @@
 
   bool some(bool f(EntrySync element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<EntrySync>:
 
   void sort([Comparator<EntrySync> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(EntrySync element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(EntrySync element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  EntrySync last() => this[length - 1];
+  EntrySync get last => this[length - 1];
 
   EntrySync removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<EntrySync> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [EntrySync initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<EntrySync> getRange(int start, int rangeLength) =>
@@ -14121,6 +14139,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void EntryCallback(Entry entry);
 // 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
@@ -14183,19 +14202,19 @@
 abstract class EntrySync {
 
   /** @domName EntrySync.filesystem */
-  abstract DOMFileSystemSync get filesystem;
+  DOMFileSystemSync get filesystem;
 
   /** @domName EntrySync.fullPath */
-  abstract String get fullPath;
+  String get fullPath;
 
   /** @domName EntrySync.isDirectory */
-  abstract bool get isDirectory;
+  bool get isDirectory;
 
   /** @domName EntrySync.isFile */
-  abstract bool get isFile;
+  bool get isFile;
 
   /** @domName EntrySync.name */
-  abstract String get name;
+  String get name;
 
   /** @domName EntrySync.copyTo */
   EntrySync copyTo(DirectoryEntrySync parent, String name);
@@ -14252,6 +14271,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void ErrorCallback(FileError error);
 // 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
@@ -14263,13 +14283,13 @@
 abstract class ErrorEvent implements Event {
 
   /** @domName ErrorEvent.filename */
-  abstract String get filename;
+  String get filename;
 
   /** @domName ErrorEvent.lineno */
-  abstract int get lineno;
+  int get lineno;
 
   /** @domName ErrorEvent.message */
-  abstract String get message;
+  String get message;
 }
 // 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
@@ -14292,6 +14312,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName Event
 abstract class Event {
 
@@ -14345,40 +14366,40 @@
   static const int SELECT = 16384;
 
   /** @domName Event.bubbles */
-  abstract bool get bubbles;
+  bool get bubbles;
 
   /** @domName Event.cancelBubble */
   bool cancelBubble;
 
   /** @domName Event.cancelable */
-  abstract bool get cancelable;
+  bool get cancelable;
 
   /** @domName Event.clipboardData */
-  abstract Clipboard get clipboardData;
+  Clipboard get clipboardData;
 
   /** @domName Event.currentTarget */
-  abstract EventTarget get currentTarget;
+  EventTarget get currentTarget;
 
   /** @domName Event.defaultPrevented */
-  abstract bool get defaultPrevented;
+  bool get defaultPrevented;
 
   /** @domName Event.eventPhase */
-  abstract int get eventPhase;
+  int get eventPhase;
 
   /** @domName Event.returnValue */
   bool returnValue;
 
   /** @domName Event.srcElement */
-  abstract EventTarget get srcElement;
+  EventTarget get srcElement;
 
   /** @domName Event.target */
-  abstract EventTarget get target;
+  EventTarget get target;
 
   /** @domName Event.timeStamp */
-  abstract int get timeStamp;
+  int get timeStamp;
 
   /** @domName Event.type */
-  abstract String get type;
+  String get type;
 
   /** @domName Event.initEvent */
   void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg);
@@ -14406,13 +14427,13 @@
   static const int UNSPECIFIED_EVENT_TYPE_ERR = 0;
 
   /** @domName EventException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName EventException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName EventException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName EventException.toString */
   String toString();
@@ -14502,13 +14523,13 @@
   static const int OPEN = 1;
 
   /** @domName EventSource.URL */
-  abstract String get URL;
+  String get URL;
 
   /** @domName EventSource.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName EventSource.url */
-  abstract String get url;
+  String get url;
 
   /** @domName EventSource.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -14573,6 +14594,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 abstract class EventListenerList {
   EventListenerList add(EventListener handler, [bool useCapture]);
 
@@ -14609,7 +14631,7 @@
   /* Raw event target. */
   // TODO(jacobr): it would be nice if we could specify this as
   // _EventTargetImpl or EventTarget
-  final Dynamic _ptr;
+  final _ptr;
 
   _EventsImpl(this._ptr);
 
@@ -14621,7 +14643,7 @@
 class _EventListenerListImpl implements EventListenerList {
 
   // TODO(jacobr): make this _EventTargetImpl
-  final Dynamic _ptr;
+  final _ptr;
   final String _type;
 
   _EventListenerListImpl(this._ptr, this._type);
@@ -14680,25 +14702,25 @@
   bool disabled;
 
   /** @domName HTMLFieldSetElement.elements */
-  abstract HTMLCollection get elements;
+  HTMLCollection get elements;
 
   /** @domName HTMLFieldSetElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLFieldSetElement.name */
   String name;
 
   /** @domName HTMLFieldSetElement.type */
-  abstract String get type;
+  String get type;
 
   /** @domName HTMLFieldSetElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLFieldSetElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLFieldSetElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLFieldSetElement.checkValidity */
   bool checkValidity();
@@ -14749,13 +14771,13 @@
 abstract class File implements Blob {
 
   /** @domName File.lastModifiedDate */
-  abstract Date get lastModifiedDate;
+  Date get lastModifiedDate;
 
   /** @domName File.name */
-  abstract String get name;
+  String get name;
 
   /** @domName File.webkitRelativePath */
-  abstract String get webkitRelativePath;
+  String get webkitRelativePath;
 }
 // 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
@@ -14763,6 +14785,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void FileCallback(File file);
 // 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
@@ -14854,7 +14877,7 @@
   static const int TYPE_MISMATCH_ERR = 11;
 
   /** @domName FileError.code */
-  abstract int get code;
+  int get code;
 }
 // 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
@@ -14901,13 +14924,13 @@
   static const int TYPE_MISMATCH_ERR = 11;
 
   /** @domName FileException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName FileException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName FileException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName FileException.toString */
   String toString();
@@ -14957,7 +14980,7 @@
   File operator[](int index) native "FileList_item_Callback";
 
   void operator[]=(int index, File value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<File> mixins.
   // File is the element type.
@@ -14974,15 +14997,15 @@
   // From Collection<File>:
 
   void add(File value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(File value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<File> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(File element) => _Collections.contains(this, element);
@@ -14998,38 +15021,38 @@
 
   bool some(bool f(File element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<File>:
 
   void sort([Comparator<File> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(File element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(File element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  File last() => this[length - 1];
+  File get last => this[length - 1];
 
   File removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<File> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [File initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<File> getRange(int start, int rangeLength) =>
@@ -15063,13 +15086,13 @@
   static const int LOADING = 1;
 
   /** @domName FileReader.error */
-  abstract FileError get error;
+  FileError get error;
 
   /** @domName FileReader.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName FileReader.result */
-  abstract Object get result;
+  Object get result;
 
   /** @domName FileReader.abort */
   void abort();
@@ -15225,6 +15248,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void FileSystemCallback(DOMFileSystem fileSystem);
 // 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
@@ -15247,16 +15271,16 @@
   static const int WRITING = 1;
 
   /** @domName FileWriter.error */
-  abstract FileError get error;
+  FileError get error;
 
   /** @domName FileWriter.length */
-  abstract int get length;
+  int get length;
 
   /** @domName FileWriter.position */
-  abstract int get position;
+  int get position;
 
   /** @domName FileWriter.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName FileWriter.abort */
   void abort();
@@ -15300,6 +15324,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void FileWriterCallback(FileWriter fileWriter);
 // 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
@@ -15361,10 +15386,10 @@
 abstract class FileWriterSync {
 
   /** @domName FileWriterSync.length */
-  abstract int get length;
+  int get length;
 
   /** @domName FileWriterSync.position */
-  abstract int get position;
+  int get position;
 
   /** @domName FileWriterSync.seek */
   void seek(int position);
@@ -15415,7 +15440,7 @@
   static const int BYTES_PER_ELEMENT = 4;
 
   /** @domName Float32Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Float32Array.setElements */
   void setElements(Object array, [int offset]);
@@ -15451,15 +15476,15 @@
   // From Collection<num>:
 
   void add(num value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(num value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<num> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(num element) => _Collections.contains(this, element);
@@ -15475,38 +15500,38 @@
 
   bool some(bool f(num element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<num>:
 
   void sort([Comparator<num> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(num element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(num element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  num last() => this[length - 1];
+  num get last => this[length - 1];
 
   num removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [num initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<num> getRange(int start, int rangeLength) =>
@@ -15549,7 +15574,7 @@
   static const int BYTES_PER_ELEMENT = 8;
 
   /** @domName Float64Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Float64Array.setElements */
   void setElements(Object array, [int offset]);
@@ -15585,15 +15610,15 @@
   // From Collection<num>:
 
   void add(num value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(num value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<num> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(num element) => _Collections.contains(this, element);
@@ -15609,38 +15634,38 @@
 
   bool some(bool f(num element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<num>:
 
   void sort([Comparator<num> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(num element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(num element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  num last() => this[length - 1];
+  num get last => this[length - 1];
 
   num removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [num initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<num> getRange(int start, int rangeLength) =>
@@ -15758,7 +15783,7 @@
   String enctype;
 
   /** @domName HTMLFormElement.length */
-  abstract int get length;
+  int get length;
 
   /** @domName HTMLFormElement.method */
   String method;
@@ -15843,17 +15868,14 @@
 /// @domName HTMLFrameElement
 abstract class FrameElement implements Element {
 
-  /** @domName HTMLFrameElement.contentDocument */
-  abstract Document get contentDocument;
-
   /** @domName HTMLFrameElement.contentWindow */
-  abstract Window get contentWindow;
+  Window get contentWindow;
 
   /** @domName HTMLFrameElement.frameBorder */
   String frameBorder;
 
   /** @domName HTMLFrameElement.height */
-  abstract int get height;
+  int get height;
 
   /** @domName HTMLFrameElement.location */
   String location;
@@ -15880,10 +15902,7 @@
   String src;
 
   /** @domName HTMLFrameElement.width */
-  abstract int get width;
-
-  /** @domName HTMLFrameElement.getSVGDocument */
-  SVGDocument getSVGDocument();
+  int get width;
 }
 // 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
@@ -16045,19 +16064,19 @@
 abstract class Gamepad {
 
   /** @domName Gamepad.axes */
-  abstract List<num> get axes;
+  List<num> get axes;
 
   /** @domName Gamepad.buttons */
-  abstract List<num> get buttons;
+  List<num> get buttons;
 
   /** @domName Gamepad.id */
-  abstract String get id;
+  String get id;
 
   /** @domName Gamepad.index */
-  abstract int get index;
+  int get index;
 
   /** @domName Gamepad.timestamp */
-  abstract int get timestamp;
+  int get timestamp;
 }
 // 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
@@ -16091,7 +16110,7 @@
   Gamepad operator[](int index) native "GamepadList_item_Callback";
 
   void operator[]=(int index, Gamepad value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Gamepad> mixins.
   // Gamepad is the element type.
@@ -16108,15 +16127,15 @@
   // From Collection<Gamepad>:
 
   void add(Gamepad value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Gamepad value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Gamepad> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Gamepad element) => _Collections.contains(this, element);
@@ -16132,38 +16151,38 @@
 
   bool some(bool f(Gamepad element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Gamepad>:
 
   void sort([Comparator<Gamepad> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Gamepad element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Gamepad element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Gamepad last() => this[length - 1];
+  Gamepad get last => this[length - 1];
 
   Gamepad removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Gamepad> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Gamepad initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Gamepad> getRange(int start, int rangeLength) =>
@@ -16217,10 +16236,10 @@
 abstract class Geoposition {
 
   /** @domName Geoposition.coords */
-  abstract Coordinates get coords;
+  Coordinates get coords;
 
   /** @domName Geoposition.timestamp */
-  abstract int get timestamp;
+  int get timestamp;
 }
 // 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
@@ -16293,7 +16312,7 @@
 abstract class HTMLAllCollection implements List<Node> {
 
   /** @domName HTMLAllCollection.length */
-  abstract int get length;
+  int get length;
 
   /** @domName HTMLAllCollection.item */
   Node item(int index);
@@ -16317,7 +16336,7 @@
   Node operator[](int index) native "HTMLAllCollection_item_Callback";
 
   void operator[]=(int index, Node value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Node> mixins.
   // Node is the element type.
@@ -16334,15 +16353,15 @@
   // From Collection<Node>:
 
   void add(Node value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Node value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Node> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Node element) => _Collections.contains(this, element);
@@ -16358,38 +16377,38 @@
 
   bool some(bool f(Node element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Node>:
 
   void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Node element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Node element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Node last() => this[length - 1];
+  Node get last => this[length - 1];
 
   Node removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Node> getRange(int start, int rangeLength) =>
@@ -16414,7 +16433,7 @@
 abstract class HTMLCollection implements List<Node> {
 
   /** @domName HTMLCollection.length */
-  abstract int get length;
+  int get length;
 
   /** @domName HTMLCollection.item */
   Node item(int index);
@@ -16435,7 +16454,7 @@
   Node operator[](int index) native "HTMLCollection_item_Callback";
 
   void operator[]=(int index, Node value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Node> mixins.
   // Node is the element type.
@@ -16452,15 +16471,15 @@
   // From Collection<Node>:
 
   void add(Node value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Node value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Node> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Node element) => _Collections.contains(this, element);
@@ -16476,38 +16495,38 @@
 
   bool some(bool f(Node element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Node>:
 
   void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Node element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Node element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Node last() => this[length - 1];
+  Node get last => this[length - 1];
 
   Node removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Node> getRange(int start, int rangeLength) =>
@@ -16569,10 +16588,10 @@
 abstract class HashChangeEvent implements Event {
 
   /** @domName HashChangeEvent.newURL */
-  abstract String get newURL;
+  String get newURL;
 
   /** @domName HashChangeEvent.oldURL */
-  abstract String get oldURL;
+  String get oldURL;
 
   /** @domName HashChangeEvent.initHashChangeEvent */
   void initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL);
@@ -16682,6 +16701,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName XMLHttpRequest
 abstract class HttpRequest implements EventTarget {
   factory HttpRequest.get(String url, onSuccess(HttpRequest request)) =>
@@ -16708,28 +16728,28 @@
   static const int UNSENT = 0;
 
   /** @domName XMLHttpRequest.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName XMLHttpRequest.response */
-  abstract Object get response;
+  Object get response;
 
   /** @domName XMLHttpRequest.responseText */
-  abstract String get responseText;
+  String get responseText;
 
   /** @domName XMLHttpRequest.responseType */
   String responseType;
 
   /** @domName XMLHttpRequest.responseXML */
-  abstract Document get responseXML;
+  Document get responseXML;
 
   /** @domName XMLHttpRequest.status */
-  abstract int get status;
+  int get status;
 
   /** @domName XMLHttpRequest.statusText */
-  abstract String get statusText;
+  String get statusText;
 
   /** @domName XMLHttpRequest.upload */
-  abstract HttpRequestUpload get upload;
+  HttpRequestUpload get upload;
 
   /** @domName XMLHttpRequest.withCredentials */
   bool withCredentials;
@@ -16795,13 +16815,13 @@
   static const int NETWORK_ERR = 101;
 
   /** @domName XMLHttpRequestException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName XMLHttpRequestException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName XMLHttpRequestException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName XMLHttpRequestException.toString */
   String toString();
@@ -16905,10 +16925,10 @@
 abstract class HttpRequestProgressEvent implements ProgressEvent {
 
   /** @domName XMLHttpRequestProgressEvent.position */
-  abstract int get position;
+  int get position;
 
   /** @domName XMLHttpRequestProgressEvent.totalSize */
-  abstract int get totalSize;
+  int get totalSize;
 }
 // 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
@@ -17031,16 +17051,16 @@
   static const int PREV_NO_DUPLICATE = 3;
 
   /** @domName IDBCursor.direction */
-  abstract String get direction;
+  String get direction;
 
   /** @domName IDBCursor.key */
-  abstract Dynamic get key;
+  dynamic get key;
 
   /** @domName IDBCursor.primaryKey */
-  abstract Dynamic get primaryKey;
+  dynamic get primaryKey;
 
   /** @domName IDBCursor.source */
-  abstract Dynamic get source;
+  dynamic get source;
 
   /** @domName IDBCursor.advance */
   void advance(int count);
@@ -17064,11 +17084,11 @@
 
   String get direction native "IDBCursor_direction_Getter";
 
-  Dynamic get key native "IDBCursor_key_Getter";
+  dynamic get key native "IDBCursor_key_Getter";
 
-  Dynamic get primaryKey native "IDBCursor_primaryKey_Getter";
+  dynamic get primaryKey native "IDBCursor_primaryKey_Getter";
 
-  Dynamic get source native "IDBCursor_source_Getter";
+  dynamic get source native "IDBCursor_source_Getter";
 
   void advance(int count) native "IDBCursor_advance_Callback";
 
@@ -17099,7 +17119,7 @@
 abstract class IDBCursorWithValue implements IDBCursor {
 
   /** @domName IDBCursorWithValue.value */
-  abstract Dynamic get value;
+  dynamic get value;
 }
 // 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
@@ -17109,7 +17129,7 @@
 
 class _IDBCursorWithValueImpl extends _IDBCursorImpl implements IDBCursorWithValue {
 
-  Dynamic get value native "IDBCursorWithValue_value_Getter";
+  dynamic get value native "IDBCursorWithValue_value_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17127,13 +17147,13 @@
   IDBDatabaseEvents get on;
 
   /** @domName IDBDatabase.name */
-  abstract String get name;
+  String get name;
 
   /** @domName IDBDatabase.objectStoreNames */
-  abstract List<String> get objectStoreNames;
+  List<String> get objectStoreNames;
 
   /** @domName IDBDatabase.version */
-  abstract Dynamic get version;
+  dynamic get version;
 
   /** @domName IDBDatabase.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -17204,13 +17224,13 @@
   static const int VER_ERR = 12;
 
   /** @domName IDBDatabaseException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName IDBDatabaseException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName IDBDatabaseException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName IDBDatabaseException.toString */
   String toString();
@@ -17247,7 +17267,7 @@
 
   List<String> get objectStoreNames native "IDBDatabase_objectStoreNames_Getter";
 
-  Dynamic get version native "IDBDatabase_version_Getter";
+  dynamic get version native "IDBDatabase_version_Getter";
 
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "IDBDatabase_addEventListener_Callback";
 
@@ -17273,13 +17293,13 @@
   IDBVersionChangeRequest setVersion(String version) native "IDBDatabase_setVersion_Callback";
 
   IDBTransaction transaction(storeName_OR_storeNames, /*DOMString*/ mode) {
-    if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames === null) && (mode is String || mode === null)) {
+    if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null) && (mode is String || mode == null)) {
       return _transaction_1(storeName_OR_storeNames, mode);
     }
-    if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames === null) && (mode is String || mode === null)) {
+    if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null) && (mode is String || mode == null)) {
       return _transaction_2(storeName_OR_storeNames, mode);
     }
-    if ((storeName_OR_storeNames is String || storeName_OR_storeNames === null) && (mode is String || mode === null)) {
+    if ((storeName_OR_storeNames is String || storeName_OR_storeNames == null) && (mode is String || mode == null)) {
       return _transaction_3(storeName_OR_storeNames, mode);
     }
     throw "Incorrect number or type of arguments";
@@ -17359,19 +17379,19 @@
 abstract class IDBIndex {
 
   /** @domName IDBIndex.keyPath */
-  abstract Dynamic get keyPath;
+  dynamic get keyPath;
 
   /** @domName IDBIndex.multiEntry */
-  abstract bool get multiEntry;
+  bool get multiEntry;
 
   /** @domName IDBIndex.name */
-  abstract String get name;
+  String get name;
 
   /** @domName IDBIndex.objectStore */
-  abstract IDBObjectStore get objectStore;
+  IDBObjectStore get objectStore;
 
   /** @domName IDBIndex.unique */
-  abstract bool get unique;
+  bool get unique;
 
   /** @domName IDBIndex.count */
   IDBRequest count([key_OR_range]);
@@ -17383,10 +17403,10 @@
   IDBRequest getKey(key);
 
   /** @domName IDBIndex.openCursor */
-  IDBRequest openCursor([key_OR_range, direction]);
+  IDBRequest openCursor([key_OR_range, String direction]);
 
   /** @domName IDBIndex.openKeyCursor */
-  IDBRequest openKeyCursor([key_OR_range, direction]);
+  IDBRequest openKeyCursor([key_OR_range, String direction]);
 }
 // 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
@@ -17396,7 +17416,7 @@
 
 class _IDBIndexImpl extends NativeFieldWrapperClass1 implements IDBIndex {
 
-  Dynamic get keyPath native "IDBIndex_keyPath_Getter";
+  dynamic get keyPath native "IDBIndex_keyPath_Getter";
 
   bool get multiEntry native "IDBIndex_multiEntry_Getter";
 
@@ -17410,10 +17430,10 @@
     if (!?key_OR_range) {
       return _count_1();
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null)) {
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null)) {
       return _count_2(key_OR_range);
     }
-    if ((key_OR_range is Dynamic || key_OR_range === null)) {
+    if ((key_OR_range is dynamic || key_OR_range == null)) {
       return _count_3(key_OR_range);
     }
     throw "Incorrect number or type of arguments";
@@ -17426,10 +17446,10 @@
   IDBRequest _count_3(key_OR_range) native "IDBIndex_count_3_Callback";
 
   IDBRequest get(key) {
-    if ((key is IDBKeyRange || key === null)) {
+    if ((key is IDBKeyRange || key == null)) {
       return _get_1(key);
     }
-    if ((key is Dynamic || key === null)) {
+    if ((key is dynamic || key == null)) {
       return _get_2(key);
     }
     throw "Incorrect number or type of arguments";
@@ -17440,10 +17460,10 @@
   IDBRequest _get_2(key) native "IDBIndex_get_2_Callback";
 
   IDBRequest getKey(key) {
-    if ((key is IDBKeyRange || key === null)) {
+    if ((key is IDBKeyRange || key == null)) {
       return _getKey_1(key);
     }
-    if ((key is Dynamic || key === null)) {
+    if ((key is dynamic || key == null)) {
       return _getKey_2(key);
     }
     throw "Incorrect number or type of arguments";
@@ -17453,34 +17473,22 @@
 
   IDBRequest _getKey_2(key) native "IDBIndex_getKey_2_Callback";
 
-  IDBRequest openCursor([key_OR_range, direction]) {
+  IDBRequest openCursor([key_OR_range, /*DOMString*/ direction]) {
     if (!?key_OR_range && !?direction) {
       return _openCursor_1();
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) && !?direction) {
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) && !?direction) {
       return _openCursor_2(key_OR_range);
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) && (direction is String || direction === null)) {
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) && (direction is String || direction == null)) {
       return _openCursor_3(key_OR_range, direction);
     }
-    if ((key_OR_range is Dynamic || key_OR_range === null) && !?direction) {
+    if ((key_OR_range is dynamic || key_OR_range == null) && !?direction) {
       return _openCursor_4(key_OR_range);
     }
-    if ((key_OR_range is Dynamic || key_OR_range === null) && (direction is String || direction === null)) {
+    if ((key_OR_range is dynamic || key_OR_range == null) && (direction is String || direction == null)) {
       return _openCursor_5(key_OR_range, direction);
     }
-    if (!?key_OR_range && !?direction) {
-      return _openCursor_6();
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) && !?direction) {
-      return _openCursor_7(key_OR_range);
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) && (direction is int || direction === null)) {
-      return _openCursor_8(key_OR_range, direction);
-    }
-    if ((key_OR_range is Dynamic || key_OR_range === null) && (direction is int || direction === null)) {
-      return _openCursor_9(key_OR_range, direction);
-    }
     throw "Incorrect number or type of arguments";
   }
 
@@ -17494,42 +17502,22 @@
 
   IDBRequest _openCursor_5(key_OR_range, direction) native "IDBIndex_openCursor_5_Callback";
 
-  IDBRequest _openCursor_6() native "IDBIndex_openCursor_6_Callback";
-
-  IDBRequest _openCursor_7(key_OR_range) native "IDBIndex_openCursor_7_Callback";
-
-  IDBRequest _openCursor_8(key_OR_range, direction) native "IDBIndex_openCursor_8_Callback";
-
-  IDBRequest _openCursor_9(key_OR_range, direction) native "IDBIndex_openCursor_9_Callback";
-
-  IDBRequest openKeyCursor([key_OR_range, direction]) {
+  IDBRequest openKeyCursor([key_OR_range, /*DOMString*/ direction]) {
     if (!?key_OR_range && !?direction) {
       return _openKeyCursor_1();
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) && !?direction) {
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) && !?direction) {
       return _openKeyCursor_2(key_OR_range);
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) && (direction is String || direction === null)) {
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) && (direction is String || direction == null)) {
       return _openKeyCursor_3(key_OR_range, direction);
     }
-    if ((key_OR_range is Dynamic || key_OR_range === null) && !?direction) {
+    if ((key_OR_range is dynamic || key_OR_range == null) && !?direction) {
       return _openKeyCursor_4(key_OR_range);
     }
-    if ((key_OR_range is Dynamic || key_OR_range === null) && (direction is String || direction === null)) {
+    if ((key_OR_range is dynamic || key_OR_range == null) && (direction is String || direction == null)) {
       return _openKeyCursor_5(key_OR_range, direction);
     }
-    if (!?key_OR_range && !?direction) {
-      return _openKeyCursor_6();
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) && !?direction) {
-      return _openKeyCursor_7(key_OR_range);
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) && (direction is int || direction === null)) {
-      return _openKeyCursor_8(key_OR_range, direction);
-    }
-    if ((key_OR_range is Dynamic || key_OR_range === null) && (direction is int || direction === null)) {
-      return _openKeyCursor_9(key_OR_range, direction);
-    }
     throw "Incorrect number or type of arguments";
   }
 
@@ -17543,14 +17531,6 @@
 
   IDBRequest _openKeyCursor_5(key_OR_range, direction) native "IDBIndex_openKeyCursor_5_Callback";
 
-  IDBRequest _openKeyCursor_6() native "IDBIndex_openKeyCursor_6_Callback";
-
-  IDBRequest _openKeyCursor_7(key_OR_range) native "IDBIndex_openKeyCursor_7_Callback";
-
-  IDBRequest _openKeyCursor_8(key_OR_range, direction) native "IDBIndex_openKeyCursor_8_Callback";
-
-  IDBRequest _openKeyCursor_9(key_OR_range, direction) native "IDBIndex_openKeyCursor_9_Callback";
-
 }
 // 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
@@ -17576,6 +17556,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName IDBKeyRange
 abstract class IDBKeyRange {
 
@@ -17607,16 +17588,16 @@
 
 
   /** @domName IDBKeyRange.lower */
-  abstract Dynamic get lower;
+  dynamic get lower;
 
   /** @domName IDBKeyRange.lowerOpen */
-  abstract bool get lowerOpen;
+  bool get lowerOpen;
 
   /** @domName IDBKeyRange.upper */
-  abstract Dynamic get upper;
+  dynamic get upper;
 
   /** @domName IDBKeyRange.upperOpen */
-  abstract bool get upperOpen;
+  bool get upperOpen;
 
   /** @domName IDBKeyRange.bound_ */
   static final bound_ = _IDBKeyRangeImpl.bound_;
@@ -17638,11 +17619,11 @@
 
 class _IDBKeyRangeImpl extends NativeFieldWrapperClass1 implements IDBKeyRange {
 
-  Dynamic get lower native "IDBKeyRange_lower_Getter";
+  dynamic get lower native "IDBKeyRange_lower_Getter";
 
   bool get lowerOpen native "IDBKeyRange_lowerOpen_Getter";
 
-  Dynamic get upper native "IDBKeyRange_upper_Getter";
+  dynamic get upper native "IDBKeyRange_upper_Getter";
 
   bool get upperOpen native "IDBKeyRange_upperOpen_Getter";
 
@@ -17697,19 +17678,19 @@
 abstract class IDBObjectStore {
 
   /** @domName IDBObjectStore.autoIncrement */
-  abstract bool get autoIncrement;
+  bool get autoIncrement;
 
   /** @domName IDBObjectStore.indexNames */
-  abstract List<String> get indexNames;
+  List<String> get indexNames;
 
   /** @domName IDBObjectStore.keyPath */
-  abstract Dynamic get keyPath;
+  dynamic get keyPath;
 
   /** @domName IDBObjectStore.name */
-  abstract String get name;
+  String get name;
 
   /** @domName IDBObjectStore.transaction */
-  abstract IDBTransaction get transaction;
+  IDBTransaction get transaction;
 
   /** @domName IDBObjectStore.add */
   IDBRequest add(Object value, [/*IDBKey*/ key]);
@@ -17736,7 +17717,7 @@
   IDBIndex index(String name);
 
   /** @domName IDBObjectStore.openCursor */
-  IDBRequest openCursor([key_OR_range, direction]);
+  IDBRequest openCursor([key_OR_range, String direction]);
 
   /** @domName IDBObjectStore.put */
   IDBRequest put(Object value, [/*IDBKey*/ key]);
@@ -17753,7 +17734,7 @@
 
   List<String> get indexNames native "IDBObjectStore_indexNames_Getter";
 
-  Dynamic get keyPath native "IDBObjectStore_keyPath_Getter";
+  dynamic get keyPath native "IDBObjectStore_keyPath_Getter";
 
   String get name native "IDBObjectStore_name_Getter";
 
@@ -17776,10 +17757,10 @@
     if (!?key_OR_range) {
       return _count_1();
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null)) {
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null)) {
       return _count_2(key_OR_range);
     }
-    if ((key_OR_range is Dynamic || key_OR_range === null)) {
+    if ((key_OR_range is dynamic || key_OR_range == null)) {
       return _count_3(key_OR_range);
     }
     throw "Incorrect number or type of arguments";
@@ -17792,16 +17773,16 @@
   IDBRequest _count_3(key_OR_range) native "IDBObjectStore_count_3_Callback";
 
   IDBIndex createIndex(/*DOMString*/ name, keyPath, [/*Dictionary*/ options]) {
-    if ((name is String || name === null) && (keyPath is List<String> || keyPath === null) && !?options) {
+    if ((name is String || name == null) && (keyPath is List<String> || keyPath == null) && !?options) {
       return _createIndex_1(name, keyPath);
     }
-    if ((name is String || name === null) && (keyPath is List<String> || keyPath === null) && (options is Map || options === null)) {
+    if ((name is String || name == null) && (keyPath is List<String> || keyPath == null) && (options is Map || options == null)) {
       return _createIndex_2(name, keyPath, options);
     }
-    if ((name is String || name === null) && (keyPath is String || keyPath === null) && !?options) {
+    if ((name is String || name == null) && (keyPath is String || keyPath == null) && !?options) {
       return _createIndex_3(name, keyPath);
     }
-    if ((name is String || name === null) && (keyPath is String || keyPath === null) && (options is Map || options === null)) {
+    if ((name is String || name == null) && (keyPath is String || keyPath == null) && (options is Map || options == null)) {
       return _createIndex_4(name, keyPath, options);
     }
     throw "Incorrect number or type of arguments";
@@ -17816,10 +17797,10 @@
   IDBIndex _createIndex_4(name, keyPath, options) native "IDBObjectStore_createIndex_4_Callback";
 
   IDBRequest delete(key_OR_keyRange) {
-    if ((key_OR_keyRange is IDBKeyRange || key_OR_keyRange === null)) {
+    if ((key_OR_keyRange is IDBKeyRange || key_OR_keyRange == null)) {
       return _delete_1(key_OR_keyRange);
     }
-    if ((key_OR_keyRange is Dynamic || key_OR_keyRange === null)) {
+    if ((key_OR_keyRange is dynamic || key_OR_keyRange == null)) {
       return _delete_2(key_OR_keyRange);
     }
     throw "Incorrect number or type of arguments";
@@ -17832,10 +17813,10 @@
   void deleteIndex(String name) native "IDBObjectStore_deleteIndex_Callback";
 
   IDBRequest getObject(key) {
-    if ((key is IDBKeyRange || key === null)) {
+    if ((key is IDBKeyRange || key == null)) {
       return _get_1(key);
     }
-    if ((key is Dynamic || key === null)) {
+    if ((key is dynamic || key == null)) {
       return _get_2(key);
     }
     throw "Incorrect number or type of arguments";
@@ -17847,34 +17828,22 @@
 
   IDBIndex index(String name) native "IDBObjectStore_index_Callback";
 
-  IDBRequest openCursor([key_OR_range, direction]) {
+  IDBRequest openCursor([key_OR_range, /*DOMString*/ direction]) {
     if (!?key_OR_range && !?direction) {
       return _openCursor_1();
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) && !?direction) {
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) && !?direction) {
       return _openCursor_2(key_OR_range);
     }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) && (direction is String || direction === null)) {
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) && (direction is String || direction == null)) {
       return _openCursor_3(key_OR_range, direction);
     }
-    if ((key_OR_range is Dynamic || key_OR_range === null) && !?direction) {
+    if ((key_OR_range is dynamic || key_OR_range == null) && !?direction) {
       return _openCursor_4(key_OR_range);
     }
-    if ((key_OR_range is Dynamic || key_OR_range === null) && (direction is String || direction === null)) {
+    if ((key_OR_range is dynamic || key_OR_range == null) && (direction is String || direction == null)) {
       return _openCursor_5(key_OR_range, direction);
     }
-    if (!?key_OR_range && !?direction) {
-      return _openCursor_6();
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) && !?direction) {
-      return _openCursor_7(key_OR_range);
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range === null) && (direction is int || direction === null)) {
-      return _openCursor_8(key_OR_range, direction);
-    }
-    if ((key_OR_range is Dynamic || key_OR_range === null) && (direction is int || direction === null)) {
-      return _openCursor_9(key_OR_range, direction);
-    }
     throw "Incorrect number or type of arguments";
   }
 
@@ -17888,14 +17857,6 @@
 
   IDBRequest _openCursor_5(key_OR_range, direction) native "IDBObjectStore_openCursor_5_Callback";
 
-  IDBRequest _openCursor_6() native "IDBObjectStore_openCursor_6_Callback";
-
-  IDBRequest _openCursor_7(key_OR_range) native "IDBObjectStore_openCursor_7_Callback";
-
-  IDBRequest _openCursor_8(key_OR_range, direction) native "IDBObjectStore_openCursor_8_Callback";
-
-  IDBRequest _openCursor_9(key_OR_range, direction) native "IDBObjectStore_openCursor_9_Callback";
-
   IDBRequest put(/*any*/ value, [/*IDBKey*/ key]) {
     if (?key) {
       return _put_1(value, key);
@@ -17970,25 +17931,25 @@
   IDBRequestEvents get on;
 
   /** @domName IDBRequest.error */
-  abstract DOMError get error;
+  DOMError get error;
 
   /** @domName IDBRequest.errorCode */
-  abstract int get errorCode;
+  int get errorCode;
 
   /** @domName IDBRequest.readyState */
-  abstract String get readyState;
+  String get readyState;
 
   /** @domName IDBRequest.result */
-  abstract Dynamic get result;
+  dynamic get result;
 
   /** @domName IDBRequest.source */
-  abstract Dynamic get source;
+  dynamic get source;
 
   /** @domName IDBRequest.transaction */
-  abstract IDBTransaction get transaction;
+  IDBTransaction get transaction;
 
   /** @domName IDBRequest.webkitErrorMessage */
-  abstract String get webkitErrorMessage;
+  String get webkitErrorMessage;
 
   /** @domName IDBRequest.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -18023,9 +17984,9 @@
 
   String get readyState native "IDBRequest_readyState_Getter";
 
-  Dynamic get result native "IDBRequest_result_Getter";
+  dynamic get result native "IDBRequest_result_Getter";
 
-  Dynamic get source native "IDBRequest_source_Getter";
+  dynamic get source native "IDBRequest_source_Getter";
 
   IDBTransaction get transaction native "IDBRequest_transaction_Getter";
 
@@ -18067,13 +18028,13 @@
   static const int VERSION_CHANGE = 2;
 
   /** @domName IDBTransaction.db */
-  abstract IDBDatabase get db;
+  IDBDatabase get db;
 
   /** @domName IDBTransaction.error */
-  abstract DOMError get error;
+  DOMError get error;
 
   /** @domName IDBTransaction.mode */
-  abstract String get mode;
+  String get mode;
 
   /** @domName IDBTransaction.abort */
   void abort();
@@ -18147,10 +18108,10 @@
 abstract class IDBUpgradeNeededEvent implements Event {
 
   /** @domName IDBVersionChangeEvent.newVersion */
-  abstract int get newVersion;
+  int get newVersion;
 
   /** @domName IDBVersionChangeEvent.oldVersion */
-  abstract int get oldVersion;
+  int get oldVersion;
 }
 // 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
@@ -18175,7 +18136,7 @@
 abstract class IDBVersionChangeEvent implements Event {
 
   /** @domName IDBVersionChangeEvent.version */
-  abstract String get version;
+  String get version;
 }
 // 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
@@ -18246,7 +18207,7 @@
   String align;
 
   /** @domName HTMLIFrameElement.contentWindow */
-  abstract Window get contentWindow;
+  Window get contentWindow;
 
   /** @domName HTMLIFrameElement.frameBorder */
   String frameBorder;
@@ -18280,9 +18241,6 @@
 
   /** @domName HTMLIFrameElement.width */
   String width;
-
-  /** @domName HTMLIFrameElement.getSVGDocument */
-  SVGDocument getSVGDocument();
 }
 // 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
@@ -18349,6 +18307,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void IceCallback(IceCandidate candidate, bool moreToFollow, PeerConnection00 source);
 // 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
@@ -18362,7 +18321,7 @@
   factory IceCandidate(String label, String candidateLine) => _IceCandidateFactoryProvider.createIceCandidate(label, candidateLine);
 
   /** @domName IceCandidate.label */
-  abstract String get label;
+  String get label;
 
   /** @domName IceCandidate.toSdp */
   String toSdp();
@@ -18390,13 +18349,13 @@
 abstract class ImageData {
 
   /** @domName ImageData.data */
-  abstract Uint8ClampedArray get data;
+  Uint8ClampedArray get data;
 
   /** @domName ImageData.height */
-  abstract int get height;
+  int get height;
 
   /** @domName ImageData.width */
-  abstract int get width;
+  int get width;
 }
 // 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
@@ -18445,7 +18404,7 @@
   String border;
 
   /** @domName HTMLImageElement.complete */
-  abstract bool get complete;
+  bool get complete;
 
   /** @domName HTMLImageElement.crossOrigin */
   String crossOrigin;
@@ -18469,10 +18428,10 @@
   String name;
 
   /** @domName HTMLImageElement.naturalHeight */
-  abstract int get naturalHeight;
+  int get naturalHeight;
 
   /** @domName HTMLImageElement.naturalWidth */
-  abstract int get naturalWidth;
+  int get naturalWidth;
 
   /** @domName HTMLImageElement.src */
   String src;
@@ -18487,10 +18446,10 @@
   int width;
 
   /** @domName HTMLImageElement.x */
-  abstract int get x;
+  int get x;
 
   /** @domName HTMLImageElement.y */
-  abstract int get y;
+  int get y;
 }
 // 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
@@ -18619,7 +18578,7 @@
   List<File> files;
 
   /** @domName HTMLInputElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLInputElement.formAction */
   String formAction;
@@ -18646,10 +18605,10 @@
   bool indeterminate;
 
   /** @domName HTMLInputElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLInputElement.list */
-  abstract Element get list;
+  Element get list;
 
   /** @domName HTMLInputElement.max */
   String max;
@@ -18703,10 +18662,10 @@
   String useMap;
 
   /** @domName HTMLInputElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLInputElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLInputElement.value */
   String value;
@@ -18718,7 +18677,7 @@
   num valueAsNumber;
 
   /** @domName HTMLInputElement.webkitEntries */
-  abstract List<Entry> get webkitEntries;
+  List<Entry> get webkitEntries;
 
   /** @domName HTMLInputElement.webkitGrammar */
   bool webkitGrammar;
@@ -18733,7 +18692,7 @@
   int width;
 
   /** @domName HTMLInputElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLInputElement.checkValidity */
   bool checkValidity();
@@ -19011,7 +18970,7 @@
   static const int BYTES_PER_ELEMENT = 2;
 
   /** @domName Int16Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Int16Array.setElements */
   void setElements(Object array, [int offset]);
@@ -19047,15 +19006,15 @@
   // From Collection<int>:
 
   void add(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<int> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(int element) => _Collections.contains(this, element);
@@ -19071,38 +19030,38 @@
 
   bool some(bool f(int element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<int>:
 
   void sort([Comparator<int> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(int element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(int element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  int last() => this[length - 1];
+  int get last => this[length - 1];
 
   int removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<int> getRange(int start, int rangeLength) =>
@@ -19145,7 +19104,7 @@
   static const int BYTES_PER_ELEMENT = 4;
 
   /** @domName Int32Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Int32Array.setElements */
   void setElements(Object array, [int offset]);
@@ -19181,15 +19140,15 @@
   // From Collection<int>:
 
   void add(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<int> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(int element) => _Collections.contains(this, element);
@@ -19205,38 +19164,38 @@
 
   bool some(bool f(int element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<int>:
 
   void sort([Comparator<int> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(int element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(int element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  int last() => this[length - 1];
+  int get last => this[length - 1];
 
   int removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<int> getRange(int start, int rangeLength) =>
@@ -19279,7 +19238,7 @@
   static const int BYTES_PER_ELEMENT = 1;
 
   /** @domName Int8Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Int8Array.setElements */
   void setElements(Object array, [int offset]);
@@ -19315,15 +19274,15 @@
   // From Collection<int>:
 
   void add(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<int> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(int element) => _Collections.contains(this, element);
@@ -19339,38 +19298,38 @@
 
   bool some(bool f(int element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<int>:
 
   void sort([Comparator<int> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(int element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(int element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  int last() => this[length - 1];
+  int get last => this[length - 1];
 
   int removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<int> getRange(int start, int rangeLength) =>
@@ -19407,7 +19366,7 @@
   JavaScriptAudioNodeEvents get on;
 
   /** @domName JavaScriptAudioNode.bufferSize */
-  abstract int get bufferSize;
+  int get bufferSize;
 }
 
 abstract class JavaScriptAudioNodeEvents implements Events {
@@ -19460,28 +19419,28 @@
   static const int WITH_SCOPE = 2;
 
   /** @domName JavaScriptCallFrame.caller */
-  abstract JavaScriptCallFrame get caller;
+  JavaScriptCallFrame get caller;
 
   /** @domName JavaScriptCallFrame.column */
-  abstract int get column;
+  int get column;
 
   /** @domName JavaScriptCallFrame.functionName */
-  abstract String get functionName;
+  String get functionName;
 
   /** @domName JavaScriptCallFrame.line */
-  abstract int get line;
+  int get line;
 
   /** @domName JavaScriptCallFrame.scopeChain */
-  abstract List get scopeChain;
+  List get scopeChain;
 
   /** @domName JavaScriptCallFrame.sourceID */
-  abstract int get sourceID;
+  int get sourceID;
 
   /** @domName JavaScriptCallFrame.thisObject */
-  abstract Object get thisObject;
+  Object get thisObject;
 
   /** @domName JavaScriptCallFrame.type */
-  abstract String get type;
+  String get type;
 
   /** @domName JavaScriptCallFrame.evaluate */
   void evaluate(String script);
@@ -19533,25 +19492,25 @@
 abstract class KeyboardEvent implements UIEvent {
 
   /** @domName KeyboardEvent.altGraphKey */
-  abstract bool get altGraphKey;
+  bool get altGraphKey;
 
   /** @domName KeyboardEvent.altKey */
-  abstract bool get altKey;
+  bool get altKey;
 
   /** @domName KeyboardEvent.ctrlKey */
-  abstract bool get ctrlKey;
+  bool get ctrlKey;
 
   /** @domName KeyboardEvent.keyIdentifier */
-  abstract String get keyIdentifier;
+  String get keyIdentifier;
 
   /** @domName KeyboardEvent.keyLocation */
-  abstract int get keyLocation;
+  int get keyLocation;
 
   /** @domName KeyboardEvent.metaKey */
-  abstract bool get metaKey;
+  bool get metaKey;
 
   /** @domName KeyboardEvent.shiftKey */
-  abstract bool get shiftKey;
+  bool get shiftKey;
 
   /** @domName KeyboardEvent.initKeyboardEvent */
   void initKeyboardEvent(String type, bool canBubble, bool cancelable, LocalWindow view, String keyIdentifier, int keyLocation, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey);
@@ -19602,28 +19561,28 @@
   bool disabled;
 
   /** @domName HTMLKeygenElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLKeygenElement.keytype */
   String keytype;
 
   /** @domName HTMLKeygenElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLKeygenElement.name */
   String name;
 
   /** @domName HTMLKeygenElement.type */
-  abstract String get type;
+  String get type;
 
   /** @domName HTMLKeygenElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLKeygenElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLKeygenElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLKeygenElement.checkValidity */
   bool checkValidity();
@@ -19722,10 +19681,10 @@
   factory LabelElement() => _Elements.createLabelElement();
 
   /** @domName HTMLLabelElement.control */
-  abstract Element get control;
+  Element get control;
 
   /** @domName HTMLLabelElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLLabelElement.htmlFor */
   String htmlFor;
@@ -19762,7 +19721,7 @@
   String align;
 
   /** @domName HTMLLegendElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 }
 // 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
@@ -19812,7 +19771,7 @@
   String rev;
 
   /** @domName HTMLLinkElement.sheet */
-  abstract StyleSheet get sheet;
+  StyleSheet get sheet;
 
   /** @domName HTMLLinkElement.sizes */
   DOMSettableTokenList sizes;
@@ -19884,10 +19843,10 @@
 abstract class LocalHistory implements History {
 
   /** @domName History.length */
-  abstract int get length;
+  int get length;
 
   /** @domName History.state */
-  abstract Dynamic get state;
+  dynamic get state;
 
   /** @domName History.back */
   void back();
@@ -19914,7 +19873,7 @@
 
   int get length native "History_length_Getter";
 
-  Dynamic get state native "History_state_Getter";
+  dynamic get state native "History_state_Getter";
 
   void back() native "History_back_Callback";
 
@@ -19937,7 +19896,7 @@
 abstract class LocalLocation implements Location {
 
   /** @domName Location.ancestorOrigins */
-  abstract List<String> get ancestorOrigins;
+  List<String> get ancestorOrigins;
 
   /** @domName Location.hash */
   String hash;
@@ -19952,7 +19911,7 @@
   String href;
 
   /** @domName Location.origin */
-  abstract String get origin;
+  String get origin;
 
   /** @domName Location.pathname */
   String pathname;
@@ -20066,6 +20025,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName Window
 abstract class LocalWindow implements EventTarget, Window {
 
@@ -20110,19 +20070,19 @@
   static const int TEMPORARY = 0;
 
   /** @domName Window.applicationCache */
-  abstract DOMApplicationCache get applicationCache;
+  DOMApplicationCache get applicationCache;
 
   /** @domName Window.clientInformation */
-  abstract Navigator get clientInformation;
+  Navigator get clientInformation;
 
   /** @domName Window.closed */
-  abstract bool get closed;
+  bool get closed;
 
   /** @domName Window.console */
-  abstract Console get console;
+  Console get console;
 
   /** @domName Window.crypto */
-  abstract Crypto get crypto;
+  Crypto get crypto;
 
   /** @domName Window.defaultStatus */
   String defaultStatus;
@@ -20131,130 +20091,130 @@
   String defaultstatus;
 
   /** @domName Window.devicePixelRatio */
-  abstract num get devicePixelRatio;
+  num get devicePixelRatio;
 
   /** @domName Window.document */
-  abstract Document get document;
+  Document get document;
 
   /** @domName Window.event */
-  abstract Event get event;
+  Event get event;
 
   /** @domName Window.history */
-  abstract LocalHistory get history;
+  LocalHistory get history;
 
   /** @domName DOMWindow.indexedDB */
-  abstract IDBFactory get indexedDB;
+  IDBFactory get indexedDB;
 
   /** @domName Window.innerHeight */
-  abstract int get innerHeight;
+  int get innerHeight;
 
   /** @domName Window.innerWidth */
-  abstract int get innerWidth;
+  int get innerWidth;
 
   /** @domName Window.localStorage */
-  abstract Storage get localStorage;
+  Storage get localStorage;
 
   /** @domName Window.location */
   LocalLocation location;
 
   /** @domName Window.locationbar */
-  abstract BarInfo get locationbar;
+  BarInfo get locationbar;
 
   /** @domName Window.menubar */
-  abstract BarInfo get menubar;
+  BarInfo get menubar;
 
   /** @domName Window.name */
   String name;
 
   /** @domName Window.navigator */
-  abstract Navigator get navigator;
+  Navigator get navigator;
 
   /** @domName Window.offscreenBuffering */
-  abstract bool get offscreenBuffering;
+  bool get offscreenBuffering;
 
   /** @domName Window.opener */
-  abstract Window get opener;
+  Window get opener;
 
   /** @domName Window.outerHeight */
-  abstract int get outerHeight;
+  int get outerHeight;
 
   /** @domName Window.outerWidth */
-  abstract int get outerWidth;
+  int get outerWidth;
 
   /** @domName DOMWindow.pagePopupController */
-  abstract PagePopupController get pagePopupController;
+  PagePopupController get pagePopupController;
 
   /** @domName Window.pageXOffset */
-  abstract int get pageXOffset;
+  int get pageXOffset;
 
   /** @domName Window.pageYOffset */
-  abstract int get pageYOffset;
+  int get pageYOffset;
 
   /** @domName Window.parent */
-  abstract Window get parent;
+  Window get parent;
 
   /** @domName Window.performance */
-  abstract Performance get performance;
+  Performance get performance;
 
   /** @domName Window.personalbar */
-  abstract BarInfo get personalbar;
+  BarInfo get personalbar;
 
   /** @domName Window.screen */
-  abstract Screen get screen;
+  Screen get screen;
 
   /** @domName Window.screenLeft */
-  abstract int get screenLeft;
+  int get screenLeft;
 
   /** @domName Window.screenTop */
-  abstract int get screenTop;
+  int get screenTop;
 
   /** @domName Window.screenX */
-  abstract int get screenX;
+  int get screenX;
 
   /** @domName Window.screenY */
-  abstract int get screenY;
+  int get screenY;
 
   /** @domName Window.scrollX */
-  abstract int get scrollX;
+  int get scrollX;
 
   /** @domName Window.scrollY */
-  abstract int get scrollY;
+  int get scrollY;
 
   /** @domName Window.scrollbars */
-  abstract BarInfo get scrollbars;
+  BarInfo get scrollbars;
 
   /** @domName Window.self */
-  abstract Window get self;
+  Window get self;
 
   /** @domName Window.sessionStorage */
-  abstract Storage get sessionStorage;
+  Storage get sessionStorage;
 
   /** @domName Window.status */
   String status;
 
   /** @domName Window.statusbar */
-  abstract BarInfo get statusbar;
+  BarInfo get statusbar;
 
   /** @domName Window.styleMedia */
-  abstract StyleMedia get styleMedia;
+  StyleMedia get styleMedia;
 
   /** @domName Window.toolbar */
-  abstract BarInfo get toolbar;
+  BarInfo get toolbar;
 
   /** @domName Window.top */
-  abstract Window get top;
+  Window get top;
 
   /** @domName DOMWindow.webkitIndexedDB */
-  abstract IDBFactory get webkitIndexedDB;
+  IDBFactory get webkitIndexedDB;
 
   /** @domName DOMWindow.webkitNotifications */
-  abstract NotificationCenter get webkitNotifications;
+  NotificationCenter get webkitNotifications;
 
   /** @domName DOMWindow.webkitStorageInfo */
-  abstract StorageInfo get webkitStorageInfo;
+  StorageInfo get webkitStorageInfo;
 
   /** @domName Window.window */
-  abstract Window get window;
+  Window get window;
 
   /** @domName Window.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -20271,6 +20231,9 @@
   /** @domName Window.btoa */
   String btoa(String string);
 
+  /** @domName Window.cancelAnimationFrame */
+  void cancelAnimationFrame(int id);
+
   /** @domName Window.captureEvents */
   void captureEvents();
 
@@ -20334,6 +20297,9 @@
   /** @domName Window.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
 
+  /** @domName Window.requestAnimationFrame */
+  int requestAnimationFrame(RequestAnimationFrameCallback callback);
+
   /** @domName Window.resizeBy */
   void resizeBy(num x, num y);
 
@@ -20362,7 +20328,7 @@
   void stop();
 
   /** @domName Window.webkitCancelAnimationFrame */
-  void cancelAnimationFrame(int id);
+  void webkitCancelAnimationFrame(int id);
 
   /** @domName Window.webkitConvertPointFromNodeToPage */
   Point webkitConvertPointFromNodeToPage(Node node, Point p);
@@ -20371,7 +20337,7 @@
   Point webkitConvertPointFromPageToNode(Node node, Point p);
 
   /** @domName Window.webkitRequestAnimationFrame */
-  int requestAnimationFrame(RequestAnimationFrameCallback callback);
+  int webkitRequestAnimationFrame(RequestAnimationFrameCallback callback);
 
   /** @domName DOMWindow.webkitRequestFileSystem */
   void webkitRequestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]);
@@ -20677,6 +20643,8 @@
 
   String btoa(String string) native "DOMWindow_btoa_Callback";
 
+  void cancelAnimationFrame(int id) native "DOMWindow_cancelAnimationFrame_Callback";
+
   void captureEvents() native "DOMWindow_captureEvents_Callback";
 
   void clearInterval(int handle) native "DOMWindow_clearInterval_Callback";
@@ -20719,6 +20687,8 @@
 
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "DOMWindow_removeEventListener_Callback";
 
+  int requestAnimationFrame(RequestAnimationFrameCallback callback) native "DOMWindow_requestAnimationFrame_Callback";
+
   void resizeBy(num x, num y) native "DOMWindow_resizeBy_Callback";
 
   void resizeTo(num width, num height) native "DOMWindow_resizeTo_Callback";
@@ -20737,13 +20707,13 @@
 
   void stop() native "DOMWindow_stop_Callback";
 
-  void cancelAnimationFrame(int id) native "DOMWindow_webkitCancelAnimationFrame_Callback";
+  void webkitCancelAnimationFrame(int id) native "DOMWindow_webkitCancelAnimationFrame_Callback";
 
   Point webkitConvertPointFromNodeToPage(Node node, Point p) native "DOMWindow_webkitConvertPointFromNodeToPage_Callback";
 
   Point webkitConvertPointFromPageToNode(Node node, Point p) native "DOMWindow_webkitConvertPointFromPageToNode_Callback";
 
-  int requestAnimationFrame(RequestAnimationFrameCallback callback) native "DOMWindow_webkitRequestAnimationFrame_Callback";
+  int webkitRequestAnimationFrame(RequestAnimationFrameCallback callback) native "DOMWindow_webkitRequestAnimationFrame_Callback";
 
   void webkitRequestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]) native "DOMWindow_webkitRequestFileSystem_Callback";
 
@@ -20912,7 +20882,7 @@
   factory MapElement() => _Elements.createMapElement();
 
   /** @domName HTMLMapElement.areas */
-  abstract HTMLCollection get areas;
+  HTMLCollection get areas;
 
   /** @domName HTMLMapElement.name */
   String name;
@@ -21049,7 +21019,7 @@
   factory MediaController() => _MediaControllerFactoryProvider.createMediaController();
 
   /** @domName MediaController.buffered */
-  abstract TimeRanges get buffered;
+  TimeRanges get buffered;
 
   /** @domName MediaController.currentTime */
   num currentTime;
@@ -21058,22 +21028,22 @@
   num defaultPlaybackRate;
 
   /** @domName MediaController.duration */
-  abstract num get duration;
+  num get duration;
 
   /** @domName MediaController.muted */
   bool muted;
 
   /** @domName MediaController.paused */
-  abstract bool get paused;
+  bool get paused;
 
   /** @domName MediaController.playbackRate */
   num playbackRate;
 
   /** @domName MediaController.played */
-  abstract TimeRanges get played;
+  TimeRanges get played;
 
   /** @domName MediaController.seekable */
-  abstract TimeRanges get seekable;
+  TimeRanges get seekable;
 
   /** @domName MediaController.volume */
   num volume;
@@ -21178,7 +21148,7 @@
   bool autoplay;
 
   /** @domName HTMLMediaElement.buffered */
-  abstract TimeRanges get buffered;
+  TimeRanges get buffered;
 
   /** @domName HTMLMediaElement.controller */
   MediaController controller;
@@ -21187,7 +21157,7 @@
   bool controls;
 
   /** @domName HTMLMediaElement.currentSrc */
-  abstract String get currentSrc;
+  String get currentSrc;
 
   /** @domName HTMLMediaElement.currentTime */
   num currentTime;
@@ -21199,16 +21169,16 @@
   num defaultPlaybackRate;
 
   /** @domName HTMLMediaElement.duration */
-  abstract num get duration;
+  num get duration;
 
   /** @domName HTMLMediaElement.ended */
-  abstract bool get ended;
+  bool get ended;
 
   /** @domName HTMLMediaElement.error */
-  abstract MediaError get error;
+  MediaError get error;
 
   /** @domName HTMLMediaElement.initialTime */
-  abstract num get initialTime;
+  num get initialTime;
 
   /** @domName HTMLMediaElement.loop */
   bool loop;
@@ -21220,55 +21190,55 @@
   bool muted;
 
   /** @domName HTMLMediaElement.networkState */
-  abstract int get networkState;
+  int get networkState;
 
   /** @domName HTMLMediaElement.paused */
-  abstract bool get paused;
+  bool get paused;
 
   /** @domName HTMLMediaElement.playbackRate */
   num playbackRate;
 
   /** @domName HTMLMediaElement.played */
-  abstract TimeRanges get played;
+  TimeRanges get played;
 
   /** @domName HTMLMediaElement.preload */
   String preload;
 
   /** @domName HTMLMediaElement.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName HTMLMediaElement.seekable */
-  abstract TimeRanges get seekable;
+  TimeRanges get seekable;
 
   /** @domName HTMLMediaElement.seeking */
-  abstract bool get seeking;
+  bool get seeking;
 
   /** @domName HTMLMediaElement.src */
   String src;
 
   /** @domName HTMLMediaElement.startTime */
-  abstract num get startTime;
+  num get startTime;
 
   /** @domName HTMLMediaElement.textTracks */
-  abstract TextTrackList get textTracks;
+  TextTrackList get textTracks;
 
   /** @domName HTMLMediaElement.volume */
   num volume;
 
   /** @domName HTMLMediaElement.webkitAudioDecodedByteCount */
-  abstract int get webkitAudioDecodedByteCount;
+  int get webkitAudioDecodedByteCount;
 
   /** @domName HTMLMediaElement.webkitClosedCaptionsVisible */
   bool webkitClosedCaptionsVisible;
 
   /** @domName HTMLMediaElement.webkitHasClosedCaptions */
-  abstract bool get webkitHasClosedCaptions;
+  bool get webkitHasClosedCaptions;
 
   /** @domName HTMLMediaElement.webkitPreservesPitch */
   bool webkitPreservesPitch;
 
   /** @domName HTMLMediaElement.webkitVideoDecodedByteCount */
-  abstract int get webkitVideoDecodedByteCount;
+  int get webkitVideoDecodedByteCount;
 
   /** @domName HTMLMediaElement.addTextTrack */
   TextTrack addTextTrack(String kind, [String label, String language]);
@@ -21357,7 +21327,7 @@
 abstract class MediaElementAudioSourceNode implements AudioSourceNode {
 
   /** @domName MediaElementAudioSourceNode.mediaElement */
-  abstract MediaElement get mediaElement;
+  MediaElement get mediaElement;
 }
 // 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
@@ -21600,7 +21570,7 @@
   static const int MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
 
   /** @domName MediaError.code */
-  abstract int get code;
+  int get code;
 }
 // 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
@@ -21635,7 +21605,7 @@
   static const int MEDIA_KEYERR_UNKNOWN = 1;
 
   /** @domName MediaKeyError.code */
-  abstract int get code;
+  int get code;
 }
 // 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
@@ -21658,25 +21628,25 @@
 abstract class MediaKeyEvent implements Event {
 
   /** @domName MediaKeyEvent.defaultURL */
-  abstract String get defaultURL;
+  String get defaultURL;
 
   /** @domName MediaKeyEvent.errorCode */
-  abstract MediaKeyError get errorCode;
+  MediaKeyError get errorCode;
 
   /** @domName MediaKeyEvent.initData */
-  abstract Uint8Array get initData;
+  Uint8Array get initData;
 
   /** @domName MediaKeyEvent.keySystem */
-  abstract String get keySystem;
+  String get keySystem;
 
   /** @domName MediaKeyEvent.message */
-  abstract Uint8Array get message;
+  Uint8Array get message;
 
   /** @domName MediaKeyEvent.sessionId */
-  abstract String get sessionId;
+  String get sessionId;
 
   /** @domName MediaKeyEvent.systemCode */
-  abstract int get systemCode;
+  int get systemCode;
 }
 // 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
@@ -21711,7 +21681,7 @@
 abstract class MediaList {
 
   /** @domName MediaList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName MediaList.mediaText */
   String mediaText;
@@ -21756,10 +21726,10 @@
 abstract class MediaQueryList {
 
   /** @domName MediaQueryList.matches */
-  abstract bool get matches;
+  bool get matches;
 
   /** @domName MediaQueryList.media */
-  abstract String get media;
+  String get media;
 
   /** @domName MediaQueryList.addListener */
   void addListener(MediaQueryListListener listener);
@@ -21808,16 +21778,16 @@
   factory MediaSource() => _MediaSourceFactoryProvider.createMediaSource();
 
   /** @domName MediaSource.activeSourceBuffers */
-  abstract SourceBufferList get activeSourceBuffers;
+  SourceBufferList get activeSourceBuffers;
 
   /** @domName MediaSource.duration */
   num duration;
 
   /** @domName MediaSource.readyState */
-  abstract String get readyState;
+  String get readyState;
 
   /** @domName MediaSource.sourceBuffers */
-  abstract SourceBufferList get sourceBuffers;
+  SourceBufferList get sourceBuffers;
 
   /** @domName MediaSource.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -21889,16 +21859,16 @@
   static const int LIVE = 1;
 
   /** @domName MediaStream.audioTracks */
-  abstract MediaStreamTrackList get audioTracks;
+  MediaStreamTrackList get audioTracks;
 
   /** @domName MediaStream.label */
-  abstract String get label;
+  String get label;
 
   /** @domName MediaStream.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName MediaStream.videoTracks */
-  abstract MediaStreamTrackList get videoTracks;
+  MediaStreamTrackList get videoTracks;
 
   /** @domName MediaStream.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -21924,7 +21894,7 @@
 abstract class MediaStreamAudioSourceNode implements AudioSourceNode {
 
   /** @domName MediaStreamAudioSourceNode.mediaStream */
-  abstract MediaStream get mediaStream;
+  MediaStream get mediaStream;
 }
 // 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
@@ -21947,7 +21917,7 @@
 abstract class MediaStreamEvent implements Event {
 
   /** @domName MediaStreamEvent.stream */
-  abstract MediaStream get stream;
+  MediaStream get stream;
 }
 // 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
@@ -22005,7 +21975,7 @@
   MediaStream operator[](int index) native "MediaStreamList_item_Callback";
 
   void operator[]=(int index, MediaStream value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<MediaStream> mixins.
   // MediaStream is the element type.
@@ -22022,15 +21992,15 @@
   // From Collection<MediaStream>:
 
   void add(MediaStream value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(MediaStream value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<MediaStream> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(MediaStream element) => _Collections.contains(this, element);
@@ -22046,38 +22016,38 @@
 
   bool some(bool f(MediaStream element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<MediaStream>:
 
   void sort([Comparator<MediaStream> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(MediaStream element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(MediaStream element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  MediaStream last() => this[length - 1];
+  MediaStream get last => this[length - 1];
 
   MediaStream removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<MediaStream> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [MediaStream initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<MediaStream> getRange(int start, int rangeLength) =>
@@ -22112,13 +22082,13 @@
   bool enabled;
 
   /** @domName MediaStreamTrack.kind */
-  abstract String get kind;
+  String get kind;
 
   /** @domName MediaStreamTrack.label */
-  abstract String get label;
+  String get label;
 
   /** @domName MediaStreamTrack.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName MediaStreamTrack.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -22148,7 +22118,7 @@
 abstract class MediaStreamTrackEvent implements Event {
 
   /** @domName MediaStreamTrackEvent.track */
-  abstract MediaStreamTrack get track;
+  MediaStreamTrack get track;
 }
 // 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
@@ -22214,7 +22184,7 @@
   MediaStreamTrackListEvents get on;
 
   /** @domName MediaStreamTrackList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName MediaStreamTrackList.add */
   void add(MediaStreamTrack track);
@@ -22285,13 +22255,13 @@
 abstract class MemoryInfo {
 
   /** @domName MemoryInfo.jsHeapSizeLimit */
-  abstract int get jsHeapSizeLimit;
+  int get jsHeapSizeLimit;
 
   /** @domName MemoryInfo.totalJSHeapSize */
-  abstract int get totalJSHeapSize;
+  int get totalJSHeapSize;
 
   /** @domName MemoryInfo.usedJSHeapSize */
-  abstract int get usedJSHeapSize;
+  int get usedJSHeapSize;
 }
 // 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
@@ -22347,10 +22317,10 @@
   factory MessageChannel() => _MessageChannelFactoryProvider.createMessageChannel();
 
   /** @domName MessageChannel.port1 */
-  abstract MessagePort get port1;
+  MessagePort get port1;
 
   /** @domName MessageChannel.port2 */
-  abstract MessagePort get port2;
+  MessagePort get port2;
 }
 // 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
@@ -22375,19 +22345,19 @@
 abstract class MessageEvent implements Event {
 
   /** @domName MessageEvent.data */
-  abstract Object get data;
+  Object get data;
 
   /** @domName MessageEvent.lastEventId */
-  abstract String get lastEventId;
+  String get lastEventId;
 
   /** @domName MessageEvent.origin */
-  abstract String get origin;
+  String get origin;
 
   /** @domName MessageEvent.ports */
-  abstract List get ports;
+  List get ports;
 
   /** @domName MessageEvent.source */
-  abstract Window get source;
+  Window get source;
 
   /** @domName MessageEvent.initMessageEvent */
   void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List messagePorts);
@@ -22541,10 +22511,10 @@
 abstract class Metadata {
 
   /** @domName Metadata.modificationTime */
-  abstract Date get modificationTime;
+  Date get modificationTime;
 
   /** @domName Metadata.size */
-  abstract int get size;
+  int get size;
 }
 // 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
@@ -22552,6 +22522,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void MetadataCallback(Metadata metadata);
 // 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
@@ -22581,7 +22552,7 @@
   num high;
 
   /** @domName HTMLMeterElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLMeterElement.low */
   num low;
@@ -22671,6 +22642,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName MouseEvent
 abstract class MouseEvent implements UIEvent {
 
@@ -22687,61 +22659,61 @@
 
 
   /** @domName MouseEvent.altKey */
-  abstract bool get altKey;
+  bool get altKey;
 
   /** @domName MouseEvent.button */
-  abstract int get button;
+  int get button;
 
   /** @domName MouseEvent.clientX */
-  abstract int get clientX;
+  int get clientX;
 
   /** @domName MouseEvent.clientY */
-  abstract int get clientY;
+  int get clientY;
 
   /** @domName MouseEvent.ctrlKey */
-  abstract bool get ctrlKey;
+  bool get ctrlKey;
 
   /** @domName MouseEvent.dataTransfer */
-  abstract Clipboard get dataTransfer;
+  Clipboard get dataTransfer;
 
   /** @domName MouseEvent.fromElement */
-  abstract Node get fromElement;
+  Node get fromElement;
 
   /** @domName MouseEvent.metaKey */
-  abstract bool get metaKey;
+  bool get metaKey;
 
   /** @domName MouseEvent.offsetX */
-  abstract int get offsetX;
+  int get offsetX;
 
   /** @domName MouseEvent.offsetY */
-  abstract int get offsetY;
+  int get offsetY;
 
   /** @domName MouseEvent.relatedTarget */
-  abstract EventTarget get relatedTarget;
+  EventTarget get relatedTarget;
 
   /** @domName MouseEvent.screenX */
-  abstract int get screenX;
+  int get screenX;
 
   /** @domName MouseEvent.screenY */
-  abstract int get screenY;
+  int get screenY;
 
   /** @domName MouseEvent.shiftKey */
-  abstract bool get shiftKey;
+  bool get shiftKey;
 
   /** @domName MouseEvent.toElement */
-  abstract Node get toElement;
+  Node get toElement;
 
   /** @domName MouseEvent.webkitMovementX */
-  abstract int get webkitMovementX;
+  int get webkitMovementX;
 
   /** @domName MouseEvent.webkitMovementY */
-  abstract int get webkitMovementY;
+  int get webkitMovementY;
 
   /** @domName MouseEvent.x */
-  abstract int get x;
+  int get x;
 
   /** @domName MouseEvent.y */
-  abstract int get y;
+  int get y;
 
   /** @domName MouseEvent.initMouseEvent */
   void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget);
@@ -22801,6 +22773,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void MutationCallback(List<MutationRecord> mutations, MutationObserver observer);
 // 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
@@ -22818,19 +22791,19 @@
   static const int REMOVAL = 3;
 
   /** @domName MutationEvent.attrChange */
-  abstract int get attrChange;
+  int get attrChange;
 
   /** @domName MutationEvent.attrName */
-  abstract String get attrName;
+  String get attrName;
 
   /** @domName MutationEvent.newValue */
-  abstract String get newValue;
+  String get newValue;
 
   /** @domName MutationEvent.prevValue */
-  abstract String get prevValue;
+  String get prevValue;
 
   /** @domName MutationEvent.relatedNode */
-  abstract Node get relatedNode;
+  Node get relatedNode;
 
   /** @domName MutationEvent.initMutationEvent */
   void initMutationEvent(String type, bool canBubble, bool cancelable, Node relatedNode, String prevValue, String newValue, String attrName, int attrChange);
@@ -22862,6 +22835,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName MutationObserver
 abstract class MutationObserver {
 
@@ -22911,7 +22885,7 @@
     if (options != null) {
       options.forEach((k, v) {
           if (_boolKeys.containsKey(k)) {
-            _add(parsedOptions, k, true === v);
+            _add(parsedOptions, k, true == v);
           } else if (k == 'attributeFilter') {
             _add(parsedOptions, k, _fixupList(v));
           } else {
@@ -22967,31 +22941,31 @@
 abstract class MutationRecord {
 
   /** @domName MutationRecord.addedNodes */
-  abstract List<Node> get addedNodes;
+  List<Node> get addedNodes;
 
   /** @domName MutationRecord.attributeName */
-  abstract String get attributeName;
+  String get attributeName;
 
   /** @domName MutationRecord.attributeNamespace */
-  abstract String get attributeNamespace;
+  String get attributeNamespace;
 
   /** @domName MutationRecord.nextSibling */
-  abstract Node get nextSibling;
+  Node get nextSibling;
 
   /** @domName MutationRecord.oldValue */
-  abstract String get oldValue;
+  String get oldValue;
 
   /** @domName MutationRecord.previousSibling */
-  abstract Node get previousSibling;
+  Node get previousSibling;
 
   /** @domName MutationRecord.removedNodes */
-  abstract List<Node> get removedNodes;
+  List<Node> get removedNodes;
 
   /** @domName MutationRecord.target */
-  abstract Node get target;
+  Node get target;
 
   /** @domName MutationRecord.type */
-  abstract String get type;
+  String get type;
 }
 // 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
@@ -23030,7 +23004,7 @@
 abstract class NamedNodeMap implements List<Node> {
 
   /** @domName NamedNodeMap.length */
-  abstract int get length;
+  int get length;
 
   /** @domName NamedNodeMap.getNamedItem */
   Node getNamedItem(String name);
@@ -23066,7 +23040,7 @@
   Node operator[](int index) native "NamedNodeMap_item_Callback";
 
   void operator[]=(int index, Node value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Node> mixins.
   // Node is the element type.
@@ -23083,15 +23057,15 @@
   // From Collection<Node>:
 
   void add(Node value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Node value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Node> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Node element) => _Collections.contains(this, element);
@@ -23107,38 +23081,38 @@
 
   bool some(bool f(Node element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Node>:
 
   void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Node element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Node element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Node last() => this[length - 1];
+  Node get last => this[length - 1];
 
   Node removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Node> getRange(int start, int rangeLength) =>
@@ -23171,52 +23145,52 @@
 abstract class Navigator {
 
   /** @domName Navigator.appCodeName */
-  abstract String get appCodeName;
+  String get appCodeName;
 
   /** @domName Navigator.appName */
-  abstract String get appName;
+  String get appName;
 
   /** @domName Navigator.appVersion */
-  abstract String get appVersion;
+  String get appVersion;
 
   /** @domName Navigator.cookieEnabled */
-  abstract bool get cookieEnabled;
+  bool get cookieEnabled;
 
   /** @domName Navigator.geolocation */
-  abstract Geolocation get geolocation;
+  Geolocation get geolocation;
 
   /** @domName Navigator.language */
-  abstract String get language;
+  String get language;
 
   /** @domName Navigator.mimeTypes */
-  abstract DOMMimeTypeArray get mimeTypes;
+  DOMMimeTypeArray get mimeTypes;
 
   /** @domName Navigator.onLine */
-  abstract bool get onLine;
+  bool get onLine;
 
   /** @domName Navigator.platform */
-  abstract String get platform;
+  String get platform;
 
   /** @domName Navigator.plugins */
-  abstract DOMPluginArray get plugins;
+  DOMPluginArray get plugins;
 
   /** @domName Navigator.product */
-  abstract String get product;
+  String get product;
 
   /** @domName Navigator.productSub */
-  abstract String get productSub;
+  String get productSub;
 
   /** @domName Navigator.userAgent */
-  abstract String get userAgent;
+  String get userAgent;
 
   /** @domName Navigator.vendor */
-  abstract String get vendor;
+  String get vendor;
 
   /** @domName Navigator.vendorSub */
-  abstract String get vendorSub;
+  String get vendorSub;
 
   /** @domName Navigator.webkitBattery */
-  abstract BatteryManager get webkitBattery;
+  BatteryManager get webkitBattery;
 
   /** @domName Navigator.getStorageUpdates */
   void getStorageUpdates();
@@ -23291,7 +23265,7 @@
   static const int PERMISSION_DENIED = 1;
 
   /** @domName NavigatorUserMediaError.code */
-  abstract int get code;
+  int get code;
 }
 // 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
@@ -23299,6 +23273,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void NavigatorUserMediaErrorCallback(NavigatorUserMediaError error);
 // 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
@@ -23317,6 +23292,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void NavigatorUserMediaSuccessCallback(LocalMediaStream stream);
 // 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
@@ -23324,6 +23300,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName Node
 abstract class Node implements EventTarget {
   List<Node> get nodes;
@@ -23380,31 +23357,31 @@
   static const int TEXT_NODE = 3;
 
   /** @domName Node.attributes */
-  abstract NamedNodeMap get $dom_attributes;
+  NamedNodeMap get $dom_attributes;
 
   /** @domName Node.childNodes */
-  abstract List<Node> get $dom_childNodes;
+  List<Node> get $dom_childNodes;
 
   /** @domName Node.firstChild */
-  abstract Node get $dom_firstChild;
+  Node get $dom_firstChild;
 
   /** @domName Node.lastChild */
-  abstract Node get $dom_lastChild;
+  Node get $dom_lastChild;
 
   /** @domName Node.nextSibling */
-  abstract Node get nextNode;
+  Node get nextNode;
 
   /** @domName Node.nodeType */
-  abstract int get $dom_nodeType;
+  int get $dom_nodeType;
 
   /** @domName Node.ownerDocument */
-  abstract Document get document;
+  Document get document;
 
   /** @domName Node.parentNode */
-  abstract Node get parent;
+  Node get parent;
 
   /** @domName Node.previousSibling */
-  abstract Node get previousNode;
+  Node get previousNode;
 
   /** @domName Node.textContent */
   String text;
@@ -23511,7 +23488,7 @@
 
 
   _NodeImpl get first => _this.$dom_firstChild;
-  _NodeImpl last() => _this.$dom_lastChild;
+  _NodeImpl get last => _this.$dom_lastChild;
 
   void add(_NodeImpl value) {
     _this.$dom_appendChild(value);
@@ -23529,7 +23506,7 @@
   }
 
   _NodeImpl removeLast() {
-    final result = last();
+    final result = last;
     if (result != null) {
       _this.$dom_removeChild(result);
     }
@@ -23561,14 +23538,14 @@
 
   bool some(bool f(Node element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Node>:
 
   // TODO(jacobr): this could be implemented for child node lists.
   // The exception we throw here is misleading.
   void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Node element, [int start = 0]) =>
@@ -23579,15 +23556,15 @@
 
   // FIXME: implement these.
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot setRange on immutable List.");
   }
   void removeRange(int start, int rangeLength) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot removeRange on immutable List.");
   }
   void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot insertRange on immutable List.");
   }
   List<Node> getRange(int start, int rangeLength) =>
@@ -23690,22 +23667,22 @@
 abstract class NodeIterator {
 
   /** @domName NodeIterator.expandEntityReferences */
-  abstract bool get expandEntityReferences;
+  bool get expandEntityReferences;
 
   /** @domName NodeIterator.filter */
-  abstract NodeFilter get filter;
+  NodeFilter get filter;
 
   /** @domName NodeIterator.pointerBeforeReferenceNode */
-  abstract bool get pointerBeforeReferenceNode;
+  bool get pointerBeforeReferenceNode;
 
   /** @domName NodeIterator.referenceNode */
-  abstract Node get referenceNode;
+  Node get referenceNode;
 
   /** @domName NodeIterator.root */
-  abstract Node get root;
+  Node get root;
 
   /** @domName NodeIterator.whatToShow */
-  abstract int get whatToShow;
+  int get whatToShow;
 
   /** @domName NodeIterator.detach */
   void detach();
@@ -23749,6 +23726,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName NodeList
 abstract class NodeList implements List<Node> {
 
@@ -23760,7 +23738,7 @@
 
 
   /** @domName NodeList.length */
-  abstract int get length;
+  int get length;
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23788,7 +23766,7 @@
 
   bool some(bool f(E element)) => _list.some(f);
 
-  bool isEmpty() => _list.isEmpty();
+  bool get isEmpty => _list.isEmpty;
 
   int get length => _list.length;
 
@@ -23815,7 +23793,7 @@
 
   E removeLast() => _list.removeLast();
 
-  E last() => _list.last();
+  E get last => _list.last;
 
   List<E> getRange(int start, int rangeLength) =>
     _list.getRange(start, rangeLength);
@@ -23878,7 +23856,7 @@
   }
 
   _NodeImpl removeLast() {
-    final result = this.last();
+    final result = this.last;
     if (result != null) {
       _parent.$dom_removeChild(result);
     }
@@ -23906,12 +23884,12 @@
 
   bool some(bool f(Node element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Node>:
 
   void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Node element, [int start = 0]) =>
@@ -23920,18 +23898,18 @@
   int lastIndexOf(Node element, [int start = 0]) =>
       _Lists.lastIndexOf(this, element, start);
 
-  Node last() => this[length - 1];
+  Node get last => this[length - 1];
   Node get first => this[0];
 
   // FIXME: implement thesee.
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
   void removeRange(int start, int rangeLength) {
-    throw new UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
   void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
   List<Node> getRange(int start, int rangeLength) =>
     new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
@@ -23956,10 +23934,10 @@
 abstract class Notation implements Node {
 
   /** @domName Notation.publicId */
-  abstract String get publicId;
+  String get publicId;
 
   /** @domName Notation.systemId */
-  abstract String get systemId;
+  String get systemId;
 }
 // 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
@@ -23999,7 +23977,7 @@
   String dir;
 
   /** @domName Notification.permission */
-  abstract String get permission;
+  String get permission;
 
   /** @domName Notification.replaceId */
   String replaceId;
@@ -24139,6 +24117,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void NotificationPermissionCallback(String permission);
 // 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
@@ -24295,9 +24274,6 @@
   /** @domName HTMLObjectElement.codeType */
   String codeType;
 
-  /** @domName HTMLObjectElement.contentDocument */
-  abstract Document get contentDocument;
-
   /** @domName HTMLObjectElement.data */
   String data;
 
@@ -24305,7 +24281,7 @@
   bool declare;
 
   /** @domName HTMLObjectElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLObjectElement.height */
   String height;
@@ -24326,10 +24302,10 @@
   String useMap;
 
   /** @domName HTMLObjectElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLObjectElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLObjectElement.vspace */
   int vspace;
@@ -24338,7 +24314,7 @@
   String width;
 
   /** @domName HTMLObjectElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLObjectElement.checkValidity */
   bool checkValidity();
@@ -24441,7 +24417,7 @@
 abstract class OfflineAudioCompletionEvent implements Event {
 
   /** @domName OfflineAudioCompletionEvent.renderedBuffer */
-  abstract AudioBuffer get renderedBuffer;
+  AudioBuffer get renderedBuffer;
 }
 // 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
@@ -24520,10 +24496,10 @@
   bool disabled;
 
   /** @domName HTMLOptionElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLOptionElement.index */
-  abstract int get index;
+  int get index;
 
   /** @domName HTMLOptionElement.label */
   String label;
@@ -24595,13 +24571,13 @@
   static const int UNSCHEDULED_STATE = 0;
 
   /** @domName Oscillator.detune */
-  abstract AudioParam get detune;
+  AudioParam get detune;
 
   /** @domName Oscillator.frequency */
-  abstract AudioParam get frequency;
+  AudioParam get frequency;
 
   /** @domName Oscillator.playbackState */
-  abstract int get playbackState;
+  int get playbackState;
 
   /** @domName Oscillator.type */
   int type;
@@ -24655,31 +24631,31 @@
   String defaultValue;
 
   /** @domName HTMLOutputElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLOutputElement.htmlFor */
   DOMSettableTokenList htmlFor;
 
   /** @domName HTMLOutputElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLOutputElement.name */
   String name;
 
   /** @domName HTMLOutputElement.type */
-  abstract String get type;
+  String get type;
 
   /** @domName HTMLOutputElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLOutputElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLOutputElement.value */
   String value;
 
   /** @domName HTMLOutputElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLOutputElement.checkValidity */
   bool checkValidity();
@@ -24744,13 +24720,13 @@
   static const int VERTICAL = 1;
 
   /** @domName OverflowEvent.horizontalOverflow */
-  abstract bool get horizontalOverflow;
+  bool get horizontalOverflow;
 
   /** @domName OverflowEvent.orient */
-  abstract int get orient;
+  int get orient;
 
   /** @domName OverflowEvent.verticalOverflow */
-  abstract bool get verticalOverflow;
+  bool get verticalOverflow;
 }
 // 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
@@ -24805,7 +24781,7 @@
 abstract class PageTransitionEvent implements Event {
 
   /** @domName PageTransitionEvent.persisted */
-  abstract bool get persisted;
+  bool get persisted;
 }
 // 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
@@ -24938,22 +24914,22 @@
   static const int SDP_PRANSWER = 0x200;
 
   /** @domName PeerConnection00.iceState */
-  abstract int get iceState;
+  int get iceState;
 
   /** @domName PeerConnection00.localDescription */
-  abstract SessionDescription get localDescription;
+  SessionDescription get localDescription;
 
   /** @domName PeerConnection00.localStreams */
-  abstract List<MediaStream> get localStreams;
+  List<MediaStream> get localStreams;
 
   /** @domName PeerConnection00.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName PeerConnection00.remoteDescription */
-  abstract SessionDescription get remoteDescription;
+  SessionDescription get remoteDescription;
 
   /** @domName PeerConnection00.remoteStreams */
-  abstract List<MediaStream> get remoteStreams;
+  List<MediaStream> get remoteStreams;
 
   /** @domName PeerConnection00.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -25114,16 +25090,16 @@
 abstract class Performance implements EventTarget {
 
   /** @domName Performance.memory */
-  abstract MemoryInfo get memory;
+  MemoryInfo get memory;
 
   /** @domName Performance.navigation */
-  abstract PerformanceNavigation get navigation;
+  PerformanceNavigation get navigation;
 
   /** @domName Performance.timing */
-  abstract PerformanceTiming get timing;
+  PerformanceTiming get timing;
 
-  /** @domName Performance.webkitNow */
-  num webkitNow();
+  /** @domName Performance.now */
+  num now();
 }
 // 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
@@ -25139,7 +25115,7 @@
 
   PerformanceTiming get timing native "Performance_timing_Getter";
 
-  num webkitNow() native "Performance_webkitNow_Callback";
+  num now() native "Performance_now_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25160,10 +25136,10 @@
   static const int TYPE_RESERVED = 255;
 
   /** @domName PerformanceNavigation.redirectCount */
-  abstract int get redirectCount;
+  int get redirectCount;
 
   /** @domName PerformanceNavigation.type */
-  abstract int get type;
+  int get type;
 }
 // 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
@@ -25188,67 +25164,67 @@
 abstract class PerformanceTiming {
 
   /** @domName PerformanceTiming.connectEnd */
-  abstract int get connectEnd;
+  int get connectEnd;
 
   /** @domName PerformanceTiming.connectStart */
-  abstract int get connectStart;
+  int get connectStart;
 
   /** @domName PerformanceTiming.domComplete */
-  abstract int get domComplete;
+  int get domComplete;
 
   /** @domName PerformanceTiming.domContentLoadedEventEnd */
-  abstract int get domContentLoadedEventEnd;
+  int get domContentLoadedEventEnd;
 
   /** @domName PerformanceTiming.domContentLoadedEventStart */
-  abstract int get domContentLoadedEventStart;
+  int get domContentLoadedEventStart;
 
   /** @domName PerformanceTiming.domInteractive */
-  abstract int get domInteractive;
+  int get domInteractive;
 
   /** @domName PerformanceTiming.domLoading */
-  abstract int get domLoading;
+  int get domLoading;
 
   /** @domName PerformanceTiming.domainLookupEnd */
-  abstract int get domainLookupEnd;
+  int get domainLookupEnd;
 
   /** @domName PerformanceTiming.domainLookupStart */
-  abstract int get domainLookupStart;
+  int get domainLookupStart;
 
   /** @domName PerformanceTiming.fetchStart */
-  abstract int get fetchStart;
+  int get fetchStart;
 
   /** @domName PerformanceTiming.loadEventEnd */
-  abstract int get loadEventEnd;
+  int get loadEventEnd;
 
   /** @domName PerformanceTiming.loadEventStart */
-  abstract int get loadEventStart;
+  int get loadEventStart;
 
   /** @domName PerformanceTiming.navigationStart */
-  abstract int get navigationStart;
+  int get navigationStart;
 
   /** @domName PerformanceTiming.redirectEnd */
-  abstract int get redirectEnd;
+  int get redirectEnd;
 
   /** @domName PerformanceTiming.redirectStart */
-  abstract int get redirectStart;
+  int get redirectStart;
 
   /** @domName PerformanceTiming.requestStart */
-  abstract int get requestStart;
+  int get requestStart;
 
   /** @domName PerformanceTiming.responseEnd */
-  abstract int get responseEnd;
+  int get responseEnd;
 
   /** @domName PerformanceTiming.responseStart */
-  abstract int get responseStart;
+  int get responseStart;
 
   /** @domName PerformanceTiming.secureConnectionStart */
-  abstract int get secureConnectionStart;
+  int get secureConnectionStart;
 
   /** @domName PerformanceTiming.unloadEventEnd */
-  abstract int get unloadEventEnd;
+  int get unloadEventEnd;
 
   /** @domName PerformanceTiming.unloadEventStart */
-  abstract int get unloadEventStart;
+  int get unloadEventStart;
 }
 // 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
@@ -25307,6 +25283,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName WebKitPoint
 abstract class Point {
 
@@ -25345,7 +25322,7 @@
 abstract class PopStateEvent implements Event {
 
   /** @domName PopStateEvent.state */
-  abstract Object get state;
+  Object get state;
 }
 // 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
@@ -25364,6 +25341,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void PositionCallback(Geoposition position);
 // 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
@@ -25381,10 +25359,10 @@
   static const int TIMEOUT = 3;
 
   /** @domName PositionError.code */
-  abstract int get code;
+  int get code;
 
   /** @domName PositionError.message */
-  abstract String get message;
+  String get message;
 }
 // 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
@@ -25392,6 +25370,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void PositionErrorCallback(PositionError error);
 // 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
@@ -25453,10 +25432,10 @@
   String data;
 
   /** @domName ProcessingInstruction.sheet */
-  abstract StyleSheet get sheet;
+  StyleSheet get sheet;
 
   /** @domName ProcessingInstruction.target */
-  abstract String get target;
+  String get target;
 }
 // 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
@@ -25487,13 +25466,13 @@
   factory ProgressElement() => _Elements.createProgressElement();
 
   /** @domName HTMLProgressElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLProgressElement.max */
   num max;
 
   /** @domName HTMLProgressElement.position */
-  abstract num get position;
+  num get position;
 
   /** @domName HTMLProgressElement.value */
   num value;
@@ -25529,13 +25508,13 @@
 abstract class ProgressEvent implements Event {
 
   /** @domName ProgressEvent.lengthComputable */
-  abstract bool get lengthComputable;
+  bool get lengthComputable;
 
   /** @domName ProgressEvent.loaded */
-  abstract int get loaded;
+  int get loaded;
 
   /** @domName ProgressEvent.total */
-  abstract int get total;
+  int get total;
 }
 // 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
@@ -25587,13 +25566,13 @@
 abstract class RGBColor {
 
   /** @domName RGBColor.blue */
-  abstract CSSPrimitiveValue get blue;
+  CSSPrimitiveValue get blue;
 
   /** @domName RGBColor.green */
-  abstract CSSPrimitiveValue get green;
+  CSSPrimitiveValue get green;
 
   /** @domName RGBColor.red */
-  abstract CSSPrimitiveValue get red;
+  CSSPrimitiveValue get red;
 }
 // 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
@@ -25616,6 +25595,157 @@
 
 // WARNING: Do not edit - generated code.
 
+/// @domName RTCDataChannel
+abstract class RTCDataChannel implements EventTarget {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  RTCDataChannelEvents get on;
+
+  /** @domName RTCDataChannel.binaryType */
+  String binaryType;
+
+  /** @domName RTCDataChannel.bufferedAmount */
+  int get bufferedAmount;
+
+  /** @domName RTCDataChannel.label */
+  String get label;
+
+  /** @domName RTCDataChannel.readyState */
+  String get readyState;
+
+  /** @domName RTCDataChannel.reliable */
+  bool get reliable;
+
+  /** @domName RTCDataChannel.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
+
+  /** @domName RTCDataChannel.close */
+  void close();
+
+  /** @domName RTCDataChannel.dispatchEvent */
+  bool $dom_dispatchEvent(Event event);
+
+  /** @domName RTCDataChannel.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
+
+  /** @domName RTCDataChannel.send */
+  void send(data);
+}
+
+abstract class RTCDataChannelEvents implements Events {
+
+  EventListenerList get close;
+
+  EventListenerList get error;
+
+  EventListenerList get message;
+
+  EventListenerList get open;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName RTCDataChannelEvent
+abstract class RTCDataChannelEvent implements Event {
+
+  /** @domName RTCDataChannelEvent.channel */
+  RTCDataChannel get channel;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class _RTCDataChannelEventImpl extends _EventImpl implements RTCDataChannelEvent {
+
+  RTCDataChannel get channel native "RTCDataChannelEvent_channel_Getter";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class _RTCDataChannelImpl extends _EventTargetImpl implements RTCDataChannel {
+
+  _RTCDataChannelEventsImpl get on =>
+    new _RTCDataChannelEventsImpl(this);
+
+  String get binaryType native "RTCDataChannel_binaryType_Getter";
+
+  void set binaryType(String value) native "RTCDataChannel_binaryType_Setter";
+
+  int get bufferedAmount native "RTCDataChannel_bufferedAmount_Getter";
+
+  String get label native "RTCDataChannel_label_Getter";
+
+  String get readyState native "RTCDataChannel_readyState_Getter";
+
+  bool get reliable native "RTCDataChannel_reliable_Getter";
+
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "RTCDataChannel_addEventListener_Callback";
+
+  void close() native "RTCDataChannel_close_Callback";
+
+  bool $dom_dispatchEvent(Event event) native "RTCDataChannel_dispatchEvent_Callback";
+
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "RTCDataChannel_removeEventListener_Callback";
+
+  void send(data) {
+    if ((data is ArrayBuffer || data == null)) {
+      _send_1(data);
+      return;
+    }
+    if ((data is ArrayBufferView || data == null)) {
+      _send_2(data);
+      return;
+    }
+    if ((data is Blob || data == null)) {
+      _send_3(data);
+      return;
+    }
+    if ((data is String || data == null)) {
+      _send_4(data);
+      return;
+    }
+    throw "Incorrect number or type of arguments";
+  }
+
+  void _send_1(data) native "RTCDataChannel_send_1_Callback";
+
+  void _send_2(data) native "RTCDataChannel_send_2_Callback";
+
+  void _send_3(data) native "RTCDataChannel_send_3_Callback";
+
+  void _send_4(data) native "RTCDataChannel_send_4_Callback";
+
+}
+
+class _RTCDataChannelEventsImpl extends _EventsImpl implements RTCDataChannelEvents {
+  _RTCDataChannelEventsImpl(_ptr) : super(_ptr);
+
+  EventListenerList get close => this['close'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get message => this['message'];
+
+  EventListenerList get open => this['open'];
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
 typedef void RTCErrorCallback(String errorInformation);
 // 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
@@ -25629,13 +25759,13 @@
   factory RTCIceCandidate(Map dictionary) => _RTCIceCandidateFactoryProvider.createRTCIceCandidate(dictionary);
 
   /** @domName RTCIceCandidate.candidate */
-  abstract String get candidate;
+  String get candidate;
 
   /** @domName RTCIceCandidate.sdpMLineIndex */
-  abstract int get sdpMLineIndex;
+  int get sdpMLineIndex;
 
   /** @domName RTCIceCandidate.sdpMid */
-  abstract String get sdpMid;
+  String get sdpMid;
 }
 // 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
@@ -25647,7 +25777,7 @@
 abstract class RTCIceCandidateEvent implements Event {
 
   /** @domName RTCIceCandidateEvent.candidate */
-  abstract RTCIceCandidate get candidate;
+  RTCIceCandidate get candidate;
 }
 // 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
@@ -25697,22 +25827,22 @@
   RTCPeerConnectionEvents get on;
 
   /** @domName RTCPeerConnection.iceState */
-  abstract String get iceState;
+  String get iceState;
 
   /** @domName RTCPeerConnection.localDescription */
-  abstract RTCSessionDescription get localDescription;
+  RTCSessionDescription get localDescription;
 
   /** @domName RTCPeerConnection.localStreams */
-  abstract List<MediaStream> get localStreams;
+  List<MediaStream> get localStreams;
 
   /** @domName RTCPeerConnection.readyState */
-  abstract String get readyState;
+  String get readyState;
 
   /** @domName RTCPeerConnection.remoteDescription */
-  abstract RTCSessionDescription get remoteDescription;
+  RTCSessionDescription get remoteDescription;
 
   /** @domName RTCPeerConnection.remoteStreams */
-  abstract List<MediaStream> get remoteStreams;
+  List<MediaStream> get remoteStreams;
 
   /** @domName RTCPeerConnection.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -25729,6 +25859,9 @@
   /** @domName RTCPeerConnection.createAnswer */
   void createAnswer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]);
 
+  /** @domName RTCPeerConnection.createDataChannel */
+  RTCDataChannel createDataChannel(String label, Map options);
+
   /** @domName RTCPeerConnection.createOffer */
   void createOffer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]);
 
@@ -25803,6 +25936,8 @@
 
   void createAnswer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]) native "RTCPeerConnection_createAnswer_Callback";
 
+  RTCDataChannel createDataChannel(String label, Map options) native "RTCPeerConnection_createDataChannel_Callback";
+
   void createOffer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]) native "RTCPeerConnection_createOffer_Callback";
 
   bool $dom_dispatchEvent(Event event) native "RTCPeerConnection_dispatchEvent_Callback";
@@ -25861,6 +25996,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void RTCSessionDescriptionCallback(RTCSessionDescription sdp);
 // 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
@@ -25885,6 +26021,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void RTCStatsCallback(RTCStatsResponse response);
 // 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
@@ -25896,7 +26033,7 @@
 abstract class RTCStatsElement {
 
   /** @domName RTCStatsElement.timestamp */
-  abstract int get timestamp;
+  Date get timestamp;
 
   /** @domName RTCStatsElement.stat */
   String stat(String name);
@@ -25909,7 +26046,7 @@
 
 class _RTCStatsElementImpl extends NativeFieldWrapperClass1 implements RTCStatsElement {
 
-  int get timestamp native "RTCStatsElement_timestamp_Getter";
+  Date get timestamp native "RTCStatsElement_timestamp_Getter";
 
   String stat(String name) native "RTCStatsElement_stat_Callback";
 
@@ -25924,10 +26061,10 @@
 abstract class RTCStatsReport {
 
   /** @domName RTCStatsReport.local */
-  List<RTCStatsElement> local();
+  RTCStatsElement get local;
 
   /** @domName RTCStatsReport.remote */
-  List<RTCStatsElement> remote();
+  RTCStatsElement get remote;
 }
 // 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
@@ -25937,9 +26074,9 @@
 
 class _RTCStatsReportImpl extends NativeFieldWrapperClass1 implements RTCStatsReport {
 
-  List<RTCStatsElement> local() native "RTCStatsReport_local_Callback";
+  RTCStatsElement get local native "RTCStatsReport_local_Getter";
 
-  List<RTCStatsElement> remote() native "RTCStatsReport_remote_Callback";
+  RTCStatsElement get remote native "RTCStatsReport_remote_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26016,22 +26153,22 @@
   static const int START_TO_START = 0;
 
   /** @domName Range.collapsed */
-  abstract bool get collapsed;
+  bool get collapsed;
 
   /** @domName Range.commonAncestorContainer */
-  abstract Node get commonAncestorContainer;
+  Node get commonAncestorContainer;
 
   /** @domName Range.endContainer */
-  abstract Node get endContainer;
+  Node get endContainer;
 
   /** @domName Range.endOffset */
-  abstract int get endOffset;
+  int get endOffset;
 
   /** @domName Range.startContainer */
-  abstract Node get startContainer;
+  Node get startContainer;
 
   /** @domName Range.startOffset */
-  abstract int get startOffset;
+  int get startOffset;
 
   /** @domName Range.cloneContents */
   DocumentFragment cloneContents();
@@ -26122,13 +26259,13 @@
   static const int INVALID_NODE_TYPE_ERR = 2;
 
   /** @domName RangeException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName RangeException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName RangeException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName RangeException.toString */
   String toString();
@@ -26234,7 +26371,7 @@
   int fftSize;
 
   /** @domName RealtimeAnalyserNode.frequencyBinCount */
-  abstract int get frequencyBinCount;
+  int get frequencyBinCount;
 
   /** @domName RealtimeAnalyserNode.maxDecibels */
   num maxDecibels;
@@ -26297,16 +26434,16 @@
 abstract class Rect {
 
   /** @domName Rect.bottom */
-  abstract CSSPrimitiveValue get bottom;
+  CSSPrimitiveValue get bottom;
 
   /** @domName Rect.left */
-  abstract CSSPrimitiveValue get left;
+  CSSPrimitiveValue get left;
 
   /** @domName Rect.right */
-  abstract CSSPrimitiveValue get right;
+  CSSPrimitiveValue get right;
 
   /** @domName Rect.top */
-  abstract CSSPrimitiveValue get top;
+  CSSPrimitiveValue get top;
 }
 // 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
@@ -26331,7 +26468,8 @@
 
 // WARNING: Do not edit - generated code.
 
-typedef void RequestAnimationFrameCallback(int time);
+
+typedef void RequestAnimationFrameCallback(num highResTime);
 // 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.
@@ -26358,10 +26496,10 @@
   static const int VERSION_ERR = 2;
 
   /** @domName SQLError.code */
-  abstract int get code;
+  int get code;
 
   /** @domName SQLError.message */
-  abstract String get message;
+  String get message;
 }
 // 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
@@ -26402,10 +26540,10 @@
   static const int VERSION_ERR = 2;
 
   /** @domName SQLException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName SQLException.message */
-  abstract String get message;
+  String get message;
 }
 // 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
@@ -26430,13 +26568,13 @@
 abstract class SQLResultSet {
 
   /** @domName SQLResultSet.insertId */
-  abstract int get insertId;
+  int get insertId;
 
   /** @domName SQLResultSet.rows */
-  abstract SQLResultSetRowList get rows;
+  SQLResultSetRowList get rows;
 
   /** @domName SQLResultSet.rowsAffected */
-  abstract int get rowsAffected;
+  int get rowsAffected;
 }
 // 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
@@ -26463,7 +26601,7 @@
 abstract class SQLResultSetRowList implements List<Map> {
 
   /** @domName SQLResultSetRowList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName SQLResultSetRowList.item */
   Map item(int index);
@@ -26481,7 +26619,7 @@
   Map operator[](int index) native "SQLResultSetRowList_item_Callback";
 
   void operator[]=(int index, Map value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Map> mixins.
   // Map is the element type.
@@ -26498,15 +26636,15 @@
   // From Collection<Map>:
 
   void add(Map value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Map value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Map> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Map element) => _Collections.contains(this, element);
@@ -26522,38 +26660,38 @@
 
   bool some(bool f(Map element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Map>:
 
   void sort([Comparator<Map> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Map element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Map element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Map last() => this[length - 1];
+  Map get last => this[length - 1];
 
   Map removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Map> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Map initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Map> getRange(int start, int rangeLength) =>
@@ -26570,6 +26708,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void SQLStatementCallback(SQLTransaction transaction, SQLResultSet resultSet);
 // 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
@@ -26577,6 +26716,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void SQLStatementErrorCallback(SQLTransaction transaction, SQLError error);
 // 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
@@ -26596,6 +26736,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void SQLTransactionCallback(SQLTransaction transaction);
 // 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
@@ -26603,6 +26744,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void SQLTransactionErrorCallback(SQLError error);
 // 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
@@ -26633,6 +26775,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void SQLTransactionSyncCallback(SQLTransactionSync transaction);
 // 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
@@ -26655,7 +26798,7 @@
 abstract class SVGAElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGAElement.target */
-  abstract SVGAnimatedString get target;
+  SVGAnimatedString get target;
 }
 // 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
@@ -26798,7 +26941,7 @@
   static const int SVG_ANGLETYPE_UNSPECIFIED = 1;
 
   /** @domName SVGAngle.unitType */
-  abstract int get unitType;
+  int get unitType;
 
   /** @domName SVGAngle.value */
   num value;
@@ -26924,10 +27067,10 @@
 abstract class SVGAnimatedAngle {
 
   /** @domName SVGAnimatedAngle.animVal */
-  abstract SVGAngle get animVal;
+  SVGAngle get animVal;
 
   /** @domName SVGAnimatedAngle.baseVal */
-  abstract SVGAngle get baseVal;
+  SVGAngle get baseVal;
 }
 // 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
@@ -26952,7 +27095,7 @@
 abstract class SVGAnimatedBoolean {
 
   /** @domName SVGAnimatedBoolean.animVal */
-  abstract bool get animVal;
+  bool get animVal;
 
   /** @domName SVGAnimatedBoolean.baseVal */
   bool baseVal;
@@ -26982,7 +27125,7 @@
 abstract class SVGAnimatedEnumeration {
 
   /** @domName SVGAnimatedEnumeration.animVal */
-  abstract int get animVal;
+  int get animVal;
 
   /** @domName SVGAnimatedEnumeration.baseVal */
   int baseVal;
@@ -27012,7 +27155,7 @@
 abstract class SVGAnimatedInteger {
 
   /** @domName SVGAnimatedInteger.animVal */
-  abstract int get animVal;
+  int get animVal;
 
   /** @domName SVGAnimatedInteger.baseVal */
   int baseVal;
@@ -27042,10 +27185,10 @@
 abstract class SVGAnimatedLength {
 
   /** @domName SVGAnimatedLength.animVal */
-  abstract SVGLength get animVal;
+  SVGLength get animVal;
 
   /** @domName SVGAnimatedLength.baseVal */
-  abstract SVGLength get baseVal;
+  SVGLength get baseVal;
 }
 // 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
@@ -27070,10 +27213,10 @@
 abstract class SVGAnimatedLengthList implements List<SVGAnimatedLength> {
 
   /** @domName SVGAnimatedLengthList.animVal */
-  abstract SVGLengthList get animVal;
+  SVGLengthList get animVal;
 
   /** @domName SVGAnimatedLengthList.baseVal */
-  abstract SVGLengthList get baseVal;
+  SVGLengthList get baseVal;
 }
 // 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
@@ -27090,7 +27233,7 @@
   SVGAnimatedLength operator[](int index) native "SVGAnimatedLengthList_item_Callback";
 
   void operator[]=(int index, SVGAnimatedLength value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGAnimatedLength> mixins.
   // SVGAnimatedLength is the element type.
@@ -27107,15 +27250,15 @@
   // From Collection<SVGAnimatedLength>:
 
   void add(SVGAnimatedLength value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGAnimatedLength value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGAnimatedLength> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGAnimatedLength element) => _Collections.contains(this, element);
@@ -27131,38 +27274,38 @@
 
   bool some(bool f(SVGAnimatedLength element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGAnimatedLength>:
 
   void sort([Comparator<SVGAnimatedLength> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGAnimatedLength element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGAnimatedLength element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGAnimatedLength last() => this[length - 1];
+  SVGAnimatedLength get last => this[length - 1];
 
   SVGAnimatedLength removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGAnimatedLength> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGAnimatedLength initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGAnimatedLength> getRange(int start, int rangeLength) =>
@@ -27181,7 +27324,7 @@
 abstract class SVGAnimatedNumber {
 
   /** @domName SVGAnimatedNumber.animVal */
-  abstract num get animVal;
+  num get animVal;
 
   /** @domName SVGAnimatedNumber.baseVal */
   num baseVal;
@@ -27211,10 +27354,10 @@
 abstract class SVGAnimatedNumberList implements List<SVGAnimatedNumber> {
 
   /** @domName SVGAnimatedNumberList.animVal */
-  abstract SVGNumberList get animVal;
+  SVGNumberList get animVal;
 
   /** @domName SVGAnimatedNumberList.baseVal */
-  abstract SVGNumberList get baseVal;
+  SVGNumberList get baseVal;
 }
 // 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
@@ -27231,7 +27374,7 @@
   SVGAnimatedNumber operator[](int index) native "SVGAnimatedNumberList_item_Callback";
 
   void operator[]=(int index, SVGAnimatedNumber value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGAnimatedNumber> mixins.
   // SVGAnimatedNumber is the element type.
@@ -27248,15 +27391,15 @@
   // From Collection<SVGAnimatedNumber>:
 
   void add(SVGAnimatedNumber value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGAnimatedNumber value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGAnimatedNumber> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGAnimatedNumber element) => _Collections.contains(this, element);
@@ -27272,38 +27415,38 @@
 
   bool some(bool f(SVGAnimatedNumber element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGAnimatedNumber>:
 
   void sort([Comparator<SVGAnimatedNumber> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGAnimatedNumber element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGAnimatedNumber element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGAnimatedNumber last() => this[length - 1];
+  SVGAnimatedNumber get last => this[length - 1];
 
   SVGAnimatedNumber removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGAnimatedNumber> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGAnimatedNumber initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGAnimatedNumber> getRange(int start, int rangeLength) =>
@@ -27322,10 +27465,10 @@
 abstract class SVGAnimatedPreserveAspectRatio {
 
   /** @domName SVGAnimatedPreserveAspectRatio.animVal */
-  abstract SVGPreserveAspectRatio get animVal;
+  SVGPreserveAspectRatio get animVal;
 
   /** @domName SVGAnimatedPreserveAspectRatio.baseVal */
-  abstract SVGPreserveAspectRatio get baseVal;
+  SVGPreserveAspectRatio get baseVal;
 }
 // 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
@@ -27350,10 +27493,10 @@
 abstract class SVGAnimatedRect {
 
   /** @domName SVGAnimatedRect.animVal */
-  abstract SVGRect get animVal;
+  SVGRect get animVal;
 
   /** @domName SVGAnimatedRect.baseVal */
-  abstract SVGRect get baseVal;
+  SVGRect get baseVal;
 }
 // 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
@@ -27378,7 +27521,7 @@
 abstract class SVGAnimatedString {
 
   /** @domName SVGAnimatedString.animVal */
-  abstract String get animVal;
+  String get animVal;
 
   /** @domName SVGAnimatedString.baseVal */
   String baseVal;
@@ -27408,10 +27551,10 @@
 abstract class SVGAnimatedTransformList implements List<SVGAnimateTransformElement> {
 
   /** @domName SVGAnimatedTransformList.animVal */
-  abstract SVGTransformList get animVal;
+  SVGTransformList get animVal;
 
   /** @domName SVGAnimatedTransformList.baseVal */
-  abstract SVGTransformList get baseVal;
+  SVGTransformList get baseVal;
 }
 // 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
@@ -27428,7 +27571,7 @@
   SVGAnimateTransformElement operator[](int index) native "SVGAnimatedTransformList_item_Callback";
 
   void operator[]=(int index, SVGAnimateTransformElement value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGAnimateTransformElement> mixins.
   // SVGAnimateTransformElement is the element type.
@@ -27445,15 +27588,15 @@
   // From Collection<SVGAnimateTransformElement>:
 
   void add(SVGAnimateTransformElement value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGAnimateTransformElement value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGAnimateTransformElement> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGAnimateTransformElement element) => _Collections.contains(this, element);
@@ -27469,38 +27612,38 @@
 
   bool some(bool f(SVGAnimateTransformElement element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGAnimateTransformElement>:
 
   void sort([Comparator<SVGAnimateTransformElement> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGAnimateTransformElement element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGAnimateTransformElement element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGAnimateTransformElement last() => this[length - 1];
+  SVGAnimateTransformElement get last => this[length - 1];
 
   SVGAnimateTransformElement removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGAnimateTransformElement> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGAnimateTransformElement initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGAnimateTransformElement> getRange(int start, int rangeLength) =>
@@ -27519,7 +27662,7 @@
 abstract class SVGAnimationElement implements SVGElement, SVGTests, SVGExternalResourcesRequired, ElementTimeControl {
 
   /** @domName SVGAnimationElement.targetElement */
-  abstract SVGElement get targetElement;
+  SVGElement get targetElement;
 
   /** @domName SVGAnimationElement.getCurrentTime */
   num getCurrentTime();
@@ -27575,13 +27718,13 @@
 abstract class SVGCircleElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGCircleElement.cx */
-  abstract SVGAnimatedLength get cx;
+  SVGAnimatedLength get cx;
 
   /** @domName SVGCircleElement.cy */
-  abstract SVGAnimatedLength get cy;
+  SVGAnimatedLength get cy;
 
   /** @domName SVGCircleElement.r */
-  abstract SVGAnimatedLength get r;
+  SVGAnimatedLength get r;
 }
 // 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
@@ -27646,7 +27789,7 @@
 abstract class SVGClipPathElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGClipPathElement.clipPathUnits */
-  abstract SVGAnimatedEnumeration get clipPathUnits;
+  SVGAnimatedEnumeration get clipPathUnits;
 }
 // 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
@@ -27715,10 +27858,10 @@
   static const int SVG_COLORTYPE_UNKNOWN = 0;
 
   /** @domName SVGColor.colorType */
-  abstract int get colorType;
+  int get colorType;
 
   /** @domName SVGColor.rgbColor */
-  abstract RGBColor get rgbColor;
+  RGBColor get rgbColor;
 
   /** @domName SVGColor.setColor */
   void setColor(int colorType, String rgbColor, String iccColor);
@@ -27770,25 +27913,25 @@
   static const int SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
 
   /** @domName SVGComponentTransferFunctionElement.amplitude */
-  abstract SVGAnimatedNumber get amplitude;
+  SVGAnimatedNumber get amplitude;
 
   /** @domName SVGComponentTransferFunctionElement.exponent */
-  abstract SVGAnimatedNumber get exponent;
+  SVGAnimatedNumber get exponent;
 
   /** @domName SVGComponentTransferFunctionElement.intercept */
-  abstract SVGAnimatedNumber get intercept;
+  SVGAnimatedNumber get intercept;
 
   /** @domName SVGComponentTransferFunctionElement.offset */
-  abstract SVGAnimatedNumber get offset;
+  SVGAnimatedNumber get offset;
 
   /** @domName SVGComponentTransferFunctionElement.slope */
-  abstract SVGAnimatedNumber get slope;
+  SVGAnimatedNumber get slope;
 
   /** @domName SVGComponentTransferFunctionElement.tableValues */
-  abstract SVGAnimatedNumberList get tableValues;
+  SVGAnimatedNumberList get tableValues;
 
   /** @domName SVGComponentTransferFunctionElement.type */
-  abstract SVGAnimatedEnumeration get type;
+  SVGAnimatedEnumeration get type;
 }
 // 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
@@ -27823,10 +27966,10 @@
 abstract class SVGCursorElement implements SVGElement, SVGURIReference, SVGTests, SVGExternalResourcesRequired {
 
   /** @domName SVGCursorElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGCursorElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 // 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
@@ -27951,7 +28094,7 @@
 abstract class SVGDocument implements Document {
 
   /** @domName SVGDocument.rootElement */
-  abstract SVGSVGElement get rootElement;
+  SVGSVGElement get rootElement;
 
   /** @domName SVGDocument.createEvent */
   Event $dom_createEvent(String eventType);
@@ -27973,6 +28116,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.
 
+
 /// @domName SVGElement
 abstract class SVGElement implements Element {
 
@@ -27988,10 +28132,10 @@
   String id;
 
   /** @domName SVGElement.ownerSVGElement */
-  abstract SVGSVGElement get ownerSVGElement;
+  SVGSVGElement get ownerSVGElement;
 
   /** @domName SVGElement.viewportElement */
-  abstract SVGElement get viewportElement;
+  SVGElement get viewportElement;
 
   /** @domName SVGElement.xmlbase */
   String xmlbase;
@@ -28013,7 +28157,7 @@
 
 class _SVGElementImpl extends _ElementImpl implements SVGElement {
   CSSClassSet get classes {
-    if (_cssClassSet === null) {
+    if (_cssClassSet == null) {
       _cssClassSet = new _AttributeClassSet(_ptr);
     }
     return _cssClassSet;
@@ -28078,28 +28222,28 @@
   SVGElementInstanceEvents get on;
 
   /** @domName SVGElementInstance.childNodes */
-  abstract List<SVGElementInstance> get childNodes;
+  List<SVGElementInstance> get childNodes;
 
   /** @domName SVGElementInstance.correspondingElement */
-  abstract SVGElement get correspondingElement;
+  SVGElement get correspondingElement;
 
   /** @domName SVGElementInstance.correspondingUseElement */
-  abstract SVGUseElement get correspondingUseElement;
+  SVGUseElement get correspondingUseElement;
 
   /** @domName SVGElementInstance.firstChild */
-  abstract SVGElementInstance get firstChild;
+  SVGElementInstance get firstChild;
 
   /** @domName SVGElementInstance.lastChild */
-  abstract SVGElementInstance get lastChild;
+  SVGElementInstance get lastChild;
 
   /** @domName SVGElementInstance.nextSibling */
-  abstract SVGElementInstance get nextSibling;
+  SVGElementInstance get nextSibling;
 
   /** @domName SVGElementInstance.parentNode */
-  abstract SVGElementInstance get parentNode;
+  SVGElementInstance get parentNode;
 
   /** @domName SVGElementInstance.previousSibling */
-  abstract SVGElementInstance get previousSibling;
+  SVGElementInstance get previousSibling;
 }
 
 abstract class SVGElementInstanceEvents implements Events {
@@ -28309,7 +28453,7 @@
   SVGElementInstance operator[](int index) native "SVGElementInstanceList_item_Callback";
 
   void operator[]=(int index, SVGElementInstance value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGElementInstance> mixins.
   // SVGElementInstance is the element type.
@@ -28326,15 +28470,15 @@
   // From Collection<SVGElementInstance>:
 
   void add(SVGElementInstance value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGElementInstance value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGElementInstance> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGElementInstance element) => _Collections.contains(this, element);
@@ -28350,38 +28494,38 @@
 
   bool some(bool f(SVGElementInstance element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGElementInstance>:
 
   void sort([Comparator<SVGElementInstance> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGElementInstance element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGElementInstance element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGElementInstance last() => this[length - 1];
+  SVGElementInstance get last => this[length - 1];
 
   SVGElementInstance removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGElementInstance> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGElementInstance initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGElementInstance> getRange(int start, int rangeLength) =>
@@ -28402,16 +28546,16 @@
 abstract class SVGEllipseElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGEllipseElement.cx */
-  abstract SVGAnimatedLength get cx;
+  SVGAnimatedLength get cx;
 
   /** @domName SVGEllipseElement.cy */
-  abstract SVGAnimatedLength get cy;
+  SVGAnimatedLength get cy;
 
   /** @domName SVGEllipseElement.rx */
-  abstract SVGAnimatedLength get rx;
+  SVGAnimatedLength get rx;
 
   /** @domName SVGEllipseElement.ry */
-  abstract SVGAnimatedLength get ry;
+  SVGAnimatedLength get ry;
 }
 // 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
@@ -28484,13 +28628,13 @@
   static const int SVG_WRONG_TYPE_ERR = 0;
 
   /** @domName SVGException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName SVGException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName SVGException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName SVGException.toString */
   String toString();
@@ -28522,7 +28666,7 @@
 abstract class SVGExternalResourcesRequired {
 
   /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  abstract SVGAnimatedBoolean get externalResourcesRequired;
+  SVGAnimatedBoolean get externalResourcesRequired;
 }
 // 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
@@ -28546,13 +28690,13 @@
   static const int SVG_FEBLEND_MODE_UNKNOWN = 0;
 
   /** @domName SVGFEBlendElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEBlendElement.in2 */
-  abstract SVGAnimatedString get in2;
+  SVGAnimatedString get in2;
 
   /** @domName SVGFEBlendElement.mode */
-  abstract SVGAnimatedEnumeration get mode;
+  SVGAnimatedEnumeration get mode;
 }
 // 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
@@ -28605,13 +28749,13 @@
   static const int SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
 
   /** @domName SVGFEColorMatrixElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEColorMatrixElement.type */
-  abstract SVGAnimatedEnumeration get type;
+  SVGAnimatedEnumeration get type;
 
   /** @domName SVGFEColorMatrixElement.values */
-  abstract SVGAnimatedNumberList get values;
+  SVGAnimatedNumberList get values;
 }
 // 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
@@ -28654,7 +28798,7 @@
 abstract class SVGFEComponentTransferElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFEComponentTransferElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 }
 // 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
@@ -28707,25 +28851,25 @@
   static const int SVG_FECOMPOSITE_OPERATOR_XOR = 5;
 
   /** @domName SVGFECompositeElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFECompositeElement.in2 */
-  abstract SVGAnimatedString get in2;
+  SVGAnimatedString get in2;
 
   /** @domName SVGFECompositeElement.k1 */
-  abstract SVGAnimatedNumber get k1;
+  SVGAnimatedNumber get k1;
 
   /** @domName SVGFECompositeElement.k2 */
-  abstract SVGAnimatedNumber get k2;
+  SVGAnimatedNumber get k2;
 
   /** @domName SVGFECompositeElement.k3 */
-  abstract SVGAnimatedNumber get k3;
+  SVGAnimatedNumber get k3;
 
   /** @domName SVGFECompositeElement.k4 */
-  abstract SVGAnimatedNumber get k4;
+  SVGAnimatedNumber get k4;
 
   /** @domName SVGFECompositeElement.operator */
-  abstract SVGAnimatedEnumeration get operator;
+  SVGAnimatedEnumeration get operator;
 }
 // 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
@@ -28784,40 +28928,40 @@
   static const int SVG_EDGEMODE_WRAP = 2;
 
   /** @domName SVGFEConvolveMatrixElement.bias */
-  abstract SVGAnimatedNumber get bias;
+  SVGAnimatedNumber get bias;
 
   /** @domName SVGFEConvolveMatrixElement.divisor */
-  abstract SVGAnimatedNumber get divisor;
+  SVGAnimatedNumber get divisor;
 
   /** @domName SVGFEConvolveMatrixElement.edgeMode */
-  abstract SVGAnimatedEnumeration get edgeMode;
+  SVGAnimatedEnumeration get edgeMode;
 
   /** @domName SVGFEConvolveMatrixElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEConvolveMatrixElement.kernelMatrix */
-  abstract SVGAnimatedNumberList get kernelMatrix;
+  SVGAnimatedNumberList get kernelMatrix;
 
   /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthX */
-  abstract SVGAnimatedNumber get kernelUnitLengthX;
+  SVGAnimatedNumber get kernelUnitLengthX;
 
   /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthY */
-  abstract SVGAnimatedNumber get kernelUnitLengthY;
+  SVGAnimatedNumber get kernelUnitLengthY;
 
   /** @domName SVGFEConvolveMatrixElement.orderX */
-  abstract SVGAnimatedInteger get orderX;
+  SVGAnimatedInteger get orderX;
 
   /** @domName SVGFEConvolveMatrixElement.orderY */
-  abstract SVGAnimatedInteger get orderY;
+  SVGAnimatedInteger get orderY;
 
   /** @domName SVGFEConvolveMatrixElement.preserveAlpha */
-  abstract SVGAnimatedBoolean get preserveAlpha;
+  SVGAnimatedBoolean get preserveAlpha;
 
   /** @domName SVGFEConvolveMatrixElement.targetX */
-  abstract SVGAnimatedInteger get targetX;
+  SVGAnimatedInteger get targetX;
 
   /** @domName SVGFEConvolveMatrixElement.targetY */
-  abstract SVGAnimatedInteger get targetY;
+  SVGAnimatedInteger get targetY;
 }
 // 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
@@ -28878,19 +29022,19 @@
 abstract class SVGFEDiffuseLightingElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFEDiffuseLightingElement.diffuseConstant */
-  abstract SVGAnimatedNumber get diffuseConstant;
+  SVGAnimatedNumber get diffuseConstant;
 
   /** @domName SVGFEDiffuseLightingElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthX */
-  abstract SVGAnimatedNumber get kernelUnitLengthX;
+  SVGAnimatedNumber get kernelUnitLengthX;
 
   /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthY */
-  abstract SVGAnimatedNumber get kernelUnitLengthY;
+  SVGAnimatedNumber get kernelUnitLengthY;
 
   /** @domName SVGFEDiffuseLightingElement.surfaceScale */
-  abstract SVGAnimatedNumber get surfaceScale;
+  SVGAnimatedNumber get surfaceScale;
 }
 // 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
@@ -28947,19 +29091,19 @@
   static const int SVG_CHANNEL_UNKNOWN = 0;
 
   /** @domName SVGFEDisplacementMapElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEDisplacementMapElement.in2 */
-  abstract SVGAnimatedString get in2;
+  SVGAnimatedString get in2;
 
   /** @domName SVGFEDisplacementMapElement.scale */
-  abstract SVGAnimatedNumber get scale;
+  SVGAnimatedNumber get scale;
 
   /** @domName SVGFEDisplacementMapElement.xChannelSelector */
-  abstract SVGAnimatedEnumeration get xChannelSelector;
+  SVGAnimatedEnumeration get xChannelSelector;
 
   /** @domName SVGFEDisplacementMapElement.yChannelSelector */
-  abstract SVGAnimatedEnumeration get yChannelSelector;
+  SVGAnimatedEnumeration get yChannelSelector;
 }
 // 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
@@ -29006,10 +29150,10 @@
 abstract class SVGFEDistantLightElement implements SVGElement {
 
   /** @domName SVGFEDistantLightElement.azimuth */
-  abstract SVGAnimatedNumber get azimuth;
+  SVGAnimatedNumber get azimuth;
 
   /** @domName SVGFEDistantLightElement.elevation */
-  abstract SVGAnimatedNumber get elevation;
+  SVGAnimatedNumber get elevation;
 }
 // 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
@@ -29034,19 +29178,19 @@
 abstract class SVGFEDropShadowElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFEDropShadowElement.dx */
-  abstract SVGAnimatedNumber get dx;
+  SVGAnimatedNumber get dx;
 
   /** @domName SVGFEDropShadowElement.dy */
-  abstract SVGAnimatedNumber get dy;
+  SVGAnimatedNumber get dy;
 
   /** @domName SVGFEDropShadowElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEDropShadowElement.stdDeviationX */
-  abstract SVGAnimatedNumber get stdDeviationX;
+  SVGAnimatedNumber get stdDeviationX;
 
   /** @domName SVGFEDropShadowElement.stdDeviationY */
-  abstract SVGAnimatedNumber get stdDeviationY;
+  SVGAnimatedNumber get stdDeviationY;
 
   /** @domName SVGFEDropShadowElement.setStdDeviation */
   void setStdDeviation(num stdDeviationX, num stdDeviationY);
@@ -29204,13 +29348,13 @@
 abstract class SVGFEGaussianBlurElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFEGaussianBlurElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEGaussianBlurElement.stdDeviationX */
-  abstract SVGAnimatedNumber get stdDeviationX;
+  SVGAnimatedNumber get stdDeviationX;
 
   /** @domName SVGFEGaussianBlurElement.stdDeviationY */
-  abstract SVGAnimatedNumber get stdDeviationY;
+  SVGAnimatedNumber get stdDeviationY;
 
   /** @domName SVGFEGaussianBlurElement.setStdDeviation */
   void setStdDeviation(num stdDeviationX, num stdDeviationY);
@@ -29258,7 +29402,7 @@
 abstract class SVGFEImageElement implements SVGElement, SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFEImageElement.preserveAspectRatio */
-  abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
 }
 // 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
@@ -29343,7 +29487,7 @@
 abstract class SVGFEMergeNodeElement implements SVGElement {
 
   /** @domName SVGFEMergeNodeElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 }
 // 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
@@ -29372,16 +29516,16 @@
   static const int SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
 
   /** @domName SVGFEMorphologyElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFEMorphologyElement.operator */
-  abstract SVGAnimatedEnumeration get operator;
+  SVGAnimatedEnumeration get operator;
 
   /** @domName SVGFEMorphologyElement.radiusX */
-  abstract SVGAnimatedNumber get radiusX;
+  SVGAnimatedNumber get radiusX;
 
   /** @domName SVGFEMorphologyElement.radiusY */
-  abstract SVGAnimatedNumber get radiusY;
+  SVGAnimatedNumber get radiusY;
 
   /** @domName SVGFEMorphologyElement.setRadius */
   void setRadius(num radiusX, num radiusY);
@@ -29431,13 +29575,13 @@
 abstract class SVGFEOffsetElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFEOffsetElement.dx */
-  abstract SVGAnimatedNumber get dx;
+  SVGAnimatedNumber get dx;
 
   /** @domName SVGFEOffsetElement.dy */
-  abstract SVGAnimatedNumber get dy;
+  SVGAnimatedNumber get dy;
 
   /** @domName SVGFEOffsetElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 }
 // 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
@@ -29480,13 +29624,13 @@
 abstract class SVGFEPointLightElement implements SVGElement {
 
   /** @domName SVGFEPointLightElement.x */
-  abstract SVGAnimatedNumber get x;
+  SVGAnimatedNumber get x;
 
   /** @domName SVGFEPointLightElement.y */
-  abstract SVGAnimatedNumber get y;
+  SVGAnimatedNumber get y;
 
   /** @domName SVGFEPointLightElement.z */
-  abstract SVGAnimatedNumber get z;
+  SVGAnimatedNumber get z;
 }
 // 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
@@ -29513,16 +29657,16 @@
 abstract class SVGFESpecularLightingElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFESpecularLightingElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 
   /** @domName SVGFESpecularLightingElement.specularConstant */
-  abstract SVGAnimatedNumber get specularConstant;
+  SVGAnimatedNumber get specularConstant;
 
   /** @domName SVGFESpecularLightingElement.specularExponent */
-  abstract SVGAnimatedNumber get specularExponent;
+  SVGAnimatedNumber get specularExponent;
 
   /** @domName SVGFESpecularLightingElement.surfaceScale */
-  abstract SVGAnimatedNumber get surfaceScale;
+  SVGAnimatedNumber get surfaceScale;
 }
 // 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
@@ -29567,28 +29711,28 @@
 abstract class SVGFESpotLightElement implements SVGElement {
 
   /** @domName SVGFESpotLightElement.limitingConeAngle */
-  abstract SVGAnimatedNumber get limitingConeAngle;
+  SVGAnimatedNumber get limitingConeAngle;
 
   /** @domName SVGFESpotLightElement.pointsAtX */
-  abstract SVGAnimatedNumber get pointsAtX;
+  SVGAnimatedNumber get pointsAtX;
 
   /** @domName SVGFESpotLightElement.pointsAtY */
-  abstract SVGAnimatedNumber get pointsAtY;
+  SVGAnimatedNumber get pointsAtY;
 
   /** @domName SVGFESpotLightElement.pointsAtZ */
-  abstract SVGAnimatedNumber get pointsAtZ;
+  SVGAnimatedNumber get pointsAtZ;
 
   /** @domName SVGFESpotLightElement.specularExponent */
-  abstract SVGAnimatedNumber get specularExponent;
+  SVGAnimatedNumber get specularExponent;
 
   /** @domName SVGFESpotLightElement.x */
-  abstract SVGAnimatedNumber get x;
+  SVGAnimatedNumber get x;
 
   /** @domName SVGFESpotLightElement.y */
-  abstract SVGAnimatedNumber get y;
+  SVGAnimatedNumber get y;
 
   /** @domName SVGFESpotLightElement.z */
-  abstract SVGAnimatedNumber get z;
+  SVGAnimatedNumber get z;
 }
 // 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
@@ -29625,7 +29769,7 @@
 abstract class SVGFETileElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
 
   /** @domName SVGFETileElement.in1 */
-  abstract SVGAnimatedString get in1;
+  SVGAnimatedString get in1;
 }
 // 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
@@ -29676,22 +29820,22 @@
   static const int SVG_TURBULENCE_TYPE_UNKNOWN = 0;
 
   /** @domName SVGFETurbulenceElement.baseFrequencyX */
-  abstract SVGAnimatedNumber get baseFrequencyX;
+  SVGAnimatedNumber get baseFrequencyX;
 
   /** @domName SVGFETurbulenceElement.baseFrequencyY */
-  abstract SVGAnimatedNumber get baseFrequencyY;
+  SVGAnimatedNumber get baseFrequencyY;
 
   /** @domName SVGFETurbulenceElement.numOctaves */
-  abstract SVGAnimatedInteger get numOctaves;
+  SVGAnimatedInteger get numOctaves;
 
   /** @domName SVGFETurbulenceElement.seed */
-  abstract SVGAnimatedNumber get seed;
+  SVGAnimatedNumber get seed;
 
   /** @domName SVGFETurbulenceElement.stitchTiles */
-  abstract SVGAnimatedEnumeration get stitchTiles;
+  SVGAnimatedEnumeration get stitchTiles;
 
   /** @domName SVGFETurbulenceElement.type */
-  abstract SVGAnimatedEnumeration get type;
+  SVGAnimatedEnumeration get type;
 }
 // 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
@@ -29740,28 +29884,28 @@
 abstract class SVGFilterElement implements SVGElement, SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
 
   /** @domName SVGFilterElement.filterResX */
-  abstract SVGAnimatedInteger get filterResX;
+  SVGAnimatedInteger get filterResX;
 
   /** @domName SVGFilterElement.filterResY */
-  abstract SVGAnimatedInteger get filterResY;
+  SVGAnimatedInteger get filterResY;
 
   /** @domName SVGFilterElement.filterUnits */
-  abstract SVGAnimatedEnumeration get filterUnits;
+  SVGAnimatedEnumeration get filterUnits;
 
   /** @domName SVGFilterElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGFilterElement.primitiveUnits */
-  abstract SVGAnimatedEnumeration get primitiveUnits;
+  SVGAnimatedEnumeration get primitiveUnits;
 
   /** @domName SVGFilterElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGFilterElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGFilterElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 
   /** @domName SVGFilterElement.setFilterRes */
   void setFilterRes(int filterResX, int filterResY);
@@ -29821,19 +29965,19 @@
 abstract class SVGFilterPrimitiveStandardAttributes implements SVGStylable {
 
   /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  abstract SVGAnimatedString get result;
+  SVGAnimatedString get result;
 
   /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 // 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
@@ -29845,10 +29989,10 @@
 abstract class SVGFitToViewBox {
 
   /** @domName SVGFitToViewBox.preserveAspectRatio */
-  abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
 
   /** @domName SVGFitToViewBox.viewBox */
-  abstract SVGAnimatedRect get viewBox;
+  SVGAnimatedRect get viewBox;
 }
 // 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
@@ -29968,16 +30112,16 @@
 abstract class SVGForeignObjectElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGForeignObjectElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGForeignObjectElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGForeignObjectElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGForeignObjectElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 // 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
@@ -30194,13 +30338,13 @@
   static const int SVG_SPREADMETHOD_UNKNOWN = 0;
 
   /** @domName SVGGradientElement.gradientTransform */
-  abstract SVGAnimatedTransformList get gradientTransform;
+  SVGAnimatedTransformList get gradientTransform;
 
   /** @domName SVGGradientElement.gradientUnits */
-  abstract SVGAnimatedEnumeration get gradientUnits;
+  SVGAnimatedEnumeration get gradientUnits;
 
   /** @domName SVGGradientElement.spreadMethod */
-  abstract SVGAnimatedEnumeration get spreadMethod;
+  SVGAnimatedEnumeration get spreadMethod;
 }
 // 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
@@ -30255,19 +30399,19 @@
 abstract class SVGImageElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGImageElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGImageElement.preserveAspectRatio */
-  abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
 
   /** @domName SVGImageElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGImageElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGImageElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 // 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
@@ -30375,7 +30519,7 @@
   static const int SVG_LENGTHTYPE_UNKNOWN = 0;
 
   /** @domName SVGLength.unitType */
-  abstract int get unitType;
+  int get unitType;
 
   /** @domName SVGLength.value */
   num value;
@@ -30429,7 +30573,7 @@
 abstract class SVGLengthList implements List<SVGLength> {
 
   /** @domName SVGLengthList.numberOfItems */
-  abstract int get numberOfItems;
+  int get numberOfItems;
 
   /** @domName SVGLengthList.appendItem */
   SVGLength appendItem(SVGLength item);
@@ -30465,7 +30609,7 @@
   SVGLength operator[](int index) native "SVGLengthList_item_Callback";
 
   void operator[]=(int index, SVGLength value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGLength> mixins.
   // SVGLength is the element type.
@@ -30482,15 +30626,15 @@
   // From Collection<SVGLength>:
 
   void add(SVGLength value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGLength value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGLength> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGLength element) => _Collections.contains(this, element);
@@ -30506,38 +30650,38 @@
 
   bool some(bool f(SVGLength element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGLength>:
 
   void sort([Comparator<SVGLength> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGLength element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGLength element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGLength last() => this[length - 1];
+  SVGLength get last => this[length - 1];
 
   SVGLength removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGLength> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGLength initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGLength> getRange(int start, int rangeLength) =>
@@ -30570,16 +30714,16 @@
 abstract class SVGLineElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGLineElement.x1 */
-  abstract SVGAnimatedLength get x1;
+  SVGAnimatedLength get x1;
 
   /** @domName SVGLineElement.x2 */
-  abstract SVGAnimatedLength get x2;
+  SVGAnimatedLength get x2;
 
   /** @domName SVGLineElement.y1 */
-  abstract SVGAnimatedLength get y1;
+  SVGAnimatedLength get y1;
 
   /** @domName SVGLineElement.y2 */
-  abstract SVGAnimatedLength get y2;
+  SVGAnimatedLength get y2;
 }
 // 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
@@ -30646,16 +30790,16 @@
 abstract class SVGLinearGradientElement implements SVGGradientElement {
 
   /** @domName SVGLinearGradientElement.x1 */
-  abstract SVGAnimatedLength get x1;
+  SVGAnimatedLength get x1;
 
   /** @domName SVGLinearGradientElement.x2 */
-  abstract SVGAnimatedLength get x2;
+  SVGAnimatedLength get x2;
 
   /** @domName SVGLinearGradientElement.y1 */
-  abstract SVGAnimatedLength get y1;
+  SVGAnimatedLength get y1;
 
   /** @domName SVGLinearGradientElement.y2 */
-  abstract SVGAnimatedLength get y2;
+  SVGAnimatedLength get y2;
 }
 // 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
@@ -30684,10 +30828,10 @@
 abstract class SVGLocatable {
 
   /** @domName SVGLocatable.farthestViewportElement */
-  abstract SVGElement get farthestViewportElement;
+  SVGElement get farthestViewportElement;
 
   /** @domName SVGLocatable.nearestViewportElement */
-  abstract SVGElement get nearestViewportElement;
+  SVGElement get nearestViewportElement;
 
   /** @domName SVGLocatable.getBBox */
   SVGRect getBBox();
@@ -30745,25 +30889,25 @@
   static const int SVG_MARKER_ORIENT_UNKNOWN = 0;
 
   /** @domName SVGMarkerElement.markerHeight */
-  abstract SVGAnimatedLength get markerHeight;
+  SVGAnimatedLength get markerHeight;
 
   /** @domName SVGMarkerElement.markerUnits */
-  abstract SVGAnimatedEnumeration get markerUnits;
+  SVGAnimatedEnumeration get markerUnits;
 
   /** @domName SVGMarkerElement.markerWidth */
-  abstract SVGAnimatedLength get markerWidth;
+  SVGAnimatedLength get markerWidth;
 
   /** @domName SVGMarkerElement.orientAngle */
-  abstract SVGAnimatedAngle get orientAngle;
+  SVGAnimatedAngle get orientAngle;
 
   /** @domName SVGMarkerElement.orientType */
-  abstract SVGAnimatedEnumeration get orientType;
+  SVGAnimatedEnumeration get orientType;
 
   /** @domName SVGMarkerElement.refX */
-  abstract SVGAnimatedLength get refX;
+  SVGAnimatedLength get refX;
 
   /** @domName SVGMarkerElement.refY */
-  abstract SVGAnimatedLength get refY;
+  SVGAnimatedLength get refY;
 
   /** @domName SVGMarkerElement.setOrientToAngle */
   void setOrientToAngle(SVGAngle angle);
@@ -30828,22 +30972,22 @@
 abstract class SVGMaskElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
 
   /** @domName SVGMaskElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGMaskElement.maskContentUnits */
-  abstract SVGAnimatedEnumeration get maskContentUnits;
+  SVGAnimatedEnumeration get maskContentUnits;
 
   /** @domName SVGMaskElement.maskUnits */
-  abstract SVGAnimatedEnumeration get maskUnits;
+  SVGAnimatedEnumeration get maskUnits;
 
   /** @domName SVGMaskElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGMaskElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGMaskElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 // 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
@@ -31076,7 +31220,7 @@
 abstract class SVGNumberList implements List<SVGNumber> {
 
   /** @domName SVGNumberList.numberOfItems */
-  abstract int get numberOfItems;
+  int get numberOfItems;
 
   /** @domName SVGNumberList.appendItem */
   SVGNumber appendItem(SVGNumber item);
@@ -31112,7 +31256,7 @@
   SVGNumber operator[](int index) native "SVGNumberList_item_Callback";
 
   void operator[]=(int index, SVGNumber value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGNumber> mixins.
   // SVGNumber is the element type.
@@ -31129,15 +31273,15 @@
   // From Collection<SVGNumber>:
 
   void add(SVGNumber value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGNumber value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGNumber> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGNumber element) => _Collections.contains(this, element);
@@ -31153,38 +31297,38 @@
 
   bool some(bool f(SVGNumber element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGNumber>:
 
   void sort([Comparator<SVGNumber> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGNumber element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGNumber element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGNumber last() => this[length - 1];
+  SVGNumber get last => this[length - 1];
 
   SVGNumber removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGNumber> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGNumber initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGNumber> getRange(int start, int rangeLength) =>
@@ -31237,10 +31381,10 @@
   static const int SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106;
 
   /** @domName SVGPaint.paintType */
-  abstract int get paintType;
+  int get paintType;
 
   /** @domName SVGPaint.uri */
-  abstract String get uri;
+  String get uri;
 
   /** @domName SVGPaint.setPaint */
   void setPaint(int paintType, String uri, String rgbColor, String iccColor);
@@ -31275,19 +31419,19 @@
 abstract class SVGPathElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGPathElement.animatedNormalizedPathSegList */
-  abstract SVGPathSegList get animatedNormalizedPathSegList;
+  SVGPathSegList get animatedNormalizedPathSegList;
 
   /** @domName SVGPathElement.animatedPathSegList */
-  abstract SVGPathSegList get animatedPathSegList;
+  SVGPathSegList get animatedPathSegList;
 
   /** @domName SVGPathElement.normalizedPathSegList */
-  abstract SVGPathSegList get normalizedPathSegList;
+  SVGPathSegList get normalizedPathSegList;
 
   /** @domName SVGPathElement.pathLength */
-  abstract SVGAnimatedNumber get pathLength;
+  SVGAnimatedNumber get pathLength;
 
   /** @domName SVGPathElement.pathSegList */
-  abstract SVGPathSegList get pathSegList;
+  SVGPathSegList get pathSegList;
 
   /** @domName SVGPathElement.createSVGPathSegArcAbs */
   SVGPathSegArcAbs createSVGPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag);
@@ -31506,10 +31650,10 @@
   static const int PATHSEG_UNKNOWN = 0;
 
   /** @domName SVGPathSeg.pathSegType */
-  abstract int get pathSegType;
+  int get pathSegType;
 
   /** @domName SVGPathSeg.pathSegTypeAsLetter */
-  abstract String get pathSegTypeAsLetter;
+  String get pathSegTypeAsLetter;
 }
 // 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
@@ -32218,7 +32362,7 @@
 abstract class SVGPathSegList implements List<SVGPathSeg> {
 
   /** @domName SVGPathSegList.numberOfItems */
-  abstract int get numberOfItems;
+  int get numberOfItems;
 
   /** @domName SVGPathSegList.appendItem */
   SVGPathSeg appendItem(SVGPathSeg newItem);
@@ -32254,7 +32398,7 @@
   SVGPathSeg operator[](int index) native "SVGPathSegList_item_Callback";
 
   void operator[]=(int index, SVGPathSeg value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGPathSeg> mixins.
   // SVGPathSeg is the element type.
@@ -32271,15 +32415,15 @@
   // From Collection<SVGPathSeg>:
 
   void add(SVGPathSeg value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGPathSeg value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGPathSeg> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGPathSeg element) => _Collections.contains(this, element);
@@ -32295,38 +32439,38 @@
 
   bool some(bool f(SVGPathSeg element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGPathSeg>:
 
   void sort([Comparator<SVGPathSeg> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGPathSeg element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGPathSeg element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGPathSeg last() => this[length - 1];
+  SVGPathSeg get last => this[length - 1];
 
   SVGPathSeg removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGPathSeg> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGPathSeg initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGPathSeg> getRange(int start, int rangeLength) =>
@@ -32423,25 +32567,25 @@
 abstract class SVGPatternElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGFitToViewBox {
 
   /** @domName SVGPatternElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGPatternElement.patternContentUnits */
-  abstract SVGAnimatedEnumeration get patternContentUnits;
+  SVGAnimatedEnumeration get patternContentUnits;
 
   /** @domName SVGPatternElement.patternTransform */
-  abstract SVGAnimatedTransformList get patternTransform;
+  SVGAnimatedTransformList get patternTransform;
 
   /** @domName SVGPatternElement.patternUnits */
-  abstract SVGAnimatedEnumeration get patternUnits;
+  SVGAnimatedEnumeration get patternUnits;
 
   /** @domName SVGPatternElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGPatternElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGPatternElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 // 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
@@ -32543,7 +32687,7 @@
 abstract class SVGPointList {
 
   /** @domName SVGPointList.numberOfItems */
-  abstract int get numberOfItems;
+  int get numberOfItems;
 
   /** @domName SVGPointList.appendItem */
   SVGPoint appendItem(SVGPoint item);
@@ -32601,10 +32745,10 @@
 abstract class SVGPolygonElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGPolygonElement.animatedPoints */
-  abstract SVGPointList get animatedPoints;
+  SVGPointList get animatedPoints;
 
   /** @domName SVGPolygonElement.points */
-  abstract SVGPointList get points;
+  SVGPointList get points;
 }
 // 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
@@ -32667,10 +32811,10 @@
 abstract class SVGPolylineElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGPolylineElement.animatedPoints */
-  abstract SVGPointList get animatedPoints;
+  SVGPointList get animatedPoints;
 
   /** @domName SVGPolylineElement.points */
-  abstract SVGPointList get points;
+  SVGPointList get points;
 }
 // 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
@@ -32793,19 +32937,22 @@
 abstract class SVGRadialGradientElement implements SVGGradientElement {
 
   /** @domName SVGRadialGradientElement.cx */
-  abstract SVGAnimatedLength get cx;
+  SVGAnimatedLength get cx;
 
   /** @domName SVGRadialGradientElement.cy */
-  abstract SVGAnimatedLength get cy;
+  SVGAnimatedLength get cy;
+
+  /** @domName SVGRadialGradientElement.fr */
+  SVGAnimatedLength get fr;
 
   /** @domName SVGRadialGradientElement.fx */
-  abstract SVGAnimatedLength get fx;
+  SVGAnimatedLength get fx;
 
   /** @domName SVGRadialGradientElement.fy */
-  abstract SVGAnimatedLength get fy;
+  SVGAnimatedLength get fy;
 
   /** @domName SVGRadialGradientElement.r */
-  abstract SVGAnimatedLength get r;
+  SVGAnimatedLength get r;
 }
 // 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
@@ -32819,6 +32966,8 @@
 
   SVGAnimatedLength get cy native "SVGRadialGradientElement_cy_Getter";
 
+  SVGAnimatedLength get fr native "SVGRadialGradientElement_fr_Getter";
+
   SVGAnimatedLength get fx native "SVGRadialGradientElement_fx_Getter";
 
   SVGAnimatedLength get fy native "SVGRadialGradientElement_fy_Getter";
@@ -32857,22 +33006,22 @@
 abstract class SVGRectElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGRectElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGRectElement.rx */
-  abstract SVGAnimatedLength get rx;
+  SVGAnimatedLength get rx;
 
   /** @domName SVGRectElement.ry */
-  abstract SVGAnimatedLength get ry;
+  SVGAnimatedLength get ry;
 
   /** @domName SVGRectElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGRectElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGRectElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 // 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
@@ -32992,6 +33141,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.
 
+
 /// @domName SVGSVGElement
 abstract class SVGSVGElement extends SVGElement implements SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGLocatable, SVGFitToViewBox, SVGZoomAndPan {
   factory SVGSVGElement() => _SVGSVGElementFactoryProvider.createSVGSVGElement();
@@ -33007,40 +33157,40 @@
   num currentScale;
 
   /** @domName SVGSVGElement.currentTranslate */
-  abstract SVGPoint get currentTranslate;
+  SVGPoint get currentTranslate;
 
   /** @domName SVGSVGElement.currentView */
-  abstract SVGViewSpec get currentView;
+  SVGViewSpec get currentView;
 
   /** @domName SVGSVGElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGSVGElement.pixelUnitToMillimeterX */
-  abstract num get pixelUnitToMillimeterX;
+  num get pixelUnitToMillimeterX;
 
   /** @domName SVGSVGElement.pixelUnitToMillimeterY */
-  abstract num get pixelUnitToMillimeterY;
+  num get pixelUnitToMillimeterY;
 
   /** @domName SVGSVGElement.screenPixelToMillimeterX */
-  abstract num get screenPixelToMillimeterX;
+  num get screenPixelToMillimeterX;
 
   /** @domName SVGSVGElement.screenPixelToMillimeterY */
-  abstract num get screenPixelToMillimeterY;
+  num get screenPixelToMillimeterY;
 
   /** @domName SVGSVGElement.useCurrentView */
-  abstract bool get useCurrentView;
+  bool get useCurrentView;
 
   /** @domName SVGSVGElement.viewport */
-  abstract SVGRect get viewport;
+  SVGRect get viewport;
 
   /** @domName SVGSVGElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGSVGElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGSVGElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 
   /** @domName SVGSVGElement.animationsPaused */
   bool animationsPaused();
@@ -33304,7 +33454,7 @@
 abstract class SVGStopElement implements SVGElement, SVGStylable {
 
   /** @domName SVGStopElement.offset */
-  abstract SVGAnimatedNumber get offset;
+  SVGAnimatedNumber get offset;
 }
 // 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
@@ -33333,7 +33483,7 @@
 abstract class SVGStringList implements List<String> {
 
   /** @domName SVGStringList.numberOfItems */
-  abstract int get numberOfItems;
+  int get numberOfItems;
 
   /** @domName SVGStringList.appendItem */
   String appendItem(String item);
@@ -33369,7 +33519,7 @@
   String operator[](int index) native "SVGStringList_item_Callback";
 
   void operator[]=(int index, String value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<String> mixins.
   // String is the element type.
@@ -33386,15 +33536,15 @@
   // From Collection<String>:
 
   void add(String value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(String value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<String> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(String element) => _Collections.contains(this, element);
@@ -33410,38 +33560,38 @@
 
   bool some(bool f(String element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<String>:
 
   void sort([Comparator<String> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(String element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(String element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  String last() => this[length - 1];
+  String get last => this[length - 1];
 
   String removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [String initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<String> getRange(int start, int rangeLength) =>
@@ -33474,10 +33624,10 @@
 abstract class SVGStylable {
 
   /** @domName SVGStylable.className */
-  abstract SVGAnimatedString get $dom_svgClassName;
+  SVGAnimatedString get $dom_svgClassName;
 
   /** @domName SVGStylable.style */
-  abstract CSSStyleDeclaration get style;
+  CSSStyleDeclaration get style;
 
   /** @domName SVGStylable.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name);
@@ -33678,13 +33828,13 @@
 abstract class SVGTests {
 
   /** @domName SVGTests.requiredExtensions */
-  abstract SVGStringList get requiredExtensions;
+  SVGStringList get requiredExtensions;
 
   /** @domName SVGTests.requiredFeatures */
-  abstract SVGStringList get requiredFeatures;
+  SVGStringList get requiredFeatures;
 
   /** @domName SVGTests.systemLanguage */
-  abstract SVGStringList get systemLanguage;
+  SVGStringList get systemLanguage;
 
   /** @domName SVGTests.hasExtension */
   bool hasExtension(String extension);
@@ -33705,10 +33855,10 @@
   static const int LENGTHADJUST_UNKNOWN = 0;
 
   /** @domName SVGTextContentElement.lengthAdjust */
-  abstract SVGAnimatedEnumeration get lengthAdjust;
+  SVGAnimatedEnumeration get lengthAdjust;
 
   /** @domName SVGTextContentElement.textLength */
-  abstract SVGAnimatedLength get textLength;
+  SVGAnimatedLength get textLength;
 
   /** @domName SVGTextContentElement.getCharNumAtPosition */
   int getCharNumAtPosition(SVGPoint point);
@@ -33846,13 +33996,13 @@
   static const int TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
 
   /** @domName SVGTextPathElement.method */
-  abstract SVGAnimatedEnumeration get method;
+  SVGAnimatedEnumeration get method;
 
   /** @domName SVGTextPathElement.spacing */
-  abstract SVGAnimatedEnumeration get spacing;
+  SVGAnimatedEnumeration get spacing;
 
   /** @domName SVGTextPathElement.startOffset */
-  abstract SVGAnimatedLength get startOffset;
+  SVGAnimatedLength get startOffset;
 }
 // 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
@@ -33881,19 +34031,19 @@
 abstract class SVGTextPositioningElement implements SVGTextContentElement {
 
   /** @domName SVGTextPositioningElement.dx */
-  abstract SVGAnimatedLengthList get dx;
+  SVGAnimatedLengthList get dx;
 
   /** @domName SVGTextPositioningElement.dy */
-  abstract SVGAnimatedLengthList get dy;
+  SVGAnimatedLengthList get dy;
 
   /** @domName SVGTextPositioningElement.rotate */
-  abstract SVGAnimatedNumberList get rotate;
+  SVGAnimatedNumberList get rotate;
 
   /** @domName SVGTextPositioningElement.x */
-  abstract SVGAnimatedLengthList get x;
+  SVGAnimatedLengthList get x;
 
   /** @domName SVGTextPositioningElement.y */
-  abstract SVGAnimatedLengthList get y;
+  SVGAnimatedLengthList get y;
 }
 // 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
@@ -33970,13 +34120,13 @@
   static const int SVG_TRANSFORM_UNKNOWN = 0;
 
   /** @domName SVGTransform.angle */
-  abstract num get angle;
+  num get angle;
 
   /** @domName SVGTransform.matrix */
-  abstract SVGMatrix get matrix;
+  SVGMatrix get matrix;
 
   /** @domName SVGTransform.type */
-  abstract int get type;
+  int get type;
 
   /** @domName SVGTransform.setMatrix */
   void setMatrix(SVGMatrix matrix);
@@ -34033,7 +34183,7 @@
 abstract class SVGTransformList implements List<SVGTransform> {
 
   /** @domName SVGTransformList.numberOfItems */
-  abstract int get numberOfItems;
+  int get numberOfItems;
 
   /** @domName SVGTransformList.appendItem */
   SVGTransform appendItem(SVGTransform item);
@@ -34075,7 +34225,7 @@
   SVGTransform operator[](int index) native "SVGTransformList_item_Callback";
 
   void operator[]=(int index, SVGTransform value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SVGTransform> mixins.
   // SVGTransform is the element type.
@@ -34092,15 +34242,15 @@
   // From Collection<SVGTransform>:
 
   void add(SVGTransform value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SVGTransform value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SVGTransform> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SVGTransform element) => _Collections.contains(this, element);
@@ -34116,38 +34266,38 @@
 
   bool some(bool f(SVGTransform element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SVGTransform>:
 
   void sort([Comparator<SVGTransform> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SVGTransform element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SVGTransform element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGTransform last() => this[length - 1];
+  SVGTransform get last => this[length - 1];
 
   SVGTransform removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SVGTransform> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SVGTransform initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SVGTransform> getRange(int start, int rangeLength) =>
@@ -34184,7 +34334,7 @@
 abstract class SVGTransformable implements SVGLocatable {
 
   /** @domName SVGTransformable.transform */
-  abstract SVGAnimatedTransformList get transform;
+  SVGAnimatedTransformList get transform;
 }
 // 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
@@ -34196,7 +34346,7 @@
 abstract class SVGURIReference {
 
   /** @domName SVGURIReference.href */
-  abstract SVGAnimatedString get href;
+  SVGAnimatedString get href;
 }
 // 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
@@ -34232,22 +34382,22 @@
 abstract class SVGUseElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
 
   /** @domName SVGUseElement.animatedInstanceRoot */
-  abstract SVGElementInstance get animatedInstanceRoot;
+  SVGElementInstance get animatedInstanceRoot;
 
   /** @domName SVGUseElement.height */
-  abstract SVGAnimatedLength get height;
+  SVGAnimatedLength get height;
 
   /** @domName SVGUseElement.instanceRoot */
-  abstract SVGElementInstance get instanceRoot;
+  SVGElementInstance get instanceRoot;
 
   /** @domName SVGUseElement.width */
-  abstract SVGAnimatedLength get width;
+  SVGAnimatedLength get width;
 
   /** @domName SVGUseElement.x */
-  abstract SVGAnimatedLength get x;
+  SVGAnimatedLength get x;
 
   /** @domName SVGUseElement.y */
-  abstract SVGAnimatedLength get y;
+  SVGAnimatedLength get y;
 }
 // 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
@@ -34338,7 +34488,7 @@
 abstract class SVGViewElement implements SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox, SVGZoomAndPan {
 
   /** @domName SVGViewElement.viewTarget */
-  abstract SVGStringList get viewTarget;
+  SVGStringList get viewTarget;
 }
 // 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
@@ -34371,28 +34521,28 @@
 abstract class SVGViewSpec {
 
   /** @domName SVGViewSpec.preserveAspectRatio */
-  abstract SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
 
   /** @domName SVGViewSpec.preserveAspectRatioString */
-  abstract String get preserveAspectRatioString;
+  String get preserveAspectRatioString;
 
   /** @domName SVGViewSpec.transform */
-  abstract SVGTransformList get transform;
+  SVGTransformList get transform;
 
   /** @domName SVGViewSpec.transformString */
-  abstract String get transformString;
+  String get transformString;
 
   /** @domName SVGViewSpec.viewBox */
-  abstract SVGAnimatedRect get viewBox;
+  SVGAnimatedRect get viewBox;
 
   /** @domName SVGViewSpec.viewBoxString */
-  abstract String get viewBoxString;
+  String get viewBoxString;
 
   /** @domName SVGViewSpec.viewTarget */
-  abstract SVGElement get viewTarget;
+  SVGElement get viewTarget;
 
   /** @domName SVGViewSpec.viewTargetString */
-  abstract String get viewTargetString;
+  String get viewTargetString;
 
   /** @domName SVGViewSpec.zoomAndPan */
   int zoomAndPan;
@@ -34454,19 +34604,19 @@
 abstract class SVGZoomEvent implements UIEvent {
 
   /** @domName SVGZoomEvent.newScale */
-  abstract num get newScale;
+  num get newScale;
 
   /** @domName SVGZoomEvent.newTranslate */
-  abstract SVGPoint get newTranslate;
+  SVGPoint get newTranslate;
 
   /** @domName SVGZoomEvent.previousScale */
-  abstract num get previousScale;
+  num get previousScale;
 
   /** @domName SVGZoomEvent.previousTranslate */
-  abstract SVGPoint get previousTranslate;
+  SVGPoint get previousTranslate;
 
   /** @domName SVGZoomEvent.zoomRectScreen */
-  abstract SVGRect get zoomRectScreen;
+  SVGRect get zoomRectScreen;
 }
 // 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
@@ -34497,28 +34647,28 @@
 abstract class Screen {
 
   /** @domName Screen.availHeight */
-  abstract int get availHeight;
+  int get availHeight;
 
   /** @domName Screen.availLeft */
-  abstract int get availLeft;
+  int get availLeft;
 
   /** @domName Screen.availTop */
-  abstract int get availTop;
+  int get availTop;
 
   /** @domName Screen.availWidth */
-  abstract int get availWidth;
+  int get availWidth;
 
   /** @domName Screen.colorDepth */
-  abstract int get colorDepth;
+  int get colorDepth;
 
   /** @domName Screen.height */
-  abstract int get height;
+  int get height;
 
   /** @domName Screen.pixelDepth */
-  abstract int get pixelDepth;
+  int get pixelDepth;
 
   /** @domName Screen.width */
-  abstract int get width;
+  int get width;
 }
 // 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
@@ -34631,13 +34781,13 @@
 abstract class ScriptProfile {
 
   /** @domName ScriptProfile.head */
-  abstract ScriptProfileNode get head;
+  ScriptProfileNode get head;
 
   /** @domName ScriptProfile.title */
-  abstract String get title;
+  String get title;
 
   /** @domName ScriptProfile.uid */
-  abstract int get uid;
+  int get uid;
 }
 // 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
@@ -34664,28 +34814,28 @@
 abstract class ScriptProfileNode {
 
   /** @domName ScriptProfileNode.callUID */
-  abstract int get callUID;
+  int get callUID;
 
   /** @domName ScriptProfileNode.functionName */
-  abstract String get functionName;
+  String get functionName;
 
   /** @domName ScriptProfileNode.lineNumber */
-  abstract int get lineNumber;
+  int get lineNumber;
 
   /** @domName ScriptProfileNode.numberOfCalls */
-  abstract int get numberOfCalls;
+  int get numberOfCalls;
 
   /** @domName ScriptProfileNode.selfTime */
-  abstract num get selfTime;
+  num get selfTime;
 
   /** @domName ScriptProfileNode.totalTime */
-  abstract num get totalTime;
+  num get totalTime;
 
   /** @domName ScriptProfileNode.url */
-  abstract String get url;
+  String get url;
 
   /** @domName ScriptProfileNode.visible */
-  abstract bool get visible;
+  bool get visible;
 
   /** @domName ScriptProfileNode.children */
   List<ScriptProfileNode> children();
@@ -34735,10 +34885,10 @@
   bool disabled;
 
   /** @domName HTMLSelectElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLSelectElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLSelectElement.length */
   int length;
@@ -34750,7 +34900,7 @@
   String name;
 
   /** @domName HTMLSelectElement.options */
-  abstract HTMLOptionsCollection get options;
+  HTMLOptionsCollection get options;
 
   /** @domName HTMLSelectElement.required */
   bool required;
@@ -34759,25 +34909,25 @@
   int selectedIndex;
 
   /** @domName HTMLSelectElement.selectedOptions */
-  abstract HTMLCollection get selectedOptions;
+  HTMLCollection get selectedOptions;
 
   /** @domName HTMLSelectElement.size */
   int size;
 
   /** @domName HTMLSelectElement.type */
-  abstract String get type;
+  String get type;
 
   /** @domName HTMLSelectElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLSelectElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLSelectElement.value */
   String value;
 
   /** @domName HTMLSelectElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLSelectElement.checkValidity */
   bool checkValidity();
@@ -34898,6 +35048,9 @@
 
 /// @domName HTMLShadowElement
 abstract class ShadowElement implements Element {
+
+  /** @domName HTMLShadowElement.resetStyleInheritance */
+  bool resetStyleInheritance;
 }
 // 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
@@ -34907,6 +35060,10 @@
 
 class _ShadowElementImpl extends _ElementImpl_Merged implements ShadowElement {
 
+  bool get resetStyleInheritance native "HTMLShadowElement_resetStyleInheritance_Getter";
+
+  void set resetStyleInheritance(bool value) native "HTMLShadowElement_resetStyleInheritance_Setter";
+
 }
 // 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
@@ -34914,13 +35071,14 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName ShadowRoot
 abstract class ShadowRoot implements DocumentFragment {
 
   factory ShadowRoot(Element host) => _ShadowRootFactoryProvider.createShadowRoot(host);
 
   /** @domName ShadowRoot.activeElement */
-  abstract Element get activeElement;
+  Element get activeElement;
 
   /** @domName ShadowRoot.applyAuthorStyles */
   bool applyAuthorStyles;
@@ -34999,7 +35157,7 @@
   }
 
   /** @domName SharedWorker.port */
-  abstract MessagePort get port;
+  MessagePort get port;
 }
 // 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
@@ -35016,7 +35174,7 @@
   SharedWorkerContextEvents get on;
 
   /** @domName SharedWorkerContext.name */
-  abstract String get name;
+  String get name;
 }
 
 abstract class SharedWorkerContextEvents implements WorkerContextEvents {
@@ -35064,7 +35222,7 @@
 abstract class SourceBuffer {
 
   /** @domName SourceBuffer.buffered */
-  abstract TimeRanges get buffered;
+  TimeRanges get buffered;
 
   /** @domName SourceBuffer.timestampOffset */
   num timestampOffset;
@@ -35101,10 +35259,10 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SourceBufferList
-abstract class SourceBufferList implements List<SourceBuffer>, EventTarget {
+abstract class SourceBufferList implements EventTarget, List<SourceBuffer> {
 
   /** @domName SourceBufferList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName SourceBufferList.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -35124,14 +35282,14 @@
 
 // WARNING: Do not edit - generated code.
 
-class _SourceBufferListImpl extends NativeFieldWrapperClass1 implements SourceBufferList {
+class _SourceBufferListImpl extends _EventTargetImpl implements SourceBufferList {
 
   int get length native "SourceBufferList_length_Getter";
 
   SourceBuffer operator[](int index) native "SourceBufferList_item_Callback";
 
   void operator[]=(int index, SourceBuffer value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SourceBuffer> mixins.
   // SourceBuffer is the element type.
@@ -35148,15 +35306,15 @@
   // From Collection<SourceBuffer>:
 
   void add(SourceBuffer value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SourceBuffer value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SourceBuffer> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SourceBuffer element) => _Collections.contains(this, element);
@@ -35172,38 +35330,38 @@
 
   bool some(bool f(SourceBuffer element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SourceBuffer>:
 
   void sort([Comparator<SourceBuffer> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SourceBuffer element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SourceBuffer element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SourceBuffer last() => this[length - 1];
+  SourceBuffer get last => this[length - 1];
 
   SourceBuffer removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SourceBuffer> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SourceBuffer initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SourceBuffer> getRange(int start, int rangeLength) =>
@@ -35327,7 +35485,7 @@
   factory SpeechGrammarList() => _SpeechGrammarListFactoryProvider.createSpeechGrammarList();
 
   /** @domName SpeechGrammarList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName SpeechGrammarList.addFromString */
   void addFromString(String string, [num weight]);
@@ -35351,7 +35509,7 @@
   SpeechGrammar operator[](int index) native "SpeechGrammarList_item_Callback";
 
   void operator[]=(int index, SpeechGrammar value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SpeechGrammar> mixins.
   // SpeechGrammar is the element type.
@@ -35368,15 +35526,15 @@
   // From Collection<SpeechGrammar>:
 
   void add(SpeechGrammar value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SpeechGrammar value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SpeechGrammar> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SpeechGrammar element) => _Collections.contains(this, element);
@@ -35392,38 +35550,38 @@
 
   bool some(bool f(SpeechGrammar element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SpeechGrammar>:
 
   void sort([Comparator<SpeechGrammar> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SpeechGrammar element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SpeechGrammar element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SpeechGrammar last() => this[length - 1];
+  SpeechGrammar get last => this[length - 1];
 
   SpeechGrammar removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SpeechGrammar> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SpeechGrammar initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SpeechGrammar> getRange(int start, int rangeLength) =>
@@ -35468,7 +35626,7 @@
 abstract class SpeechInputEvent implements Event {
 
   /** @domName SpeechInputEvent.results */
-  abstract List<SpeechInputResult> get results;
+  List<SpeechInputResult> get results;
 }
 // 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
@@ -35491,10 +35649,10 @@
 abstract class SpeechInputResult {
 
   /** @domName SpeechInputResult.confidence */
-  abstract num get confidence;
+  num get confidence;
 
   /** @domName SpeechInputResult.utterance */
-  abstract String get utterance;
+  String get utterance;
 }
 // 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
@@ -35522,7 +35680,7 @@
   SpeechInputResult operator[](int index) native "SpeechInputResultList_item_Callback";
 
   void operator[]=(int index, SpeechInputResult value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SpeechInputResult> mixins.
   // SpeechInputResult is the element type.
@@ -35539,15 +35697,15 @@
   // From Collection<SpeechInputResult>:
 
   void add(SpeechInputResult value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SpeechInputResult value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SpeechInputResult> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SpeechInputResult element) => _Collections.contains(this, element);
@@ -35563,38 +35721,38 @@
 
   bool some(bool f(SpeechInputResult element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SpeechInputResult>:
 
   void sort([Comparator<SpeechInputResult> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SpeechInputResult element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SpeechInputResult element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SpeechInputResult last() => this[length - 1];
+  SpeechInputResult get last => this[length - 1];
 
   SpeechInputResult removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SpeechInputResult> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SpeechInputResult initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SpeechInputResult> getRange(int start, int rangeLength) =>
@@ -35627,6 +35785,9 @@
   /** @domName SpeechRecognition.grammars */
   SpeechGrammarList grammars;
 
+  /** @domName SpeechRecognition.interimResults */
+  bool interimResults;
+
   /** @domName SpeechRecognition.lang */
   String lang;
 
@@ -35666,8 +35827,6 @@
 
   EventListenerList get result;
 
-  EventListenerList get resultDeleted;
-
   EventListenerList get soundEnd;
 
   EventListenerList get soundStart;
@@ -35688,10 +35847,10 @@
 abstract class SpeechRecognitionAlternative {
 
   /** @domName SpeechRecognitionAlternative.confidence */
-  abstract num get confidence;
+  num get confidence;
 
   /** @domName SpeechRecognitionAlternative.transcript */
-  abstract String get transcript;
+  String get transcript;
 }
 // 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
@@ -35734,10 +35893,10 @@
   static const int SERVICE_NOT_ALLOWED = 6;
 
   /** @domName SpeechRecognitionError.code */
-  abstract int get code;
+  int get code;
 
   /** @domName SpeechRecognitionError.message */
-  abstract String get message;
+  String get message;
 }
 // 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
@@ -35762,13 +35921,13 @@
 abstract class SpeechRecognitionEvent implements Event {
 
   /** @domName SpeechRecognitionEvent.result */
-  abstract SpeechRecognitionResult get result;
+  SpeechRecognitionResult get result;
 
   /** @domName SpeechRecognitionEvent.resultHistory */
-  abstract List<SpeechRecognitionResult> get resultHistory;
+  List<SpeechRecognitionResult> get resultHistory;
 
   /** @domName SpeechRecognitionEvent.resultIndex */
-  abstract int get resultIndex;
+  int get resultIndex;
 }
 // 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
@@ -35804,6 +35963,10 @@
 
   void set grammars(SpeechGrammarList value) native "SpeechRecognition_grammars_Setter";
 
+  bool get interimResults native "SpeechRecognition_interimResults_Getter";
+
+  void set interimResults(bool value) native "SpeechRecognition_interimResults_Setter";
+
   String get lang native "SpeechRecognition_lang_Getter";
 
   void set lang(String value) native "SpeechRecognition_lang_Setter";
@@ -35841,8 +36004,6 @@
 
   EventListenerList get result => this['result'];
 
-  EventListenerList get resultDeleted => this['resultdeleted'];
-
   EventListenerList get soundEnd => this['soundend'];
 
   EventListenerList get soundStart => this['soundstart'];
@@ -35863,13 +36024,13 @@
 abstract class SpeechRecognitionResult {
 
   /** @domName SpeechRecognitionResult.emma */
-  abstract Document get emma;
+  Document get emma;
 
   /** @domName SpeechRecognitionResult.finalValue */
-  abstract bool get finalValue;
+  bool get finalValue;
 
   /** @domName SpeechRecognitionResult.length */
-  abstract int get length;
+  int get length;
 
   /** @domName SpeechRecognitionResult.item */
   SpeechRecognitionAlternative item(int index);
@@ -35904,7 +36065,7 @@
   SpeechRecognitionResult operator[](int index) native "SpeechRecognitionResultList_item_Callback";
 
   void operator[]=(int index, SpeechRecognitionResult value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<SpeechRecognitionResult> mixins.
   // SpeechRecognitionResult is the element type.
@@ -35921,15 +36082,15 @@
   // From Collection<SpeechRecognitionResult>:
 
   void add(SpeechRecognitionResult value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(SpeechRecognitionResult value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<SpeechRecognitionResult> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(SpeechRecognitionResult element) => _Collections.contains(this, element);
@@ -35945,38 +36106,38 @@
 
   bool some(bool f(SpeechRecognitionResult element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<SpeechRecognitionResult>:
 
   void sort([Comparator<SpeechRecognitionResult> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(SpeechRecognitionResult element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(SpeechRecognitionResult element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SpeechRecognitionResult last() => this[length - 1];
+  SpeechRecognitionResult get last => this[length - 1];
 
   SpeechRecognitionResult removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SpeechRecognitionResult> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [SpeechRecognitionResult initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<SpeechRecognitionResult> getRange(int start, int rangeLength) =>
@@ -35991,11 +36152,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+
 /// @domName Storage
 abstract class Storage implements Map<String, String> {
 
   /** @domName Storage.length */
-  abstract int get $dom_length;
+  int get $dom_length;
 
   /** @domName Storage.clear */
   void $dom_clear();
@@ -36023,19 +36185,19 @@
 abstract class StorageEvent implements Event {
 
   /** @domName StorageEvent.key */
-  abstract String get key;
+  String get key;
 
   /** @domName StorageEvent.newValue */
-  abstract String get newValue;
+  String get newValue;
 
   /** @domName StorageEvent.oldValue */
-  abstract String get oldValue;
+  String get oldValue;
 
   /** @domName StorageEvent.storageArea */
-  abstract Storage get storageArea;
+  Storage get storageArea;
 
   /** @domName StorageEvent.url */
-  abstract String get url;
+  String get url;
 
   /** @domName StorageEvent.initStorageEvent */
   void initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg);
@@ -36068,7 +36230,7 @@
 class _StorageImpl extends NativeFieldWrapperClass1 implements Storage {
 
   // TODO(nweiz): update this when maps support lazy iteration
-  bool containsValue(String value) => getValues().some((e) => e == value);
+  bool containsValue(String value) => values.some((e) => e == value);
 
   bool containsKey(String key) => $dom_getItem(key) != null;
 
@@ -36098,13 +36260,13 @@
     }
   }
 
-  Collection<String> getKeys() {
+  Collection<String> get keys {
     final keys = [];
     forEach((k, v) => keys.add(k));
     return keys;
   }
 
-  Collection<String> getValues() {
+  Collection<String> get values {
     final values = [];
     forEach((k, v) => values.add(v));
     return values;
@@ -36112,7 +36274,7 @@
 
   int get length => $dom_length;
 
-  bool isEmpty() => $dom_key(0) == null;
+  bool get isEmpty => $dom_key(0) == null;
 
   int get $dom_length native "Storage_length_Getter";
 
@@ -36152,6 +36314,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void StorageInfoErrorCallback(DOMException error);
 // 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
@@ -36172,6 +36335,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void StorageInfoQuotaCallback(int grantedQuotaInBytes);
 // 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
@@ -36179,6 +36343,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void StorageInfoUsageCallback(int currentUsageInBytes, int currentQuotaInBytes);
 // 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
@@ -36186,6 +36351,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void StringCallback(String data);
 // 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
@@ -36208,7 +36374,7 @@
   bool scoped;
 
   /** @domName HTMLStyleElement.sheet */
-  abstract StyleSheet get sheet;
+  StyleSheet get sheet;
 
   /** @domName HTMLStyleElement.type */
   String type;
@@ -36250,7 +36416,7 @@
 abstract class StyleMedia {
 
   /** @domName StyleMedia.type */
-  abstract String get type;
+  String get type;
 
   /** @domName StyleMedia.matchMedium */
   bool matchMedium(String mediaquery);
@@ -36281,22 +36447,22 @@
   bool disabled;
 
   /** @domName StyleSheet.href */
-  abstract String get href;
+  String get href;
 
   /** @domName StyleSheet.media */
-  abstract MediaList get media;
+  MediaList get media;
 
   /** @domName StyleSheet.ownerNode */
-  abstract Node get ownerNode;
+  Node get ownerNode;
 
   /** @domName StyleSheet.parentStyleSheet */
-  abstract StyleSheet get parentStyleSheet;
+  StyleSheet get parentStyleSheet;
 
   /** @domName StyleSheet.title */
-  abstract String get title;
+  String get title;
 
   /** @domName StyleSheet.type */
-  abstract String get type;
+  String get type;
 }
 // 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
@@ -36336,7 +36502,7 @@
   StyleSheet operator[](int index) native "StyleSheetList_item_Callback";
 
   void operator[]=(int index, StyleSheet value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<StyleSheet> mixins.
   // StyleSheet is the element type.
@@ -36353,15 +36519,15 @@
   // From Collection<StyleSheet>:
 
   void add(StyleSheet value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(StyleSheet value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<StyleSheet> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(StyleSheet element) => _Collections.contains(this, element);
@@ -36377,38 +36543,38 @@
 
   bool some(bool f(StyleSheet element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<StyleSheet>:
 
   void sort([Comparator<StyleSheet> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(StyleSheet element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(StyleSheet element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  StyleSheet last() => this[length - 1];
+  StyleSheet get last => this[length - 1];
 
   StyleSheet removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<StyleSheet> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [StyleSheet initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<StyleSheet> getRange(int start, int rangeLength) =>
@@ -36470,7 +36636,7 @@
   String bgColor;
 
   /** @domName HTMLTableCellElement.cellIndex */
-  abstract int get cellIndex;
+  int get cellIndex;
 
   /** @domName HTMLTableCellElement.ch */
   String ch;
@@ -36664,7 +36830,7 @@
   String frame;
 
   /** @domName HTMLTableElement.rows */
-  abstract HTMLCollection get rows;
+  HTMLCollection get rows;
 
   /** @domName HTMLTableElement.rules */
   String rules;
@@ -36673,7 +36839,7 @@
   String summary;
 
   /** @domName HTMLTableElement.tBodies */
-  abstract HTMLCollection get tBodies;
+  HTMLCollection get tBodies;
 
   /** @domName HTMLTableElement.tFoot */
   TableSectionElement tFoot;
@@ -36808,7 +36974,7 @@
   String bgColor;
 
   /** @domName HTMLTableRowElement.cells */
-  abstract HTMLCollection get cells;
+  HTMLCollection get cells;
 
   /** @domName HTMLTableRowElement.ch */
   String ch;
@@ -36817,10 +36983,10 @@
   String chOff;
 
   /** @domName HTMLTableRowElement.rowIndex */
-  abstract int get rowIndex;
+  int get rowIndex;
 
   /** @domName HTMLTableRowElement.sectionRowIndex */
-  abstract int get sectionRowIndex;
+  int get sectionRowIndex;
 
   /** @domName HTMLTableRowElement.vAlign */
   String vAlign;
@@ -36889,7 +37055,7 @@
   String chOff;
 
   /** @domName HTMLTableSectionElement.rows */
-  abstract HTMLCollection get rows;
+  HTMLCollection get rows;
 
   /** @domName HTMLTableSectionElement.vAlign */
   String vAlign;
@@ -36937,13 +37103,14 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName Text
 abstract class Text implements CharacterData {
 
   factory Text(String data) => _TextFactoryProvider.createText(data);
 
   /** @domName Text.wholeText */
-  abstract String get wholeText;
+  String get wholeText;
 
   /** @domName Text.replaceWholeText */
   Text replaceWholeText(String content);
@@ -36975,10 +37142,10 @@
   bool disabled;
 
   /** @domName HTMLTextAreaElement.form */
-  abstract FormElement get form;
+  FormElement get form;
 
   /** @domName HTMLTextAreaElement.labels */
-  abstract List<Node> get labels;
+  List<Node> get labels;
 
   /** @domName HTMLTextAreaElement.maxLength */
   int maxLength;
@@ -37008,22 +37175,22 @@
   int selectionStart;
 
   /** @domName HTMLTextAreaElement.textLength */
-  abstract int get textLength;
+  int get textLength;
 
   /** @domName HTMLTextAreaElement.type */
-  abstract String get type;
+  String get type;
 
   /** @domName HTMLTextAreaElement.validationMessage */
-  abstract String get validationMessage;
+  String get validationMessage;
 
   /** @domName HTMLTextAreaElement.validity */
-  abstract ValidityState get validity;
+  ValidityState get validity;
 
   /** @domName HTMLTextAreaElement.value */
   String value;
 
   /** @domName HTMLTextAreaElement.willValidate */
-  abstract bool get willValidate;
+  bool get willValidate;
 
   /** @domName HTMLTextAreaElement.wrap */
   String wrap;
@@ -37151,7 +37318,7 @@
 abstract class TextEvent implements UIEvent {
 
   /** @domName TextEvent.data */
-  abstract String get data;
+  String get data;
 
   /** @domName TextEvent.initTextEvent */
   void initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg);
@@ -37194,7 +37361,7 @@
 abstract class TextMetrics {
 
   /** @domName TextMetrics.width */
-  abstract num get width;
+  num get width;
 }
 // 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
@@ -37222,19 +37389,19 @@
   TextTrackEvents get on;
 
   /** @domName TextTrack.activeCues */
-  abstract TextTrackCueList get activeCues;
+  TextTrackCueList get activeCues;
 
   /** @domName TextTrack.cues */
-  abstract TextTrackCueList get cues;
+  TextTrackCueList get cues;
 
   /** @domName TextTrack.kind */
-  abstract String get kind;
+  String get kind;
 
   /** @domName TextTrack.label */
-  abstract String get label;
+  String get label;
 
   /** @domName TextTrack.language */
-  abstract String get language;
+  String get language;
 
   /** @domName TextTrack.mode */
   String mode;
@@ -37306,7 +37473,7 @@
   String text;
 
   /** @domName TextTrackCue.track */
-  abstract TextTrack get track;
+  TextTrack get track;
 
   /** @domName TextTrackCue.vertical */
   String vertical;
@@ -37414,7 +37581,7 @@
 abstract class TextTrackCueList implements List<TextTrackCue> {
 
   /** @domName TextTrackCueList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName TextTrackCueList.getCueById */
   TextTrackCue getCueById(String id);
@@ -37435,7 +37602,7 @@
   TextTrackCue operator[](int index) native "TextTrackCueList_item_Callback";
 
   void operator[]=(int index, TextTrackCue value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<TextTrackCue> mixins.
   // TextTrackCue is the element type.
@@ -37452,15 +37619,15 @@
   // From Collection<TextTrackCue>:
 
   void add(TextTrackCue value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(TextTrackCue value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<TextTrackCue> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(TextTrackCue element) => _Collections.contains(this, element);
@@ -37476,38 +37643,38 @@
 
   bool some(bool f(TextTrackCue element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<TextTrackCue>:
 
   void sort([Comparator<TextTrackCue> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(TextTrackCue element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(TextTrackCue element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  TextTrackCue last() => this[length - 1];
+  TextTrackCue get last => this[length - 1];
 
   TextTrackCue removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<TextTrackCue> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [TextTrackCue initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<TextTrackCue> getRange(int start, int rangeLength) =>
@@ -37569,7 +37736,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName TextTrackList
-abstract class TextTrackList implements List<TextTrack>, EventTarget {
+abstract class TextTrackList implements EventTarget, List<TextTrack> {
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
@@ -37577,7 +37744,7 @@
   TextTrackListEvents get on;
 
   /** @domName TextTrackList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName TextTrackList.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -37602,7 +37769,7 @@
 
 // WARNING: Do not edit - generated code.
 
-class _TextTrackListImpl extends NativeFieldWrapperClass1 implements TextTrackList {
+class _TextTrackListImpl extends _EventTargetImpl implements TextTrackList {
 
   _TextTrackListEventsImpl get on =>
     new _TextTrackListEventsImpl(this);
@@ -37612,7 +37779,7 @@
   TextTrack operator[](int index) native "TextTrackList_item_Callback";
 
   void operator[]=(int index, TextTrack value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<TextTrack> mixins.
   // TextTrack is the element type.
@@ -37629,15 +37796,15 @@
   // From Collection<TextTrack>:
 
   void add(TextTrack value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(TextTrack value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<TextTrack> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(TextTrack element) => _Collections.contains(this, element);
@@ -37653,38 +37820,38 @@
 
   bool some(bool f(TextTrack element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<TextTrack>:
 
   void sort([Comparator<TextTrack> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(TextTrack element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(TextTrack element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  TextTrack last() => this[length - 1];
+  TextTrack get last => this[length - 1];
 
   TextTrack removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<TextTrack> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [TextTrack initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<TextTrack> getRange(int start, int rangeLength) =>
@@ -37717,7 +37884,7 @@
 abstract class TimeRanges {
 
   /** @domName TimeRanges.length */
-  abstract int get length;
+  int get length;
 
   /** @domName TimeRanges.end */
   num end(int index);
@@ -37746,6 +37913,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void TimeoutHandler();
 // 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
@@ -37777,40 +37945,40 @@
 abstract class Touch {
 
   /** @domName Touch.clientX */
-  abstract int get clientX;
+  int get clientX;
 
   /** @domName Touch.clientY */
-  abstract int get clientY;
+  int get clientY;
 
   /** @domName Touch.identifier */
-  abstract int get identifier;
+  int get identifier;
 
   /** @domName Touch.pageX */
-  abstract int get pageX;
+  int get pageX;
 
   /** @domName Touch.pageY */
-  abstract int get pageY;
+  int get pageY;
 
   /** @domName Touch.screenX */
-  abstract int get screenX;
+  int get screenX;
 
   /** @domName Touch.screenY */
-  abstract int get screenY;
+  int get screenY;
 
   /** @domName Touch.target */
-  abstract EventTarget get target;
+  EventTarget get target;
 
   /** @domName Touch.webkitForce */
-  abstract num get webkitForce;
+  num get webkitForce;
 
   /** @domName Touch.webkitRadiusX */
-  abstract int get webkitRadiusX;
+  int get webkitRadiusX;
 
   /** @domName Touch.webkitRadiusY */
-  abstract int get webkitRadiusY;
+  int get webkitRadiusY;
 
   /** @domName Touch.webkitRotationAngle */
-  abstract num get webkitRotationAngle;
+  num get webkitRotationAngle;
 }
 // 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
@@ -37822,25 +37990,25 @@
 abstract class TouchEvent implements UIEvent {
 
   /** @domName TouchEvent.altKey */
-  abstract bool get altKey;
+  bool get altKey;
 
   /** @domName TouchEvent.changedTouches */
-  abstract TouchList get changedTouches;
+  TouchList get changedTouches;
 
   /** @domName TouchEvent.ctrlKey */
-  abstract bool get ctrlKey;
+  bool get ctrlKey;
 
   /** @domName TouchEvent.metaKey */
-  abstract bool get metaKey;
+  bool get metaKey;
 
   /** @domName TouchEvent.shiftKey */
-  abstract bool get shiftKey;
+  bool get shiftKey;
 
   /** @domName TouchEvent.targetTouches */
-  abstract TouchList get targetTouches;
+  TouchList get targetTouches;
 
   /** @domName TouchEvent.touches */
-  abstract TouchList get touches;
+  TouchList get touches;
 
   /** @domName TouchEvent.initTouchEvent */
   void initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
@@ -37913,7 +38081,7 @@
 abstract class TouchList implements List<Touch> {
 
   /** @domName TouchList.length */
-  abstract int get length;
+  int get length;
 
   /** @domName TouchList.item */
   Touch item(int index);
@@ -37931,7 +38099,7 @@
   Touch operator[](int index) native "TouchList_item_Callback";
 
   void operator[]=(int index, Touch value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Touch> mixins.
   // Touch is the element type.
@@ -37948,15 +38116,15 @@
   // From Collection<Touch>:
 
   void add(Touch value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Touch value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Touch> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Touch element) => _Collections.contains(this, element);
@@ -37972,38 +38140,38 @@
 
   bool some(bool f(Touch element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Touch>:
 
   void sort([Comparator<Touch> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Touch element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Touch element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Touch last() => this[length - 1];
+  Touch get last => this[length - 1];
 
   Touch removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Touch> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Touch initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Touch> getRange(int start, int rangeLength) =>
@@ -38043,7 +38211,7 @@
   String label;
 
   /** @domName HTMLTrackElement.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName HTMLTrackElement.src */
   String src;
@@ -38052,7 +38220,7 @@
   String srclang;
 
   /** @domName HTMLTrackElement.track */
-  abstract TextTrack get track;
+  TextTrack get track;
 }
 // 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
@@ -38097,7 +38265,7 @@
 abstract class TrackEvent implements Event {
 
   /** @domName TrackEvent.track */
-  abstract Object get track;
+  Object get track;
 }
 // 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
@@ -38120,10 +38288,10 @@
 abstract class TransitionEvent implements Event {
 
   /** @domName WebKitTransitionEvent.elapsedTime */
-  abstract num get elapsedTime;
+  num get elapsedTime;
 
   /** @domName WebKitTransitionEvent.propertyName */
-  abstract String get propertyName;
+  String get propertyName;
 }
 // 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
@@ -38151,16 +38319,16 @@
   Node currentNode;
 
   /** @domName TreeWalker.expandEntityReferences */
-  abstract bool get expandEntityReferences;
+  bool get expandEntityReferences;
 
   /** @domName TreeWalker.filter */
-  abstract NodeFilter get filter;
+  NodeFilter get filter;
 
   /** @domName TreeWalker.root */
-  abstract Node get root;
+  Node get root;
 
   /** @domName TreeWalker.whatToShow */
-  abstract int get whatToShow;
+  int get whatToShow;
 
   /** @domName TreeWalker.firstChild */
   Node firstChild();
@@ -38228,31 +38396,31 @@
 abstract class UIEvent implements Event {
 
   /** @domName UIEvent.charCode */
-  abstract int get charCode;
+  int get charCode;
 
   /** @domName UIEvent.detail */
-  abstract int get detail;
+  int get detail;
 
   /** @domName UIEvent.keyCode */
-  abstract int get keyCode;
+  int get keyCode;
 
   /** @domName UIEvent.layerX */
-  abstract int get layerX;
+  int get layerX;
 
   /** @domName UIEvent.layerY */
-  abstract int get layerY;
+  int get layerY;
 
   /** @domName UIEvent.pageX */
-  abstract int get pageX;
+  int get pageX;
 
   /** @domName UIEvent.pageY */
-  abstract int get pageY;
+  int get pageY;
 
   /** @domName UIEvent.view */
-  abstract Window get view;
+  Window get view;
 
   /** @domName UIEvent.which */
-  abstract int get which;
+  int get which;
 
   /** @domName UIEvent.initUIEvent */
   void initUIEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail);
@@ -38341,7 +38509,7 @@
   static const int BYTES_PER_ELEMENT = 2;
 
   /** @domName Uint16Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Uint16Array.setElements */
   void setElements(Object array, [int offset]);
@@ -38377,15 +38545,15 @@
   // From Collection<int>:
 
   void add(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<int> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(int element) => _Collections.contains(this, element);
@@ -38401,38 +38569,38 @@
 
   bool some(bool f(int element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<int>:
 
   void sort([Comparator<int> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(int element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(int element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  int last() => this[length - 1];
+  int get last => this[length - 1];
 
   int removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<int> getRange(int start, int rangeLength) =>
@@ -38475,7 +38643,7 @@
   static const int BYTES_PER_ELEMENT = 4;
 
   /** @domName Uint32Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Uint32Array.setElements */
   void setElements(Object array, [int offset]);
@@ -38511,15 +38679,15 @@
   // From Collection<int>:
 
   void add(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<int> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(int element) => _Collections.contains(this, element);
@@ -38535,38 +38703,38 @@
 
   bool some(bool f(int element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<int>:
 
   void sort([Comparator<int> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(int element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(int element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  int last() => this[length - 1];
+  int get last => this[length - 1];
 
   int removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<int> getRange(int start, int rangeLength) =>
@@ -38609,7 +38777,7 @@
   static const int BYTES_PER_ELEMENT = 1;
 
   /** @domName Uint8Array.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Uint8Array.setElements */
   void setElements(Object array, [int offset]);
@@ -38645,15 +38813,15 @@
   // From Collection<int>:
 
   void add(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(int value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<int> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(int element) => _Collections.contains(this, element);
@@ -38669,38 +38837,38 @@
 
   bool some(bool f(int element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<int>:
 
   void sort([Comparator<int> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(int element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(int element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  int last() => this[length - 1];
+  int get last => this[length - 1];
 
   int removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<int> getRange(int start, int rangeLength) =>
@@ -38741,7 +38909,7 @@
     _TypedArrayFactoryProvider.createUint8ClampedArray_fromBuffer(buffer, byteOffset, length);
 
   /** @domName Uint8ClampedArray.length */
-  abstract int get length;
+  int get length;
 
   /** @domName Uint8ClampedArray.setElements */
   void setElements(Object array, [int offset]);
@@ -38805,31 +38973,31 @@
 abstract class ValidityState {
 
   /** @domName ValidityState.customError */
-  abstract bool get customError;
+  bool get customError;
 
   /** @domName ValidityState.patternMismatch */
-  abstract bool get patternMismatch;
+  bool get patternMismatch;
 
   /** @domName ValidityState.rangeOverflow */
-  abstract bool get rangeOverflow;
+  bool get rangeOverflow;
 
   /** @domName ValidityState.rangeUnderflow */
-  abstract bool get rangeUnderflow;
+  bool get rangeUnderflow;
 
   /** @domName ValidityState.stepMismatch */
-  abstract bool get stepMismatch;
+  bool get stepMismatch;
 
   /** @domName ValidityState.tooLong */
-  abstract bool get tooLong;
+  bool get tooLong;
 
   /** @domName ValidityState.typeMismatch */
-  abstract bool get typeMismatch;
+  bool get typeMismatch;
 
   /** @domName ValidityState.valid */
-  abstract bool get valid;
+  bool get valid;
 
   /** @domName ValidityState.valueMissing */
-  abstract bool get valueMissing;
+  bool get valueMissing;
 }
 // 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
@@ -38876,22 +39044,22 @@
   String poster;
 
   /** @domName HTMLVideoElement.videoHeight */
-  abstract int get videoHeight;
+  int get videoHeight;
 
   /** @domName HTMLVideoElement.videoWidth */
-  abstract int get videoWidth;
+  int get videoWidth;
 
   /** @domName HTMLVideoElement.webkitDecodedFrameCount */
-  abstract int get webkitDecodedFrameCount;
+  int get webkitDecodedFrameCount;
 
   /** @domName HTMLVideoElement.webkitDisplayingFullscreen */
-  abstract bool get webkitDisplayingFullscreen;
+  bool get webkitDisplayingFullscreen;
 
   /** @domName HTMLVideoElement.webkitDroppedFrameCount */
-  abstract int get webkitDroppedFrameCount;
+  int get webkitDroppedFrameCount;
 
   /** @domName HTMLVideoElement.webkitSupportsFullscreen */
-  abstract bool get webkitSupportsFullscreen;
+  bool get webkitSupportsFullscreen;
 
   /** @domName HTMLVideoElement.width */
   int width;
@@ -38955,6 +39123,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 typedef void VoidCallback();
 // 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
@@ -39009,13 +39178,13 @@
 abstract class WebGLActiveInfo {
 
   /** @domName WebGLActiveInfo.name */
-  abstract String get name;
+  String get name;
 
   /** @domName WebGLActiveInfo.size */
-  abstract int get size;
+  int get size;
 
   /** @domName WebGLActiveInfo.type */
-  abstract int get type;
+  int get type;
 }
 // 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
@@ -39146,7 +39315,7 @@
 abstract class WebGLContextEvent implements Event {
 
   /** @domName WebGLContextEvent.statusMessage */
-  abstract String get statusMessage;
+  String get statusMessage;
 }
 // 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
@@ -39906,10 +40075,10 @@
   static const int ZERO = 0;
 
   /** @domName WebGLRenderingContext.drawingBufferHeight */
-  abstract int get drawingBufferHeight;
+  int get drawingBufferHeight;
 
   /** @domName WebGLRenderingContext.drawingBufferWidth */
-  abstract int get drawingBufferWidth;
+  int get drawingBufferWidth;
 
   /** @domName WebGLRenderingContext.activeTexture */
   void activeTexture(int texture);
@@ -40080,7 +40249,7 @@
   WebGLActiveInfo getActiveUniform(WebGLProgram program, int index);
 
   /** @domName WebGLRenderingContext.getAttachedShaders */
-  List<Object> getAttachedShaders(WebGLProgram program);
+  void getAttachedShaders(WebGLProgram program);
 
   /** @domName WebGLRenderingContext.getAttribLocation */
   int getAttribLocation(WebGLProgram program, String name);
@@ -40095,7 +40264,7 @@
   int getError();
 
   /** @domName WebGLRenderingContext.getExtension */
-  Object getExtension(String name);
+  void getExtension(String name);
 
   /** @domName WebGLRenderingContext.getFramebufferAttachmentParameter */
   Object getFramebufferAttachmentParameter(int target, int attachment, int pname);
@@ -40359,15 +40528,15 @@
   void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) native "WebGLRenderingContext_blendFuncSeparate_Callback";
 
   void bufferData(/*unsigned long*/ target, data_OR_size, /*unsigned long*/ usage) {
-    if ((target is int || target === null) && (data_OR_size is ArrayBuffer || data_OR_size === null) && (usage is int || usage === null)) {
+    if ((target is int || target == null) && (data_OR_size is ArrayBuffer || data_OR_size == null) && (usage is int || usage == null)) {
       _bufferData_1(target, data_OR_size, usage);
       return;
     }
-    if ((target is int || target === null) && (data_OR_size is ArrayBufferView || data_OR_size === null) && (usage is int || usage === null)) {
+    if ((target is int || target == null) && (data_OR_size is ArrayBufferView || data_OR_size == null) && (usage is int || usage == null)) {
       _bufferData_2(target, data_OR_size, usage);
       return;
     }
-    if ((target is int || target === null) && (data_OR_size is int || data_OR_size === null) && (usage is int || usage === null)) {
+    if ((target is int || target == null) && (data_OR_size is int || data_OR_size == null) && (usage is int || usage == null)) {
       _bufferData_3(target, data_OR_size, usage);
       return;
     }
@@ -40381,11 +40550,11 @@
   void _bufferData_3(target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_3_Callback";
 
   void bufferSubData(/*unsigned long*/ target, /*long long*/ offset, data) {
-    if ((target is int || target === null) && (offset is int || offset === null) && (data is ArrayBuffer || data === null)) {
+    if ((target is int || target == null) && (offset is int || offset == null) && (data is ArrayBuffer || data == null)) {
       _bufferSubData_1(target, offset, data);
       return;
     }
-    if ((target is int || target === null) && (offset is int || offset === null) && (data is ArrayBufferView || data === null)) {
+    if ((target is int || target == null) && (offset is int || offset == null) && (data is ArrayBufferView || data == null)) {
       _bufferSubData_2(target, offset, data);
       return;
     }
@@ -40480,7 +40649,7 @@
 
   WebGLActiveInfo getActiveUniform(WebGLProgram program, int index) native "WebGLRenderingContext_getActiveUniform_Callback";
 
-  List<Object> getAttachedShaders(WebGLProgram program) native "WebGLRenderingContext_getAttachedShaders_Callback";
+  void getAttachedShaders(WebGLProgram program) native "WebGLRenderingContext_getAttachedShaders_Callback";
 
   int getAttribLocation(WebGLProgram program, String name) native "WebGLRenderingContext_getAttribLocation_Callback";
 
@@ -40490,7 +40659,7 @@
 
   int getError() native "WebGLRenderingContext_getError_Callback";
 
-  Object getExtension(String name) native "WebGLRenderingContext_getExtension_Callback";
+  void getExtension(String name) native "WebGLRenderingContext_getExtension_Callback";
 
   Object getFramebufferAttachmentParameter(int target, int attachment, int pname) native "WebGLRenderingContext_getFramebufferAttachmentParameter_Callback";
 
@@ -40573,23 +40742,23 @@
   void stencilOpSeparate(int face, int fail, int zfail, int zpass) native "WebGLRenderingContext_stencilOpSeparate_Callback";
 
   void texImage2D(/*unsigned long*/ target, /*long*/ level, /*unsigned long*/ internalformat, /*long*/ format_OR_width, /*long*/ height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [/*unsigned long*/ format, /*unsigned long*/ type, /*ArrayBufferView*/ pixels]) {
-    if ((target is int || target === null) && (level is int || level === null) && (internalformat is int || internalformat === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video === null) && (format is int || format === null) && (type is int || type === null) && (pixels is ArrayBufferView || pixels === null)) {
+    if ((target is int || target == null) && (level is int || level == null) && (internalformat is int || internalformat == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && (format is int || format == null) && (type is int || type == null) && (pixels is ArrayBufferView || pixels == null)) {
       _texImage2D_1(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
       return;
     }
-    if ((target is int || target === null) && (level is int || level === null) && (internalformat is int || internalformat === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData || border_OR_canvas_OR_image_OR_pixels_OR_video === null) && !?format && !?type && !?pixels) {
+    if ((target is int || target == null) && (level is int || level == null) && (internalformat is int || internalformat == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && !?format && !?type && !?pixels) {
       _texImage2D_2(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
-    if ((target is int || target === null) && (level is int || level === null) && (internalformat is int || internalformat === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is ImageElement || border_OR_canvas_OR_image_OR_pixels_OR_video === null) && !?format && !?type && !?pixels) {
+    if ((target is int || target == null) && (level is int || level == null) && (internalformat is int || internalformat == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is ImageElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && !?format && !?type && !?pixels) {
       _texImage2D_3(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
-    if ((target is int || target === null) && (level is int || level === null) && (internalformat is int || internalformat === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is CanvasElement || border_OR_canvas_OR_image_OR_pixels_OR_video === null) && !?format && !?type && !?pixels) {
+    if ((target is int || target == null) && (level is int || level == null) && (internalformat is int || internalformat == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is CanvasElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && !?format && !?type && !?pixels) {
       _texImage2D_4(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
-    if ((target is int || target === null) && (level is int || level === null) && (internalformat is int || internalformat === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is VideoElement || border_OR_canvas_OR_image_OR_pixels_OR_video === null) && !?format && !?type && !?pixels) {
+    if ((target is int || target == null) && (level is int || level == null) && (internalformat is int || internalformat == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is VideoElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && !?format && !?type && !?pixels) {
       _texImage2D_5(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
@@ -40611,23 +40780,23 @@
   void texParameteri(int target, int pname, int param) native "WebGLRenderingContext_texParameteri_Callback";
 
   void texSubImage2D(/*unsigned long*/ target, /*long*/ level, /*long*/ xoffset, /*long*/ yoffset, /*long*/ format_OR_width, /*long*/ height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [/*unsigned long*/ type, /*ArrayBufferView*/ pixels]) {
-    if ((target is int || target === null) && (level is int || level === null) && (xoffset is int || xoffset === null) && (yoffset is int || yoffset === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video === null) && (type is int || type === null) && (pixels is ArrayBufferView || pixels === null)) {
+    if ((target is int || target == null) && (level is int || level == null) && (xoffset is int || xoffset == null) && (yoffset is int || yoffset == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && (type is int || type == null) && (pixels is ArrayBufferView || pixels == null)) {
       _texSubImage2D_1(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
       return;
     }
-    if ((target is int || target === null) && (level is int || level === null) && (xoffset is int || xoffset === null) && (yoffset is int || yoffset === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData || canvas_OR_format_OR_image_OR_pixels_OR_video === null) && !?type && !?pixels) {
+    if ((target is int || target == null) && (level is int || level == null) && (xoffset is int || xoffset == null) && (yoffset is int || yoffset == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && !?type && !?pixels) {
       _texSubImage2D_2(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
-    if ((target is int || target === null) && (level is int || level === null) && (xoffset is int || xoffset === null) && (yoffset is int || yoffset === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is ImageElement || canvas_OR_format_OR_image_OR_pixels_OR_video === null) && !?type && !?pixels) {
+    if ((target is int || target == null) && (level is int || level == null) && (xoffset is int || xoffset == null) && (yoffset is int || yoffset == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is ImageElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && !?type && !?pixels) {
       _texSubImage2D_3(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
-    if ((target is int || target === null) && (level is int || level === null) && (xoffset is int || xoffset === null) && (yoffset is int || yoffset === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is CanvasElement || canvas_OR_format_OR_image_OR_pixels_OR_video === null) && !?type && !?pixels) {
+    if ((target is int || target == null) && (level is int || level == null) && (xoffset is int || xoffset == null) && (yoffset is int || yoffset == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is CanvasElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && !?type && !?pixels) {
       _texSubImage2D_4(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
-    if ((target is int || target === null) && (level is int || level === null) && (xoffset is int || xoffset === null) && (yoffset is int || yoffset === null) && (format_OR_width is int || format_OR_width === null) && (height_OR_type is int || height_OR_type === null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is VideoElement || canvas_OR_format_OR_image_OR_pixels_OR_video === null) && !?type && !?pixels) {
+    if ((target is int || target == null) && (level is int || level == null) && (xoffset is int || xoffset == null) && (yoffset is int || yoffset == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is VideoElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && !?type && !?pixels) {
       _texSubImage2D_5(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
@@ -40735,13 +40904,13 @@
 abstract class WebGLShaderPrecisionFormat {
 
   /** @domName WebGLShaderPrecisionFormat.precision */
-  abstract int get precision;
+  int get precision;
 
   /** @domName WebGLShaderPrecisionFormat.rangeMax */
-  abstract int get rangeMax;
+  int get rangeMax;
 
   /** @domName WebGLShaderPrecisionFormat.rangeMin */
-  abstract int get rangeMin;
+  int get rangeMin;
 }
 // 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
@@ -40825,7 +40994,7 @@
   Animation operator[](int index) native "WebKitAnimationList_item_Callback";
 
   void operator[]=(int index, Animation value) {
-    throw new UnsupportedOperationException("Cannot assign element of immutable List.");
+    throw new UnsupportedError("Cannot assign element of immutable List.");
   }
   // -- start List<Animation> mixins.
   // Animation is the element type.
@@ -40842,15 +41011,15 @@
   // From Collection<Animation>:
 
   void add(Animation value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast(Animation value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<Animation> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   bool contains(Animation element) => _Collections.contains(this, element);
@@ -40866,38 +41035,38 @@
 
   bool some(bool f(Animation element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Animation>:
 
   void sort([Comparator<Animation> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Animation element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf(Animation element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  Animation last() => this[length - 1];
+  Animation get last => this[length - 1];
 
   Animation removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Animation> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [Animation initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<Animation> getRange(int start, int rangeLength) =>
@@ -40942,7 +41111,7 @@
   static const int CSS_FILTER_SEPIA = 3;
 
   /** @domName WebKitCSSFilterValue.operationType */
-  abstract int get operationType;
+  int get operationType;
 }
 // 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
@@ -40965,13 +41134,13 @@
 abstract class WebKitNamedFlow implements EventTarget {
 
   /** @domName WebKitNamedFlow.firstEmptyRegionIndex */
-  abstract int get firstEmptyRegionIndex;
+  int get firstEmptyRegionIndex;
 
   /** @domName WebKitNamedFlow.name */
-  abstract String get name;
+  String get name;
 
   /** @domName WebKitNamedFlow.overset */
-  abstract bool get overset;
+  bool get overset;
 
   /** @domName WebKitNamedFlow.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -41024,6 +41193,7 @@
 
 // WARNING: Do not edit - generated code.
 
+
 /// @domName WebSocket
 abstract class WebSocket implements EventTarget {
 
@@ -41043,25 +41213,25 @@
   static const int OPEN = 1;
 
   /** @domName WebSocket.URL */
-  abstract String get URL;
+  String get URL;
 
   /** @domName WebSocket.binaryType */
   String binaryType;
 
   /** @domName WebSocket.bufferedAmount */
-  abstract int get bufferedAmount;
+  int get bufferedAmount;
 
   /** @domName WebSocket.extensions */
-  abstract String get extensions;
+  String get extensions;
 
   /** @domName WebSocket.protocol */
-  abstract String get protocol;
+  String get protocol;
 
   /** @domName WebSocket.readyState */
-  abstract int get readyState;
+  int get readyState;
 
   /** @domName WebSocket.url */
-  abstract String get url;
+  String get url;
 
   /** @domName WebSocket.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -41159,17 +41329,18 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+
 /// @domName WheelEvent
 abstract class WheelEvent implements MouseEvent {
 
   /** @domName WheelEvent.webkitDirectionInvertedFromDevice */
-  abstract bool get webkitDirectionInvertedFromDevice;
+  bool get webkitDirectionInvertedFromDevice;
 
   /** @domName WheelEvent.wheelDeltaX */
-  abstract int get $dom_wheelDeltaX;
+  int get $dom_wheelDeltaX;
 
   /** @domName WheelEvent.wheelDeltaY */
-  abstract int get $dom_wheelDeltaY;
+  int get $dom_wheelDeltaY;
 
   /** @domName WheelEvent.initWebKitWheelEvent */
   void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
@@ -41250,22 +41421,22 @@
   static const int TEMPORARY = 0;
 
   /** @domName WorkerContext.indexedDB */
-  abstract IDBFactory get indexedDB;
+  IDBFactory get indexedDB;
 
   /** @domName WorkerContext.location */
-  abstract WorkerLocation get location;
+  WorkerLocation get location;
 
   /** @domName WorkerContext.navigator */
-  abstract WorkerNavigator get navigator;
+  WorkerNavigator get navigator;
 
   /** @domName WorkerContext.self */
-  abstract WorkerContext get self;
+  WorkerContext get self;
 
   /** @domName WorkerContext.webkitIndexedDB */
-  abstract IDBFactory get webkitIndexedDB;
+  IDBFactory get webkitIndexedDB;
 
   /** @domName WorkerContext.webkitNotifications */
-  abstract NotificationCenter get webkitNotifications;
+  NotificationCenter get webkitNotifications;
 
   /** @domName WorkerContext.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
@@ -41409,28 +41580,28 @@
 abstract class WorkerLocation {
 
   /** @domName WorkerLocation.hash */
-  abstract String get hash;
+  String get hash;
 
   /** @domName WorkerLocation.host */
-  abstract String get host;
+  String get host;
 
   /** @domName WorkerLocation.hostname */
-  abstract String get hostname;
+  String get hostname;
 
   /** @domName WorkerLocation.href */
-  abstract String get href;
+  String get href;
 
   /** @domName WorkerLocation.pathname */
-  abstract String get pathname;
+  String get pathname;
 
   /** @domName WorkerLocation.port */
-  abstract String get port;
+  String get port;
 
   /** @domName WorkerLocation.protocol */
-  abstract String get protocol;
+  String get protocol;
 
   /** @domName WorkerLocation.search */
-  abstract String get search;
+  String get search;
 
   /** @domName WorkerLocation.toString */
   String toString();
@@ -41472,19 +41643,19 @@
 abstract class WorkerNavigator {
 
   /** @domName WorkerNavigator.appName */
-  abstract String get appName;
+  String get appName;
 
   /** @domName WorkerNavigator.appVersion */
-  abstract String get appVersion;
+  String get appVersion;
 
   /** @domName WorkerNavigator.onLine */
-  abstract bool get onLine;
+  bool get onLine;
 
   /** @domName WorkerNavigator.platform */
-  abstract String get platform;
+  String get platform;
 
   /** @domName WorkerNavigator.userAgent */
-  abstract String get userAgent;
+  String get userAgent;
 }
 // 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
@@ -41579,13 +41750,13 @@
   static const int TYPE_ERR = 52;
 
   /** @domName XPathException.code */
-  abstract int get code;
+  int get code;
 
   /** @domName XPathException.message */
-  abstract String get message;
+  String get message;
 
   /** @domName XPathException.name */
-  abstract String get name;
+  String get name;
 
   /** @domName XPathException.toString */
   String toString();
@@ -41683,25 +41854,25 @@
   static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6;
 
   /** @domName XPathResult.booleanValue */
-  abstract bool get booleanValue;
+  bool get booleanValue;
 
   /** @domName XPathResult.invalidIteratorState */
-  abstract bool get invalidIteratorState;
+  bool get invalidIteratorState;
 
   /** @domName XPathResult.numberValue */
-  abstract num get numberValue;
+  num get numberValue;
 
   /** @domName XPathResult.resultType */
-  abstract int get resultType;
+  int get resultType;
 
   /** @domName XPathResult.singleNodeValue */
-  abstract Node get singleNodeValue;
+  Node get singleNodeValue;
 
   /** @domName XPathResult.snapshotLength */
-  abstract int get snapshotLength;
+  int get snapshotLength;
 
   /** @domName XPathResult.stringValue */
-  abstract String get stringValue;
+  String get stringValue;
 
   /** @domName XPathResult.iterateNext */
   Node iterateNext();
@@ -41856,6 +42027,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.
 
+
 class _Elements {
 
 
@@ -42406,9 +42578,7 @@
   void focus();
   void blur();
   void close();
-  void postMessage(Dynamic message,
-                   String targetOrigin,
-		   [List messagePorts = null]);
+  void postMessage(var message, String targetOrigin, [List messagePorts = null]);
 }
 
 abstract class Location {
@@ -42419,7 +42589,8 @@
   void back();
   void forward();
   void go(int distance);
-}// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+}
+// Copyright (c) 2011, 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.
 
@@ -43070,7 +43241,7 @@
   }
 
   static bool isEmpty(Iterable<Object> iterable) {
-    return !iterable.iterator().hasNext();
+    return !iterable.iterator().hasNext;
   }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -43526,7 +43697,7 @@
 
   void receive(callback(var message)) {
     _callback = callback;
-    if (_listener === null) {
+    if (_listener == null) {
       _listener = (Event e) {
         var data = JSON.parse(_getPortSyncEventData(e));
         var replyTo = data[0];
@@ -43540,7 +43711,7 @@
 
   void close() {
     _portMap.remove(_portId);
-    if (_listener !== null) window.on[_listenerName].remove(_listener);
+    if (_listener != null) window.on[_listenerName].remove(_listener);
   }
 
   SendPortSync toSendPort() {
@@ -43698,7 +43869,7 @@
  * no measurements were actually requested.
  */
 void _addMeasurementFrameCallback(TimeoutHandler callback) {
-  if (_pendingMeasurementFrameCallbacks === null) {
+  if (_pendingMeasurementFrameCallbacks == null) {
     _pendingMeasurementFrameCallbacks = <TimeoutHandler>[];
     _maybeScheduleMeasurementFrame();
   }
@@ -43715,7 +43886,7 @@
  */
 Future _createMeasurementFuture(ComputeValue computeValue,
                                 Completer completer) {
-  if (_pendingRequests === null) {
+  if (_pendingRequests == null) {
     _pendingRequests = <_MeasurementRequest>[];
     _maybeScheduleMeasurementFrame();
   }
@@ -43731,7 +43902,7 @@
   // We must compute all new values before fulfilling the futures as
   // the onComplete callbacks for the futures could modify the DOM making
   // subsequent measurement calculations expensive to compute.
-  if (_pendingRequests !== null) {
+  if (_pendingRequests != null) {
     for (_MeasurementRequest request in _pendingRequests) {
       try {
         request.value = request.computeValue();
@@ -43746,7 +43917,7 @@
   final readyMeasurementFrameCallbacks = _pendingMeasurementFrameCallbacks;
   _pendingRequests = null;
   _pendingMeasurementFrameCallbacks = null;
-  if (completedRequests !== null) {
+  if (completedRequests != null) {
     for (_MeasurementRequest request in completedRequests) {
       if (request.exception) {
         request.completer.completeException(request.value);
@@ -43756,7 +43927,7 @@
     }
   }
 
-  if (readyMeasurementFrameCallbacks !== null) {
+  if (readyMeasurementFrameCallbacks != null) {
     for (TimeoutHandler handler in readyMeasurementFrameCallbacks) {
       // TODO(jacobr): wrap each call to a handler in a try-catch block.
       handler();
@@ -43825,7 +43996,7 @@
   }
 
   static bool isPrimitive(x) {
-    return (x === null) || (x is String) || (x is num) || (x is bool);
+    return (x == null) || (x is String) || (x is num) || (x is bool);
   }
 }
 
@@ -43837,7 +44008,7 @@
 
   List visitList(List list) {
     List copy = _visited[list];
-    if (copy !== null) return copy;
+    if (copy != null) return copy;
 
     int len = list.length;
 
@@ -43852,7 +44023,7 @@
 
   Map visitMap(Map map) {
     Map copy = _visited[map];
-    if (copy !== null) return copy;
+    if (copy != null) return copy;
 
     // TODO(floitsch): we loose the generic type of the map.
     copy = new Map();
@@ -43873,7 +44044,7 @@
 
   visitList(List list) {
     int copyId = _visited[list];
-    if (copyId !== null) return ['ref', copyId];
+    if (copyId != null) return ['ref', copyId];
 
     int id = _nextFreeRefId++;
     _visited[list] = id;
@@ -43884,12 +44055,12 @@
 
   visitMap(Map map) {
     int copyId = _visited[map];
-    if (copyId !== null) return ['ref', copyId];
+    if (copyId != null) return ['ref', copyId];
 
     int id = _nextFreeRefId++;
     _visited[map] = id;
-    var keys = _serializeList(map.getKeys());
-    var values = _serializeList(map.getValues());
+    var keys = _serializeList(map.keys);
+    var values = _serializeList(map.values);
     // TODO(floitsch): we are losing the generic type.
     return ['map', id, keys, values];
   }
@@ -43906,17 +44077,17 @@
 
 /** Deserializes arrays created with [_Serializer]. */
 class _Deserializer {
-  Map<int, Dynamic> _deserialized;
+  Map<int, dynamic> _deserialized;
 
   _Deserializer();
 
   static bool isPrimitive(x) {
-    return (x === null) || (x is String) || (x is num) || (x is bool);
+    return (x == null) || (x is String) || (x is num) || (x is bool);
   }
 
   deserialize(x) {
     if (isPrimitive(x)) return x;
-    // TODO(floitsch): this should be new HashMap<int, var|Dynamic>()
+    // TODO(floitsch): this should be new HashMap<int, dynamic>()
     _deserialized = new HashMap();
     return _deserializeHelper(x);
   }
@@ -43936,7 +44107,7 @@
   _deserializeRef(List x) {
     int id = x[1];
     var result = _deserialized[id];
-    assert(result !== null);
+    assert(result != null);
     return result;
   }
 
@@ -44015,7 +44186,7 @@
       : super(array),
         _length = array.length;
 
-  bool hasNext() => _length > _pos;
+  bool get hasNext => _length > _pos;
 
   final int _length;  // Cache array length for faster access.
 }
@@ -44026,11 +44197,11 @@
       : _array = array,
         _pos = 0;
 
-  bool hasNext() => _array.length > _pos;
+  bool get hasNext => _array.length > _pos;
 
   T next() {
-    if (!hasNext()) {
-      throw const NoMoreElementsException();
+    if (!hasNext) {
+      throw new StateError("No more elements");
     }
     return _array[_pos++];
   }
@@ -44119,7 +44290,7 @@
 var _testRunner;
 
 TestRunner get testRunner {
-  if (_testRunner === null)
+  if (_testRunner == null)
     _testRunner = new TestRunner._(_NPObject.retrieve("testRunner"));
   return _testRunner;
 }
@@ -44165,7 +44336,7 @@
   static Map createMap() => {};
 
   static makeNotImplementedException(String fileName, int lineNo) {
-    return new UnsupportedOperationException('[info: $fileName:$lineNo]');
+    return new UnsupportedError('[info: $fileName:$lineNo]');
   }
 
   static window() native "Utils_window";
@@ -44237,16 +44408,16 @@
   String remove(String key) native "DOMStringMap_remove_Callback";
   void clear() => Maps.clear(this);
   void forEach(void f(String key, String value)) => Maps.forEach(this, f);
-  Collection<String> getKeys() native "DOMStringMap_getKeys_Callback";
-  Collection<String> getValues() => Maps.getValues(this);
+  Collection<String> get keys native "DOMStringMap_getKeys_Callback";
+  Collection<String> get values => Maps.getValues(this);
   int get length => Maps.length(this);
-  bool isEmpty() => Maps.isEmpty(this);
+  bool get isEmpty => Maps.isEmpty(this);
 }
 
 get _printClosure => (s) {
   try {
     window.console.log(s);
-  } on Dynamic catch(_) {
+  } catch (_) {
     _Utils.print(s);
   }
 };
diff --git a/lib/html/idl/dart/dart.idl b/lib/html/idl/dart/dart.idl
index 2a319ae..0790ad1 100644
--- a/lib/html/idl/dart/dart.idl
+++ b/lib/html/idl/dart/dart.idl
@@ -1,62 +1,12 @@
 
 // This file introduces / supplements and forces Dart declarations.
 
-module default {
-  ClientRectList implements sequence<ClientRect>;
-  CSSRuleList implements sequence<CSSRule>;
-  CSSValueList implements sequence<CSSValue>;
-  DOMMimeTypeArray implements sequence<DOMMimeType>;
-  DOMPluginArray implements sequence<DOMPlugin>;
-  EntryArray implements sequence<Entry>;
-  EntryArraySync implements sequence<EntrySync>;
-  FileList implements sequence<File>;
-  GamepadList implements sequence<Gamepad>;
-  HTMLAllCollection implements sequence<Node>;
-  HTMLCollection implements sequence<Node>;
-  MediaStreamList implements sequence<MediaStream>;
-  NamedNodeMap implements sequence<Node>;
-  NodeList implements sequence<Node>;
-  SVGAnimatedLengthList implements sequence<SVGAnimatedLength>;
-  SVGAnimatedNumberList implements sequence<SVGAnimatedNumber>;
-  SVGAnimatedTransformList implements sequence<SVGAnimateTransformElement>;
-  SVGElementInstanceList implements sequence<SVGElementInstance>;
-  SVGLengthList implements sequence<SVGLength>;
-  SVGNumberList implements sequence<SVGNumber>;
-  SVGPathSegList implements sequence<SVGPathSeg>;
-  SVGStringList implements sequence<DOMString>;
-  SVGTransformList implements sequence<SVGTransform>;
-  SourceBufferList implements sequence<SourceBuffer>;
-  SpeechGrammarList implements sequence<SpeechGrammar>;
-  SpeechInputResultList implements sequence<SpeechInputResult>;
-  SpeechRecognitionResultList implements sequence<SpeechRecognitionResult>;
-  SQLResultSetRowList implements sequence<Dictionary>;
-  StyleSheetList implements sequence<StyleSheet>;
-  TextTrackList implements sequence<TextTrack>;
-  TextTrackCueList implements sequence<TextTrackCue>;
-  TouchList implements sequence<Touch>;
-  WebKitAnimationList implements sequence<WebKitAnimation>;
-
-  Float32Array implements sequence<double>;
-  Float64Array implements sequence<double>;
-  Int8Array implements sequence<int>;
-  Int16Array implements sequence<int>;
-  Int32Array implements sequence<int>;
-  Uint8Array implements sequence<int>;
-  Uint16Array implements sequence<int>;
-  Uint32Array implements sequence<int>;
-
-  // Is List<int> because inherits from Uint8Array:
-  // Uint8ClampedArray implements sequence<int>;
-}
-
 module core {
   [Supplemental]
   interface Document {
     [Suppressed] DOMObject getCSSCanvasContext(in DOMString contextId, in DOMString name, in long width, in long height);
     CanvasRenderingContext getCSSCanvasContext(in DOMString contextId, in DOMString name, in long width, in long height);
   };
-
-  DOMStringList implements sequence<DOMString>;
 };
 
 module dom {
diff --git a/lib/html/scripts/css_code_generator.py b/lib/html/scripts/css_code_generator.py
index f098d81..11bf7bc 100644
--- a/lib/html/scripts/css_code_generator.py
+++ b/lib/html/scripts/css_code_generator.py
@@ -109,7 +109,7 @@
   CSSStyleDeclarationWrappingImplementation._wrap(ptr) : super._wrap(ptr) {}
 
   static String get _browserPrefix {
-    if (_cachedBrowserPrefix === null) {
+    if (_cachedBrowserPrefix == null) {
       if (_Device.isFirefox) {
         _cachedBrowserPrefix = '-moz-';
       } else {
diff --git a/lib/html/scripts/generator.py b/lib/html/scripts/generator.py
index c8ab91a..a7332a9 100644
--- a/lib/html/scripts/generator.py
+++ b/lib/html/scripts/generator.py
@@ -33,6 +33,28 @@
 def IsPureInterface(interface_name):
   return interface_name in _pure_interfaces
 
+
+_methods_with_named_formals = set([
+  'DataView.getFloat32',
+  'DataView.getFloat64',
+  'DataView.getInt16',
+  'DataView.getInt32',
+  'DataView.getInt8',
+  'DataView.getUint16',
+  'DataView.getUint32',
+  'DataView.getUint8',
+  'DataView.setFloat32',
+  'DataView.setFloat64',
+  'DataView.setInt16',
+  'DataView.setInt32',
+  'DataView.setInt8',
+  'DataView.setUint16',
+  'DataView.setUint32',
+  'DataView.setUint8',
+  'DirectoryEntry.getDirectory',
+  'DirectoryEntry.getFile',
+  ])
+
 #
 # Renames for attributes that have names that are not legal Dart names.
 #
@@ -72,63 +94,6 @@
 def IsRegisteredType(type_name):
   return type_name in _idl_type_registry
 
-def ListImplementationInfo(interface, database):
-  """Returns a tuple (elment_type, requires_indexer).
-  If interface do not have to implement List, element_type is None.
-  Otherwise element_type is list element type and requires_indexer
-  is true iff this interface implementation must have indexer and
-  false otherwise.  False means that interface implementation
-  inherits indexer and may just reuse it."""
-  element_type = MaybeListElementType(interface)
-  if element_type:
-    return (element_type, True)
-
-  for parent in interface.parents:
-    if database.HasInterface(parent.type.id):
-      parent_interface = database.GetInterface(parent.type.id)
-      (element_type, _) = ListImplementationInfo(parent_interface, database)
-      if element_type:
-        return (element_type, False)
-
-  return (None, None)
-
-
-def MaybeListElementType(interface):
-  """Returns the List element type T, or None in interface does not implement
-  List<T>.
-  """
-  for parent in interface.parents:
-    match = re.match(r'sequence<(\w*)>$', parent.type.id)
-    if match:
-      return match.group(1)
-  return None
-
-def MaybeTypedArrayElementType(interface):
-  """Returns the typed array element type, or None in interface is not a
-  TypedArray.
-  """
-  # Typed arrays implement ArrayBufferView and List<T>.
-  for parent in interface.parents:
-    if parent.type.id == 'ArrayBufferView':
-      return MaybeListElementType(interface)
-  return None
-
-def MaybeTypedArrayElementTypeInHierarchy(interface, database):
-  """Returns the typed array element type, or None in interface is not a
-  TypedArray.  Checks the whole parent hierarchy.
-  """
-  element_type = MaybeTypedArrayElementType(interface)
-  if element_type:
-    return element_type
-  for parent in interface.parents:
-    if database.HasInterface(parent.type.id):
-      parent_interface = database.GetInterface(parent.type.id)
-      element_type = MaybeTypedArrayElementType(parent_interface)
-      if element_type:
-        return element_type
-
-  return None
-
 def MakeNativeSpec(javascript_binding_name):
   if javascript_binding_name in _dart2js_dom_custom_native_specs:
     return _dart2js_dom_custom_native_specs[javascript_binding_name]
@@ -237,7 +202,8 @@
   info.js_name = info.declared_name
   info.type_name = operations[0].type.id   # TODO: widen.
   info.param_infos = _BuildArguments([op.arguments for op in split_operations], interface)
-  info.requires_named_arguments = False
+  full_name = '%s.%s' % (interface.id, info.declared_name)
+  info.requires_named_arguments = full_name in _methods_with_named_formals
   return info
 
 
@@ -308,11 +274,11 @@
   where a type may be omitted.
   The string is empty or has a trailing space.
   """
-  if dart_type == 'Dynamic':
+  if dart_type == 'dynamic':
     if comment:
       return '/*%s*/ ' % comment   # Just a comment foo(/*T*/ x)
     else:
-      return ''                    # foo(x) looks nicer than foo(Dynamic x)
+      return ''                    # foo(x) looks nicer than foo(var|dynamic x)
   else:
     return dart_type + ' '
 
@@ -320,7 +286,7 @@
 def TypeOrVar(dart_type, comment=None):
   """Returns string for declaring something with |dart_type| in a context
   where if a type is omitted, 'var' must be used instead."""
-  if dart_type == 'Dynamic':
+  if dart_type == 'dynamic':
     if comment:
       return 'var /*%s*/' % comment   # e.g.  var /*T*/ x;
     else:
@@ -343,7 +309,7 @@
 
   def ParametersDeclaration(self, rename_type, force_optional=False):
     def FormatParam(param):
-      dart_type = rename_type(param.type_id) if param.type_id else 'Dynamic'
+      dart_type = rename_type(param.type_id) if param.type_id else 'dynamic'
       return '%s%s' % (TypeOrNothing(dart_type, param.type_id), param.name)
 
     required = []
@@ -437,7 +403,7 @@
 
 
   def CopyAndWidenDefaultParameters(self):
-    """Returns equivalent OperationInfo, but default parameters are Dynamic."""
+    """Returns equivalent OperationInfo, but default parameters are dynamic."""
     info = copy.copy(self)
     info.param_infos = [param.Copy() for param in self.param_infos]
     for param in info.param_infos:
@@ -477,7 +443,7 @@
 # name
 def TypeName(type_ids, interface):
   # Dynamically type this field for now.
-  return 'Dynamic'
+  return 'dynamic'
 
 def ImplementationClassNameForInterfaceName(interface_name):
   return '_%sImpl' % interface_name
@@ -507,7 +473,7 @@
 #
 
 _serialize_SSV = Conversion('_convertDartToNative_SerializedScriptValue',
-                           'Dynamic', 'Dynamic')
+                           'dynamic', 'dynamic')
 
 dart2js_conversions = {
     # Wrap non-local Windows.  We need to check EventTarget (the base type)
@@ -523,19 +489,19 @@
                  'EventTarget'),
 
     'IDBKey get':
-      Conversion('_convertNativeToDart_IDBKey', 'Dynamic', 'Dynamic'),
+      Conversion('_convertNativeToDart_IDBKey', 'dynamic', 'dynamic'),
     'IDBKey set':
-      Conversion('_convertDartToNative_IDBKey', 'Dynamic', 'Dynamic'),
+      Conversion('_convertDartToNative_IDBKey', 'dynamic', 'dynamic'),
 
     'ImageData get':
-      Conversion('_convertNativeToDart_ImageData', 'Dynamic', 'ImageData'),
+      Conversion('_convertNativeToDart_ImageData', 'dynamic', 'ImageData'),
     'ImageData set':
-      Conversion('_convertDartToNative_ImageData', 'ImageData', 'Dynamic'),
+      Conversion('_convertDartToNative_ImageData', 'ImageData', 'dynamic'),
 
     'Dictionary get':
-      Conversion('_convertNativeToDart_Dictionary', 'Dynamic', 'Map'),
+      Conversion('_convertNativeToDart_Dictionary', 'dynamic', 'Map'),
     'Dictionary set':
-      Conversion('_convertDartToNative_Dictionary', 'Map', 'Dynamic'),
+      Conversion('_convertDartToNative_Dictionary', 'Map', 'dynamic'),
 
     'DOMString[] set':
       Conversion('_convertDartToNative_StringArray', 'List<String>', 'List'),
@@ -553,21 +519,21 @@
     # receiving message via MessageEvent
     'DOMObject get MessageEvent.data':
       Conversion('_convertNativeToDart_SerializedScriptValue',
-                 'Dynamic', 'Dynamic'),
+                 'dynamic', 'dynamic'),
 
 
     # IDBAny is problematic.  Some uses are just a union of other IDB types,
     # which need no conversion..  Others include data values which require
     # serialized script value processing.
     'IDBAny get IDBCursorWithValue.value':
-      Conversion('_convertNativeToDart_IDBAny', 'Dynamic', 'Dynamic'),
+      Conversion('_convertNativeToDart_IDBAny', 'dynamic', 'dynamic'),
 
     # This is problematic.  The result property of IDBRequest is used for
     # all requests.  Read requests like IDBDataStore.getObject need
     # conversion, but other requests like opening a database return
     # something that does not need conversion.
     'IDBAny get IDBRequest.result':
-      Conversion('_convertNativeToDart_IDBAny', 'Dynamic', 'Dynamic'),
+      Conversion('_convertNativeToDart_IDBAny', 'dynamic', 'dynamic'),
 
     # "source: On getting, returns the IDBObjectStore or IDBIndex that the
     # cursor is iterating. ...".  So we should not try to convert it.
@@ -609,6 +575,12 @@
   def has_generated_interface(self):
     raise NotImplementedError()
 
+  def list_item_type(self):
+    raise NotImplementedError()
+
+  def is_typed_array(self):
+    raise NotImplementedError()
+
   def merged_interface(self):
     return None
 
@@ -696,14 +668,25 @@
 
 
 class InterfaceIDLTypeInfo(IDLTypeInfo):
-  def __init__(self, idl_type, data, dart_interface_name):
+  def __init__(self, idl_type, data, dart_interface_name, type_registry):
     super(InterfaceIDLTypeInfo, self).__init__(idl_type, data)
     self._dart_interface_name = dart_interface_name
+    self._type_registry = type_registry
 
   def dart_type(self):
+    # TODO(podivilov): why NodeList is special?
+    if self.idl_type() == 'NodeList':
+      return 'List<Node>'
+    if self.list_item_type() and not self.has_generated_interface():
+      return 'List<%s>' % self._type_registry.TypeInfo(self._data.item_type).dart_type()
     return self._data.dart_type or self._dart_interface_name
 
   def narrow_dart_type(self):
+    # TODO(podivilov): why NodeList is special?
+    if self.idl_type() == 'NodeList':
+      return 'List<Node>'
+    if self.list_item_type():
+      return ImplementationClassNameForInterfaceName(self.idl_type())
     # TODO(podivilov): only primitive and collection types should override
     # dart_type.
     if self._data.dart_type != None:
@@ -713,9 +696,13 @@
     return ImplementationClassNameForInterfaceName(self.interface_name())
 
   def interface_name(self):
+    if self.list_item_type() and not self.has_generated_interface():
+      return self.dart_type()
     return self._dart_interface_name
 
   def implementation_name(self):
+    if self.list_item_type():
+      return ImplementationClassNameForInterfaceName(self.idl_type())
     implementation_name = ImplementationClassNameForInterfaceName(
         self.interface_name())
     if self.merged_into():
@@ -723,7 +710,13 @@
     return implementation_name
 
   def has_generated_interface(self):
-    return True
+    return not self._data.suppress_interface
+
+  def list_item_type(self):
+    return self._data.item_type
+
+  def is_typed_array(self):
+    return self._data.is_typed_array
 
   def merged_interface(self):
     # All constants, attributes, and operations of merged interface should be
@@ -751,38 +744,6 @@
     super(CallbackIDLTypeInfo, self).__init__(idl_type, data)
 
 
-# Type info for DOM types that are converted to dart lists and therefore whose
-# actual interface generation should be suppressed. For type information, we
-# still generate the implementations though, so these types should not be
-# suppressed entirely.
-class ListLikeIDLTypeInfo(IDLTypeInfo):
-  def __init__(self, idl_type, data, item_info):
-    super(ListLikeIDLTypeInfo, self).__init__(idl_type, data)
-    self._item_info = item_info
-
-  def dart_type(self):
-    return 'List<%s>' % self._item_info.dart_type()
-
-  def narrow_dart_type(self):
-    if self.has_generated_interface():
-      return self.dart_type()
-    return ImplementationClassNameForInterfaceName(self.idl_type())
-
-  def interface_name(self):
-    if self.has_generated_interface():
-      return self.idl_type()
-    return self.dart_type()
-
-  def implementation_name(self):
-    return ImplementationClassNameForInterfaceName(self.idl_type())
-
-  def has_generated_interface(self):
-    # Don't generate interfaces for list-like types.
-    # TODO(podivilov): why NodeList is special? Is it indeed a list-like type
-    # or should just implement sequence<Node>?
-    return self.idl_type() == 'NodeList'
-
-
 class SequenceIDLTypeInfo(IDLTypeInfo):
   def __init__(self, idl_type, data, item_info):
     super(SequenceIDLTypeInfo, self).__init__(idl_type, data)
@@ -868,8 +829,9 @@
 
 
 class SVGTearOffIDLTypeInfo(InterfaceIDLTypeInfo):
-  def __init__(self, idl_type, data):
-    super(SVGTearOffIDLTypeInfo, self).__init__(idl_type, data, idl_type)
+  def __init__(self, idl_type, data, type_registry):
+    super(SVGTearOffIDLTypeInfo, self).__init__(
+        idl_type, data, idl_type, type_registry)
 
   def native_type(self):
     if self._data.native_type:
@@ -913,7 +875,7 @@
                webcore_getter_name='getAttribute',
                webcore_setter_name='setAttribute',
                requires_v8_scope=False,
-               item_type=None):
+               item_type=None, suppress_interface=False, is_typed_array=False):
     self.clazz = clazz
     self.dart_type = dart_type
     self.native_type = native_type
@@ -926,6 +888,12 @@
     self.webcore_setter_name = webcore_setter_name
     self.requires_v8_scope = requires_v8_scope
     self.item_type = item_type
+    self.suppress_interface = suppress_interface
+    self.is_typed_array = is_typed_array
+
+
+def TypedArrayTypeData(item_type):
+  return TypeData(clazz='Interface', item_type=item_type, is_typed_array=True)
 
 
 _idl_type_registry = {
@@ -954,7 +922,7 @@
 
     'any': TypeData(clazz='Primitive', dart_type='Object', native_type='ScriptValue', requires_v8_scope=True),
     'Array': TypeData(clazz='Primitive', dart_type='List'),
-    'custom': TypeData(clazz='Primitive', dart_type='Dynamic'),
+    'custom': TypeData(clazz='Primitive', dart_type='dynamic'),
     'Date': TypeData(clazz='Primitive', dart_type='Date', native_type='double'),
     'DOMObject': TypeData(clazz='Primitive', dart_type='Object', native_type='ScriptValue'),
     'DOMString': TypeData(clazz='Primitive', dart_type='String', native_type='String'),
@@ -971,7 +939,7 @@
     # TODO(sra): Come up with some meaningful name so that where this appears in
     # the documentation, the user is made aware that only a limited subset of
     # serializable types are actually permitted.
-    'SerializedScriptValue': TypeData(clazz='Primitive', dart_type='Dynamic'),
+    'SerializedScriptValue': TypeData(clazz='Primitive', dart_type='dynamic'),
     # TODO(sra): Flags is really a dictionary: {create:bool, exclusive:bool}
     # http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-interface
     'WebKitFlags': TypeData(clazz='Primitive', dart_type='Object'),
@@ -991,48 +959,86 @@
     'HTMLDocument': TypeData(clazz='Interface', merged_into='Document'),
     'HTMLElement': TypeData(clazz='Interface', merged_into='Element',
         custom_to_dart=True),
-    'IDBAny': TypeData(clazz='Interface', dart_type='Dynamic', custom_to_native=True),
-    'IDBKey': TypeData(clazz='Interface', dart_type='Dynamic', custom_to_native=True),
+    'IDBAny': TypeData(clazz='Interface', dart_type='dynamic', custom_to_native=True),
+    'IDBKey': TypeData(clazz='Interface', dart_type='dynamic', custom_to_native=True),
     'MutationRecordArray': TypeData(clazz='Interface',  # C++ pass by pointer.
         native_type='MutationRecordArray', dart_type='List<MutationRecord>'),
     'StyleSheet': TypeData(clazz='Interface', conversion_includes=['CSSStyleSheet']),
     'SVGElement': TypeData(clazz='Interface', custom_to_dart=True),
 
-    'ClientRectList': TypeData(clazz='ListLike', item_type='ClientRect'),
-    'CSSRuleList': TypeData(clazz='ListLike', item_type='CSSRule'),
-    'CSSValueList': TypeData(clazz='ListLike', item_type='CSSValue'),
-    'DOMStringList': TypeData(clazz='ListLike', item_type='DOMString',
-        custom_to_native=True),
-    'EntryArray': TypeData(clazz='ListLike', item_type='Entry'),
-    'EntryArraySync': TypeData(clazz='ListLike', item_type='EntrySync'),
-    'FileList': TypeData(clazz='ListLike', item_type='File'),
-    'GamepadList': TypeData(clazz='ListLike', item_type='Gamepad'),
-    'MediaStreamList': TypeData(clazz='ListLike', item_type='MediaStream'),
-    'NodeList': TypeData(clazz='ListLike', item_type='Node'),
-    'SVGElementInstanceList': TypeData(clazz='ListLike',
-        item_type='SVGElementInstance'),
-    'SpeechInputResultList': TypeData(clazz='ListLike',
-        item_type='SpeechInputResult'),
-    'SpeechRecognitionResultList': TypeData(clazz='ListLike',
-        item_type='SpeechRecognitionResult'),
-    'StyleSheetList': TypeData(clazz='ListLike', item_type='StyleSheet'),
-    'WebKitAnimationList': TypeData(clazz='ListLike',
-        item_type='WebKitAnimation'),
+    'ClientRectList': TypeData(clazz='Interface',
+        item_type='ClientRect', suppress_interface=True),
+    'CSSRuleList': TypeData(clazz='Interface',
+        item_type='CSSRule', suppress_interface=True),
+    'CSSValueList': TypeData(clazz='Interface',
+        item_type='CSSValue', suppress_interface=True),
+    'DOMMimeTypeArray': TypeData(clazz='Interface', item_type='DOMMimeType'),
+    'DOMPluginArray': TypeData(clazz='Interface', item_type='DOMPlugin'),
+    'DOMStringList': TypeData(clazz='Interface', item_type='DOMString',
+        suppress_interface=True, custom_to_native=True),
+    'EntryArray': TypeData(clazz='Interface', item_type='Entry',
+        suppress_interface=True),
+    'EntryArraySync': TypeData(clazz='Interface', item_type='EntrySync',
+        suppress_interface=True),
+    'FileList': TypeData(clazz='Interface', item_type='File',
+        suppress_interface=True),
+    'GamepadList': TypeData(clazz='Interface', item_type='Gamepad',
+        suppress_interface=True),
+    'HTMLAllCollection': TypeData(clazz='Interface', item_type='Node'),
+    'HTMLCollection': TypeData(clazz='Interface', item_type='Node'),
+    'MediaStreamList': TypeData(clazz='Interface',
+        item_type='MediaStream', suppress_interface=True),
+    'NamedNodeMap': TypeData(clazz='Interface', item_type='Node'),
+    'NodeList': TypeData(clazz='Interface', item_type='Node'),
+    'SVGAnimatedLengthList': TypeData(clazz='Interface',
+        item_type='SVGAnimatedLength'),
+    'SVGAnimatedNumberList': TypeData(clazz='Interface',
+        item_type='SVGAnimatedNumber'),
+    'SVGAnimatedTransformList': TypeData(clazz='Interface',
+        item_type='SVGAnimateTransformElement'),
+    'SVGElementInstanceList': TypeData(clazz='Interface',
+        item_type='SVGElementInstance', suppress_interface=True),
+    'SourceBufferList': TypeData(clazz='Interface', item_type='SourceBuffer'),
+    'SpeechGrammarList': TypeData(clazz='Interface', item_type='SpeechGrammar'),
+    'SpeechInputResultList': TypeData(clazz='Interface',
+        item_type='SpeechInputResult', suppress_interface=True),
+    'SpeechRecognitionResultList': TypeData(clazz='Interface',
+        item_type='SpeechRecognitionResult', suppress_interface=True),
+    'SQLResultSetRowList': TypeData(clazz='Interface', item_type='Dictionary'),
+    'StyleSheetList': TypeData(clazz='Interface',
+        item_type='StyleSheet', suppress_interface=True),
+    'TextTrackCueList': TypeData(clazz='Interface', item_type='TextTrackCue'),
+    'TextTrackList': TypeData(clazz='Interface', item_type='TextTrack'),
+    'TouchList': TypeData(clazz='Interface', item_type='Touch'),
+    'WebKitAnimationList': TypeData(clazz='Interface',
+        item_type='WebKitAnimation', suppress_interface=True),
+
+    'Float32Array': TypedArrayTypeData('double'),
+    'Float64Array': TypedArrayTypeData('double'),
+    'Int8Array': TypedArrayTypeData('int'),
+    'Int16Array': TypedArrayTypeData('int'),
+    'Int32Array': TypedArrayTypeData('int'),
+    'Uint8Array': TypedArrayTypeData('int'),
+    'Uint16Array': TypedArrayTypeData('int'),
+    'Uint32Array': TypedArrayTypeData('int'),
 
     'SVGAngle': TypeData(clazz='SVGTearOff'),
     'SVGLength': TypeData(clazz='SVGTearOff'),
-    'SVGLengthList': TypeData(clazz='SVGTearOff'),
+    'SVGLengthList': TypeData(clazz='SVGTearOff', item_type='SVGLength'),
     'SVGMatrix': TypeData(clazz='SVGTearOff'),
     'SVGNumber': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<float>'),
-    'SVGNumberList': TypeData(clazz='SVGTearOff'),
-    'SVGPathSegList': TypeData(clazz='SVGTearOff', native_type='SVGPathSegListPropertyTearOff'),
+    'SVGNumberList': TypeData(clazz='SVGTearOff', item_type='SVGNumber'),
+    'SVGPathSegList': TypeData(clazz='SVGTearOff', item_type='SVGPathSeg',
+        native_type='SVGPathSegListPropertyTearOff'),
     'SVGPoint': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<FloatPoint>'),
     'SVGPointList': TypeData(clazz='SVGTearOff'),
     'SVGPreserveAspectRatio': TypeData(clazz='SVGTearOff'),
     'SVGRect': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<FloatRect>'),
-    'SVGStringList': TypeData(clazz='SVGTearOff', native_type='SVGStaticListPropertyTearOff<SVGStringList>'),
+    'SVGStringList': TypeData(clazz='SVGTearOff', item_type='DOMString',
+        native_type='SVGStaticListPropertyTearOff<SVGStringList>'),
     'SVGTransform': TypeData(clazz='SVGTearOff'),
-    'SVGTransformList': TypeData(clazz='SVGTearOff', native_type='SVGTransformListPropertyTearOff'),
+    'SVGTransformList': TypeData(clazz='SVGTearOff', item_type='SVGTransform',
+        native_type='SVGTransformListPropertyTearOff'),
 }
 
 _svg_supplemental_includes = [
@@ -1073,7 +1079,8 @@
       return InterfaceIDLTypeInfo(
           type_name,
           TypeData('Interface'),
-          self._renamer.RenameInterface(interface))
+          self._renamer.RenameInterface(interface),
+          self)
 
     type_data = _idl_type_registry.get(type_name)
 
@@ -1083,10 +1090,11 @@
             self._database.GetInterface(type_name))
       else:
         dart_interface_name = type_name
-      return InterfaceIDLTypeInfo(type_name, type_data, dart_interface_name)
+      return InterfaceIDLTypeInfo(type_name, type_data, dart_interface_name,
+                                  self)
 
-    if type_data.clazz == 'ListLike':
-      return ListLikeIDLTypeInfo(type_name, type_data, self.TypeInfo(type_data.item_type))
+    if type_data.clazz == 'SVGTearOff':
+      return SVGTearOffIDLTypeInfo(type_name, type_data, self)
 
     class_name = '%sIDLTypeInfo' % type_data.clazz
     return globals()[class_name](type_name, type_data)
diff --git a/lib/html/scripts/htmlrenamer.py b/lib/html/scripts/htmlrenamer.py
index ee7892f..83057fe 100644
--- a/lib/html/scripts/htmlrenamer.py
+++ b/lib/html/scripts/htmlrenamer.py
@@ -99,9 +99,6 @@
     'SVGElement.className': '$dom_svgClassName',
     'SVGAnimatedString.className': '$dom_svgClassName',
     'SVGStylable.className': '$dom_svgClassName',
-    'LocalWindow.webkitCancelAnimationFrame': 'cancelAnimationFrame',
-    'LocalWindow.webkitCancelRequestAnimationFrame': 'cancelRequestAnimationFrame',
-    'LocalWindow.webkitRequestAnimationFrame': 'requestAnimationFrame',
 }
 
 # Members and classes from the dom that should be removed completely from
@@ -211,7 +208,6 @@
     "Element.get:itemProp",
     'Element.scrollIntoView',
     'Element.get:classList',
-    "EmbedElement.getSVGDocument",
     "FormElement.get:elements",
     "HTMLFrameElement.*",
     "HTMLFrameSetElement.*",
@@ -219,10 +215,8 @@
     "HtmlElement.manifest",
     "Document.version",
     "Document.manifest",
-#    "IFrameElement.getSVGDocument",  #TODO(jacobr): should this be removed
     "InputElement.dirName",
     "HTMLIsIndexElement.*",
-    "ObjectElement.getSVGDocument",
     "HTMLOptionsCollection.*",
     "HTMLPropertiesCollection.*",
     "SelectElement.remove",
@@ -265,8 +259,6 @@
     "Node.lookupPrefix",
     "Node.get:PROCESSING_INSTRUCTION_NODE",
     'ShadowRoot.getElementsByTagNameNS',
-    "IFrameElement.get:contentDocument",
-    "LocalWindow.get:frameElement",
     "LocalWindow.get:frames",
     "LocalWindow.get:length",
     "LocalWindow.webkitCancelRequestAnimationFrame",
@@ -286,7 +278,7 @@
       return html_interface_renames[interface.id]
     return interface.id
 
-  def RenameMember(self, interface_name, member, member_prefix=''):
+  def RenameMember(self, interface_name, member_node, member, member_prefix=''):
     """
     Returns the name of the member in the HTML library or None if the member is
     suppressed in the HTML library
@@ -296,6 +288,9 @@
     if self._FindMatch(interface, member, member_prefix, _removed_html_members):
       return None
 
+    if 'CheckSecurityForNode' in member_node.ext_attrs:
+      return None
+
     name = self._FindMatch(interface, member, member_prefix,
                            _renamed_html_members)
     target_name = _renamed_html_members[name] if name else member
diff --git a/lib/html/scripts/idlparser.dart b/lib/html/scripts/idlparser.dart
index 186d153..11ecad3 100644
--- a/lib/html/scripts/idlparser.dart
+++ b/lib/html/scripts/idlparser.dart
@@ -177,7 +177,7 @@
   bool has(String key) => map.containsKey(key);
 
   formatMap() {
-    if (map.isEmpty())
+    if (map.isEmpty)
       return '';
     StringBuffer sb = new StringBuffer();
     map.forEach((k, v) {
diff --git a/lib/html/scripts/idlparser_test.dart b/lib/html/scripts/idlparser_test.dart
index bfe2906..126d8cf 100644
--- a/lib/html/scripts/idlparser_test.dart
+++ b/lib/html/scripts/idlparser_test.dart
@@ -2,10 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#library('idlparser_test');
-#import('../../../utils/peg/pegparser.dart');
-#source('idlparser.dart');
-#source('idlrenderer.dart');
+library idlparser_test;
+
+import '../../../utils/peg/pegparser.dart';
+
+part 'idlparser.dart';
+part 'idlrenderer.dart';
 
 main() {
   IDLParser parser = new IDLParser(FREMONTCUT_SYNTAX);
diff --git a/lib/html/scripts/idlrenderer.dart b/lib/html/scripts/idlrenderer.dart
index e62c4a7..9bfcd4f 100644
--- a/lib/html/scripts/idlrenderer.dart
+++ b/lib/html/scripts/idlrenderer.dart
@@ -48,7 +48,7 @@
     if (node == null) {
       return;
     } else if (node is String) {
-      if (output.last().endsWith('\n'))
+      if (output.last.endsWith('\n'))
         output.addAll(indent_stack);
       output.add(node);
     } else if (node is List) {
@@ -75,13 +75,13 @@
       w(node.extAttrs);
       w('interface ${node.id}');
       indented(() {
-          if (!node.parents.isEmpty()) {
+          if (!node.parents.isEmpty) {
             wln(' :');
             w(node.parents, ',\n');
           }
           wln(' {');
           section(list, comment) {
-            if (list != null && !list.isEmpty()) {
+            if (list != null && !list.isEmpty) {
               wln();
               wln(comment);
               w(sort(list));
@@ -97,14 +97,14 @@
       w(node.annotations);
       w(node.type.id);
     } else if (node is IDLAnnotations) {
-      for (var name in sorted(node.map.getKeys())) {
+      for (var name in sorted(node.map.keys)) {
         IDLAnnotation annotation = node.map[name];
         var args = annotation.map;
-        if (args.isEmpty()) {
+        if (args.isEmpty) {
           w('@$name');
         } else {
           var formattedArgs = [];
-          for (var argName in sorted(args.getKeys())) {
+          for (var argName in sorted(args.keys)) {
             var argValue = args[argName];
             if (argValue == null)
               formattedArgs.add(argName);
@@ -116,10 +116,10 @@
         w(' ');
       }
     } else if (node is IDLExtAttrs) {
-      if(!node.map.isEmpty()) {
+      if(!node.map.isEmpty) {
         w('[');
         var sep = null;
-        for (var name in sorted(node.map.getKeys())) {
+        for (var name in sorted(node.map.keys)) {
           w(sep);
           sep = ', ';
           w(name);
@@ -149,7 +149,7 @@
     } else if (node is IDLOperation) {
       w(node.annotations);
       w(node.extAttrs);
-      if (node.specials != null && !node.specials.isEmpty()) {
+      if (node.specials != null && !node.specials.isEmpty) {
         w(node.specials, ' ');
         w(' ');
       }
diff --git a/lib/html/scripts/systemhtml.py b/lib/html/scripts/systemhtml.py
index 56182c1..1528ccf 100644
--- a/lib/html/scripts/systemhtml.py
+++ b/lib/html/scripts/systemhtml.py
@@ -25,10 +25,12 @@
     'SelectElement.options',
     'SelectElement.selectedOptions',
     'TableElement.createTBody',
+    'LocalWindow.cancelAnimationFrame',
     'LocalWindow.document',
     'LocalWindow.indexedDB',
     'LocalWindow.location',
     'LocalWindow.open',
+    'LocalWindow.requestAnimationFrame',
     'LocalWindow.webkitCancelAnimationFrame',
     'LocalWindow.webkitRequestAnimationFrame',
     'WheelEvent.wheelDeltaX',
@@ -240,22 +242,14 @@
                           self._template_loader.Load('interface.darttemplate'))
 
     implements = []
-    suppressed_implements = []
-
     for parent in self._interface.parents:
       parent_type_info = self._type_registry.TypeInfo(parent.type.id)
-      parent_interface_name = parent_type_info.interface_name()
-      # TODO(vsm): Remove source_filter.
-      if MatchSourceFilter(parent):
-        # Parent is a DOM type.
-        implements.append(parent_interface_name)
-      elif '<' in parent.type.id:
-        # Parent is a Dart collection type.
-        # TODO(vsm): Make this check more robust.
-        implements.append(parent_interface_name)
-      else:
-        suppressed_implements.append('%s.%s' %
-            (self._common_prefix, parent_interface_name))
+      implements.append(parent_type_info.interface_name())
+
+    if self._interface_type_info.list_item_type():
+      item_type_info = self._type_registry.TypeInfo(
+          self._interface_type_info.list_item_type())
+      implements.append('List<%s>' % item_type_info.dart_type())
 
     if interface_name in _secure_base_types:
       implements.append(_secure_base_types[interface_name])
@@ -265,9 +259,6 @@
     if implements:
       implements_str += ' implements ' + ', '.join(implements)
       comment = ','
-    if suppressed_implements:
-      implements_str += ' /*%s %s */' % (comment,
-          ', '.join(suppressed_implements))
 
     factory_provider = None
     if interface_name in interface_factories:
@@ -337,8 +328,12 @@
       constructor_info.GenerateFactoryInvocation(
           self._DartType, self._members_emitter, factory_provider)
 
-    element_type = MaybeTypedArrayElementTypeInHierarchy(
-        self._interface, self._database)
+    element_type = None
+    for interface in self._database.Hierarchy(self._interface):
+      type_info = self._type_registry.TypeInfo(interface.id)
+      if type_info.is_typed_array():
+        element_type = type_info.list_item_type()
+        break
     if element_type:
       self._members_emitter.Emit(
           '\n'
@@ -383,13 +378,19 @@
 
     # The implementation should define an indexer if the interface directly
     # extends List.
-    (element_type, requires_indexer) = ListImplementationInfo(
-          interface, self._database)
-    if element_type:
-      if requires_indexer:
-        self.AddIndexer(element_type)
-      else:
-        self.AmendIndexer(element_type)
+    element_type = None
+    requires_indexer = False
+    if self._interface_type_info.list_item_type():
+      self.AddIndexer(self._interface_type_info.list_item_type())
+    else:
+      for parent in self._database.Hierarchy(self._interface):
+        if parent == self._interface:
+          continue
+        parent_type_info = self._type_registry.TypeInfo(parent.id)
+        if parent_type_info.list_item_type():
+          self.AmendIndexer(parent_type_info.list_item_type())
+          break
+
     # Group overloaded operations by id
     operationsById = {}
     for operation in interface.operations:
@@ -439,13 +440,13 @@
   def AddAttribute(self, attribute, is_secondary=False):
     dom_name = DartDomNameOfAttribute(attribute)
     html_name = self._renamer.RenameMember(
-      self._interface.id, dom_name, 'get:')
+      self._interface.id, attribute, dom_name, 'get:')
     if not html_name or self._IsPrivate(html_name):
       return
 
 
     html_setter_name = self._renamer.RenameMember(
-        self._interface.id, dom_name, 'set:')
+        self._interface.id, attribute, dom_name, 'set:')
     read_only = (attribute.is_read_only or 'Replaceable' in attribute.ext_attrs
                  or not html_setter_name)
 
@@ -457,7 +458,7 @@
           DOMINTERFACE=attribute.doc_js_interface_name,
           DOMNAME=dom_name)
       if read_only:
-        template = '\n  abstract $TYPE get $NAME;\n'
+        template = '\n  $TYPE get $NAME;\n'
       else:
         template = '\n  $TYPE $NAME;\n'
 
@@ -477,7 +478,13 @@
       operations - contains the overloads, one or more operations with the same
         name.
     """
-    html_name = self._renamer.RenameMember(self._interface.id, info.name)
+    # FIXME: When we pass in operations[0] below, we're assuming all
+    # overloaded operations have the same security attributes.  This
+    # is currently true, but we should consider filtering earlier or
+    # merging the relevant data into info itself.
+    html_name = self._renamer.RenameMember(self._interface.id,
+                                           info.operations[0],
+                                           info.name)
     if not html_name:
       if info.name == 'item':
         # FIXME: item should be renamed to operator[], not removed.
@@ -606,10 +613,10 @@
   def AdditionalImplementedInterfaces(self):
     # TODO: Include all implemented interfaces, including other Lists.
     implements = []
-    element_type = MaybeTypedArrayElementType(self._interface)
-    if element_type:
+    if self._interface_type_info.is_typed_array():
+      element_type = self._interface_type_info.list_item_type()
       implements.append('List<%s>' % self._DartType(element_type))
-    if self._HasJavaScriptIndexingBehaviour():
+    if self._interface_type_info.list_item_type():
       implements.append('JavaScriptIndexingBehavior')
     return implements
 
@@ -692,7 +699,7 @@
         self._members_emitter.Emit(
             '\n'
             '  void operator[]=(int index, $TYPE value) {\n'
-            '    throw new UnsupportedOperationException("Cannot assign element of immutable List.");\n'
+            '    throw new UnsupportedError("Cannot assign element of immutable List.");\n'
             '  }\n',
             TYPE=self._NarrowInputType(element_type))
 
@@ -773,7 +780,7 @@
     return_type = self._NarrowOutputType(attr.type.id)
     self._members_emitter.Emit(
         # TODO(sra): Use metadata to provide native name.
-        '\n  $TYPE get $HTML_NAME() => JS("$TYPE", "#.$NAME", this);'
+        '\n  $TYPE get $HTML_NAME => JS("$TYPE", "#.$NAME", this);'
         '\n',
         HTML_NAME=html_name,
         NAME=attr.id,
@@ -797,7 +804,7 @@
     self._members_emitter.Emit(
         # TODO(sra): Use metadata to provide native name.
         '\n  $RETURN_TYPE get $HTML_NAME => $CONVERT(this._$(HTML_NAME));'
-        '\n  $NATIVE_TYPE get _$HTML_NAME() =>'
+        '\n  $NATIVE_TYPE get _$HTML_NAME =>'
         ' JS("$NATIVE_TYPE", "#.$NAME", this);'
         '\n',
         CONVERT=conversion.function_name,
@@ -882,7 +889,7 @@
       if conversion:
         return conversion.input_type
       else:
-        return self._NarrowInputType(type_name) if type_name else 'Dynamic'
+        return self._NarrowInputType(type_name) if type_name else 'dynamic'
 
     body = self._members_emitter.Emit(
         '\n'
@@ -943,7 +950,7 @@
         # be conservative.
         if param_type == verified_type:
           if param_type in ['String', 'num', 'int', 'double', 'bool', 'Object']:
-            param_type = 'Dynamic'
+            param_type = 'dynamic'
         target_parameters.append(
             '%s%s' % (TypeOrNothing(param_type), param_name))
 
@@ -974,12 +981,12 @@
         argument = operation.arguments[i]
         parameter_name = parameter_names[i]
         test_type = self._DartType(argument.type.id)
-        if test_type in ['Dynamic', 'Object']:
+        if test_type in ['dynamic', 'Object']:
           checks[i] = '?%s' % parameter_name
         elif test_type == parameter_types[i]:
           checks[i] = 'true'
         else:
-          checks[i] = '(%s is %s || %s === null)' % (
+          checks[i] = '(%s is %s || %s == null)' % (
               parameter_name, test_type, parameter_name)
       # There can be multiple presence checks.  We need them all since a later
       # optional argument could have been passed by name, leaving 'holes'.
@@ -1035,13 +1042,6 @@
   def CustomJSMembers(self):
     return _js_custom_members
 
-  def _HasJavaScriptIndexingBehaviour(self):
-    """Returns True if the native object has an indexer and length property."""
-    (element_type, requires_indexer) = ListImplementationInfo(
-        self._interface, self._database)
-    if element_type and requires_indexer: return True
-    return False
-
   def _NarrowToImplementationType(self, type_name):
     return self._type_registry.TypeInfo(type_name).narrow_dart_type()
 
@@ -1122,4 +1122,4 @@
     for path in sorted(self._path_to_emitter.keys()):
       relpath = os.path.relpath(path, library_file_dir)
       imports_emitter.Emit(
-          "#source('$PATH');\n", PATH=massage_path(relpath))
+          "part '$PATH';\n", PATH=massage_path(relpath))
diff --git a/lib/html/scripts/systemnative.py b/lib/html/scripts/systemnative.py
index 125ee4c..5b8c5b6 100644
--- a/lib/html/scripts/systemnative.py
+++ b/lib/html/scripts/systemnative.py
@@ -66,7 +66,7 @@
           '\n'
           'bool $CLASS_NAME::handleEvent($PARAMETERS)\n'
           '{\n'
-          '    if (!m_callback.isolate()->isAlive())\n'
+          '    if (!m_callback.isIsolateAlive())\n'
           '        return false;\n'
           '    DartIsolate::Scope scope(m_callback.isolate());\n'
           '    DartApiScope apiScope;\n'
@@ -274,10 +274,6 @@
         TO_DART=to_dart_emitter.Fragments())
 
   def AddAttribute(self, attribute, html_name, read_only):
-    if 'CheckSecurityForNode' in attribute.ext_attrs:
-      # FIXME: exclude from interface as well.
-      return
-
     self._AddGetter(attribute, html_name)
     if not read_only:
       self._AddSetter(attribute, html_name)
@@ -387,7 +383,7 @@
         self._members_emitter.Emit(
             '\n'
             '  void operator[]=(int index, $TYPE value) {\n'
-            '    throw new UnsupportedOperationException("Cannot assign element of immutable List.");\n'
+            '    throw new UnsupportedError("Cannot assign element of immutable List.");\n'
             '  }\n',
             TYPE=dart_element_type)
 
@@ -445,10 +441,6 @@
 
     operation = info.operations[0]
 
-    if 'CheckSecurityForNode' in operation.ext_attrs:
-      # FIXME: exclude from interface as well.
-      return
-
     is_custom = 'Custom' in operation.ext_attrs
     has_optional_arguments = any(self._IsArgumentOptionalInWebCore(operation, argument) for argument in operation.arguments)
     needs_dispatcher = not is_custom and (len(info.operations) > 1 or has_optional_arguments)
@@ -458,7 +450,7 @@
         SecureOutputType(self, info.type_name),
         html_name,
         info.ParametersDeclaration(
-            (lambda x: 'Dynamic') if needs_dispatcher else self._DartType))
+            (lambda x: 'dynamic') if needs_dispatcher else self._DartType))
 
     if not needs_dispatcher:
       # Bind directly to native implementation
@@ -511,7 +503,7 @@
       for i in range(0, argument_count):
         argument = operation.arguments[i]
         argument_name = argument_names[i]
-        checks[i] = '(%s is %s || %s === null)' % (
+        checks[i] = '(%s is %s || %s == null)' % (
             argument_name, self._DartType(argument.type.id), argument_name)
       GenerateCall(operation, argument_count, checks)
 
diff --git a/lib/html/src/CrossFrameTypes.dart b/lib/html/src/CrossFrameTypes.dart
index 565c7a7..3804789 100644
--- a/lib/html/src/CrossFrameTypes.dart
+++ b/lib/html/src/CrossFrameTypes.dart
@@ -16,9 +16,7 @@
   void focus();
   void blur();
   void close();
-  void postMessage(Dynamic message,
-                   String targetOrigin,
-		   [List messagePorts = null]);
+  void postMessage(var message, String targetOrigin, [List messagePorts = null]);
 }
 
 abstract class Location {
@@ -29,4 +27,4 @@
   void back();
   void forward();
   void go(int distance);
-}
\ No newline at end of file
+}
diff --git a/lib/html/src/Isolates.dart b/lib/html/src/Isolates.dart
index b378b91..7fc0277 100644
--- a/lib/html/src/Isolates.dart
+++ b/lib/html/src/Isolates.dart
@@ -160,7 +160,7 @@
 
   void receive(callback(var message)) {
     _callback = callback;
-    if (_listener === null) {
+    if (_listener == null) {
       _listener = (Event e) {
         var data = JSON.parse(_getPortSyncEventData(e));
         var replyTo = data[0];
@@ -174,7 +174,7 @@
 
   void close() {
     _portMap.remove(_portId);
-    if (_listener !== null) window.on[_listenerName].remove(_listener);
+    if (_listener != null) window.on[_listenerName].remove(_listener);
   }
 
   SendPortSync toSendPort() {
diff --git a/lib/html/src/Measurement.dart b/lib/html/src/Measurement.dart
index 54eed3e..4374226 100644
--- a/lib/html/src/Measurement.dart
+++ b/lib/html/src/Measurement.dart
@@ -132,7 +132,7 @@
  * no measurements were actually requested.
  */
 void _addMeasurementFrameCallback(TimeoutHandler callback) {
-  if (_pendingMeasurementFrameCallbacks === null) {
+  if (_pendingMeasurementFrameCallbacks == null) {
     _pendingMeasurementFrameCallbacks = <TimeoutHandler>[];
     _maybeScheduleMeasurementFrame();
   }
@@ -149,7 +149,7 @@
  */
 Future _createMeasurementFuture(ComputeValue computeValue,
                                 Completer completer) {
-  if (_pendingRequests === null) {
+  if (_pendingRequests == null) {
     _pendingRequests = <_MeasurementRequest>[];
     _maybeScheduleMeasurementFrame();
   }
@@ -165,7 +165,7 @@
   // We must compute all new values before fulfilling the futures as
   // the onComplete callbacks for the futures could modify the DOM making
   // subsequent measurement calculations expensive to compute.
-  if (_pendingRequests !== null) {
+  if (_pendingRequests != null) {
     for (_MeasurementRequest request in _pendingRequests) {
       try {
         request.value = request.computeValue();
@@ -180,7 +180,7 @@
   final readyMeasurementFrameCallbacks = _pendingMeasurementFrameCallbacks;
   _pendingRequests = null;
   _pendingMeasurementFrameCallbacks = null;
-  if (completedRequests !== null) {
+  if (completedRequests != null) {
     for (_MeasurementRequest request in completedRequests) {
       if (request.exception) {
         request.completer.completeException(request.value);
@@ -190,7 +190,7 @@
     }
   }
 
-  if (readyMeasurementFrameCallbacks !== null) {
+  if (readyMeasurementFrameCallbacks != null) {
     for (TimeoutHandler handler in readyMeasurementFrameCallbacks) {
       // TODO(jacobr): wrap each call to a handler in a try-catch block.
       handler();
diff --git a/lib/html/src/Serialization.dart b/lib/html/src/Serialization.dart
index 8d9413c..9771c40 100644
--- a/lib/html/src/Serialization.dart
+++ b/lib/html/src/Serialization.dart
@@ -60,7 +60,7 @@
   }
 
   static bool isPrimitive(x) {
-    return (x === null) || (x is String) || (x is num) || (x is bool);
+    return (x == null) || (x is String) || (x is num) || (x is bool);
   }
 }
 
@@ -72,7 +72,7 @@
 
   List visitList(List list) {
     List copy = _visited[list];
-    if (copy !== null) return copy;
+    if (copy != null) return copy;
 
     int len = list.length;
 
@@ -87,7 +87,7 @@
 
   Map visitMap(Map map) {
     Map copy = _visited[map];
-    if (copy !== null) return copy;
+    if (copy != null) return copy;
 
     // TODO(floitsch): we loose the generic type of the map.
     copy = new Map();
@@ -108,7 +108,7 @@
 
   visitList(List list) {
     int copyId = _visited[list];
-    if (copyId !== null) return ['ref', copyId];
+    if (copyId != null) return ['ref', copyId];
 
     int id = _nextFreeRefId++;
     _visited[list] = id;
@@ -119,12 +119,12 @@
 
   visitMap(Map map) {
     int copyId = _visited[map];
-    if (copyId !== null) return ['ref', copyId];
+    if (copyId != null) return ['ref', copyId];
 
     int id = _nextFreeRefId++;
     _visited[map] = id;
-    var keys = _serializeList(map.getKeys());
-    var values = _serializeList(map.getValues());
+    var keys = _serializeList(map.keys);
+    var values = _serializeList(map.values);
     // TODO(floitsch): we are losing the generic type.
     return ['map', id, keys, values];
   }
@@ -141,17 +141,17 @@
 
 /** Deserializes arrays created with [_Serializer]. */
 class _Deserializer {
-  Map<int, Dynamic> _deserialized;
+  Map<int, dynamic> _deserialized;
 
   _Deserializer();
 
   static bool isPrimitive(x) {
-    return (x === null) || (x is String) || (x is num) || (x is bool);
+    return (x == null) || (x is String) || (x is num) || (x is bool);
   }
 
   deserialize(x) {
     if (isPrimitive(x)) return x;
-    // TODO(floitsch): this should be new HashMap<int, var|Dynamic>()
+    // TODO(floitsch): this should be new HashMap<int, dynamic>()
     _deserialized = new HashMap();
     return _deserializeHelper(x);
   }
@@ -171,7 +171,7 @@
   _deserializeRef(List x) {
     int id = x[1];
     var result = _deserialized[id];
-    assert(result !== null);
+    assert(result != null);
     return result;
   }
 
diff --git a/lib/html/src/_Collections.dart b/lib/html/src/_Collections.dart
index 9096fc6..eb97494 100644
--- a/lib/html/src/_Collections.dart
+++ b/lib/html/src/_Collections.dart
@@ -54,6 +54,6 @@
   }
 
   static bool isEmpty(Iterable<Object> iterable) {
-    return !iterable.iterator().hasNext();
+    return !iterable.iterator().hasNext;
   }
 }
diff --git a/lib/html/src/_ListIterators.dart b/lib/html/src/_ListIterators.dart
index 2eb9acc..4dd7745 100644
--- a/lib/html/src/_ListIterators.dart
+++ b/lib/html/src/_ListIterators.dart
@@ -8,7 +8,7 @@
       : super(array),
         _length = array.length;
 
-  bool hasNext() => _length > _pos;
+  bool get hasNext => _length > _pos;
 
   final int _length;  // Cache array length for faster access.
 }
@@ -19,11 +19,11 @@
       : _array = array,
         _pos = 0;
 
-  bool hasNext() => _array.length > _pos;
+  bool get hasNext => _array.length > _pos;
 
   T next() {
-    if (!hasNext()) {
-      throw const NoMoreElementsException();
+    if (!hasNext) {
+      throw new StateError("No more elements");
     }
     return _array[_pos++];
   }
diff --git a/lib/html/src/dart2js_Conversions.dart b/lib/html/src/dart2js_Conversions.dart
index 71aff9d..5ce8806 100644
--- a/lib/html/src/dart2js_Conversions.dart
+++ b/lib/html/src/dart2js_Conversions.dart
@@ -199,7 +199,7 @@
   int findSlot(value) {
     int length = values.length;
     for (int i = 0; i < length; i++) {
-      if (values[i] === value) return i;
+      if (identical(values[i], value)) return i;
     }
     values.add(value);
     copies.add(null);
@@ -298,7 +298,7 @@
         for ( ; i < length; i++) {
           var element = e[i];
           var elementCopy = walk(element);
-          if (elementCopy !== element) {
+          if (!identical(elementCopy, element)) {
             copy = readSlot(slot);   // Cyclic reference may have created it.
             if (true == copy) {
               copy = JS('List', 'new Array(#)', length);
@@ -364,7 +364,7 @@
   int findSlot(value) {
     int length = values.length;
     for (int i = 0; i < length; i++) {
-      if (values[i] === value) return i;
+      if (identical(values[i], value)) return i;
     }
     values.add(value);
     copies.add(null);
diff --git a/lib/html/src/dart2js_DOMImplementation.dart b/lib/html/src/dart2js_DOMImplementation.dart
index 955841c..ca3896f 100644
--- a/lib/html/src/dart2js_DOMImplementation.dart
+++ b/lib/html/src/dart2js_DOMImplementation.dart
@@ -32,9 +32,7 @@
 
   void close() => JS('void', '#.close()', _window);
 
-  void postMessage(Dynamic message,
-                   String targetOrigin,
-                   [List messagePorts = null]) {
+  void postMessage(var message, String targetOrigin, [List messagePorts = null]) {
     if (messagePorts == null) {
       JS('void', '#.postMessage(#,#)', _window, message, targetOrigin);
     } else {
@@ -46,7 +44,7 @@
   _DOMWindowCrossFrameImpl(this._window);
 
   static Window _createSafe(w) {
-    if (w === window) {
+    if (identical(w, window)) {
       return w;
     } else {
       // TODO(vsm): Cache or implement equality.
@@ -70,7 +68,7 @@
   _LocationCrossFrameImpl(this._location);
 
   static Location _createSafe(location) {
-    if (location === window.location) {
+    if (identical(location, window.location)) {
       return location;
     } else {
       // TODO(vsm): Cache or implement equality.
@@ -95,7 +93,7 @@
   _HistoryCrossFrameImpl(this._history);
 
   static History _createSafe(h) {
-    if (h === window.history) {
+    if (identical(h, window.history)) {
       return h;
     } else {
       // TODO(vsm): Cache or implement equality.
diff --git a/lib/html/src/native_DOMImplementation.dart b/lib/html/src/native_DOMImplementation.dart
index aab4e44..d45e7e4 100644
--- a/lib/html/src/native_DOMImplementation.dart
+++ b/lib/html/src/native_DOMImplementation.dart
@@ -28,7 +28,7 @@
   static Map createMap() => {};
 
   static makeNotImplementedException(String fileName, int lineNo) {
-    return new UnsupportedOperationException('[info: $fileName:$lineNo]');
+    return new UnsupportedError('[info: $fileName:$lineNo]');
   }
 
   static window() native "Utils_window";
@@ -100,16 +100,16 @@
   String remove(String key) native "DOMStringMap_remove_Callback";
   void clear() => Maps.clear(this);
   void forEach(void f(String key, String value)) => Maps.forEach(this, f);
-  Collection<String> getKeys() native "DOMStringMap_getKeys_Callback";
-  Collection<String> getValues() => Maps.getValues(this);
+  Collection<String> get keys native "DOMStringMap_getKeys_Callback";
+  Collection<String> get values => Maps.getValues(this);
   int get length => Maps.length(this);
-  bool isEmpty() => Maps.isEmpty(this);
+  bool get isEmpty => Maps.isEmpty(this);
 }
 
 get _printClosure => (s) {
   try {
     window.console.log(s);
-  } on Dynamic catch(_) {
+  } catch (_) {
     _Utils.print(s);
   }
 };
diff --git a/lib/html/src/native_DOMPublic.dart b/lib/html/src/native_DOMPublic.dart
index 9046cb3..e06633f 100644
--- a/lib/html/src/native_DOMPublic.dart
+++ b/lib/html/src/native_DOMPublic.dart
@@ -11,7 +11,7 @@
 var _testRunner;
 
 TestRunner get testRunner {
-  if (_testRunner === null)
+  if (_testRunner == null)
     _testRunner = new TestRunner._(_NPObject.retrieve("testRunner"));
   return _testRunner;
 }
diff --git a/lib/html/templates/callback.darttemplate b/lib/html/templates/callback.darttemplate
index bc33c46..9ffc669 100644
--- a/lib/html/templates/callback.darttemplate
+++ b/lib/html/templates/callback.darttemplate
@@ -4,4 +4,6 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 //$ Keep previous blank line when editor removes trailing empty lines.
diff --git a/lib/html/templates/html/dart2js/html_dart2js.darttemplate b/lib/html/templates/html/dart2js/html_dart2js.darttemplate
index 73036e9..fe44af3 100644
--- a/lib/html/templates/html/dart2js/html_dart2js.darttemplate
+++ b/lib/html/templates/html/dart2js/html_dart2js.darttemplate
@@ -5,44 +5,44 @@
 // DO NOT EDIT
 // Auto-generated dart:html library.
 
-#library('dart:html');
+library html;
 
-#import('dart:isolate');
-#import('dart:json');
+import 'dart:isolate';
+import 'dart:json';
 
 $!GENERATED_DART_FILES
 
-#source('$AUXILIARY_DIR/CrossFrameTypes.dart');
-#source('$AUXILIARY_DIR/EventListener.dart');
-#source('$AUXILIARY_DIR/KeyLocation.dart');
-#source('$AUXILIARY_DIR/KeyName.dart');
-#source('$AUXILIARY_DIR/ReadyState.dart');
-#source('$AUXILIARY_DIR/Timer.dart');
-#source('$AUXILIARY_DIR/_Collections.dart');
-#source('$AUXILIARY_DIR/_HttpRequestUtils.dart');
-#source('$AUXILIARY_DIR/Isolates.dart');
-#source('$AUXILIARY_DIR/Measurement.dart');
-#source('$AUXILIARY_DIR/Serialization.dart');
-#source('$AUXILIARY_DIR/shared_FactoryProviders.dart');
-#source('$AUXILIARY_DIR/dart2js_Conversions.dart');
-#source('$AUXILIARY_DIR/dart2js_DOMImplementation.dart');
-#source('$AUXILIARY_DIR/dart2js_FactoryProviders.dart');
-#source('$AUXILIARY_DIR/dart2js_IDBKeyRangeFactoryProvider.dart');
-#source('$AUXILIARY_DIR/dart2js_LocationWrapper.dart');
-#source('$AUXILIARY_DIR/dart2js_MutationObserverSupported.dart');
-#source('$AUXILIARY_DIR/dart2js_TypedArrayFactoryProvider.dart');
-#source('$AUXILIARY_DIR/_Testing.dart');
-#source('$AUXILIARY_DIR/Device.dart');
-#source('$AUXILIARY_DIR/_ListIterators.dart');
-#source('$AUXILIARY_DIR/_Lists.dart');
+part '$AUXILIARY_DIR/CrossFrameTypes.dart';
+part '$AUXILIARY_DIR/EventListener.dart';
+part '$AUXILIARY_DIR/KeyLocation.dart';
+part '$AUXILIARY_DIR/KeyName.dart';
+part '$AUXILIARY_DIR/ReadyState.dart';
+part '$AUXILIARY_DIR/Timer.dart';
+part '$AUXILIARY_DIR/_Collections.dart';
+part '$AUXILIARY_DIR/_HttpRequestUtils.dart';
+part '$AUXILIARY_DIR/Isolates.dart';
+part '$AUXILIARY_DIR/Measurement.dart';
+part '$AUXILIARY_DIR/Serialization.dart';
+part '$AUXILIARY_DIR/shared_FactoryProviders.dart';
+part '$AUXILIARY_DIR/dart2js_Conversions.dart';
+part '$AUXILIARY_DIR/dart2js_DOMImplementation.dart';
+part '$AUXILIARY_DIR/dart2js_FactoryProviders.dart';
+part '$AUXILIARY_DIR/dart2js_IDBKeyRangeFactoryProvider.dart';
+part '$AUXILIARY_DIR/dart2js_LocationWrapper.dart';
+part '$AUXILIARY_DIR/dart2js_MutationObserverSupported.dart';
+part '$AUXILIARY_DIR/dart2js_TypedArrayFactoryProvider.dart';
+part '$AUXILIARY_DIR/_Testing.dart';
+part '$AUXILIARY_DIR/Device.dart';
+part '$AUXILIARY_DIR/_ListIterators.dart';
+part '$AUXILIARY_DIR/_Lists.dart';
 
 
-LocalWindow get window() => JS('LocalWindow', 'window');
-_LocalWindowImpl get _window() => JS('_LocalWindowImpl', 'window');
+LocalWindow get window => JS('LocalWindow', 'window');
+_LocalWindowImpl get _window => JS('_LocalWindowImpl', 'window');
 
-Document get document() => JS('Document', 'document');
+Document get document => JS('Document', 'document');
 
-_DocumentImpl get _document() => JS('_DocumentImpl', 'document');
+_DocumentImpl get _document => JS('_DocumentImpl', 'document');
 
 Element query(String selector) => _document.query(selector);
 List<Element> queryAll(String selector) => _document.queryAll(selector);
diff --git a/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate b/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
index 54bf809..bbc27e1 100644
--- a/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
+++ b/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
@@ -4,7 +4,7 @@
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS native "@*DOMWindow" {
 
-  _DocumentImpl get document() => JS('_DocumentImpl', '#.document', this);
+  _DocumentImpl get document => JS('_DocumentImpl', '#.document', this);
 
   Window _open2(url, name) => JS('Window', '#.open(#,#)', this, url, name);
 
@@ -54,7 +54,7 @@
   var _location_wrapper;  // Cached wrapped Location object.
 
   // Native getter and setter to access raw Location object.
-  Location get _location() => JS('Location', '#.location', this);
+  Location get _location => JS('Location', '#.location', this);
   void set _location(Location value) {
     JS('void', '#.location = #', this, value);
   }
diff --git a/lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate b/lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate
index 5d0485c..62aaa4e 100644
--- a/lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate
+++ b/lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate
@@ -12,7 +12,7 @@
       // Firefox does not support offsetX.
       var target = this.target;
       if (!(target is Element)) {
-        throw const UnsupportedOperationException(
+        throw new UnsupportedError(
             'offsetX is only supported on elements');
       }
       return this.clientX - this.target.getBoundingClientRect().left;
@@ -26,7 +26,7 @@
       // Firefox does not support offsetY.
       var target = this.target;
       if (!(target is Element)) {
-        throw const UnsupportedOperationException(
+        throw new UnsupportedError(
             'offsetY is only supported on elements');
       }
       return this.clientY - this.target.getBoundingClientRect().top;
diff --git a/lib/html/templates/html/dart2js/impl_SelectElement.darttemplate b/lib/html/templates/html/dart2js/impl_SelectElement.darttemplate
index dd4f05f..f9072fa 100644
--- a/lib/html/templates/html/dart2js/impl_SelectElement.darttemplate
+++ b/lib/html/templates/html/dart2js/impl_SelectElement.darttemplate
@@ -7,11 +7,11 @@
 
   // Override default options, since IE returns SelectElement itself and it
   // does not operate as a List.
-  List<OptionElement> get options() {
+  List<OptionElement> get options {
     return this.elements.filter((e) => e is OptionElement);
   }
 
-  List<OptionElement> get selectedOptions() {
+  List<OptionElement> get selectedOptions {
     // IE does not change the selected flag for single-selection items.
     if (this.multiple) {
       return this.options.filter((o) => o.selected);
diff --git a/lib/html/templates/html/dartium/html_dartium.darttemplate b/lib/html/templates/html/dartium/html_dartium.darttemplate
index f9486236..4225d60 100644
--- a/lib/html/templates/html/dartium/html_dartium.darttemplate
+++ b/lib/html/templates/html/dartium/html_dartium.darttemplate
@@ -5,40 +5,40 @@
 // DO NOT EDIT
 // Auto-generated dart:html library.
 
-#library("dart:html");
+library html;
 
-#import("dart:isolate");
-#import("dart:json");
-#import("dart:nativewrappers");
+import 'dart:isolate';
+import 'dart:json';
+import 'dart:nativewrappers';
 
 $!GENERATED_DART_FILES
 
-#source('$AUXILIARY_DIR/CrossFrameTypes.dart');
-#source('$AUXILIARY_DIR/EventListener.dart');
-#source('$AUXILIARY_DIR/KeyLocation.dart');
-#source('$AUXILIARY_DIR/KeyName.dart');
-#source('$AUXILIARY_DIR/ReadyState.dart');
-#source('$AUXILIARY_DIR/Timer.dart');
-#source('$AUXILIARY_DIR/_Collections.dart');
-#source('$AUXILIARY_DIR/_HttpRequestUtils.dart');
-#source('$AUXILIARY_DIR/shared_FactoryProviders.dart');
-#source('$AUXILIARY_DIR/dartium_FactoryProviders.dart');
-#source('$AUXILIARY_DIR/Device.dart');
-#source('$AUXILIARY_DIR/Isolates.dart');
-#source('$AUXILIARY_DIR/Measurement.dart');
-#source('$AUXILIARY_DIR/Serialization.dart');
-#source('$AUXILIARY_DIR/dartium_MutationObserverSupported.dart');
-#source('$AUXILIARY_DIR/_Testing.dart');
-#source('$AUXILIARY_DIR/_ListIterators.dart');
-#source('$AUXILIARY_DIR/_Lists.dart');
+part '$AUXILIARY_DIR/CrossFrameTypes.dart';
+part '$AUXILIARY_DIR/EventListener.dart';
+part '$AUXILIARY_DIR/KeyLocation.dart';
+part '$AUXILIARY_DIR/KeyName.dart';
+part '$AUXILIARY_DIR/ReadyState.dart';
+part '$AUXILIARY_DIR/Timer.dart';
+part '$AUXILIARY_DIR/_Collections.dart';
+part '$AUXILIARY_DIR/_HttpRequestUtils.dart';
+part '$AUXILIARY_DIR/shared_FactoryProviders.dart';
+part '$AUXILIARY_DIR/dartium_FactoryProviders.dart';
+part '$AUXILIARY_DIR/Device.dart';
+part '$AUXILIARY_DIR/Isolates.dart';
+part '$AUXILIARY_DIR/Measurement.dart';
+part '$AUXILIARY_DIR/Serialization.dart';
+part '$AUXILIARY_DIR/dartium_MutationObserverSupported.dart';
+part '$AUXILIARY_DIR/_Testing.dart';
+part '$AUXILIARY_DIR/_ListIterators.dart';
+part '$AUXILIARY_DIR/_Lists.dart';
 
-#source('$AUXILIARY_DIR/native_DOMPublic.dart');
-#source('$AUXILIARY_DIR/native_DOMImplementation.dart');
+part '$AUXILIARY_DIR/native_DOMPublic.dart';
+part '$AUXILIARY_DIR/native_DOMImplementation.dart';
 
 LocalWindow __window;
 
 LocalWindow get window {
-  if (__window !== null) {
+  if (__window != null) {
     return __window;
   }
   __window = _Utils.window();
@@ -50,7 +50,7 @@
 Document __document;
 
 Document get document {
-  if (__document !== null) {
+  if (__document != null) {
     return __document;
   }
   __document = _document;
diff --git a/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate b/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate
index 8fe27e5..561ece0d 100644
--- a/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate
+++ b/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of html;
+
 class _Elements {
 
 $!FACTORY_METHODS}
diff --git a/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate b/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
index 0112df0..d723977 100644
--- a/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
+++ b/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
@@ -5,7 +5,7 @@
 String _cachedBrowserPrefix;
 
 String get _browserPrefix {
-  if (_cachedBrowserPrefix === null) {
+  if (_cachedBrowserPrefix == null) {
     if (_Device.isFirefox) {
       _cachedBrowserPrefix = '-moz-';
     } else if (_Device.isIE) {
diff --git a/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate b/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
index e8a1e9d..c9dd6b7 100644
--- a/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
+++ b/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
@@ -28,7 +28,7 @@
     if (newLength >= len) {
       return;
     } else if (newLength < 0) {
-      throw const ArgumentError("Invalid list length");
+      throw new ArgumentError("Invalid list length");
     }
 
     removeRange(newLength - 1, len - newLength);
@@ -51,7 +51,7 @@
   }
 
   void sort([Comparator<Element> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
+    throw new UnsupportedError('TODO(jacobr): should we impl?');
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -73,7 +73,7 @@
   }
 
   Element removeLast() {
-    final result = this.last();
+    final result = this.last;
     if (result != null) {
       result.remove();
     }
@@ -84,7 +84,7 @@
   Collection<Element> filter(bool f(Element element)) => _filtered.filter(f);
   bool every(bool f(Element element)) => _filtered.every(f);
   bool some(bool f(Element element)) => _filtered.some(f);
-  bool isEmpty() => _filtered.isEmpty();
+  bool get isEmpty => _filtered.isEmpty;
   int get length => _filtered.length;
   Element operator [](int index) => _filtered[index];
   Iterator<Element> iterator() => _filtered.iterator();
@@ -94,11 +94,11 @@
     _filtered.indexOf(element, start);
 
   int lastIndexOf(Element element, [int start = null]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _filtered.lastIndexOf(element, start);
   }
 
-  Element last() => _filtered.last();
+  Element get last => _filtered.last;
 }
 
 Future<CSSStyleDeclaration> _emptyStyleFuture() {
@@ -120,7 +120,7 @@
   _FrozenCSSClassSet() : super(null);
 
   void _write(Set s) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         'frozen class set cannot be modified');
   }
   Set<String> _read() => new Set<String>();
@@ -234,7 +234,7 @@
     }
     return null;
   }
-  Element get $m_lastElementChild() => elements.last();
+  Element get $m_lastElementChild() => elements.last;
   Element get nextElementSibling => null;
   Element get previousElementSibling => null;
   Element get offsetParent => null;
@@ -263,97 +263,97 @@
   // Setters throw errors rather than being no-ops because we aren't going to
   // retain the values that were set, and erroring out seems clearer.
   void set attributes(Map<String, String> value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Attributes can't be set for document fragments.");
   }
 
   void set classes(Collection<String> value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Classes can't be set for document fragments.");
   }
 
   void set dataAttributes(Map<String, String> value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Data attributes can't be set for document fragments.");
   }
 
   void set contentEditable(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Content editable can't be set for document fragments.");
   }
 
   String get dir {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support text direction.");
   }
 
   void set dir(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support text direction.");
   }
 
   void set draggable(bool value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Draggable can't be set for document fragments.");
   }
 
   void set hidden(bool value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Hidden can't be set for document fragments.");
   }
 
   void set id(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "ID can't be set for document fragments.");
   }
 
   String get lang {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support language.");
   }
 
   void set lang(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support language.");
   }
 
   void set scrollLeft(int value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support scrolling.");
   }
 
   void set scrollTop(int value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Document fragments don't support scrolling.");
   }
 
   void set spellcheck(bool value) {
-     throw new UnsupportedOperationException(
+     throw new UnsupportedError(
       "Spellcheck can't be set for document fragments.");
   }
 
   void set translate(bool value) {
-     throw new UnsupportedOperationException(
+     throw new UnsupportedError(
       "Spellcheck can't be set for document fragments.");
   }
 
   void set tabIndex(int value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Tab index can't be set for document fragments.");
   }
 
   void set title(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "Title can't be set for document fragments.");
   }
 
   void set webkitdropzone(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "WebKit drop zone can't be set for document fragments.");
   }
 
   void set webkitRegionOverflow(String value) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
       "WebKit region overflow can't be set for document fragments.");
   }
 
diff --git a/lib/html/templates/html/impl/impl_Element.darttemplate b/lib/html/templates/html/impl/impl_Element.darttemplate
index dc39ade..6be2882 100644
--- a/lib/html/templates/html/impl/impl_Element.darttemplate
+++ b/lib/html/templates/html/impl/impl_Element.darttemplate
@@ -65,7 +65,7 @@
     return out;
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     return _element.$dom_firstElementChild == null;
   }
 
@@ -83,7 +83,7 @@
 
    void set length(int newLength) {
      // TODO(jacobr): remove children when length is reduced.
-     throw const UnsupportedOperationException('');
+     throw new UnsupportedError('');
    }
 
   Element add(_ElementImpl value) {
@@ -102,7 +102,7 @@
   }
 
   void sort([Comparator<Element> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
+    throw new UnsupportedError('TODO(jacobr): should we impl?');
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -126,7 +126,7 @@
   }
 
   int lastIndexOf(Element element, [int start = null]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
@@ -136,14 +136,14 @@
   }
 
   Element removeLast() {
-    final result = this.last();
+    final result = this.last;
     if (result != null) {
       _element.$dom_removeChild(result);
     }
     return result;
   }
 
-  Element last() {
+  Element get last {
     return _element.$dom_lastElementChild;
   }
 }
@@ -208,14 +208,14 @@
     return false;
   }
 
-  bool isEmpty() => _nodeList.isEmpty();
+  bool get isEmpty => _nodeList.isEmpty;
 
   int get length => _nodeList.length;
 
   Element operator [](int index) => _nodeList[index];
 
   void operator []=(int index, Element value) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void set length(int newLength) {
@@ -223,33 +223,33 @@
   }
 
   void add(Element value) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void addLast(Element value) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   Iterator<Element> iterator() => new _FrozenElementListIterator(this);
 
   void addAll(Collection<Element> collection) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void sort([Comparator<Element> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   void insertRange(int start, int rangeLength, [initialValue = null]) {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   List<Element> getRange(int start, int rangeLength) =>
@@ -262,14 +262,14 @@
     _nodeList.lastIndexOf(element, start);
 
   void clear() {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   Element removeLast() {
-    throw const UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
-  Element last() => _nodeList.last();
+  Element get last => _nodeList.last;
 }
 
 class _FrozenElementListIterator implements Iterator<Element> {
@@ -280,11 +280,11 @@
 
   /**
    * Gets the next element in the iteration. Throws a
-   * [NoMoreElementsException] if no element is left.
+   * [StateError("No more elements")] if no element is left.
    */
   Element next() {
-    if (!hasNext()) {
-      throw const NoMoreElementsException();
+    if (!hasNext) {
+      throw new StateError("No more elements");
     }
 
     return _list[_index++];
@@ -293,7 +293,7 @@
   /**
    * Returns whether the [Iterator] has elements left.
    */
-  bool hasNext() => _index < _list.length;
+  bool get hasNext => _index < _list.length;
 }
 
 class _ElementAttributeMap implements AttributeMap {
@@ -352,7 +352,7 @@
     }
   }
 
-  Collection<String> getKeys() {
+  Collection<String> get keys {
     // TODO(jacobr): generate a lazy collection instead.
     final attributes = _element.$dom_attributes;
     final keys = new List<String>(attributes.length);
@@ -362,7 +362,7 @@
     return keys;
   }
 
-  Collection<String> getValues() {
+  Collection<String> get values {
     // TODO(jacobr): generate a lazy collection instead.
     final attributes = _element.$dom_attributes;
     final values = new List<String>(attributes.length);
@@ -382,7 +382,7 @@
   /**
    * Returns true if there is no {key, value} pair in the map.
    */
-  bool isEmpty() {
+  bool get isEmpty {
     return length == 0;
   }
 }
@@ -400,7 +400,7 @@
   // interface Map
 
   // TODO: Use lazy iterator when it is available on Map.
-  bool containsValue(String value) => getValues().some((v) => v == value);
+  bool containsValue(String value) => values.some((v) => v == value);
 
   bool containsKey(String key) => $dom_attributes.containsKey(_attr(key));
 
@@ -417,7 +417,7 @@
 
   void clear() {
     // Needs to operate on a snapshot since we are mutating the collection.
-    for (String key in getKeys()) {
+    for (String key in keys) {
       remove(key);
     }
   }
@@ -430,7 +430,7 @@
     });
   }
 
-  Collection<String> getKeys() {
+  Collection<String> get keys {
     final keys = new List<String>();
     $dom_attributes.forEach((String key, String value) {
       if (_matches(key)) {
@@ -440,7 +440,7 @@
     return keys;
   }
 
-  Collection<String> getValues() {
+  Collection<String> get values {
     final values = new List<String>();
     $dom_attributes.forEach((String key, String value) {
       if (_matches(key)) {
@@ -450,10 +450,10 @@
     return values;
   }
 
-  int get length => getKeys().length;
+  int get length => keys.length;
 
   // TODO: Use lazy iterator when it is available on Map.
-  bool isEmpty() => length == 0;
+  bool get isEmpty => length == 0;
 
   // Helpers.
   String _attr(String key) => 'data-$key';
@@ -486,7 +486,7 @@
 
   bool some(bool f(String element)) => _read().some(f);
 
-  bool isEmpty() => _read().isEmpty();
+  bool get isEmpty => _read().isEmpty;
 
   bool get frozen => false;
 
@@ -570,7 +570,7 @@
     Set<String> s = new Set<String>();
     for (String name in _classname().split(' ')) {
       String trimmed = name.trim();
-      if (!trimmed.isEmpty()) {
+      if (!trimmed.isEmpty) {
         s.add(trimmed);
       }
     }
@@ -609,7 +609,7 @@
   const _SimpleClientRect(this.left, this.top, this.width, this.height);
 
   bool operator ==(ClientRect other) {
-    return other !== null && left == other.left && top == other.top
+    return other != null && left == other.left && top == other.top
         && width == other.width && height == other.height;
   }
 
@@ -672,7 +672,7 @@
   void set attributes(Map<String, String> value) {
     Map<String, String> attributes = this.attributes;
     attributes.clear();
-    for (String key in value.getKeys()) {
+    for (String key in value.keys) {
       attributes[key] = value[key];
     }
   }
@@ -704,7 +704,7 @@
   void set dataAttributes(Map<String, String> value) {
     final dataAttributes = this.dataAttributes;
     dataAttributes.clear();
-    for (String key in value.getKeys()) {
+    for (String key in value.keys) {
       dataAttributes[key] = value[key];
     }
   }
@@ -842,7 +842,7 @@
     String parentTag = 'div';
     String tag;
     final match = _START_TAG_REGEXP.firstMatch(html);
-    if (match !== null) {
+    if (match != null) {
       tag = match.group(1).toLowerCase();
       if (_CUSTOM_PARENT_TAG_MAP.containsKey(tag)) {
         parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
diff --git a/lib/html/templates/html/impl/impl_EventTarget.darttemplate b/lib/html/templates/html/impl/impl_EventTarget.darttemplate
index 94861d8..23e8f5b 100644
--- a/lib/html/templates/html/impl/impl_EventTarget.darttemplate
+++ b/lib/html/templates/html/impl/impl_EventTarget.darttemplate
@@ -6,7 +6,7 @@
   /* Raw event target. */
   // TODO(jacobr): it would be nice if we could specify this as
   // _EventTargetImpl or EventTarget
-  final Dynamic _ptr;
+  final _ptr;
 
   _EventsImpl(this._ptr);
 
@@ -18,7 +18,7 @@
 class _EventListenerListImpl implements EventListenerList {
 
   // TODO(jacobr): make this _EventTargetImpl
-  final Dynamic _ptr;
+  final _ptr;
   final String _type;
 
   _EventListenerListImpl(this._ptr, this._type);
diff --git a/lib/html/templates/html/impl/impl_MutationObserver.darttemplate b/lib/html/templates/html/impl/impl_MutationObserver.darttemplate
index 4ae3c21..45d337b 100644
--- a/lib/html/templates/html/impl/impl_MutationObserver.darttemplate
+++ b/lib/html/templates/html/impl/impl_MutationObserver.darttemplate
@@ -20,7 +20,7 @@
     if (options != null) {
       options.forEach((k, v) {
           if (_boolKeys.containsKey(k)) {
-            _add(parsedOptions, k, true === v);
+            _add(parsedOptions, k, true == v);
           } else if (k == 'attributeFilter') {
             _add(parsedOptions, k, _fixupList(v));
           } else {
diff --git a/lib/html/templates/html/impl/impl_Node.darttemplate b/lib/html/templates/html/impl/impl_Node.darttemplate
index 8b369d1..594a2cc 100644
--- a/lib/html/templates/html/impl/impl_Node.darttemplate
+++ b/lib/html/templates/html/impl/impl_Node.darttemplate
@@ -15,10 +15,10 @@
 
 $if DART2JS
   _NodeImpl get first => JS('_NodeImpl', '#.firstChild', _this);
-  _NodeImpl last() => JS('_NodeImpl', '#.lastChild', _this);
+  _NodeImpl get last => JS('_NodeImpl', '#.lastChild', _this);
 $else
   _NodeImpl get first => _this.$dom_firstChild;
-  _NodeImpl last() => _this.$dom_lastChild;
+  _NodeImpl get last => _this.$dom_lastChild;
 $endif
 
   void add(_NodeImpl value) {
@@ -37,7 +37,7 @@
   }
 
   _NodeImpl removeLast() {
-    final result = last();
+    final result = last;
     if (result != null) {
       _this.$dom_removeChild(result);
     }
@@ -69,14 +69,14 @@
 
   bool some(bool f(Node element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Node>:
 
   // TODO(jacobr): this could be implemented for child node lists.
   // The exception we throw here is misleading.
   void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Node element, [int start = 0]) =>
@@ -87,15 +87,15 @@
 
   // FIXME: implement these.
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot setRange on immutable List.");
   }
   void removeRange(int start, int rangeLength) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot removeRange on immutable List.");
   }
   void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot insertRange on immutable List.");
   }
   List<Node> getRange(int start, int rangeLength) =>
diff --git a/lib/html/templates/html/impl/impl_NodeList.darttemplate b/lib/html/templates/html/impl/impl_NodeList.darttemplate
index 7a42e98..5e94454 100644
--- a/lib/html/templates/html/impl/impl_NodeList.darttemplate
+++ b/lib/html/templates/html/impl/impl_NodeList.darttemplate
@@ -23,7 +23,7 @@
 
   bool some(bool f(E element)) => _list.some(f);
 
-  bool isEmpty() => _list.isEmpty();
+  bool get isEmpty => _list.isEmpty;
 
   int get length => _list.length;
 
@@ -50,7 +50,7 @@
 
   E removeLast() => _list.removeLast();
 
-  E last() => _list.last();
+  E get last => _list.last;
 
   List<E> getRange(int start, int rangeLength) =>
     _list.getRange(start, rangeLength);
@@ -113,7 +113,7 @@
   }
 
   _NodeImpl removeLast() {
-    final result = this.last();
+    final result = this.last;
     if (result != null) {
       _parent.$dom_removeChild(result);
     }
@@ -141,12 +141,12 @@
 
   bool some(bool f(Node element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<Node>:
 
   void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf(Node element, [int start = 0]) =>
@@ -155,18 +155,18 @@
   int lastIndexOf(Node element, [int start = 0]) =>
       _Lists.lastIndexOf(this, element, start);
 
-  Node last() => this[length - 1];
+  Node get last => this[length - 1];
   Node get first => this[0];
 
   // FIXME: implement thesee.
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
   void removeRange(int start, int rangeLength) {
-    throw new UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
   void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
   List<Node> getRange(int start, int rangeLength) =>
     new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
diff --git a/lib/html/templates/html/impl/impl_SVGElement.darttemplate b/lib/html/templates/html/impl/impl_SVGElement.darttemplate
index ffb2b58..64eeccc 100644
--- a/lib/html/templates/html/impl/impl_SVGElement.darttemplate
+++ b/lib/html/templates/html/impl/impl_SVGElement.darttemplate
@@ -14,7 +14,7 @@
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   CSSClassSet get classes {
-    if (_cssClassSet === null) {
+    if (_cssClassSet == null) {
       _cssClassSet = new _AttributeClassSet(_ptr);
     }
     return _cssClassSet;
diff --git a/lib/html/templates/html/impl/impl_Storage.darttemplate b/lib/html/templates/html/impl/impl_Storage.darttemplate
index b6027f5..38c83f2 100644
--- a/lib/html/templates/html/impl/impl_Storage.darttemplate
+++ b/lib/html/templates/html/impl/impl_Storage.darttemplate
@@ -5,7 +5,7 @@
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   // TODO(nweiz): update this when maps support lazy iteration
-  bool containsValue(String value) => getValues().some((e) => e == value);
+  bool containsValue(String value) => values.some((e) => e == value);
 
   bool containsKey(String key) => $dom_getItem(key) != null;
 
@@ -35,13 +35,13 @@
     }
   }
 
-  Collection<String> getKeys() {
+  Collection<String> get keys {
     final keys = [];
     forEach((k, v) => keys.add(k));
     return keys;
   }
 
-  Collection<String> getValues() {
+  Collection<String> get values {
     final values = [];
     forEach((k, v) => values.add(v));
     return values;
@@ -49,6 +49,6 @@
 
   int get length => $dom_length;
 
-  bool isEmpty() => $dom_key(0) == null;
+  bool get isEmpty => $dom_key(0) == null;
 $!MEMBERS
 }
diff --git a/lib/html/templates/html/impl/impl_WheelEvent.darttemplate b/lib/html/templates/html/impl/impl_WheelEvent.darttemplate
index 37873a5..a2cf353 100644
--- a/lib/html/templates/html/impl/impl_WheelEvent.darttemplate
+++ b/lib/html/templates/html/impl/impl_WheelEvent.darttemplate
@@ -29,7 +29,7 @@
       }
       return 0;
     }
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         'deltaY is not supported');
   }
 
@@ -57,7 +57,7 @@
       }
       return 0;
     }
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         'deltaX is not supported');
   }
 
diff --git a/lib/html/templates/html/interface/interface_AudioContext.darttemplate b/lib/html/templates/html/interface/interface_AudioContext.darttemplate
index fb4fb24..3d2ab5b 100644
--- a/lib/html/templates/html/interface/interface_AudioContext.darttemplate
+++ b/lib/html/templates/html/interface/interface_AudioContext.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
   factory $ID() => _$(ID)FactoryProvider.create$ID();
diff --git a/lib/html/templates/html/interface/interface_CSSStyleDeclaration.darttemplate b/lib/html/templates/html/interface/interface_CSSStyleDeclaration.darttemplate
index 1f6d611..721738d 100644
--- a/lib/html/templates/html/interface/interface_CSSStyleDeclaration.darttemplate
+++ b/lib/html/templates/html/interface/interface_CSSStyleDeclaration.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS  {
   factory $ID() => _$(ID)FactoryProvider.create$ID();
diff --git a/lib/html/templates/html/interface/interface_CanvasElement.darttemplate b/lib/html/templates/html/interface/interface_CanvasElement.darttemplate
index ca44aef..811a81a 100644
--- a/lib/html/templates/html/interface/interface_CanvasElement.darttemplate
+++ b/lib/html/templates/html/interface/interface_CanvasElement.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 $!MEMBERS
diff --git a/lib/html/templates/html/interface/interface_CanvasRenderingContext2D.darttemplate b/lib/html/templates/html/interface/interface_CanvasRenderingContext2D.darttemplate
index 7e149bf..ae98fb4 100644
--- a/lib/html/templates/html/interface/interface_CanvasRenderingContext2D.darttemplate
+++ b/lib/html/templates/html/interface/interface_CanvasRenderingContext2D.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 $!MEMBERS
diff --git a/lib/html/templates/html/interface/interface_CustomEvent.darttemplate b/lib/html/templates/html/interface/interface_CustomEvent.darttemplate
index 7203ad6..e7d801f 100644
--- a/lib/html/templates/html/interface/interface_CustomEvent.darttemplate
+++ b/lib/html/templates/html/interface/interface_CustomEvent.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 
diff --git a/lib/html/templates/html/interface/interface_Document.darttemplate b/lib/html/templates/html/interface/interface_Document.darttemplate
index 318ddef..7d30daf 100644
--- a/lib/html/templates/html/interface/interface_Document.darttemplate
+++ b/lib/html/templates/html/interface/interface_Document.darttemplate
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of html;
+
 $!COMMENT
 abstract class Document extends HtmlElement {
 
diff --git a/lib/html/templates/html/interface/interface_DocumentFragment.darttemplate b/lib/html/templates/html/interface/interface_DocumentFragment.darttemplate
index 5e00887..e302f50 100644
--- a/lib/html/templates/html/interface/interface_DocumentFragment.darttemplate
+++ b/lib/html/templates/html/interface/interface_DocumentFragment.darttemplate
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of html;
+
 $!COMMENT
 abstract class DocumentFragment extends Element {
 
diff --git a/lib/html/templates/html/interface/interface_Element.darttemplate b/lib/html/templates/html/interface/interface_Element.darttemplate
index 620efdb..833fdfd 100644
--- a/lib/html/templates/html/interface/interface_Element.darttemplate
+++ b/lib/html/templates/html/interface/interface_Element.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 /**
  * All your attribute manipulation needs in one place.
  * Extends the regular Map interface by automatically coercing non-string
diff --git a/lib/html/templates/html/interface/interface_Event.darttemplate b/lib/html/templates/html/interface/interface_Event.darttemplate
index 9f39243..141f0d6 100644
--- a/lib/html/templates/html/interface/interface_Event.darttemplate
+++ b/lib/html/templates/html/interface/interface_Event.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 
diff --git a/lib/html/templates/html/interface/interface_EventTarget.darttemplate b/lib/html/templates/html/interface/interface_EventTarget.darttemplate
index 6e15d33..aa7288a 100644
--- a/lib/html/templates/html/interface/interface_EventTarget.darttemplate
+++ b/lib/html/templates/html/interface/interface_EventTarget.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 abstract class EventListenerList {
   EventListenerList add(EventListener handler, [bool useCapture]);
 
diff --git a/lib/html/templates/html/interface/interface_HttpRequest.darttemplate b/lib/html/templates/html/interface/interface_HttpRequest.darttemplate
index c705976..faea09e 100644
--- a/lib/html/templates/html/interface/interface_HttpRequest.darttemplate
+++ b/lib/html/templates/html/interface/interface_HttpRequest.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
   factory $ID.get(String url, onSuccess($ID request)) =>
diff --git a/lib/html/templates/html/interface/interface_IDBKeyRange.darttemplate b/lib/html/templates/html/interface/interface_IDBKeyRange.darttemplate
index 4b3e68f..f19d5d8 100644
--- a/lib/html/templates/html/interface/interface_IDBKeyRange.darttemplate
+++ b/lib/html/templates/html/interface/interface_IDBKeyRange.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 
diff --git a/lib/html/templates/html/interface/interface_LocalWindow.darttemplate b/lib/html/templates/html/interface/interface_LocalWindow.darttemplate
index 6255a4d1..ff46f20 100644
--- a/lib/html/templates/html/interface/interface_LocalWindow.darttemplate
+++ b/lib/html/templates/html/interface/interface_LocalWindow.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 
diff --git a/lib/html/templates/html/interface/interface_MouseEvent.darttemplate b/lib/html/templates/html/interface/interface_MouseEvent.darttemplate
index 28dff37..1ca65f9 100644
--- a/lib/html/templates/html/interface/interface_MouseEvent.darttemplate
+++ b/lib/html/templates/html/interface/interface_MouseEvent.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 
diff --git a/lib/html/templates/html/interface/interface_MutationObserver.darttemplate b/lib/html/templates/html/interface/interface_MutationObserver.darttemplate
index bde6196..328196d 100644
--- a/lib/html/templates/html/interface/interface_MutationObserver.darttemplate
+++ b/lib/html/templates/html/interface/interface_MutationObserver.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 $!MEMBERS
diff --git a/lib/html/templates/html/interface/interface_Node.darttemplate b/lib/html/templates/html/interface/interface_Node.darttemplate
index 0dc4537..81d091a 100644
--- a/lib/html/templates/html/interface/interface_Node.darttemplate
+++ b/lib/html/templates/html/interface/interface_Node.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
   List<Node> get nodes;
diff --git a/lib/html/templates/html/interface/interface_NodeList.darttemplate b/lib/html/templates/html/interface/interface_NodeList.darttemplate
index e32eafd..357b14f 100644
--- a/lib/html/templates/html/interface/interface_NodeList.darttemplate
+++ b/lib/html/templates/html/interface/interface_NodeList.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 
diff --git a/lib/html/templates/html/interface/interface_NodeSelector.darttemplate b/lib/html/templates/html/interface/interface_NodeSelector.darttemplate
index 00a367a..3777034 100644
--- a/lib/html/templates/html/interface/interface_NodeSelector.darttemplate
+++ b/lib/html/templates/html/interface/interface_NodeSelector.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 
diff --git a/lib/html/templates/html/interface/interface_Point.darttemplate b/lib/html/templates/html/interface/interface_Point.darttemplate
index a344eae..9dfcb49 100644
--- a/lib/html/templates/html/interface/interface_Point.darttemplate
+++ b/lib/html/templates/html/interface/interface_Point.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 
diff --git a/lib/html/templates/html/interface/interface_SVGElement.darttemplate b/lib/html/templates/html/interface/interface_SVGElement.darttemplate
index 785ad11..47d4e6f 100644
--- a/lib/html/templates/html/interface/interface_SVGElement.darttemplate
+++ b/lib/html/templates/html/interface/interface_SVGElement.darttemplate
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of html;
+
 $!COMMENT
 abstract class SVGElement implements Element {
 
diff --git a/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate b/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate
index db51713..a97d617 100644
--- a/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate
+++ b/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of html;
+
 $!COMMENT
 abstract class SVGSVGElement extends SVGElement implements SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGLocatable, SVGFitToViewBox, SVGZoomAndPan {
   factory SVGSVGElement() => _$(ID)FactoryProvider.createSVGSVGElement();
diff --git a/lib/html/templates/html/interface/interface_ShadowRoot.darttemplate b/lib/html/templates/html/interface/interface_ShadowRoot.darttemplate
index ee6915e..f30a8c6 100644
--- a/lib/html/templates/html/interface/interface_ShadowRoot.darttemplate
+++ b/lib/html/templates/html/interface/interface_ShadowRoot.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 $!MEMBERS
diff --git a/lib/html/templates/html/interface/interface_Storage.darttemplate b/lib/html/templates/html/interface/interface_Storage.darttemplate
index 799b556..5f0da3d 100644
--- a/lib/html/templates/html/interface/interface_Storage.darttemplate
+++ b/lib/html/templates/html/interface/interface_Storage.darttemplate
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of html;
+
 $!COMMENT
 abstract class $ID implements Map<String, String> {
 $!MEMBERS
diff --git a/lib/html/templates/html/interface/interface_Text.darttemplate b/lib/html/templates/html/interface/interface_Text.darttemplate
index 4e9c996..838c7cd 100644
--- a/lib/html/templates/html/interface/interface_Text.darttemplate
+++ b/lib/html/templates/html/interface/interface_Text.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 
diff --git a/lib/html/templates/html/interface/interface_WebSocket.darttemplate b/lib/html/templates/html/interface/interface_WebSocket.darttemplate
index 5d9fdd3..0fae1e3 100644
--- a/lib/html/templates/html/interface/interface_WebSocket.darttemplate
+++ b/lib/html/templates/html/interface/interface_WebSocket.darttemplate
@@ -4,6 +4,8 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 
diff --git a/lib/html/templates/html/interface/interface_WheelEvent.darttemplate b/lib/html/templates/html/interface/interface_WheelEvent.darttemplate
index 1966c89..f4232db 100644
--- a/lib/html/templates/html/interface/interface_WheelEvent.darttemplate
+++ b/lib/html/templates/html/interface/interface_WheelEvent.darttemplate
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of html;
+
 $!COMMENT
 abstract class $ID$EXTENDS {
 $!MEMBERS
diff --git a/lib/html/templates/immutable_list_mixin.darttemplate b/lib/html/templates/immutable_list_mixin.darttemplate
index d72fc5d..74d5a4e 100644
--- a/lib/html/templates/immutable_list_mixin.darttemplate
+++ b/lib/html/templates/immutable_list_mixin.darttemplate
@@ -13,15 +13,15 @@
   // From Collection<$E>:
 
   void add($E value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addLast($E value) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
   void addAll(Collection<$E> collection) {
-    throw const UnsupportedOperationException("Cannot add to immutable List.");
+    throw new UnsupportedError("Cannot add to immutable List.");
   }
 
 $if DEFINE_CONTAINS
@@ -41,38 +41,38 @@
 
   bool some(bool f($E element)) => _Collections.some(this, f);
 
-  bool isEmpty() => this.length == 0;
+  bool get isEmpty => this.length == 0;
 
   // From List<$E>:
 
   void sort([Comparator<$E> compare = Comparable.compare]) {
-    throw const UnsupportedOperationException("Cannot sort immutable List.");
+    throw new UnsupportedError("Cannot sort immutable List.");
   }
 
   int indexOf($E element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
   int lastIndexOf($E element, [int start]) {
-    if (start === null) start = length - 1;
+    if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  $E last() => this[length - 1];
+  $E get last => this[length - 1];
 
   $E removeLast() {
-    throw const UnsupportedOperationException("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<$E> from, [int startFrom]) {
-    throw const UnsupportedOperationException("Cannot setRange on immutable List.");
+    throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const UnsupportedOperationException("Cannot removeRange on immutable List.");
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
   void insertRange(int start, int rangeLength, [$E initialValue]) {
-    throw const UnsupportedOperationException("Cannot insertRange on immutable List.");
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
   List<$E> getRange(int start, int rangeLength) =>
diff --git a/lib/html/templates/interface.darttemplate b/lib/html/templates/interface.darttemplate
index 01184b0..671dbb5 100644
--- a/lib/html/templates/interface.darttemplate
+++ b/lib/html/templates/interface.darttemplate
@@ -4,5 +4,7 @@
 
 // WARNING: Do not edit - generated code.
 
+part of html;
+
 abstract class $ID$EXTENDS {
 $!MEMBERS}
diff --git a/lib/isolate/base.dart b/lib/isolate/base.dart
index e2c4b6d..d61c35c 100644
--- a/lib/isolate/base.dart
+++ b/lib/isolate/base.dart
@@ -92,7 +92,7 @@
    * Returns an immutable hash code for this send port that is
    * consistent with the == operator.
    */
-  int hashCode();
+  int get hashCode;
 
 }
 
diff --git a/lib/isolate/timer.dart b/lib/isolate/timer.dart
index 8684de7..d8da52f 100644
--- a/lib/isolate/timer.dart
+++ b/lib/isolate/timer.dart
@@ -9,7 +9,7 @@
    */
   factory Timer(int milliSeconds, void callback(Timer timer)) {
     if (_TimerFactory._factory == null) {
-      throw new UnsupportedOperationException("Timer interface not supported.");
+      throw new UnsupportedError("Timer interface not supported.");
     }
     return _TimerFactory._factory(milliSeconds, callback, false);
   }
@@ -20,7 +20,7 @@
    */
   factory Timer.repeating(int milliSeconds, void callback(Timer timer)) {
     if (_TimerFactory._factory == null) {
-      throw new UnsupportedOperationException("Timer interface not supported.");
+      throw new UnsupportedError("Timer interface not supported.");
     }
     return _TimerFactory._factory(milliSeconds, callback, true);
   }
diff --git a/lib/json/json.dart b/lib/json/json.dart
index be26c01..c0297fa 100644
--- a/lib/json/json.dart
+++ b/lib/json/json.dart
@@ -172,7 +172,7 @@
   _JsonParser(String json)
       : json = json,
         length = json.length {
-    if (tokens !== null) return;
+    if (tokens != null) return;
 
     // Use a list as jump-table. It is faster than switch and if.
     tokens = new List<int>(LAST_ASCII + 1);
@@ -205,7 +205,7 @@
 
   parseToplevel() {
     final result = parseValue();
-    if (token() !== null) {
+    if (token() != null) {
       error('Junk at the end of JSON input');
     }
     return result;
@@ -213,7 +213,7 @@
 
   parseValue() {
     final int token = token();
-    if (token === null) {
+    if (token == null) {
       error('Nothing to parse');
     }
     switch (token) {
@@ -353,8 +353,8 @@
 
     final int startPos = position;
     int char = char();
-    if (char === MINUS) char = nextChar();
-    if (char === CHAR_0) {
+    if (identical(char, MINUS)) char = nextChar();
+    if (identical(char, CHAR_0)) {
       char = nextChar();
     } else if (isDigit(char)) {
       char = nextChar();
@@ -364,7 +364,7 @@
     }
 
     bool isInt = true;
-    if (char === DOT) {
+    if (identical(char, DOT)) {
       char = nextChar();
       if (isDigit(char)) {
         char = nextChar();
@@ -375,9 +375,9 @@
       }
     }
 
-    if (char === CHAR_E || char === CHAR_CAPITAL_E) {
+    if (identical(char, CHAR_E) || identical(char, CHAR_CAPITAL_E)) {
       char = nextChar();
-      if (char === MINUS || char === PLUS) char = nextChar();
+      if (identical(char, MINUS) || identical(char, PLUS)) char = nextChar();
       if (isDigit(char)) {
         char = nextChar();
         isInt = false;
@@ -424,11 +424,11 @@
       if (position >= length) return null;
       int char = json.charCodeAt(position);
       int token = tokens[char];
-      if (token === WHITESPACE) {
+      if (identical(token, WHITESPACE)) {
         position++;
         continue;
       }
-      if (token === null) return 0;
+      if (token == null) return 0;
       return token;
     }
   }
@@ -511,7 +511,7 @@
   void checkCycle(final object) {
     // TODO: use Iterables.
     for (int i = 0; i < seen.length; i++) {
-      if (seen[i] === object) {
+      if (identical(seen[i], object)) {
         throw 'Cyclic structure';
       }
     }
@@ -547,13 +547,13 @@
       // TODO: use writeOn.
       sb.add(numberToString(object));
       return true;
-    } else if (object === true) {
+    } else if (identical(object, true)) {
       sb.add('true');
       return true;
-    } else if (object === false) {
+    } else if (identical(object, false)) {
       sb.add('false');
        return true;
-    } else if (object === null) {
+    } else if (object == null) {
       sb.add('null');
       return true;
     } else if (object is String) {
diff --git a/lib/math/base.dart b/lib/math/base.dart
index 72caa21..b2e7fae 100644
--- a/lib/math/base.dart
+++ b/lib/math/base.dart
@@ -80,7 +80,7 @@
           }
         }
         // Check for NaN and b == -0.0.
-        if (a == 0 && b.isNegative() || b.isNaN()) return b;
+        if (a == 0 && b.isNegative || b.isNaN) return b;
         return a;
       }
       return a;
@@ -117,11 +117,11 @@
           }
         }
         // Check for NaN.
-        if (b.isNaN()) return b;
+        if (b.isNaN) return b;
         return a;
       }
       // max(-0.0, 0) must return 0.
-      if (b == 0 && a.isNegative()) return b;
+      if (b == 0 && a.isNegative) return b;
       return a;
     }
     throw new ArgumentError(b);
diff --git a/lib/uri/helpers.dart b/lib/uri/helpers.dart
index b23cdb8..bcc1e56 100644
--- a/lib/uri/helpers.dart
+++ b/lib/uri/helpers.dart
@@ -13,7 +13,7 @@
   for (String segment in path.split("/")) {
     appendSlash = false;
     if (segment == "..") {
-      if (!output.isEmpty() &&
+      if (!output.isEmpty &&
           ((output.length != 1) || (output[0] != ""))) output.removeLast();
       appendSlash = true;
     } else if ("." == segment) {
diff --git a/lib/uri/uri.dart b/lib/uri/uri.dart
index 7a2446b..79d8563 100644
--- a/lib/uri/uri.dart
+++ b/lib/uri/uri.dart
@@ -48,7 +48,7 @@
   static String _emptyIfNull(String val) => val != null ? val : '';
 
   static int _parseIntOrZero(String val) {
-    if (val !== null && val != '') {
+    if (val != null && val != '') {
       return int.parse(val);
     } else {
       return 0;
@@ -217,13 +217,13 @@
     if (hasAuthority() || (scheme == "file")) {
       sb.add("//");
       _addIfNonEmpty(sb, userInfo, userInfo, "@");
-      sb.add(domain === null ? "null" : domain);
+      sb.add(domain == null ? "null" : domain);
       if (port != 0) {
         sb.add(":");
         sb.add(port.toString());
       }
     }
-    sb.add(path === null ? "null" : path);
+    sb.add(path == null ? "null" : path);
     _addIfNonEmpty(sb, query, "?", query);
     _addIfNonEmpty(sb, fragment, "#", fragment);
     return sb.toString();
@@ -232,8 +232,8 @@
   static void _addIfNonEmpty(StringBuffer sb, String test,
                              String first, String second) {
     if ("" != test) {
-      sb.add(first === null ? "null" : first);
-      sb.add(second === null ? "null" : second);
+      sb.add(first == null ? "null" : first);
+      sb.add(second == null ? "null" : second);
     }
   }
 }
diff --git a/lib/utf/utf16.dart b/lib/utf/utf16.dart
index 29aed2e..d1bd012 100644
--- a/lib/utf/utf16.dart
+++ b/lib/utf/utf16.dart
@@ -202,9 +202,9 @@
   // (http://code.google.com/p/dart/issues/detail?id=1357). Consider
   // removing after this issue is resolved.
   if (_is16BitCodeUnit()) {
-    return str.charCodes();
+    return str.charCodes;
   } else {
-    return _codepointsToUtf16CodeUnits(str.charCodes());
+    return _codepointsToUtf16CodeUnits(str.charCodes);
   }
 }
 
@@ -264,7 +264,7 @@
   List<int> decodeRest() {
     List<int> codeunits = new List<int>(remaining);
     int i = 0;
-    while (hasNext()) {
+    while (hasNext) {
       codeunits[i++] = next();
     }
     if (i == codeunits.length) {
@@ -276,7 +276,7 @@
     }
   }
 
-  bool hasNext() => utf16EncodedBytesIterator.hasNext();
+  bool get hasNext => utf16EncodedBytesIterator.hasNext;
 
   int next() {
     if (utf16EncodedBytesIterator.remaining < 2) {
diff --git a/lib/utf/utf32.dart b/lib/utf/utf32.dart
index 31c1bc8..9cbfd7a 100644
--- a/lib/utf/utf32.dart
+++ b/lib/utf/utf32.dart
@@ -219,13 +219,13 @@
   List<int> decodeRest() {
     List<int> codeunits = new List<int>(remaining);
     int i = 0;
-    while (hasNext()) {
+    while (hasNext) {
       codeunits[i++] = next();
     }
     return codeunits;
   }
 
-  bool hasNext() => utf32EncodedBytesIterator.hasNext();
+  bool get hasNext => utf32EncodedBytesIterator.hasNext;
 
   int next() {
     if (utf32EncodedBytesIterator.remaining < 4) {
diff --git a/lib/utf/utf8.dart b/lib/utf/utf8.dart
index 610aa72..48933af 100644
--- a/lib/utf/utf8.dart
+++ b/lib/utf/utf8.dart
@@ -170,7 +170,7 @@
   List<int> decodeRest() {
     List<int> codepoints = new List<int>(utf8EncodedBytesIterator.remaining);
     int i = 0;
-    while (hasNext()) {
+    while (hasNext) {
       codepoints[i++] = next();
     }
     if (i == codepoints.length) {
@@ -182,7 +182,7 @@
     }
   }
 
-  bool hasNext() => utf8EncodedBytesIterator.hasNext();
+  bool get hasNext => utf8EncodedBytesIterator.hasNext;
 
   int next() {
     int value = utf8EncodedBytesIterator.next();
@@ -226,7 +226,7 @@
           "Invalid UTF8 at ${utf8EncodedBytesIterator.position}");
     }
     int j = 0;
-    while (j < additionalBytes && utf8EncodedBytesIterator.hasNext()) {
+    while (j < additionalBytes && utf8EncodedBytesIterator.hasNext) {
       int nextValue = utf8EncodedBytesIterator.next();
       if (nextValue > _UTF8_ONE_BYTE_MAX &&
           nextValue < _UTF8_FIRST_BYTE_OF_TWO_BASE) {
diff --git a/lib/utf/utf_core.dart b/lib/utf/utf_core.dart
index 32f3f84..2cf5110 100644
--- a/lib/utf/utf_core.dart
+++ b/lib/utf/utf_core.dart
@@ -11,9 +11,9 @@
   // (http://code.google.com/p/dart/issues/detail?id=1357). Consider
   // removing after this issue is resolved.
   if (_is16BitCodeUnit()) {
-    codepoints = _utf16CodeUnitsToCodepoints(str.charCodes());
+    codepoints = _utf16CodeUnitsToCodepoints(str.charCodes);
   } else {
-    codepoints = str.charCodes();
+    codepoints = str.charCodes;
   }
   return codepoints;
 }
@@ -124,7 +124,7 @@
       .fromListRangeIterator(source, replacementCodepoint);
   List<int> codepoints = new List<int>(source.remaining);
   int i = 0;
-  while (decoder.hasNext()) {
+  while (decoder.hasNext) {
     codepoints[i++] = decoder.next();
   }
   if (i == codepoints.length) {
@@ -158,7 +158,7 @@
 
   Iterator<int> iterator() => this;
 
-  bool hasNext() => utf16CodeUnitIterator.hasNext();
+  bool get hasNext => utf16CodeUnitIterator.hasNext;
 
   int next() {
     int value = utf16CodeUnitIterator.next();
@@ -174,7 +174,7 @@
       // transfer directly
       return value;
     } else if (value < UNICODE_UTF16_SURROGATE_UNIT_1_BASE &&
-        utf16CodeUnitIterator.hasNext()) {
+        utf16CodeUnitIterator.hasNext) {
       // merge surrogate pair
       int nextValue = utf16CodeUnitIterator.next();
       if (nextValue >= UNICODE_UTF16_SURROGATE_UNIT_1_BASE &&
@@ -241,7 +241,7 @@
  * and move forward/backward within the iterator.
  */
 abstract class _ListRangeIterator implements Iterator<int> {
-  bool hasNext();
+  bool hasNext;
   int next();
   int get position;
   void backup([by]);
@@ -256,7 +256,7 @@
 
   _ListRangeIteratorImpl(this._source, this._offset, this._end);
 
-  bool hasNext() => _offset < _end;
+  bool get hasNext => _offset < _end;
 
   int next() => _source[_offset++];
 
diff --git a/pkg/args/lib/args.dart b/pkg/args/lib/args.dart
index f97c1bd..a74c981 100644
--- a/pkg/args/lib/args.dart
+++ b/pkg/args/lib/args.dart
@@ -496,7 +496,7 @@
    * that abbreviation.
    */
   _Option _findByAbbr(String abbr) {
-    for (var option in _options.getValues()) {
+    for (var option in _options.values) {
       if (option.abbreviation == abbr) return option;
     }
 
@@ -544,7 +544,7 @@
   }
 
   /** Get the names of the options as a [Collection]. */
-  Collection<String> get options => _options.getKeys();
+  Collection<String> get options => _options.keys;
 }
 
 class _Option {
@@ -630,7 +630,7 @@
       if (option.help != null) write(2, option.help);
 
       if (option.allowedHelp != null) {
-        var allowedNames = option.allowedHelp.getKeys();
+        var allowedNames = option.allowedHelp.keys;
         allowedNames.sort((a, b) => a.compareTo(b));
         newline();
         for (var name in allowedNames) {
@@ -692,7 +692,7 @@
 
       // Make room for the allowed help.
       if (option.allowedHelp != null) {
-        for (var allowed in option.allowedHelp.getKeys()) {
+        for (var allowed in option.allowedHelp.keys) {
           title = max(title, getAllowedTitle(allowed).length);
         }
       }
diff --git a/pkg/dartdoc/bin/dartdoc.dart b/pkg/dartdoc/bin/dartdoc.dart
index 5e728e8..5e7a9b0 100644
--- a/pkg/dartdoc/bin/dartdoc.dart
+++ b/pkg/dartdoc/bin/dartdoc.dart
@@ -126,7 +126,7 @@
         'default. Specify a comma-separated list of\n'
         'library names, or call this option multiple times.',
       callback: (incLibs) {
-        if(!incLibs.isEmpty()) {
+        if(!incLibs.isEmpty) {
           List<String> allLibs = new List<String>();
           for(final lst in incLibs) {
             var someLibs = lst.split(',');
@@ -145,7 +145,7 @@
         'comma-separated list of library names, or call\n'
         'this option multiple times.',
       callback: (excLibs) {
-        if(!excLibs.isEmpty()) {
+        if(!excLibs.isEmpty) {
           List<String> allLibs = new List<String>();
           for(final lst in excLibs) {
             var someLibs = lst.split(',');
@@ -168,7 +168,7 @@
 
   dartdoc.dartdocPath = libPath.append('pkg/dartdoc');
 
-  if (args.isEmpty()) {
+  if (args.isEmpty) {
     print('No arguments provided.');
     print(USAGE);
     print(argParser.getUsage());
@@ -188,7 +188,7 @@
     return;
   }
 
-  if (entrypoints.isEmpty()) {
+  if (entrypoints.isEmpty) {
     print('No entrypoints provided.');
     print(argParser.getUsage());
     return;
diff --git a/pkg/dartdoc/lib/dartdoc.dart b/pkg/dartdoc/lib/dartdoc.dart
index d3380d1..0fb159e 100644
--- a/pkg/dartdoc/lib/dartdoc.dart
+++ b/pkg/dartdoc/lib/dartdoc.dart
@@ -90,6 +90,15 @@
 }
 
 /**
+ * Returns the display name of the library. This is necessary to account for
+ * dart: libraries.
+ */
+String displayName(LibraryMirror library) {
+  var uri = library.uri.toString();
+  return uri.startsWith('dart:') ?  uri.toString() : library.simpleName;
+}
+
+/**
  * Copies all of the files in the directory [from] to [to]. Does *not*
  * recursively copy subdirectories.
  *
@@ -257,16 +266,16 @@
       return false;
     }
     var includeByDefault = true;
-    String libraryName = library.simpleName;
-    if (!includedLibraries.isEmpty()) {
+    String libraryName = displayName(library);
+    if (excludedLibraries.contains(libraryName)) {
+      return false;
+    }
+    if (!includedLibraries.isEmpty) {
       includeByDefault = false;
-      if (includedLibraries.indexOf(libraryName) != -1) {
+      if (includedLibraries.contains(libraryName)) {
         return true;
       }
     }
-    if (excludedLibraries.indexOf(libraryName) != -1) {
-      return false;
-    }
     if (libraryName.startsWith('dart:')) {
       String suffix = libraryName.substring('dart:'.length);
       LibraryInfo info = LIBRARIES[suffix];
@@ -283,7 +292,7 @@
    */
   bool shouldLinkToPublicApi(LibraryMirror library) {
     if (linkToApi) {
-      String libraryName = library.simpleName;
+      String libraryName = displayName(library);
       if (libraryName.startsWith('dart:')) {
         String suffix = libraryName.substring('dart:'.length);
         LibraryInfo info = LIBRARIES[suffix];
@@ -326,11 +335,11 @@
   void _document(Compilation compilation) {
     // Sort the libraries by name (not key).
     _sortedLibraries = new List<LibraryMirror>.from(
-        compilation.mirrors.libraries.getValues().filter(
+        compilation.mirrors.libraries.values.filter(
             shouldIncludeLibrary));
     _sortedLibraries.sort((x, y) {
-      return x.simpleName.toUpperCase().compareTo(
-          y.simpleName.toUpperCase());
+      return displayName(x).toUpperCase().compareTo(
+          displayName(y).toUpperCase());
     });
 
     // Generate the docs.
@@ -410,7 +419,7 @@
     var data = '';
     if (_currentLibrary != null) {
       data = '$data data-library='
-             '"${md.escapeHtml(_currentLibrary.simpleName)}"';
+             '"${md.escapeHtml(displayName(_currentLibrary))}"';
     }
 
     if (_currentType != null) {
@@ -519,7 +528,7 @@
   }
 
   void docIndexLibrary(LibraryMirror library) {
-    writeln('<h4>${a(libraryUrl(library), library.simpleName)}</h4>');
+    writeln('<h4>${a(libraryUrl(library), displayName(library))}</h4>');
   }
 
   /**
@@ -570,14 +579,14 @@
 
   void docLibraryNavigationJson(LibraryMirror library, List libraryList) {
     var libraryInfo = {};
-    libraryInfo[NAME] = library.simpleName;
+    libraryInfo[NAME] = displayName(library);
     final List members = docMembersJson(library.declaredMembers);
-    if (!members.isEmpty()) {
+    if (!members.isEmpty) {
       libraryInfo[MEMBERS] = members;
     }
 
     final types = [];
-    for (InterfaceMirror type in orderByName(library.types.getValues())) {
+    for (InterfaceMirror type in orderByName(library.types.values)) {
       if (!showPrivate && type.isPrivate) continue;
 
       var typeInfo = {};
@@ -591,11 +600,11 @@
         typeInfo[KIND] = TYPEDEF;
       }
       final List typeMembers = docMembersJson(type.declaredMembers);
-      if (!typeMembers.isEmpty()) {
+      if (!typeMembers.isEmpty) {
         typeInfo[MEMBERS] = typeMembers;
       }
 
-      if (!type.declaration.typeVariables.isEmpty()) {
+      if (!type.declaration.typeVariables.isEmpty) {
         final typeVariables = [];
         for (final typeVariable in type.declaration.typeVariables) {
           typeVariables.add(typeVariable.displayName);
@@ -604,7 +613,7 @@
       }
       types.add(typeInfo);
     }
-    if (!types.isEmpty()) {
+    if (!types.isEmpty) {
       libraryInfo[TYPES] = types;
     }
 
@@ -613,7 +622,7 @@
 
   List docMembersJson(Map<Object,MemberMirror> memberMap) {
     final members = [];
-    for (MemberMirror member in orderByName(memberMap.getValues())) {
+    for (MemberMirror member in orderByName(memberMap.values)) {
       if (!showPrivate && member.isPrivate) continue;
 
       var memberInfo = {};
@@ -630,7 +639,7 @@
         } else {
           memberInfo[KIND] = METHOD;
         }
-        if (method.parameters.isEmpty()) {
+        if (method.parameters.isEmpty) {
           memberInfo[NO_PARAMS] = true;
         }
       }
@@ -655,9 +664,9 @@
         write('<h2><div class="icon-library"></div>');
 
         if ((_currentLibrary == library) && (_currentType == null)) {
-          write('<strong>${library.simpleName}</strong>');
+          write('<strong>${displayName(library)}</strong>');
         } else {
-          write('${a(libraryUrl(library), library.simpleName)}');
+          write('${a(libraryUrl(library), displayName(library))}');
         }
         write('</h2>');
 
@@ -675,7 +684,7 @@
     final types = <InterfaceMirror>[];
     final exceptions = <InterfaceMirror>[];
 
-    for (InterfaceMirror type in orderByName(library.types.getValues())) {
+    for (InterfaceMirror type in orderByName(library.types.values)) {
       if (!showPrivate && type.isPrivate) continue;
 
       if (isException(type)) {
@@ -715,16 +724,16 @@
 
   void docLibrary(LibraryMirror library) {
     if (verbose) {
-      print('Library \'${library.simpleName}\':');
+      print('Library \'${displayName(library)}\':');
     }
     _totalLibraries++;
     _currentLibrary = library;
     _currentType = null;
 
     startFile(libraryUrl(library));
-    writeHeader('${library.simpleName} Library',
-        [library.simpleName, libraryUrl(library)]);
-    writeln('<h2><strong>${library.simpleName}</strong> library</h2>');
+    writeHeader('${displayName(library)} Library',
+        [displayName(library), libraryUrl(library)]);
+    writeln('<h2><strong>${displayName(library)}</strong> library</h2>');
 
     // Look for a comment for the entire library.
     final comment = getLibraryComment(library);
@@ -741,7 +750,7 @@
     final typedefs = <TypedefMirror>[];
     final exceptions = <InterfaceMirror>[];
 
-    for (InterfaceMirror type in orderByName(library.types.getValues())) {
+    for (InterfaceMirror type in orderByName(library.types.values)) {
       if (!showPrivate && type.isPrivate) continue;
 
       if (isException(type)) {
@@ -765,7 +774,7 @@
     writeFooter();
     endFile();
 
-    for (final type in library.types.getValues()) {
+    for (final type in library.types.values) {
       if (!showPrivate && type.isPrivate) continue;
 
       docType(type);
@@ -813,8 +822,8 @@
 
     final typeTitle =
       '${typeName(type)} ${kind}';
-    writeHeader('$typeTitle / ${type.library.simpleName} Library',
-        [type.library.simpleName, libraryUrl(type.library),
+    writeHeader('$typeTitle / ${displayName(type.library)} Library',
+        [displayName(type.library), libraryUrl(type.library),
          typeName(type), typeUrl(type)]);
     writeln(
         '''
@@ -1130,10 +1139,10 @@
                      Map<String,MemberMirror> getters,
                      Map<String,MemberMirror> setters,
                      {bool allInherited}) {
-    if (getters.isEmpty() && setters.isEmpty()) return;
+    if (getters.isEmpty && setters.isEmpty) return;
 
-    var nameSet = new Set<String>.from(getters.getKeys());
-    nameSet.addAll(setters.getKeys());
+    var nameSet = new Set<String>.from(getters.keys);
+    nameSet.addAll(setters.keys);
     var nameList = new List<String>.from(nameSet);
     nameList.sort((String a, String b) {
       return a.toLowerCase().compareTo(b.toLowerCase());
@@ -1512,7 +1521,7 @@
 
   /** Gets the URL to the documentation for [library]. */
   String libraryUrl(LibraryMirror library) {
-    return '${sanitize(library.simpleName)}.html';
+    return '${sanitize(displayName(library))}.html';
   }
 
   /** Gets the URL for the documentation for [type]. */
@@ -1524,7 +1533,7 @@
     // Always get the generic type to strip off any type parameters or
     // arguments. If the type isn't generic, genericType returns `this`, so it
     // works for non-generic types too.
-    return '${sanitize(type.library.simpleName)}/'
+    return '${sanitize(displayName(type.library))}/'
            '${type.declaration.simpleName}.html';
   }
 
@@ -1658,7 +1667,7 @@
           typeParams.add(typeParam.simpleName);
         }
       }
-      if (typeParams.isEmpty()) {
+      if (typeParams.isEmpty) {
         return type.simpleName;
       }
       final params = Strings.join(typeParams, ', ');
@@ -1848,7 +1857,7 @@
   final InterfaceMirror inheritedFrom;
 
   DocComment(this.text, [this.inheritedFrom = null]) {
-    assert(text != null && !text.trim().isEmpty());
+    assert(text != null && !text.trim().isEmpty);
   }
 
   String get html => md.markdownToHtml(text);
diff --git a/pkg/dartdoc/lib/mirrors.dart b/pkg/dartdoc/lib/mirrors.dart
index 692e37a..d6a8010 100644
--- a/pkg/dartdoc/lib/mirrors.dart
+++ b/pkg/dartdoc/lib/mirrors.dart
@@ -132,6 +132,11 @@
    * Returns the source location for this library.
    */
   Location get location;
+
+  /**
+   * Returns the canonical URI for this library.
+   */
+  Uri get uri;
 }
 
 /**
@@ -476,8 +481,8 @@
 
   /**
    * Returns the [Source] in which this [Location] indexes.
-   * If [:loc:] is a location, [:loc.source().text()[loc.start()] is where it
-   * starts, and [:loc.source().text()[loc.end()] is where it ends.
+   * If [:loc:] is a location, [:loc.source().text()[loc.start]:] is where it
+   * starts, and [:loc.source().text()[loc.end]:] is where it ends.
    */
   Source get source;
 
diff --git a/pkg/dartdoc/lib/mirrors_util.dart b/pkg/dartdoc/lib/mirrors_util.dart
index bbd6b49..5ba6021 100644
--- a/pkg/dartdoc/lib/mirrors_util.dart
+++ b/pkg/dartdoc/lib/mirrors_util.dart
@@ -20,7 +20,7 @@
   type = type.declaration;
   var subtypes = <InterfaceMirror>[];
   type.system.libraries.forEach((_, library) {
-    for (InterfaceMirror otherType in library.types.getValues()) {
+    for (InterfaceMirror otherType in library.types.values) {
       var superClass = otherType.superclass;
       if (superClass !== null) {
         superClass = superClass.declaration;
@@ -119,9 +119,9 @@
 
   InterfaceMirror next() {
     InterfaceMirror type;
-    if (queue.isEmpty()) {
+    if (queue.isEmpty) {
       if (object === null) {
-        throw new NoMoreElementsException();
+        throw new StateError("No more elements");
       }
       type = object;
       object = null;
@@ -131,5 +131,5 @@
     }
   }
 
-  bool hasNext() => !queue.isEmpty() || object !== null;
+  bool get hasNext => !queue.isEmpty || object !== null;
 }
diff --git a/pkg/dartdoc/lib/src/client/dropdown.dart b/pkg/dartdoc/lib/src/client/dropdown.dart
index 8da62bc..30d63fe 100644
--- a/pkg/dartdoc/lib/src/client/dropdown.dart
+++ b/pkg/dartdoc/lib/src/client/dropdown.dart
@@ -19,7 +19,7 @@
   if (text == currentSearchText) {
     return;
   }
-  if (text.isEmpty()) {
+  if (text.isEmpty) {
     updateResults(text, results);
     hideDropDown();
     return;
@@ -29,12 +29,12 @@
     String typeText = text.substring(0, text.indexOf('.'));
     String memberText = text.substring(text.indexOf('.') + 1);
 
-    if (typeText.isEmpty() && memberText.isEmpty()) {
+    if (typeText.isEmpty && memberText.isEmpty) {
       // Don't search on '.'.
-    } else if (typeText.isEmpty()) {
+    } else if (typeText.isEmpty) {
       // Search text is of the form '.id' => Look up members.
       matchAllMembers(results, memberText);
-    } else if (memberText.isEmpty()) {
+    } else if (memberText.isEmpty) {
       // Search text is of the form 'Type.' => Look up members in 'Type'.
       matchAllMembersInType(results, typeText, memberText);
     } else {
@@ -55,7 +55,7 @@
   table.classes.add('drop-down-table');
   elements.add(table);
 
-  if (results.isEmpty()) {
+  if (results.isEmpty) {
     var row = table.insertRow(0);
     row.innerHTML = "<tr><td>No matches found for '$text'.</td></tr>";
   } else {
@@ -239,7 +239,7 @@
 void updateResults(String searchText, List<Result> results) {
   currentSearchText = searchText;
   currentResults = results;
-  if (currentResults.isEmpty()) {
+  if (currentResults.isEmpty) {
     _currentResultIndex = -1;
     currentResult = null;
   } else {
@@ -305,7 +305,7 @@
 
 /** Show the search drop down unless there are no current results. */
 void showDropDown() {
-  if (currentResults.isEmpty()) {
+  if (currentResults.isEmpty) {
     hideDropDown();
   } else {
     dropdown.style.visibility = 'visible';
diff --git a/pkg/dartdoc/lib/src/client/search.dart b/pkg/dartdoc/lib/src/client/search.dart
index fce6d2d..d9b0da1 100644
--- a/pkg/dartdoc/lib/src/client/search.dart
+++ b/pkg/dartdoc/lib/src/client/search.dart
@@ -17,13 +17,13 @@
   SearchText(String searchText)
       : text = searchText,
         lowerCase = searchText.toLowerCase(),
-        camelCase = searchText.isEmpty() ? ''
+        camelCase = searchText.isEmpty ? ''
             : '${searchText.substring(0, 1).toUpperCase()}'
               '${searchText.substring(1)}';
 
   int get length => text.length;
 
-  bool isEmpty() => length == 0;
+  bool get isEmpty => length == 0;
 }
 
 /**
@@ -149,7 +149,7 @@
  * [searchText], or returns [: null :] if no match is found.
  */
 StringMatch obtainMatch(SearchText searchText, String text) {
-  if (searchText.isEmpty()) {
+  if (searchText.isEmpty) {
     return new StringMatch(searchText, text, 0, 0);
   }
   int offset = text.toLowerCase().indexOf(searchText.lowerCase);
diff --git a/pkg/dartdoc/lib/src/dartdoc/comment_map.dart b/pkg/dartdoc/lib/src/dartdoc/comment_map.dart
index 87f9940..f4ddf5f 100644
--- a/pkg/dartdoc/lib/src/dartdoc/comment_map.dart
+++ b/pkg/dartdoc/lib/src/dartdoc/comment_map.dart
@@ -33,7 +33,7 @@
 
     _ensureFileParsed(span.source);
     String comment = _comments[span.source.uri.toString()][span.start];
-    assert(comment == null || !comment.trim().isEmpty());
+    assert(comment == null || !comment.trim().isEmpty);
     return comment;
   }
 
@@ -46,7 +46,7 @@
   String findLibrary(Source source) {
     _ensureFileParsed(source);
     String comment = _libraryComments[source.uri.toString()];
-    assert(comment == null || !comment.trim().isEmpty());
+    assert(comment == null || !comment.trim().isEmpty);
     return comment;
   }
 
@@ -87,7 +87,7 @@
           lastComment = null;
         }
       } else if (lastComment != null) {
-        if (!lastComment.trim().isEmpty()) {
+        if (!lastComment.trim().isEmpty) {
           // We haven't attached the last doc comment to something yet, so stick
           // it to this token.
           comments[token.charOffset] = lastComment;
diff --git a/pkg/dartdoc/lib/src/markdown/block_parser.dart b/pkg/dartdoc/lib/src/markdown/block_parser.dart
index 98a0945..79d9e69 100644
--- a/pkg/dartdoc/lib/src/markdown/block_parser.dart
+++ b/pkg/dartdoc/lib/src/markdown/block_parser.dart
@@ -300,7 +300,7 @@
         // Anything else is paragraph text or other stuff that can be in a list
         // item. However, if the previous item is a blank line, this means we're
         // done with the list and are starting a new top-level paragraph.
-        if ((childLines.length > 0) && (childLines.last() == '')) break;
+        if ((childLines.length > 0) && (childLines.last == '')) break;
         childLines.add(parser.current);
       }
       parser.advance();
diff --git a/pkg/dartdoc/lib/src/markdown/html_renderer.dart b/pkg/dartdoc/lib/src/markdown/html_renderer.dart
index b86ac95..70d4239 100644
--- a/pkg/dartdoc/lib/src/markdown/html_renderer.dart
+++ b/pkg/dartdoc/lib/src/markdown/html_renderer.dart
@@ -27,7 +27,7 @@
 
   bool visitElementBefore(Element element) {
     // Hackish. Separate block-level elements with newlines.
-    if (!buffer.isEmpty() &&
+    if (!buffer.isEmpty &&
         _BLOCK_TAGS.firstMatch(element.tag) != null) {
       buffer.add('\n');
     }
@@ -35,9 +35,9 @@
     buffer.add('<${element.tag}');
 
     // Sort the keys so that we generate stable output.
-    // TODO(rnystrom): This assumes getKeys() returns a fresh mutable
+    // TODO(rnystrom): This assumes keys returns a fresh mutable
     // collection.
-    final attributeNames = element.attributes.getKeys();
+    final attributeNames = element.attributes.keys;
     attributeNames.sort((a, b) => a.compareTo(b));
     for (final name in attributeNames) {
       buffer.add(' $name="${element.attributes[name]}"');
diff --git a/pkg/dartdoc/lib/src/markdown/inline_parser.dart b/pkg/dartdoc/lib/src/markdown/inline_parser.dart
index eb941a7..a958888 100644
--- a/pkg/dartdoc/lib/src/markdown/inline_parser.dart
+++ b/pkg/dartdoc/lib/src/markdown/inline_parser.dart
@@ -115,11 +115,11 @@
   writeTextRange(int start, int end) {
     if (end > start) {
       final text = source.substring(start, end);
-      final nodes = _stack.last().children;
+      final nodes = _stack.last.children;
 
       // If the previous node is text too, just append.
-      if ((nodes.length > 0) && (nodes.last() is Text)) {
-        final newNode = new Text('${nodes.last().text}$text');
+      if ((nodes.length > 0) && (nodes.last is Text)) {
+        final newNode = new Text('${nodes.last.text}$text');
         nodes[nodes.length - 1] = newNode;
       } else {
         nodes.add(new Text(text));
@@ -128,7 +128,7 @@
   }
 
   addNode(Node node) {
-    _stack.last().children.add(node);
+    _stack.last.children.add(node);
   }
 
   // TODO(rnystrom): Only need this because RegExp doesn't let you start
@@ -156,7 +156,7 @@
 
   bool tryMatch(InlineParser parser) {
     final startMatch = pattern.firstMatch(parser.currentSource);
-    if ((startMatch != null) && (startMatch.start() == 0)) {
+    if ((startMatch != null) && (startMatch.start == 0)) {
       // Write any existing plain text up to this point.
       parser.writeText();
 
@@ -354,7 +354,7 @@
   /// pattern.
   bool tryMatch(InlineParser parser) {
     Match endMatch = syntax.endPattern.firstMatch(parser.currentSource);
-    if ((endMatch != null) && (endMatch.start() == 0)) {
+    if ((endMatch != null) && (endMatch.start == 0)) {
       // Close the tag.
       close(parser, endMatch);
       return true;
diff --git a/pkg/dartdoc/lib/src/mirrors/dart2js_mirror.dart b/pkg/dartdoc/lib/src/mirrors/dart2js_mirror.dart
index c400db2..995fcba 100644
--- a/pkg/dartdoc/lib/src/mirrors/dart2js_mirror.dart
+++ b/pkg/dartdoc/lib/src/mirrors/dart2js_mirror.dart
@@ -40,13 +40,13 @@
     FunctionSignature signature) {
   var parameters = <ParameterMirror>[];
   Link<Element> link = signature.requiredParameters;
-  while (!link.isEmpty()) {
+  while (!link.isEmpty) {
     parameters.add(new Dart2JsParameterMirror(
         system, method, link.head, false));
     link = link.tail;
   }
   link = signature.optionalParameters;
-  while (!link.isEmpty()) {
+  while (!link.isEmpty) {
     parameters.add(new Dart2JsParameterMirror(
         system, method, link.head, true));
     link = link.tail;
@@ -251,7 +251,7 @@
   }
 
   void processQueueList(Enqueuer world, List<LibraryElement> elements) {
-    backend.processNativeClasses(world, libraries.getValues());
+    backend.processNativeClasses(world, libraries.values);
     for (var library in elements) {
       library.forEachLocalMember((element) {
         world.addToWorkList(element);
@@ -411,7 +411,7 @@
 
   String toString() => _element.toString();
 
-  int hashCode() => qualifiedName.hashCode();
+  int get hashCode => qualifiedName.hashCode;
 }
 
 abstract class Dart2JsProxyMirror implements Dart2JsMirror {
@@ -421,7 +421,7 @@
 
   String get displayName => simpleName;
 
-  int hashCode() => qualifiedName.hashCode();
+  int get hashCode => qualifiedName.hashCode;
 }
 
 //------------------------------------------------------------------------------
@@ -463,7 +463,7 @@
   String get qualifiedName => simpleName;
 
   // TODO(johnniwinther): Hack! Dart2JsMirrorSystem need not be a Mirror.
-  int hashCode() => qualifiedName.hashCode();
+  int get hashCode => qualifiedName.hashCode;
 }
 
 abstract class Dart2JsObjectMirror extends Dart2JsElementMirror
@@ -482,6 +482,8 @@
 
   LibraryElement get _library => _element;
 
+  Uri get uri => _library.uri;
+
   LibraryMirror library() => this;
 
   /**
@@ -737,7 +739,7 @@
   List<InterfaceMirror> get interfaces {
     var list = <InterfaceMirror>[];
     Link<DartType> link = _class.interfaces;
-    while (!link.isEmpty()) {
+    while (!link.isEmpty) {
       var type = _convertTypeToTypeMirror(system, link.head,
                                           system.compiler.types.dynamicType);
       list.add(type);
@@ -757,7 +759,7 @@
   bool get isDeclaration => true;
 
   List<TypeMirror> get typeArguments {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         'Declarations do not have type arguments');
   }
 
@@ -840,7 +842,7 @@
   bool get isTypedef => true;
 
   List<TypeMirror> get typeArguments {
-    throw new UnsupportedOperationException(
+    throw new UnsupportedError(
         'Declarations do not have type arguments');
   }
 
@@ -1059,12 +1061,12 @@
     }
     var thisTypeArguments = typeArguments.iterator();
     var otherTypeArguments = other.typeArguments.iterator();
-    while (thisTypeArguments.hasNext() && otherTypeArguments.hasNext()) {
+    while (thisTypeArguments.hasNext && otherTypeArguments.hasNext) {
       if (thisTypeArguments.next() != otherTypeArguments.next()) {
         return false;
       }
     }
-    return !thisTypeArguments.hasNext() && !otherTypeArguments.hasNext();
+    return !thisTypeArguments.hasNext && !otherTypeArguments.hasNext;
   }
 }
 
diff --git a/pkg/dartdoc/lib/src/mirrors/util.dart b/pkg/dartdoc/lib/src/mirrors/util.dart
index 760b9d2..755b78f 100644
--- a/pkg/dartdoc/lib/src/mirrors/util.dart
+++ b/pkg/dartdoc/lib/src/mirrors/util.dart
@@ -18,11 +18,11 @@
   }
 
   void operator []=(K key, value) {
-    throw new UnsupportedOperationException('[]= is not supported');
+    throw new UnsupportedError('[]= is not supported');
   }
 
   void clear() {
-    throw new UnsupportedOperationException('clear() is not supported');
+    throw new UnsupportedError('clear() is not supported');
   }
 
   bool containsKey(K key) {
@@ -45,19 +45,19 @@
     return found;
   }
 
-  Collection<K> getKeys() {
+  Collection<K> get keys {
     var keys = <K>[];
     forEach((k,_) => keys.add(k));
     return keys;
   }
 
-  Collection<V> getValues() {
+  Collection<V> get values {
     var values = <V>[];
     forEach((_,v) => values.add(v));
     return values;
   }
 
-  bool isEmpty() => length == 0;
+  bool get isEmpty => length == 0;
   V putIfAbsent(K key, V ifAbsent()) {
     if (!containsKey(key)) {
       V value = this[key];
@@ -68,13 +68,13 @@
   }
 
   V remove(K key) {
-    throw new UnsupportedOperationException('V remove(K key) is not supported');
+    throw new UnsupportedError('V remove(K key) is not supported');
   }
 }
 
 /**
  * [ImmutableMapWrapper] wraps a (mutable) map as an immutable map where all
- * mutating operations throw [UnsupportedOperationException] upon invocation.
+ * mutating operations throw [UnsupportedError] upon invocation.
  */
 class ImmutableMapWrapper<K,V> extends AbstractMap<K,V> {
   final Map<K,V> _map;
diff --git a/pkg/fixnum/int32.dart b/pkg/fixnum/int32.dart
index 3787dc8..295a340 100644
--- a/pkg/fixnum/int32.dart
+++ b/pkg/fixnum/int32.dart
@@ -321,14 +321,14 @@
     return _i >= _convert(other);
   }
 
-  bool isEven() => (_i & 0x1) == 0;
-  bool isMaxValue() => _i == 2147483647;
-  bool isMinValue() => _i == -2147483648;
-  bool isNegative() => _i < 0;
-  bool isOdd() => (_i & 0x1) == 1;
-  bool isZero() => _i == 0;
+  bool get isEven => (_i & 0x1) == 0;
+  bool get isMaxValue => _i == 2147483647;
+  bool get isMinValue => _i == -2147483648;
+  bool get isNegative => _i < 0;
+  bool get isOdd => (_i & 0x1) == 1;
+  bool get isZero => _i == 0;
 
-  int hashCode() => _i;
+  int get hashCode => _i;
 
   int32 abs() => _i < 0 ? new int32.fromInt(-_i) : this;
 
diff --git a/pkg/fixnum/int64.dart b/pkg/fixnum/int64.dart
index c617413..8509e72 100644
--- a/pkg/fixnum/int64.dart
+++ b/pkg/fixnum/int64.dart
@@ -366,10 +366,10 @@
   }
 
   int64 operator %(other) {
-    if (other.isZero()) {
+    if (other.isZero) {
       throw new IntegerDivisionByZeroException();
     }
-    if (this.isZero()) {
+    if (this.isZero) {
       return ZERO;
     }
     int64 o = _promote(other).abs();
@@ -381,7 +381,7 @@
 
   // int64 remainder(other) => this - (this ~/ other) * other;
   int64 remainder(other) {
-    if (other.isZero()) {
+    if (other.isZero) {
       throw new IntegerDivisionByZeroException();
     }
     int64 o = _promote(other).abs();
@@ -561,17 +561,17 @@
     return this.compareTo(other) >= 0;
   }
 
-  bool isEven() => (_l & 0x1) == 0;
-  bool isMaxValue() => (_h == _MASK_2 >> 1) && _m == _MASK && _l == _MASK;
-  bool isMinValue() => _h == _SIGN_BIT_VALUE && _m == 0 && _l == 0;
-  bool isNegative() => (_h >> (_BITS2 - 1)) != 0;
-  bool isOdd() => (_l & 0x1) == 1;
-  bool isZero() => _h == 0 && _m == 0 && _l == 0;
+  bool get isEven => (_l & 0x1) == 0;
+  bool get isMaxValue => (_h == _MASK_2 >> 1) && _m == _MASK && _l == _MASK;
+  bool get isMinValue => _h == _SIGN_BIT_VALUE && _m == 0 && _l == 0;
+  bool get isNegative => (_h >> (_BITS2 - 1)) != 0;
+  bool get isOdd => (_l & 0x1) == 1;
+  bool get isZero => _h == 0 && _m == 0 && _l == 0;
 
   /**
    * Returns a hash code based on all the bits of this [int64].
    */
-  int hashCode() {
+  int get hashCode {
     int bottom = ((_m & 0x3ff) << _BITS) | _l;
     int top = (_h << 12) | ((_m >> 10) & 0xfff);
     return bottom ^ top;
@@ -674,22 +674,22 @@
   // TODO(rice) - Make this faster by converting several digits at once.
   String toString() {
     int64 a = this;
-    if (a.isZero()) {
+    if (a.isZero) {
       return "0";
     }
-    if (a.isMinValue()) {
+    if (a.isMinValue) {
       return "-9223372036854775808";
     }
 
     String result = "";
     bool negative = false;
-    if (a.isNegative()) {
+    if (a.isNegative) {
       negative = true;
       a = -a;
     }
 
     int64 ten = new int64._bits(10, 0, 0);
-    while (!a.isZero()) {
+    while (!a.isZero) {
       a = _divMod(a, ten, true);
       result = "${_remainder._l}$result";
     }
@@ -702,12 +702,12 @@
   // TODO(rice) - Make this faster by avoiding arithmetic.
   String toHexString() {
     int64 x = new int64._copy(this);
-    if (isZero()) {
+    if (isZero) {
       return "0";
     }
     String hexStr = "";
     int64 digit_f = new int64.fromInt(0xf);
-    while (!x.isZero()) {
+    while (!x.isZero) {
       int digit = x._l & 0xf;
       hexStr = "${_hexDigit(digit)}$hexStr";
       x = x.shiftRightUnsigned(4);
@@ -720,22 +720,22 @@
       throw "Bad radix: $radix";
     }
     int64 a = this;
-    if (a.isZero()) {
+    if (a.isZero) {
       return "0";
     }
-    if (a.isMinValue()) {
+    if (a.isMinValue) {
       return _minValues[radix];
     }
 
     String result = "";
     bool negative = false;
-    if (a.isNegative()) {
+    if (a.isNegative) {
       negative = true;
       a = -a;
     }
 
     int64 r = new int64._bits(radix, 0, 0);
-    while (!a.isZero()) {
+    while (!a.isZero) {
       a = _divMod(a, r, true);
       result = "${_hexDigit(_remainder._l)}$result";
     }
@@ -876,7 +876,7 @@
       bool gte = _trialSubtract(a, bshift);
       if (gte) {
         quotient._setBit(shift);
-        if (a.isZero()) {
+        if (a.isZero) {
           break;
         }
       }
@@ -906,7 +906,7 @@
   int64 _divModByMinValue(bool computeRemainder) {
     // MIN_VALUE / MIN_VALUE == 1, remainder = 0
     // (x != MIN_VALUE) / MIN_VALUE == 0, remainder == x
-    if (isMinValue()) {
+    if (isMinValue) {
       if (computeRemainder) {
         _remainder = ZERO;
       }
@@ -996,23 +996,23 @@
   }
 
   int64 _divMod(int64 a, int64 b, bool computeRemainder) {
-    if (b.isZero()) {
+    if (b.isZero) {
       throw new IntegerDivisionByZeroException();
     }
-    if (a.isZero()) {
+    if (a.isZero) {
       if (computeRemainder) {
         _remainder = ZERO;
       }
       return ZERO;
     }
     // MIN_VALUE / MIN_VALUE = 1, anything other a / MIN_VALUE is 0.
-    if (b.isMinValue()) {
+    if (b.isMinValue) {
       return a._divModByMinValue(computeRemainder);
     }
     // Normalize b to abs(b), keeping track of the parity in 'negative'.
     // We can do this because we have already ensured that b != MIN_VALUE.
     bool negative = false;
-    if (b.isNegative()) {
+    if (b.isNegative) {
       b = -b;
       negative = !negative;
     }
@@ -1042,7 +1042,7 @@
      * modify its value.
      */
     bool aIsCopy = false;
-    if (a.isMinValue()) {
+    if (a.isMinValue) {
       aIsMinValue = true;
       aIsNegative = true;
       // If b is not a power of two, treat -a as MAX_VALUE (instead of the
@@ -1062,7 +1062,7 @@
         }
         return c;
       }
-    } else if (a.isNegative()) {
+    } else if (a.isNegative) {
       aIsNegative = true;
       a = -a;
       aIsCopy = true;
diff --git a/pkg/fixnum/intx.dart b/pkg/fixnum/intx.dart
index 18ad029..a18d849 100644
--- a/pkg/fixnum/intx.dart
+++ b/pkg/fixnum/intx.dart
@@ -39,14 +39,14 @@
   bool operator >=(other);
 
   // Testers.
-  bool isEven();
-  bool isMaxValue();
-  bool isMinValue();
-  bool isNegative();
-  bool isOdd();
-  bool isZero();
+  bool get isEven;
+  bool get isMaxValue;
+  bool get isMinValue;
+  bool get isNegative;
+  bool get isOdd;
+  bool get isZero;
 
-  int hashCode();
+  int get hashCode;
 
   intx abs();
 
diff --git a/pkg/fixnum/test/int_64_test.dart b/pkg/fixnum/test/int_64_test.dart
index a73f2a9..a843c89 100644
--- a/pkg/fixnum/test/int_64_test.dart
+++ b/pkg/fixnum/test/int_64_test.dart
@@ -267,7 +267,7 @@
 void testFactorial() {
 
   int64 _fact(int64 n) {
-    if (n.isZero()) {
+    if (n.isZero) {
       return new int64.fromInt(1);
     } else {
       return n * _fact(n - new int64.fromInt(1));
diff --git a/pkg/intl/lib/bidi_utils.dart b/pkg/intl/lib/bidi_utils.dart
index 778f278..e456c32 100644
--- a/pkg/intl/lib/bidi_utils.dart
+++ b/pkg/intl/lib/bidi_utils.dart
@@ -243,8 +243,8 @@
       Match match = const RegExp('<\\w+').firstMatch(html);
       if (match != null) {
         buffer.add(html.substring(
-            startIndex, match.end())).add(' dir=$direction');
-        startIndex = match.end();
+            startIndex, match.end)).add(' dir=$direction');
+        startIndex = match.end;
       }
       return buffer.add(html.substring(startIndex)).toString();
     }
@@ -296,9 +296,9 @@
     var startIndex = 0;
     Iterable matches = regexp.allMatches(str);
     for (Match match in matches) {
-      buffer.add(str.substring(startIndex, match.start())).add(before);
-      buffer.add(str.substring(match.start(), match.end())).add(after);
-      startIndex = match.end();
+      buffer.add(str.substring(startIndex, match.start)).add(before);
+      buffer.add(str.substring(match.start, match.end)).add(after);
+      startIndex = match.end;
     }
     return buffer.add(str.substring(startIndex)).toString();
   }
diff --git a/pkg/intl/lib/date_format.dart b/pkg/intl/lib/date_format.dart
index d172c85..f387f06 100644
--- a/pkg/intl/lib/date_format.dart
+++ b/pkg/intl/lib/date_format.dart
@@ -249,7 +249,7 @@
    * Returns a list of all locales for which we have date formatting
    * information.
    */
-  static List<String> allLocalesWithSymbols() => dateTimeSymbols.getKeys();
+  static List<String> allLocalesWithSymbols() => dateTimeSymbols.keys;
 
   /**
    * The named constructors for this class are all conveniences for creating
@@ -533,7 +533,7 @@
 
   /** Recursive helper for parsing the template pattern. */
   List _parsePatternHelper(String pattern) {
-    if (pattern.isEmpty()) return [];
+    if (pattern.isEmpty) return [];
 
     var matched = _match(pattern);
     if (matched == null) return [];
diff --git a/pkg/intl/lib/intl.dart b/pkg/intl/lib/intl.dart
index e2e00dd..3b6c5b8 100644
--- a/pkg/intl/lib/intl.dart
+++ b/pkg/intl/lib/intl.dart
@@ -193,8 +193,10 @@
   }
 
   /**
-   * Return a locale name turned into xx_YY where it might possibly be
-   * in the wrong case or with a hyphen instead of an underscore.
+   * Return the name [aLocale] turned into xx_YY where it might possibly be
+   * in the wrong case or with a hyphen instead of an underscore. If
+   * [aLocale] is null, for example, if you tried to get it from IE,
+   * return the current system locale.
    */
   static String canonicalizedLocale(String aLocale) {
     // Locales of length < 5 are presumably two-letter forms, or else malformed.
@@ -203,6 +205,7 @@
     // We treat C as a special case, and assume it wants en_ISO for formatting.
     // TODO(alanknight): en_ISO is probably not quite right for the C/Posix
     // locale for formatting. Consider adding C to the formats database.
+    if (aLocale == null) return systemLocale;
     if (aLocale == "C") return "en_ISO";
     if ((aLocale.length < 5) || (aLocale.length > 6)) return aLocale;
     if (aLocale[2] != '-' && (aLocale[2] != '_')) return aLocale;
diff --git a/pkg/intl/lib/number_format.dart b/pkg/intl/lib/number_format.dart
index d77490b..00373d2 100644
--- a/pkg/intl/lib/number_format.dart
+++ b/pkg/intl/lib/number_format.dart
@@ -90,8 +90,8 @@
   String format(num number) {
     // TODO(alanknight): Do we have to do anything for printing numbers bidi?
     // Or are they always printed left to right?
-    if (number.isNaN()) return symbols.NAN;
-    if (number.isInfinite()) return "${_signPrefix(number)}${symbols.INFINITY}";
+    if (number.isNaN) return symbols.NAN;
+    if (number.isInfinite) return "${_signPrefix(number)}${symbols.INFINITY}";
 
     _newBuffer();
     _add(_signPrefix(number));
@@ -169,7 +169,7 @@
       paddingDigits.add(symbols.ZERO_DIGIT);
       intValue = intValue ~/ 10;
     }
-    var integerDigits = "${intValue}${paddingDigits}".charCodes();
+    var integerDigits = "${intValue}${paddingDigits}".charCodes;
     var digitLength = integerDigits.length;
 
     if (_hasPrintableIntegerPart(intValue)) {
@@ -191,7 +191,7 @@
    * Format the part after the decimal place in a fixed point number.
    */
   void _formatFractionPart(String fractionPart) {
-    var fractionCodes = fractionPart.charCodes();
+    var fractionCodes = fractionPart.charCodes;
     var fractionLength = fractionPart.length;
     while (fractionPart[fractionLength - 1] == '0' &&
            fractionLength > _minimumFractionDigits + 1) {
@@ -237,7 +237,7 @@
     for (var i = 0; i < numberOfDigits - basic.length; i++) {
       _add(symbols.ZERO_DIGIT);
     }
-    for (var x in basic.charCodes()) {
+    for (var x in basic.charCodes) {
       _addDigit(x);
     }
   }
@@ -258,7 +258,7 @@
   }
 
   /** Returns the code point for the character '0'. */
-  int get _zero => '0'.charCodes()[0];
+  int get _zero => '0'.charCodes[0];
 
   /** Returns the code point for the locale's zero digit. */
   int get _localeZero => symbols.ZERO_DIGIT.charCodeAt(0);
@@ -268,7 +268,7 @@
    * In en_US this would be '' and '-' respectively.
    */
   String _signPrefix(num x) {
-    return x.isNegative() ? _negativePrefix : _positivePrefix;
+    return x.isNegative ? _negativePrefix : _positivePrefix;
   }
 
   /**
@@ -276,6 +276,6 @@
    * In en_US there are no suffixes for positive or negative.
    */
   String _signSuffix(num x) {
-    return x.isNegative() ? _negativeSuffix : _positiveSuffix;
+    return x.isNegative ? _negativeSuffix : _positiveSuffix;
   }
 }
diff --git a/pkg/intl/lib/src/date_format_field.dart b/pkg/intl/lib/src/date_format_field.dart
index 364d141..489e4f8 100644
--- a/pkg/intl/lib/src/date_format_field.dart
+++ b/pkg/intl/lib/src/date_format_field.dart
@@ -219,10 +219,10 @@
    int parseEnumeratedString(_Stream input, List possibilities) {
      var results = new _Stream(possibilities).findIndexes(
        (each) => input.peek(each.length) == each);
-     if (results.isEmpty()) throwFormatException(input);
+     if (results.isEmpty) throwFormatException(input);
      results.sort(
        (a, b) => possibilities[a].length.compareTo(possibilities[b].length));
-     var longestResult = results.last();
+     var longestResult = results.last;
      input.read(possibilities[longestResult].length);
      return longestResult;
      }
diff --git a/pkg/intl/lib/src/date_format_helpers.dart b/pkg/intl/lib/src/date_format_helpers.dart
index 0cd04de..3478d0b 100644
--- a/pkg/intl/lib/src/date_format_helpers.dart
+++ b/pkg/intl/lib/src/date_format_helpers.dart
@@ -133,7 +133,7 @@
   var digitMatcher = const RegExp(r'\d+');
   int nextInteger() {
     var string = digitMatcher.stringMatch(rest());
-    if (string == null || string.isEmpty()) return null;
+    if (string == null || string.isEmpty) return null;
     read(string.length);
     return int.parse(string);
   }
diff --git a/pkg/intl/lib/src/intl_helpers.dart b/pkg/intl/lib/src/intl_helpers.dart
index 9d6df5a..95facfd 100644
--- a/pkg/intl/lib/src/intl_helpers.dart
+++ b/pkg/intl/lib/src/intl_helpers.dart
@@ -20,7 +20,7 @@
   operator [](String key) {
     _throwException();
   }
-  List getKeys() => _throwException();
+  List get keys => _throwException();
   bool containsKey(String key) => _throwException();
 
   _throwException() {
diff --git a/pkg/intl/lib/src/lazy_locale_data.dart b/pkg/intl/lib/src/lazy_locale_data.dart
index 6e515c2..6a42025 100644
--- a/pkg/intl/lib/src/lazy_locale_data.dart
+++ b/pkg/intl/lib/src/lazy_locale_data.dart
@@ -64,7 +64,7 @@
   bool containsKey(String locale) => availableLocaleSet.contains(locale);
 
   /** Returns the list of keys/locale names. */
-  List getKeys() => availableLocales;
+  List get keys => availableLocales;
 
   /**
    * Returns the data stored for [localeName]. If no data has been loaded
diff --git a/pkg/intl/test/date_time_format_test_core.dart b/pkg/intl/test/date_time_format_test_core.dart
index 3920d39..36d35b9 100644
--- a/pkg/intl/test/date_time_format_test_core.dart
+++ b/pkg/intl/test/date_time_format_test_core.dart
@@ -177,7 +177,7 @@
  */
 List oddLocales() {
   int i = 1;
-  return allLocales().filter((x) => (i++).isOdd());
+  return allLocales().filter((x) => (i++).isOdd);
 }
 
 /**
@@ -193,7 +193,7 @@
  */
 List evenLocales() {
   int i = 1;
-  return allLocales().filter((x) => !((i++).isOdd()));
+  return allLocales().filter((x) => !((i++).isOdd));
 }
 
 // TODO(alanknight): Run specific tests for the en_ISO locale which isn't
@@ -251,7 +251,7 @@
   });
 
   test('Patterns and symbols have the same coverage',() {
-    var patterns = new List.from(dateTimePatterns.getKeys());
+    var patterns = new List.from(dateTimePatterns.keys);
     var compare = (a, b) => a.compareTo(b);
     patterns.sort(compare);
     var symbols = allLocales();
diff --git a/pkg/intl/test/number_format_test.dart b/pkg/intl/test/number_format_test.dart
index 48f4ab3..2504ae9 100644
--- a/pkg/intl/test/number_format_test.dart
+++ b/pkg/intl/test/number_format_test.dart
@@ -41,7 +41,7 @@
 
   test('Simple set of numbers', () {
     var number = new NumberFormat();
-    for (var x in testNumbers.getKeys()) {
+    for (var x in testNumbers.keys) {
       var formatted = number.format(testNumbers[x]);
       expect(formatted, x);
     }
diff --git a/pkg/intl/tool/generate_locale_data_files.dart b/pkg/intl/tool/generate_locale_data_files.dart
index 12d3f6c..6cec6ac 100644
--- a/pkg/intl/tool/generate_locale_data_files.dart
+++ b/pkg/intl/tool/generate_locale_data_files.dart
@@ -40,7 +40,7 @@
   List<String> allLocales = DateFormat.allLocalesWithSymbols();
   allLocales.forEach((locale) {
     outputStream.writeString('"$locale"');
-    if (locale == allLocales.last()) {
+    if (locale == allLocales.last) {
       outputStream.writeString('];');
     } else {
       outputStream.writeString(',\n    ');
diff --git a/pkg/logging/lib/logging.dart b/pkg/logging/lib/logging.dart
index 9a0ae91..b423e20 100644
--- a/pkg/logging/lib/logging.dart
+++ b/pkg/logging/lib/logging.dart
@@ -91,12 +91,12 @@
   }
 
   /** Override the level for this particular [Logger] and its children. */
-  Level set level(value) {
+  set level(value) {
     if (hierarchicalLoggingEnabled && parent != null) {
       _level = value;
     } else {
       if (parent != null) {
-        throw new UnsupportedOperationException(
+        throw new UnsupportedError(
             'Please set "hierarchicalLoggingEnabled" to true if you want to '
             'change the level on a non-root logger.');
       }
@@ -296,7 +296,7 @@
   bool operator >(Level other) => value > other.value;
   bool operator >=(Level other) => value >= other.value;
   int compareTo(Level other) => value - other.value;
-  int hashCode() => value;
+  int get hashCode => value;
   String toString() => name;
 }
 
diff --git a/pkg/pkg.status b/pkg/pkg.status
index d1ebf16..9c6ef9a 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -12,27 +12,25 @@
 [$compiler == dart2dart]
 *: Skip
 
-[ $runtime == opera ]
-*: Skip
-
 # Skip tests that use local file access if we're running in any browser
-[ $runtime == opera || $runtime == ff || $runtime == ie || $runtime == dartium || $runtime == chrome || $runtime == safari || $runtime == drt ]
+[ $runtime == opera || $runtime == ff || $runtime == ie9 || $runtime == dartium || $runtime == chrome || $runtime == safari || $runtime == drt ]
 intl/test/date_time_format_file_even_test: Skip
 intl/test/date_time_format_file_odd_test: Skip
 intl/test/find_default_locale_standalone_test: Skip
 
+[ $runtime == opera && $compiler == dart2js ]
+intl/test/find_default_locale_browser_test: Fail
+intl/test/date_time_format_http_request_test: Skip # Timeout.
+
 # Skip browser-specific Intl tests on VM
 [ $runtime == vm ]
 intl/test/find_default_locale_browser_test: Skip
 intl/test/date_time_format_http_request_test: Skip
 
-# Skip http request tests on Dartium while resolving an odd
-# error there that causes the tests to timeout.
-[ $runtime == dartium || $runtime == drt ]
-intl/test/date_time_format_http_request_test: Skip
-
-[ $compiler == dart2js && $runtime == ff ]
-intl/test/date_time_format_http_request_test: Skip # Issue 5649
+# Skip http request tests on Dartium while resolving an odd		
+# error there that causes the tests to timeout.	      
+[ $runtime == dartium || $runtime == drt ]		
+intl/test/date_time_format_http_request_test: Skip	      
 
 # Skip intl_message tests that use mirrors on dart2js until it's been
 # implemented there.
@@ -43,7 +41,6 @@
 [ $compiler == dartc ]
 unittest/test/mock_regexp_negative_test: Fail
 unittest/test/mock_stepwise_negative_test: Fail
-dartdoc/test/dartdoc_test: Fail # http://dartbug.com/6073
 
 [ $compiler == dart2js || $compiler == dartc ]
 unittest/test/instance_test: Skip
diff --git a/pkg/unittest/core_matchers.dart b/pkg/unittest/core_matchers.dart
index 9d9d172..a84db59 100644
--- a/pkg/unittest/core_matchers.dart
+++ b/pkg/unittest/core_matchers.dart
@@ -12,7 +12,7 @@
   const _Empty();
   bool matches(item, MatchState matchState) {
     if (item is Map || item is Collection) {
-      return item.isEmpty();
+      return item.isEmpty;
     } else if (item is String) {
       return item.length == 0;
     } else {
@@ -102,8 +102,8 @@
     var position = 0;
     String reason = null;
     while (reason == null) {
-      if (expectedIterator.hasNext()) {
-        if (actualIterator.hasNext()) {
+      if (expectedIterator.hasNext) {
+        if (actualIterator.hasNext) {
           Description r = matcher(expectedIterator.next(),
                            actualIterator.next(),
                            'mismatch at position ${position}',
@@ -113,7 +113,7 @@
         } else {
           reason = 'shorter than expected';
         }
-      } else if (actualIterator.hasNext()) {
+      } else if (actualIterator.hasNext) {
         reason = 'longer than expected';
       } else {
         return null;
@@ -141,7 +141,7 @@
         } else if (expected.length != actual.length) {
           reason = new StringDescription('different map lengths');
         } else {
-          for (var key in expected.getKeys()) {
+          for (var key in expected.keys) {
             if (!actual.containsKey(key)) {
               reason = new StringDescription('missing map key ');
               reason.addDescriptionOf(key);
@@ -495,18 +495,18 @@
   bool matches(item, MatchState matchState) => item is NullPointerException;
 }
 
-/** A matcher for UnsupportedOperationExceptions. */
-const isUnsupportedOperationException = const _UnsupportedOperationException();
+/** A matcher for UnsupportedErrors. */
+const isUnsupportedError = const _UnsupportedError();
 
-/** A matcher for functions that throw UnsupportedOperationException */
-const Matcher throwsUnsupportedOperationException =
-    const Throws(isUnsupportedOperationException);
+/** A matcher for functions that throw UnsupportedError */
+const Matcher throwsUnsupportedError =
+    const Throws(isUnsupportedError);
 
-class _UnsupportedOperationException extends ExceptionMatcher {
-  const _UnsupportedOperationException() :
-      super("UnsupportedOperationException");
+class _UnsupportedError extends ExceptionMatcher {
+  const _UnsupportedError() :
+      super("UnsupportedError");
   bool matches(item, MatchState matchState) =>
-      item is UnsupportedOperationException;
+      item is UnsupportedError;
 }
 
 /**
@@ -625,3 +625,54 @@
   Description describe(Description description) =>
       description.add(_description);
 }
+
+/**
+ * A useful utility class for implementing other matchers through inheritance.
+ * Derived classes should call the base constructor with a feature name and
+ * description, and an instance matcher, and should implement the
+ * [featureValueOf] abstract method.
+ *
+ * The feature description will typically describe the item and the feature,
+ * while the feature name will just name the feature. For example, we may
+ * have a Widget class where each Widget has a price; we could make a
+ * FeatureMatcher that can make assertions about prices with:
+ *
+ *     class HasPrice extends FeatureMatcher {
+ *       const HasPrice(matcher) :
+ *           super("Widget with price that is", "price", matcher);
+ *       featureValueOf(actual) => actual.price;
+ *     }
+ *
+ * and then use this for example like:
+ *
+ *      expect(inventoryItem, new HasPrice(greaterThan(0)));
+ */
+abstract class CustomMatcher extends BaseMatcher {
+  final String _featureDescription;
+  final String _featureName;
+  final Matcher _matcher;
+
+  const CustomMatcher(this._featureDescription, this._featureName,
+      this._matcher);
+
+  /** Implement this to extract the interesting feature.*/
+  featureValueOf(actual);
+
+  bool matches(item, MatchState matchState) {
+    var f = featureValueOf(item);
+    if (_matcher.matches(f, matchState)) return true;
+    matchState.state = { 'innerState': matchState.state, 'feature': f };
+    return false;
+  }
+
+  Description describe(Description description) =>
+      description.add(_featureDescription).add(' ').addDescriptionOf(_matcher);
+
+  Description describeMismatch(item, Description mismatchDescription,
+                               MatchState matchState, bool verbose) {
+    mismatchDescription.add(_featureName).add(' ');
+    _matcher.describeMismatch(matchState.state['feature'], mismatchDescription,
+        matchState.state['innerState'], verbose);
+    return mismatchDescription;
+  }
+}
diff --git a/pkg/unittest/html_enhanced_config.dart b/pkg/unittest/html_enhanced_config.dart
index 00330d8..af88f4b 100644
--- a/pkg/unittest/html_enhanced_config.dart
+++ b/pkg/unittest/html_enhanced_config.dart
@@ -153,7 +153,7 @@
       List<TestCase> flattened = new List<TestCase>();
 
       groupedBy
-        .getValues()
+        .values
         .forEach((tList){
           tList.sort((tcA, tcB) => tcA.id - tcB.id);
           flattened.addAll(tList);
diff --git a/pkg/unittest/mock.dart b/pkg/unittest/mock.dart
index ded68f3..dd2ae53 100644
--- a/pkg/unittest/mock.dart
+++ b/pkg/unittest/mock.dart
@@ -370,7 +370,7 @@
   get first => (logs == null || logs.length == 0) ? null : logs[0];
 
   /** Get the last entry, or null if no entries. */
-  get last => (logs == null || logs.length == 0) ? null : logs.last();
+  get last => (logs == null || logs.length == 0) ? null : logs.last;
 
   /** Creates a LogEntry predicate function from the argument. */
   Function _makePredicate(arg) {
@@ -781,7 +781,7 @@
         if (includeKeys) {
           rtn.logs.add(keyEntry);
         }
-        if (keyIterator.hasNext()) {
+        if (keyIterator.hasNext) {
           keyEntry = keyIterator.next();
         } else if (isPreceding) { // We're done.
           break;
@@ -1280,7 +1280,7 @@
     }
     bool matchedMethodName = false;
     MatchState matchState = new MatchState();
-    for (String k in _behaviors.getKeys()) {
+    for (String k in _behaviors.keys) {
       Behavior b = _behaviors[k];
       if (b.matcher.nameFilter.matches(method, matchState)) {
         matchedMethodName = true;
diff --git a/pkg/unittest/test/matchers_test.dart b/pkg/unittest/test/matchers_test.dart
index 11bdcc2..9736c75 100644
--- a/pkg/unittest/test/matchers_test.dart
+++ b/pkg/unittest/test/matchers_test.dart
@@ -23,6 +23,16 @@
         add(' ignoring whitespace');
 }
 
+class Widget {
+  int price;
+}
+
+class HasPrice extends CustomMatcher {
+  const HasPrice(matcher) :
+    super("Widget with a price that is", "price", matcher);
+  featureValueOf(actual) => actual.price;
+}
+
 void main() {
 
   initUtils();
@@ -155,15 +165,15 @@
             "NullPointerException.");
     });
 
-    test('throwsUnsupportedOperationException', () {
-      shouldPass(() { throw new UnsupportedOperationException(''); },
-          throwsUnsupportedOperationException);
+    test('throwsUnsupportedError', () {
+      shouldPass(() { throw new UnsupportedError(''); },
+          throwsUnsupportedError);
       shouldFail(() { throw new Exception(); },
-          throwsUnsupportedOperationException,
+          throwsUnsupportedError,
         "Expected: throws an exception which matches "
-            "UnsupportedOperationException "
+            "UnsupportedError "
         "but:  exception <Exception> does not match "
-            "UnsupportedOperationException.");
+            "UnsupportedError.");
     });
 
     test('returnsNormally', () {
@@ -524,5 +534,16 @@
                                   description: "an instance of String"));
     });
   });
+
+  group('Feature Matchers', () {
+    test("Feature Matcher", () {
+      var w = new Widget();
+      w.price = 10;
+      shouldPass(w, new HasPrice(greaterThan(0)));
+      shouldFail(w, new HasPrice(greaterThan(10)),
+          'Expected: Widget with a price that is a value greater than <10> '
+          'but: price was <10>.');
+    });
+  });
 }
 
diff --git a/runtime/bin/buffer_list.dart b/runtime/bin/buffer_list.dart
index fd58ee2..0dab719 100644
--- a/runtime/bin/buffer_list.dart
+++ b/runtime/bin/buffer_list.dart
@@ -17,7 +17,7 @@
    * buffer list is empty.
    */
   void add(List<int> buffer, [int offset = 0]) {
-    assert(offset == 0 || _buffers.isEmpty());
+    assert(offset == 0 || _buffers.isEmpty);
     _buffers.addLast(buffer);
     _length += buffer.length;
     if (offset != 0) _index = offset;
@@ -28,7 +28,7 @@
    * buffer and does not remove the buffer from the list. Use
    * [index] to determine the index of the first byte in the buffer.
    */
-  List<int> get first => _buffers.first();
+  List<int> get first => _buffers.first;
 
   /**
    * Returns the current index of the next byte. This will always be
@@ -40,15 +40,15 @@
   /**
    * Peek at the next available byte.
    */
-  int peek() => _buffers.first()[_index];
+  int peek() => _buffers.first[_index];
 
   /**
    * Returns the next available byte removing it from the buffers.
    */
   int next() {
-    int value = _buffers.first()[_index++];
+    int value = _buffers.first[_index++];
     _length--;
-    if (_index == _buffers.first().length) {
+    if (_index == _buffers.first.length) {
       _buffers.removeFirst();
       _index = 0;
     }
@@ -62,19 +62,19 @@
   List<int> readBytes(int count) {
     List<int> result;
     if (_length == 0 || _length < count) return null;
-    if (_index == 0 && _buffers.first().length == count) {
-      result = _buffers.first();
+    if (_index == 0 && _buffers.first.length == count) {
+      result = _buffers.first;
       _buffers.removeFirst();
       _index = 0;
       _length -= count;
       return result;
     } else {
-      int firstRemaining = _buffers.first().length - _index;
+      int firstRemaining = _buffers.first.length - _index;
       if (firstRemaining >= count) {
-        result = _buffers.first().getRange(_index, count);
+        result = _buffers.first.getRange(_index, count);
         _index += count;
         _length -= count;
-        if (_index == _buffers.first().length) {
+        if (_index == _buffers.first.length) {
           _buffers.removeFirst();
           _index = 0;
         }
@@ -83,11 +83,11 @@
         result = new Uint8List(count);
         int remaining = count;
         while (remaining > 0) {
-          int bytesInFirst = _buffers.first().length - _index;
+          int bytesInFirst = _buffers.first.length - _index;
           if (bytesInFirst <= remaining) {
             result.setRange(count - remaining,
                             bytesInFirst,
-                            _buffers.first(),
+                            _buffers.first,
                             _index);
             _buffers.removeFirst();
             _index = 0;
@@ -96,12 +96,12 @@
           } else {
             result.setRange(count - remaining,
                             remaining,
-                            _buffers.first(),
+                            _buffers.first,
                             _index);
             _index = remaining;
             _length -= remaining;
             remaining = 0;
-            assert(_index < _buffers.first().length);
+            assert(_index < _buffers.first.length);
           }
         }
         return result;
@@ -135,7 +135,7 @@
    * Returns whether the buffer list is empty that is has no bytes
    * available.
    */
-  bool isEmpty() => _buffers.isEmpty();
+  bool get isEmpty => _buffers.isEmpty;
 
   /**
    * Clears the content of the buffer list.
diff --git a/runtime/bin/builtin_impl_sources.gypi b/runtime/bin/builtin_impl_sources.gypi
index 894cb73..297d4b0 100644
--- a/runtime/bin/builtin_impl_sources.gypi
+++ b/runtime/bin/builtin_impl_sources.gypi
@@ -7,6 +7,11 @@
 {
   'sources': [
     'common.cc',
+    'crypto.cc',
+    'crypto_android.cc',
+    'crypto_linux.cc',
+    'crypto_macos.cc',
+    'crypto_win.cc',
     'dartutils.cc',
     'dartutils.h',
     'dbg_connection.cc',
diff --git a/runtime/bin/builtin_natives.cc b/runtime/bin/builtin_natives.cc
index c6c7300..045f800 100644
--- a/runtime/bin/builtin_natives.cc
+++ b/runtime/bin/builtin_natives.cc
@@ -16,6 +16,7 @@
 // to inject additional functionality e.g: Logger, file I/O, socket I/O etc.
 #define BUILTIN_NATIVE_LIST(V)                                                 \
   V(Common_IsBuiltinList, 1)                                                   \
+  V(Crypto_GetRandomBytes, 1)                                                  \
   V(Directory_Exists, 1)                                                       \
   V(Directory_Create, 1)                                                       \
   V(Directory_Current, 0)                                                      \
diff --git a/runtime/bin/common.dart b/runtime/bin/common.dart
index 7f2da97..33ce2a5 100644
--- a/runtime/bin/common.dart
+++ b/runtime/bin/common.dart
@@ -27,7 +27,7 @@
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.add("OS Error");
-    if (!message.isEmpty()) {
+    if (!message.isEmpty) {
       sb.add(": ");
       sb.add(message);
       if (errorCode != noErrorCode) {
diff --git a/runtime/bin/crypto.cc b/runtime/bin/crypto.cc
new file mode 100644
index 0000000..97984a2
--- /dev/null
+++ b/runtime/bin/crypto.cc
@@ -0,0 +1,36 @@
+// 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.
+
+#include "bin/crypto.h"
+#include "bin/dartutils.h"
+
+#include "include/dart_api.h"
+
+
+void FUNCTION_NAME(Crypto_GetRandomBytes)(Dart_NativeArguments args) {
+  Dart_EnterScope();
+  Dart_Handle count_obj = Dart_GetNativeArgument(args, 0);
+  int64_t count = 0;
+  if (!DartUtils::GetInt64Value(count_obj, &count)) {
+    Dart_Handle error = Dart_NewString("Invalid argument, must be an int.");
+    Dart_ThrowException(error);
+  }
+  uint8_t* buffer = new uint8_t[count];
+  ASSERT(buffer != NULL);
+  if (!Crypto::GetRandomBytes(count, buffer)) {
+    delete[] buffer;
+    Dart_ThrowException(DartUtils::NewDartOSError());
+  }
+  Dart_Handle result = Dart_NewByteArray(count);
+  if (Dart_IsError(result)) {
+    delete[] buffer;
+    Dart_Handle error = Dart_NewString("Failed to allocate storage.");
+    Dart_ThrowException(error);
+  }
+  Dart_ListSetAsBytes(result, 0, buffer, count);
+  Dart_SetReturnValue(args, result);
+  delete[] buffer;
+  Dart_ExitScope();
+}
+
diff --git a/runtime/bin/crypto.h b/runtime/bin/crypto.h
new file mode 100644
index 0000000..b155972
--- /dev/null
+++ b/runtime/bin/crypto.h
@@ -0,0 +1,22 @@
+// 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.
+
+#ifndef BIN_CRYPTO_H_
+#define BIN_CRYPTO_H_
+
+#include "bin/builtin.h"
+#include "bin/utils.h"
+
+
+class Crypto {
+ public:
+  static bool GetRandomBytes(intptr_t count, uint8_t* buffer);
+
+ private:
+  DISALLOW_ALLOCATION();
+  DISALLOW_IMPLICIT_CONSTRUCTORS(Crypto);
+};
+
+#endif  // BIN_CRYPTO_H_
+
diff --git a/runtime/bin/crypto_android.cc b/runtime/bin/crypto_android.cc
new file mode 100644
index 0000000..08f6dac
--- /dev/null
+++ b/runtime/bin/crypto_android.cc
@@ -0,0 +1,18 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include <errno.h>
+#include <fcntl.h>
+
+#include "bin/fdutils.h"
+#include "bin/crypto.h"
+
+
+bool Crypto::GetRandomBytes(intptr_t count, uint8_t* buffer) {
+  intptr_t fd = TEMP_FAILURE_RETRY(open("/dev/urandom", O_RDONLY));
+  if (fd < 0) return false;
+  intptr_t bytes_read = read(fd, buffer, count);
+  close(fd);
+  return bytes_read == count;
+}
diff --git a/runtime/bin/crypto_linux.cc b/runtime/bin/crypto_linux.cc
new file mode 100644
index 0000000..08f6dac
--- /dev/null
+++ b/runtime/bin/crypto_linux.cc
@@ -0,0 +1,18 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include <errno.h>
+#include <fcntl.h>
+
+#include "bin/fdutils.h"
+#include "bin/crypto.h"
+
+
+bool Crypto::GetRandomBytes(intptr_t count, uint8_t* buffer) {
+  intptr_t fd = TEMP_FAILURE_RETRY(open("/dev/urandom", O_RDONLY));
+  if (fd < 0) return false;
+  intptr_t bytes_read = read(fd, buffer, count);
+  close(fd);
+  return bytes_read == count;
+}
diff --git a/runtime/bin/crypto_macos.cc b/runtime/bin/crypto_macos.cc
new file mode 100644
index 0000000..08f6dac
--- /dev/null
+++ b/runtime/bin/crypto_macos.cc
@@ -0,0 +1,18 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include <errno.h>
+#include <fcntl.h>
+
+#include "bin/fdutils.h"
+#include "bin/crypto.h"
+
+
+bool Crypto::GetRandomBytes(intptr_t count, uint8_t* buffer) {
+  intptr_t fd = TEMP_FAILURE_RETRY(open("/dev/urandom", O_RDONLY));
+  if (fd < 0) return false;
+  intptr_t bytes_read = read(fd, buffer, count);
+  close(fd);
+  return bytes_read == count;
+}
diff --git a/runtime/bin/crypto_win.cc b/runtime/bin/crypto_win.cc
new file mode 100644
index 0000000..640efb2
--- /dev/null
+++ b/runtime/bin/crypto_win.cc
@@ -0,0 +1,22 @@
+// 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.
+
+#define _CRT_RAND_S
+#include "bin/crypto.h"
+
+
+bool Crypto::GetRandomBytes(intptr_t count, uint8_t* buffer) {
+  uint32_t num;
+  intptr_t read = 0;
+  while (read < count) {
+    if (rand_s(&num) != 0) {
+      return false;
+    }
+    for (int i = 0; i < 4 && read < count; i++) {
+      buffer[read] = num >> (i * 8);
+      read++;
+    }
+  }
+  return true;
+}
diff --git a/runtime/bin/directory.dart b/runtime/bin/directory.dart
index d7fab76..740f0cb 100644
--- a/runtime/bin/directory.dart
+++ b/runtime/bin/directory.dart
@@ -38,15 +38,18 @@
   bool existsSync();
 
   /**
-   * Creates the directory with this name if it does not
-   * exist. Returns a [:Future<Directory>:] that completes with this
-   * directory once it has been created.
+   * Creates the directory with this name. If the directory already
+   * exists nothing is done. Returns a [:Future<Directory>:] that
+   * completes with this directory once it has been created. If the
+   * directory does not exist and cannot be created the future
+   * completes with an exception.
    */
   Future<Directory> create();
 
   /**
-   * Synchronously creates the directory with this name if it does not exist.
-   * Throws an exception if the directory already exists.
+   * Synchronously creates the directory with this name. If the
+   * directory already exists nothing is done. If the directory does
+   * not exist and cannot be created an exception is thrown.
    */
   void createSync();
 
@@ -179,7 +182,7 @@
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.add("DirectoryIOException");
-    if (!message.isEmpty()) {
+    if (!message.isEmpty) {
       sb.add(": $message");
       if (path != null) {
         sb.add(", path = $path");
diff --git a/runtime/bin/directory_linux.cc b/runtime/bin/directory_linux.cc
index 7adb80f..59977a3 100644
--- a/runtime/bin/directory_linux.cc
+++ b/runtime/bin/directory_linux.cc
@@ -381,6 +381,9 @@
 
 
 bool Directory::Create(const char* dir_name) {
+  // If the directory already exists and is a directory do not
+  // attempt to create it again and treat it as a success.
+  if (Exists(dir_name) == EXISTS) return true;
   // Create the directory with the permissions specified by the
   // process umask.
   return (TEMP_FAILURE_RETRY(mkdir(dir_name, 0777)) == 0);
diff --git a/runtime/bin/directory_macos.cc b/runtime/bin/directory_macos.cc
index 7adb80f..59977a3 100644
--- a/runtime/bin/directory_macos.cc
+++ b/runtime/bin/directory_macos.cc
@@ -381,6 +381,9 @@
 
 
 bool Directory::Create(const char* dir_name) {
+  // If the directory already exists and is a directory do not
+  // attempt to create it again and treat it as a success.
+  if (Exists(dir_name) == EXISTS) return true;
   // Create the directory with the permissions specified by the
   // process umask.
   return (TEMP_FAILURE_RETRY(mkdir(dir_name, 0777)) == 0);
diff --git a/runtime/bin/directory_win.cc b/runtime/bin/directory_win.cc
index 08d502b..436f987 100644
--- a/runtime/bin/directory_win.cc
+++ b/runtime/bin/directory_win.cc
@@ -348,6 +348,9 @@
 
 
 bool Directory::Create(const char* dir_name) {
+  // If the directory already exists and is a directory do not
+  // attempt to create it again and treat it as a success.
+  if (Exists(dir_name) == EXISTS) return true;
   return (CreateDirectory(dir_name, NULL) != 0);
 }
 
diff --git a/runtime/bin/file.dart b/runtime/bin/file.dart
index d32dd7b..43ff45b 100644
--- a/runtime/bin/file.dart
+++ b/runtime/bin/file.dart
@@ -374,7 +374,7 @@
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.add("FileIOException");
-    if (!message.isEmpty()) {
+    if (!message.isEmpty) {
       sb.add(": $message");
       if (osError != null) {
         sb.add(" ($osError)");
diff --git a/runtime/bin/file_win.cc b/runtime/bin/file_win.cc
index cfce708..9076d7a 100644
--- a/runtime/bin/file_win.cc
+++ b/runtime/bin/file_win.cc
@@ -97,9 +97,9 @@
 
 
 File* File::Open(const char* name, FileOpenMode mode) {
-  int flags = O_RDONLY | O_BINARY;
+  int flags = O_RDONLY | O_BINARY | O_NOINHERIT;
   if ((mode & kWrite) != 0) {
-    flags = (O_RDWR | O_CREAT | O_BINARY);
+    flags = (O_RDWR | O_CREAT | O_BINARY | O_NOINHERIT);
   }
   if ((mode & kTruncate) != 0) {
     flags = flags | O_TRUNC;
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index e352a46..6e2e6c7 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -18,6 +18,7 @@
 
 #define CHECK_RESULT(result)                                                   \
   if (Dart_IsError(result)) {                                                  \
+    free(snapshot_buffer);                                                     \
     fprintf(stderr, "Error: %s", Dart_GetError(result));                       \
     Dart_ExitScope();                                                          \
     Dart_ShutdownIsolate();                                                    \
@@ -30,6 +31,7 @@
 static const char* snapshot_filename = NULL;
 static bool script_snapshot = false;
 static const char* package_root = NULL;
+static uint8_t* snapshot_buffer = NULL;
 
 
 // Global state which contains a pointer to the script name for which
@@ -343,7 +345,7 @@
       CHECK_RESULT(result);
 
       // Save the snapshot buffer as we are about to shutdown the isolate.
-      uint8_t* snapshot_buffer = reinterpret_cast<uint8_t*>(malloc(size));
+      snapshot_buffer = reinterpret_cast<uint8_t*>(malloc(size));
       ASSERT(snapshot_buffer != NULL);
       memmove(snapshot_buffer, buffer, size);
 
@@ -360,6 +362,7 @@
       if (isolate == NULL) {
         fprintf(stderr, "%s", error);
         free(error);
+        free(snapshot_buffer);
         exit(255);
       }
       Dart_EnterScope();
diff --git a/runtime/bin/http.dart b/runtime/bin/http.dart
index a3f4931..13b28dc 100644
--- a/runtime/bin/http.dart
+++ b/runtime/bin/http.dart
@@ -111,6 +111,12 @@
    * Sets the error handler that is called when a connection error occurs.
    */
   void set onError(void callback(e));
+
+  /**
+   * Set the timeout, in seconds, for sessions of this HTTP server. Default
+   * is 20 minutes.
+   */
+  int set sessionTimeout(int timeout);
 }
 
 
@@ -386,6 +392,29 @@
   String toString();
 }
 
+abstract class HttpSession {
+  /**
+   * Get the id for the current session.
+   */
+  String get id;
+
+  /**
+   * Access the user-data associated with the session.
+   */
+  Dynamic data;
+
+  /**
+   * Destroy the session. This will terminate the session and any further
+   * connections with this id will be given a new id and session.
+   */
+  void destroy();
+
+  /**
+   * Set a callback that will be called when the session is timed out.
+   */
+  void set onTimeout(void callback());
+}
+
 
 /**
  * Representation of a content type.
@@ -553,11 +582,20 @@
   HttpHeaders get headers;
 
   /**
-   * Returns the cookies in the request (from the Cookie header).
+   * Returns the cookies in the request (from the Cookie headers).
    */
   List<Cookie> get cookies;
 
   /**
+   * Returns, or initialize, a session for the given request. If the session is
+   * being initialized by this call, [init] will be called with the
+   * newly create session. Here the [:HttpSession.data:] field can be set, if
+   * needed.
+   * See [:HttpServer.sessionTimeout:] on how to change default timeout.
+   */
+  HttpSession session([init(HttpSession session)]);
+
+  /**
    * Returns the input stream for the request. This is used to read
    * the request data.
    */
diff --git a/runtime/bin/http_impl.dart b/runtime/bin/http_impl.dart
index c8394a7..68e2f52 100644
--- a/runtime/bin/http_impl.dart
+++ b/runtime/bin/http_impl.dart
@@ -252,7 +252,7 @@
     _headers.forEach((String name, List<String> values) {
       bool fold = _foldHeader(name);
       List<int> data;
-      data = name.charCodes();
+      data = name.charCodes;
       connection._write(data);
       connection._write(COLONSP);
       for (int i = 0; i < values.length; i++) {
@@ -261,12 +261,12 @@
             connection._write(COMMASP);
           } else {
             connection._write(CRLF);
-            data = name.charCodes();
+            data = name.charCodes;
             connection._write(data);
             connection._write(COLONSP);
           }
         }
-        data = values[i].charCodes();
+        data = values[i].charCodes;
         connection._write(data);
       }
       connection._write(CRLF);
@@ -853,6 +853,16 @@
 
   String get protocolVersion => _protocolVersion;
 
+  HttpSession session([init(HttpSession session)]) {
+    if (_session != null) {
+      // It's already mapped, use it.
+      return _session;
+    }
+    // Create session, store it in connection, and return.
+    var sessionManager = _httpConnection._server._sessionManager;
+    return _session = sessionManager.createSession(init);
+  }
+
   void _onRequestStart(String method, String uri, String version) {
     _method = method;
     _uri = uri;
@@ -864,6 +874,22 @@
   }
 
   void _onHeadersComplete() {
+    if (_httpConnection._server._sessionManagerInstance != null) {
+      // Map to session if exists.
+      var sessionId = cookies.reduce(null, (last, cookie) {
+        if (last != null) return last;
+        return cookie.name.toUpperCase() == _DART_SESSION_ID ?
+            cookie.value : null;
+      });
+      if (sessionId != null) {
+        var sessionManager = _httpConnection._server._sessionManager;
+        _session = sessionManager.getSession(sessionId);
+        if (_session != null) {
+          _session._markSeen();
+        }
+      }
+    }
+
     _headers._mutable = false;
     // Prepare for receiving data.
     _buffer = new _BufferList();
@@ -921,6 +947,7 @@
   _BufferList _buffer;
   bool _dataEndCalled = false;
   Function _streamErrorHandler;
+  _HttpSession _session;
 }
 
 
@@ -1083,10 +1110,10 @@
       _httpConnection._write(_Const.HTTP10);
     }
     _writeSP();
-    data = _statusCode.toString().charCodes();
+    data = _statusCode.toString().charCodes;
     _httpConnection._write(data);
     _writeSP();
-    data = reasonPhrase.charCodes();
+    data = reasonPhrase.charCodes;
     _httpConnection._write(data);
     _writeCRLF();
 
@@ -1098,6 +1125,21 @@
       _headers.set(HttpHeaders.TRANSFER_ENCODING, "chunked");
     }
 
+    var session = _httpConnection._request._session;
+    if (session != null && !session._destroyed) {
+      // Make sure we only send the current session id.
+      bool found = false;
+      for (int i = 0; i < cookies.length; i++) {
+        if (cookies[i].name.toUpperCase() == _DART_SESSION_ID) {
+          cookie.value = session.id;
+          found = true;
+          break;
+        }
+      }
+      if (!found) {
+        cookies.add(new Cookie(_DART_SESSION_ID, session.id));
+      }
+    }
     // Add all the cookies set to the headers.
     if (_cookies != null) {
       _cookies.forEach((cookie) {
@@ -1202,8 +1244,8 @@
 
 class _HttpConnectionBase {
   _HttpConnectionBase() : _sendBuffers = new Queue(),
-                          _httpParser = new _HttpParser() {
-    _hashCode = _nextHashCode;
+                          _httpParser = new _HttpParser(),
+                          hashCode = _nextHashCode {
     _nextHashCode = (_nextHashCode + 1) & 0xFFFFFFF;
   }
 
@@ -1307,8 +1349,6 @@
     }
   }
 
-  int hashCode() => _hashCode;
-
   Socket _socket;
   bool _closing = false;  // Is the socket closed by the client?
   bool _error = false;  // Is the socket closed due to an error?
@@ -1319,7 +1359,7 @@
   Function onDetach;
 
   // Hash code for HTTP connection. Currently this is just a counter.
-  int _hashCode;
+  final int hashCode;
   static int _nextHashCode = 0;
 }
 
@@ -1441,7 +1481,6 @@
   Function _handler;
 }
 
-
 // HTTP server waiting for socket connections. The connections are
 // managed by the server and as requests are received the request.
 class _HttpServer implements HttpServer {
@@ -1487,7 +1526,11 @@
   }
 
   void close() {
-    if (_server !== null && _closeServer) {
+    if (_sessionManagerInstance != null) {
+      _sessionManagerInstance.close();
+      _sessionManagerInstance = null;
+    }
+    if (_server != null && _closeServer) {
       _server.close();
     }
     _server = null;
@@ -1508,6 +1551,10 @@
     _onError = callback;
   }
 
+  int set sessionTimeout(int timeout) {
+    _sessionManager.sessionTimeout = timeout;
+  }
+
   void _handleRequest(HttpRequest request, HttpResponse response) {
     for (int i = 0; i < _handlers.length; i++) {
       if (_handlers[i]._matcher(request)) {
@@ -1534,6 +1581,14 @@
     }
   }
 
+  _HttpSessionManager get _sessionManager {
+    // Lazy init.
+    if (_sessionManagerInstance == null) {
+      _sessionManagerInstance = new _HttpSessionManager();
+    }
+    return _sessionManagerInstance;
+  }
+
 
   ServerSocket _server;  // The server listen socket.
   bool _closeServer = false;
@@ -1541,6 +1596,7 @@
   List<_RequestHandlerRegistration> _handlers;
   Object _defaultHandler;
   Function _onError;
+  _HttpSessionManager _sessionManagerInstance;
 }
 
 
@@ -1613,25 +1669,24 @@
     List<int> data;
 
     // Write request line.
-    data = _method.toString().charCodes();
+    data = _method.toString().charCodes;
     _httpConnection._write(data);
     _writeSP();
     // Send the path for direct connections and the whole URL for
     // proxy connections.
     if (!_connection._usingProxy) {
-      String path;
+      String path = _uri.path;
+      if (path.length == 0) path = "/";
       if (_uri.query != "") {
         if (_uri.fragment != "") {
-          path = "${_uri.path}?${_uri.query}#${_uri.fragment}";
+          path = "${path}?${_uri.query}#${_uri.fragment}";
         } else {
-          path = "${_uri.path}?${_uri.query}";
+          path = "${path}?${_uri.query}";
         }
-      } else {
-         path = _uri.path;
       }
-      data = path.charCodes();
+      data = path.charCodes;
     } else {
-      data = _uri.toString().charCodes();
+      data = _uri.toString().charCodes;
     }
     _httpConnection._write(data);
     _writeSP();
@@ -1964,7 +2019,7 @@
 
   Duration _idleTime(Date now) => now.difference(_returnTime);
 
-  int hashCode() => _socket.hashCode();
+  int get hashCode => _socket.hashCode;
 
   String _host;
   int _port;
@@ -1983,7 +2038,7 @@
     List<String> list = configuration.split(";");
     list.forEach((String proxy) {
       proxy = proxy.trim();
-      if (!proxy.isEmpty()) {
+      if (!proxy.isEmpty) {
         if (proxy.startsWith(PROXY_PREFIX)) {
           int colon = proxy.indexOf(":");
           if (colon == -1 || colon == 0 || colon == proxy.length - 1) {
@@ -2045,7 +2100,7 @@
                              Uri uri,
                              [_HttpClientConnection connection]) {
     if (_shutdown) throw new HttpException("HttpClient shutdown");
-    if (method == null || uri.domain.isEmpty() == null) {
+    if (method == null || uri.domain.isEmpty) {
       throw new ArgumentError(null);
     }
     return _prepareHttpClientConnection(method, uri, connection);
@@ -2083,7 +2138,7 @@
 
   void shutdown() {
      _openSockets.forEach((String key, Queue<_SocketConnection> connections) {
-       while (!connections.isEmpty()) {
+       while (!connections.isEmpty) {
          _SocketConnection socketConn = connections.removeFirst();
          socketConn._socket.close();
        }
@@ -2147,7 +2202,7 @@
       // otherwise create a new one.
       String key = _connectionKey(connectHost, connectPort);
       Queue socketConnections = _openSockets[key];
-      if (socketConnections == null || socketConnections.isEmpty()) {
+      if (socketConnections == null || socketConnections.isEmpty) {
         Socket socket = new Socket(connectHost, connectPort);
         // Until the connection is established handle connection errors
         // here as the HttpClientConnection object is not yet associated
@@ -2181,8 +2236,8 @@
                   _connectionOpened(socketConn, connection, !proxy.isDirect));
 
         // Get rid of eviction timer if there are no more active connections.
-        if (socketConnections.isEmpty()) _openSockets.remove(key);
-        if (_openSockets.isEmpty()) _cancelEvictionTimer();
+        if (socketConnections.isEmpty) _openSockets.remove(key);
+        if (_openSockets.isEmpty) _cancelEvictionTimer();
       }
     }
 
@@ -2238,13 +2293,13 @@
             void _(String key, Queue<_SocketConnection> connections) {
               // As returned connections are added at the head of the
               // list remove from the tail.
-              while (!connections.isEmpty()) {
-                _SocketConnection socketConn = connections.last();
+              while (!connections.isEmpty) {
+                _SocketConnection socketConn = connections.last;
                 if (socketConn._idleTime(now).inMilliseconds >
                     DEFAULT_EVICTION_TIMEOUT) {
                   connections.removeLast();
                   socketConn._socket.close();
-                  if (connections.isEmpty()) emptyKeys.add(key);
+                  if (connections.isEmpty) emptyKeys.add(key);
                 } else {
                   break;
                 }
@@ -2255,7 +2310,7 @@
         emptyKeys.forEach((String key) => _openSockets.remove(key));
 
         // If all connections where evicted cancel the eviction timer.
-        if (_openSockets.isEmpty()) _cancelEvictionTimer();
+        if (_openSockets.isEmpty) _cancelEvictionTimer();
       }
       _evictionTimer = new Timer.repeating(10000, _handleEviction);
     }
diff --git a/runtime/bin/http_parser.dart b/runtime/bin/http_parser.dart
index 2224e4b..571ce70 100644
--- a/runtime/bin/http_parser.dart
+++ b/runtime/bin/http_parser.dart
@@ -234,6 +234,9 @@
 
           case _State.REQUEST_LINE_URI:
             if (byte == _CharCode.SP) {
+              if (_uri_or_reason_phrase.length == 0) {
+                throw new HttpParserException("Invalid request URI");
+              }
               _state = _State.REQUEST_LINE_HTTP_VERSION;
               _httpVersionIndex = 0;
             } else {
diff --git a/runtime/bin/http_session.dart b/runtime/bin/http_session.dart
new file mode 100644
index 0000000..f1d5eaf
--- /dev/null
+++ b/runtime/bin/http_session.dart
@@ -0,0 +1,160 @@
+// 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.
+
+const String _DART_SESSION_ID = "DARTSESSID";
+
+// A _HttpSession is a node in a double-linked list, with _next and _prev being
+// the previous and next pointers.
+class _HttpSession implements HttpSession {
+  _HttpSession(_HttpSessionManager this._sessionManager, String this.id)
+    : _lastSeen = new Date.now();
+
+  void destroy() {
+    _destroyed = true;
+    _sessionManager._removeFromTimeoutQueue(this);
+    _sessionManager._sessions.remove(id);
+  }
+
+  // Mark the session as seen. This will reset the timeout and move the node to
+  // the end of the timeout queue.
+  void _markSeen() {
+    _lastSeen = new Date.now();
+    _sessionManager._bumpToEnd(this);
+  }
+
+  Dynamic data;
+
+  Date get lastSeen => _lastSeen;
+
+  final String id;
+
+  void set onTimeout(void callback()) {
+    _timeoutCallback = callback;
+  }
+
+  // Destroyed marked. Used by the http connection to see if a session is valid.
+  bool _destroyed = false;
+  Date _lastSeen;
+  Function _timeoutCallback;
+  _HttpSessionManager _sessionManager;
+  // Pointers in timeout queue.
+  _HttpSession _prev;
+  _HttpSession _next;
+}
+
+// Private class used to manage all the active sessions. The sessions are stored
+// in two ways:
+//
+//  * In a map, mapping from ID to HttpSession.
+//  * In a linked list, used as a timeout queue.
+class _HttpSessionManager {
+  _HttpSessionManager() : _sessions = {};
+
+  String createSessionId() {
+    const int _KEY_LENGTH = 16;  // 128 bits.
+    var data = _getRandomBytes(_KEY_LENGTH);
+    return CryptoUtils.bytesToHex(data);
+  }
+
+  _HttpSession getSession(String id) {
+    return _sessions[id];
+  }
+
+  _HttpSession createSession(init(HttpSession session)) {
+    var id = createSessionId();
+    // TODO(ajohnsen): Consider adding a limit and throwing an exception.
+    // Should be very unlikely however.
+    while (_sessions.containsKey(id)) {
+      id = createSessionId();
+    }
+    var session = _sessions[id] = new _HttpSession(this, id);
+    if (init != null) init(session);
+    _addToTimeoutQueue(session);
+    return session;
+  }
+
+  void set sessionTimeout(int timeout) {
+    _sessionTimeout = timeout;
+    _stopTimer();
+    _startTimer();
+  }
+
+  void close() {
+    _stopTimer();
+  }
+
+  void _bumpToEnd(_HttpSession session) {
+    _removeFromTimeoutQueue(session);
+    _addToTimeoutQueue(session);
+  }
+
+  void _addToTimeoutQueue(_HttpSession session) {
+    if (_head == null) {
+      assert(_tail == null);
+      _tail = _head = session;
+      _startTimer();
+    } else {
+      assert(_timer != null);
+      assert(_tail != null);
+      // Add to end.
+      _tail._next = session;
+      session._prev = _tail;
+      _tail = session;
+    }
+  }
+
+  void _removeFromTimeoutQueue(_HttpSession session) {
+    if (session._next != null) {
+      session._next._prev = session._prev;
+    }
+    if (session._prev != null) {
+      session._prev._next = session._next;
+    }
+    if (_head == session) {
+      // We removed the head element, start new timer.
+      _head = session._next;
+      _stopTimer();
+      _startTimer();
+    }
+    if (_tail == session) {
+      _tail = session._prev;
+    }
+    session._next = session._prev = null;
+  }
+
+  void _timerTimeout(_) {
+    _stopTimer();  // Clear timer.
+    assert(_head != null);
+    var session = _head;
+    session.destroy();  // Will remove the session from timeout queue and map.
+    if (session._timeoutCallback != null) {
+      session._timeoutCallback();
+    }
+  }
+
+  void _startTimer() {
+    assert(_timer == null);
+    if (_head != null) {
+      int seconds = new Date.now().difference(_head.lastSeen).inSeconds;
+      _timer = new Timer((_sessionTimeout - seconds) * 1000, _timerTimeout);
+    }
+  }
+
+  void _stopTimer() {
+    if (_timer != null) {
+      _timer.cancel();
+      _timer = null;
+    }
+  }
+
+  Map<String, _HttpSession> _sessions;
+  int _sessionTimeout = 20 * 60;  // 20 mins.
+  _HttpSession _head;
+  _HttpSession _tail;
+  Timer _timer;
+
+  static Uint8List _getRandomBytes(int count)
+      native "Crypto_GetRandomBytes";
+}
+
diff --git a/runtime/bin/io_sources.gypi b/runtime/bin/io_sources.gypi
index cc3957e..435c254 100644
--- a/runtime/bin/io_sources.gypi
+++ b/runtime/bin/io_sources.gypi
@@ -23,6 +23,7 @@
     'http.dart',
     'http_impl.dart',
     'http_parser.dart',
+    'http_session.dart',
     'http_utils.dart',
     'input_stream.dart',
     'list_stream.dart',
diff --git a/runtime/bin/list_stream_impl.dart b/runtime/bin/list_stream_impl.dart
index 1385d6a..5bcc41a 100644
--- a/runtime/bin/list_stream_impl.dart
+++ b/runtime/bin/list_stream_impl.dart
@@ -126,7 +126,7 @@
     if (_closeCallbackCalled) return;
 
     if (!_streamMarkedClosed) {
-      if (!_bufferList.isEmpty() &&
+      if (!_bufferList.isEmpty &&
           _clientDataHandler != null &&
           _scheduledDataCallback == null) {
         _scheduledDataCallback = new Timer(0, issueDataCallback);
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index df01016..3c4a8c8 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -322,7 +322,7 @@
       return result;
     }
   }
-  Dart_Handle core_lib_url = Dart_NewString("dart:coreimpl");
+  Dart_Handle core_lib_url = Dart_NewString("dart:core");
   if (Dart_IsError(core_lib_url)) {
     return core_lib_url;
   }
@@ -330,7 +330,7 @@
   if (Dart_IsError(core_lib)) {
     return core_lib;
   }
-  Dart_Handle runtime_options_class_name = Dart_NewString("RuntimeOptions");
+  Dart_Handle runtime_options_class_name = Dart_NewString("_OptionsImpl");
   if (Dart_IsError(runtime_options_class_name)) {
     return runtime_options_class_name;
   }
diff --git a/runtime/bin/mime_multipart_parser.dart b/runtime/bin/mime_multipart_parser.dart
index ae45518..b0af4ad 100644
--- a/runtime/bin/mime_multipart_parser.dart
+++ b/runtime/bin/mime_multipart_parser.dart
@@ -39,7 +39,7 @@
   // [boundary]. The boundary should be as specified in the content
   // type parameter, that is without the -- prefix.
   _MimeMultipartParser(String boundary) {
-    List<int> charCodes = boundary.charCodes();
+    List<int> charCodes = boundary.charCodes;
     _boundary = new List<int>(4 + charCodes.length);
     // Set-up the matching boundary preceding it with CRLF and two
     // dashes.
diff --git a/runtime/bin/path_impl.dart b/runtime/bin/path_impl.dart
index b05084c..d3467df 100644
--- a/runtime/bin/path_impl.dart
+++ b/runtime/bin/path_impl.dart
@@ -8,7 +8,7 @@
   _Path(String source) : _path = source;
   _Path.fromNative(String source) : _path = _clean(source);
 
-  int hashCode() => _path.hashCode();
+  int get hashCode => _path.hashCode;
 
   static String _clean(String source) {
     switch (Platform.operatingSystem) {
@@ -29,7 +29,7 @@
     return clean;
   }
 
-  bool get isEmpty => _path.isEmpty();
+  bool get isEmpty => _path.isEmpty;
   bool get isAbsolute => _path.startsWith('/');
   bool get hasTrailingSeparator => _path.endsWith('/');
 
@@ -41,13 +41,14 @@
     //    base.join(relative) == this.canonicalize.
     // Throws an exception if no such path exists, or the case is not
     // implemented yet.
-    if (base.isAbsolute && _path.startsWith(base._path)) {
-      if (_path == base._path) return new Path('.');
+    var basePath = base.toString();
+    if (base.isAbsolute && _path.startsWith(basePath)) {
+      if (_path == basePath) return new Path('.');
       if (base.hasTrailingSeparator) {
-        return new Path(_path.substring(base._path.length));
+        return new Path(_path.substring(basePath.length));
       }
-      if (_path[base._path.length] == '/') {
-        return new Path(_path.substring(base._path.length + 1));
+      if (_path[basePath.length] == '/') {
+        return new Path(_path.substring(basePath.length + 1));
       }
     } else if (base.isAbsolute && isAbsolute) {
       List<String> baseSegments = base.canonicalize().segments();
@@ -68,7 +69,7 @@
       for (int i = common; i < pathSegments.length - 1; i++) {
         sb.add('${pathSegments[i]}/');
       }
-      sb.add('${pathSegments.last()}');
+      sb.add('${pathSegments.last}');
       if (hasTrailingSeparator) {
         sb.add('/');
       }
@@ -89,9 +90,9 @@
       return further.canonicalize();
     }
     if (hasTrailingSeparator) {
-      return new Path('$_path${further._path}').canonicalize();
+      return new Path('$_path${further}').canonicalize();
     }
-    return new Path('$_path/${further._path}').canonicalize();
+    return new Path('$_path/${further}').canonicalize();
   }
 
   // Note: The URI RFC names for these operations are normalize, resolve, and
@@ -118,7 +119,7 @@
         segs[pos] = null;
       }
     }
-    if (segs.last() == '') segs.removeLast();  // Path ends with /.
+    if (segs.last == '') segs.removeLast();  // Path ends with /.
     // No remaining segments can be ., .., or empty.
     return !segs.some((s) => s == '' || s == '.' || s == '..');
   }
@@ -128,7 +129,7 @@
     List segs = segments();
     String drive;
     if (isAbs &&
-        !segs.isEmpty() &&
+        !segs.isEmpty &&
         segs[0].length == 2 &&
         segs[0][1] == ':') {
       drive = segs[0];
@@ -139,13 +140,13 @@
       switch (segment) {
         case '..':
           // Absolute paths drop leading .. markers, including after a drive.
-          if (newSegs.isEmpty()) {
+          if (newSegs.isEmpty) {
             if (isAbs) {
               // Do nothing: drop the segment.
             } else {
               newSegs.add('..');
             }
-          } else if (newSegs.last() == '..') {
+          } else if (newSegs.last == '..') {
             newSegs.add('..');
           } else {
             newSegs.removeLast();
@@ -169,7 +170,7 @@
       }
     }
 
-    if (newSegs.isEmpty()) {
+    if (newSegs.isEmpty) {
       if (isAbs) {
         segmentsToJoin.add('');
       } else {
diff --git a/runtime/bin/process.dart b/runtime/bin/process.dart
index e5a5618..806fe48 100644
--- a/runtime/bin/process.dart
+++ b/runtime/bin/process.dart
@@ -52,7 +52,7 @@
   /**
    * Returns an input stream of the process stdout.
    *
-   * Throws an [UnsupportedOperationException] if the process is
+   * Throws an [UnsupportedError] if the process is
    * non-interactive.
    */
   abstract InputStream get stdout;
@@ -60,7 +60,7 @@
   /**
    * Returns an input stream of the process stderr.
    *
-   * Throws an [UnsupportedOperationException] if the process is
+   * Throws an [UnsupportedError] if the process is
    * non-interactive.
    */
   abstract InputStream get stderr;
@@ -68,7 +68,7 @@
   /**
    * Returns an output stream to the process stdin.
    *
-   * Throws an [UnsupportedOperationException] if the process is
+   * Throws an [UnsupportedError] if the process is
    * non-interactive.
    */
   abstract OutputStream get stdin;
@@ -77,7 +77,7 @@
    * Sets an exit handler which gets invoked when the process
    * terminates.
    *
-   * Throws an [UnsupportedOperationException] if the process is
+   * Throws an [UnsupportedError] if the process is
    * non-interactive.
    */
   abstract void set onExit(void callback(int exitCode));
@@ -87,10 +87,15 @@
    * flag. On Posix systems, [kill] sends [signal] to the
    * process. Depending on the signal giving, it'll have different
    * meanings. When the process terminates as a result of calling
-   * [kill] [onExit] is called. If the kill operation fails an
-   * exception is thrown.
+   * [kill] [onExit] is called.
+   *
+   * Returns [:true:] if the process is successfully killed (the
+   * signal is successfully sent). Returns [:false:] if the process
+   * could not be killed (the signal could not be sent). Usually,
+   * a [:false:] return value from kill means that the process is
+   * already dead.
    */
-  abstract void kill([ProcessSignal signal = ProcessSignal.SIGTERM]);
+  abstract bool kill([ProcessSignal signal = ProcessSignal.SIGTERM]);
 
   /**
    * Terminates the streams of a process. [close] must be called on a
diff --git a/runtime/bin/process_impl.dart b/runtime/bin/process_impl.dart
index f05a1f1..48670e4 100644
--- a/runtime/bin/process_impl.dart
+++ b/runtime/bin/process_impl.dart
@@ -228,15 +228,14 @@
     return _out.outputStream;
   }
 
-  void kill([ProcessSignal signal = ProcessSignal.SIGTERM]) {
+  bool kill([ProcessSignal signal = ProcessSignal.SIGTERM]) {
     if (signal is! ProcessSignal) {
       throw new ArgumentError(
           "Argument 'signal' must be a ProcessSignal");
     }
     assert(_started);
-    if (_ended) return;
-    if (_kill(this, signal._signalNumber)) return;
-    throw new ProcessException("Could not kill process");
+    if (_ended) return false;
+    return _kill(this, signal._signalNumber);
   }
 
   bool _kill(Process p, int signal) native "Process_Kill";
diff --git a/runtime/bin/process_linux.cc b/runtime/bin/process_linux.cc
index c834988..bfaf4d4 100644
--- a/runtime/bin/process_linux.cc
+++ b/runtime/bin/process_linux.cc
@@ -552,11 +552,7 @@
 
 
 bool Process::Kill(intptr_t id, int signal) {
-  int result = TEMP_FAILURE_RETRY(kill(id, signal));
-  if (result == -1) {
-    return false;
-  }
-  return true;
+  return (TEMP_FAILURE_RETRY(kill(id, signal)) != -1);
 }
 
 
diff --git a/runtime/bin/process_macos.cc b/runtime/bin/process_macos.cc
index 20d1287..b23ab16 100644
--- a/runtime/bin/process_macos.cc
+++ b/runtime/bin/process_macos.cc
@@ -551,11 +551,7 @@
 
 
 bool Process::Kill(intptr_t id, int signal) {
-  int result = TEMP_FAILURE_RETRY(kill(id, signal));
-  if (result == -1) {
-    return false;
-  }
-  return true;
+  return (TEMP_FAILURE_RETRY(kill(id, signal)) != -1);
 }
 
 
diff --git a/runtime/bin/process_win.cc b/runtime/bin/process_win.cc
index 104fee3..5628a53 100644
--- a/runtime/bin/process_win.cc
+++ b/runtime/bin/process_win.cc
@@ -511,9 +511,8 @@
                                                 &process_handle,
                                                 &wait_handle,
                                                 &exit_pipe);
-  if (!success) {
-    return true;  // The process has already died.  Report a successful kill.
-  }
+  // The process is already dead.
+  if (!success) return false;
   BOOL result = TerminateProcess(process_handle, -1);
   return result ? true : false;
 }
diff --git a/runtime/bin/socket.dart b/runtime/bin/socket.dart
index ef841eb..fcc1e44 100644
--- a/runtime/bin/socket.dart
+++ b/runtime/bin/socket.dart
@@ -128,11 +128,6 @@
    * [onClosed].
    */
   void close([bool halfClose = false]);
-
-  /**
-   * Socket is hashable.
-   */
-  int hashCode();
 }
 
 
@@ -142,7 +137,7 @@
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.add("SocketIOException");
-    if (!message.isEmpty()) {
+    if (!message.isEmpty) {
       sb.add(": $message");
       if (osError != null) {
         sb.add(" ($osError)");
diff --git a/runtime/bin/socket_impl.dart b/runtime/bin/socket_impl.dart
index 5ad2319..b262cee 100644
--- a/runtime/bin/socket_impl.dart
+++ b/runtime/bin/socket_impl.dart
@@ -223,7 +223,7 @@
     }
   }
 
-  int hashCode() => _hashCode;
+  int get hashCode => _hashCode;
 
   bool _propagateError(Exception e) => false;
 
diff --git a/runtime/bin/socket_linux.cc b/runtime/bin/socket_linux.cc
index 05f225b..896a9da 100644
--- a/runtime/bin/socket_linux.cc
+++ b/runtime/bin/socket_linux.cc
@@ -20,7 +20,7 @@
 
 intptr_t Socket::CreateConnect(const char* host, const intptr_t port) {
   intptr_t fd;
-  struct hostent* server;
+  struct hostent server;
   struct sockaddr_in server_address;
 
   fd = TEMP_FAILURE_RETRY(socket(AF_INET, SOCK_STREAM, 0));
@@ -31,8 +31,12 @@
 
   FDUtils::SetNonBlocking(fd);
 
-  server = gethostbyname(host);
-  if (server == NULL) {
+  static const size_t kTempBufSize = 1024;
+  char temp_buf[kTempBufSize];
+  struct hostent *unused;
+  int err;
+  if (gethostbyname_r(
+          host, &server, temp_buf, kTempBufSize, &unused, &err) != 0) {
     TEMP_FAILURE_RETRY(close(fd));
     fprintf(stderr, "Error CreateConnect: %s\n", strerror(errno));
     return -1;
@@ -40,7 +44,7 @@
 
   server_address.sin_family = AF_INET;
   server_address.sin_port = htons(port);
-  bcopy(server->h_addr, &server_address.sin_addr.s_addr, server->h_length);
+  bcopy(server.h_addr, &server_address.sin_addr.s_addr, server.h_length);
   memset(&server_address.sin_zero, 0, sizeof(server_address.sin_zero));
   intptr_t result = TEMP_FAILURE_RETRY(
       connect(fd,
diff --git a/runtime/bin/socket_stream_impl.dart b/runtime/bin/socket_stream_impl.dart
index a2bbf99..c0ad221 100644
--- a/runtime/bin/socket_stream_impl.dart
+++ b/runtime/bin/socket_stream_impl.dart
@@ -114,7 +114,7 @@
 
   void close() {
     if (_closing && _closed) return;
-    if (!_pendingWrites.isEmpty()) {
+    if (!_pendingWrites.isEmpty) {
       // Mark the socket for close when all data is written.
       _closing = true;
       _socket._onWrite = _onWrite;
@@ -152,7 +152,7 @@
   bool _write(List<int> buffer, int offset, int len, bool copyBuffer) {
     if (_closing || _closed) throw new StreamException("Stream closed");
     int bytesWritten = 0;
-    if (_pendingWrites.isEmpty()) {
+    if (_pendingWrites.isEmpty) {
       // If nothing is buffered write as much as possible and buffer
       // the rest.
       bytesWritten = _socket.writeList(buffer, offset, len);
@@ -175,7 +175,7 @@
 
   void _onWrite() {
     // Write as much buffered data to the socket as possible.
-    while (!_pendingWrites.isEmpty()) {
+    while (!_pendingWrites.isEmpty) {
       List<int> buffer = _pendingWrites.first;
       int offset = _pendingWrites.index;
       int bytesToWrite = buffer.length - offset;
diff --git a/runtime/bin/string_stream.dart b/runtime/bin/string_stream.dart
index a5fa6ac..9cb9e29 100644
--- a/runtime/bin/string_stream.dart
+++ b/runtime/bin/string_stream.dart
@@ -10,7 +10,7 @@
   int write(List<int> buffer);
 
   // Returns whether any decoded data is available.
-  bool isEmpty();
+  bool get isEmpty;
 
   // Returns the number of available decoded characters.
   int available();
@@ -78,12 +78,12 @@
     return buffer.length;
   }
 
-  bool isEmpty() => _result.isEmpty();
+  bool get isEmpty => _result.isEmpty;
 
   int get lineBreaks => _lineBreaks;
 
   String decoded([int len]) {
-    if (isEmpty()) return null;
+    if (isEmpty) return null;
 
     String result;
     if (len !== null && len < available()) {
@@ -99,8 +99,8 @@
       }
     }
     _resultOffset += result.length;
-    while (!_lineBreakEnds.isEmpty() &&
-           _lineBreakEnds.first() < _charOffset + _resultOffset) {
+    while (!_lineBreakEnds.isEmpty &&
+           _lineBreakEnds.first < _charOffset + _resultOffset) {
       _lineBreakEnds.removeFirst();
       _lineBreaks--;
     }
@@ -109,7 +109,7 @@
   }
 
   String get decodedLine {
-    if (_lineBreakEnds.isEmpty()) return null;
+    if (_lineBreakEnds.isEmpty) return null;
     int lineEnd = _lineBreakEnds.removeFirst();
     int terminationSequenceLength = 1;
     if (_result[lineEnd - _charOffset] == LF &&
@@ -387,7 +387,7 @@
 
   Encoding get encoding => _encoding;
 
-  bool get closed => _inputClosed && _decoder.isEmpty();
+  bool get closed => _inputClosed && _decoder.isEmpty;
 
   void set onData(void callback()) {
     _clientDataHandler = callback;
@@ -413,7 +413,7 @@
 
   void _onData() {
     _readData();
-    if (!_decoder.isEmpty() && _clientDataHandler !== null) {
+    if (!_decoder.isEmpty && _clientDataHandler !== null) {
       _clientDataHandler();
     }
     if (_decoder.lineBreaks > 0 && _clientLineHandler !== null) {
@@ -425,7 +425,7 @@
 
   void _onClosed() {
     _inputClosed = true;
-    if (_decoder.isEmpty() && _clientCloseHandler != null) {
+    if (_decoder.isEmpty && _clientCloseHandler != null) {
       _clientCloseHandler();
       _closed = true;
     } else {
@@ -445,7 +445,7 @@
         (_clientDataHandler === null && _clientLineHandler === null)) {
       _input.onData = null;
     } else if (_clientDataHandler !== null) {
-      if (_decoder.isEmpty()) {
+      if (_decoder.isEmpty) {
         _input.onData = _onData;
       } else {
         _input.onData = null;
@@ -490,7 +490,7 @@
     if (!_closed) {
       // Schedule data callback if string data available.
       if (_clientDataHandler != null &&
-          !_decoder.isEmpty() &&
+          !_decoder.isEmpty &&
           _scheduledDataCallback == null) {
         if (_scheduledLineCallback != null) {
           _scheduledLineCallback.cancel();
@@ -500,7 +500,7 @@
 
       // Schedule line callback if a line is available.
       if (_clientLineHandler != null &&
-          (_decoder.lineBreaks > 0 || (!_decoder.isEmpty() && _inputClosed)) &&
+          (_decoder.lineBreaks > 0 || (!_decoder.isEmpty && _inputClosed)) &&
           _scheduledLineCallback == null) {
         if (_scheduledDataCallback != null) {
           _scheduledDataCallback.cancel();
@@ -509,7 +509,7 @@
       }
 
       // Schedule close callback if no more data and input is closed.
-      if (_decoder.isEmpty() &&
+      if (_decoder.isEmpty &&
           _inputClosed &&
           _scheduledCloseCallback == null) {
         _scheduledCloseCallback = new Timer(0, issueCloseCallback);
diff --git a/runtime/bin/websocket.dart b/runtime/bin/websocket.dart
index 47e184a..34c92dc 100644
--- a/runtime/bin/websocket.dart
+++ b/runtime/bin/websocket.dart
@@ -93,7 +93,7 @@
   /**
    * WebSocketConnection is hashable.
    */
-  int hashCode();
+  int get hashCode;
 }
 
 
@@ -166,7 +166,7 @@
   /**
    * WebSocketClientConnection is hashable.
    */
-  int hashCode();
+  int get hashCode;
 }
 
 
diff --git a/runtime/bin/websocket_impl.dart b/runtime/bin/websocket_impl.dart
index 54c66eb..0d2089d 100644
--- a/runtime/bin/websocket_impl.dart
+++ b/runtime/bin/websocket_impl.dart
@@ -468,7 +468,7 @@
     _closeSent = true;
   }
 
-  int hashCode() => _hash;
+  int get hashCode => _hash;
 
   _onWebSocketMessageStart(int type) {
     _currentMessageType = type;
@@ -576,7 +576,7 @@
 class _WebSocketConnection
     extends _WebSocketConnectionBase implements WebSocketConnection {
   _WebSocketConnection(DetachedSocket detached) {
-    _hash = detached.socket.hashCode();
+    _hash = detached.socket.hashCode;
     _socketConnected(detached.socket);
     _startProcessing(detached.unparsedData);
   }
@@ -598,7 +598,7 @@
     response.headers.add(HttpHeaders.UPGRADE, "websocket");
     String key = request.headers.value("Sec-WebSocket-Key");
     SHA1 sha1 = new SHA1();
-    sha1.update("$key$_webSocketGUID".charCodes());
+    sha1.update("$key$_webSocketGUID".charCodes);
     String accept = _Base64._encode(sha1.digest());
     response.headers.add("Sec-WebSocket-Accept", accept);
     response.contentLength = 0;
@@ -747,7 +747,7 @@
       return false;
     }
     SHA1 sha1 = new SHA1();
-    sha1.update("$_nonce$_webSocketGUID".charCodes());
+    sha1.update("$_nonce$_webSocketGUID".charCodes);
     List<int> expectedAccept = sha1.digest();
     List<int> receivedAccept = _Base64._decode(accept);
     if (expectedAccept.length != receivedAccept.length) return false;
@@ -775,15 +775,14 @@
       throw new WebSocketException("Unsupported user info ${uri.userInfo}");
     }
     int port = uri.port == 0 ? HttpClient.DEFAULT_HTTP_PORT : uri.port;
-    String path;
+    String path = uri.path;
+    if (path.length == 0) path = "/";
     if (uri.query != "") {
       if (uri.fragment != "") {
-        path = "${uri.path}?${uri.query}#${uri.fragment}";
+        path = "${path}?${uri.query}#${uri.fragment}";
       } else {
-        path = "${uri.path}?${uri.query}";
+        path = "${path}?${uri.query}";
       }
-    } else {
-      path = uri.path;
     }
 
     HttpClient client = new HttpClient();
diff --git a/runtime/dart-runtime.gyp b/runtime/dart-runtime.gyp
index 45548de..8eb37ec 100644
--- a/runtime/dart-runtime.gyp
+++ b/runtime/dart-runtime.gyp
@@ -91,6 +91,7 @@
           ],
           'action': [
             'python',
+            '-u', # Make standard I/O unbuffered.
             'tools/make_version.py',
             '--output', '<(version_cc_file)',
             '--input', '<(version_in_cc_file)',
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 5490dfa..be97d76 100755
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -2703,6 +2703,18 @@
                                         Dart_Handle source);
 // TODO(turnidge): Rename to Dart_LibraryLoadSource?
 
+
+/**
+ * Loads a patch source string into a library.
+ *
+ * \param library A library
+ * \param url A url identifying the origin of the patch source
+ * \param source A string of Dart patch source
+ */
+DART_EXPORT Dart_Handle Dart_LoadPatch(Dart_Handle library,
+                                       Dart_Handle url,
+                                       Dart_Handle patch_source);
+
 /**
  * Sets the callback used to resolve native functions for a library.
  *
diff --git a/runtime/lib/array.dart b/runtime/lib/array.dart
index 3a2ca48..aa1168f 100644
--- a/runtime/lib/array.dart
+++ b/runtime/lib/array.dart
@@ -25,7 +25,7 @@
       native "ObjectArray_copyFromObjectArray";
 
   E removeAt(int index) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove element of a non-extendable array");
   }
 
@@ -41,12 +41,12 @@
   }
 
   void removeRange(int start, int length) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove range of a non-extendable array");
   }
 
   void insertRange(int start, int length, [E initialValue = null]) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot insert range in a non-extendable array");
   }
 
@@ -88,12 +88,12 @@
     return Collections.some(this, f);
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     return this.length === 0;
   }
 
   void sort([Comparator<E> compare = Comparable.compare]) {
-    DualPivotQuicksort.sort(this, compare);
+    coreSort(this, compare);
   }
 
   int indexOf(E element, [int start = 0]) {
@@ -110,7 +110,7 @@
   }
 
   void add(E element) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to a non-extendable array");
   }
 
@@ -119,26 +119,26 @@
   }
 
   void addAll(Collection<E> elements) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to a non-extendable array");
   }
 
   void clear() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot clear a non-extendable array");
   }
 
   void set length(int length) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot change the length of a non-extendable array");
   }
 
   E removeLast() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove in a non-extendable array");
   }
 
-  E last() {
+  E get last {
     return this[length - 1];
   }
 }
@@ -154,41 +154,41 @@
 class _ImmutableArray<E> implements List<E> {
 
   factory _ImmutableArray._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "ImmutableArray can only be allocated by the VM");
   }
 
   E operator [](int index) native "ObjectArray_getIndexed";
 
   void operator []=(int index, E value) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot modify an immutable array");
   }
 
   int get length native "ObjectArray_getLength";
 
   E removeAt(int index) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot modify an immutable array");
   }
 
   void copyFrom(List src, int srcStart, int dstStart, int count) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot modify an immutable array");
   }
 
   void setRange(int start, int length, List<E> from, [int startFrom = 0]) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot modify an immutable array");
   }
 
   void removeRange(int start, int length) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove range of an immutable array");
   }
 
   void insertRange(int start, int length, [E initialValue = null]) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot insert range in an immutable array");
   }
 
@@ -230,12 +230,12 @@
     return Collections.some(this, f);
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     return this.length === 0;
   }
 
   void sort([Comparator<E> compare]) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot modify an immutable array");
   }
 
@@ -257,7 +257,7 @@
   }
 
   void add(E element) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to an immutable array");
   }
 
@@ -266,26 +266,26 @@
   }
 
   void addAll(Collection<E> elements) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to an immutable array");
   }
 
   void clear() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot clear an immutable array");
   }
 
   void set length(int length) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot change the length of an immutable array");
   }
 
   E removeLast() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove in a non-extendable array");
   }
 
-  E last() {
+  E get last {
     return this[length - 1];
   }
 }
@@ -298,13 +298,13 @@
     assert(array is _ObjectArray || array is _ImmutableArray);
   }
 
-  bool hasNext() {
+  bool get hasNext {
     return _length > _pos;
   }
 
   E next() {
-    if (!hasNext()) {
-      throw const NoMoreElementsException();
+    if (!hasNext) {
+      throw new StateError("No more elements");
     }
     return _array[_pos++];
   }
diff --git a/runtime/lib/byte_array.dart b/runtime/lib/byte_array.dart
index 708e291..cec964c 100644
--- a/runtime/lib/byte_array.dart
+++ b/runtime/lib/byte_array.dart
@@ -153,7 +153,7 @@
     return Collections.some(this, f);
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     return this.length === 0;
   }
 
@@ -164,27 +164,27 @@
   // Methods implementing the List interface.
 
   set length(newLength) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot resize a non-extendable array");
   }
 
   void add(value) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to a non-extendable array");
   }
 
   void addLast(value) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to a non-extendable array");
   }
 
   void addAll(Collection value) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to a non-extendable array");
   }
 
   void sort([Comparator compare = Comparable.compare]) {
-    DualPivotQuicksort.sort(this, compare);
+    coreSort(this, compare);
   }
 
   int indexOf(element, [int start = 0]) {
@@ -197,26 +197,26 @@
   }
 
   void clear() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove from a non-extendable array");
   }
 
   int removeLast() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove from a non-extendable array");
   }
 
-  last() {
+  get last {
     return this[length - 1];
   }
 
   void removeRange(int start, int length) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove from a non-extendable array");
   }
 
   void insertRange(int start, int length, [initialValue]) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to a non-extendable array");
   }
 
@@ -1488,13 +1488,13 @@
     assert(array is _ByteArrayBase || array is _ByteArrayViewBase);
   }
 
-  bool hasNext() {
+  bool get hasNext {
    return _length > _pos;
   }
 
   E next() {
-    if (!hasNext()) {
-      throw const NoMoreElementsException();
+    if (!hasNext) {
+      throw new StateError("No more elements");
     }
     return _array[_pos++];
   }
@@ -1633,7 +1633,7 @@
     return Collections.some(this, f);;
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     return this.length === 0;
   }
 
@@ -1642,27 +1642,27 @@
   // Methods implementing the List interface.
 
   set length(newLength) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot resize a non-extendable array");
   }
 
   void add(value) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to a non-extendable array");
   }
 
   void addLast(value) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to a non-extendable array");
   }
 
   void addAll(Collection value) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to a non-extendable array");
   }
 
   void sort([Comparator compare = Comparable.compare]) {
-    DualPivotQuicksort.sort(this, compare);
+    coreSort(this, compare);
   }
 
   int indexOf(element, [int start = 0]) {
@@ -1675,26 +1675,26 @@
   }
 
   void clear() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove from a non-extendable array");
   }
 
   int removeLast() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove from a non-extendable array");
   }
 
-  last() {
+  get last {
     return this[length - 1];
   }
 
   void removeRange(int start, int length) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot remove from a non-extendable array");
   }
 
   void insertRange(int start, int length, [initialValue]) {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "Cannot add to a non-extendable array");
   }
 }
diff --git a/runtime/lib/date_patch.dart b/runtime/lib/date_patch.dart
index aee640f..8e2b8cc 100644
--- a/runtime/lib/date_patch.dart
+++ b/runtime/lib/date_patch.dart
@@ -3,16 +3,16 @@
 // BSD-style license that can be found in the LICENSE file.
 // Dart core library.
 
-// VM implementation of DateImplementation.
-patch class DateImplementation {
-  /* patch */ DateImplementation(int year,
-                                 int month,
-                                 int day,
-                                 int hour,
-                                 int minute,
-                                 int second,
-                                 int millisecond,
-                                 bool isUtc)
+// VM implementation of _DateImpl.
+patch class _DateImpl {
+  /* patch */ _DateImpl(int year,
+                        int month,
+                        int day,
+                        int hour,
+                        int minute,
+                        int second,
+                        int millisecond,
+                        bool isUtc)
       : this.isUtc = isUtc,
         this.millisecondsSinceEpoch = _brokenDownDateToMillisecondsSinceEpoch(
             year, month, day, hour, minute, second, millisecond, isUtc) {
@@ -20,7 +20,7 @@
     if (isUtc === null) throw new ArgumentError();
   }
 
-  /* patch */ DateImplementation.now()
+  /* patch */ _DateImpl.now()
       : isUtc = false,
         millisecondsSinceEpoch = _getCurrentMs() {
   }
diff --git a/runtime/lib/double.cc b/runtime/lib/double.cc
index a6da65b..9cbb195 100644
--- a/runtime/lib/double.cc
+++ b/runtime/lib/double.cc
@@ -257,19 +257,19 @@
 }
 
 
-DEFINE_NATIVE_ENTRY(Double_isInfinite, 1) {
+DEFINE_NATIVE_ENTRY(Double_getIsInfinite, 1) {
   const Double& arg = Double::CheckedHandle(arguments->At(0));
   return Bool::Get(isinf(arg.value()));
 }
 
 
-DEFINE_NATIVE_ENTRY(Double_isNaN, 1) {
+DEFINE_NATIVE_ENTRY(Double_getIsNaN, 1) {
   const Double& arg = Double::CheckedHandle(arguments->At(0));
   return Bool::Get(isnan(arg.value()));
 }
 
 
-DEFINE_NATIVE_ENTRY(Double_isNegative, 1) {
+DEFINE_NATIVE_ENTRY(Double_getIsNegative, 1) {
   const Double& arg = Double::CheckedHandle(arguments->At(0));
   // Include negative zero, infinity.
   return Bool::Get(signbit(arg.value()) && !isnan(arg.value()));
diff --git a/runtime/lib/double.dart b/runtime/lib/double.dart
index 4878d00..75de3c1 100644
--- a/runtime/lib/double.dart
+++ b/runtime/lib/double.dart
@@ -5,7 +5,7 @@
 class _Double implements double {
   factory _Double.fromInteger(int value)
       native "Double_doubleFromInteger";
-  int hashCode() {
+  int get hashCode {
     try {
       return toInt();
     } on FormatException catch (e) {
@@ -49,7 +49,7 @@
   double operator -() {
     if (this == 0.0) {
       // -0.0 is canonicalized by the VM's parser, therefore no cycles.
-      return isNegative() ? 0.0 : -0.0;
+      return isNegative ? 0.0 : -0.0;
     }
     return 0.0 - this;
   }
@@ -93,9 +93,9 @@
   bool _greaterThanFromInteger(int other)
       native "Double_greaterThanFromInteger";
 
-  bool isNegative() native "Double_isNegative";
-  bool isInfinite() native "Double_isInfinite";
-  bool isNaN() native "Double_isNaN";
+  bool get isNegative native "Double_getIsNegative";
+  bool get isInfinite native "Double_getIsInfinite";
+  bool get isNaN native "Double_getIsNaN";
 
   double abs() {
     // Handle negative 0.0.
@@ -116,7 +116,7 @@
     }
     // Throw NullPointerException if exponent is null.
     double doubleExponent = exponent.toDouble();
-    if (isNaN() || exponent.isNaN()) {
+    if (isNaN || exponent.isNaN) {
       return double.NAN;
     }
     return _pow(doubleExponent);
@@ -136,7 +136,7 @@
     double x = this;
 
     // Step 4.
-    if (isNaN()) return "NaN";
+    if (isNaN) return "NaN";
 
     // Step 5 and 6 skipped. Will be dealt with by native function.
 
@@ -163,7 +163,7 @@
       throw "Range error";
     }
 
-    if (isNaN()) return "NaN";
+    if (isNaN) return "NaN";
     if (this == double.INFINITY) return "Infinity";
     if (this == -double.INFINITY) return "-Infinity";
 
@@ -189,7 +189,7 @@
       throw "Range error";
     }
 
-    if (isNaN()) return "NaN";
+    if (isNaN) return "NaN";
     if (this == double.INFINITY) return "Infinity";
     if (this == -double.INFINITY) return "-Infinity";
 
@@ -211,8 +211,8 @@
       return GREATER;
     } else if (this == other) {
       if (this == 0.0) {
-        bool thisIsNegative = isNegative();
-        bool otherIsNegative = other.isNegative();
+        bool thisIsNegative = isNegative;
+        bool otherIsNegative = other.isNegative;
         if (thisIsNegative == otherIsNegative) {
           return EQUAL;
         }
@@ -220,8 +220,8 @@
       } else {
         return EQUAL;
       }
-    } else if (isNaN()) {
-      return other.isNaN() ? EQUAL : GREATER;
+    } else if (isNaN) {
+      return other.isNaN ? EQUAL : GREATER;
     } else {
       // Other is NaN.
       return LESS;
diff --git a/runtime/lib/error.dart b/runtime/lib/error.dart
index 907667f..619b16c 100644
--- a/runtime/lib/error.dart
+++ b/runtime/lib/error.dart
@@ -6,7 +6,7 @@
 
 class AssertionErrorImplementation implements AssertionError {
   factory AssertionErrorImplementation._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "AssertionError can only be allocated by the VM");
   }
   static _throwNew(int assertionStart, int assertionEnd)
@@ -25,7 +25,7 @@
     extends AssertionErrorImplementation
     implements TypeError {
   factory TypeErrorImplementation._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "TypeError can only be allocated by the VM");
   }
   static _throwNew(int location,
@@ -54,7 +54,7 @@
     extends TypeErrorImplementation
     implements CastError {
   factory CastError._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "CastError can only be allocated by the VM");
   }
   // A CastError is allocated by TypeError._throwNew() when dst_name equals
@@ -73,7 +73,7 @@
 
 class FallThroughErrorImplementation implements FallThroughError {
   factory FallThroughErrorImplementation._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "FallThroughError can only be allocated by the VM");
   }
   static _throwNew(int case_clause_pos) native "FallThroughError_throwNew";
@@ -94,7 +94,7 @@
 // TODO(regis): This class will change once mirrors are available.
 class NoSuchMethodErrorImplementation implements NoSuchMethodError {
   factory NoSuchMethodErrorImplementation._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "NoSuchMethodError can only be allocated by the VM");
   }
 
@@ -116,7 +116,7 @@
     implements AbstractClassInstantiationError {
 
   factory AbstractClassInstantiationErrorImplementation._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "AbstractClassInstantiationError can only be allocated by the VM");
   }
 
diff --git a/runtime/lib/errors_patch.dart b/runtime/lib/errors_patch.dart
index fd6ec58..7894ae3 100644
--- a/runtime/lib/errors_patch.dart
+++ b/runtime/lib/errors_patch.dart
@@ -7,3 +7,16 @@
     return Object._toString(object);
   }
 }
+
+// Exceptions that should be NoSuchMethodError instead.
+
+class _ClosureArgumentMismatchException implements Exception {
+  const _ClosureArgumentMismatchException();
+  String toString() => "Closure argument mismatch";
+}
+
+
+class _ObjectNotClosureException implements Exception {
+  const _ObjectNotClosureException();
+  String toString() => "Object is not closure";
+}
diff --git a/runtime/lib/growable_array.dart b/runtime/lib/growable_array.dart
index ad4765b..c648fb5 100644
--- a/runtime/lib/growable_array.dart
+++ b/runtime/lib/growable_array.dart
@@ -4,7 +4,7 @@
 
 class _GrowableObjectArray<T> implements List<T> {
   factory _GrowableObjectArray._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "GrowableObjectArray can only be allocated by the VM");
   }
 
@@ -145,7 +145,7 @@
     return elem;
   }
 
-  T last() {
+  T get last {
     return this[length - 1];
   }
 
@@ -199,7 +199,7 @@
     return Collections.some(this, f);
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     return this.length === 0;
   }
 
@@ -208,7 +208,7 @@
   }
 
   void sort([Comparator<T> compare = Comparable.compare]) {
-    DualPivotQuicksort.sort(this, compare);
+    coreSort(this, compare);
   }
 
   String toString() {
diff --git a/runtime/lib/immutable_map.dart b/runtime/lib/immutable_map.dart
index 3901c11..d7756e0 100644
--- a/runtime/lib/immutable_map.dart
+++ b/runtime/lib/immutable_map.dart
@@ -21,7 +21,7 @@
     return null;
   }
 
-  bool isEmpty() {
+  bool get isEmpty {
     return kvPairs_.length === 0;
   }
 
@@ -35,7 +35,7 @@
     }
   }
 
-  Collection<K> getKeys() {
+  Collection<K> get keys {
     int numKeys = length;
     List<K> list = new List<K>(numKeys);
     for (int i = 0; i < numKeys; i++) {
@@ -44,7 +44,7 @@
     return list;
   }
 
-  Collection<V> getValues() {
+  Collection<V> get values {
     int numValues = length;
     List<V> list = new List<V>(numValues);
     for (int i = 0; i < numValues; i++) {
@@ -72,19 +72,19 @@
   }
 
   void operator []=(K key, V value) {
-    throw const IllegalAccessException();
+    throw new UnsupportedError("Cannot set value in unmodifiable Map");
   }
 
   V putIfAbsent(K key, V ifAbsent()) {
-    throw const IllegalAccessException();
+    throw new UnsupportedError("Cannot set value in unmodifiable Map");
   }
 
   void clear() {
-    throw const IllegalAccessException();
+    throw new UnsupportedError("Cannot clear unmodifiable Map");
   }
 
   V remove(K key) {
-    throw const IllegalAccessException();
+    throw new UnsupportedError("Cannot remove from unmodifiable Map");
   }
 
   String toString() {
diff --git a/runtime/lib/integers.dart b/runtime/lib/integers.dart
index f2b46b7..cdf43b3 100644
--- a/runtime/lib/integers.dart
+++ b/runtime/lib/integers.dart
@@ -6,7 +6,7 @@
 // - shift amount must be a Smi.
 class _IntegerImplementation {
   factory _IntegerImplementation._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "_IntegerImplementation can only be allocated by the VM");
   }
   num operator +(num other) {
@@ -89,11 +89,11 @@
   int abs() {
     return this < 0 ? -this : this;
   }
-  bool isEven() { return ((this & 1) === 0); }
-  bool isOdd() { return !isEven(); }
-  bool isNaN() { return false; }
-  bool isNegative() { return this < 0; }
-  bool isInfinite() { return false; }
+  bool get isEven => ((this & 1) == 0);
+  bool get isOdd => !isEven;
+  bool get isNaN => false;
+  bool get isNegative => this < 0;
+  bool get isInfinite => false;
 
   int compareTo(num other) {
     final int EQUAL = 0, LESS = -1, GREATER = 1;
@@ -102,10 +102,10 @@
       int MAX_EXACT_INT_TO_DOUBLE = 9007199254740992;  // 2^53.
       int MIN_EXACT_INT_TO_DOUBLE = -MAX_EXACT_INT_TO_DOUBLE;
       double d = other;
-      if (d.isInfinite()) {
+      if (d.isInfinite) {
         return d == double.NEGATIVE_INFINITY ? GREATER : LESS;
       }
-      if (d.isNaN()) {
+      if (d.isNaN) {
         return LESS;
       }
       if (MIN_EXACT_INT_TO_DOUBLE <= this && this <= MAX_EXACT_INT_TO_DOUBLE) {
@@ -136,7 +136,7 @@
 
   int pow(int exponent) {
     double res = this.toDouble().pow(exponent);
-    if (res.isInfinite()) {
+    if (res.isInfinite) {
       // Use Bigint instead.
       throw "_IntegerImplementation.pow not implemented for large integers.";
     }
@@ -168,7 +168,7 @@
       value ~/= radix;
       temp.add(digit);
     }
-    if (temp.isEmpty()) {
+    if (temp.isEmpty) {
       return "0";
     }
     StringBuffer buffer = new StringBuffer();
@@ -182,10 +182,10 @@
 
 class _Smi extends _IntegerImplementation implements int {
   factory _Smi._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "_Smi can only be allocated by the VM");
   }
-  int hashCode() {
+  int get hashCode {
     return this;
   }
   int operator ~() native "Smi_bitNegate";
@@ -196,10 +196,10 @@
 // Represents integers that cannot be represented by Smi but fit into 64bits.
 class _Mint extends _IntegerImplementation implements int {
   factory _Mint._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "_Mint can only be allocated by the VM");
   }
-  int hashCode() {
+  int get hashCode {
     return this;
   }
   int operator ~() native "Mint_bitNegate";
@@ -221,10 +221,10 @@
 // Bigint.
 class _Bigint extends _IntegerImplementation implements int {
   factory _Bigint._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "_Bigint can only be allocated by the VM");
   }
-  int hashCode() {
+  int get hashCode {
     return this;
   }
   int operator ~() native "Bigint_bitNegate";
diff --git a/runtime/lib/invocation_mirror_patch.dart b/runtime/lib/invocation_mirror_patch.dart
new file mode 100644
index 0000000..5bf4e42
--- /dev/null
+++ b/runtime/lib/invocation_mirror_patch.dart
@@ -0,0 +1,27 @@
+// 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.
+
+class _InvocationMirror implements InvocationMirror {
+  static final int METHOD = 0;
+  static final int GETTER = 1;
+  static final int SETTER = 2;
+
+  final String methodName;
+  final List positionalArguments;
+  final Map<String,dynamic> namedArguments = null;
+
+  final int _type;
+
+  _InvocationMirror(this.methodName, this._type, this.positionalArguments);
+
+  bool get isMethod => _type == METHOD;
+  bool get isAccessor => _type != METHOD;
+  bool get isGetter => _type == GETTER;
+  bool get isSetter => _type == SETTER;
+
+  invokeOn(Object receiver) {
+    throw new UnsupportedOperation("invokeOn not implemented yet");
+  }
+}
+
diff --git a/runtime/lib/isolate_patch.dart b/runtime/lib/isolate_patch.dart
index 1113d98..595beae 100644
--- a/runtime/lib/isolate_patch.dart
+++ b/runtime/lib/isolate_patch.dart
@@ -91,7 +91,7 @@
     return (other is _SendPortImpl) && _id == other._id;
   }
 
-  int hashCode() {
+  int get hashCode {
     return _id;
   }
 
diff --git a/runtime/lib/lib_impl_sources.gypi b/runtime/lib/lib_impl_sources.gypi
index d60fba3..090635d 100644
--- a/runtime/lib/lib_impl_sources.gypi
+++ b/runtime/lib/lib_impl_sources.gypi
@@ -9,8 +9,6 @@
     'array.cc',
     'array.dart',
     'array_patch.dart',
-    'date.cc',
-    'date_patch.dart',
     'growable_array.cc',
     'growable_array.dart',
     'immutable_map.dart',
diff --git a/runtime/lib/lib_sources.gypi b/runtime/lib/lib_sources.gypi
index 971dfca..9ddcd3b 100644
--- a/runtime/lib/lib_sources.gypi
+++ b/runtime/lib/lib_sources.gypi
@@ -6,6 +6,8 @@
 
 {
   'sources': [
+    'date.cc',
+    'date_patch.dart',
     'double.cc',
     'double.dart',
     'double_patch.dart',
@@ -18,6 +20,7 @@
     'integers.cc',
     'integers.dart',
     'integers_patch.dart',
+    'invocation_mirror_patch.dart',
     'object_patch.dart',
     'print_patch.dart',
     'stopwatch.cc',
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index 683e724..0233d09 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -94,8 +94,8 @@
 }
 
 abstract class _LocalMirrorImpl implements Mirror {
-  int hashCode() {
-    throw new NotImplementedException('Mirror.hashCode() is not implemented');
+  int get hashCode {
+    throw new NotImplementedException('Mirror.hashCode is not implemented');
   }
 
   // Local mirrors always return the same MirrorSystem.  This field
diff --git a/runtime/lib/object_patch.dart b/runtime/lib/object_patch.dart
index 9e1812b..603e14e 100644
--- a/runtime/lib/object_patch.dart
+++ b/runtime/lib/object_patch.dart
@@ -10,7 +10,7 @@
   static Expando _hashCodeExp = new Expando("Object.hashCode");
   static Random _hashCodeRnd = new Random();
 
-  /* patch */ int hashCode() {
+  /* patch */ int get hashCode {
     var result = _hashCodeExp[this];
     if (result == null) {
       result = _hashCodeRnd.nextInt(0x40000000);  // Stay in Smi range.
diff --git a/runtime/lib/print_patch.dart b/runtime/lib/print_patch.dart
index 6ae59f1..53d034c 100644
--- a/runtime/lib/print_patch.dart
+++ b/runtime/lib/print_patch.dart
@@ -9,7 +9,7 @@
 }
 
 void _unsupportedPrint(Object obj) {
-  throw const UnsupportedOperationException("'print' is not supported");
+  throw new UnsupportedError("'print' is not supported");
 }
 
 // _printClosure can be overwritten by the embedder to supply a different
diff --git a/runtime/lib/regexp_patch.dart b/runtime/lib/regexp_patch.dart
index 92acb79..936a7fe 100644
--- a/runtime/lib/regexp_patch.dart
+++ b/runtime/lib/regexp_patch.dart
@@ -5,13 +5,8 @@
 class _JSRegExpMatch implements Match {
   _JSRegExpMatch(this.regexp, this.str, this._match);
 
-  int start() {
-    return _start(0);
-  }
-
-  int end() {
-    return _end(0);
-  }
+  int get start => _start(0);
+  int get end => _end(0);
 
   int _start(int groupIdx) {
     return _match[(groupIdx * MATCH_PAIR)];
@@ -46,9 +41,7 @@
     return groupsList;
   }
 
-  int groupCount() {
-    return regexp._groupCount;
-  }
+  int get groupCount => regexp._groupCount;
 
   String get pattern => regexp.pattern;
 
diff --git a/runtime/lib/string.cc b/runtime/lib/string.cc
index 41c3181..2d5bd91 100644
--- a/runtime/lib/string.cc
+++ b/runtime/lib/string.cc
@@ -62,7 +62,7 @@
 }
 
 
-DEFINE_NATIVE_ENTRY(String_hashCode, 1) {
+DEFINE_NATIVE_ENTRY(String_getHashCode, 1) {
   const String& receiver = String::CheckedHandle(arguments->At(0));
   intptr_t hash_val = receiver.Hash();
   ASSERT(hash_val > 0);
diff --git a/runtime/lib/string_base.dart b/runtime/lib/string_base.dart
index b593e71..792940d 100644
--- a/runtime/lib/string_base.dart
+++ b/runtime/lib/string_base.dart
@@ -9,11 +9,11 @@
 class _StringBase {
 
   factory _StringBase._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "_StringBase can't be instaniated");
   }
 
-  int hashCode() native "String_hashCode";
+  int get hashCode native "String_getHashCode";
 
   /**
    *  Create the most efficient string representation for specified
@@ -42,7 +42,7 @@
 
   int get length native "String_getLength";
 
-  bool isEmpty() {
+  bool get isEmpty {
     return this.length === 0;
   }
 
@@ -84,7 +84,7 @@
   }
 
   bool _substringMatches(int start, String other) {
-    if (other.isEmpty()) return true;
+    if (other.isEmpty) return true;
     if ((start < 0) || (start >= this.length)) {
       return false;
     }
@@ -109,7 +109,7 @@
   }
 
   int indexOf(String other, [int start = 0]) {
-    if (other.isEmpty()) {
+    if (other.isEmpty) {
       return start < this.length ? start : this.length;
     }
     if ((start < 0) || (start >= this.length)) {
@@ -126,7 +126,7 @@
 
   int lastIndexOf(String other, [int start = null]) {
     if (start == null) start = length - 1;
-    if (other.isEmpty()) {
+    if (other.isEmpty) {
       return min(this.length, start);
     }
     if (start >= this.length) {
@@ -189,7 +189,7 @@
     if (pattern is String) {
       return indexOf(pattern, startIndex) >= 0;
     }
-    return pattern.allMatches(this.substring(startIndex)).iterator().hasNext();
+    return pattern.allMatches(this.substring(startIndex)).iterator().hasNext;
   }
 
   String replaceFirst(Pattern pattern, String replacement) {
@@ -202,10 +202,10 @@
     StringBuffer buffer = new StringBuffer();
     int startIndex = 0;
     Iterator iterator = pattern.allMatches(this).iterator();
-    if (iterator.hasNext()) {
+    if (iterator.hasNext) {
       Match match = iterator.next();
-      buffer.add(this.substring(startIndex, match.start())).add(replacement);
-      startIndex = match.end();
+      buffer.add(this.substring(startIndex, match.start)).add(replacement);
+      startIndex = match.end;
     }
     return buffer.add(this.substring(startIndex)).toString();
   }
@@ -220,8 +220,8 @@
     StringBuffer buffer = new StringBuffer();
     int startIndex = 0;
     for (Match match in pattern.allMatches(this)) {
-      buffer.add(this.substring(startIndex, match.start())).add(replacement);
-      startIndex = match.end();
+      buffer.add(this.substring(startIndex, match.start)).add(replacement);
+      startIndex = match.end;
     }
     return buffer.add(this.substring(startIndex)).toString();
   }
@@ -265,7 +265,7 @@
   List<String> split(Pattern pattern) {
     int length = this.length;
     Iterator iterator = pattern.allMatches(this).iterator();
-    if (length == 0 && iterator.hasNext()) {
+    if (length == 0 && iterator.hasNext) {
       // A matched empty string input returns the empty list.
       return <String>[];
     }
@@ -273,21 +273,21 @@
     int startIndex = 0;
     int previousIndex = 0;
     while (true) {
-      if (startIndex == length || !iterator.hasNext()) {
+      if (startIndex == length || !iterator.hasNext) {
         result.add(this.substring(previousIndex, length));
         break;
       }
       Match match = iterator.next();
-      if (match.start() == length) {
+      if (match.start == length) {
         result.add(this.substring(previousIndex, length));
         break;
       }
-      int endIndex = match.end();
+      int endIndex = match.end;
       if (startIndex == endIndex && endIndex == previousIndex) {
         ++startIndex;  // empty match, advance and restart
         continue;
       }
-      result.add(this.substring(previousIndex, match.start()));
+      result.add(this.substring(previousIndex, match.start));
       startIndex = previousIndex = endIndex;
     }
     return result;
@@ -302,7 +302,7 @@
     return result;
   }
 
-  List<int> charCodes() {
+  List<int> get charCodes {
     int len = this.length;
     final result = new List<int>(len);
     for (int i = 0; i < len; i++) {
@@ -356,7 +356,7 @@
 
 class _OneByteString extends _StringBase implements String {
   factory _OneByteString._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "_OneByteString can only be allocated by the VM");
   }
 
@@ -374,7 +374,7 @@
 
 class _TwoByteString extends _StringBase implements String {
   factory _TwoByteString._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "_TwoByteString can only be allocated by the VM");
   }
 
@@ -391,7 +391,7 @@
 
 class _FourByteString extends _StringBase implements String {
   factory _FourByteString._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "_FourByteString can only be allocated by the VM");
   }
 
@@ -408,7 +408,7 @@
 
 class _ExternalOneByteString extends _StringBase implements String {
   factory _ExternalOneByteString._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "_ExternalOneByteString can only be allocated by the VM");
   }
 
@@ -425,7 +425,7 @@
 
 class _ExternalTwoByteString extends _StringBase implements String {
   factory ExternalTwoByteString._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "_ExternalTwoByteString can only be allocated by the VM");
   }
 
@@ -442,7 +442,7 @@
 
 class _ExternalFourByteString extends _StringBase implements String {
   factory _ExternalFourByteString._uninstantiable() {
-    throw const UnsupportedOperationException(
+    throw new UnsupportedError(
         "ExternalFourByteString can only be allocated by the VM");
   }
 
@@ -458,14 +458,13 @@
 
 
 class _StringMatch implements Match {
-  const _StringMatch(int this._start,
+  const _StringMatch(int this.start,
                      String this.str,
                      String this.pattern);
 
-  int start() => _start;
-  int end() => _start + pattern.length;
+  int get end => start + pattern.length;
   String operator[](int g) => group(g);
-  int groupCount() => 0;
+  int get groupCount => 0;
 
   String group(int group) {
     if (group != 0) {
@@ -482,7 +481,7 @@
     return result;
   }
 
-  final int _start;
+  final int start;
   final String str;
   final String pattern;
 }
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index e7cda98..95585b1 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -152,6 +152,7 @@
 // Byte sizes.
 const int kWordSize = sizeof(word);
 const int kDoubleSize = sizeof(double);  // NOLINT
+const int kFloatSize = sizeof(float); // NOLINT
 #ifdef ARCH_IS_32_BIT
 const int kWordSizeLog2 = 2;
 const uword kUwordMax = kMaxUint32;
@@ -166,9 +167,9 @@
 const int kBitsPerWord = kWordSize * kBitsPerByte;
 
 // System-wide named constants.
-const int KB = 1024;
-const int MB = KB * KB;
-const int GB = KB * KB * KB;
+const intptr_t KB = 1024;
+const intptr_t MB = KB * KB;
+const intptr_t GB = KB * KB * KB;
 const intptr_t kIntptrOne = 1;
 const intptr_t kIntptrMin = (kIntptrOne << (kBitsPerWord - 1));
 const intptr_t kIntptrMax = ~kIntptrMin;
diff --git a/runtime/tests/vm/dart/byte_array_test.dart b/runtime/tests/vm/dart/byte_array_test.dart
index c418e56..701669a 100644
--- a/runtime/tests/vm/dart/byte_array_test.dart
+++ b/runtime/tests/vm/dart/byte_array_test.dart
@@ -28,21 +28,21 @@
     Expect.throws(() { array[10] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { array.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.insertRange(0, array.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeRange(0, array.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < array.length; ++i) {
       array[i] = 1 + i;
     }
@@ -112,21 +112,21 @@
     Expect.throws(() { array[10] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { array.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.insertRange(0, array.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeRange(0, array.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < array.length; ++i) {
       array[i] = 1 + i;
     }
@@ -184,21 +184,21 @@
     Expect.throws(() { array[10] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { array.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.insertRange(0, array.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeRange(0, array.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < array.length; ++i) {
       array[i] = 1 + i;
     }
@@ -268,21 +268,21 @@
     Expect.throws(() { array[10] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { array.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.insertRange(0, array.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeRange(0, array.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < array.length; ++i) {
       array[i] = 1 + i;
     }
@@ -340,21 +340,21 @@
     Expect.throws(() { array[10] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { array.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.insertRange(0, array.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeRange(0, array.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < array.length; ++i) {
       array[i] = 1 + i;
     }
@@ -430,21 +430,21 @@
     Expect.throws(() { array[10] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { array.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.insertRange(0, array.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeRange(0, array.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < array.length; ++i) {
       array[i] = 1 + i;
     }
@@ -505,21 +505,21 @@
     Expect.throws(() { array[10] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { array.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.insertRange(0, array.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeRange(0, array.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < array.length; ++i) {
       array[i] = 1 + i;
     }
@@ -596,21 +596,21 @@
     Expect.throws(() { array[10] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { array.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.insertRange(0, array.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeRange(0, array.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < array.length; ++i) {
       array[i] = 1 + i;
     }
@@ -671,21 +671,21 @@
     Expect.throws(() { array[10] = 0.0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { array.add(0.0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addLast(0.0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.insertRange(0, array.length, 0.0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeRange(0, array.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < array.length; ++i) {
       array[i] = 1.0 + i;
     }
@@ -733,21 +733,21 @@
     Expect.throws(() { array[10] = 0.0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { array.add(0.0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addLast(0.0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.insertRange(0, array.length, 0.0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeRange(0, array.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < array.length; ++i) {
       array[i] = 1.0 + i;
     }
@@ -882,8 +882,8 @@
     Expect.equals(0xFFFFFFFF, byte_array.getUint32(0));
     Expect.equals(-1, byte_array.getInt64(0));
     Expect.equals(0xFFFFFFFFFFFFFFFF, byte_array.getUint64(0));
-    Expect.isTrue(byte_array.getFloat32(0).isNaN());
-    Expect.isTrue(byte_array.getFloat64(0).isNaN());
+    Expect.isTrue(byte_array.getFloat32(0).isNaN);
+    Expect.isTrue(byte_array.getFloat64(0).isNaN);
     for (int i = 0; i < array.length; ++i) {
       array[i] = 0xFF - i;
     }
@@ -968,21 +968,21 @@
     Expect.throws(() { view[10] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { view.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.insertRange(0, view.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeRange(0, view.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < view.length; ++i) {
       view[i] = 1 + i;
     }
@@ -1096,21 +1096,21 @@
     Expect.throws(() { view[view.length] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { view.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.insertRange(0, view.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeRange(0, view.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < view.length; ++i) {
       view[i] = 1 + i;
     }
@@ -1203,21 +1203,21 @@
     Expect.throws(() { view[10] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { view.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.insertRange(0, view.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeRange(0, view.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < view.length; ++i) {
       view[i] = 1 + i;
     }
@@ -1338,21 +1338,21 @@
     Expect.throws(() { view[view.length] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { view.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.insertRange(0, view.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeRange(0, view.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < view.length; ++i) {
       view[i] = 1 + i;
     }
@@ -1450,21 +1450,21 @@
     Expect.throws(() { view[10] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { view.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.insertRange(0, view.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeRange(0, view.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < view.length; ++i) {
       view[i] = 1 + i;
     }
@@ -1609,21 +1609,21 @@
     Expect.throws(() { view[view.length] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { view.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.insertRange(0, view.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeRange(0, view.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < view.length; ++i) {
       view[i] = 1 + i;
     }
@@ -1738,21 +1738,21 @@
     Expect.throws(() { view[10] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { view.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.insertRange(0, view.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeRange(0, view.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < view.length; ++i) {
       view[i] = 1 + i;
     }
@@ -1937,21 +1937,21 @@
     Expect.throws(() { view[view.length] = 0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { view.add(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.addLast(0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.insertRange(0, view.length, 0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { view.removeRange(0, view.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < view.length; ++i) {
       view[i] = 1 + i;
     }
@@ -2091,21 +2091,21 @@
     Expect.throws(() { view[10] = 0.0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { array.add(0.0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addLast(0.0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.insertRange(0, array.length, 0.0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeRange(0, array.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < view.length; ++i) {
       view[i] = 1.0 + i;
     }
@@ -2194,21 +2194,21 @@
     Expect.throws(() { view[10] = 0.0; },
                   (e) { return e is IndexOutOfRangeException; });
     Expect.throws(() { array.add(0.0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addAll([0]); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.addLast(0.0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.clear(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.insertRange(0, array.length, 0.0); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.length = 0; },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeLast(); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     Expect.throws(() { array.removeRange(0, array.length - 1); },
-                  (e) { return e is UnsupportedOperationException; });
+                  (e) { return e is UnsupportedError; });
     for (int i = 0; i < view.length; ++i) {
       view[i] = 1.0 + i;
     }
diff --git a/runtime/tests/vm/dart/isolate_mirror_local_test.dart b/runtime/tests/vm/dart/isolate_mirror_local_test.dart
index d9c0c9a..185e043 100644
--- a/runtime/tests/vm/dart/isolate_mirror_local_test.dart
+++ b/runtime/tests/vm/dart/isolate_mirror_local_test.dart
@@ -20,7 +20,7 @@
     throw "Unexpected test name '$test'";
   }
   expectedTests.remove(test);
-  if (expectedTests.isEmpty()) {
+  if (expectedTests.isEmpty) {
     // All tests are done.
     exit_port.close();
   }
@@ -125,7 +125,7 @@
       });
 
   // Check that the members map is complete.
-  List keys = lib_mirror.members.getKeys();
+  List keys = lib_mirror.members.keys;
   sort(keys);
   Expect.equals('['
                 'FuncType, '
@@ -162,7 +162,7 @@
                 '$keys');
 
   // Check that the classes map is complete.
-  keys = lib_mirror.classes.getKeys();
+  keys = lib_mirror.classes.keys;
   sort(keys);
   Expect.equals('['
                 'FuncType, '
@@ -174,7 +174,7 @@
                 '$keys');
 
   // Check that the functions map is complete.
-  keys = lib_mirror.functions.getKeys();
+  keys = lib_mirror.functions.keys;
   sort(keys);
   Expect.equals('['
                 '_stringCompare, '
@@ -200,17 +200,17 @@
                 '$keys');
 
   // Check that the getters map is complete.
-  keys = lib_mirror.getters.getKeys();
+  keys = lib_mirror.getters.keys;
   sort(keys);
   Expect.equals('[myVar]', '$keys');
 
   // Check that the setters map is complete.
-  keys = lib_mirror.setters.getKeys();
+  keys = lib_mirror.setters.keys;
   sort(keys);
   Expect.equals('[myVar=]', '$keys');
 
   // Check that the variables map is complete.
-  keys = lib_mirror.variables.getKeys();
+  keys = lib_mirror.variables.keys;
   sort(keys);
   Expect.equals('['
                 'exit_port, '
@@ -320,7 +320,7 @@
   Expect.isTrue(oom_cls.defaultFactory === null);
   Expect.equals('dart:core', oom_cls.owner.simpleName);
   Expect.isTrue(oom_cls.isClass);
-  Expect.equals('Exception', oom_cls.superinterfaces[0].simpleName);
+  Expect.equals('Error', oom_cls.superinterfaces[0].simpleName);
   Expect.equals("ClassMirror on 'OutOfMemoryError'",
                 oom_cls.toString());
   testDone('testLibrariesMap');
diff --git a/runtime/tools/make_version.py b/runtime/tools/make_version.py
index f348a1e..e3d8a70 100644
--- a/runtime/tools/make_version.py
+++ b/runtime/tools/make_version.py
@@ -13,36 +13,45 @@
 import time
 from optparse import OptionParser
 
+def debugLog(message):
+  print >> sys.stderr, message
+  sys.stderr.flush()
+
+
 def getVersionPart(version_file, part):
   command = ['awk', '$1 == "%s" {print $2}' % (part), version_file]
-  print "Getting version part: %s Running command %s" % (part, command)
+  debugLog("Getting version part: %s Running command %s" % (part, command))
   proc = subprocess.Popen(command,
                           stdout=subprocess.PIPE,
                           stderr=subprocess.STDOUT)
   result = proc.communicate()[0].split('\n')[0]
-  print "Got result: %s" % result
+  debugLog("Got result: %s" % result)
   return result
 
 def getRevision():
-  print "Getting revision"
+  debugLog("Getting revision")
   is_svn = True
   if os.path.exists('.svn'):
-    print "Using svn to get revision"
+    debugLog("Using svn to get revision")
     cmd = ['svn', 'info']
   else:
-    print "Using git svn to get revision"
-    cmd = ['git', 'svn', 'info']
-  try:
-    print "Running command to get revision: %s" % cmd
-    proc = subprocess.Popen(cmd,
-                            stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-    revision = proc.communicate()[0].split('\n')[4].split(' ')[1]
-    print "Got revision: %s" % revision
-    return revision
-  except Exception:
-    # If we can't get any revision info (due to lack of tooling) return ''.
-    return ''
-
+    git_proc = subprocess.Popen(
+        ['git', 'branch', '-r'],
+        stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+    if 'git-svn' in git_proc.communicate()[0]:
+      debugLog("Using git svn to get revision")
+      cmd = ['git', 'svn', 'info']
+    else:
+      # Cannot get revision because we are not in svn or
+      # git svn checkout.
+      debugLog("Could not get revision: not an svn or git-svn checkout?")
+      return ''
+  debugLog("Running command to get revision: %s" % cmd)
+  proc = subprocess.Popen(cmd,
+                          stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+  revision = proc.communicate()[0].split('\n')[4].split(' ')[1]
+  debugLog("Got revision: %s" % revision)
+  return revision
 
 def makeVersionString(version_file):
   id = platform.system()
@@ -60,18 +69,18 @@
                                           patch,
                                           revision,
                                           user)
-  print "Returning version string: %s " % version_string
+  debugLog("Returning version string: %s " % version_string)
   return version_string
 
 def makeFile(output_file, input_file, version_file):
-  print "Making version file"
+  debugLog("Making version file")
   version_cc_text = open(input_file).read()
   version_string = makeVersionString(version_file)
-  print "Writing version to version_cc file: %s" % version_string
+  debugLog("Writing version to version_cc file: %s" % version_string)
   version_cc_text = version_cc_text.replace("{{VERSION_STR}}",
                                             version_string)
   version_time = time.ctime(time.time())
-  print "Writing time to version_cc file: %s" % version_time
+  debugLog("Writing time to version_cc file: %s" % version_time)
   version_cc_text = version_cc_text.replace("{{BUILD_TIME}}",
                                             version_time)
   open(output_file, 'w').write(version_cc_text)
@@ -117,4 +126,7 @@
     return -1
 
 if __name__ == '__main__':
-  sys.exit(main(sys.argv))
+  debugLog('starting make_version.py')
+  exit_code = main(sys.argv)
+  debugLog('exiting make_version.py (exit code: %s)' % exit_code)
+  sys.exit(exit_code)
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 35b87ec..7b424b0 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -35,6 +35,9 @@
   V(Smi_bitNegate, 1)                                                          \
   V(Mint_bitNegate, 1)                                                         \
   V(Bigint_bitNegate, 1)                                                       \
+  V(Double_getIsNegative, 1)                                                   \
+  V(Double_getIsInfinite, 1)                                                   \
+  V(Double_getIsNaN, 1)                                                        \
   V(Double_add, 2)                                                             \
   V(Double_sub, 2)                                                             \
   V(Double_mul, 2)                                                             \
@@ -46,9 +49,6 @@
   V(Double_equalToInteger, 2)                                                  \
   V(Double_greaterThan, 2)                                                     \
   V(Double_equal, 2)                                                           \
-  V(Double_isNegative, 1)                                                      \
-  V(Double_isInfinite, 1)                                                      \
-  V(Double_isNaN, 1)                                                           \
   V(Double_doubleFromInteger, 2)                                               \
   V(Double_round, 1)                                                           \
   V(Double_floor, 1)                                                           \
@@ -72,7 +72,7 @@
   V(ObjectArray_copyFromObjectArray, 5)                                        \
   V(StringBase_createFromCodePoints, 1)                                        \
   V(StringBase_substringUnchecked, 3)                                          \
-  V(String_hashCode, 1)                                                        \
+  V(String_getHashCode, 1)                                                     \
   V(String_getLength, 1)                                                       \
   V(String_charAt, 2)                                                          \
   V(String_charCodeAt, 2)                                                      \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index c94fe02c..ce87b6b 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -465,8 +465,10 @@
         identifier.IsNull() ? target_class_name : target_name;
     // Replace the type with a malformed type and compile a throw when called.
     type = NewFinalizedMalformedType(
+        Error::Handle(),  // No previous error.
         cls,
         factory.token_pos(),
+        kTryResolve,  // No compile-time error.
         "class '%s' has no constructor or factory named '%s'",
         target_class_name.ToCString(),
         user_visible_target_name.ToCString());
@@ -478,8 +480,10 @@
   // Verify that the target is compatible with the redirecting factory.
   if (!target.HasCompatibleParametersWith(factory)) {
     type = NewFinalizedMalformedType(
+        Error::Handle(),  // No previous error.
         cls,
         factory.token_pos(),
+        kTryResolve,  // No compile-time error.
         "constructor '%s' has incompatible parameters with "
         "redirecting factory '%s'",
         String::Handle(target.name()).ToCString(),
@@ -537,6 +541,9 @@
                                  const AbstractType& type,
                                  FinalizationKind finalization) {
   if (type.IsResolved() || type.IsFinalized()) {
+    if ((finalization == kCanonicalizeWellFormed) && type.IsMalformed()) {
+      ReportError(Error::Handle(type.malformed_error()));
+    }
     return;
   }
   if (FLAG_trace_type_finalization) {
@@ -676,9 +683,16 @@
                                               const AbstractType& type,
                                               FinalizationKind finalization) {
   if (type.IsFinalized()) {
-    // Ensure type is canonical if canonicalization is requested.
+    // Ensure type is canonical if canonicalization is requested, unless type is
+    // malformed.
     if (finalization >= kCanonicalize) {
-      return type.Canonicalize();
+      if (type.IsMalformed()) {
+        if (finalization == kCanonicalizeWellFormed) {
+          ReportError(Error::Handle(type.malformed_error()));
+        }
+      } else {
+        return type.Canonicalize();
+      }
     }
     return type.raw();
   }
@@ -975,7 +989,7 @@
   while (!super_class.IsNull()) {
     // Check if a function of same name exists in any super class.
     function = super_class.LookupFunction(name);
-    if (!function.IsNull()) {
+    if (!function.IsNull() && !function.is_static()) {
       return super_class.raw();
     }
     super_class = super_class.SuperClass();
@@ -1535,9 +1549,12 @@
 }
 
 
-RawType* ClassFinalizer::NewFinalizedMalformedType(const Class& cls,
-                                                   intptr_t type_pos,
-                                                   const char* format, ...) {
+RawType* ClassFinalizer::NewFinalizedMalformedType(
+    const Error& prev_error,
+    const Class& cls,
+    intptr_t type_pos,
+    FinalizationKind finalization,
+    const char* format, ...) {
   va_list args;
   va_start(args, format);
   const String& no_name = String::Handle(Symbols::Empty());
@@ -1545,7 +1562,7 @@
       UnresolvedClass::New(LibraryPrefix::Handle(), no_name, type_pos));
   const Type& type = Type::Handle(
       Type::New(unresolved_class, TypeArguments::Handle(), type_pos));
-  ReportMalformedType(Error::Handle(), cls, type, kTryResolve, format, args);
+  ReportMalformedType(prev_error, cls, type, finalization, format, args);
   va_end(args);
   ASSERT(type.IsMalformed());
   return type.raw();
diff --git a/runtime/vm/class_finalizer.h b/runtime/vm/class_finalizer.h
index 8ed32db..18ce755 100644
--- a/runtime/vm/class_finalizer.h
+++ b/runtime/vm/class_finalizer.h
@@ -49,12 +49,15 @@
                                        FinalizationKind finalization);
 
   // Allocate, finalize, and return a new malformed type as if it was declared
-  // in class cls at the given token position. Build the error message from the
-  // format string and its arguments.
-  static RawType* NewFinalizedMalformedType(const Class& cls,
+  // in class cls at the given token position.
+  // If not null, prepend prev_error to the error message built from the format
+  // string and its arguments.
+  static RawType* NewFinalizedMalformedType(const Error& prev_error,
+                                            const Class& cls,
                                             intptr_t type_pos,
+                                            FinalizationKind finalization,
                                             const char* format, ...)
-       PRINTF_ATTRIBUTE(3, 4);
+       PRINTF_ATTRIBUTE(5, 6);
 
   // Depending on the given type, finalization mode, and execution mode, mark
   // the given type as malformed or report a compile time error.
diff --git a/runtime/vm/code_descriptors_test.cc b/runtime/vm/code_descriptors_test.cc
index c92d032..ae4aa0c 100644
--- a/runtime/vm/code_descriptors_test.cc
+++ b/runtime/vm/code_descriptors_test.cc
@@ -36,17 +36,17 @@
   cls.SetFunctions(functions);
   Library& lib = Library::Handle(Library::CoreLibrary());
   lib.AddClass(cls);
-  ParsedFunction parsed_function(function);
+  ParsedFunction* parsed_function = new ParsedFunction(function);
   LiteralNode* l = new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(1)));
   test->node_sequence()->Add(new ReturnNode(kPos, l));
   l = new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(2)));
   test->node_sequence()->Add(new ReturnNode(kPos, l));
   l = new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(3)));
   test->node_sequence()->Add(new ReturnNode(kPos, l));
-  parsed_function.SetNodeSequence(test->node_sequence());
-  parsed_function.set_instantiator(NULL);
-  parsed_function.set_default_parameter_values(Array::Handle());
-  parsed_function.AllocateVariables();
+  parsed_function->SetNodeSequence(test->node_sequence());
+  parsed_function->set_instantiator(NULL);
+  parsed_function->set_default_parameter_values(Array::Handle());
+  parsed_function->AllocateVariables();
   bool retval;
   Isolate* isolate = Isolate::Current();
   EXPECT(isolate != NULL);
@@ -133,7 +133,7 @@
     stackmap_table_builder->AddEntry(3, stack_bitmap, 0);
 
     const Error& error =
-        Error::Handle(Compiler::CompileParsedFunction(parsed_function));
+        Error::Handle(Compiler::CompileParsedFunction(*parsed_function));
     EXPECT(error.IsNull());
     const Code& code = Code::Handle(function.CurrentCode());
 
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 61fc71b..90a9813 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -748,6 +748,46 @@
 }
 
 
+static bool UpdateResolvedStaticCall(const Code& code,
+                              intptr_t offset,
+                              const Code& target_code) {
+  // PC offsets are mapped to the corresponding code object in the
+  // resolved_static_calls array. The array grows as static calls are being
+  // resolved.
+  const int kOffset = 0;
+  const int kCode = 1;
+  const int kEntrySize = 2;
+
+  GrowableObjectArray& resolved_static_calls =
+      GrowableObjectArray::Handle(code.resolved_static_calls());
+  intptr_t index = -1;
+  if (resolved_static_calls.IsNull()) {
+    resolved_static_calls = GrowableObjectArray::New(2, Heap::kOld);
+    code.set_resolved_static_calls(resolved_static_calls);
+  } else {
+    // Search for the offset in the resolved static calls.
+    const intptr_t len = resolved_static_calls.Length();
+    Object& off = Object::Handle();
+    for (intptr_t i = 0; i < len; i += kEntrySize) {
+      off = resolved_static_calls.At(i + kOffset);
+      if (Smi::Cast(off).Value() == offset) {
+        index = i;
+        break;
+      }
+    }
+  }
+  if (index == -1) {
+    // The static call with this offset is not yet present: Add it.
+    resolved_static_calls.Add(Smi::Handle(Smi::New(offset)));
+    resolved_static_calls.Add(target_code);
+  } else {
+    // Overwrite the currently recorded target.
+    resolved_static_calls.SetAt(index + kCode, target_code);
+  }
+  return index != -1;
+}
+
+
 DEFINE_RUNTIME_ENTRY(PatchStaticCall, 0) {
   // This function is called after successful resolving and compilation of
   // the target method.
@@ -759,10 +799,16 @@
   Function& target_function = Function::Handle();
   CodePatcher::GetStaticCallAt(caller_frame->pc(), &target_function, &target);
   ASSERT(target_function.HasCode());
-  uword new_target = Code::Handle(target_function.CurrentCode()).EntryPoint();
+  const Code& target_code = Code::Handle(target_function.CurrentCode());
+  uword new_target = target_code.EntryPoint();
   // Verify that we are not patching repeatedly.
   ASSERT(target != new_target);
   CodePatcher::PatchStaticCallAt(caller_frame->pc(), new_target);
+  const Code& code = Code::Handle(caller_frame->LookupDartCode());
+  bool found = UpdateResolvedStaticCall(code,
+                                        caller_frame->pc() - code.EntryPoint(),
+                                        target_code);
+  ASSERT(!found);
   if (FLAG_trace_patching) {
     OS::Print("PatchStaticCall: patching from %#"Px" to '%s' %#"Px"\n",
         caller_frame->pc(),
@@ -1433,10 +1479,16 @@
     Function& target_function = Function::Handle();
     CodePatcher::GetStaticCallAt(frame->pc(), &target_function, &target);
     ASSERT(target_function.HasCode());
-    const uword new_entry_point =
-        Code::Handle(function.CurrentCode()).EntryPoint();
+    ASSERT(target_function.raw() == function.raw());
+    const Code& target_code = Code::Handle(function.CurrentCode());
+    const uword new_entry_point = target_code.EntryPoint();
     ASSERT(target != new_entry_point);  // Why patch otherwise.
     CodePatcher::PatchStaticCallAt(frame->pc(), new_entry_point);
+    const Code& code = Code::Handle(frame->LookupDartCode());
+    bool found = UpdateResolvedStaticCall(code,
+                                          frame->pc() - code.EntryPoint(),
+                                          target_code);
+    ASSERT(found);
     if (FLAG_trace_patching) {
       OS::Print("FixCallersTarget: patching from %#"Px" to '%s' %#"Px"\n",
           frame->pc(),
diff --git a/runtime/vm/code_generator.h b/runtime/vm/code_generator.h
index 97b4672..34b60f0 100644
--- a/runtime/vm/code_generator.h
+++ b/runtime/vm/code_generator.h
@@ -61,7 +61,6 @@
   V(PolymorphicInstanceCallTestFail)                                           \
   V(InstanceCallNoICData)                                                      \
   V(IntegerToDouble)                                                           \
-  V(DoubleToDouble)                                                            \
   V(BinarySmiOp)                                                               \
   V(BinaryMintOp)                                                              \
   V(ShiftMintOp)                                                               \
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index 8f0b6e3..13cbfc0 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -99,15 +99,11 @@
 static void InstallUnoptimizedCode(const Function& function) {
   // Disable optimized code.
   ASSERT(function.HasOptimizedCode());
-  // Patch entry of optimized code.
-  CodePatcher::PatchEntry(Code::Handle(function.CurrentCode()));
   if (FLAG_trace_compiler) {
     OS::Print("--> patching entry %#"Px"\n",
               Code::Handle(function.CurrentCode()).EntryPoint());
   }
-  // Use previously compiled code.
-  function.SetCode(Code::Handle(function.unoptimized_code()));
-  CodePatcher::RestoreEntry(Code::Handle(function.unoptimized_code()));
+  function.SwitchToUnoptimizedCode();
   if (FLAG_trace_compiler) {
     OS::Print("--> restoring entry at %#"Px"\n",
               Code::Handle(function.unoptimized_code()).EntryPoint());
@@ -156,90 +152,106 @@
       // Build the flow graph.
       FlowGraphBuilder builder(parsed_function);
       flow_graph = builder.BuildGraph(FlowGraphBuilder::kNotInlining);
+    }
 
-      // Transform to SSA.
-      if (optimized) flow_graph->ComputeSSA(0);  // Start at virtual register 0.
+    if (optimized) {
+      TimerScope timer(FLAG_compiler_stats,
+                       &CompilerStats::ssa_timer,
+                       isolate);
+      // Transform to SSA (virtual register 0 and no inlining arguments).
+      flow_graph->ComputeSSA(0, NULL);
+    }
 
-      if (FLAG_print_flow_graph) {
-        OS::Print("Before Optimizations\n");
-        FlowGraphPrinter printer(*flow_graph);
-        printer.PrintBlocks();
+    if (FLAG_print_flow_graph) {
+      OS::Print("Before Optimizations\n");
+      FlowGraphPrinter printer(*flow_graph);
+      printer.PrintBlocks();
+    }
+
+    if (optimized) {
+      TimerScope timer(FLAG_compiler_stats,
+                       &CompilerStats::graphoptimizer_timer,
+                       isolate);
+
+      flow_graph->ComputeUseLists();
+
+      FlowGraphOptimizer optimizer(flow_graph);
+      optimizer.ApplyICData();
+
+      // Compute the use lists.
+      flow_graph->ComputeUseLists();
+
+      // Inlining (mutates the flow graph)
+      if (FLAG_use_inlining) {
+        TimerScope timer(FLAG_compiler_stats,
+                         &CompilerStats::graphinliner_timer);
+        FlowGraphInliner inliner(flow_graph);
+        inliner.Inline();
+        // Use lists are maintained and validated by the inliner.
       }
 
-      if (optimized) {
+      // Propagate types and eliminate more type tests.
+      if (FLAG_propagate_types) {
+        FlowGraphTypePropagator propagator(flow_graph);
+        propagator.PropagateTypes();
+      }
+
+      // Verify that the use lists are still valid.
+      DEBUG_ASSERT(flow_graph->ValidateUseLists());
+
+      // Propagate sminess from CheckSmi to phis.
+      optimizer.PropagateSminess();
+
+      // Use propagated class-ids to optimize further.
+      optimizer.ApplyClassIds();
+
+      // Do optimizations that depend on the propagated type information.
+      // TODO(srdjan): Should this be called CanonicalizeComputations?
+      optimizer.OptimizeComputations();
+
+      // Unbox doubles.
+      flow_graph->ComputeUseLists();
+      optimizer.SelectRepresentations();
+
+      if (FLAG_constant_propagation ||
+          FLAG_common_subexpression_elimination) {
         flow_graph->ComputeUseLists();
-
-        FlowGraphOptimizer optimizer(flow_graph);
-        optimizer.ApplyICData();
-
-        // Compute the use lists.
-        flow_graph->ComputeUseLists();
-
-        // Inlining (mutates the flow graph)
-        if (FLAG_use_inlining) {
-          FlowGraphInliner inliner(flow_graph);
-          inliner.Inline();
-          // Use lists are maintained and validated by the inliner.
-        }
-
-        // Propagate types and eliminate more type tests.
-        if (FLAG_propagate_types) {
-          FlowGraphTypePropagator propagator(flow_graph);
-          propagator.PropagateTypes();
-        }
-
-        // Verify that the use lists are still valid.
-        DEBUG_ASSERT(flow_graph->ValidateUseLists());
-
-        // Propagate sminess from CheckSmi to phis.
-        optimizer.PropagateSminess();
-
-        // Use propagated class-ids to optimize further.
-        optimizer.ApplyClassIds();
-
-        // Do optimizations that depend on the propagated type information.
-        // TODO(srdjan): Should this be called CanonicalizeComputations?
+      }
+      if (FLAG_constant_propagation) {
+        ConstantPropagator::Optimize(flow_graph);
+        // A canonicalization pass to remove e.g. smi checks on smi constants.
         optimizer.OptimizeComputations();
-
-        // Unbox doubles.
-        flow_graph->ComputeUseLists();
-        optimizer.SelectRepresentations();
-
-        if (FLAG_constant_propagation ||
-            FLAG_common_subexpression_elimination) {
-          flow_graph->ComputeUseLists();
-        }
-        if (FLAG_constant_propagation) {
-          ConstantPropagator::Optimize(flow_graph);
-          // A canonicalization pass to remove e.g. smi checks on smi constants.
-          optimizer.OptimizeComputations();
-        }
-        if (FLAG_common_subexpression_elimination) {
+      }
+      if (FLAG_common_subexpression_elimination) {
+        if (DominatorBasedCSE::Optimize(flow_graph)) {
+          // Do another round of CSE to take secondary effects into account:
+          // e.g. when eliminating dependent loads (a.x[0] + a.x[0])
+          // TODO(fschneider): Change to a one-pass optimization pass.
           DominatorBasedCSE::Optimize(flow_graph);
         }
-        if (FLAG_loop_invariant_code_motion &&
-            (parsed_function.function().deoptimization_counter() <
-             (FLAG_deoptimization_counter_threshold - 1))) {
-          LICM::Optimize(flow_graph);
-        }
+      }
+      if (FLAG_loop_invariant_code_motion &&
+          (parsed_function.function().deoptimization_counter() <
+           (FLAG_deoptimization_counter_threshold - 1))) {
+        LICM::Optimize(flow_graph);
+      }
 
-        if (FLAG_range_analysis) {
-          // We have to perform range analysis after LICM because it
-          // optimistically moves CheckSmi through phis into loop preheaders
-          // making some phis smi.
-          flow_graph->ComputeUseLists();
-          optimizer.InferSmiRanges();
-        }
+      if (FLAG_range_analysis) {
+        // We have to perform range analysis after LICM because it
+        // optimistically moves CheckSmi through phis into loop preheaders
+        // making some phis smi.
+        flow_graph->ComputeUseLists();
+        optimizer.InferSmiRanges();
+      }
 
-        // Perform register allocation on the SSA graph.
-        FlowGraphAllocator allocator(*flow_graph);
-        allocator.AllocateRegisters();
+      // Perform register allocation on the SSA graph.
+      FlowGraphAllocator allocator(*flow_graph);
+      allocator.AllocateRegisters();
 
-        if (FLAG_print_flow_graph) {
-          OS::Print("After Optimizations:\n");
-          FlowGraphPrinter printer(*flow_graph);
-          printer.PrintBlocks();
-        }
+      if (FLAG_print_flow_graph) {
+        OS::Print("After Optimizations:\n");
+        FlowGraphPrinter printer(*flow_graph);
+        printer.PrintBlocks();
       }
     }
 
@@ -422,18 +434,20 @@
   }
   if (setjmp(*jump.Set()) == 0) {
     TIMERSCOPE(time_compilation);
-    ParsedFunction parsed_function(function);
+    Timer per_compile_timer(FLAG_trace_compiler, "Compilation time");
+    per_compile_timer.Start();
+    ParsedFunction* parsed_function = new ParsedFunction(function);
     if (FLAG_trace_compiler) {
       OS::Print("Compiling %sfunction: '%s' @ token %"Pd"\n",
                 (optimized ? "optimized " : ""),
                 function.ToFullyQualifiedCString(),
                 function.token_pos());
     }
-    Parser::ParseFunction(&parsed_function);
-    parsed_function.AllocateVariables();
+    Parser::ParseFunction(parsed_function);
+    parsed_function->AllocateVariables();
 
     const bool success =
-        CompileParsedFunctionHelper(parsed_function, optimized);
+        CompileParsedFunctionHelper(*parsed_function, optimized);
     if (optimized && !success) {
       // Optimizer bailed out. Disable optimizations and to never try again.
       if (FLAG_trace_compiler) {
@@ -446,11 +460,13 @@
     }
 
     ASSERT(success);
+    per_compile_timer.Stop();
 
     if (FLAG_trace_compiler) {
-      OS::Print("--> '%s' entry: %#"Px"\n",
+      OS::Print("--> '%s' entry: %#"Px" time: %"Pd64" us\n",
                 function.ToFullyQualifiedCString(),
-                Code::Handle(function.CurrentCode()).EntryPoint());
+                Code::Handle(function.CurrentCode()).EntryPoint(),
+                per_compile_timer.TotalElapsedTime());
     }
 
     if (Isolate::Current()->debugger()->IsActive()) {
@@ -565,16 +581,16 @@
     // We compile the function here, even though InvokeStatic() below
     // would compile func automatically. We are checking fewer invariants
     // here.
-    ParsedFunction parsed_function(func);
-    parsed_function.SetNodeSequence(fragment);
-    parsed_function.set_default_parameter_values(Array::Handle());
-    parsed_function.set_expression_temp_var(
+    ParsedFunction* parsed_function = new ParsedFunction(func);
+    parsed_function->SetNodeSequence(fragment);
+    parsed_function->set_default_parameter_values(Array::Handle());
+    parsed_function->set_expression_temp_var(
         ParsedFunction::CreateExpressionTempVar(0));
-    fragment->scope()->AddVariable(parsed_function.expression_temp_var());
-    parsed_function.AllocateVariables();
+    fragment->scope()->AddVariable(parsed_function->expression_temp_var());
+    parsed_function->AllocateVariables();
 
     // Non-optimized code generator.
-    CompileParsedFunctionHelper(parsed_function, false);
+    CompileParsedFunctionHelper(*parsed_function, false);
 
     GrowableArray<const Object*> arguments;  // no arguments.
     const Array& kNoArgumentNames = Array::Handle();
diff --git a/runtime/vm/compiler_stats.cc b/runtime/vm/compiler_stats.cc
index 78a1ad7..e9081f99 100644
--- a/runtime/vm/compiler_stats.cc
+++ b/runtime/vm/compiler_stats.cc
@@ -30,6 +30,22 @@
 // Cumulative timer of flow graph builder, included in codegen_timer.
 Timer CompilerStats::graphbuilder_timer(true, "flow graph builder timer");
 
+// Cumulative timer of flow graph SSA construction, included in codegen_timer.
+Timer CompilerStats::ssa_timer(true, "flow graph SSA timer");
+
+// Cumulative timer of flow graph inliner, included in codegen_timer.
+Timer CompilerStats::graphinliner_timer(true, "flow graph inliner timer");
+// Cumulative sub-timers of flow graph inliner.
+Timer CompilerStats::graphinliner_parse_timer(true, "inliner parsing timer");
+Timer CompilerStats::graphinliner_build_timer(true, "inliner building timer");
+Timer CompilerStats::graphinliner_ssa_timer(true, "inliner SSA timer");
+Timer CompilerStats::graphinliner_opt_timer(true, "inliner optimization timer");
+Timer CompilerStats::graphinliner_subst_timer(true,
+                                              "inliner substitution timer");
+
+// Cumulative timer of flow graph optimizer, included in codegen_timer.
+Timer CompilerStats::graphoptimizer_timer(true, "flow graph optimizer timer");
+
 // Cumulative timer of flow graph compiler, included in codegen_timer.
 Timer CompilerStats::graphcompiler_timer(true, "flow graph compiler timer");
 
@@ -74,12 +90,39 @@
   OS::Print("Code gen. time:     %"Pd64" msecs\n",
             codegen_usecs / 1000);
   int64_t graphbuilder_usecs = graphbuilder_timer.TotalElapsedTime();
-  OS::Print("  Graph builder time: %"Pd64" msecs\n", graphbuilder_usecs / 1000);
+  OS::Print("  Graph builder:    %"Pd64" msecs\n", graphbuilder_usecs / 1000);
+  int64_t ssa_usecs = ssa_timer.TotalElapsedTime();
+  OS::Print("  Graph SSA:        %"Pd64" msecs\n", ssa_usecs / 1000);
+
+  int64_t graphinliner_usecs = graphinliner_timer.TotalElapsedTime();
+  OS::Print("  Graph inliner:    %"Pd64" msecs\n", graphinliner_usecs / 1000);
+  int64_t graphinliner_parse_usecs =
+      graphinliner_parse_timer.TotalElapsedTime();
+  OS::Print("    Parsing:        %"Pd64" msecs\n",
+            graphinliner_parse_usecs / 1000);
+  int64_t graphinliner_build_usecs =
+      graphinliner_build_timer.TotalElapsedTime();
+  OS::Print("    Building:       %"Pd64" msecs\n",
+            graphinliner_build_usecs / 1000);
+  int64_t graphinliner_ssa_usecs = graphinliner_ssa_timer.TotalElapsedTime();
+  OS::Print("    SSA:            %"Pd64" msecs\n",
+            graphinliner_ssa_usecs / 1000);
+  int64_t graphinliner_opt_usecs = graphinliner_opt_timer.TotalElapsedTime();
+  OS::Print("    Optimization:   %"Pd64" msecs\n",
+            graphinliner_opt_usecs / 1000);
+  int64_t graphinliner_subst_usecs =
+      graphinliner_subst_timer.TotalElapsedTime();
+  OS::Print("    Substitution:   %"Pd64" msecs\n",
+            graphinliner_subst_usecs / 1000);
+
+  int64_t graphoptimizer_usecs = graphoptimizer_timer.TotalElapsedTime();
+  OS::Print("  Graph optimizer:  %"Pd64" msecs\n",
+            (graphoptimizer_usecs - graphinliner_usecs) / 1000);
   int64_t graphcompiler_usecs = graphcompiler_timer.TotalElapsedTime();
-  OS::Print("  Graph comp. time:   %"Pd64" msecs\n",
+  OS::Print("  Graph compiler:   %"Pd64" msecs\n",
             graphcompiler_usecs / 1000);
   int64_t codefinalizer_usecs = codefinalizer_timer.TotalElapsedTime();
-  OS::Print("  Code final. time:   %"Pd64" msecs\n",
+  OS::Print("  Code finalizer:   %"Pd64" msecs\n",
             codefinalizer_usecs / 1000);
   OS::Print("Compilation speed:  %"Pd64" tokens per msec\n",
             1000 * num_tokens_total / (parse_usecs + codegen_usecs));
diff --git a/runtime/vm/compiler_stats.h b/runtime/vm/compiler_stats.h
index 60b3555..363a537 100644
--- a/runtime/vm/compiler_stats.h
+++ b/runtime/vm/compiler_stats.h
@@ -32,8 +32,19 @@
   static Timer scanner_timer;        // Cumulative runtime of scanner.
   static Timer codegen_timer;        // Cumulative runtime of code generator.
   static Timer graphbuilder_timer;   // Included in codegen_timer.
-  static Timer graphcompiler_timer;  // Included in codegen_timer.
-  static Timer codefinalizer_timer;  // Included in codegen_timer.
+  static Timer ssa_timer;            // Included in codegen_timer.
+  static Timer graphinliner_timer;   // Included in codegen_timer.
+  static Timer graphinliner_parse_timer;  // Included in codegen_timer.
+  static Timer graphinliner_build_timer;  // Included in codegen_timer.
+  static Timer graphinliner_ssa_timer;    // Included in codegen_timer.
+  static Timer graphinliner_opt_timer;    // Included in codegen_timer.
+  static Timer graphinliner_find_timer;   // Included in codegen_timer.
+  static Timer graphinliner_plug_timer;   // Included in codegen_timer.
+  static Timer graphinliner_subst_timer;  // Included in codegen_timer.
+
+  static Timer graphoptimizer_timer;  // Included in codegen_timer.
+  static Timer graphcompiler_timer;   // Included in codegen_timer.
+  static Timer codefinalizer_timer;   // Included in codegen_timer.
 
   static void Print();
 };
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index f8c18ed..f1acf1c 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -4422,6 +4422,34 @@
 }
 
 
+DART_EXPORT Dart_Handle Dart_LoadPatch(Dart_Handle library,
+                                       Dart_Handle url,
+                                       Dart_Handle patch_source) {
+  TIMERSCOPE(time_script_loading);
+  Isolate* isolate = Isolate::Current();
+  DARTSCOPE(isolate);
+  if (FLAG_use_cha) {
+    RemoveOptimizedCode();
+  }
+  const Library& lib = Api::UnwrapLibraryHandle(isolate, library);
+  if (lib.IsNull()) {
+    RETURN_TYPE_ERROR(isolate, library, Library);
+  }
+  const String& url_str = Api::UnwrapStringHandle(isolate, url);
+  if (url_str.IsNull()) {
+    RETURN_TYPE_ERROR(isolate, url, String);
+  }
+  const String& source_str = Api::UnwrapStringHandle(isolate, patch_source);
+  if (source_str.IsNull()) {
+    RETURN_TYPE_ERROR(isolate, patch_source, String);
+  }
+  Dart_Handle result;
+  CompileSource(isolate, lib, url_str, source_str,
+                RawScript::kPatchTag, &result);
+  return result;
+}
+
+
 DART_EXPORT Dart_Handle Dart_SetNativeResolver(
     Dart_Handle library,
     Dart_NativeEntryResolver resolver) {
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 870f998..fe8c400 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -5673,6 +5673,42 @@
 }
 
 
+TEST_CASE(LoadPatch) {
+  const char* kLibrary1Chars =
+      "#library('library1_name');";
+  const char* kSourceChars =
+      "external int foo();";
+  const char* kPatchChars =
+      "patch int foo() => 42;";
+
+  // Load up a library.
+  Dart_Handle url = Dart_NewString("library1_url");
+  Dart_Handle source = Dart_NewString(kLibrary1Chars);
+  Dart_Handle lib = Dart_LoadLibrary(url, source);
+  EXPECT_VALID(lib);
+  EXPECT(Dart_IsLibrary(lib));
+
+  url = Dart_NewString("source_url");
+  source = Dart_NewString(kSourceChars);
+
+  Dart_Handle result = Dart_LoadSource(lib, url, source);
+  EXPECT_VALID(result);
+
+  url = Dart_NewString("patch_url");
+  source = Dart_NewString(kPatchChars);
+
+  result = Dart_LoadPatch(lib, url, source);
+  EXPECT_VALID(result);
+
+  result = Dart_Invoke(lib, Dart_NewString("foo"), 0, NULL);
+  EXPECT_VALID(result);
+  EXPECT(Dart_IsInteger(result));
+  int64_t value = 0;
+  EXPECT_VALID(Dart_IntegerToInt64(result, &value));
+  EXPECT_EQ(42, value);
+}
+
+
 static void PatchNativeFunction(Dart_NativeArguments args) {
   Dart_EnterScope();
   Dart_SetReturnValue(args, Dart_Null());
@@ -5783,7 +5819,7 @@
   EXPECT_VALID(result);
 
   result = Dart_Invoke(test_script, Dart_NewString("e1"), 0, NULL);
-  EXPECT_ERROR(result, "External implementation missing");
+  EXPECT_ERROR(result, "No such method: 'unpatched'");
 
   int64_t value = 0;
   result = Dart_Invoke(test_script, Dart_NewString("m1"), 0, NULL);
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index 476dd8c..3287777 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -167,7 +167,7 @@
     const Library& lib,
     const String& class_name,
     const GrowableArray<const Object*>& arguments) {
-  const Class& cls = Class::Handle(lib.LookupClass(class_name));
+  const Class& cls = Class::Handle(lib.LookupClassAllowPrivate(class_name));
   ASSERT(!cls.IsNull());
   // For now, we only support a non-parameterized or raw type.
   const Instance& exception_object = Instance::Handle(Instance::New(cls));
@@ -218,8 +218,7 @@
 
 RawObject* DartLibraryCalls::Equals(const Instance& left,
                                     const Instance& right) {
-  const String& function_name =
-      String::Handle(Symbols::New("=="));
+  const String& function_name = String::Handle(Symbols::EqualOperator());
   GrowableArray<const Object*> arguments;
   arguments.Add(&right);
   const int kNumArguments = 2;
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index ba723df..9ec5686 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -410,11 +410,11 @@
       break;
     case kClosureArgumentMismatch:
       library = Library::CoreLibrary();
-      class_name = Symbols::New("ClosureArgumentMismatchException");
+      class_name = Symbols::New("_ClosureArgumentMismatchException");
       break;
     case kObjectNotClosure:
       library = Library::CoreLibrary();
-      class_name = Symbols::New("ObjectNotClosureException");
+      class_name = Symbols::New("_ObjectNotClosureException");
       break;
     case kFormat:
       library = Library::CoreLibrary();
@@ -422,16 +422,12 @@
       break;
     case kStackOverflow:
       library = Library::CoreLibrary();
-      class_name = Symbols::New("StackOverflowException");
+      class_name = Symbols::New("StackOverflowError");
       break;
     case kOutOfMemory:
       library = Library::CoreLibrary();
       class_name = Symbols::New("OutOfMemoryError");
       break;
-    case kWrongArgumentCount:
-      library = Library::CoreLibrary();
-      class_name = Symbols::New("WrongArgumentCountException");
-      break;
     case kInternalError:
       library = Library::CoreLibrary();
       class_name = Symbols::New("InternalError");
diff --git a/runtime/vm/exceptions.h b/runtime/vm/exceptions.h
index e34161f..edb3c2c 100644
--- a/runtime/vm/exceptions.h
+++ b/runtime/vm/exceptions.h
@@ -56,7 +56,6 @@
     kFormat,
     kStackOverflow,
     kOutOfMemory,
-    kWrongArgumentCount,
     kInternalError,
     kNullPointer,
     kIllegalJSRegExp,
diff --git a/runtime/vm/flow_graph.cc b/runtime/vm/flow_graph.cc
index 3a4cfe8..95961cb 100644
--- a/runtime/vm/flow_graph.cc
+++ b/runtime/vm/flow_graph.cc
@@ -30,11 +30,37 @@
     preorder_(),
     postorder_(),
     reverse_postorder_(),
-    exits_(NULL) {
+    exits_(NULL),
+    invalid_dominator_tree_(true) {
   DiscoverBlocks();
 }
 
 
+ConstantInstr* FlowGraph::AddConstantToInitialDefinitions(
+    const Object& object) {
+  // Check if the constant is already in the pool.
+  for (intptr_t i = 0; i < graph_entry_->initial_definitions()->length(); ++i) {
+    ConstantInstr* constant =
+        (*graph_entry_->initial_definitions())[i]->AsConstant();
+    if ((constant != NULL) && (constant->value().raw() == object.raw())) {
+      return constant;
+    }
+  }
+  // Otherwise, allocate and add it to the pool.
+  ConstantInstr* constant = new ConstantInstr(object);
+  constant->set_ssa_temp_index(alloc_ssa_temp_index());
+  AddToInitialDefinitions(constant);
+  return constant;
+}
+
+void FlowGraph::AddToInitialDefinitions(Definition* defn) {
+  // TODO(zerny): Set previous to the graph entry so it is accessible by
+  // GetBlock. Remove this once there is a direct pointer to the block.
+  defn->set_previous(graph_entry_);
+  graph_entry_->initial_definitions()->Add(defn);
+}
+
+
 void FlowGraph::DiscoverBlocks() {
   // Initialize state.
   preorder_.Clear();
@@ -281,7 +307,9 @@
 }
 
 
-void FlowGraph::ComputeSSA(intptr_t next_virtual_register_number) {
+void FlowGraph::ComputeSSA(intptr_t next_virtual_register_number,
+                           GrowableArray<Definition*>* inlining_parameters) {
+  ASSERT((next_virtual_register_number == 0) || (inlining_parameters != NULL));
   current_ssa_temp_index_ = next_virtual_register_number;
   GrowableArray<BitVector*> dominance_frontier;
   ComputeDominators(&dominance_frontier);
@@ -289,7 +317,7 @@
   GrowableArray<PhiInstr*> live_phis;
   // Rename uses to reference inserted phis where appropriate.
   // Collect phis that reach a non-environment use.
-  Rename(&live_phis);
+  Rename(&live_phis, inlining_parameters);
   // Propagate alive mark transitively from alive phis.
   MarkLivePhis(&live_phis);
 }
@@ -304,6 +332,7 @@
 //     (preorder block numbers of) blocks in the dominance frontier.
 void FlowGraph::ComputeDominators(
     GrowableArray<BitVector*>* dominance_frontier) {
+  invalid_dominator_tree_ = false;
   // Use the SEMI-NCA algorithm to compute dominators.  This is a two-pass
   // version of the Lengauer-Tarjan algorithm (LT is normally three passes)
   // that eliminates a pass by using nearest-common ancestor (NCA) to
@@ -469,7 +498,8 @@
 }
 
 
-void FlowGraph::Rename(GrowableArray<PhiInstr*>* live_phis) {
+void FlowGraph::Rename(GrowableArray<PhiInstr*>* live_phis,
+                       GrowableArray<Definition*>* inlining_parameters) {
   // TODO(fschneider): Support catch-entry.
   if (graph_entry_->SuccessorCount() > 1) {
     Bailout("Catch-entry support in SSA.");
@@ -479,17 +509,27 @@
   GrowableArray<Definition*> env(variable_count());
 
   // Add global constants to the initial definitions.
-  ConstantInstr* constant_null = new ConstantInstr(Object::ZoneHandle());
-  constant_null->set_ssa_temp_index(alloc_ssa_temp_index());
-  graph_entry_->initial_definitions()->Add(constant_null);
+  ConstantInstr* constant_null =
+      AddConstantToInitialDefinitions(Object::ZoneHandle());
 
-  // Add incoming parameters to the initial definitions and the renaming
-  // environment.
-  for (intptr_t i = 0; i < parameter_count(); ++i) {
-    ParameterInstr* param = new ParameterInstr(i, graph_entry_);
-    param->set_ssa_temp_index(alloc_ssa_temp_index());  // New SSA temp.
-    graph_entry_->initial_definitions()->Add(param);
-    env.Add(param);
+  // Add parameters to the initial definitions and renaming environment.
+  if (inlining_parameters != NULL) {
+    // Use known parameters.
+    ASSERT(parameter_count() == inlining_parameters->length());
+    for (intptr_t i = 0; i < parameter_count(); ++i) {
+      Definition* defn = (*inlining_parameters)[i];
+      defn->set_ssa_temp_index(alloc_ssa_temp_index());  // New SSA temp.
+      AddToInitialDefinitions(defn);
+      env.Add(defn);
+    }
+  } else {
+    // Create new parameters.
+    for (intptr_t i = 0; i < parameter_count(); ++i) {
+      ParameterInstr* param = new ParameterInstr(i, graph_entry_);
+      param->set_ssa_temp_index(alloc_ssa_temp_index());  // New SSA temp.
+      AddToInitialDefinitions(param);
+      env.Add(param);
+    }
   }
 
   // Initialize all locals with #null in the renaming environment.
@@ -523,15 +563,14 @@
   // 2. Process normal instructions.
   for (ForwardInstructionIterator it(block_entry); !it.Done(); it.Advance()) {
     Instruction* current = it.Current();
-    // Attach current environment to the instruction. First, each instruction
-    // gets a full copy of the environment. Later we optimize this by
-    // eliminating unnecessary environments.
-    // TODO(zerny): Avoid creating unnecessary environments. Note that some
-    // optimizations need deoptimization info for non-deoptable instructions,
-    // eg, LICM on GOTOs.
-    current->set_env(Environment::From(*env,
-                                       num_non_copied_params_,
-                                       parsed_function_.function()));
+    // Attach current environment to the instructions that can deoptimize and
+    // at goto instructions. Optimizations like LICM expect an environment at
+    // gotos.
+    if (current->CanDeoptimize() || current->IsGoto()) {
+      current->set_env(Environment::From(*env,
+                                         num_non_copied_params_,
+                                         parsed_function_.function()));
+    }
     if (current->CanDeoptimize()) {
       current->env()->set_deopt_id(current->deopt_id());
     }
@@ -725,37 +764,69 @@
 }
 
 
-// Helper to reorder phis after splitting a block.  The last instruction(s) of
-// the split block will now have a larger block id than any previously known
-// blocks. If the last instruction jumps to a join, we must reorder phi inputs
-// according to the block order, ie, we move this predecessor to the end.
-static void ReorderPhis(BlockEntryInstr* block) {
-  GotoInstr* jump = block->last_instruction()->AsGoto();
-  if (jump == NULL) return;
-  JoinEntryInstr* join = jump->successor();
-  intptr_t pred_index = join->IndexOfPredecessor(block);
-  intptr_t pred_count = join->PredecessorCount();
-  ASSERT(pred_index >= 0);
-  ASSERT(pred_index < pred_count);
-  // If the predecessor index is the last index there is nothing to update.
-  if ((join->phis() == NULL) || (pred_index + 1 == pred_count)) return;
-  // Otherwise, move the predecessor use to the end in each phi.
-  for (intptr_t i = 0; i < join->phis()->length(); ++i) {
-    PhiInstr* phi = (*join->phis())[i];
-    if (phi == NULL) continue;
-    ASSERT(pred_count == phi->InputCount());
-    // Save the predecessor use.
-    Value* pred_use = phi->InputAt(pred_index);
-    // Move each of the following uses back by one.
-    ASSERT(pred_index < pred_count - 1);  // Will move at least one index.
-    for (intptr_t i = pred_index; i < pred_count - 1; ++i) {
-      Value* use = phi->InputAt(i + 1);
-      phi->SetInputAt(i, use);
-      use->set_use_index(i);
+// Helper to replace a predecessor block. For each successor of 'old_block', the
+// predecessors will be reordered to preserve block-order sorting of the
+// predecessors as well as the phis if the successor is a join.
+void FlowGraph::ReplacePredecessor(BlockEntryInstr* old_block,
+                                   BlockEntryInstr* new_block) {
+  // Set the last instruction of the new block to that of the old block.
+  Instruction* last = old_block->last_instruction();
+  new_block->set_last_instruction(last);
+  // For each successor, update the predecessors.
+  for (intptr_t sidx = 0; sidx < last->SuccessorCount(); ++sidx) {
+    // If the successor is a target, update its predecessor.
+    TargetEntryInstr* target = last->SuccessorAt(sidx)->AsTargetEntry();
+    if (target != NULL) {
+      target->predecessor_ = new_block;
+      continue;
     }
-    // Write the predecessor use at the end.
-    phi->SetInputAt(pred_count - 1, pred_use);
-    pred_use->set_use_index(pred_count - 1);
+    // If the successor is a join, update each predecessor and the phis.
+    JoinEntryInstr* join = last->SuccessorAt(sidx)->AsJoinEntry();
+    ASSERT(join != NULL);
+    // Find the old predecessor index.
+    intptr_t old_index = join->IndexOfPredecessor(old_block);
+    intptr_t pred_count = join->PredecessorCount();
+    ASSERT(old_index >= 0);
+    ASSERT(old_index < pred_count);
+    // Find the new predecessor index while reordering the predecessors.
+    intptr_t new_id = new_block->block_id();
+    intptr_t new_index = old_index;
+    if (old_block->block_id() < new_id) {
+      // Search upwards, bubbling down intermediate predecessors.
+      for (; new_index < pred_count - 1; ++new_index) {
+        if (join->predecessors_[new_index + 1]->block_id() > new_id) break;
+        join->predecessors_[new_index] = join->predecessors_[new_index + 1];
+      }
+    } else {
+      // Search downwards, bubbling up intermediate predecessors.
+      for (; new_index > 0; --new_index) {
+        if (join->predecessors_[new_index - 1]->block_id() < new_id) break;
+        join->predecessors_[new_index] = join->predecessors_[new_index - 1];
+      }
+    }
+    join->predecessors_[new_index] = new_block;
+    // If the new and old predecessor index match there is nothing to update.
+    if ((join->phis() == NULL) || (old_index == new_index)) return;
+    // Otherwise, reorder the predecessor uses in each phi.
+    for (intptr_t i = 0; i < join->phis()->length(); ++i) {
+      PhiInstr* phi = (*join->phis())[i];
+      if (phi == NULL) continue;
+      ASSERT(pred_count == phi->InputCount());
+      // Save the predecessor use.
+      Value* pred_use = phi->InputAt(old_index);
+      // Move uses between old and new.
+      intptr_t step = (old_index < new_index) ? 1 : -1;
+      for (intptr_t use_idx = old_index;
+           use_idx != new_index;
+           use_idx += step) {
+        Value* use = phi->InputAt(use_idx + step);
+        phi->SetInputAt(use_idx, use);
+        use->set_use_index(use_idx);
+      }
+      // Write the predecessor use.
+      phi->SetInputAt(new_index, pred_use);
+      pred_use->set_use_index(new_index);
+    }
   }
 }
 
@@ -820,15 +891,35 @@
     call->ReplaceUsesWith(exit->value()->definition());
     call->previous()->LinkTo(callee_entry->next());
     exit->previous()->LinkTo(call->next());
-    // In case of control flow, locally update the dominator tree.
+    // In case of control flow, locally update the predecessors, phis and
+    // dominator tree.
+    // TODO(zerny): should we leave the dominator tree since we recompute it
+    // after a full inlining pass?
     if (callee_graph->preorder().length() > 2) {
-      // The caller block is split and the new block id is that of the exit
-      // block. If the caller block had outgoing edges, reorder the phis so they
-      // are still ordered by block id.
-      ReorderPhis(caller_entry);
-      // The callee return is now the immediate dominator of blocks whose
-      // immediate dominator was the caller entry.
       BlockEntryInstr* exit_block = exit->GetBlock();
+      // Pictorially, the graph structure is:
+      //
+      //   Bc : caller_entry    Bi : callee_entry
+      //     before_call          inlined_head
+      //     call               ... other blocks ...
+      //     after_call         Be : exit_block
+      //                          inlined_foot
+      // And becomes:
+      //
+      //   Bc : caller_entry
+      //     before_call
+      //     inlined_head
+      //   ... other blocks ...
+      //   Be : exit_block
+      //    inlined_foot
+      //    after_call
+      //
+      // For 'after_call', caller entry (Bc) is replaced by callee exit (Be).
+      ReplacePredecessor(caller_entry, exit_block);
+      // For 'inlined_head', callee entry (Bi) is replaced by caller entry (Bc).
+      ReplacePredecessor(callee_entry, caller_entry);
+      // The callee exit is now the immediate dominator of blocks whose
+      // immediate dominator was the caller entry.
       ASSERT(exit_block->dominated_blocks().is_empty());
       for (intptr_t i = 0; i < caller_entry->dominated_blocks().length(); ++i) {
         BlockEntryInstr* block = caller_entry->dominated_blocks()[i];
@@ -843,8 +934,6 @@
         block->set_dominator(caller_entry);
         caller_entry->AddDominatedBlock(block);
       }
-      // Recompute the block orders.
-      DiscoverBlocks();
     }
   } else {
     // Sort the list of exits by block id.
@@ -884,16 +973,27 @@
       // Replace uses of the call with the phi.
       call->ReplaceUsesWith(phi);
     }
-    //  Remove the call from the graph.
+    // Remove the call from the graph.
     call->previous()->LinkTo(callee_entry->next());
     join->LinkTo(call->next());
-    // The caller block is split and the new block id is that of the join
-    // block. If the caller block had outgoing edges, reorder the phis so they
-    // are still ordered by block id.
-    ReorderPhis(caller_entry);
-    // Adjust pre/post orders and update the dominator tree.
-    DiscoverBlocks();
+    // Replace the blocks after splitting (see comment in the len=1 case above).
+    ReplacePredecessor(caller_entry, join);
+    ReplacePredecessor(callee_entry, caller_entry);
+    // Update the last instruction pointers on each exit (ie, to the new goto).
+    for (intptr_t i = 0; i < exits.length(); ++i) {
+      exits[i]->set_last_instruction(
+          exits[i]->last_instruction()->previous()->next());
+    }
+    // Mark that the dominator tree is invalid.
     // TODO(zerny): Compute the dominator frontier locally.
+    invalid_dominator_tree_ = true;
+  }
+}
+
+
+void FlowGraph::RepairGraphAfterInlining() {
+  DiscoverBlocks();
+  if (invalid_dominator_tree_) {
     GrowableArray<BitVector*> dominance_frontier;
     ComputeDominators(&dominance_frontier);
   }
diff --git a/runtime/vm/flow_graph.h b/runtime/vm/flow_graph.h
index 8b28b71..fd3709c 100644
--- a/runtime/vm/flow_graph.h
+++ b/runtime/vm/flow_graph.h
@@ -11,6 +11,7 @@
 namespace dart {
 
 class BlockEntryInstr;
+class ConstantInstr;
 class Definition;
 class FlowGraphBuilder;
 class GraphEntryInstr;
@@ -104,8 +105,12 @@
 
   intptr_t InstructionCount() const;
 
+  ConstantInstr* AddConstantToInitialDefinitions(const Object& object);
+  void AddToInitialDefinitions(Definition* defn);
+
   // Operations on the flow graph.
-  void ComputeSSA(intptr_t next_virtual_register_number);
+  void ComputeSSA(intptr_t next_virtual_register_number,
+                  GrowableArray<Definition*>* inlining_parameters);
   void ComputeUseLists();
 
   // Finds natural loops in the flow graph and attaches a list of loop
@@ -113,6 +118,7 @@
   void ComputeLoops(GrowableArray<BlockEntryInstr*>* loop_headers);
 
   void InlineCall(Definition* call, FlowGraph* callee_graph);
+  void RepairGraphAfterInlining();
 
   // TODO(zerny): Once the SSA is feature complete this should be removed.
   void Bailout(const char* reason) const;
@@ -137,7 +143,8 @@
       GrowableArray<intptr_t>* parent,
       GrowableArray<intptr_t>* label);
 
-  void Rename(GrowableArray<PhiInstr*>* live_phis);
+  void Rename(GrowableArray<PhiInstr*>* live_phis,
+              GrowableArray<Definition*>* inlining_parameters);
   void RenameRecursive(
       BlockEntryInstr* block_entry,
       GrowableArray<Definition*>* env,
@@ -150,6 +157,9 @@
 
   void MarkLivePhis(GrowableArray<PhiInstr*>* live_phis);
 
+  void ReplacePredecessor(BlockEntryInstr* old_block,
+                          BlockEntryInstr* new_block);
+
   // DiscoverBlocks computes parent_ and assigned_vars_ which are then used
   // if/when computing SSA.
   GrowableArray<intptr_t> parent_;
@@ -168,6 +178,7 @@
   GrowableArray<BlockEntryInstr*> postorder_;
   GrowableArray<BlockEntryInstr*> reverse_postorder_;
   ZoneGrowableArray<ReturnInstr*>* exits_;
+  bool invalid_dominator_tree_;
 };
 
 }  // namespace dart
diff --git a/runtime/vm/flow_graph_allocator.cc b/runtime/vm/flow_graph_allocator.cc
index ed0d262..ccc22c2 100644
--- a/runtime/vm/flow_graph_allocator.cc
+++ b/runtime/vm/flow_graph_allocator.cc
@@ -1353,8 +1353,9 @@
 
   ASSERT(split_pos < End());
 
-  // Corner case. We need to start over to find previous interval.
-  if (interval->start() == split_pos) interval = first_use_interval_;
+  // Corner case. Split position can be inside the a lifetime hole or at its
+  // end. We need to start over to find the previous interval.
+  if (split_pos <= interval->start()) interval = first_use_interval_;
 
   UseInterval* last_before_split = NULL;
   while (interval->end() <= split_pos) {
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index 12e685e..856ee44 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -366,7 +366,6 @@
 
 
 void TestGraphVisitor::MergeBranchWithComparison(ComparisonInstr* comp) {
-  ASSERT(!FLAG_enable_type_checks);
   ControlInstruction* branch;
   if (Token::IsStrictEqualityOperator(comp->kind())) {
     branch = new BranchInstr(new StrictCompareInstr(comp->kind(),
@@ -380,7 +379,7 @@
         comp->left(),
         comp->right()));
   } else {
-    branch = new BranchInstr(comp);
+    branch = new BranchInstr(comp, FLAG_enable_type_checks);
   }
   AddInstruction(branch);
   CloseFragment();
@@ -403,12 +402,12 @@
 
 
 void TestGraphVisitor::ReturnDefinition(Definition* definition) {
+  ComparisonInstr* comp = definition->AsComparison();
+  if (comp != NULL) {
+    MergeBranchWithComparison(comp);
+    return;
+  }
   if (!FLAG_enable_type_checks) {
-    ComparisonInstr* comp = definition->AsComparison();
-    if (comp != NULL) {
-      MergeBranchWithComparison(comp);
-      return;
-    }
     BooleanNegateInstr* neg = definition->AsBooleanNegate();
     if (neg != NULL) {
       MergeBranchWithNegate(neg);
@@ -1406,6 +1405,7 @@
 
 void EffectGraphVisitor::VisitArgumentDefinitionTestNode(
     ArgumentDefinitionTestNode* node) {
+  InlineBailout("EffectGraphVisitor::VisitArgumentDefinitionTestNode");
   Definition* load = BuildLoadLocal(node->saved_arguments_descriptor());
   Value* arguments_descriptor = Bind(load);
   ArgumentDefinitionTestInstr* arg_def_test =
@@ -1531,6 +1531,29 @@
 // <Expression> ::= StaticCall { function: Function
 //                               arguments: <ArgumentList> }
 void EffectGraphVisitor::VisitStaticCallNode(StaticCallNode* node) {
+  if (node->function().name() == Symbols::Identical()) {
+    // Attempt to replace identical with strcit equal early on.
+    // TODO(hausner): Evaluate if this can happen at AST building time.
+    const Class& cls = Class::Handle(node->function().Owner());
+    if (cls.IsTopLevel()) {
+      const Library& core_lib = Library::Handle(Library::CoreLibrary());
+      if (cls.library() == core_lib.raw()) {
+        ASSERT(node->arguments()->length() == 2);
+        ValueGraphVisitor for_left_value(owner(), temp_index());
+        node->arguments()->NodeAt(0)->Visit(&for_left_value);
+        Append(for_left_value);
+        ValueGraphVisitor for_right_value(owner(), temp_index());
+        node->arguments()->NodeAt(1)->Visit(&for_right_value);
+        Append(for_right_value);
+        StrictCompareInstr* comp = new StrictCompareInstr(
+            Token::kEQ_STRICT,
+            for_left_value.value(),
+            for_right_value.value());
+        ReturnDefinition(comp);
+        return;
+      }
+    }
+  }
   ZoneGrowableArray<PushArgumentInstr*>* arguments =
       new ZoneGrowableArray<PushArgumentInstr*>(node->arguments()->length());
   BuildPushArguments(*node->arguments(), arguments);
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index 87fee91..b26df19 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -393,7 +393,7 @@
     DeoptTable::SetEntry(array, i, offset, info, reason);
   }
   code.set_deopt_info_array(array);
-  const Array& object_array = Array::Handle(Array::MakeArray(object_table_));
+  const Array& object_array = Array::Handle(Array::MakeArray(object_table()));
   code.set_object_table(object_array);
 }
 
@@ -907,6 +907,12 @@
       ASSERT(Utils::IsInt(31, disp));
       return FieldAddress(array, disp);
     }
+    case kFloat32ArrayCid: {
+      const intptr_t disp =
+          offset * kFloatSize + Float32Array::data_offset();
+      ASSERT(Utils::IsInt(31, disp));
+      return FieldAddress(array, disp);
+    }
     case kFloat64ArrayCid: {
       const intptr_t disp =
           offset * kDoubleSize + Float64Array::data_offset();
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index 410f0d9..babcc50 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -35,6 +35,8 @@
     case kArrayCid:
     case kImmutableArrayCid:
       return FieldAddress(array, index, TIMES_2, sizeof(RawArray));
+    case kFloat32ArrayCid:
+      return FieldAddress(array, index, TIMES_2, Float32Array::data_offset());
     case kFloat64ArrayCid:
       return FieldAddress(array, index, TIMES_4, Float64Array::data_offset());
     default:
@@ -1105,22 +1107,13 @@
                                        LocationSummary* locs) {
   __ LoadObject(ECX, function);
   __ LoadObject(EDX, arguments_descriptor);
-  if (function.HasCode()) {
-    const Code& code = Code::Handle(function.CurrentCode());
-    ExternalLabel target_label(function.ToFullyQualifiedCString(),
-                               code.EntryPoint());
-    GenerateDartCall(deopt_id,
-                     token_pos,
-                     &target_label,
-                     PcDescriptors::kFuncCall,
-                     locs);
-  } else {
-    GenerateDartCall(deopt_id,
-                     token_pos,
-                     &StubCode::CallStaticFunctionLabel(),
-                     PcDescriptors::kFuncCall,
-                     locs);
-  }
+  // Do not use the code from the function, but let the code be patched so that
+  // we can record the outgoing edges to other code.
+  GenerateDartCall(deopt_id,
+                   token_pos,
+                   &StubCode::CallStaticFunctionLabel(),
+                   PcDescriptors::kFuncCall,
+                   locs);
   __ Drop(argument_count);
 }
 
@@ -1135,6 +1128,34 @@
 }
 
 
+// Implement equality spec: if any of the arguments is null do identity check.
+// Fallthrough calls super equality.
+void FlowGraphCompiler::EmitSuperEqualityCallPrologue(Register result,
+                                                      Label* skip_call) {
+  const Immediate raw_null =
+      Immediate(reinterpret_cast<intptr_t>(Object::null()));
+  Label check_identity, fall_through;
+  __ cmpl(Address(ESP, 0 * kWordSize), raw_null);
+  __ j(EQUAL, &check_identity, Assembler::kNearJump);
+  __ cmpl(Address(ESP, 1 * kWordSize), raw_null);
+  __ j(NOT_EQUAL, &fall_through, Assembler::kNearJump);
+
+  __ Bind(&check_identity);
+  __ popl(result);
+  __ cmpl(result, Address(ESP, 0 * kWordSize));
+  Label is_false;
+  __ j(NOT_EQUAL, &is_false, Assembler::kNearJump);
+  __ LoadObject(result, bool_true());
+  __ Drop(1);
+  __ jmp(skip_call);
+  __ Bind(&is_false);
+  __ LoadObject(result, bool_false());
+  __ Drop(1);
+  __ jmp(skip_call);
+  __ Bind(&fall_through);
+}
+
+
 void FlowGraphCompiler::LoadDoubleOrSmiToXmm(XmmRegister result,
                                              Register reg,
                                              Register temp,
diff --git a/runtime/vm/flow_graph_compiler_ia32.h b/runtime/vm/flow_graph_compiler_ia32.h
index cb215df..c15ac7b 100644
--- a/runtime/vm/flow_graph_compiler_ia32.h
+++ b/runtime/vm/flow_graph_compiler_ia32.h
@@ -157,6 +157,9 @@
                              Register result);
 
   void EmitEqualityRegConstCompare(Register reg, const Object& obj);
+  // Implement equality: if any of the arguments is null do identity check.
+  // Fallthrough calls super equality.
+  void EmitSuperEqualityCallPrologue(Register result, Label* skip_call);
 
   intptr_t StackSize() const;
 
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index 6c76290..62b01d6 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -35,6 +35,8 @@
     case kArrayCid:
     case kImmutableArrayCid:
       return FieldAddress(array, index, TIMES_4, sizeof(RawArray));
+    case kFloat32ArrayCid:
+      return FieldAddress(array, index, TIMES_2, Float32Array::data_offset());
     case kFloat64ArrayCid:
       return FieldAddress(array, index, TIMES_4, Float64Array::data_offset());
     default:
@@ -1110,22 +1112,13 @@
                                        LocationSummary* locs) {
   __ LoadObject(RBX, function);
   __ LoadObject(R10, arguments_descriptor);
-  if (function.HasCode()) {
-    const Code& code = Code::Handle(function.CurrentCode());
-    ExternalLabel target_label(function.ToFullyQualifiedCString(),
-                               code.EntryPoint());
-    GenerateDartCall(deopt_id,
-                     token_pos,
-                     &target_label,
-                     PcDescriptors::kFuncCall,
-                     locs);
-  } else {
-    GenerateDartCall(deopt_id,
-                     token_pos,
-                     &StubCode::CallStaticFunctionLabel(),
-                     PcDescriptors::kFuncCall,
-                     locs);
-  }
+  // Do not use the code from the function, but let the code be patched so that
+  // we can record the outgoing edges to other code.
+  GenerateDartCall(deopt_id,
+                   token_pos,
+                   &StubCode::CallStaticFunctionLabel(),
+                   PcDescriptors::kFuncCall,
+                   locs);
   __ Drop(argument_count);
 }
 
@@ -1140,6 +1133,34 @@
 }
 
 
+// Implement equality spec: if any of the arguments is null do identity check.
+// Fallthrough calls super equality.
+void FlowGraphCompiler::EmitSuperEqualityCallPrologue(Register result,
+                                                      Label* skip_call) {
+  const Immediate raw_null =
+      Immediate(reinterpret_cast<intptr_t>(Object::null()));
+  Label check_identity, fall_through;
+  __ cmpq(Address(RSP, 0 * kWordSize), raw_null);
+  __ j(EQUAL, &check_identity, Assembler::kNearJump);
+  __ cmpq(Address(RSP, 1 * kWordSize), raw_null);
+  __ j(NOT_EQUAL, &fall_through, Assembler::kNearJump);
+
+  __ Bind(&check_identity);
+  __ popq(result);
+  __ cmpq(result, Address(RSP, 0 * kWordSize));
+  Label is_false;
+  __ j(NOT_EQUAL, &is_false, Assembler::kNearJump);
+  __ LoadObject(result, bool_true());
+  __ Drop(1);
+  __ jmp(skip_call);
+  __ Bind(&is_false);
+  __ LoadObject(result, bool_false());
+  __ Drop(1);
+  __ jmp(skip_call);
+  __ Bind(&fall_through);
+}
+
+
 void FlowGraphCompiler::LoadDoubleOrSmiToXmm(XmmRegister result,
                                              Register reg,
                                              Register temp,
diff --git a/runtime/vm/flow_graph_compiler_x64.h b/runtime/vm/flow_graph_compiler_x64.h
index d278732..54ca7e4 100644
--- a/runtime/vm/flow_graph_compiler_x64.h
+++ b/runtime/vm/flow_graph_compiler_x64.h
@@ -157,6 +157,9 @@
                              Register result);
 
   void EmitEqualityRegConstCompare(Register reg, const Object& obj);
+  // Implement equality: if any of the arguments is null do identity check.
+  // Fallthrough calls super equality.
+  void EmitSuperEqualityCallPrologue(Register result, Label* skip_call);
 
   intptr_t StackSize() const;
 
diff --git a/runtime/vm/flow_graph_inliner.cc b/runtime/vm/flow_graph_inliner.cc
index a3d1a82..6aee0ad 100644
--- a/runtime/vm/flow_graph_inliner.cc
+++ b/runtime/vm/flow_graph_inliner.cc
@@ -14,20 +14,22 @@
 #include "vm/longjump.h"
 #include "vm/object.h"
 #include "vm/object_store.h"
+#include "vm/timer.h"
 
 namespace dart {
 
 DEFINE_FLAG(bool, trace_inlining, false, "Trace inlining");
 DEFINE_FLAG(charp, inlining_filter, NULL, "Inline only in named function");
-DEFINE_FLAG(int, inlining_size_threshold, 250,
-    "Inline only functions with up to threshold instructions (default 250)");
-DEFINE_FLAG(int, inlining_depth_threshold, 1,
-    "Inline recursively up to threshold depth (default 1)");
-DEFINE_FLAG(bool, inline_control_flow, true,
-    "Inline functions with control flow.");
+DEFINE_FLAG(int, inlining_size_threshold, 50,
+    "Inline only functions with up to threshold instructions (default 50)");
+// TODO(srdjan): set to 3 once crash in apidoc.dart is resolved.
+DEFINE_FLAG(int, inlining_depth_threshold, 3,
+    "Inline recursively up to threshold depth (default 3)");
 DECLARE_FLAG(bool, print_flow_graph);
 DECLARE_FLAG(int, deoptimization_counter_threshold);
 DECLARE_FLAG(bool, verify_compiler);
+DECLARE_FLAG(bool, compiler_stats);
+DECLARE_FLAG(bool, reject_named_argument_as_positional);
 
 #define TRACE_INLINING(statement)                                              \
   do {                                                                         \
@@ -46,6 +48,86 @@
 }
 
 
+// TODO(zerny): Remove the ChildrenVisitor and SourceLabelResetter once we have
+// moved the label/join map for control flow out of the AST and into the flow
+// graph builder.
+
+// Default visitor to traverse child nodes.
+class ChildrenVisitor : public AstNodeVisitor {
+ public:
+  ChildrenVisitor() { }
+#define DEFINE_VISIT(type, name)                                               \
+  virtual void Visit##type(type* node) { node->VisitChildren(this); }
+  NODE_LIST(DEFINE_VISIT);
+#undef DEFINE_VISIT
+};
+
+
+// Visitor to clear each AST node containing source labels.
+class SourceLabelResetter : public ChildrenVisitor {
+ public:
+  SourceLabelResetter() { }
+  virtual void VisitSequenceNode(SequenceNode* node) {
+    Reset(node, node->label());
+  }
+  virtual void VisitCaseNode(CaseNode* node) {
+    Reset(node, node->label());
+  }
+  virtual void VisitSwitchNode(SwitchNode* node) {
+    Reset(node, node->label());
+  }
+  virtual void VisitWhileNode(WhileNode* node) {
+    Reset(node, node->label());
+  }
+  virtual void VisitDoWhileNode(DoWhileNode* node) {
+    Reset(node, node->label());
+  }
+  virtual void VisitForNode(ForNode* node) {
+    Reset(node, node->label());
+  }
+  virtual void VisitJumpNode(JumpNode* node) {
+    Reset(node, node->label());
+  }
+  void Reset(AstNode* node, SourceLabel* lbl) {
+    node->VisitChildren(this);
+    if (lbl == NULL) return;
+    lbl->join_for_break_ = NULL;
+    lbl->join_for_continue_ = NULL;
+  }
+};
+
+
+// Helper to create a parameter stub from an actual argument.
+static Definition* CreateParameterStub(intptr_t i,
+                                       Value* argument,
+                                       FlowGraph* graph) {
+  ConstantInstr* constant = argument->definition()->AsConstant();
+  if (constant != NULL) {
+    return new ConstantInstr(constant->value());
+  } else {
+    return new ParameterInstr(i, graph->graph_entry());
+  }
+}
+
+
+// Helper to get the default value of a formal parameter.
+static ConstantInstr* GetDefaultValue(intptr_t i,
+                                      const ParsedFunction& parsed_function) {
+  return new ConstantInstr(Object::ZoneHandle(
+      parsed_function.default_parameter_values().At(i)));
+}
+
+
+// Pair of an argument name and its value.
+struct NamedArgument : ValueObject {
+ public:
+  String* name;
+  Value* value;
+  NamedArgument(String* name, Value* value)
+    : name(name), value(value) { }
+};
+
+
 // A collection of call sites to consider for inlining.
 class CallSites : public FlowGraphVisitor {
  public:
@@ -100,7 +182,7 @@
   }
 
   void VisitStaticCall(StaticCallInstr* call) {
-    if (call->function().is_inlinable()) static_calls_.Add(call);
+    if (call->function().IsInlineable()) static_calls_.Add(call);
   }
 
  private:
@@ -122,7 +204,8 @@
         inlined_size_(0),
         inlining_depth_(1),
         collected_call_sites_(NULL),
-        inlining_call_sites_(NULL) { }
+        inlining_call_sites_(NULL),
+        function_cache_() { }
 
   void InlineCalls() {
     // If inlining depth is less then one abort.
@@ -162,6 +245,7 @@
 
  private:
   bool TryInlining(const Function& function,
+                   const Array& argument_names,
                    GrowableArray<Value*>* arguments,
                    Definition* call) {
     TRACE_INLINING(OS::Print("  => %s (deopt count %d)\n",
@@ -169,20 +253,11 @@
                              function.deoptimization_counter()));
 
     // Abort if the inlinable bit on the function is low.
-    if (!function.is_inlinable()) {
+    if (!function.IsInlineable()) {
       TRACE_INLINING(OS::Print("     Bailout: not inlinable\n"));
       return false;
     }
 
-    // Abort if the callee has optional parameters.
-    if (function.HasOptionalParameters()) {
-      TRACE_INLINING(OS::Print("     Bailout: optional parameters\n"));
-      return false;
-    }
-
-    // Assuming no optional parameters the actual/formal count should match.
-    ASSERT(arguments->length() == function.num_fixed_parameters());
-
     // Abort if this function has deoptimized too much.
     if (function.deoptimization_counter() >=
         FLAG_deoptimization_counter_threshold) {
@@ -205,6 +280,16 @@
       return false;
     }
 
+    // Abort if we are running legacy support for optional parameters.
+    if (!FLAG_reject_named_argument_as_positional &&
+        function.HasOptionalPositionalParameters() &&
+        (!argument_names.IsNull() && (argument_names.Length() > 0))) {
+      function.set_is_inlinable(false);
+      TRACE_INLINING(OS::Print(
+          "     Bailout: named optional positional parameter\n"));
+      return false;
+    }
+
     Isolate* isolate = Isolate::Current();
     // Save and clear IC data.
     const Array& prev_ic_data = Array::Handle(isolate->ic_data_array());
@@ -218,9 +303,14 @@
     isolate->set_long_jump_base(&jump);
     if (setjmp(*jump.Set()) == 0) {
       // Parse the callee function.
-      ParsedFunction parsed_function(function);
-      Parser::ParseFunction(&parsed_function);
-      parsed_function.AllocateVariables();
+      bool in_cache;
+      ParsedFunction* parsed_function;
+      {
+        TimerScope timer(FLAG_compiler_stats,
+                         &CompilerStats::graphinliner_parse_timer,
+                         isolate);
+        parsed_function = GetParsedFunction(function, &in_cache);
+      }
 
       // Load IC data for the callee.
       if (function.HasCode()) {
@@ -230,33 +320,74 @@
       }
 
       // Build the callee graph.
-      FlowGraphBuilder builder(parsed_function);
+      FlowGraphBuilder builder(*parsed_function);
       builder.SetInitialBlockId(caller_graph_->max_block_id());
-      FlowGraph* callee_graph =
-          builder.BuildGraph(FlowGraphBuilder::kValueContext);
-
-      // Abort if the callee graph contains control flow.
-      if (!FLAG_inline_control_flow &&
-          (callee_graph->preorder().length() != 2)) {
-        function.set_is_inlinable(false);
-        isolate->set_long_jump_base(base);
-        isolate->set_ic_data_array(prev_ic_data.raw());
-        TRACE_INLINING(OS::Print("     Bailout: control flow\n"));
-        return false;
+      FlowGraph* callee_graph;
+      {
+        TimerScope timer(FLAG_compiler_stats,
+                         &CompilerStats::graphinliner_build_timer,
+                         isolate);
+        callee_graph = builder.BuildGraph(FlowGraphBuilder::kValueContext);
       }
 
-      // Compute SSA on the callee graph, catching bailouts.
-      callee_graph->ComputeSSA(next_ssa_temp_index_);
-      callee_graph->ComputeUseLists();
+      // The parameter stubs are a copy of the actual arguments providing
+      // concrete information about the values, for example constant values,
+      // without linking between the caller and callee graphs.
+      // TODO(zerny): Put more information in the stubs, eg, type information.
+      GrowableArray<Definition*> param_stubs(function.NumParameters());
 
-      // TODO(zerny): Do more optimization passes on the callee graph.
-      FlowGraphOptimizer optimizer(callee_graph);
-      optimizer.ApplyICData();
-      callee_graph->ComputeUseLists();
+      // Create a parameter stub for each fixed positional parameter.
+      for (intptr_t i = 0; i < function.num_fixed_parameters(); ++i) {
+        param_stubs.Add(CreateParameterStub(i, (*arguments)[i], callee_graph));
+      }
+
+      // If the callee has optional parameters, rebuild the argument and stub
+      // arrays so that actual arguments are in one-to-one with the formal
+      // parameters.
+      if (function.HasOptionalParameters()) {
+        TRACE_INLINING(OS::Print("     adjusting for optional parameters\n"));
+        AdjustForOptionalParameters(*parsed_function,
+                                    argument_names,
+                                    arguments,
+                                    &param_stubs,
+                                    callee_graph);
+        // Add a bogus parameter at the end for the (unused) argument descriptor
+        // slot. The parser allocates an extra slot between locals and
+        // parameters to hold the argument descriptor in case it escapes.  We
+        // currently bailout if there are argument test expressions or escaping
+        // variables so this parameter and the stack slot are not used.
+        if (parsed_function->GetSavedArgumentsDescriptorVar() != NULL) {
+          param_stubs.Add(new ParameterInstr(
+              function.NumParameters(), callee_graph->graph_entry()));
+        }
+      }
+
+      // After treating optional parameters the actual/formal count must match.
+      ASSERT(arguments->length() == function.NumParameters());
+      ASSERT(param_stubs.length() == callee_graph->parameter_count());
+
+      {
+        TimerScope timer(FLAG_compiler_stats,
+                         &CompilerStats::graphinliner_ssa_timer,
+                         isolate);
+        // Compute SSA on the callee graph, catching bailouts.
+        callee_graph->ComputeSSA(next_ssa_temp_index_, &param_stubs);
+        callee_graph->ComputeUseLists();
+      }
+
+      {
+        TimerScope timer(FLAG_compiler_stats,
+                         &CompilerStats::graphinliner_opt_timer,
+                         isolate);
+        // TODO(zerny): Do more optimization passes on the callee graph.
+        FlowGraphOptimizer optimizer(callee_graph);
+        optimizer.ApplyICData();
+        callee_graph->ComputeUseLists();
+      }
 
       if (FLAG_trace_inlining && FLAG_print_flow_graph) {
         OS::Print("Callee graph for inlining %s\n",
-                  parsed_function.function().ToFullyQualifiedCString());
+                  function.ToFullyQualifiedCString());
         FlowGraphPrinter printer(*callee_graph);
         printer.PrintBlocks();
       }
@@ -278,35 +409,51 @@
         collected_call_sites_->FindCallSites(callee_graph);
       }
 
-      // Plug result in the caller graph.
-      caller_graph_->InlineCall(call, callee_graph);
-      next_ssa_temp_index_ = caller_graph_->max_virtual_register_number();
+      {
+        TimerScope timer(FLAG_compiler_stats,
+                         &CompilerStats::graphinliner_subst_timer,
+                         isolate);
 
-      // Remove push arguments of the call.
-      for (intptr_t i = 0; i < call->ArgumentCount(); ++i) {
-        PushArgumentInstr* push = call->ArgumentAt(i);
-        push->ReplaceUsesWith(push->value()->definition());
-        push->RemoveFromGraph();
-      }
+        // Plug result in the caller graph.
+        caller_graph_->InlineCall(call, callee_graph);
+        next_ssa_temp_index_ = caller_graph_->max_virtual_register_number();
 
-      // Replace formal parameters with actuals.
-      intptr_t arg_index = 0;
-      GrowableArray<Definition*>* defns =
-          callee_graph->graph_entry()->initial_definitions();
-      for (intptr_t i = 0; i < defns->length(); ++i) {
-        ParameterInstr* param = (*defns)[i]->AsParameter();
-        if (param != NULL) {
-          param->ReplaceUsesWith((*arguments)[arg_index++]->definition());
+        // Remove push arguments of the call.
+        for (intptr_t i = 0; i < call->ArgumentCount(); ++i) {
+          PushArgumentInstr* push = call->ArgumentAt(i);
+          push->ReplaceUsesWith(push->value()->definition());
+          push->RemoveFromGraph();
+        }
+
+        // Replace each stub with the actual argument or the caller's constant.
+        // Nulls denote optional parameters for which no actual was given.
+        for (intptr_t i = 0; i < arguments->length(); ++i) {
+          Definition* stub = param_stubs[i];
+          Value* actual = (*arguments)[i];
+          if (actual != NULL) stub->ReplaceUsesWith(actual->definition());
+        }
+
+        // Replace remaining constants with uses by constants in the caller's
+        // initial definitions.
+        GrowableArray<Definition*>* defns =
+            callee_graph->graph_entry()->initial_definitions();
+        for (intptr_t i = 0; i < defns->length(); ++i) {
+          ConstantInstr* constant = (*defns)[i]->AsConstant();
+          if (constant == NULL ||
+              ((constant->input_use_list() == NULL) &&
+               (constant->env_use_list() == NULL))) {
+            continue;
+          }
+          constant->ReplaceUsesWith(
+            caller_graph_->AddConstantToInitialDefinitions(constant->value()));
         }
       }
-      ASSERT(arg_index == arguments->length());
-
-      // Replace callee's null constant with caller's null constant.
-      callee_graph->graph_entry()->constant_null()->ReplaceUsesWith(
-          caller_graph_->graph_entry()->constant_null());
 
       TRACE_INLINING(OS::Print("     Success\n"));
 
+      // Add the function to the cache.
+      if (!in_cache) function_cache_.Add(parsed_function);
+
       // Check that inlining maintains use lists.
       DEBUG_ASSERT(!FLAG_verify_compiler || caller_graph_->ValidateUseLists());
 
@@ -329,6 +476,25 @@
     }
   }
 
+  // Parse a function reusing the cache if possible.
+  ParsedFunction* GetParsedFunction(const Function& function, bool* in_cache) {
+    // TODO(zerny): Use a hash map for the cache.
+    for (intptr_t i = 0; i < function_cache_.length(); ++i) {
+      ParsedFunction* parsed_function = function_cache_[i];
+      if (parsed_function->function().raw() == function.raw()) {
+        *in_cache = true;
+        SourceLabelResetter reset;
+        parsed_function->node_sequence()->Visit(&reset);
+        return parsed_function;
+      }
+    }
+    *in_cache = false;
+    ParsedFunction* parsed_function = new ParsedFunction(function);
+    Parser::ParseFunction(parsed_function);
+    parsed_function->AllocateVariables();
+    return parsed_function;
+  }
+
   void InlineStaticCalls() {
     const GrowableArray<StaticCallInstr*>& calls =
         *inlining_call_sites_->static_calls();
@@ -339,7 +505,7 @@
       for (int i = 0; i < call->ArgumentCount(); ++i) {
         arguments.Add(call->ArgumentAt(i)->value());
       }
-      TryInlining(call->function(), &arguments, call);
+      TryInlining(call->function(), call->argument_names(), &arguments, call);
     }
   }
 
@@ -361,7 +527,10 @@
       for (int i = 1; i < call->ArgumentCount(); ++i) {
         arguments.Add(call->ArgumentAt(i)->value());
       }
-      TryInlining(closure->function(), &arguments, call);
+      TryInlining(closure->function(),
+                  call->argument_names(),
+                  &arguments,
+                  call);
     }
   }
 
@@ -375,19 +544,114 @@
       const ICData& ic_data = instr->ic_data();
       const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0));
       if (instr->with_checks()) {
-        TRACE_INLINING(OS::Print("     Bailout: %"Pd" checks target '%s'\n",
-                                 ic_data.NumberOfChecks(),
-                                 target.ToCString()));
+        TRACE_INLINING(OS::Print(
+          "  => %s (deopt count %d)\n     Bailout: %"Pd" checks\n",
+          target.ToCString(),
+          target.deoptimization_counter(),
+          ic_data.NumberOfChecks()));
         continue;
       }
       GrowableArray<Value*> arguments(instr->ArgumentCount());
       for (int i = 0; i < instr->ArgumentCount(); ++i) {
         arguments.Add(instr->ArgumentAt(i)->value());
       }
-      TryInlining(target, &arguments, instr);
+      TryInlining(target,
+                  instr->instance_call()->argument_names(),
+                  &arguments,
+                  instr);
     }
   }
 
+  void AdjustForOptionalParameters(const ParsedFunction& parsed_function,
+                                   const Array& argument_names,
+                                   GrowableArray<Value*>* arguments,
+                                   GrowableArray<Definition*>* param_stubs,
+                                   FlowGraph* callee_graph) {
+    const Function& function = parsed_function.function();
+    // The language and this code does not support both optional positional
+    // and optional named parameters for the same function.
+    ASSERT(!function.HasOptionalPositionalParameters() ||
+           !function.HasOptionalNamedParameters());
+
+    intptr_t arg_count = arguments->length();
+    intptr_t param_count = function.NumParameters();
+    intptr_t fixed_param_count = function.num_fixed_parameters();
+    ASSERT(fixed_param_count <= arg_count);
+    ASSERT(arg_count <= param_count);
+
+    if (function.HasOptionalPositionalParameters()) {
+      // Create a stub for each optional positional parameters with an actual.
+      for (intptr_t i = fixed_param_count; i < arg_count; ++i) {
+        param_stubs->Add(CreateParameterStub(i, (*arguments)[i], callee_graph));
+      }
+      ASSERT(function.NumOptionalPositionalParameters() ==
+             (param_count - fixed_param_count));
+      // For each optional positional parameter without an actual, add its
+      // default value.
+      for (intptr_t i = arg_count; i < param_count; ++i) {
+        const Object& object =
+            Object::ZoneHandle(
+                parsed_function.default_parameter_values().At(
+                    i - fixed_param_count));
+        ConstantInstr* constant = new ConstantInstr(object);
+        arguments->Add(NULL);
+        param_stubs->Add(constant);
+      }
+      return;
+    }
+
+    ASSERT(function.HasOptionalNamedParameters());
+
+    // Passed arguments must match fixed parameters plus named arguments.
+    intptr_t argument_names_count =
+        (argument_names.IsNull()) ? 0 : argument_names.Length();
+    ASSERT(arg_count == (fixed_param_count + argument_names_count));
+
+    // Fast path when no optional named parameters are given.
+    if (argument_names_count == 0) {
+      for (intptr_t i = 0; i < param_count - fixed_param_count; ++i) {
+        arguments->Add(NULL);
+        param_stubs->Add(GetDefaultValue(i, parsed_function));
+      }
+      return;
+    }
+
+    // Otherwise, build a collection of name/argument pairs.
+    GrowableArray<NamedArgument> named_args(argument_names_count);
+    for (intptr_t i = 0; i < argument_names.Length(); ++i) {
+      String& arg_name = String::Handle(Isolate::Current());
+      arg_name ^= argument_names.At(i);
+      named_args.Add(
+          NamedArgument(&arg_name, (*arguments)[i + fixed_param_count]));
+    }
+
+    // Truncate the arguments array to just fixed parameters.
+    arguments->TruncateTo(fixed_param_count);
+
+    // For each optional named parameter, add the actual argument or its
+    // default if no argument is passed.
+    for (intptr_t i = fixed_param_count; i < param_count; ++i) {
+      String& param_name = String::Handle(function.ParameterNameAt(i));
+      // Search for and add the named argument.
+      Value* arg = NULL;
+      for (intptr_t j = 0; j < named_args.length(); ++j) {
+        if (param_name.Equals(*named_args[j].name)) {
+          arg = named_args[j].value;
+          break;
+        }
+      }
+      arguments->Add(arg);
+      // Create a stub for the argument or use the parameter's default value.
+      if (arg != NULL) {
+        param_stubs->Add(CreateParameterStub(i, arg, callee_graph));
+      } else {
+        param_stubs->Add(
+            GetDefaultValue(i - fixed_param_count, parsed_function));
+      }
+    }
+  }
+
+
   FlowGraph* caller_graph_;
   intptr_t next_ssa_temp_index_;
   bool inlined_;
@@ -396,6 +660,7 @@
   intptr_t inlining_depth_;
   CallSites* collected_call_sites_;
   CallSites* inlining_call_sites_;
+  GrowableArray<ParsedFunction*> function_cache_;
 
   DISALLOW_COPY_AND_ASSIGN(CallSiteInliner);
 };
@@ -424,6 +689,7 @@
   inliner.InlineCalls();
 
   if (inliner.inlined()) {
+    flow_graph_->RepairGraphAfterInlining();
     if (FLAG_trace_inlining) {
       OS::Print("Inlining growth factor: %f\n", inliner.GrowthFactor());
       if (FLAG_print_flow_graph) {
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index 2bf97c7..cc887c7 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -28,6 +28,8 @@
 DEFINE_FLAG(bool, trace_range_analysis, false, "Trace range analysis progress");
 DEFINE_FLAG(bool, trace_constant_propagation, false,
             "Print constant propagation and useless code elimination.");
+DEFINE_FLAG(bool, array_bounds_check_elimination, true,
+            "Eliminate redundant bounds checks.");
 
 
 void FlowGraphOptimizer::ApplyICData() {
@@ -427,8 +429,13 @@
   // Type propagation has not run yet, we cannot eliminate the check.
   const ICData& unary_checks =
       ICData::ZoneHandle(call->ic_data()->AsUnaryClassChecks());
-  CheckClassInstr* check =
-      new CheckClassInstr(value, call->deopt_id(), unary_checks);
+  Instruction* check = NULL;
+  if ((unary_checks.NumberOfChecks() == 1) &&
+      (unary_checks.GetReceiverClassIdAt(0) == kSmiCid)) {
+    check = new CheckSmiInstr(value, call->deopt_id());
+  } else {
+    check = new CheckClassInstr(value, call->deopt_id(), unary_checks);
+  }
   InsertBefore(call, check, call->env(), Definition::kEffect);
 }
 
@@ -491,12 +498,13 @@
 
 bool FlowGraphOptimizer::TryReplaceWithStoreIndexed(InstanceCallInstr* call) {
   const intptr_t class_id = ReceiverClassId(call);
-  ICData& value_check = ICData::Handle();
+  ICData& value_check = ICData::ZoneHandle();
   switch (class_id) {
     case kArrayCid:
     case kGrowableObjectArrayCid:
       // Acceptable store index classes.
       break;
+    case kFloat32ArrayCid:
     case kFloat64ArrayCid: {
       // Check that value is always double.
       value_check = call->ic_data()->AsUnaryClassChecksForArgNr(2);
@@ -538,6 +546,7 @@
         type_args = new Value(load_type_args);
         break;
       }
+      case kFloat32ArrayCid:
       case kFloat64ArrayCid: {
         ConstantInstr* null_constant = new ConstantInstr(Object::ZoneHandle());
         InsertBefore(call, null_constant, NULL, Definition::kValue);
@@ -567,7 +576,7 @@
   Value* value = call->ArgumentAt(2)->value();
   // Check if store barrier is needed.
   bool needs_store_barrier = true;
-  if (class_id == kFloat64ArrayCid) {
+  if ((class_id == kFloat32ArrayCid) || (class_id == kFloat64ArrayCid)) {
     ASSERT(!value_check.IsNull());
     InsertBefore(call,
                  new CheckClassInstr(value->Copy(),
@@ -600,6 +609,7 @@
     case kArrayCid:
     case kImmutableArrayCid:
     case kGrowableObjectArrayCid:
+    case kFloat32ArrayCid:
     case kFloat64ArrayCid:
       // Acceptable load index classes.
       break;
@@ -811,9 +821,7 @@
                  new CheckSmiInstr(value->Copy(), call->deopt_id()),
                  call->env(),
                  Definition::kEffect);
-    unary_op = new UnarySmiOpInstr(op_kind,
-                                   (op_kind == Token::kNEGATE) ? call : NULL,
-                                   value);
+    unary_op = new UnarySmiOpInstr(op_kind, call, value);
   } else if ((op_kind == Token::kBIT_NOT) &&
              HasOnlySmiOrMint(*call->ic_data()) &&
              FlowGraphCompiler::SupportsUnboxedMints()) {
@@ -914,7 +922,8 @@
 
 void FlowGraphOptimizer::InlineArrayLengthGetter(InstanceCallInstr* call,
                                                  intptr_t length_offset,
-                                                 bool is_immutable) {
+                                                 bool is_immutable,
+                                                 MethodRecognizer::Kind kind) {
   // Check receiver class.
   AddCheckClass(call, call->ArgumentAt(0)->value()->Copy());
 
@@ -924,6 +933,7 @@
       Type::ZoneHandle(Type::SmiType()),
       is_immutable);
   load->set_result_cid(kSmiCid);
+  load->set_recognized_kind(kind);
   call->ReplaceWith(load, current_iterator());
   RemovePushArguments(call);
 }
@@ -946,6 +956,7 @@
       Array::length_offset(),
       Type::ZoneHandle(Type::SmiType()));
   length_load->set_result_cid(kSmiCid);
+  length_load->set_recognized_kind(MethodRecognizer::kObjectArrayLength);
 
   call->ReplaceWith(length_load, current_iterator());
   RemovePushArguments(call);
@@ -974,7 +985,7 @@
 }
 
 
-void FlowGraphOptimizer::InlineStringIsEmptyTester(InstanceCallInstr* call) {
+void FlowGraphOptimizer::InlineStringIsEmptyGetter(InstanceCallInstr* call) {
   // Check receiver class.
   AddCheckClass(call, call->ArgumentAt(0)->value()->Copy());
 
@@ -1026,12 +1037,16 @@
     switch (recognized_kind) {
       case MethodRecognizer::kObjectArrayLength:
       case MethodRecognizer::kImmutableArrayLength:
-        InlineArrayLengthGetter(call, Array::length_offset(), true);
+        InlineArrayLengthGetter(call,
+                                Array::length_offset(),
+                                true,
+                                recognized_kind);
         break;
       case MethodRecognizer::kGrowableArrayLength:
         InlineArrayLengthGetter(call,
                                 GrowableObjectArray::length_offset(),
-                                false);
+                                false,
+                                recognized_kind);
         break;
       default:
         UNREACHABLE();
@@ -1053,6 +1068,15 @@
     return true;
   }
 
+  if (recognized_kind == MethodRecognizer::kStringBaseIsEmpty) {
+    if (!ic_data.HasOneTarget()) {
+      // Target is not only StringBase_get_isEmpty.
+      return false;
+    }
+    InlineStringIsEmptyGetter(call);
+    return true;
+  }
+
   return false;
 }
 
@@ -1071,15 +1095,6 @@
   MethodRecognizer::Kind recognized_kind =
       MethodRecognizer::RecognizeKind(target);
 
-  if ((recognized_kind == MethodRecognizer::kDoubleToDouble) &&
-      (class_ids[0] == kDoubleCid)) {
-    DoubleToDoubleInstr* d2d_instr =
-        new DoubleToDoubleInstr(call->ArgumentAt(0)->value(), call);
-    call->ReplaceWith(d2d_instr, current_iterator());
-    RemovePushArguments(call);
-    return true;
-  }
-
   if ((recognized_kind == MethodRecognizer::kIntegerToDouble) &&
       (class_ids[0] == kSmiCid)) {
     SmiToDoubleInstr* s2d_instr = new SmiToDoubleInstr(call);
@@ -1089,21 +1104,6 @@
     return true;
   }
 
-  const intptr_t cid0 = class_ids[0];
-  if ((recognized_kind == MethodRecognizer::kIntegerToInteger) &&
-      ((cid0 == kSmiCid) || (cid0 == kMintCid) || (cid0 == kBigintCid))) {
-    // TODO(srdjan): implement also for mixed integer cids.
-    InsertBefore(call,
-                 new CheckSmiInstr(call->ArgumentAt(0)->value()->Copy(),
-                                   call->deopt_id()),
-                 call->env(),
-                 Definition::kEffect);
-    call->ReplaceUsesWith(call->ArgumentAt(0));
-    RemovePushArguments(call);
-    call->RemoveFromGraph();
-    return true;
-  }
-
   if ((recognized_kind == MethodRecognizer::kDoubleToInteger) &&
       (class_ids[0] == kDoubleCid)) {
     AddCheckClass(call, call->ArgumentAt(0)->value()->Copy());
@@ -1114,15 +1114,6 @@
     return true;
   }
 
-  if (recognized_kind == MethodRecognizer::kStringBaseIsEmpty) {
-    if (!ic_data.HasOneTarget()) {
-      // Target is not only StringBase_get_length.
-      return false;
-    }
-    InlineStringIsEmptyTester(call);
-    return true;
-  }
-
   return false;
 }
 
@@ -1169,9 +1160,7 @@
     const intptr_t kMaxChecks = 4;
     if (instr->ic_data()->NumberOfChecks() <= kMaxChecks) {
       bool call_with_checks;
-      // TODO(srdjan): Add check class instr for mixed smi/non-smi.
-      if (unary_checks.HasOneTarget() &&
-          (unary_checks.GetReceiverClassIdAt(0) != kSmiCid)) {
+      if (unary_checks.HasOneTarget()) {
         // Type propagation has not run yet, we cannot eliminate the check.
         AddCheckClass(instr, instr->ArgumentAt(0)->value()->Copy());
         // Call can still deoptimize, do not detach environment from instr.
@@ -1362,11 +1351,11 @@
   smi_or_null.Add(kNullCid);
   if (ICDataHasOnlyReceiverArgumentClassIds(
         *comp->ic_data(), smi_or_null, smi_or_null)) {
-    ICData& unary_checks =
+    const ICData& unary_checks_0 =
         ICData::ZoneHandle(comp->ic_data()->AsUnaryClassChecks());
     const intptr_t deopt_id = comp->deopt_id();
-    if ((unary_checks.NumberOfChecks() == 1) &&
-        (unary_checks.GetReceiverClassIdAt(0) == kSmiCid)) {
+    if ((unary_checks_0.NumberOfChecks() == 1) &&
+        (unary_checks_0.GetReceiverClassIdAt(0) == kSmiCid)) {
       // Smi only.
       optimizer->InsertBefore(
         instr,
@@ -1377,14 +1366,15 @@
       // Smi or NULL.
       optimizer->InsertBefore(
         instr,
-        new CheckClassInstr(comp->left()->Copy(), deopt_id, unary_checks),
+        new CheckClassInstr(comp->left()->Copy(), deopt_id, unary_checks_0),
         instr->env(),
         Definition::kEffect);
     }
 
-    unary_checks = comp->ic_data()->AsUnaryClassChecksForArgNr(1);
-    if ((unary_checks.NumberOfChecks() == 1) &&
-        (unary_checks.GetReceiverClassIdAt(0) == kSmiCid)) {
+    const ICData& unary_checks_1 =
+        ICData::ZoneHandle(comp->ic_data()->AsUnaryClassChecksForArgNr(1));
+    if ((unary_checks_1.NumberOfChecks() == 1) &&
+        (unary_checks_1.GetReceiverClassIdAt(0) == kSmiCid)) {
       // Smi only.
       optimizer->InsertBefore(
         instr,
@@ -1395,7 +1385,7 @@
       // Smi or NULL.
       optimizer->InsertBefore(
         instr,
-        new CheckClassInstr(comp->right()->Copy(), deopt_id, unary_checks),
+        new CheckClassInstr(comp->right()->Copy(), deopt_id, unary_checks_1),
         instr->env(),
         Definition::kEffect);
     }
@@ -1599,7 +1589,9 @@
 // Range analysis for smi values.
 class RangeAnalysis : public ValueObject {
  public:
-  explicit RangeAnalysis(FlowGraph* flow_graph) : flow_graph_(flow_graph) { }
+  explicit RangeAnalysis(FlowGraph* flow_graph)
+      : flow_graph_(flow_graph),
+        marked_defns_(NULL) { }
 
   // Infer ranges for all values and remove overflow checks from binary smi
   // operations when proven redundant.
@@ -1632,43 +1624,42 @@
                            Instruction* dom,
                            Definition* other);
 
-  // Propagate range information until fix-point is reached.
+
+  // Walk the dominator tree and infer ranges for smi values.
   void InferRanges();
+  void InferRangesRecursive(BlockEntryInstr* block);
 
-  void ProcessWorklist(Definition::RangeOperator op);
+  enum Direction {
+    kUnknown,
+    kPositive,
+    kNegative,
+    kBoth
+  };
 
-  // Walk the dominator tree, initialize ranges for smi values and place them
-  // to the worklist.
-  void InitializeRangesRecursive(BlockEntryInstr* block);
+  Range* InferInductionVariableRange(JoinEntryInstr* loop_header,
+                                     PhiInstr* var);
+
+  void ResetWorklist();
+  void MarkDefinition(Definition* defn);
+
+  static Direction ToDirection(Value* val);
+
+  static Direction Invert(Direction direction) {
+    return (direction == kPositive) ? kNegative : kPositive;
+  }
+
+  static void UpdateDirection(Direction* direction,
+                              Direction new_direction) {
+    if (*direction != new_direction) {
+      if (*direction != kUnknown) new_direction = kBoth;
+      *direction = new_direction;
+    }
+  }
 
   // Remove artificial Constraint instructions and replace them with actual
   // unconstrained definitions.
   void RemoveConstraints();
 
-  void CreateWorklists();
-
-  void AddToWorklist(Definition* value) {
-    const intptr_t index = value->ssa_temp_index();
-    if (!in_worklist_->Contains(index)) {
-      in_worklist_->Add(index);
-      worklist_.Add(value);
-    }
-  }
-
-  bool IsWorklistEmpty() const {
-    return worklist_.is_empty();
-  }
-
-  Definition* RemoveLastFromWorklist() {
-    Definition* defn = worklist_.Last();
-    worklist_.RemoveLast();
-    ASSERT(in_worklist_->Contains(defn->ssa_temp_index()));
-    in_worklist_->Remove(defn->ssa_temp_index());
-    return defn;
-  }
-
-  void SwapWorklists();
-
   FlowGraph* flow_graph_;
 
   GrowableArray<Definition*> smi_values_;  // Value that are known to be smi.
@@ -1681,9 +1672,9 @@
   // Bitvector for a quick filtering of known smi values.
   BitVector* smi_definitions_;
 
-  // Worklist used during range propagation.
+  // Worklist for induction variables analysis.
   GrowableArray<Definition*> worklist_;
-  BitVector* in_worklist_;
+  BitVector* marked_defns_;
 
   DISALLOW_COPY_AND_ASSIGN(RangeAnalysis);
 };
@@ -1938,71 +1929,187 @@
 }
 
 
-void RangeAnalysis::InitializeRangesRecursive(BlockEntryInstr* block) {
+void RangeAnalysis::ResetWorklist() {
+  if (marked_defns_ == NULL) {
+    marked_defns_ = new BitVector(flow_graph_->current_ssa_temp_index());
+  } else {
+    marked_defns_->Clear();
+  }
+  worklist_.Clear();
+}
+
+
+void RangeAnalysis::MarkDefinition(Definition* defn) {
+  // Unwrap constrained value.
+  while (defn->IsConstraint()) {
+    defn = defn->AsConstraint()->value()->definition();
+  }
+
+  if (!marked_defns_->Contains(defn->ssa_temp_index())) {
+    worklist_.Add(defn);
+    marked_defns_->Add(defn->ssa_temp_index());
+  }
+}
+
+
+RangeAnalysis::Direction RangeAnalysis::ToDirection(Value* val) {
+  if (val->BindsToConstant()) {
+    return (Smi::Cast(val->BoundConstant()).Value() >= 0) ? kPositive
+                                                          : kNegative;
+  } else if (val->definition()->range() != NULL) {
+    Range* range = val->definition()->range();
+    if (Range::ConstantMin(range).value() >= 0) {
+      return kPositive;
+    } else if (Range::ConstantMax(range).value() <= 0) {
+      return kNegative;
+    }
+  }
+  return kUnknown;
+}
+
+
+Range* RangeAnalysis::InferInductionVariableRange(JoinEntryInstr* loop_header,
+                                                  PhiInstr* var) {
+  BitVector* loop_info = loop_header->loop_info();
+
+  Definition* initial_value = NULL;
+  Direction direction = kUnknown;
+
+  ResetWorklist();
+  MarkDefinition(var);
+  while (!worklist_.is_empty()) {
+    Definition* defn = worklist_.Last();
+    worklist_.RemoveLast();
+
+    if (defn->IsPhi()) {
+      PhiInstr* phi = defn->AsPhi();
+      for (intptr_t i = 0; i < phi->InputCount(); i++) {
+        Definition* defn = phi->InputAt(i)->definition();
+
+        if (!loop_info->Contains(defn->GetBlock()->preorder_number())) {
+          // The value is coming from outside of the loop.
+          if (initial_value == NULL) {
+            initial_value = defn;
+            continue;
+          } else if (initial_value == defn) {
+            continue;
+          } else {
+            return NULL;
+          }
+        }
+
+        MarkDefinition(defn);
+      }
+    } else if (defn->IsBinarySmiOp()) {
+      BinarySmiOpInstr* binary_op = defn->AsBinarySmiOp();
+
+      switch (binary_op->op_kind()) {
+        case Token::kADD: {
+          const Direction growth_right =
+              ToDirection(binary_op->right());
+          if (growth_right != kUnknown) {
+            UpdateDirection(&direction, growth_right);
+            MarkDefinition(binary_op->left()->definition());
+            break;
+          }
+
+          const Direction growth_left =
+              ToDirection(binary_op->left());
+          if (growth_left != kUnknown) {
+            UpdateDirection(&direction, growth_left);
+            MarkDefinition(binary_op->right()->definition());
+            break;
+          }
+
+          return NULL;
+        }
+
+        case Token::kSUB: {
+          const Direction growth_right =
+              ToDirection(binary_op->right());
+          if (growth_right != kUnknown) {
+            UpdateDirection(&direction, Invert(growth_right));
+            MarkDefinition(binary_op->left()->definition());
+            break;
+          }
+          return NULL;
+        }
+
+        default:
+          return NULL;
+      }
+    } else {
+      return NULL;
+    }
+  }
+
+
+  // We transitively discovered all dependencies of the given phi
+  // and confirmed that it depends on a single value coming from outside of
+  // the loop and some linear combinations of itself.
+  // Compute the range based on initial value and the direction of the growth.
+  switch (direction) {
+    case kPositive:
+      return new Range(RangeBoundary::FromDefinition(initial_value),
+                       RangeBoundary::MaxSmi());
+
+    case kNegative:
+      return new Range(RangeBoundary::MinSmi(),
+                       RangeBoundary::FromDefinition(initial_value));
+
+    case kUnknown:
+    case kBoth:
+      return Range::Unknown();
+  }
+
+  UNREACHABLE();
+  return NULL;
+}
+
+
+void RangeAnalysis::InferRangesRecursive(BlockEntryInstr* block) {
   JoinEntryInstr* join = block->AsJoinEntry();
   if (join != NULL) {
+    const bool is_loop_header = (join->loop_info() != NULL);
     for (PhiIterator it(join); !it.Done(); it.Advance()) {
       PhiInstr* phi = it.Current();
       if (smi_definitions_->Contains(phi->ssa_temp_index())) {
-        phi->InferRange(Definition::kRangeInit);
-        AddToWorklist(phi);
+        if (is_loop_header) {
+          // Try recognizing simple induction variables.
+          Range* range = InferInductionVariableRange(join, phi);
+          if (range != NULL) {
+            phi->range_ = range;
+            continue;
+          }
+        }
+
+        phi->InferRange();
       }
     }
   }
 
   for (ForwardInstructionIterator it(block); !it.Done(); it.Advance()) {
-    Definition* defn = it.Current()->AsDefinition();
+    Instruction* current = it.Current();
+
+    Definition* defn = current->AsDefinition();
     if ((defn != NULL) &&
         (defn->ssa_temp_index() != -1) &&
         smi_definitions_->Contains(defn->ssa_temp_index())) {
-      defn->InferRange(Definition::kRangeInit);
-      AddToWorklist(defn);
+      defn->InferRange();
+    } else if (FLAG_array_bounds_check_elimination &&
+               current->IsCheckArrayBound() &&
+               current->AsCheckArrayBound()->IsRedundant()) {
+      it.RemoveCurrentFromGraph();
     }
   }
 
   for (intptr_t i = 0; i < block->dominated_blocks().length(); ++i) {
-    InitializeRangesRecursive(block->dominated_blocks()[i]);
-  }
-}
-
-
-void RangeAnalysis::CreateWorklists() {
-  in_worklist_ = new BitVector(flow_graph_->current_ssa_temp_index());
-}
-
-
-void RangeAnalysis::ProcessWorklist(Definition::RangeOperator op) {
-  // Iterate until fix point is reached.
-  while (!IsWorklistEmpty()) {
-    Definition* defn = RemoveLastFromWorklist();
-    if (FLAG_trace_range_analysis) {
-      OS::Print("infering range for v%"Pd" %s\n",
-                defn->ssa_temp_index(),
-                Range::ToCString(defn->range()));
-    }
-    if (defn->InferRange(op)) {  // Update the range.
-      if (FLAG_trace_range_analysis) {
-        OS::Print("  changed to %s\n", Range::ToCString(defn->range()));
-      }
-      // Range change. Place all uses to the worklist.
-      for (Value* use = defn->input_use_list();
-           use != NULL;
-           use = use->next_use()) {
-        Definition* use_defn = use->instruction()->AsDefinition();
-        if ((use_defn != NULL) &&
-            (use_defn->ssa_temp_index() != -1) &&
-            smi_definitions_->Contains(use_defn->ssa_temp_index())) {
-          AddToWorklist(use_defn);
-        }
-      }
-    }
+    InferRangesRecursive(block->dominated_blocks()[i]);
   }
 }
 
 
 void RangeAnalysis::InferRanges() {
-  CreateWorklists();
-
   // Initialize bitvector for quick filtering of smi values.
   smi_definitions_ = new BitVector(flow_graph_->current_ssa_temp_index());
   for (intptr_t i = 0; i < smi_values_.length(); i++) {
@@ -2013,54 +2120,10 @@
   }
 
   // Infer initial values of ranges.
-  InitializeRangesRecursive(flow_graph_->graph_entry());
-
-  for (intptr_t i = 0; i < smi_values_.length(); i++) {
-    if (smi_values_[i]->IsPhi() &&
-        smi_values_[i]->InferRange(Definition::kRangeInit)) {
-      Definition* defn = smi_values_[i];
-      for (Value* use = defn->input_use_list();
-           use != NULL;
-           use = use->next_use()) {
-        Definition* use_defn = use->instruction()->AsDefinition();
-        if ((use_defn != NULL) &&
-            (use_defn->ssa_temp_index() != -1) &&
-            smi_definitions_->Contains(use_defn->ssa_temp_index())) {
-          AddToWorklist(use_defn);
-        }
-      }
-    }
-  }
+  InferRangesRecursive(flow_graph_->graph_entry());
 
   if (FLAG_trace_range_analysis) {
-    OS::Print("---- after initialization -------\n");
-    FlowGraphPrinter printer(*flow_graph_);
-    printer.PrintBlocks();
-  }
-
-  if (FLAG_trace_range_analysis) {
-    OS::Print("---- widening ---------\n");
-  }
-  ProcessWorklist(Definition::kRangeWiden);
-
-  if (FLAG_trace_range_analysis) {
-    OS::Print("---- after widening -------\n");
-    FlowGraphPrinter printer(*flow_graph_);
-    printer.PrintBlocks();
-  }
-
-  if (FLAG_trace_range_analysis) {
-    OS::Print("---- narrowing ---------\n");
-  }
-  // Only phis can change under narrowing operator. Place all phis
-  // into the worklist.
-  for (intptr_t i = 0; i < smi_values_.length(); i++) {
-    if (smi_values_[i]->IsPhi()) AddToWorklist(smi_values_[i]);
-  }
-  ProcessWorklist(Definition::kRangeNarrow);
-
-  if (FLAG_trace_range_analysis) {
-    OS::Print("---- after narrowing -------\n");
+    OS::Print("---- after range analysis -------\n");
     FlowGraphPrinter printer(*flow_graph_);
     printer.PrintBlocks();
   }
@@ -2364,7 +2427,7 @@
   if (FLAG_trace_optimization) {
     OS::Print("Hoisting instruction %s:%"Pd" from B%"Pd" to B%"Pd"\n",
               current->DebugName(),
-              current->deopt_id(),
+              current->GetDeoptId(),
               current->GetBlock()->block_id(),
               pre_header->block_id());
   }
@@ -2474,6 +2537,15 @@
 }
 
 
+static bool IsLoadEliminationCandidate(Definition* def) {
+  // Immutable loads (not affected by side effects) are handled
+  // in the DominatorBasedCSE pass.
+  // TODO(fschneider): Extend to other load instructions.
+  return (def->IsLoadField() && def->AffectedBySideEffect())
+      || def->IsLoadIndexed();
+}
+
+
 static intptr_t NumberLoadExpressions(FlowGraph* graph) {
   DirectChainedHashMap<Definition*> map;
   intptr_t expr_id = 0;
@@ -2485,10 +2557,7 @@
          !instr_it.Done();
          instr_it.Advance()) {
       Definition* defn = instr_it.Current()->AsDefinition();
-      if ((defn == NULL) ||
-          !defn->IsLoadField() ||
-          !defn->AffectedBySideEffect()) {
-        // TODO(fschneider): Extend to other load instructions.
+      if ((defn == NULL) || !IsLoadEliminationCandidate(defn)) {
         continue;
       }
       Definition* result = map.Lookup(defn);
@@ -2533,10 +2602,7 @@
         break;
       }
       Definition* defn = instr_it.Current()->AsDefinition();
-      if ((defn == NULL) ||
-          !defn->IsLoadField() ||
-          !defn->AffectedBySideEffect()) {
-        // TODO(fschneider): Extend to other load instructions.
+      if ((defn == NULL) || !IsLoadEliminationCandidate(defn)) {
         continue;
       }
       avail_gen[preorder_number]->Add(defn->expr_id());
@@ -2588,7 +2654,7 @@
 }
 
 
-static void OptimizeLoads(
+static bool OptimizeLoads(
     BlockEntryInstr* block,
     GrowableArray<Definition*>* definitions,
     const GrowableArray<BitVector*>& avail_in) {
@@ -2603,6 +2669,7 @@
     }
   }
 
+  bool changed = false;
   for (ForwardInstructionIterator it(block); !it.Done(); it.Advance()) {
     Instruction* instr = it.Current();
     if (instr->HasSideEffect()) {
@@ -2613,11 +2680,7 @@
       continue;
     }
     Definition* defn = instr->AsDefinition();
-    if ((defn == NULL) ||
-        !defn->IsLoadField() ||
-        !defn->AffectedBySideEffect()) {
-      // Immutable loads are handled in normal CSE.
-      // TODO(fschneider): Extend to other load instructions.
+    if ((defn == NULL) || !IsLoadEliminationCandidate(defn)) {
       continue;
     }
     Definition* result = (*definitions)[defn->expr_id()];
@@ -2629,6 +2692,7 @@
     // Replace current with lookup result.
     defn->ReplaceUsesWith(result);
     it.RemoveCurrentFromGraph();
+    changed = true;
     if (FLAG_trace_optimization) {
       OS::Print("Replacing load v%"Pd" with v%"Pd"\n",
                 defn->ssa_temp_index(),
@@ -2643,15 +2707,17 @@
     if (i  < num_children - 1) {
       GrowableArray<Definition*> child_defs(definitions->length());
       child_defs.AddArray(*definitions);
-      OptimizeLoads(child, &child_defs, avail_in);
+      changed = OptimizeLoads(child, &child_defs, avail_in) || changed;
     } else {
-      OptimizeLoads(child, definitions, avail_in);
+      changed = OptimizeLoads(child, definitions, avail_in) || changed;
     }
   }
+  return changed;
 }
 
 
-void DominatorBasedCSE::Optimize(FlowGraph* graph) {
+bool DominatorBasedCSE::Optimize(FlowGraph* graph) {
+  bool changed = false;
   if (FLAG_load_cse) {
     intptr_t max_expr_id = NumberLoadExpressions(graph);
     if (max_expr_id > 0) {
@@ -2667,19 +2733,21 @@
       for (intptr_t j = 0; j < max_expr_id ; j++) {
         definitions.Add(NULL);
       }
-
-      OptimizeLoads(graph->graph_entry(), &definitions, avail_in);
+      changed = OptimizeLoads(graph->graph_entry(), &definitions, avail_in);
     }
   }
 
   DirectChainedHashMap<Instruction*> map;
-  OptimizeRecursive(graph->graph_entry(), &map);
+  changed = OptimizeRecursive(graph->graph_entry(), &map) || changed;
+
+  return changed;
 }
 
 
-void DominatorBasedCSE::OptimizeRecursive(
+bool DominatorBasedCSE::OptimizeRecursive(
     BlockEntryInstr* block,
     DirectChainedHashMap<Instruction*>* map) {
+  bool changed = false;
   for (ForwardInstructionIterator it(block); !it.Done(); it.Advance()) {
     Instruction* current = it.Current();
     if (current->AffectedBySideEffect()) continue;
@@ -2690,6 +2758,7 @@
     }
     // Replace current with lookup result.
     ReplaceCurrentInstruction(&it, current, replacement);
+    changed = true;
   }
 
   // Process children in the dominator tree recursively.
@@ -2698,11 +2767,13 @@
     BlockEntryInstr* child = block->dominated_blocks()[i];
     if (i  < num_children - 1) {
       DirectChainedHashMap<Instruction*> child_map(*map);  // Copy map.
-      OptimizeRecursive(child, &child_map);
+      changed = OptimizeRecursive(child, &child_map) || changed;
     } else {
-      OptimizeRecursive(child, map);  // Reuse map for the last child.
+      // Reuse map for the last child.
+      changed = OptimizeRecursive(child, map) || changed;
     }
   }
+  return changed;
 }
 
 
@@ -3232,17 +3303,6 @@
 }
 
 
-void ConstantPropagator::VisitDoubleToDouble(DoubleToDoubleInstr* instr) {
-  const Object& value = instr->value()->definition()->constant_value();
-  if (IsNonConstant(value)) {
-    SetValue(instr, non_constant_);
-  } else if (IsConstant(value)) {
-    // TODO(kmillikin): Handle conversion.
-    SetValue(instr, non_constant_);
-  }
-}
-
-
 void ConstantPropagator::VisitSmiToDouble(SmiToDoubleInstr* instr) {
   // TODO(kmillikin): Handle conversion.
   SetValue(instr, non_constant_);
diff --git a/runtime/vm/flow_graph_optimizer.h b/runtime/vm/flow_graph_optimizer.h
index 041221d..7d86ac1 100644
--- a/runtime/vm/flow_graph_optimizer.h
+++ b/runtime/vm/flow_graph_optimizer.h
@@ -87,10 +87,11 @@
   void InlineImplicitInstanceGetter(InstanceCallInstr* call);
   void InlineArrayLengthGetter(InstanceCallInstr* call,
                                intptr_t length_offset,
-                               bool is_immutable);
+                               bool is_immutable,
+                               MethodRecognizer::Kind kind);
   void InlineGArrayCapacityGetter(InstanceCallInstr* call);
   void InlineStringLengthGetter(InstanceCallInstr* call);
-  void InlineStringIsEmptyTester(InstanceCallInstr* call);
+  void InlineStringIsEmptyGetter(InstanceCallInstr* call);
 
   FlowGraph* flow_graph_;
 
@@ -155,10 +156,12 @@
 // on the dominator tree.
 class DominatorBasedCSE : public AllStatic {
  public:
-  static void Optimize(FlowGraph* graph);
+  // Return true, if the optimization changed the flow graph.
+  // False, if nothing changed.
+  static bool Optimize(FlowGraph* graph);
 
  private:
-  static void OptimizeRecursive(
+  static bool OptimizeRecursive(
       BlockEntryInstr* entry,
       DirectChainedHashMap<Instruction*>* map);
 };
diff --git a/runtime/vm/gc_marker.cc b/runtime/vm/gc_marker.cc
index 01de897..822c51f 100644
--- a/runtime/vm/gc_marker.cc
+++ b/runtime/vm/gc_marker.cc
@@ -209,7 +209,6 @@
       return;
     }
 
-    // TODO(iposva): merge old and code spaces.
     MarkAndPush(raw_obj);
   }
 
@@ -282,7 +281,6 @@
                                visit_prologue_weak_persistent_handles,
                                StackFrameIterator::kDontValidateFrames);
   heap_->IterateNewPointers(visitor);
-  heap_->IterateCodePointers(visitor);
 }
 
 
diff --git a/runtime/vm/gc_sweeper.cc b/runtime/vm/gc_sweeper.cc
index eee2b13..7f1cf8b 100644
--- a/runtime/vm/gc_sweeper.cc
+++ b/runtime/vm/gc_sweeper.cc
@@ -22,6 +22,7 @@
     return 0;
   }
 
+  bool is_executable = (page->type() == HeapPage::kExecutable);
   uword current = page->object_start();
   uword end = page->object_end();
 
@@ -51,6 +52,9 @@
         free_end += next_obj->Size();
       }
       obj_size = free_end - current;
+      if (is_executable) {
+        memset(reinterpret_cast<void*>(current), 0xcc, obj_size);
+      }
       freelist->Free(current, obj_size);
     }
     current += obj_size;
diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
index 70e6a5e..84f55df 100644
--- a/runtime/vm/heap.cc
+++ b/runtime/vm/heap.cc
@@ -32,23 +32,18 @@
 DEFINE_FLAG(int, old_gen_heap_size, Heap::kHeapSizeInMB,
             "old gen heap size in MB,"
             "e.g: --old_gen_heap_size=1024 allocates a 1024MB old gen heap");
-DEFINE_FLAG(int, code_heap_size, Heap::kCodeHeapSizeInMB,
-            "code heap size in MB,"
-            "e.g: --code_heap_size=8 allocates a 8MB code heap");
 
-  Heap::Heap() : read_only_(false) {
+Heap::Heap() : read_only_(false) {
   new_space_ = new Scavenger(this,
                              (FLAG_new_gen_heap_size * MB),
                              kNewObjectAlignmentOffset);
   old_space_ = new PageSpace(this, (FLAG_old_gen_heap_size * MB));
-  code_space_ = new PageSpace(this, (FLAG_code_heap_size * MB), true);
 }
 
 
 Heap::~Heap() {
   delete new_space_;
   delete old_space_;
-  delete code_space_;
 }
 
 
@@ -63,16 +58,16 @@
   if (addr != 0) {
     return addr;
   }
-  return AllocateOld(size);
+  return AllocateOld(size, HeapPage::kData);
 }
 
 
-uword Heap::AllocateOld(intptr_t size) {
+uword Heap::AllocateOld(intptr_t size, HeapPage::PageType type) {
   ASSERT(Isolate::Current()->no_gc_scope_depth() == 0);
-  uword addr = old_space_->TryAllocate(size);
+  uword addr = old_space_->TryAllocate(size, type);
   if (addr == 0) {
     CollectAllGarbage();
-    addr = old_space_->TryAllocate(size, PageSpace::kForceGrowth);
+    addr = old_space_->TryAllocate(size, type, PageSpace::kForceGrowth);
     if (addr == 0) {
       OS::PrintErr("Exhausted heap space, trying to allocate %"Pd" bytes.\n",
                    size);
@@ -82,25 +77,9 @@
 }
 
 
-uword Heap::AllocateCode(PageSpace* space, intptr_t size) {
-  ASSERT(Isolate::Current()->no_gc_scope_depth() == 0);
-  ASSERT(Utils::IsAligned(size, OS::PreferredCodeAlignment()));
-  uword addr = space->TryAllocate(size);
-  if (addr == 0) {
-    // TODO(iposva): Support GC.
-    FATAL("Exhausted code heap space.");
-  }
-  if (FLAG_compiler_stats) {
-    CompilerStats::code_allocated += size;
-  }
-  return addr;
-}
-
-
 bool Heap::Contains(uword addr) const {
   return new_space_->Contains(addr) ||
-      old_space_->Contains(addr) ||
-      code_space_->Contains(addr);
+      old_space_->Contains(addr);
 }
 
 
@@ -115,21 +94,19 @@
 
 
 bool Heap::CodeContains(uword addr) const {
-  return code_space_->Contains(addr);
+  return old_space_->Contains(addr, HeapPage::kExecutable);
 }
 
 
 void Heap::IterateObjects(ObjectVisitor* visitor) {
   new_space_->VisitObjects(visitor);
   old_space_->VisitObjects(visitor);
-  code_space_->VisitObjects(visitor);
 }
 
 
 void Heap::IteratePointers(ObjectPointerVisitor* visitor) {
   new_space_->VisitObjectPointers(visitor);
   old_space_->VisitObjectPointers(visitor);
-  code_space_->VisitObjectPointers(visitor);
 }
 
 
@@ -140,12 +117,6 @@
 
 void Heap::IterateOldPointers(ObjectPointerVisitor* visitor) {
   old_space_->VisitObjectPointers(visitor);
-  code_space_->VisitObjectPointers(visitor);
-}
-
-
-void Heap::IterateCodePointers(ObjectPointerVisitor* visitor) {
-  code_space_->VisitObjectPointers(visitor);
 }
 
 
@@ -156,18 +127,12 @@
 
 void Heap::IterateOldObjects(ObjectVisitor* visitor) {
   old_space_->VisitObjects(visitor);
-  code_space_->VisitObjects(visitor);
-}
-
-
-void Heap::IterateCodeObjects(ObjectVisitor* visitor) {
-  code_space_->VisitObjects(visitor);
 }
 
 
 RawInstructions* Heap::FindObjectInCodeSpace(FindObjectVisitor* visitor) {
-  // The code heap can only have RawInstructions objects.
-  RawObject* raw_obj = code_space_->FindObject(visitor);
+  // Only executable pages can have RawInstructions objects.
+  RawObject* raw_obj = old_space_->FindObject(visitor, HeapPage::kExecutable);
   ASSERT((raw_obj == Object::null()) ||
          (raw_obj->GetClassId() == kInstructionsCid));
   return reinterpret_cast<RawInstructions*>(raw_obj);
@@ -187,14 +152,10 @@
       break;
     }
     case kOld:
+    case kCode:
       old_space_->MarkSweep(invoke_api_callbacks,
                             GCReasonToString(kOldSpace));
       break;
-    case kCode:
-      UNIMPLEMENTED();
-      code_space_->MarkSweep(invoke_api_callbacks,
-                             GCReasonToString(kCodeSpace));
-      break;
     default:
       UNREACHABLE();
   }
@@ -219,8 +180,6 @@
   const char* gc_reason = GCReasonToString(kFull);
   new_space_->Scavenge(kInvokeApiCallbacks, gc_reason);
   old_space_->MarkSweep(kInvokeApiCallbacks, gc_reason);
-  // TODO(iposva): Merge old and code space.
-  // code_space_->MarkSweep(kInvokeApiCallbacks, gc_reason);
   if (FLAG_verbose_gc) {
     PrintSizes();
   }
@@ -236,8 +195,6 @@
   read_only_ = read_only;
   new_space_->WriteProtect(read_only);
   old_space_->WriteProtect(read_only);
-  // TODO(iposva): Merge old and code space.
-  // code_space_->WriteProtect(read_only);
 }
 
 
@@ -268,13 +225,6 @@
     *start = Utils::Minimum(old_start, *start);
     *end = Utils::Maximum(old_end, *end);
   }
-  if (code_space_->capacity() != 0) {
-    uword code_start;
-    uword code_end;
-    code_space_->StartEndAddress(&code_start, &code_end);
-    *start = Utils::Minimum(code_start, *start);
-    *end = Utils::Maximum(code_end, *end);
-  }
   ASSERT(*start <= *end);
 }
 
@@ -312,11 +262,9 @@
 
 void Heap::PrintSizes() const {
   OS::PrintErr("New space (%"Pd"k of %"Pd"k) "
-               "Old space (%"Pd"k of %"Pd"k) "
-               "Code space (%"Pd"k of %"Pd"k)\n",
+               "Old space (%"Pd"k of %"Pd"k)\n",
                (new_space_->in_use() / KB), (new_space_->capacity() / KB),
-               (old_space_->in_use() / KB), (old_space_->capacity() / KB),
-               (code_space_->in_use() / KB), (code_space_->capacity() / KB));
+               (old_space_->in_use() / KB), (old_space_->capacity() / KB));
 }
 
 
diff --git a/runtime/vm/heap.h b/runtime/vm/heap.h
index 2844bd6..fb4e927 100644
--- a/runtime/vm/heap.h
+++ b/runtime/vm/heap.h
@@ -60,13 +60,13 @@
       case kNew:
         // Do not attempt to allocate very large objects in new space.
         if (!PageSpace::IsPageAllocatableSize(size)) {
-          return AllocateOld(size);
+          return AllocateOld(size, HeapPage::kData);
         }
         return AllocateNew(size);
       case kOld:
-        return AllocateOld(size);
+        return AllocateOld(size, HeapPage::kData);
       case kCode:
-        return AllocateCode(code_space_, size);
+        return AllocateOld(size, HeapPage::kExecutable);
       default:
         UNREACHABLE();
     }
@@ -79,9 +79,9 @@
       case kNew:
         return new_space_->TryAllocate(size);
       case kOld:
-        return old_space_->TryAllocate(size);
+        return old_space_->TryAllocate(size, HeapPage::kData);
       case kCode:
-        return code_space_->TryAllocate(size);
+        return old_space_->TryAllocate(size, HeapPage::kExecutable);
       default:
         UNREACHABLE();
     }
@@ -101,7 +101,6 @@
   // Visit all pointers in the space.
   void IterateNewPointers(ObjectPointerVisitor* visitor);
   void IterateOldPointers(ObjectPointerVisitor* visitor);
-  void IterateCodePointers(ObjectPointerVisitor* visitor);
 
   // Visit all objects.
   void IterateObjects(ObjectVisitor* visitor);
@@ -109,7 +108,6 @@
   // Visit all object in the space.
   void IterateNewObjects(ObjectVisitor* visitor);
   void IterateOldObjects(ObjectVisitor* visitor);
-  void IterateCodeObjects(ObjectVisitor* visitor);
 
   // Find an object by visiting all pointers in the specified heap space,
   // the 'visitor' is used to determine if an object is found or not.
@@ -171,13 +169,11 @@
   Heap();
 
   uword AllocateNew(intptr_t size);
-  uword AllocateOld(intptr_t size);
-  uword AllocateCode(PageSpace* space, intptr_t size);
+  uword AllocateOld(intptr_t size, HeapPage::PageType type);
 
   // The different spaces used for allocation.
   Scavenger* new_space_;
   PageSpace* old_space_;
-  PageSpace* code_space_;
 
   // This heap is in read-only mode: No allocation is allowed.
   bool read_only_;
diff --git a/runtime/vm/il_printer.cc b/runtime/vm/il_printer.cc
index c847c2e..3984e9d 100644
--- a/runtime/vm/il_printer.cc
+++ b/runtime/vm/il_printer.cc
@@ -251,6 +251,14 @@
 }
 
 
+const char* RangeBoundary::ToCString() const {
+  char buffer[256];
+  BufferFormatter f(buffer, sizeof(buffer));
+  PrintTo(&f);
+  return Isolate::Current()->current_zone()->MakeCopyOfString(buffer);
+}
+
+
 void AssertAssignableInstr::PrintOperandsTo(BufferFormatter* f) const {
   value()->PrintTo(f);
   f->Print(", %s, '%s'%s",
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index 1dff5fb..a6f5fc5 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -61,6 +61,25 @@
 }
 
 
+
+CheckClassInstr::CheckClassInstr(Value* value,
+                                 intptr_t deopt_id,
+                                 const ICData& unary_checks)
+    : unary_checks_(unary_checks) {
+  ASSERT(value != NULL);
+  ASSERT(unary_checks.IsZoneHandle());
+  // Expected useful check data.
+  ASSERT(!unary_checks_.IsNull() &&
+         (unary_checks_.NumberOfChecks() > 0) &&
+         (unary_checks_.num_args_tested() == 1));
+  inputs_[0] = value;
+  deopt_id_ = deopt_id;
+  // Otherwise use CheckSmiInstr.
+  ASSERT((unary_checks_.NumberOfChecks() != 1) ||
+         (unary_checks_.GetReceiverClassIdAt(0) != kSmiCid));
+}
+
+
 bool CheckClassInstr::AttributesEqual(Instruction* other) const {
   CheckClassInstr* other_check = other->AsCheckClass();
   ASSERT(other_check != NULL);
@@ -132,6 +151,13 @@
 }
 
 
+bool LoadIndexedInstr::AttributesEqual(Instruction* other) const {
+  LoadIndexedInstr* other_load = other->AsLoadIndexed();
+  ASSERT(other_load != NULL);
+  return class_id() == other_load->class_id();
+}
+
+
 bool ConstantInstr::AttributesEqual(Instruction* other) const {
   ConstantInstr* other_constant = other->AsConstant();
   ASSERT(other_constant != NULL);
@@ -170,10 +196,13 @@
 
 
 ConstantInstr* GraphEntryInstr::constant_null() {
-  ASSERT(initial_definitions_.length() > 0 &&
-         initial_definitions_[0]->IsConstant() &&
-         initial_definitions_[0]->AsConstant()->value().IsNull());
-  return initial_definitions_[0]->AsConstant();
+  ASSERT(initial_definitions_.length() > 0);
+  for (intptr_t i = 0; i < initial_definitions_.length(); ++i) {
+    ConstantInstr* defn = initial_definitions_[i]->AsConstant();
+    if (defn != NULL && defn->value().IsNull()) return defn;
+  }
+  UNREACHABLE();
+  return NULL;
 }
 
 
@@ -642,6 +671,11 @@
 }
 
 
+intptr_t AssertAssignableInstr::GetPropagatedCid() {
+  return propagated_cid();
+}
+
+
 // ==== Postorder graph traversal.
 static bool IsMarked(BlockEntryInstr* block,
                      GrowableArray<BlockEntryInstr*>* preorder) {
@@ -1361,11 +1395,6 @@
 }
 
 
-RawAbstractType* DoubleToDoubleInstr::CompileType() const {
-  return Type::Double();
-}
-
-
 RawAbstractType* SmiToDoubleInstr::CompileType() const {
   return Type::Double();
 }
@@ -1845,12 +1874,17 @@
 
 
 void StaticCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Label skip_call;
+  if (function().name() == Symbols::EqualOperator()) {
+    compiler->EmitSuperEqualityCallPrologue(locs()->out().reg(), &skip_call);
+  }
   compiler->GenerateStaticCall(deopt_id(),
                                token_pos(),
                                function(),
                                ArgumentCount(),
                                argument_names(),
                                locs());
+  __ Bind(&skip_call);
 }
 
 
@@ -2057,6 +2091,14 @@
 }
 
 
+RangeBoundary RangeBoundary::FromDefinition(Definition* defn, intptr_t offs) {
+  if (defn->IsConstant() && defn->AsConstant()->value().IsSmi()) {
+    return FromConstant(Smi::Cast(defn->AsConstant()->value()).Value() + offs);
+  }
+  return RangeBoundary(kSymbol, reinterpret_cast<intptr_t>(defn), offs);
+}
+
+
 RangeBoundary RangeBoundary::LowerBound() const {
   if (IsConstant()) return *this;
   if (symbol()->range() == NULL) return MinSmi();
@@ -2075,48 +2117,271 @@
 }
 
 
-bool Definition::InferRange(RangeOperator op) {
-  ASSERT(GetPropagatedCid() == kSmiCid);  // Has meaning only for smis.
-  if (range_ == NULL) {
-    range_ = Range::Unknown();
-    return true;
-  }
-  return false;
+// Returns true if two range boundaries refer to the same symbol.
+static bool DependOnSameSymbol(const RangeBoundary& a, const RangeBoundary& b) {
+  if (!a.IsSymbol() || !b.IsSymbol()) return false;
+  if (a.symbol() == b.symbol()) return true;
+
+  return !a.symbol()->AffectedBySideEffect() &&
+      a.symbol()->Equals(b.symbol());
 }
 
 
-bool ConstantInstr::InferRange(RangeOperator op) {
+// Returns true if range has a least specific minimum value.
+static bool IsMinSmi(Range* range) {
+  return (range == NULL) ||
+      (range->min().IsConstant() &&
+       (range->min().value() <= Smi::kMinValue));
+}
+
+
+// Returns true if range has a least specific maximium value.
+static bool IsMaxSmi(Range* range) {
+  return (range == NULL) ||
+      (range->max().IsConstant() &&
+       (range->max().value() >= Smi::kMaxValue));
+}
+
+
+// Returns true if two range boundaries can be proven to be equal.
+static bool IsEqual(const RangeBoundary& a, const RangeBoundary& b) {
+  if (a.IsConstant() && b.IsConstant()) {
+    return a.value() == b.value();
+  } else if (a.IsSymbol() && b.IsSymbol()) {
+    return (a.offset() == b.offset()) && DependOnSameSymbol(a, b);
+  } else {
+    return false;
+  }
+}
+
+
+static RangeBoundary CanonicalizeBoundary(const RangeBoundary& a,
+                                          const RangeBoundary& overflow) {
+  if (a.IsConstant()) return a;
+
+  intptr_t offset = a.offset();
+  Definition* symbol = a.symbol();
+
+  bool changed;
+  do {
+    changed = false;
+    if (symbol->IsConstraint()) {
+      symbol = symbol->AsConstraint()->value()->definition();
+      changed = true;
+    } else if (symbol->IsBinarySmiOp()) {
+      BinarySmiOpInstr* op = symbol->AsBinarySmiOp();
+      Definition* left = op->left()->definition();
+      Definition* right = op->right()->definition();
+      switch (op->op_kind()) {
+        case Token::kADD:
+          if (right->IsConstant()) {
+            offset += Smi::Cast(right->AsConstant()->value()).Value();
+            symbol = left;
+            changed = true;
+          } else if (left->IsConstant()) {
+            offset += Smi::Cast(left->AsConstant()->value()).Value();
+            symbol = right;
+            changed = true;
+          }
+          break;
+
+        case Token::kSUB:
+          if (right->IsConstant()) {
+            offset -= Smi::Cast(right->AsConstant()->value()).Value();
+            symbol = left;
+            changed = true;
+          }
+          break;
+
+        default:
+          break;
+      }
+    }
+
+    if (!Smi::IsValid(offset)) return overflow;
+  } while (changed);
+
+  return RangeBoundary::FromDefinition(symbol, offset);
+}
+
+
+static bool CanonicalizeMaxBoundary(RangeBoundary* a) {
+  if (!a->IsSymbol()) return false;
+
+  Range* range = a->symbol()->range();
+  if ((range == NULL) || !range->max().IsSymbol()) return false;
+
+  const intptr_t offset = range->max().offset() + a->offset();
+
+  if (!Smi::IsValid(offset)) {
+    *a = RangeBoundary::OverflowedMaxSmi();
+    return true;
+  }
+
+  *a = CanonicalizeBoundary(
+      RangeBoundary::FromDefinition(range->max().symbol(), offset),
+      RangeBoundary::OverflowedMaxSmi());
+
+  return true;
+}
+
+
+static bool CanonicalizeMinBoundary(RangeBoundary* a) {
+  if (!a->IsSymbol()) return false;
+
+  Range* range = a->symbol()->range();
+  if ((range == NULL) || !range->min().IsSymbol()) return false;
+
+  const intptr_t offset = range->min().offset() + a->offset();
+  if (!Smi::IsValid(offset)) {
+    *a = RangeBoundary::OverflowedMinSmi();
+    return true;
+  }
+
+  *a = CanonicalizeBoundary(
+      RangeBoundary::FromDefinition(range->min().symbol(), offset),
+      RangeBoundary::OverflowedMinSmi());
+
+  return true;
+}
+
+
+RangeBoundary RangeBoundary::Min(RangeBoundary a, RangeBoundary b) {
+  if (DependOnSameSymbol(a, b)) {
+    return (a.offset() <= b.offset()) ? a : b;
+  }
+
+  const intptr_t min_a = a.LowerBound().value();
+  const intptr_t min_b = b.LowerBound().value();
+
+  return RangeBoundary::FromConstant(Utils::Minimum(min_a, min_b));
+}
+
+
+RangeBoundary RangeBoundary::Max(RangeBoundary a, RangeBoundary b) {
+  if (DependOnSameSymbol(a, b)) {
+    return (a.offset() >= b.offset()) ? a : b;
+  }
+
+  const intptr_t max_a = a.UpperBound().value();
+  const intptr_t max_b = b.UpperBound().value();
+
+  return RangeBoundary::FromConstant(Utils::Maximum(max_a, max_b));
+}
+
+
+void Definition::InferRange() {
+  ASSERT(GetPropagatedCid() == kSmiCid);  // Has meaning only for smis.
+  if (range_ == NULL) {
+    range_ = Range::Unknown();
+  }
+}
+
+
+void ConstantInstr::InferRange() {
   ASSERT(value_.IsSmi());
   if (range_ == NULL) {
     intptr_t value = Smi::Cast(value_).Value();
     range_ = new Range(RangeBoundary::FromConstant(value),
                        RangeBoundary::FromConstant(value));
-    return true;
   }
-  return false;
 }
 
 
-bool ConstraintInstr::InferRange(RangeOperator op) {
+void ConstraintInstr::InferRange() {
   Range* value_range = value()->definition()->range();
 
-  // Compute intersection of constraint and value ranges.
-  return Range::Update(&range_,
-      RangeBoundary::Max(Range::ConstantMin(value_range),
-                         Range::ConstantMin(constraint())),
-      RangeBoundary::Min(Range::ConstantMax(value_range),
-                         Range::ConstantMax(constraint())));
+  RangeBoundary min;
+  RangeBoundary max;
+
+  if (IsMinSmi(value_range) && !IsMinSmi(constraint())) {
+    min = constraint()->min();
+  } else if (IsMinSmi(constraint()) && !IsMinSmi(value_range)) {
+    min = value_range->min();
+  } else if ((value_range != NULL) &&
+             IsEqual(constraint()->min(), value_range->min())) {
+    min = constraint()->min();
+  } else {
+    if (value_range != NULL) {
+      RangeBoundary canonical_a =
+          CanonicalizeBoundary(constraint()->min(),
+                               RangeBoundary::OverflowedMinSmi());
+      RangeBoundary canonical_b =
+          CanonicalizeBoundary(value_range->min(),
+                               RangeBoundary::OverflowedMinSmi());
+
+      do {
+        if (DependOnSameSymbol(canonical_a, canonical_b)) {
+          min = (canonical_a.offset() <= canonical_b.offset()) ? canonical_b
+                                                               : canonical_a;
+        }
+      } while (CanonicalizeMinBoundary(&canonical_a) ||
+               CanonicalizeMinBoundary(&canonical_b));
+    }
+
+    if (min.IsUnknown()) {
+      min = RangeBoundary::Max(Range::ConstantMin(value_range),
+                               Range::ConstantMin(constraint()));
+    }
+  }
+
+  if (IsMaxSmi(value_range) && !IsMaxSmi(constraint())) {
+    max = constraint()->max();
+  } else if (IsMaxSmi(constraint()) && !IsMaxSmi(value_range)) {
+    max = value_range->max();
+  } else if ((value_range != NULL) &&
+             IsEqual(constraint()->max(), value_range->max())) {
+    max = constraint()->max();
+  } else {
+    if (value_range != NULL) {
+      RangeBoundary canonical_b =
+          CanonicalizeBoundary(value_range->max(),
+                               RangeBoundary::OverflowedMaxSmi());
+      RangeBoundary canonical_a =
+          CanonicalizeBoundary(constraint()->max(),
+                               RangeBoundary::OverflowedMaxSmi());
+
+      do {
+        if (DependOnSameSymbol(canonical_a, canonical_b)) {
+          max = (canonical_a.offset() <= canonical_b.offset()) ? canonical_a
+                                                               : canonical_b;
+          break;
+        }
+      } while (CanonicalizeMaxBoundary(&canonical_a) ||
+               CanonicalizeMaxBoundary(&canonical_b));
+    }
+
+    if (max.IsUnknown()) {
+      max = RangeBoundary::Min(Range::ConstantMax(value_range),
+                               Range::ConstantMax(constraint()));
+    }
+  }
+
+  range_ = new Range(min, max);
 }
 
 
-bool PhiInstr::InferRange(RangeOperator op) {
+void LoadFieldInstr::InferRange() {
+  if ((range_ == NULL) &&
+      ((recognized_kind() == MethodRecognizer::kObjectArrayLength) ||
+       (recognized_kind() == MethodRecognizer::kImmutableArrayLength))) {
+    range_ = new Range(RangeBoundary::FromConstant(0),
+                       RangeBoundary::FromConstant(Array::kMaxElements));
+    return;
+  }
+  Definition::InferRange();
+}
+
+
+void PhiInstr::InferRange() {
   RangeBoundary new_min;
   RangeBoundary new_max;
 
   for (intptr_t i = 0; i < InputCount(); i++) {
     Range* input_range = InputAt(i)->definition()->range();
     if (input_range == NULL) {
-      continue;
+      range_ = Range::Unknown();
+      return;
     }
 
     if (new_min.IsUnknown()) {
@@ -2135,75 +2400,162 @@
   ASSERT(new_min.IsUnknown() == new_max.IsUnknown());
   if (new_min.IsUnknown()) {
     range_ = Range::Unknown();
-    return false;
+    return;
   }
 
-  if (op == Definition::kRangeWiden) {
-    // Apply widening operator.
-    new_min = RangeBoundary::WidenMin(range_->min(), new_min);
-    new_max = RangeBoundary::WidenMax(range_->max(), new_max);
-  } else if (op == Definition::kRangeNarrow) {
-    // Apply narrowing operator.
-    new_min = RangeBoundary::NarrowMin(range_->min(), new_min);
-    new_max = RangeBoundary::NarrowMax(range_->max(), new_max);
-  }
-
-  return Range::Update(&range_, new_min, new_max);
+  range_ = new Range(new_min, new_max);
 }
 
 
-bool BinarySmiOpInstr::InferRange(RangeOperator op) {
-  Range* left_range = left()->definition()->range();
+static bool SymbolicSub(const RangeBoundary& a,
+                        const RangeBoundary& b,
+                        RangeBoundary* result) {
+  if (a.IsSymbol() && b.IsConstant() && !b.Overflowed()) {
+    const intptr_t offset = a.offset() - b.value();
+    if (!Smi::IsValid(offset)) return false;
+
+    *result = RangeBoundary::FromDefinition(a.symbol(), offset);
+    return true;
+  }
+  return false;
+}
+
+
+static bool SymbolicAdd(const RangeBoundary& a,
+                        const RangeBoundary& b,
+                        RangeBoundary* result) {
+  if (a.IsSymbol() && b.IsConstant() && !b.Overflowed()) {
+    const intptr_t offset = a.offset() + b.value();
+    if (!Smi::IsValid(offset)) return false;
+
+    *result = RangeBoundary::FromDefinition(a.symbol(), offset);
+    return true;
+  } else if (b.IsSymbol() && a.IsConstant() && !a.Overflowed()) {
+    const intptr_t offset = b.offset() + a.value();
+    if (!Smi::IsValid(offset)) return false;
+
+    *result = RangeBoundary::FromDefinition(b.symbol(), offset);
+    return true;
+  }
+  return false;
+}
+
+
+static bool IsArrayLength(Definition* defn) {
+  LoadFieldInstr* load = defn->AsLoadField();
+  return (load != NULL) &&
+      ((load->recognized_kind() == MethodRecognizer::kObjectArrayLength) ||
+       (load->recognized_kind() == MethodRecognizer::kImmutableArrayLength));
+}
+
+
+static bool IsLengthOf(Definition* defn, Definition* array) {
+  return IsArrayLength(defn) &&
+      (defn->AsLoadField()->value()->definition() == array);
+}
+
+
+void BinarySmiOpInstr::InferRange() {
+  // TODO(vegorov): canonicalize BinarySmiOp to always have constant on the
+  // right and a non-constant on the left.
+  Definition* left_defn = left()->definition();
+
+  Range* left_range = left_defn->range();
   Range* right_range = right()->definition()->range();
 
   if ((left_range == NULL) || (right_range == NULL)) {
-    return Range::Update(&range_,
-                         RangeBoundary::MinSmi(),
-                         RangeBoundary::MaxSmi());
+    range_ = new Range(RangeBoundary::MinSmi(), RangeBoundary::MaxSmi());
+    return;
   }
 
-  RangeBoundary new_min;
-  RangeBoundary new_max;
+
+  // If left is a l
+  RangeBoundary left_min =
+    IsArrayLength(left_defn) ?
+        RangeBoundary::FromDefinition(left_defn) : left_range->min();
+
+  RangeBoundary left_max =
+    IsArrayLength(left_defn) ?
+        RangeBoundary::FromDefinition(left_defn) : left_range->max();
+
+  RangeBoundary min;
+  RangeBoundary max;
   switch (op_kind()) {
     case Token::kADD:
-      new_min =
-        RangeBoundary::Add(Range::ConstantMin(left_range),
-                           Range::ConstantMin(right_range),
-                           RangeBoundary::OverflowedMinSmi());
-      new_max =
-        RangeBoundary::Add(Range::ConstantMax(left_range),
-                           Range::ConstantMax(right_range),
-                           RangeBoundary::OverflowedMaxSmi());
+      if (!SymbolicAdd(left_min, right_range->min(), &min)) {
+        min =
+          RangeBoundary::Add(Range::ConstantMin(left_range),
+                             Range::ConstantMin(right_range),
+                             RangeBoundary::OverflowedMinSmi());
+      }
+
+      if (!SymbolicAdd(left_max, right_range->max(), &max)) {
+        max =
+          RangeBoundary::Add(Range::ConstantMax(right_range),
+                             Range::ConstantMax(left_range),
+                             RangeBoundary::OverflowedMaxSmi());
+      }
       break;
 
     case Token::kSUB:
-      new_min =
-        RangeBoundary::Sub(Range::ConstantMin(left_range),
-                           Range::ConstantMax(right_range),
-                           RangeBoundary::OverflowedMinSmi());
-      new_max =
-        RangeBoundary::Sub(Range::ConstantMax(left_range),
-                           Range::ConstantMin(right_range),
-                           RangeBoundary::OverflowedMaxSmi());
+      if (!SymbolicSub(left_min, right_range->max(), &min)) {
+        min =
+          RangeBoundary::Sub(Range::ConstantMin(left_range),
+                             Range::ConstantMax(right_range),
+                             RangeBoundary::OverflowedMinSmi());
+      }
+
+      if (!SymbolicSub(left_max, right_range->min(), &max)) {
+        max =
+          RangeBoundary::Sub(Range::ConstantMax(left_range),
+                             Range::ConstantMin(right_range),
+                             RangeBoundary::OverflowedMaxSmi());
+      }
       break;
 
     default:
       if (range_ == NULL) {
         range_ = Range::Unknown();
-        return true;
       }
-      return false;
+      return;
   }
 
-  ASSERT(!new_min.IsUnknown() && !new_max.IsUnknown());
-  set_overflow(new_min.Overflowed() || new_max.Overflowed());
+  ASSERT(!min.IsUnknown() && !max.IsUnknown());
+  set_overflow(min.LowerBound().Overflowed() || max.UpperBound().Overflowed());
 
-  if (op == Definition::kRangeNarrow) {
-    new_min = new_min.Clamp();
-    new_max = new_max.Clamp();
+  if (min.IsConstant()) min.Clamp();
+  if (max.IsConstant()) max.Clamp();
+
+  range_ = new Range(min, max);
+}
+
+
+bool CheckArrayBoundInstr::IsRedundant() {
+  // Check that array has an immutable length.
+  if ((array_type() != kArrayCid) && (array_type() != kImmutableArrayCid)) {
+    return false;
   }
 
-  return Range::Update(&range_, new_min, new_max);
+  Range* index_range = index()->definition()->range();
+
+  // Range of the index is unknown can't decide if the check is redundant.
+  if (index_range == NULL) return false;
+
+  // Range of the index is not positive. Check can't be redundant.
+  if (Range::ConstantMin(index_range).value() < 0) return false;
+
+  RangeBoundary max = CanonicalizeBoundary(index_range->max(),
+                                           RangeBoundary::OverflowedMaxSmi());
+  do {
+    if (max.IsSymbol() &&
+        (max.offset() < 0) &&
+        IsLengthOf(max.symbol(), array()->definition())) {
+      return true;
+    }
+  } while (CanonicalizeMaxBoundary(&max));
+
+  // Failed to prove that maximum is bounded with array length.
+  return false;
 }
 
 
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index 52d2cfa..646eeba 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -36,11 +36,9 @@
   V(_GrowableObjectArray, get:length, GrowableArrayLength)                     \
   V(_GrowableObjectArray, get:capacity, GrowableArrayCapacity)                 \
   V(_StringBase, get:length, StringBaseLength)                                 \
-  V(_StringBase, isEmpty, StringBaseIsEmpty)                                   \
+  V(_StringBase, get:isEmpty, StringBaseIsEmpty)                               \
   V(_IntegerImplementation, toDouble, IntegerToDouble)                         \
-  V(_Double, toDouble, DoubleToDouble)                                         \
   V(_Double, toInt, DoubleToInteger)                                           \
-  V(_IntegerImplementation, toInt, IntegerToInteger)                           \
   V(::, sqrt, MathSqrt)                                                        \
 
 // Class that recognizes the name and owner of a function and returns the
@@ -248,7 +246,6 @@
   M(BinarySmiOp)                                                               \
   M(UnarySmiOp)                                                                \
   M(CheckStackOverflow)                                                        \
-  M(DoubleToDouble)                                                            \
   M(SmiToDouble)                                                               \
   M(DoubleToInteger)                                                           \
   M(CheckClass)                                                                \
@@ -519,6 +516,8 @@
   friend class UnboxDoubleInstr;
   friend class BinaryDoubleOpInstr;
   friend class BinaryMintOpInstr;
+  friend class BinarySmiOpInstr;
+  friend class UnarySmiOpInstr;
   friend class ShiftMintOpInstr;
   friend class UnaryMintOpInstr;
   friend class MathSqrtInstr;
@@ -1002,6 +1001,7 @@
   virtual void PrintTo(BufferFormatter* f) const;
 
  private:
+  friend class FlowGraph;  // Access to predecessor_ when inlining.
   virtual void ClearPredecessors() { predecessor_ = NULL; }
   virtual void AddPredecessor(BlockEntryInstr* predecessor) {
     ASSERT(predecessor_ == NULL);
@@ -1109,9 +1109,7 @@
   //    - unknown sentinel
   Object& constant_value() const { return constant_value_; }
 
-  enum RangeOperator { kRangeInit, kRangeWiden, kRangeNarrow };
-
-  virtual bool InferRange(RangeOperator op);
+  virtual void InferRange();
 
   Range* range() const { return range_; }
 
@@ -1121,6 +1119,8 @@
   virtual Definition* Canonicalize();
 
  protected:
+  friend class RangeAnalysis;
+
   Range* range_;
 
  private:
@@ -1146,8 +1146,7 @@
     : block_(block),
       inputs_(num_inputs),
       is_alive_(false),
-      representation_(kTagged),
-      has_inputs_without_range_(true) {
+      representation_(kTagged) {
     for (intptr_t i = 0; i < num_inputs; ++i) {
       inputs_.Add(NULL);
     }
@@ -1205,7 +1204,7 @@
 
   virtual void PrintTo(BufferFormatter* f) const;
 
-  virtual bool InferRange(RangeOperator op);
+  virtual void InferRange();
 
  private:
   friend class ConstantPropagator;  // Direct access to inputs_.
@@ -1215,10 +1214,6 @@
   bool is_alive_;
   Representation representation_;
 
-  // Used to determine an interation of a range analysis after all phi inputs
-  // were initialized to apply widening.
-  bool has_inputs_without_range_;
-
   DISALLOW_COPY_AND_ASSIGN(PhiInstr);
 };
 
@@ -1483,8 +1478,8 @@
 
 class BranchInstr : public ControlInstruction {
  public:
-  explicit BranchInstr(ComparisonInstr* comparison)
-      : comparison_(comparison) { }
+  explicit BranchInstr(ComparisonInstr* comparison, bool is_checked = false)
+      : comparison_(comparison), is_checked_(is_checked) { }
 
   DECLARE_INSTRUCTION(Branch)
 
@@ -1499,6 +1494,8 @@
   ComparisonInstr* comparison() const { return comparison_; }
   void set_comparison(ComparisonInstr* value) { comparison_ = value; }
 
+  bool is_checked() const { return is_checked_; }
+
   virtual LocationSummary* locs();
   virtual intptr_t DeoptimizationTarget() const;
   virtual Representation RequiredInputRepresentation(intptr_t i) const;
@@ -1513,6 +1510,7 @@
 
  private:
   ComparisonInstr* comparison_;
+  const bool is_checked_;
 
   DISALLOW_COPY_AND_ASSIGN(BranchInstr);
 };
@@ -1582,9 +1580,7 @@
     return RangeBoundary(kConstant, val, 0);
   }
 
-  static RangeBoundary FromDefinition(Definition* defn, intptr_t offs = 0) {
-    return RangeBoundary(kSymbol, reinterpret_cast<intptr_t>(defn), offs);
-  }
+  static RangeBoundary FromDefinition(Definition* defn, intptr_t offs = 0);
 
   static RangeBoundary MinSmi() {
     return FromConstant(Smi::kMinValue);
@@ -1605,19 +1601,9 @@
     return FromConstant(Smi::kMaxValue + 1);
   }
 
-  static RangeBoundary Min(RangeBoundary a, RangeBoundary b) {
-    const intptr_t min_a = a.LowerBound().value();
-    const intptr_t min_b = b.LowerBound().value();
+  static RangeBoundary Min(RangeBoundary a, RangeBoundary b);
 
-    return RangeBoundary::FromConstant(Utils::Minimum(min_a, min_b));
-  }
-
-  static RangeBoundary Max(RangeBoundary a, RangeBoundary b) {
-    const intptr_t max_a = a.UpperBound().value();
-    const intptr_t max_b = b.UpperBound().value();
-
-    return RangeBoundary::FromConstant(Utils::Maximum(max_a, max_b));
-  }
+  static RangeBoundary Max(RangeBoundary a, RangeBoundary b);
 
   bool Overflowed() const {
     return !Smi::IsValid(value());
@@ -1649,40 +1635,15 @@
     return reinterpret_cast<Definition*>(value_);
   }
 
+  intptr_t offset() const {
+    return offset_;
+  }
+
   RangeBoundary LowerBound() const;
   RangeBoundary UpperBound() const;
 
-  static RangeBoundary WidenMin(const RangeBoundary& old_min,
-                                const RangeBoundary& new_min) {
-    if (new_min.LowerBound().value() < old_min.LowerBound().value()) {
-      return OverflowedMinSmi();
-    }
-    return old_min;
-  }
-
-  static RangeBoundary WidenMax(const RangeBoundary& old_max,
-                                const RangeBoundary& new_max) {
-    if (new_max.UpperBound().value() > old_max.UpperBound().value()) {
-      return OverflowedMaxSmi();
-    }
-    return old_max;
-  }
-
-  static RangeBoundary NarrowMin(const RangeBoundary& old_min,
-                                 const RangeBoundary& new_min) {
-    ASSERT(old_min.IsConstant());
-    ASSERT(new_min.IsConstant());
-    return (old_min.value() == kMinusInfinity) ? new_min
-                                               : Min(old_min, new_min);
-  }
-
-  static RangeBoundary NarrowMax(const RangeBoundary& old_max,
-                                const RangeBoundary& new_max) {
-    return (old_max.value() == kPlusInfinity) ? new_max
-                                              : Max(old_max, new_max);
-  }
-
   void PrintTo(BufferFormatter* f) const;
+  const char* ToCString() const;
 
   static RangeBoundary Add(const RangeBoundary& a,
                            const RangeBoundary& b,
@@ -1736,25 +1697,6 @@
     return min_.Equals(other->min_) && max_.Equals(other->max_);
   }
 
-  static bool Update(Range** range_slot,
-                     const RangeBoundary& min,
-                     const RangeBoundary& max) {
-    if (*range_slot == NULL) {
-      *range_slot = new Range(min, max);
-      return true;
-    }
-
-    Range* range = *range_slot;
-    if (range->min_.Equals(min) && range->max_.Equals(max)) {
-      return false;
-    }
-
-    range->min_ = min;
-    range->max_ = max;
-
-    return true;
-  }
-
   static RangeBoundary ConstantMin(Range* range) {
     if (range == NULL) return RangeBoundary::MinSmi();
     return range->min().LowerBound();
@@ -1801,7 +1743,7 @@
   Value* value() const { return inputs_[0]; }
   Range* constraint() const { return constraint_; }
 
-  virtual bool InferRange(RangeOperator op);
+  virtual void InferRange();
 
   void AddDependency(Definition* defn) {
     Value* val = new Value(defn);
@@ -1854,7 +1796,7 @@
   virtual bool AttributesEqual(Instruction* other) const;
   virtual bool AffectedBySideEffect() const { return false; }
 
-  virtual bool InferRange(RangeOperator op);
+  virtual void InferRange();
 
  private:
   const Object& value_;
@@ -1913,7 +1855,8 @@
   virtual bool AffectedBySideEffect() const { return false; }
   virtual bool AttributesEqual(Instruction* other) const;
 
-  virtual intptr_t ResultCid() const { return kDynamicCid; }
+  virtual intptr_t ResultCid() const { return value()->ResultCid(); }
+  virtual intptr_t GetPropagatedCid();
 
   virtual Definition* Canonicalize();
 
@@ -2313,10 +2256,12 @@
 
   virtual bool CanDeoptimize() const {
     return (receiver_class_id() != kDoubleCid)
+        && (receiver_class_id() != kMintCid)
         && (receiver_class_id() != kSmiCid);
   }
   virtual bool HasSideEffect() const {
     return (receiver_class_id() != kDoubleCid)
+        && (receiver_class_id() != kMintCid)
         && (receiver_class_id() != kSmiCid);
   }
 
@@ -2695,6 +2640,10 @@
 
   virtual Representation representation() const;
 
+  virtual bool AttributesEqual(Instruction* other) const;
+
+  virtual bool AffectedBySideEffect() const { return true; }
+
  private:
   const intptr_t class_id_;
 
@@ -2991,7 +2940,8 @@
       : offset_in_bytes_(offset_in_bytes),
         type_(type),
         result_cid_(kDynamicCid),
-        immutable_(immutable) {
+        immutable_(immutable),
+        recognized_kind_(MethodRecognizer::kUnknown) {
     ASSERT(value != NULL);
     ASSERT(type.IsZoneHandle());  // May be null if field is not an instance.
     inputs_[0] = value;
@@ -3017,12 +2967,24 @@
 
   virtual bool AffectedBySideEffect() const { return !immutable_; }
 
+  virtual void InferRange();
+
+  void set_recognized_kind(MethodRecognizer::Kind kind) {
+    recognized_kind_ = kind;
+  }
+
+  MethodRecognizer::Kind recognized_kind() const {
+    return recognized_kind_;
+  }
+
  private:
   const intptr_t offset_in_bytes_;
   const AbstractType& type_;
   intptr_t result_cid_;
   const bool immutable_;
 
+  MethodRecognizer::Kind recognized_kind_;
+
   DISALLOW_COPY_AND_ASSIGN(LoadFieldInstr);
 };
 
@@ -3740,6 +3702,7 @@
     ASSERT(right != NULL);
     inputs_[0] = left;
     inputs_[1] = right;
+    deopt_id_ = instance_call->deopt_id();
   }
 
   Value* left() const { return inputs_[0]; }
@@ -3772,7 +3735,7 @@
 
   void PrintTo(BufferFormatter* f) const;
 
-  virtual bool InferRange(RangeOperator op);
+  virtual void InferRange();
 
  private:
   const Token::Kind op_kind_;
@@ -3789,17 +3752,16 @@
   UnarySmiOpInstr(Token::Kind op_kind,
                   InstanceCallInstr* instance_call,
                   Value* value)
-      : op_kind_(op_kind), instance_call_(instance_call) {
+      : op_kind_(op_kind) {
     ASSERT((op_kind == Token::kNEGATE) || (op_kind == Token::kBIT_NOT));
     ASSERT(value != NULL);
     inputs_[0] = value;
+    deopt_id_ = instance_call->deopt_id();
   }
 
   Value* value() const { return inputs_[0]; }
   Token::Kind op_kind() const { return op_kind_; }
 
-  InstanceCallInstr* instance_call() const { return instance_call_; }
-
   virtual void PrintOperandsTo(BufferFormatter* f) const;
 
   DECLARE_INSTRUCTION(UnarySmiOp)
@@ -3813,7 +3775,6 @@
 
  private:
   const Token::Kind op_kind_;
-  InstanceCallInstr* instance_call_;
 
   DISALLOW_COPY_AND_ASSIGN(UnarySmiOpInstr);
 };
@@ -3842,34 +3803,6 @@
 };
 
 
-class DoubleToDoubleInstr : public TemplateDefinition<1> {
- public:
-  DoubleToDoubleInstr(Value* value, InstanceCallInstr* instance_call)
-      : instance_call_(instance_call) {
-    ASSERT(value != NULL);
-    inputs_[0] = value;
-  }
-
-  Value* value() const { return inputs_[0]; }
-
-  InstanceCallInstr* instance_call() const { return instance_call_; }
-
-  DECLARE_INSTRUCTION(DoubleToDouble)
-  virtual RawAbstractType* CompileType() const;
-
-  virtual bool CanDeoptimize() const { return true; }
-
-  virtual bool HasSideEffect() const { return false; }
-
-  virtual intptr_t ResultCid() const { return kDoubleCid; }
-
- private:
-  InstanceCallInstr* instance_call_;
-
-  DISALLOW_COPY_AND_ASSIGN(DoubleToDoubleInstr);
-};
-
-
 class SmiToDoubleInstr : public TemplateDefinition<0> {
  public:
   explicit SmiToDoubleInstr(InstanceCallInstr* instance_call)
@@ -3929,12 +3862,7 @@
  public:
   CheckClassInstr(Value* value,
                   intptr_t deopt_id,
-                  const ICData& unary_checks)
-      : unary_checks_(unary_checks) {
-    ASSERT(value != NULL);
-    inputs_[0] = value;
-    deopt_id_ = deopt_id;
-  }
+                  const ICData& unary_checks);
 
   DECLARE_INSTRUCTION(CheckClass)
   virtual RawAbstractType* CompileType() const;
@@ -4027,6 +3955,8 @@
 
   intptr_t array_type() const { return array_type_; }
 
+  bool IsRedundant();
+
  private:
   intptr_t array_type_;
 
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index 7fcadfd..b1e67f4 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -191,26 +191,35 @@
 }
 
 
+static void EmitAssertBoolean(Register reg,
+                              intptr_t token_pos,
+                              LocationSummary* locs,
+                              FlowGraphCompiler* compiler) {
+  // Check that the type of the value is allowed in conditional context.
+  // Call the runtime if the object is not bool::true or bool::false.
+  ASSERT(locs->always_calls());
+  Label done;
+  __ CompareObject(reg, compiler->bool_true());
+  __ j(EQUAL, &done, Assembler::kNearJump);
+  __ CompareObject(reg, compiler->bool_false());
+  __ j(EQUAL, &done, Assembler::kNearJump);
+
+  __ pushl(reg);  // Push the source object.
+  compiler->GenerateCallRuntime(token_pos,
+                                kConditionTypeErrorRuntimeEntry,
+                                locs);
+  // We should never return here.
+  __ int3();
+  __ Bind(&done);
+}
+
+
 void AssertBooleanInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   Register obj = locs()->in(0).reg();
   Register result = locs()->out().reg();
 
   if (!is_eliminated()) {
-    // Check that the type of the value is allowed in conditional context.
-    // Call the runtime if the object is not bool::true or bool::false.
-    Label done;
-    __ CompareObject(obj, compiler->bool_true());
-    __ j(EQUAL, &done, Assembler::kNearJump);
-    __ CompareObject(obj, compiler->bool_false());
-    __ j(EQUAL, &done, Assembler::kNearJump);
-
-    __ pushl(obj);  // Push the source object.
-    compiler->GenerateCallRuntime(token_pos(),
-                                  kConditionTypeErrorRuntimeEntry,
-                                  locs());
-    // We should never return here.
-    __ int3();
-    __ Bind(&done);
+    EmitAssertBoolean(obj, token_pos(), locs(), compiler);
   }
   ASSERT(obj == result);
 }
@@ -332,7 +341,7 @@
                                    deopt_id,
                                    token_pos);
   }
-  const String& operator_name = String::ZoneHandle(Symbols::New("=="));
+  const String& operator_name = String::ZoneHandle(Symbols::EqualOperator());
   const int kNumberOfArguments = 2;
   const Array& kNoArgumentNames = Array::Handle();
   const int kNumArgumentsChecked = 2;
@@ -457,6 +466,9 @@
           __ jmp(&done);
         }
       } else {
+        if (branch->is_checked()) {
+          EmitAssertBoolean(EAX, token_pos, locs, compiler);
+        }
         __ CompareObject(EAX, compiler->bool_true());
         branch->EmitBranchOnCondition(compiler, cond);
       }
@@ -777,6 +789,9 @@
                              token_pos(),
                              Token::kEQ,  // kNE reverse occurs at branch.
                              locs());
+  if (branch->is_checked()) {
+    EmitAssertBoolean(EAX, token_pos(), locs(), compiler);
+  }
   Condition branch_condition = (kind() == Token::kNE) ? NOT_EQUAL : EQUAL;
   __ CompareObject(EAX, compiler->bool_true());
   branch->EmitBranchOnCondition(compiler, branch_condition);
@@ -964,7 +979,15 @@
           class_id(), array, Smi::Cast(index.constant()).Value());
 
   if (representation() == kUnboxedDouble) {
-    __ movsd(locs()->out().xmm_reg(), element_address);
+    if (class_id() == kFloat32ArrayCid) {
+      // Load single precision float.
+      __ movss(locs()->out().xmm_reg(), element_address);
+      // Promote to double.
+      __ cvtss2sd(locs()->out().xmm_reg(), locs()->out().xmm_reg());
+    } else {
+      ASSERT(class_id() == kFloat64ArrayCid);
+      __ movsd(locs()->out().xmm_reg(), element_address);
+    }
   } else {
     __ movl(locs()->out().reg(), element_address);
   }
@@ -973,9 +996,12 @@
 
 LocationSummary* StoreIndexedInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 3;
-  const intptr_t kNumTemps = 0;
+  const intptr_t kNumTemps = class_id() == kFloat32ArrayCid ? 1 : 0;
   LocationSummary* locs =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  if (class_id() == kFloat32ArrayCid) {
+    locs->set_temp(0, Location::RequiresXmmRegister());
+  }
   locs->set_in(0, Location::RequiresRegister());
   locs->set_in(1, CanBeImmediateIndex(index())
                     ? Location::RegisterOrConstant(index())
@@ -1002,6 +1028,14 @@
       FlowGraphCompiler::ElementAddressForIntIndex(
           class_id(), array, Smi::Cast(index.constant()).Value());
 
+  if (class_id() == kFloat32ArrayCid) {
+    // Convert to single precision.
+    __ cvtsd2ss(locs()->temp(0).xmm_reg(), locs()->in(2).xmm_reg());
+    // Store.
+    __ movss(element_address, locs()->temp(0).xmm_reg());
+    return;
+  }
+
   if (class_id() == kFloat64ArrayCid) {
     __ movsd(element_address, locs()->in(2).xmm_reg());
     return;
@@ -1555,7 +1589,7 @@
   ASSERT(left == result);
   Label* deopt = NULL;
   if (CanDeoptimize()) {
-      deopt  = compiler->AddDeoptStub(instance_call()->deopt_id(),
+      deopt  = compiler->AddDeoptStub(deopt_id(),
                                       kDeoptBinarySmiOp);
   }
 
@@ -1728,7 +1762,7 @@
         __ pushl(temp);
         __ pushl(right);
         compiler->GenerateStaticCall(
-            instance_call()->deopt_id(),
+            deopt_id(),
             instance_call()->token_pos(),
             target,
             kArgumentCount,
@@ -1942,7 +1976,7 @@
   ASSERT(value == locs()->out().reg());
   switch (op_kind()) {
     case Token::kNEGATE: {
-      Label* deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
+      Label* deopt = compiler->AddDeoptStub(deopt_id(),
                                             kDeoptUnaryOp);
       __ negl(value);
       __ j(OVERFLOW, deopt);
@@ -1958,33 +1992,6 @@
 }
 
 
-LocationSummary* DoubleToDoubleInstr::MakeLocationSummary() const {
-  const intptr_t kNumInputs = 1;
-  const intptr_t kNumTemps = 1;
-  LocationSummary* locs =
-      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  locs->set_in(0, Location::RequiresRegister());
-  locs->set_temp(0, Location::RequiresRegister());
-  locs->set_out(Location::SameAsFirstInput());
-  return locs;
-}
-
-
-void DoubleToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register value = locs()->in(0).reg();
-  Register result = locs()->out().reg();
-
-  Label* deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
-                                        kDeoptDoubleToDouble);
-  Register temp = locs()->temp(0).reg();
-  __ testl(value, Immediate(kSmiTagMask));
-  __ j(ZERO, deopt);  // Deoptimize if Smi.
-  __ CompareClassId(value, kDoubleCid, temp);
-  __ j(NOT_EQUAL, deopt);  // Deoptimize if not Double.
-  ASSERT(value == result);
-}
-
-
 LocationSummary* SmiToDoubleInstr::MakeLocationSummary() const {
   return MakeCallSummary();  // Calls a stub to allocate result.
 }
@@ -2138,6 +2145,8 @@
 
 
 void CheckClassInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  ASSERT((unary_checks().GetReceiverClassIdAt(0) != kSmiCid) ||
+         (unary_checks().NumberOfChecks() > 1));
   Register value = locs()->in(0).reg();
   Register temp = locs()->temp(0).reg();
   Label* deopt = compiler->AddDeoptStub(deopt_id(),
@@ -2213,12 +2222,15 @@
   ASSERT((array_type() == kArrayCid) ||
          (array_type() == kImmutableArrayCid) ||
          (array_type() == kGrowableObjectArrayCid) ||
-         (array_type() == kFloat64ArrayCid));
+         (array_type() == kFloat64ArrayCid) ||
+         (array_type() == kFloat32ArrayCid));
   intptr_t length_offset = -1;
   if (array_type() == kGrowableObjectArrayCid) {
     length_offset = GrowableObjectArray::length_offset();
   } else if (array_type() == kFloat64ArrayCid) {
     length_offset = Float64Array::length_offset();
+  } else if (array_type() == kFloat32ArrayCid) {
+    length_offset = Float32Array::length_offset();
   } else {
     length_offset = Array::length_offset();
   }
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index 336e932..be5de5f 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -199,26 +199,35 @@
 }
 
 
+static void EmitAssertBoolean(Register reg,
+                              intptr_t token_pos,
+                              LocationSummary* locs,
+                              FlowGraphCompiler* compiler) {
+  // Check that the type of the value is allowed in conditional context.
+  // Call the runtime if the object is not bool::true or bool::false.
+  ASSERT(locs->always_calls());
+  Label done;
+  __ CompareObject(reg, compiler->bool_true());
+  __ j(EQUAL, &done, Assembler::kNearJump);
+  __ CompareObject(reg, compiler->bool_false());
+  __ j(EQUAL, &done, Assembler::kNearJump);
+
+  __ pushq(reg);  // Push the source object.
+  compiler->GenerateCallRuntime(token_pos,
+                                kConditionTypeErrorRuntimeEntry,
+                                locs);
+  // We should never return here.
+  __ int3();
+  __ Bind(&done);
+}
+
+
 void AssertBooleanInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   Register obj = locs()->in(0).reg();
   Register result = locs()->out().reg();
 
   if (!is_eliminated()) {
-    // Check that the type of the value is allowed in conditional context.
-    // Call the runtime if the object is not bool::true or bool::false.
-    Label done;
-    __ CompareObject(obj, compiler->bool_true());
-    __ j(EQUAL, &done, Assembler::kNearJump);
-    __ CompareObject(obj, compiler->bool_false());
-    __ j(EQUAL, &done, Assembler::kNearJump);
-
-    __ pushq(obj);  // Push the source object.
-    compiler->GenerateCallRuntime(token_pos(),
-                                  kConditionTypeErrorRuntimeEntry,
-                                  locs());
-    // We should never return here.
-    __ int3();
-    __ Bind(&done);
+    EmitAssertBoolean(obj, token_pos(), locs(), compiler);
   }
   ASSERT(obj == result);
 }
@@ -330,7 +339,7 @@
                                    deopt_id,
                                    token_pos);
   }
-  const String& operator_name = String::ZoneHandle(Symbols::New("=="));
+  const String& operator_name = String::ZoneHandle(Symbols::EqualOperator());
   const int kNumberOfArguments = 2;
   const Array& kNoArgumentNames = Array::Handle();
   const int kNumArgumentsChecked = 2;
@@ -455,6 +464,9 @@
           __ jmp(&done);
         }
       } else {
+        if (branch->is_checked()) {
+          EmitAssertBoolean(RAX, token_pos, locs, compiler);
+        }
         __ CompareObject(RAX, compiler->bool_true());
         branch->EmitBranchOnCondition(compiler, cond);
       }
@@ -732,6 +744,9 @@
                              token_pos(),
                              Token::kEQ,  // kNE reverse occurs at branch.
                              locs());
+  if (branch->is_checked()) {
+    EmitAssertBoolean(RAX, token_pos(), locs(), compiler);
+  }
   Condition branch_condition = (kind() == Token::kNE) ? NOT_EQUAL : EQUAL;
   __ CompareObject(RAX, compiler->bool_true());
   branch->EmitBranchOnCondition(compiler, branch_condition);
@@ -921,7 +936,15 @@
           class_id(), array, Smi::Cast(index.constant()).Value());
 
   if (representation() == kUnboxedDouble) {
-    __ movsd(locs()->out().xmm_reg(), element_address);
+    if (class_id() == kFloat32ArrayCid) {
+      // Load single precision float.
+      __ movss(locs()->out().xmm_reg(), element_address);
+      // Promote to double.
+      __ cvtss2sd(locs()->out().xmm_reg(), locs()->out().xmm_reg());
+    } else {
+      ASSERT(class_id() == kFloat64ArrayCid);
+      __ movsd(locs()->out().xmm_reg(), element_address);
+    }
   } else {
     __ movq(locs()->out().reg(), element_address);
   }
@@ -930,9 +953,12 @@
 
 LocationSummary* StoreIndexedInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 3;
-  const intptr_t kNumTemps = 0;
+  const intptr_t kNumTemps = class_id() == kFloat32ArrayCid ? 1 : 0;
   LocationSummary* locs =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  if (class_id() == kFloat32ArrayCid) {
+    locs->set_temp(0, Location::RequiresXmmRegister());
+  }
   locs->set_in(0, Location::RequiresRegister());
   locs->set_in(1, CanBeImmediateIndex(index())
                     ? Location::RegisterOrConstant(index())
@@ -958,6 +984,14 @@
       FlowGraphCompiler::ElementAddressForIntIndex(
           class_id(), array, Smi::Cast(index.constant()).Value());
 
+  if (class_id() == kFloat32ArrayCid) {
+    // Convert to single precision.
+    __ cvtsd2ss(locs()->temp(0).xmm_reg(), locs()->in(2).xmm_reg());
+    // Store.
+    __ movss(element_address, locs()->temp(0).xmm_reg());
+    return;
+  }
+
   if (class_id() == kFloat64ArrayCid) {
     __ movsd(element_address, locs()->in(2).xmm_reg());
     return;
@@ -1526,7 +1560,7 @@
   ASSERT(left == result);
   Label* deopt = NULL;
   if (CanDeoptimize()) {
-    deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
+    deopt = compiler->AddDeoptStub(deopt_id(),
                                    kDeoptBinarySmiOp);
   }
 
@@ -1693,7 +1727,7 @@
         __ pushq(temp);
         __ pushq(right);
         compiler->GenerateStaticCall(
-            instance_call()->deopt_id(),
+            deopt_id(),
             instance_call()->token_pos(),
             target,
             kArgumentCount,
@@ -1907,7 +1941,7 @@
   ASSERT(value == locs()->out().reg());
   switch (op_kind()) {
     case Token::kNEGATE: {
-      Label* deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
+      Label* deopt = compiler->AddDeoptStub(deopt_id(),
                                             kDeoptUnaryOp);
       __ negq(value);
       __ j(OVERFLOW, deopt);
@@ -1923,32 +1957,6 @@
 }
 
 
-LocationSummary* DoubleToDoubleInstr::MakeLocationSummary() const {
-  const intptr_t kNumInputs = 1;
-  const intptr_t kNumTemps = 0;
-  LocationSummary* locs =
-      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  locs->set_in(0, Location::RequiresRegister());
-  locs->set_out(Location::SameAsFirstInput());
-  return locs;
-}
-
-
-void DoubleToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register value = locs()->in(0).reg();
-  Register result = locs()->out().reg();
-
-  Label* deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
-                                        kDeoptDoubleToDouble);
-
-  __ testq(value, Immediate(kSmiTagMask));
-  __ j(ZERO, deopt);  // Deoptimize if Smi.
-  __ CompareClassId(value, kDoubleCid);
-  __ j(NOT_EQUAL, deopt);  // Deoptimize if not Double.
-  ASSERT(value == result);
-}
-
-
 LocationSummary* SmiToDoubleInstr::MakeLocationSummary() const {
   return MakeCallSummary();  // Calls a stub to allocate result.
 }
@@ -2105,6 +2113,8 @@
 
 
 void CheckClassInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  ASSERT((unary_checks().GetReceiverClassIdAt(0) != kSmiCid) ||
+         (unary_checks().NumberOfChecks() > 1));
   Register value = locs()->in(0).reg();
   Register temp = locs()->temp(0).reg();
   Label* deopt = compiler->AddDeoptStub(deopt_id(),
@@ -2180,12 +2190,15 @@
   ASSERT((array_type() == kArrayCid) ||
          (array_type() == kImmutableArrayCid) ||
          (array_type() == kGrowableObjectArrayCid) ||
-         (array_type() == kFloat64ArrayCid));
+         (array_type() == kFloat64ArrayCid) ||
+         (array_type() == kFloat32ArrayCid));
   intptr_t length_offset = -1;
   if (array_type() == kGrowableObjectArrayCid) {
     length_offset = GrowableObjectArray::length_offset();
   } else if (array_type() == kFloat64ArrayCid) {
     length_offset = Float64Array::length_offset();
+  } else if (array_type() == kFloat32ArrayCid) {
+    length_offset = Float32Array::length_offset();
   } else {
     length_offset = Array::length_offset();
   }
diff --git a/runtime/vm/intrinsifier.h b/runtime/vm/intrinsifier.h
index 7516dbb..d127750 100644
--- a/runtime/vm/intrinsifier.h
+++ b/runtime/vm/intrinsifier.h
@@ -48,11 +48,10 @@
   V(_Double, -, Double_sub)                                                    \
   V(_Double, *, Double_mul)                                                    \
   V(_Double, /, Double_div)                                                    \
-  V(_Double, toDouble, Double_toDouble)                                        \
+  V(_Double, get:isNaN, Double_getIsNaN)                                       \
+  V(_Double, get:isNegative, Double_getIsNegative)                             \
   V(_Double, _mulFromInteger, Double_mulFromInteger)                           \
   V(_Double, .fromInteger, Double_fromInteger)                                 \
-  V(_Double, isNaN, Double_isNaN)                                              \
-  V(_Double, isNegative, Double_isNegative)                                    \
   V(_Double, toInt, Double_toInt)                                              \
   V(_ObjectArray, ., ObjectArray_Allocate)                                     \
   V(_ObjectArray, get:length, Array_getLength)                                 \
@@ -72,12 +71,12 @@
   V(::, sin, Math_sin)                                                         \
   V(::, cos, Math_cos)                                                         \
   V(Object, ==, Object_equal)                                                  \
+  V(_FixedSizeArrayIterator, get:hasNext, FixedSizeArrayIterator_getHasNext)   \
   V(_FixedSizeArrayIterator, next, FixedSizeArrayIterator_next)                \
-  V(_FixedSizeArrayIterator, hasNext, FixedSizeArrayIterator_hasNext)          \
+  V(_StringBase, get:hashCode, String_getHashCode)                             \
+  V(_StringBase, get:isEmpty, String_getIsEmpty)                               \
   V(_StringBase, get:length, String_getLength)                                 \
   V(_StringBase, charCodeAt, String_charCodeAt)                                \
-  V(_StringBase, hashCode, String_hashCode)                                    \
-  V(_StringBase, isEmpty, String_isEmpty)                                      \
   V(_ByteArrayBase, get:length, ByteArrayBase_getLength)                       \
   V(_Int8Array, [], Int8Array_getIndexed)                                      \
   V(_Int8Array, []=, Int8Array_setIndexed)                                     \
diff --git a/runtime/vm/intrinsifier_arm.cc b/runtime/vm/intrinsifier_arm.cc
index 111185b..9952aa9 100644
--- a/runtime/vm/intrinsifier_arm.cc
+++ b/runtime/vm/intrinsifier_arm.cc
@@ -235,10 +235,6 @@
 }
 
 
-bool Intrinsifier::Double_toDouble(Assembler* assembler) {
-  return false;
-}
-
 bool Intrinsifier::Double_add(Assembler* assembler) {
   return false;
 }
@@ -269,12 +265,12 @@
 }
 
 
-bool Intrinsifier::Double_isNaN(Assembler* assembler) {
+bool Intrinsifier::Double_getIsNaN(Assembler* assembler) {
   return false;
 }
 
 
-bool Intrinsifier::Double_isNegative(Assembler* assembler) {
+bool Intrinsifier::Double_getIsNegative(Assembler* assembler) {
   return false;
 }
 
@@ -304,7 +300,12 @@
 }
 
 
-bool Intrinsifier::FixedSizeArrayIterator_hasNext(Assembler* assembler) {
+bool Intrinsifier::FixedSizeArrayIterator_getHasNext(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::String_getHashCode(Assembler* assembler) {
   return false;
 }
 
@@ -319,12 +320,7 @@
 }
 
 
-bool Intrinsifier::String_hashCode(Assembler* assembler) {
-  return false;
-}
-
-
-bool Intrinsifier::String_isEmpty(Assembler* assembler) {
+bool Intrinsifier::String_getIsEmpty(Assembler* assembler) {
   return false;
 }
 
diff --git a/runtime/vm/intrinsifier_ia32.cc b/runtime/vm/intrinsifier_ia32.cc
index a6056ac..afdfff7 100644
--- a/runtime/vm/intrinsifier_ia32.cc
+++ b/runtime/vm/intrinsifier_ia32.cc
@@ -1042,31 +1042,100 @@
 }
 
 
+static void Push64SmiOrMint(Assembler* assembler,
+                            Register reg,
+                            Register tmp,
+                            Label* not_smi_or_mint) {
+  Label not_smi, done;
+  __ testl(reg, Immediate(kSmiTagMask));
+  __ j(NOT_ZERO, &not_smi, Assembler::kNearJump);
+  __ SmiUntag(reg);
+  // Sign extend to 64 bit
+  __ movl(tmp, reg);
+  __ sarl(tmp, Immediate(31));
+  __ pushl(tmp);
+  __ pushl(reg);
+  __ jmp(&done);
+  __ Bind(&not_smi);
+  __ CompareClassId(reg, kMintCid, tmp);
+  __ j(NOT_EQUAL, not_smi_or_mint);
+  // Mint.
+  __ pushl(FieldAddress(reg, Mint::value_offset() + kWordSize));
+  __ pushl(FieldAddress(reg, Mint::value_offset()));
+  __ Bind(&done);
+}
+
+
 static bool CompareIntegers(Assembler* assembler, Condition true_condition) {
-  Label fall_through, true_label;
+  Label try_mint_smi, is_true, is_false, drop_two_fall_through, fall_through;
   const Bool& bool_true = Bool::ZoneHandle(Bool::True());
   const Bool& bool_false = Bool::ZoneHandle(Bool::False());
-  TestBothArgumentsSmis(assembler, &fall_through);
+  TestBothArgumentsSmis(assembler, &try_mint_smi);
   // EAX contains the right argument.
   __ cmpl(Address(ESP, + 2 * kWordSize), EAX);
-  __ j(true_condition, &true_label, Assembler::kNearJump);
+  __ j(true_condition, &is_true, Assembler::kNearJump);
+  __ Bind(&is_false);
   __ LoadObject(EAX, bool_false);
   __ ret();
-  __ Bind(&true_label);
+  __ Bind(&is_true);
   __ LoadObject(EAX, bool_true);
   __ ret();
+
+  // 64-bit comparison
+  Condition hi_true_cond, hi_false_cond, lo_false_cond;
+  switch (true_condition) {
+    case LESS:
+    case LESS_EQUAL:
+      hi_true_cond = LESS;
+      hi_false_cond = GREATER;
+      lo_false_cond = (true_condition == LESS) ? ABOVE_EQUAL : ABOVE;
+      break;
+    case GREATER:
+    case GREATER_EQUAL:
+      hi_true_cond = GREATER;
+      hi_false_cond = LESS;
+      lo_false_cond = (true_condition == GREATER) ? BELOW_EQUAL : BELOW;
+      break;
+    default:
+      UNREACHABLE();
+      hi_true_cond = hi_false_cond = lo_false_cond = OVERFLOW;
+  }
+  __ Bind(&try_mint_smi);
+  // Note that EDX and ECX must be preserved in case we fall through to main
+  // method.
+  // EAX contains the right argument.
+  __ movl(EBX, Address(ESP, + 2 * kWordSize));  // Left argument.
+  // Push left as 64 bit integer.
+  Push64SmiOrMint(assembler, EBX, EDI, &fall_through);
+  // Push right as 64 bit integer.
+  Push64SmiOrMint(assembler, EAX, EDI, &drop_two_fall_through);
+  __ popl(EBX);  // Right.LO.
+  __ popl(ECX);  // Right.HI.
+  __ popl(EAX);  // Left.LO.
+  __ popl(EDX);  // Left.HI.
+  __ cmpl(EDX, ECX);  // cmpl left.HI, right.HI.
+  __ j(hi_false_cond, &is_false, Assembler::kNearJump);
+  __ j(hi_true_cond, &is_true, Assembler::kNearJump);
+  __ cmpl(EAX, EBX);  // cmpl left.LO, right.LO.
+  __ j(lo_false_cond, &is_false, Assembler::kNearJump);
+  // Else is true.
+  __ jmp(&is_true);
+
+  __ Bind(&drop_two_fall_through);
+  __ Drop(2);
   __ Bind(&fall_through);
   return false;
 }
 
 
-bool Intrinsifier::Integer_lessThan(Assembler* assembler) {
+
+bool Intrinsifier::Integer_greaterThanFromInt(Assembler* assembler) {
   return CompareIntegers(assembler, LESS);
 }
 
 
-bool Intrinsifier::Integer_greaterThanFromInt(Assembler* assembler) {
-  return CompareIntegers(assembler, LESS);
+bool Intrinsifier::Integer_lessThan(Assembler* assembler) {
+  return Integer_greaterThanFromInt(assembler);
 }
 
 
@@ -1259,13 +1328,6 @@
 }
 
 
-bool Intrinsifier::Double_toDouble(Assembler* assembler) {
-  __ movl(EAX, Address(ESP, + 1 * kWordSize));
-  __ ret();
-  return true;
-}
-
-
 // Expects left argument to be double (receiver). Right argument is unknown.
 // Both arguments are on stack.
 static bool DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) {
@@ -1365,7 +1427,7 @@
 }
 
 
-bool Intrinsifier::Double_isNaN(Assembler* assembler) {
+bool Intrinsifier::Double_getIsNaN(Assembler* assembler) {
   const Bool& bool_true = Bool::ZoneHandle(Bool::True());
   const Bool& bool_false = Bool::ZoneHandle(Bool::False());
   Label is_true;
@@ -1382,7 +1444,7 @@
 }
 
 
-bool Intrinsifier::Double_isNegative(Assembler* assembler) {
+bool Intrinsifier::Double_getIsNegative(Assembler* assembler) {
   const Bool& bool_true = Bool::ZoneHandle(Bool::True());
   const Bool& bool_false = Bool::ZoneHandle(Bool::False());
   Label is_false, is_true, is_zero;
@@ -1533,7 +1595,7 @@
 //     return _array[_pos++];
 //   }
 // Intrinsify: return _array[_pos++];
-// TODO(srdjan): Throw a 'NoMoreElementsException' exception if the iterator
+// TODO(srdjan): Throw a 'StateError' exception if the iterator
 // has no more elements.
 bool Intrinsifier::FixedSizeArrayIterator_next(Assembler* assembler) {
   Label fall_through;
@@ -1576,10 +1638,10 @@
 
 
 // Class 'FixedSizeArrayIterator':
-//   bool hasNext() {
+//   bool get hasNext {
 //     return _length > _pos;
 //   }
-bool Intrinsifier::FixedSizeArrayIterator_hasNext(Assembler* assembler) {
+bool Intrinsifier::FixedSizeArrayIterator_getHasNext(Assembler* assembler) {
   Label fall_through, is_true;
   const Bool& bool_true = Bool::ZoneHandle(Bool::True());
   const Bool& bool_false = Bool::ZoneHandle(Bool::False());
@@ -1606,6 +1668,19 @@
 }
 
 
+bool Intrinsifier::String_getHashCode(Assembler* assembler) {
+  Label fall_through;
+  __ movl(EAX, Address(ESP, + 1 * kWordSize));  // String object.
+  __ movl(EAX, FieldAddress(EAX, String::hash_offset()));
+  __ cmpl(EAX, Immediate(0));
+  __ j(EQUAL, &fall_through, Assembler::kNearJump);
+  __ ret();
+  __ Bind(&fall_through);
+  // Hash not yet computed.
+  return false;
+}
+
+
 bool Intrinsifier::String_getLength(Assembler* assembler) {
   __ movl(EAX, Address(ESP, + 1 * kWordSize));  // String object.
   __ movl(EAX, FieldAddress(EAX, String::length_offset()));
@@ -1636,20 +1711,7 @@
 }
 
 
-bool Intrinsifier::String_hashCode(Assembler* assembler) {
-  Label fall_through;
-  __ movl(EAX, Address(ESP, + 1 * kWordSize));  // String object.
-  __ movl(EAX, FieldAddress(EAX, String::hash_offset()));
-  __ cmpl(EAX, Immediate(0));
-  __ j(EQUAL, &fall_through, Assembler::kNearJump);
-  __ ret();
-  __ Bind(&fall_through);
-  // Hash not yet computed.
-  return false;
-}
-
-
-bool Intrinsifier::String_isEmpty(Assembler* assembler) {
+bool Intrinsifier::String_getIsEmpty(Assembler* assembler) {
   Label is_true;
   const Bool& bool_true = Bool::ZoneHandle(Bool::True());
   const Bool& bool_false = Bool::ZoneHandle(Bool::False());
diff --git a/runtime/vm/intrinsifier_x64.cc b/runtime/vm/intrinsifier_x64.cc
index a1851a6..affbf67 100644
--- a/runtime/vm/intrinsifier_x64.cc
+++ b/runtime/vm/intrinsifier_x64.cc
@@ -1147,16 +1147,6 @@
 }
 
 
-bool Intrinsifier::Double_toDouble(Assembler* assembler) {
-  __ movq(RAX, Address(RSP, + 1 * kWordSize));
-  __ ret();
-  // Generate enough code to satisfy patchability constraint.
-  intptr_t offset = __ CodeSize();
-  __ nop(JumpPattern::InstructionLength() - offset);
-  return true;
-}
-
-
 // Expects left argument to be double (receiver). Right argument is unknown.
 // Both arguments are on stack.
 static bool DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) {
@@ -1256,7 +1246,7 @@
 }
 
 
-bool Intrinsifier::Double_isNaN(Assembler* assembler) {
+bool Intrinsifier::Double_getIsNaN(Assembler* assembler) {
   const Bool& bool_true = Bool::ZoneHandle(Bool::True());
   const Bool& bool_false = Bool::ZoneHandle(Bool::False());
   Label is_true;
@@ -1273,7 +1263,7 @@
 }
 
 
-bool Intrinsifier::Double_isNegative(Assembler* assembler) {
+bool Intrinsifier::Double_getIsNegative(Assembler* assembler) {
   const Bool& bool_true = Bool::ZoneHandle(Bool::True());
   const Bool& bool_false = Bool::ZoneHandle(Bool::False());
   Label is_false, is_true, is_zero;
@@ -1436,7 +1426,7 @@
 //     return _array[_pos++];
 //   }
 // Intrinsify: return _array[_pos++];
-// TODO(srdjan): Throw a 'NoMoreElementsException' exception if the iterator
+// TODO(srdjan): Throw a 'StateError' exception if the iterator
 // has no more elements.
 bool Intrinsifier::FixedSizeArrayIterator_next(Assembler* assembler) {
   Label fall_through;
@@ -1479,10 +1469,10 @@
 
 
 // Class 'FixedSizeArrayIterator':
-//   bool hasNext() {
+//   bool get hasNext {
 //     return _length > _pos;
 //   }
-bool Intrinsifier::FixedSizeArrayIterator_hasNext(Assembler* assembler) {
+bool Intrinsifier::FixedSizeArrayIterator_getHasNext(Assembler* assembler) {
   Label fall_through, is_true;
   const Bool& bool_true = Bool::ZoneHandle(Bool::True());
   const Bool& bool_false = Bool::ZoneHandle(Bool::False());
@@ -1509,6 +1499,19 @@
 }
 
 
+bool Intrinsifier::String_getHashCode(Assembler* assembler) {
+  Label fall_through;
+  __ movq(RAX, Address(RSP, + 1 * kWordSize));  // String object.
+  __ movq(RAX, FieldAddress(RAX, String::hash_offset()));
+  __ cmpq(RAX, Immediate(0));
+  __ j(EQUAL, &fall_through, Assembler::kNearJump);
+  __ ret();
+  __ Bind(&fall_through);
+  // Hash not yet computed.
+  return false;
+}
+
+
 bool Intrinsifier::String_getLength(Assembler* assembler) {
   __ movq(RAX, Address(RSP, + 1 * kWordSize));  // String object.
   __ movq(RAX, FieldAddress(RAX, String::length_offset()));
@@ -1539,20 +1542,7 @@
 }
 
 
-bool Intrinsifier::String_hashCode(Assembler* assembler) {
-  Label fall_through;
-  __ movq(RAX, Address(RSP, + 1 * kWordSize));  // String object.
-  __ movq(RAX, FieldAddress(RAX, String::hash_offset()));
-  __ cmpq(RAX, Immediate(0));
-  __ j(EQUAL, &fall_through, Assembler::kNearJump);
-  __ ret();
-  __ Bind(&fall_through);
-  // Hash not yet computed.
-  return false;
-}
-
-
-bool Intrinsifier::String_isEmpty(Assembler* assembler) {
+bool Intrinsifier::String_getIsEmpty(Assembler* assembler) {
   Label is_true;
   const Bool& bool_true = Bool::ZoneHandle(Bool::True());
   const Bool& bool_false = Bool::ZoneHandle(Bool::False());
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 4054051..b8cb196 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -37,12 +37,14 @@
 
 DEFINE_FLAG(bool, generate_gdb_symbols, false,
     "Generate symbols of generated dart functions for debugging with GDB");
-DEFINE_FLAG(bool, reject_named_argument_as_positional, false,
+DEFINE_FLAG(bool, reject_named_argument_as_positional, true,
     "Enforce new rules for optional parameters and disallow passing of named "
     "arguments to optional positional formal parameters");
 DEFINE_FLAG(bool, show_internal_names, false,
     "Show names of internal classes (e.g. \"OneByteString\") in error messages "
     "instead of showing the corresponding interface names (e.g. \"String\")");
+DEFINE_FLAG(bool, trace_disabling_optimized_code, false,
+    "Trace disabling optimized code.");
 DECLARE_FLAG(bool, trace_compiler);
 DECLARE_FLAG(bool, eliminate_type_checks);
 DECLARE_FLAG(bool, enable_type_checks);
@@ -3017,8 +3019,14 @@
 
 void Function::SwitchToUnoptimizedCode() const {
   ASSERT(HasOptimizedCode());
+  const Code& current_code = Code::Handle(CurrentCode());
+  if (FLAG_trace_disabling_optimized_code) {
+    OS::Print("Disabling optimized code: '%s' entry: %#"Px"\n",
+      ToFullyQualifiedCString(),
+      current_code.EntryPoint());
+  }
   // Patch entry of the optimized code.
-  CodePatcher::PatchEntry(Code::Handle(CurrentCode()));
+  CodePatcher::PatchEntry(current_code);
   // Use previously compiled unoptimized code.
   SetCode(Code::Handle(unoptimized_code()));
   CodePatcher::RestoreEntry(Code::Handle(unoptimized_code()));
@@ -3361,10 +3369,21 @@
   set_kind_tag(AbstractBit::update(value, raw_ptr()->kind_tag_));
 }
 
+
 void Function::set_is_inlinable(bool value) const {
   set_kind_tag(InlinableBit::update(value, raw_ptr()->kind_tag_));
 }
 
+
+bool Function::IsInlineable() const {
+  // '==' call is handled specially.
+  const String& equality_name = String::Handle(Symbols::EqualOperator());
+  return InlinableBit::decode(raw_ptr()->kind_tag_) &&
+         HasCode() &&
+         name() != equality_name.raw();
+}
+
+
 intptr_t Function::NumParameters() const {
   return num_fixed_parameters() + NumOptionalParameters();
 }
@@ -6366,8 +6385,6 @@
                                       aligned_size,
                                       Heap::kCode);
     NoGCScope no_gc;
-    // TODO(iposva): Remove premarking once old and code spaces are merged.
-    raw->SetMarkBit();
     result ^= raw;
     result.set_size(size);
   }
@@ -6948,6 +6965,11 @@
 }
 
 
+void Code::set_resolved_static_calls(const GrowableObjectArray& val) const {
+  StorePointer(&raw_ptr()->resolved_static_calls_, val.raw());
+}
+
+
 const Code::Comments& Code::comments() const  {
   Comments* comments = new Code::Comments(raw_ptr()->comments_);
   return *comments;
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 5d9d3ea..b8bb4dd 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -1268,9 +1268,7 @@
   bool is_abstract() const { return AbstractBit::decode(raw_ptr()->kind_tag_); }
   void set_is_abstract(bool value) const;
 
-  bool is_inlinable() const {
-    return InlinableBit::decode(raw_ptr()->kind_tag_) && HasCode();
-  }
+  bool IsInlineable() const;
   void set_is_inlinable(bool value) const;
 
   bool HasOptimizedCode() const;
@@ -2428,6 +2426,11 @@
   void set_stackmaps(const Array& maps) const;
   RawStackmap* GetStackmap(uword pc, Array* stackmaps, Stackmap* map) const;
 
+  RawGrowableObjectArray* resolved_static_calls() const {
+    return raw_ptr()->resolved_static_calls_;
+  }
+  void set_resolved_static_calls(const GrowableObjectArray& val) const;
+
   class Comments : public ZoneAllocated {
    public:
     static Comments& New(intptr_t count);
diff --git a/runtime/vm/os_android.cc b/runtime/vm/os_android.cc
index 0d67d14..a33effe 100644
--- a/runtime/vm/os_android.cc
+++ b/runtime/vm/os_android.cc
@@ -28,17 +28,17 @@
 const char* OS::GetTimeZoneName(int64_t seconds_since_epoch) {
   tm decomposed;
   bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
-  ASSERT(succeeded);
-  return decomposed.tm_zone;
+  // If unsuccessful, return an empty string like V8 does.
+  return (succeeded && (decomposed.tm_zone != NULL)) ? decomposed.tm_zone : "";
 }
 
 
 int OS::GetTimeZoneOffsetInSeconds(int64_t seconds_since_epoch) {
   tm decomposed;
   bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
-  ASSERT(succeeded);
   // Even if the offset was 24 hours it would still easily fit into 32 bits.
-  return static_cast<int>(decomposed.tm_gmtoff);
+  // If unsuccessful, return zero like V8 does.
+  return succeeded ? static_cast<int>(decomposed.tm_gmtoff) : 0;
 }
 
 
diff --git a/runtime/vm/os_linux.cc b/runtime/vm/os_linux.cc
index 0d67d14..a33effe 100644
--- a/runtime/vm/os_linux.cc
+++ b/runtime/vm/os_linux.cc
@@ -28,17 +28,17 @@
 const char* OS::GetTimeZoneName(int64_t seconds_since_epoch) {
   tm decomposed;
   bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
-  ASSERT(succeeded);
-  return decomposed.tm_zone;
+  // If unsuccessful, return an empty string like V8 does.
+  return (succeeded && (decomposed.tm_zone != NULL)) ? decomposed.tm_zone : "";
 }
 
 
 int OS::GetTimeZoneOffsetInSeconds(int64_t seconds_since_epoch) {
   tm decomposed;
   bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
-  ASSERT(succeeded);
   // Even if the offset was 24 hours it would still easily fit into 32 bits.
-  return static_cast<int>(decomposed.tm_gmtoff);
+  // If unsuccessful, return zero like V8 does.
+  return succeeded ? static_cast<int>(decomposed.tm_gmtoff) : 0;
 }
 
 
diff --git a/runtime/vm/os_macos.cc b/runtime/vm/os_macos.cc
index a7ea2f0..94470b5 100644
--- a/runtime/vm/os_macos.cc
+++ b/runtime/vm/os_macos.cc
@@ -29,17 +29,17 @@
 const char* OS::GetTimeZoneName(int64_t seconds_since_epoch) {
   tm decomposed;
   bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
-  ASSERT(succeeded);
-  return decomposed.tm_zone;
+  // If unsuccessful, return an empty string like V8 does.
+  return (succeeded && (decomposed.tm_zone != NULL)) ? decomposed.tm_zone : "";
 }
 
 
 int OS::GetTimeZoneOffsetInSeconds(int64_t seconds_since_epoch) {
   tm decomposed;
   bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
-  ASSERT(succeeded);
   // Even if the offset was 24 hours it would still easily fit into 32 bits.
-  return static_cast<int>(decomposed.tm_gmtoff);
+  // If unsuccessful, return zero like V8 does.
+  return succeeded ? static_cast<int>(decomposed.tm_gmtoff) : 0;
 }
 
 
diff --git a/runtime/vm/os_win.cc b/runtime/vm/os_win.cc
index 3434ef4..6f3f4c4 100644
--- a/runtime/vm/os_win.cc
+++ b/runtime/vm/os_win.cc
@@ -36,10 +36,14 @@
   tm decomposed;
   // LocalTime will set _tzname.
   bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
-  ASSERT(succeeded);
-  int inDaylightSavingsTime = decomposed.tm_isdst;
-  ASSERT(inDaylightSavingsTime == 0 || inDaylightSavingsTime == 1);
-  return _tzname[inDaylightSavingsTime];
+  if (succeeded) {
+    int inDaylightSavingsTime = decomposed.tm_isdst;
+    ASSERT(inDaylightSavingsTime == 0 || inDaylightSavingsTime == 1);
+    return _tzname[inDaylightSavingsTime];
+  } else {
+    // Return an empty string like V8 does.
+    return "";
+  }
 }
 
 
@@ -47,17 +51,21 @@
   tm decomposed;
   // LocalTime will set _timezone.
   bool succeeded = LocalTime(seconds_since_epoch, &decomposed);
-  ASSERT(succeeded);
-  int inDaylightSavingsTime = decomposed.tm_isdst;
-  ASSERT(inDaylightSavingsTime == 0 || inDaylightSavingsTime == 1);
-  // Dart and Windows disagree on the sign of the bias.
-  int offset = static_cast<int>(-_timezone);
-  if (inDaylightSavingsTime == 1) {
-    static int daylight_bias = GetDaylightSavingBiasInSeconds();
-    // Subtract because windows and Dart disagree on the sign.
-    offset = offset - daylight_bias;
+  if (succeeded) {
+    int inDaylightSavingsTime = decomposed.tm_isdst;
+    ASSERT(inDaylightSavingsTime == 0 || inDaylightSavingsTime == 1);
+    // Dart and Windows disagree on the sign of the bias.
+    int offset = static_cast<int>(-_timezone);
+    if (inDaylightSavingsTime == 1) {
+      static int daylight_bias = GetDaylightSavingBiasInSeconds();
+      // Subtract because windows and Dart disagree on the sign.
+      offset = offset - daylight_bias;
+    }
+    return offset;
+  } else {
+    // Return zero like V8 does.
+    return 0;
   }
-  return offset;
 }
 
 
diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc
index 23538a7..e6c4b37 100644
--- a/runtime/vm/pages.cc
+++ b/runtime/vm/pages.cc
@@ -23,22 +23,24 @@
 DEFINE_FLAG(bool, print_free_list_after_gc, false,
             "Print free list statistics after a GC");
 
-HeapPage* HeapPage::Initialize(VirtualMemory* memory, bool is_executable) {
+HeapPage* HeapPage::Initialize(VirtualMemory* memory, PageType type) {
   ASSERT(memory->size() > VirtualMemory::PageSize());
+  bool is_executable = (type == kExecutable);
   memory->Commit(is_executable);
 
   HeapPage* result = reinterpret_cast<HeapPage*>(memory->address());
   result->memory_ = memory;
   result->next_ = NULL;
   result->used_ = 0;
+  result->executable_ = is_executable;
   return result;
 }
 
 
-HeapPage* HeapPage::Allocate(intptr_t size, bool is_executable) {
+HeapPage* HeapPage::Allocate(intptr_t size, PageType type) {
   VirtualMemory* memory =
       VirtualMemory::ReserveAligned(size, PageSpace::kPageAlignment);
-  return Initialize(memory, is_executable);
+  return Initialize(memory, type);
 }
 
 
@@ -87,12 +89,25 @@
 
 
 void HeapPage::WriteProtect(bool read_only) {
-  memory_->Protect(
-      read_only ? VirtualMemory::kReadOnly : VirtualMemory::kReadWrite);
+  VirtualMemory::Protection prot;
+  if (read_only) {
+    if (executable_) {
+      prot = VirtualMemory::kReadExecute;
+    } else {
+      prot = VirtualMemory::kReadOnly;
+    }
+  } else {
+    if (executable_) {
+      prot = VirtualMemory::kReadWriteExecute;
+    } else {
+      prot = VirtualMemory::kReadWrite;
+    }
+  }
+  memory_->Protect(prot);
 }
 
 
-PageSpace::PageSpace(Heap* heap, intptr_t max_capacity, bool is_executable)
+PageSpace::PageSpace(Heap* heap, intptr_t max_capacity)
     : freelist_(),
       heap_(heap),
       pages_(NULL),
@@ -102,7 +117,6 @@
       capacity_(0),
       in_use_(0),
       count_(0),
-      is_executable_(is_executable),
       sweeping_(false),
       page_space_controller_(FLAG_heap_growth_space_ratio,
                              FLAG_heap_growth_rate,
@@ -123,8 +137,8 @@
 }
 
 
-HeapPage* PageSpace::AllocatePage() {
-  HeapPage* page = HeapPage::Allocate(kPageSize, is_executable_);
+HeapPage* PageSpace::AllocatePage(HeapPage::PageType type) {
+  HeapPage* page = HeapPage::Allocate(kPageSize, type);
   if (pages_ == NULL) {
     pages_ = page;
   } else {
@@ -137,9 +151,9 @@
 }
 
 
-HeapPage* PageSpace::AllocateLargePage(intptr_t size) {
+HeapPage* PageSpace::AllocateLargePage(intptr_t size, HeapPage::PageType type) {
   intptr_t page_size = LargePageSizeFor(size);
-  HeapPage* page = HeapPage::Allocate(page_size, is_executable_);
+  HeapPage* page = HeapPage::Allocate(page_size, type);
   page->set_next(large_pages_);
   large_pages_ = page;
   capacity_ += page_size;
@@ -187,28 +201,25 @@
 }
 
 
-uword PageSpace::TryAllocate(intptr_t size) {
-  return TryAllocate(size, kControlGrowth);
-}
-
-
-uword PageSpace::TryAllocate(intptr_t size, GrowthPolicy growth_policy) {
+uword PageSpace::TryAllocate(intptr_t size,
+                             HeapPage::PageType type,
+                             GrowthPolicy growth_policy) {
   ASSERT(size >= kObjectAlignment);
   ASSERT(Utils::IsAligned(size, kObjectAlignment));
   uword result = 0;
   if (size < kAllocatablePageSize) {
-    result = freelist_.TryAllocate(size);
+    result = freelist_[type].TryAllocate(size);
     if ((result == 0) &&
         (page_space_controller_.CanGrowPageSpace(size) ||
          growth_policy == kForceGrowth) &&
         CanIncreaseCapacity(kPageSize)) {
-      HeapPage* page = AllocatePage();
+      HeapPage* page = AllocatePage(type);
       ASSERT(page != NULL);
       // Start of the newly allocated page is the allocated object.
       result = page->object_start();
       // Enqueue the remainder in the free list.
       uword free_start = result + size;
-      freelist_.Free(free_start, page->object_end() - free_start);
+      freelist_[type].Free(free_start, page->object_end() - free_start);
     }
   } else {
     // Large page allocation.
@@ -218,7 +229,7 @@
       return 0;
     }
     if (CanIncreaseCapacity(page_size)) {
-      HeapPage* page = AllocateLargePage(size);
+      HeapPage* page = AllocateLargePage(size, type);
       if (page != NULL) {
         result = page->object_start();
       }
@@ -252,6 +263,26 @@
 }
 
 
+bool PageSpace::Contains(uword addr, HeapPage::PageType type) const {
+  HeapPage* page = pages_;
+  while (page != NULL) {
+    if ((page->type() == type) && page->Contains(addr)) {
+      return true;
+    }
+    page = page->next();
+  }
+
+  page = large_pages_;
+  while (page != NULL) {
+    if ((page->type() == type) && page->Contains(addr)) {
+      return true;
+    }
+    page = page->next();
+  }
+  return false;
+}
+
+
 void PageSpace::StartEndAddress(uword* start, uword* end) const {
   ASSERT(pages_ != NULL || large_pages_ != NULL);
   *start = static_cast<uword>(~0);
@@ -319,22 +350,27 @@
 }
 
 
-RawObject* PageSpace::FindObject(FindObjectVisitor* visitor) const {
+RawObject* PageSpace::FindObject(FindObjectVisitor* visitor,
+                                 HeapPage::PageType type) const {
   ASSERT(Isolate::Current()->no_gc_scope_depth() != 0);
   HeapPage* page = pages_;
   while (page != NULL) {
-    RawObject* obj = page->FindObject(visitor);
-    if (obj != Object::null()) {
-      return obj;
+    if (page->type() == type) {
+      RawObject* obj = page->FindObject(visitor);
+      if (obj != Object::null()) {
+        return obj;
+      }
     }
     page = page->next();
   }
 
   page = large_pages_;
   while (page != NULL) {
-    RawObject* obj = page->FindObject(visitor);
-    if (obj != Object::null()) {
-      return obj;
+    if (page->type() == type) {
+      RawObject* obj = page->FindObject(visitor);
+      if (obj != Object::null()) {
+        return obj;
+      }
     }
     page = page->next();
   }
@@ -364,7 +400,10 @@
   NoHandleScope no_handles(isolate);
 
   if (FLAG_print_free_list_before_gc) {
-    freelist_.Print();
+    OS::Print("Data Freelist:\n");
+    freelist_[HeapPage::kData].Print();
+    OS::Print("Executable Freelist:\n");
+    freelist_[HeapPage::kExecutable].Print();
   }
 
   if (FLAG_verify_before_gc) {
@@ -386,15 +425,16 @@
 
   // Reset the bump allocation page to unused.
   // Reset the freelists and setup sweeping.
-  freelist_.Reset();
+  freelist_[HeapPage::kData].Reset();
+  freelist_[HeapPage::kExecutable].Reset();
   GCSweeper sweeper(heap_);
   intptr_t in_use = 0;
 
   HeapPage* prev_page = NULL;
   HeapPage* page = pages_;
   while (page != NULL) {
-    intptr_t page_in_use = sweeper.SweepPage(page, &freelist_);
     HeapPage* next_page = page->next();
+    intptr_t page_in_use = sweeper.SweepPage(page, &freelist_[page->type()]);
     if (page_in_use == 0) {
       FreePage(page, prev_page);
     } else {
@@ -442,7 +482,10 @@
   }
 
   if (FLAG_print_free_list_after_gc) {
-    freelist_.Print();
+    OS::Print("Data Freelist:\n");
+    freelist_[HeapPage::kData].Print();
+    OS::Print("Executable Freelist:\n");
+    freelist_[HeapPage::kExecutable].Print();
   }
 
   if (FLAG_verify_after_gc) {
diff --git a/runtime/vm/pages.h b/runtime/vm/pages.h
index 3ce7511..4f51658 100644
--- a/runtime/vm/pages.h
+++ b/runtime/vm/pages.h
@@ -21,6 +21,12 @@
 // able to get to a HeapPage header quickly based on a pointer to an object.
 class HeapPage {
  public:
+  enum PageType {
+    kData = 0,
+    kExecutable,
+    kNumPageTypes
+  };
+
   HeapPage* next() const { return next_; }
   void set_next(HeapPage* next) { next_ = next; }
 
@@ -29,7 +35,8 @@
   }
 
   uword object_start() const {
-    return (reinterpret_cast<uword>(this) + sizeof(HeapPage));
+    return (reinterpret_cast<uword>(this) +
+            Utils::RoundUp(sizeof(HeapPage), kObjectAlignment));
   }
   uword object_end() const {
     return object_end_;
@@ -41,6 +48,10 @@
     used_ += size;
   }
 
+  PageType type() const {
+    return executable_ ? kExecutable : kData;
+  }
+
   void VisitObjects(ObjectVisitor* visitor) const;
   void VisitObjectPointers(ObjectPointerVisitor* visitor) const;
 
@@ -54,8 +65,8 @@
     object_end_ = val;
   }
 
-  static HeapPage* Initialize(VirtualMemory* memory, bool is_executable);
-  static HeapPage* Allocate(intptr_t size, bool is_executable);
+  static HeapPage* Initialize(VirtualMemory* memory, PageType type);
+  static HeapPage* Allocate(intptr_t size, PageType type);
 
   // Deallocate the virtual memory backing this page. The page pointer to this
   // page becomes immediately inaccessible.
@@ -65,6 +76,7 @@
   HeapPage* next_;
   uword used_;
   uword object_end_;
+  bool executable_;
 
   friend class PageSpace;
 
@@ -157,16 +169,18 @@
     kForceGrowth
   };
 
-  PageSpace(Heap* heap, intptr_t max_capacity, bool is_executable = false);
+  PageSpace(Heap* heap, intptr_t max_capacity);
   ~PageSpace();
 
-  uword TryAllocate(intptr_t size);
-  uword TryAllocate(intptr_t size, GrowthPolicy growth_policy);
+  uword TryAllocate(intptr_t size,
+                    HeapPage::PageType type = HeapPage::kData,
+                    GrowthPolicy growth_policy = kControlGrowth);
 
   intptr_t in_use() const { return in_use_; }
   intptr_t capacity() const { return capacity_; }
 
   bool Contains(uword addr) const;
+  bool Contains(uword addr, HeapPage::PageType type) const;
   bool IsValidAddress(uword addr) const {
     return Contains(addr);
   }
@@ -177,7 +191,8 @@
   void VisitObjects(ObjectVisitor* visitor) const;
   void VisitObjectPointers(ObjectPointerVisitor* visitor) const;
 
-  RawObject* FindObject(FindObjectVisitor* visitor) const;
+  RawObject* FindObject(FindObjectVisitor* visitor,
+                        HeapPage::PageType type) const;
 
   // Collect the garbage in the page space using mark-sweep.
   void MarkSweep(bool invoke_api_callbacks, const char* gc_reason);
@@ -208,9 +223,9 @@
  private:
   static const intptr_t kAllocatablePageSize = kPageSize - sizeof(HeapPage);
 
-  HeapPage* AllocatePage();
+  HeapPage* AllocatePage(HeapPage::PageType type);
   void FreePage(HeapPage* page, HeapPage* previous_page);
-  HeapPage* AllocateLargePage(intptr_t size);
+  HeapPage* AllocateLargePage(intptr_t size, HeapPage::PageType type);
   void FreeLargePage(HeapPage* page, HeapPage* previous_page);
   void FreePages(HeapPage* pages);
 
@@ -221,7 +236,7 @@
     return increase <= (max_capacity_ - capacity_);
   }
 
-  FreeList freelist_;
+  FreeList freelist_[HeapPage::kNumPageTypes];
 
   Heap* heap_;
 
@@ -239,8 +254,6 @@
   // Old-gen GC cycle count.
   int count_;
 
-  bool is_executable_;
-
   // Keep track whether a MarkSweep is currently running.
   bool sweeping_;
 
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 29e6c29..ef5e8ae 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -1542,6 +1542,16 @@
   const Function& super_getter = Function::ZoneHandle(
       Resolver::ResolveDynamicAnyArgs(super_class, getter_name));
   if (super_getter.IsNull()) {
+    const String& setter_name =
+        String::ZoneHandle(Field::SetterName(field_name));
+    const Function& super_setter = Function::ZoneHandle(
+        Resolver::ResolveDynamicAnyArgs(super_class, setter_name));
+    if (!super_setter.IsNull()) {
+      return new StaticGetterNode(
+          field_pos, implicit_argument, true, super_class, field_name);
+    }
+  }
+  if (super_getter.IsNull()) {
     // Check if this is an access to an implicit closure using 'super'.
     // If a function exists of the specified field_name then try
     // accessing it as a getter, at runtime we will handle this by
@@ -2282,11 +2292,9 @@
     ParseNativeFunctionBlock(&params, func);
   } else if (func.is_external()) {
     // Body of an external method contains a single throw.
+    const String& function_name = String::ZoneHandle(func.name());
     current_block_->statements->Add(
-        new ThrowNode(TokenPos(),
-            new LiteralNode(TokenPos(),
-                String::ZoneHandle(
-                    Symbols::New("External implementation missing."))), NULL));
+        ThrowNoSuchMethodError(TokenPos(), function_name));
   } else {
     UnexpectedToken();
   }
@@ -2507,8 +2515,10 @@
     if (type.IsTypeParameter() || type.IsDynamicType()) {
       // Replace the type with a malformed type and compile a throw when called.
       redirection_type = ClassFinalizer::NewFinalizedMalformedType(
+          Error::Handle(),  // No previous error.
           current_class(),
           type_pos,
+          ClassFinalizer::kTryResolve,  // No compile-time error.
           "factory '%s' may not redirect to %s'%s'",
           method->name->ToCString(),
           type.IsTypeParameter() ? "type parameter " : "",
@@ -5698,11 +5708,10 @@
   current_block_->statements->Add(iterator_init);
 
   // Generate while loop condition.
-  AstNode* iterator_has_next = new InstanceCallNode(
+  AstNode* iterator_has_next = new InstanceGetterNode(
       collection_pos,
       new LoadLocalNode(collection_pos, iterator_var),
-      String::ZoneHandle(Symbols::HasNext()),
-      no_args);
+      String::ZoneHandle(Symbols::HasNext()));
 
   // Parse the for loop body. Ideally, we would use ParseNestedStatement()
   // here, but that does not work well because we have to insert an implicit
@@ -6438,6 +6447,19 @@
 }
 
 
+RawError* Parser::FormatErrorMsg(const Script& script,
+                                 intptr_t token_pos,
+                                 const char* message_header,
+                                 const char* format, ...) {
+  va_list args;
+  va_start(args, format);
+  const Error& error = Error::Handle(
+      FormatError(script, token_pos, message_header, format, args));
+  va_end(args);
+  return error.raw();
+}
+
+
 RawString* Parser::FormatMessage(const Script& script,
                                  intptr_t token_pos,
                                  const char* message_header,
@@ -7629,37 +7651,67 @@
           if (ParsingStaticMember()) {
             ASSERT(scope_class.raw() == current_class().raw());
             *type = ClassFinalizer::NewFinalizedMalformedType(
+                Error::Handle(),  // No previous error.
                 scope_class,
                 type->token_pos(),
+                finalization,
                 "type parameter '%s' cannot be referenced "
                 "from static member",
                 String::Handle(type_parameter.name()).ToCString());
             return;
           }
-          // TODO(regis): Should this be a malformed type as well?
-          // A type parameter cannot be parameterized, so report an error if
-          // type arguments have previously been parsed.
+          // A type parameter cannot be parameterized, so make the type
+          // malformed if type arguments have previously been parsed.
           if (!AbstractTypeArguments::Handle(type->arguments()).IsNull()) {
-            ErrorMsg(type_parameter.token_pos(),
-                     "type parameter '%s' cannot be parameterized",
-                     String::Handle(type_parameter.name()).ToCString());
+            *type = ClassFinalizer::NewFinalizedMalformedType(
+                Error::Handle(),  // No previous error.
+                scope_class,
+                type_parameter.token_pos(),
+                finalization,
+                "type parameter '%s' cannot be parameterized",
+                String::Handle(type_parameter.name()).ToCString());
+            return;
           }
           *type = type_parameter.raw();
           return;
         }
       }
       // Resolve classname in the scope of the current library.
+      Error& error = Error::Handle();
       resolved_type_class =
           ResolveClassInCurrentLibraryScope(unresolved_class.token_pos(),
-                                            unresolved_class_name);
+                                            unresolved_class_name,
+                                            &error);
+      if (!error.IsNull()) {
+        *type = ClassFinalizer::NewFinalizedMalformedType(
+            error,
+            scope_class,
+            unresolved_class.token_pos(),
+            finalization,
+            "cannot resolve class '%s'",
+            unresolved_class_name.ToCString());
+        return;
+      }
     } else {
       LibraryPrefix& lib_prefix =
           LibraryPrefix::Handle(unresolved_class.library_prefix());
       // Resolve class name in the scope of the library prefix.
+      Error& error = Error::Handle();
       resolved_type_class =
           ResolveClassInPrefixScope(unresolved_class.token_pos(),
-                                   lib_prefix,
-                                   unresolved_class_name);
+                                    lib_prefix,
+                                    unresolved_class_name,
+                                    &error);
+      if (!error.IsNull()) {
+        *type = ClassFinalizer::NewFinalizedMalformedType(
+            error,
+            scope_class,
+            unresolved_class.token_pos(),
+            finalization,
+            "cannot resolve class '%s'",
+            unresolved_class_name.ToCString());
+        return;
+      }
     }
     // At this point, we can only have a parameterized_type.
     Type& parameterized_type = Type::Handle();
@@ -8127,7 +8179,8 @@
 // of the current library, but is defined in more than one imported
 // library, i.e. if the name cannot be resolved unambiguously.
 RawObject* Parser::ResolveNameInCurrentLibraryScope(intptr_t ident_pos,
-                                                    const String& name) {
+                                                    const String& name,
+                                                    Error* error) {
   TRACE_PARSER("ResolveNameInCurrentLibraryScope");
   Object& obj = Object::Handle(LookupNameInLibrary(library_, name));
   if (obj.IsNull()) {
@@ -8144,20 +8197,30 @@
         const Library& lib = Library::Handle(import.library());
         if (!first_lib_url.IsNull()) {
           // Found duplicate definition.
+          Error& ambiguous_ref_error = Error::Handle();
           if (first_lib_url.raw() == lib.url()) {
-            ErrorMsg(ident_pos,
-                     "ambiguous reference: "
-                     "'%s' as library '%s' is imported multiple times",
-                     name.ToCString(),
-                     first_lib_url.ToCString());
+            ambiguous_ref_error = FormatErrorMsg(
+                script_, ident_pos, "Error",
+                "ambiguous reference: "
+                "'%s' as library '%s' is imported multiple times",
+                name.ToCString(),
+                first_lib_url.ToCString());
           } else {
-            ErrorMsg(ident_pos,
-                     "ambiguous reference: "
-                     "'%s' is defined in library '%s' and also in '%s'",
-                     name.ToCString(),
-                     first_lib_url.ToCString(),
-                     String::Handle(lib.url()).ToCString());
+            ambiguous_ref_error = FormatErrorMsg(
+                script_, ident_pos, "Error",
+                "ambiguous reference: "
+                "'%s' is defined in library '%s' and also in '%s'",
+                name.ToCString(),
+                first_lib_url.ToCString(),
+                String::Handle(lib.url()).ToCString());
           }
+          if (error == NULL) {
+            // Report a compile time error since the caller is not interested
+            // in the error.
+            ErrorMsg(ambiguous_ref_error);
+          }
+          *error = ambiguous_ref_error.raw();
+          return Object::null();
         } else {
           first_lib_url = lib.url();
           obj = imported_obj.raw();
@@ -8170,9 +8233,10 @@
 
 
 RawClass* Parser::ResolveClassInCurrentLibraryScope(intptr_t ident_pos,
-                                                    const String& name) {
+                                                    const String& name,
+                                                    Error* error) {
   const Object& obj =
-      Object::Handle(ResolveNameInCurrentLibraryScope(ident_pos, name));
+      Object::Handle(ResolveNameInCurrentLibraryScope(ident_pos, name, error));
   if (obj.IsClass()) {
     return Class::Cast(obj).raw();
   }
@@ -8190,7 +8254,7 @@
                                                    const String& ident) {
   TRACE_PARSER("ResolveIdentInCurrentLibraryScope");
   const Object& obj =
-    Object::Handle(ResolveNameInCurrentLibraryScope(ident_pos, ident));
+    Object::Handle(ResolveNameInCurrentLibraryScope(ident_pos, ident, NULL));
   if (obj.IsClass()) {
     const Class& cls = Class::Cast(obj);
     return new PrimaryNode(ident_pos, Class::ZoneHandle(cls.raw()));
@@ -8221,7 +8285,8 @@
 
 RawObject* Parser::ResolveNameInPrefixScope(intptr_t ident_pos,
                                             const LibraryPrefix& prefix,
-                                            const String& name) {
+                                            const String& name,
+                                            Error* error) {
   TRACE_PARSER("ResolveNameInPrefixScope");
   Namespace& import = Namespace::Handle();
   String& first_lib_url = String::Handle();
@@ -8238,19 +8303,29 @@
         first_lib_url = lib.url();
       } else {
         // Found duplicate definition.
+        Error& ambiguous_ref_error = Error::Handle();
         if (first_lib_url.raw() == lib.url()) {
-          ErrorMsg(ident_pos,
-                   "ambiguous reference: '%s.%s' is imported multiple times",
-                   String::Handle(prefix.name()).ToCString(),
-                   name.ToCString());
+          ambiguous_ref_error = FormatErrorMsg(
+              script_, ident_pos, "Error",
+              "ambiguous reference: '%s.%s' is imported multiple times",
+              String::Handle(prefix.name()).ToCString(),
+              name.ToCString());
         } else {
-          ErrorMsg(ident_pos,
-                   "ambiguous reference: '%s.%s' is defined in '%s' and '%s'",
-                   String::Handle(prefix.name()).ToCString(),
-                   name.ToCString(),
-                   first_lib_url.ToCString(),
-                   String::Handle(lib.url()).ToCString());
+          ambiguous_ref_error = FormatErrorMsg(
+              script_, ident_pos, "Error",
+              "ambiguous reference: '%s.%s' is defined in '%s' and '%s'",
+              String::Handle(prefix.name()).ToCString(),
+              name.ToCString(),
+              first_lib_url.ToCString(),
+              String::Handle(lib.url()).ToCString());
         }
+        if (error == NULL) {
+          // Report a compile time error since the caller is not interested
+          // in the error.
+          ErrorMsg(ambiguous_ref_error);
+        }
+        *error = ambiguous_ref_error.raw();
+        return Object::null();
       }
     }
   }
@@ -8260,9 +8335,10 @@
 
 RawClass* Parser::ResolveClassInPrefixScope(intptr_t ident_pos,
                                             const LibraryPrefix& prefix,
-                                            const String& name) {
+                                            const String& name,
+                                            Error* error) {
   const Object& obj =
-      Object::Handle(ResolveNameInPrefixScope(ident_pos, prefix, name));
+      Object::Handle(ResolveNameInPrefixScope(ident_pos, prefix, name, error));
   if (obj.IsClass()) {
     return Class::Cast(obj).raw();
   }
@@ -8279,7 +8355,7 @@
                                            const String& ident) {
   TRACE_PARSER("ResolveIdentInPrefixScope");
   Object& obj =
-      Object::Handle(ResolveNameInPrefixScope(ident_pos, prefix, ident));
+      Object::Handle(ResolveNameInPrefixScope(ident_pos, prefix, ident, NULL));
   if (obj.IsNull()) {
     // Unresolved prefixed primary identifier.
     ErrorMsg(ident_pos, "identifier '%s.%s' cannot be resolved",
@@ -8878,10 +8954,13 @@
   // In case the type is malformed, throw a dynamic type error after finishing
   // parsing the instance creation expression.
   if (type.IsTypeParameter() || type.IsDynamicType()) {
+    ASSERT(!type.IsMalformed());
     // Replace the type with a malformed type.
     type = ClassFinalizer::NewFinalizedMalformedType(
+        Error::Handle(),  // No previous error.
         current_class(),
         type_pos,
+        ClassFinalizer::kTryResolve,  // No compile-time error.
         "%s'%s' cannot be instantiated",
         type.IsTypeParameter() ? "type parameter " : "",
         type.IsTypeParameter() ?
@@ -8945,8 +9024,10 @@
       // Replace the type with a malformed type and compile a throw or report
       // a compile-time error if the constructor is const.
       type = ClassFinalizer::NewFinalizedMalformedType(
+          Error::Handle(),  // No previous error.
           current_class(),
           call_pos,
+          ClassFinalizer::kTryResolve,  // No compile-time error.
           "interface '%s' has no constructor named '%s'",
           type_class_name.ToCString(),
           external_constructor_name.ToCString());
@@ -9013,8 +9094,10 @@
       // Replace the type with a malformed type and compile a throw or report a
       // compile-time error if the constructor is const.
       type = ClassFinalizer::NewFinalizedMalformedType(
+          Error::Handle(),  // No previous error.
           current_class(),
           call_pos,
+          ClassFinalizer::kTryResolve,  // No compile-time error.
           "class '%s' has no constructor or factory named '%s'",
           String::Handle(constructor_class.Name()).ToCString(),
           external_constructor_name.ToCString());
@@ -9425,8 +9508,6 @@
   } else if (CurrentToken() == Token::kSUPER) {
     if (current_function().is_static()) {
       ErrorMsg("cannot access superclass from static method");
-    } else if (current_function().IsLocalFunction()) {
-      ErrorMsg("cannot access superclass from local function");
     }
     ConsumeToken();
     if (CurrentToken() == Token::kPERIOD) {
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index d6e7375..12c1302 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -28,7 +28,7 @@
 struct FieldInitExpression;
 
 // The class ParsedFunction holds the result of parsing a function.
-class ParsedFunction : public ValueObject {
+class ParsedFunction : public ZoneAllocated {
  public:
   static const int kFirstLocalSlotIndex = -2;
 
@@ -135,6 +135,11 @@
                                const char* message_header,
                                const char* format,
                                va_list args);
+  static RawError* FormatErrorMsg(const Script& script,
+                                  intptr_t token_pos,
+                                  const char* message_header,
+                                  const char* format, ...)
+    PRINTF_ATTRIBUTE(4, 5);
 
   // Same as FormatError, but appends the new error to the 'prev_error'.
   static RawError* FormatErrorWithAppend(const Error& prev_error,
@@ -504,28 +509,32 @@
   static const bool kResolveLocally = true;
   static const bool kResolveIncludingImports = false;
 
-  // Resolve a primary identifier in the libary or prefix scope and
+  // Resolve a primary identifier in the library or prefix scope and
   // generate the corresponding AstNode.
+  AstNode* ResolveIdentInCurrentLibraryScope(intptr_t ident_pos,
+                                             const String& ident);
   AstNode* ResolveIdentInPrefixScope(intptr_t ident_pos,
                                      const LibraryPrefix& prefix,
                                      const String& ident);
-  AstNode* ResolveIdentInCurrentLibraryScope(intptr_t ident_pos,
-                                             const String& ident);
 
   // Find class with the given name in the library or prefix scope.
   RawClass* ResolveClassInCurrentLibraryScope(intptr_t ident_pos,
-                                              const String& name);
+                                              const String& name,
+                                              Error* error);
   RawClass* ResolveClassInPrefixScope(intptr_t ident_pos,
                                       const LibraryPrefix& prefix,
-                                      const String& name);
+                                      const String& name,
+                                      Error* error);
 
   // Find name in the library or prefix scope and return the corresponding
   // object (field, class, function etc).
   RawObject* ResolveNameInCurrentLibraryScope(intptr_t ident_pos,
-                                              const String& ident);
+                                              const String& ident,
+                                              Error* error);
   RawObject* ResolveNameInPrefixScope(intptr_t ident_pos,
                                       const LibraryPrefix& prefix,
-                                      const String& name);
+                                      const String& name,
+                                      Error* error);
 
   AstNode* ResolveIdent(intptr_t ident_pos,
                         const String& ident,
diff --git a/runtime/vm/parser_test.cc b/runtime/vm/parser_test.cc
index 3fff4b8..99433c5 100644
--- a/runtime/vm/parser_test.cc
+++ b/runtime/vm/parser_test.cc
@@ -30,11 +30,11 @@
   LongJump jump;
   isolate->set_long_jump_base(&jump);
   if (setjmp(*jump.Set()) == 0) {
-    ParsedFunction parsed_function(function);
-    Parser::ParseFunction(&parsed_function);
-    EXPECT(parsed_function.node_sequence() != NULL);
+    ParsedFunction* parsed_function = new ParsedFunction(function);
+    Parser::ParseFunction(parsed_function);
+    EXPECT(parsed_function->node_sequence() != NULL);
     printf("Class %s function %s:\n", cname, fname);
-    AstPrinter::PrintFunctionNodes(parsed_function);
+    AstPrinter::PrintFunctionNodes(*parsed_function);
     retval = true;
   } else {
     retval = false;
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 070da5a..09a4c2c 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -734,6 +734,7 @@
   RawArray* object_table_;
   RawArray* stackmaps_;
   RawLocalVarDescriptors* var_descriptors_;
+  RawGrowableObjectArray* resolved_static_calls_;
   RawArray* comments_;
   RawObject** to() {
     return reinterpret_cast<RawObject**>(&ptr()->comments_);
diff --git a/runtime/vm/scopes.h b/runtime/vm/scopes.h
index 12b7e18..75f837c 100644
--- a/runtime/vm/scopes.h
+++ b/runtime/vm/scopes.h
@@ -175,6 +175,10 @@
   void ResolveForwardReference() { kind_ = kCase; }
 
  private:
+  // TODO(zerny): Remove this hack when the builder no longer stores state in
+  // the ast/scopes.
+  friend class SourceLabelResetter;
+
   const intptr_t token_pos_;
   const String& name_;
   LocalScope* owner_;  // Local scope declaring this label.
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc
index a57b9dc..2fc4302 100644
--- a/runtime/vm/stack_frame.cc
+++ b/runtime/vm/stack_frame.cc
@@ -59,6 +59,10 @@
   Code code;
   code = LookupDartCode();
   if (!code.IsNull()) {
+    // Visit the code object.
+    RawObject* raw_code = code.raw();
+    visitor->VisitPointer(&raw_code);
+    // Visit stack based on stack maps.
     Array maps;
     maps = Array::null();
     Stackmap map;
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 6f59c3e..b92645d 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -2038,7 +2038,7 @@
   __ Bind(&update_ic_data);
 
   // ECX: ICData
-  const String& equal_name = String::ZoneHandle(Symbols::New("=="));
+  const String& equal_name = String::ZoneHandle(Symbols::EqualOperator());
   __ movl(EAX, Address(ESP, 1 * kWordSize));
   __ movl(EDI, Address(ESP, 2 * kWordSize));
   AssemblerMacros::EnterStubFrame(assembler);
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 85dab77..31d01d8 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -18,6 +18,8 @@
   V(Empty, "")                                                                 \
   V(Dot, ".")                                                                  \
   V(Equals, "=")                                                               \
+  V(EqualOperator, "==")                                                       \
+  V(Identical, "identical")                                                    \
   V(IndexToken, "[]")                                                          \
   V(AssignIndexToken, "[]=")                                                   \
   V(TopLevel, "::")                                                            \
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index e1105a5..4f10eae 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -177,16 +177,16 @@
 
 
 void CodeGenTest::Compile() {
-  ParsedFunction parsed_function(function_);
-  parsed_function.SetNodeSequence(node_sequence_);
-  parsed_function.set_instantiator(NULL);
-  parsed_function.set_default_parameter_values(default_parameter_values_);
-  parsed_function.set_expression_temp_var(
+  ParsedFunction* parsed_function = new ParsedFunction(function_);
+  parsed_function->SetNodeSequence(node_sequence_);
+  parsed_function->set_instantiator(NULL);
+  parsed_function->set_default_parameter_values(default_parameter_values_);
+  parsed_function->set_expression_temp_var(
       ParsedFunction::CreateExpressionTempVar(0));
-  node_sequence_->scope()->AddVariable(parsed_function.expression_temp_var());
-  parsed_function.AllocateVariables();
+  node_sequence_->scope()->AddVariable(parsed_function->expression_temp_var());
+  parsed_function->AllocateVariables();
   const Error& error =
-      Error::Handle(Compiler::CompileParsedFunction(parsed_function));
+      Error::Handle(Compiler::CompileParsedFunction(*parsed_function));
   EXPECT(error.IsNull());
 }
 
diff --git a/tests/benchmark_smoke/benchmark_base.dart b/tests/benchmark_smoke/benchmark_base.dart
index 5aac450..41a3729 100644
--- a/tests/benchmark_smoke/benchmark_base.dart
+++ b/tests/benchmark_smoke/benchmark_base.dart
@@ -60,7 +60,7 @@
     int elapsed = 0;
     while (elapsed < timeMinimum || iter < 32) {
       f();
-      elapsed = watch.elapsedInMs();
+      elapsed = watch.elapsedMilliseconds;
       iter++;
     }
     return (1000.0 * iter) / elapsed;
diff --git a/tests/benchmark_smoke/benchmark_smoke.status b/tests/benchmark_smoke/benchmark_smoke.status
index 5050ba7..52cbda4 100644
--- a/tests/benchmark_smoke/benchmark_smoke.status
+++ b/tests/benchmark_smoke/benchmark_smoke.status
@@ -14,9 +14,6 @@
 [ $runtime == vm ]
 *: Skip
 
-[ $runtime == opera ]
-*: Skip
-
 [ $compiler == dart2js && $runtime == none ]
 *: Fail, Pass # TODO(ahe): Triage these tests.
 
diff --git a/tests/co19/co19-compiler.status b/tests/co19/co19-compiler.status
index e745c56..631e9a4 100644
--- a/tests/co19/co19-compiler.status
+++ b/tests/co19/co19-compiler.status
@@ -3,12 +3,6 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dartc ]
-# We are now actually skipping these because of inter-test dependencies.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t21: Skip # TODO(analyzer-team): Please triage this crash.
-Language/13_Libraries_and_Scripts/3_Includes_A01_t23: Skip # TODO(analyzer-team): Please triage this crash.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t07: Skip # TODO(analyzer-team): Please triage this crash.
-
-Language/03_Overview/1_Scoping_A02_t05: Fail # TODO(analyzer-team): Please triage this failure.
 Language/03_Overview/1_Scoping_A02_t06: Fail # TODO(analyzer-team): Please triage this failure.
 Language/03_Overview/2_Privacy_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
 Language/03_Overview/2_Privacy_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
@@ -16,38 +10,36 @@
 Language/03_Overview/2_Privacy_A01_t10: Fail # TODO(analyzer-team): Please triage this failure.
 Language/03_Overview/2_Privacy_A01_t19: Fail # TODO(analyzer-team): Please triage this failure.
 Language/03_Overview/2_Privacy_A01_t20: Fail # TODO(analyzer-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t11: Fail # TODO(analyzer-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t12: Fail # TODO(analyzer-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t13: Fail # TODO(analyzer-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t14: Fail # TODO(analyzer-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t15: Fail # TODO(analyzer-team): Please triage this failure.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
 Language/06_Functions/1_Function_Declaration_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
 Language/06_Functions/1_Function_Declaration_A03_t03: Fail # TODO(analyzer-team): Please triage this failure.
 Language/06_Functions/2_Formal_Parameters_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A06_t06: Fail # TODO(analyzer-team): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A07_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/07_Classes/8_Static_Variables/1_Evaluation_of_Static_Variable_Getters_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/1_Instance_Methods_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/1_Instance_Methods_A02_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/1_Instance_Methods_A02_t06: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/4_Abstract_Instance_Members_A04_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/4_Abstract_Instance_Members_A04_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/08_Interfaces/5_Superinterfaces_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/01_Constants_A03_t01: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/01_Constants_A05_t01: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/01_Constants_A14_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/01_Constants_A19_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/01_Constants_A19_t03: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t06: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t07: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t13: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A03_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A03_t03: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A04_t01: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/08_Throw_A05_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A05_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A05_t03: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A04_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A06_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A02_t05: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A03_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A04_t02: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/1_New_A02_t07: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A11_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A12_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A12_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A13_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/11_Instance_Creation/1_New_A06_t06: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/2_Const_A10_t01: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/17_Getter_Invocation_A01_t03: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/17_Getter_Invocation_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/17_Getter_Invocation_A02_t02: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/18_Assignment_A05_t02: Fail # TODO(analyzer-team): Please triage this failure.
@@ -59,73 +51,84 @@
 Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/21_Bitwise_Expressions_A01_t16: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/21_Bitwise_Expressions_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t22: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t23: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/22_Equality_A01_t23: Fail # TODO(analyzer-team): Please triage this failure.
 Language/10_Expressions/22_Equality_A01_t24: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t13: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t11: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t12: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t13: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t15: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t16: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t18: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t19: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t20: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t21: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t22: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t08: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t09: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t03: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t06: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A05_t07: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A06_t13: Fail # TODO(analyzer-team): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t22: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t23: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t13: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t11: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t12: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t13: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t15: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t16: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t18: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t19: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t20: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t21: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t22: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t08: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t09: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A07_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A13_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/02_Expression_Statements_A01_t12: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Statements/03_Variable_Declaration_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Statements/03_Variable_Declaration_A01_t06: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Statements/03_Variable_Declaration_A01_t09: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Statements/03_Variable_Declaration_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Statements/03_Variable_Declaration_A02_t05: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Statements/03_Variable_Declaration_A02_t06: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Statements/05_For_A01_t07: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Statements/08_Switch_A07_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Statements/09_Try_A01_t18: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t05: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t12: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t13: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t15: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t19: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t12: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t22: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/acos_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/asin_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/atan2_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/atan_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/cos_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/exp_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/log_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/pow_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/random_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/sin_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/sqrt_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Math/tan_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/RegExp/hasMatch_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t02: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t04: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/isolate/isolate_api/spawnFunction_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A01_t10: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A01_t16: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A01_t18: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A01_t19: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/06_For_A01_t07: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/06_For_A01_t11: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Statements/09_Switch_A06_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A01_t51: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A01_t52: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t05: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t12: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t13: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t15: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t18: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t24: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t06: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t26: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t46: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t66: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A05_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t03: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A03_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A03_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail # TODO(analyzer-team): Please triage this failure.
+LibTest/core/Queue/Queue.from_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
+LibTest/core/Set/Set.from_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
 
 Language/03_Overview/2_Privacy_A01_t08: pass # http://dartbug.com/5179
 Language/03_Overview/2_Privacy_A01_t11: pass # http://dartbug.com/5179
@@ -159,19 +162,12 @@
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A06_t02: pass # http://dartbug.com/5179
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A07_t01: pass # http://dartbug.com/5179
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A08_t02: pass # http://dartbug.com/5179
-Language/10_Expressions/28_Identifier_Reference_A04_t05: pass # http://dartbug.com/5179
-Language/10_Expressions/28_Identifier_Reference_A04_t07: pass # http://dartbug.com/5179
-Language/10_Expressions/28_Identifier_Reference_A05_t06: pass # http://dartbug.com/5179
-Language/10_Expressions/28_Identifier_Reference_A07_t04: fail # http://dartbug.com/5179
-Language/10_Expressions/28_Identifier_Reference_A07_t09: fail # http://dartbug.com/5179
+Language/10_Expressions/30_Identifier_Reference_A04_t05: pass # http://dartbug.com/5179
+Language/10_Expressions/30_Identifier_Reference_A04_t07: pass # http://dartbug.com/5179
+Language/10_Expressions/30_Identifier_Reference_A05_t06: pass # http://dartbug.com/5179
 Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t01: pass # http://dartbug.com/5179
 
-Language/07_Classes/07_Classes_A01_t20: Fail, OK # the default constructor invokes a non-existent zero argument constructor
-Language/07_Classes/07_Classes_A02_t32: Fail, OK # constant constructors are not required to have a body
-Language/07_Classes/07_Classes_A02_t34: Fail # co19 issue 221
-Language/07_Classes/07_Classes_A09_t01: Fail, OK # warning expected if instance member has the same name as a static member
 Language/07_Classes/2_Getters_A01_t05: Fail # No issue: waiting to remove old getter syntax
-Language/07_Classes/3_Setters_A04_t02: Fail, OK # getter and method with the same name
 Language/07_Classes/3_Setters_A04_t03: Fail, OK # getter and method with the same name
 Language/07_Classes/3_Setters_A04_t06: Fail OK # getter and method with the same name
 
@@ -179,38 +175,11 @@
 Language/07_Classes/07_Classes_A07_t03: Fail, OK
 Language/07_Classes/07_Classes_A07_t06: Fail, OK
 
-# co19 issue 218
-Language/10_Expressions/28_Identifier_Reference_A08_t38: Fail, OK
-
-
-Language/10_Expressions/30_Type_Cast_A01_t04: Fail, OK # the expected error is not specified
 Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t03: Fail, OK # contains syntax error
 Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: Fail, OK # contains syntax error
-Language/13_Libraries_and_Scripts/2_Imports_A01_t18: Fail, OK # contains semantic error
-Language/13_Libraries_and_Scripts/2_Imports_A02_t18: Fail, OK # contains syntax error
-Language/13_Libraries_and_Scripts/2_Imports_A02_t21: Fail, OK # contains syntax error
-Language/13_Libraries_and_Scripts/2_Imports_A02_t24: Fail, OK # co19 issue 243
-Language/13_Libraries_and_Scripts/2_Imports_A05_t02: Fail, OK # invalid directive syntax
-Language/06_Functions/06_Functions_A01_t06: Fail, OK # expecting error that doesn't exist
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t02: Fail, OK # deprecated parameter syntax
-Language/07_Classes/6_Constructors/2_Factories_A05_t01: Fail, OK # should expect error
-Language/07_Classes/6_Constructors/2_Factories_A05_t03: Fail, OK # should expect error
-Language/10_Expressions/05_Strings_A02_t39: Fail, OK # no longer an error
-Language/10_Expressions/05_Strings_A02_t41: Fail, OK # no longer an error
-Language/10_Expressions/05_Strings_A02_t43: Fail, OK # no longer an error
-Language/10_Expressions/05_Strings_A02_t45: Fail, OK # no longer an error
-Language/10_Expressions/05_Strings_A02_t47: Fail, OK # no longer an error
-Language/10_Expressions/05_Strings_A02_t49: Fail, OK # no longer an error
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t03: Fail # Issue 5294
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t04: Fail # Issue 5294
-Language/11_Statements/02_Expression_Statements_A01_t09: Fail, OK # maps with type arguments are allowed
-Language/11_Statements/02_Expression_Statements_A01_t10: Fail, OK # maps with type arguments are allowed
-Language/11_Statements/02_Expression_Statements_A01_t11: Fail, OK # maps with type arguments are allowed
-Language/11_Statements/09_Try_A06_t01: Fail, OK # deprecated catch syntax
-Language/11_Statements/09_Try_A06_t02: Fail, OK # deprecated catch syntax
-Language/11_Statements/09_Try_A06_t03: Fail, OK # deprecated catch syntax
-Language/11_Statements/09_Try_A06_t04: Fail, OK # deprecated catch syntax
-Language/11_Statements/09_Try_A06_t05: Fail, OK # deprecated catch syntax
 
 # The following tests use NoSuchMethodException instead of NoSuchMethodError.
 Language/06_Functions/4_External_Functions_A01_t01: Fail, OK # co19 issue 195
@@ -224,15 +193,11 @@
 # http://code.google.com/p/co19/issues/detail?id=167 is fixed.
 
 Language/03_Overview/1_Scoping_A02_t28: Fail # language change 1031
-Language/07_Classes/1_Instance_Methods/2_Operators_A01_t03: Fail # Issue 379
 Language/07_Classes/2_Getters_A01_t03: Fail, OK # out of date - getters are not allowed to have parameters
-Language/07_Classes/3_Setters_A01_t02: Fail # Issue 379
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A15_t07: Fail # Issue 3323
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail # Issue 2477
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: Fail # Issue 2477
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail # Issue 2477
-Language/07_Classes/07_Classes_A09_t02: Fail, OK # co19 issue 215
-Language/07_Classes/07_Classes_A09_t04: Fail, OK # co19 issue 215
 Language/10_Expressions/01_Constants_A16_t01: Fail # Issue 1473
 Language/10_Expressions/01_Constants_A16_t02: Fail # Issue 1473
 Language/10_Expressions/01_Constants_A16_t03: Fail # Issue 1473
@@ -246,36 +211,31 @@
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t02: Fail # Issue 3524
 Language/10_Expressions/19_Conditional_A01_t12: Fail # language change 3368
 Language/10_Expressions/19_Conditional_A01_t13: Fail # language change 3368
-Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t01: Fail # Issue 2371
 Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t12: Fail # language change 3368
 Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t13: Fail # language change 3368
-Language/10_Expressions/21_Bitwise_Expressions_A01_t01: Fail # Issue 1489
 Language/10_Expressions/21_Bitwise_Expressions_A01_t14: Fail # language change 3368
 Language/10_Expressions/21_Bitwise_Expressions_A01_t15: Fail # language change 3368
-Language/10_Expressions/22_Equality_A01_t01: Fail # Issue 1489
 Language/10_Expressions/22_Equality_A01_t19: Fail # language change 3368
 Language/10_Expressions/22_Equality_A01_t20: Fail # language change 3368
 Language/10_Expressions/22_Equality_A02_t03: Fail, OK # co19 issue 169
-Language/10_Expressions/22_Equality_A03_t01: Fail, OK # co19 issue 169
-Language/10_Expressions/22_Equality_A03_t03: Fail, OK # co19 issue 169
-Language/10_Expressions/21_Relational_Expressions_A01_t01: Fail # Issue 1489
-Language/10_Expressions/21_Relational_Expressions_A01_t20: Fail # language change 3368
-Language/10_Expressions/21_Relational_Expressions_A01_t21: Fail # language change 3368
-Language/10_Expressions/22_Shift_A01_t01: Fail # Issue 1489
-Language/10_Expressions/22_Shift_A01_t11: Fail # language change 3368
-Language/10_Expressions/22_Shift_A01_t12: Fail # language change 3368
-Language/10_Expressions/26_Postfix_Expressions_A01_t01: Fail # Issue 1489,2439
-Language/10_Expressions/27_Assignable_Expressions_A01_t26: Fail # Issue 1489
-Language/10_Expressions/29_Type_Test_A01_t02: Fail # language change 3368
-Language/11_Statements/05_For_A01_t11: Fail # Issue 3323
-Language/11_Statements/08_Switch_A06_t02: Fail, OK # out of date - case can use any constant expression
-Language/11_Statements/08_Switch_A06_t03: Fail, OK # out of date - case can use any constant expression
-Language/11_Statements/08_Switch_A06_t04: Fail, OK # out of date - case can use any constant expression
+Language/10_Expressions/23_Relational_Expressions_A01_t20: Fail # language change 3368
+Language/10_Expressions/23_Relational_Expressions_A01_t21: Fail # language change 3368
+Language/10_Expressions/24_Shift_A01_t11: Fail # language change 3368
+Language/10_Expressions/24_Shift_A01_t12: Fail # language change 3368
 
+# The following tests use hashCode() (function) instead of hashCode (getter).
+# co19 issue 273
+LibTest/isolate/SendPort/hashCode_A01_t01: Pass, OK
+LibTest/core/String/hashCode_A01_t01: Pass, OK
+LibTest/core/int/hashCode_A01_t01: Pass, OK
 
-# The following tests use the deprecated catch syntax
+LibTest/core/List/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeFirst_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeLast_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/iterator_next_A02_t01: Fail, OK # co19 issue 288
 
-LibTest/core/Expect/equals_A02_t01: Fail, OK
 Language/06_Functions/3_Type_of_a_Function_A01_t01: Fail, OK
 Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t07: Fail, OK
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t02: Fail, OK
@@ -295,21 +255,20 @@
 Language/10_Expressions/19_Conditional_A01_t13: Fail, OK
 Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t12: Fail, OK
 Language/10_Expressions/21_Bitwise_Expressions_A01_t14: Fail, OK
-Language/10_Expressions/21_Relational_Expressions_A01_t21: Fail, OK
+Language/10_Expressions/23_Relational_Expressions_A01_t21: Fail, OK
 Language/10_Expressions/22_Equality_A01_t19: Fail, OK
 Language/10_Expressions/01_Constants_A17_t03: Fail, OK
 Language/10_Expressions/05_Strings/1_String_Interpolation_A04_t02: Fail, OK
 Language/10_Expressions/05_Strings/1_String_Interpolation_A03_t02: Fail, OK
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t05: Fail, OK
-Language/10_Expressions/29_Type_Test_A01_t02: Fail, OK
-Language/10_Expressions/22_Shift_A01_t11: Fail, OK
+Language/10_Expressions/24_Shift_A01_t11: Fail, OK
 Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t13: Fail, OK
 Language/10_Expressions/22_Equality_A01_t20: Fail, OK
-Language/10_Expressions/28_Identifier_Reference_A04_t07: Fail, OK
-Language/10_Expressions/28_Identifier_Reference_A04_t05: Fail, OK
+Language/10_Expressions/30_Identifier_Reference_A04_t07: Fail, OK
+Language/10_Expressions/30_Identifier_Reference_A04_t05: Fail, OK
 Language/10_Expressions/01_Constants_A16_t02: Fail, OK
-Language/10_Expressions/21_Relational_Expressions_A01_t20: Fail, OK
-Language/10_Expressions/28_Identifier_Reference_A05_t06: Fail, OK
+Language/10_Expressions/23_Relational_Expressions_A01_t20: Fail, OK
+Language/10_Expressions/30_Identifier_Reference_A05_t06: Fail, OK
 Language/10_Expressions/01_Constants_A15_t16: Fail, OK
 Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t04: Fail, OK
 Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t07: Fail, OK
@@ -320,22 +279,11 @@
 Language/10_Expressions/19_Conditional_A01_t12: Fail, OK
 Language/10_Expressions/01_Constants_A16_t03: Fail, OK
 Language/10_Expressions/01_Constants_A16_t01: Fail, OK
-Language/10_Expressions/22_Shift_A01_t12: Fail, OK
+Language/10_Expressions/24_Shift_A01_t12: Fail, OK
 Language/07_Classes/2_Getters_A01_t03: Fail, OK
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: Fail, OK
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail, OK
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail, OK
-Language/07_Classes/1_Instance_Methods/2_Operators_A01_t03: Fail, OK
-Language/07_Classes/3_Setters_A01_t02: Fail, OK
-Language/11_Statements/08_Switch_A06_t02: Fail, OK
-Language/11_Statements/09_Try_A01_t01: Fail, OK
-Language/11_Statements/09_Try_A05_t03: Fail, OK
-Language/11_Statements/08_Switch_A06_t03: Fail, OK
-Language/11_Statements/09_Try_A02_t03: Fail, OK
-Language/11_Statements/09_Try_A04_t01: Fail, OK
-Language/11_Statements/05_For/2_For_in_A01_t04: Fail, OK
-Language/11_Statements/05_For/2_For_in_A01_t02: Fail, OK
-Language/11_Statements/08_Switch_A06_t04: Fail, OK
 Language/03_Overview/2_Privacy_A01_t11: Fail, OK
 Language/03_Overview/1_Scoping_A02_t28: Fail, OK
 Language/03_Overview/2_Privacy_A01_t18: Fail, OK
diff --git a/tests/co19/co19-dart2dart.status b/tests/co19/co19-dart2dart.status
index 60f39e2..be87353 100644
--- a/tests/co19/co19-dart2dart.status
+++ b/tests/co19/co19-dart2dart.status
@@ -3,31 +3,201 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dart2dart ]
-# These tests need to be updated to the new Date core lib API, co19 issue 256:
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t01: Fail
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t02: Fail
-LibTest/core/Date/Date_A01_t04: Fail
-LibTest/core/Date/Date_A01_t05: Fail
-LibTest/core/Date/isUtc_A01_t01: Fail
-LibTest/core/Date/millisecondsSinceEpoch_A01_t01: Fail
-LibTest/core/Date/operator_GE_A01_t01: Fail
-LibTest/core/Date/operator_GT_A01_t01: Fail
-LibTest/core/Date/operator_LE_A01_t01: Fail
-LibTest/core/Date/operator_LT_A01_t01: Fail
-LibTest/core/Date/operator_equality_A01_t01: Fail
-LibTest/core/Date/timeZoneName_A01_t01: Fail
-LibTest/core/Date/timeZoneOffset_A01_t01: Fail
-LibTest/core/Date/toLocal_A01_t01: Fail
-LibTest/core/Date/toUtc_A01_t01: Fail
+Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Crash # TODO(dart2dart-team): Please triage this crash.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t03: Crash # TODO(dart2dart-team): Please triage this crash.
+
+Language/05_Variables/05_Variables_A03_t09: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t11: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t12: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t13: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t14: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t15: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/07_Classes/1_Instance_Methods_A06_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t03: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/01_Constants_A03_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/01_Constants_A20_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/01_Constants_A20_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A03_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A04_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A04_t09: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t12: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A08_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A04_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A01_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A03_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A03_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t03: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t05: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t06: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/04_Local_Function_Declaration_A01_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/04_Local_Function_Declaration_A02_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/06_For_A01_t11: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/06_For_A01_t12: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A01_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t03: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A03_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A03_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/09_Switch_A06_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/10_Try_A07_t03: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/10_Try_A11_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/11_Return_A05_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/11_Return_A05_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/11_Return_A05_t03: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/12_Labels_A01_t03: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/12_Labels_A03_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/14_Continue_A02_t12: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/11_Statements/14_Continue_A02_t13: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t16: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t17: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t18: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t28: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t09: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t10: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t29: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t30: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t49: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t50: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t69: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t70: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t07: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t15: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t16: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/3_Parts_A03_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/core/Queue/Queue.from_A01_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/core/Set/Set.from_A01_t02: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/Random/nextDouble_A01_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/exp_A01_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/parseDouble_A02_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/pow_A01_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/pow_A11_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/pow_A13_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/sin_A01_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+LibTest/math/tan_A01_t01: Fail # TODO(dart2dart-team): Please triage this failure.
 
 LibTest/isolate/isolate_api/port_A01_t01: Skip # Times out.
 
-LibTest/core/OutOfMemoryException/OutOfMemoryException_A01_t01: Fail, OK # co19 issue 263
-LibTest/core/OutOfMemoryException/toString_A01_t01: Fail, OK # co19 issue 263
+LibTest/core/String/charCodes_A01_t01: Fail, OK # co19 issue 289
 
-Language/10_Expressions/11_Instance_Creation/1_New_A13_t02: Fail # TRIAGE
+LibTest/isolate/SendPort/send_A02_t02: Fail, OK # co19 issue 293
+LibTest/isolate/SendPort/send_A02_t03: Fail, OK # co19 issue 293
+LibTest/isolate/SendPort/send_A02_t04: Fail, OK # co19 issue 293
+LibTest/core/LinkedHashMap/LinkedHashMap_class_A01_t01: Fail, OK # co19 issue 293
+LibTest/core/Map/getKeys_A01_t01: Fail, OK # co19 issue 293
+LibTest/core/Map/getKeys_A01_t02: Fail, OK # co19 issue 293
+LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 293
+LibTest/core/Map/getValues_A01_t01: Fail, OK # co19 issue 293
 
-Language/03_Overview/1_Scoping_A02_t05: Fail # inherited from dart2js
+LibTest/core/Stopwatch/Stopwatch_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t03: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t02: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsedInUs_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsedInMs_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t02: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t03: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/stop_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/frequency_A01_t01: Fail, OK # co19 issue 297
+
+
+LibTest/core/Match/end_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/group_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/groupCount_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/operator_subscript_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/start_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/allMatches_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/firstMatch_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t02: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t03: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A06_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_AtomEscape_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Disjunction_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A06_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: Fail, OK # co19 issue 294
+
+LibTest/core/Queue/filter_A01_t04: Fail, OK # co19 issue 287
+LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 287
+
+LibTest/core/Queue/filter_A01_t04: Fail, OK # co19 issue 291
+LibTest/core/Queue/first_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/removeFirst_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/addFirst_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/removeLast_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/add_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/addLast_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/last_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/List/last_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/List/last_A01_t01: Fail, OK # co19 issue 291
+
+LibTest/isolate/isolate_api/port_A01_t01: Skip # Times out.
+
+LibTest/core/Map/putIfAbsent_A01_t08: Fail, OK # co19 issue 276
+LibTest/core/Map/putIfAbsent_A01_t06: Fail, OK # co19 issue 276
+LibTest/isolate/ReceivePort/receive_A01_t02: Fail, OK # co19 issue 276
+
+LibTest/core/UnsupportedOperationException/toString_A01_t01: Fail, OK # co19 issue 285
+LibTest/core/UnsupportedOperationException/UnsupportedOperationException_A01_t01: Fail, OK # co19 issue 285
+
+LibTest/core/List/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeLast_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeFirst_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/NoMoreElementsException/NoMoreElementsException_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/NoMoreElementsException/toString_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/EmptyQueueException/EmptyQueueException_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/EmptyQueueException/toString_A01_t01: Fail, OK # co19 issue 288
+
 Language/03_Overview/1_Scoping_A01_t39: Fail # http://dartbug.com/5519
 Language/03_Overview/1_Scoping_A01_t40: Fail # http://dartbug.com/5519
 Language/03_Overview/1_Scoping_A01_t41: Fail # http://dartbug.com/5519
@@ -35,7 +205,6 @@
 Language/03_Overview/1_Scoping_A02_t07: Fail # inherited from dart2js
 Language/03_Overview/1_Scoping_A02_t12: Fail # inherited from dart2js
 Language/03_Overview/2_Privacy_A01_t06: Fail # New import syntax
-Language/03_Overview/2_Privacy_A01_t11: Fail # inherited from dart2js
 Language/03_Overview/2_Privacy_A01_t14: Fail # inherited from dart2js
 Language/05_Variables/05_Variables_A01_t04: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A01_t05: Fail # http://dartbug.com/5519
@@ -46,13 +215,18 @@
 Language/05_Variables/05_Variables_A01_t15: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A03_t01: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A03_t02: Fail # http://dartbug.com/5519
-Language/05_Variables/05_Variables_A03_t03: Fail # inherited from VM
 Language/05_Variables/05_Variables_A03_t04: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A03_t05: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A03_t06: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A03_t07: Fail # inherited from VM
 Language/05_Variables/05_Variables_A03_t08: Fail # http://dartbug.com/5519
+Language/05_Variables/05_Variables_A03_t09: Fail # inherited from dart2js
 Language/05_Variables/05_Variables_A03_t10: Fail # inherited from VM
+Language/05_Variables/05_Variables_A03_t11: Fail # inherited from VM
+Language/05_Variables/05_Variables_A03_t12: Fail # inherited from dart2js
+Language/05_Variables/05_Variables_A03_t13: Fail # inherited from VM
+Language/05_Variables/05_Variables_A03_t14: Fail # inherited from VM
+Language/05_Variables/05_Variables_A03_t15: Fail # inherited from VM
 Language/05_Variables/05_Variables_A04_t01: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A04_t02: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A04_t03: Fail # http://dartbug.com/5519
@@ -64,7 +238,6 @@
 Language/05_Variables/05_Variables_A04_t10: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A05_t01: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A05_t02: Fail # http://dartbug.com/5519
-Language/06_Functions/06_Functions_A01_t06: Fail # inherited from VM
 Language/06_Functions/06_Functions_A01_t22: Fail # inherited from VM
 Language/06_Functions/06_Functions_A01_t31: Fail # http://dartbug.com/5519
 Language/06_Functions/1_Function_Declaration_A01_t01: Fail # http://dartbug.com/5519
@@ -97,12 +270,9 @@
 Language/06_Functions/2_Formal_Parameters_A03_t05: Fail # http://dartbug.com/5519
 Language/06_Functions/2_Formal_Parameters_A03_t06: Fail # http://dartbug.com/5519
 Language/06_Functions/4_External_Functions_A01_t01: Fail # inherited from VM
-Language/07_Classes/07_Classes_A01_t20: Fail # inherited from VM
 Language/07_Classes/07_Classes_A02_t02: Fail # http://dartbug.com/5519
 Language/07_Classes/07_Classes_A02_t04: Fail # http://dartbug.com/5519
 Language/07_Classes/07_Classes_A02_t11: Fail # http://dartbug.com/5519
-Language/07_Classes/07_Classes_A02_t32: Fail # inherited from VM
-Language/07_Classes/07_Classes_A02_t34: Fail # inherited from VM
 Language/07_Classes/07_Classes_A03_t01: Fail # inherited from VM
 Language/07_Classes/07_Classes_A03_t02: Fail # http://dartbug.com/5519
 Language/07_Classes/07_Classes_A03_t07: Fail # inherited from dart2js
@@ -113,11 +283,7 @@
 Language/07_Classes/07_Classes_A04_t22: Fail # inherited from dart2js
 Language/07_Classes/07_Classes_A04_t24: Fail # inherited from dart2js
 Language/07_Classes/07_Classes_A04_t25: Fail # inherited from dart2js
-Language/07_Classes/07_Classes_A09_t01: Fail # inherited from VM
-Language/07_Classes/07_Classes_A09_t02: Fail # inherited from VM
-Language/07_Classes/07_Classes_A09_t04: Fail # inherited from VM
 Language/07_Classes/10_Superinterfaces_A04_t01: Fail # http://dartbug.com/5519
-Language/07_Classes/1_Instance_Methods/2_Operators_A01_t03: Fail # inherited from VM
 Language/07_Classes/1_Instance_Methods/2_Operators_A02_t01: Fail # inherited from VM
 Language/07_Classes/1_Instance_Methods/2_Operators_A03_t01: Fail # inherited from dart2js
 Language/07_Classes/1_Instance_Methods/2_Operators_A03_t02: Fail # inherited from dart2js
@@ -146,16 +312,12 @@
 Language/07_Classes/1_Instance_Methods/2_Operators_A07_t04: Fail # http://dartbug.com/5519
 Language/07_Classes/1_Instance_Methods_A02_t01: Fail # http://dartbug.com/5519
 Language/07_Classes/1_Instance_Methods_A02_t02: Fail # http://dartbug.com/5519
-Language/07_Classes/1_Instance_Methods_A02_t03: Fail # http://dartbug.com/5519
-Language/07_Classes/1_Instance_Methods_A02_t04: Fail # http://dartbug.com/5519
 Language/07_Classes/1_Instance_Methods_A02_t05: Fail # http://dartbug.com/5519
-Language/07_Classes/1_Instance_Methods_A02_t06: Fail # http://dartbug.com/5519
 Language/07_Classes/2_Getters_A01_t03: Fail # inherited from VM
 Language/07_Classes/2_Getters_A01_t04: Fail # http://dartbug.com/5519
 Language/07_Classes/2_Getters_A01_t05: Fail # inherited from VM
 Language/07_Classes/2_Getters_A01_t06: Fail # http://dartbug.com/5519
 Language/07_Classes/2_Getters_A01_t07: Fail # http://dartbug.com/5519
-Language/07_Classes/3_Setters_A01_t02: Fail # inherited from VM
 Language/07_Classes/3_Setters_A03_t01: Fail # http://dartbug.com/5519
 Language/07_Classes/3_Setters_A03_t02: Fail # http://dartbug.com/5519
 Language/07_Classes/3_Setters_A03_t03: Fail # http://dartbug.com/5519
@@ -173,15 +335,12 @@
 Language/07_Classes/3_Setters_A04_t07: Fail # inherited from VM
 Language/07_Classes/3_Setters_A04_t08: Fail # inherited from VM
 Language/07_Classes/4_Abstract_Instance_Members_A04_t01: Fail # http://dartbug.com/5519
-Language/07_Classes/4_Abstract_Instance_Members_A04_t04: Fail # http://dartbug.com/5519
 Language/07_Classes/4_Abstract_Instance_Members_A04_t05: Fail # inherited from VM
 Language/07_Classes/4_Abstract_Instance_Members_A04_t06: Fail # inherited from VM
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A03_t05: Fail # http://dartbug.com/5519
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A09_t01: Fail # http://dartbug.com/5519
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A15_t07: Fail # inherited from VM
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A21_t01: Fail # http://dartbug.com/5519
-Language/07_Classes/6_Constructors/2_Factories_A06_t05: Fail # inherited from VM
-Language/07_Classes/6_Constructors/2_Factories_A06_t06: Fail # inherited from VM
 Language/07_Classes/6_Constructors/2_Factories_A07_t01: Fail # inherited from VM
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A02_t01: Fail # http://dartbug.com/5519
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A02_t03: Fail # http://dartbug.com/5519
@@ -195,8 +354,6 @@
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail # inherited from VM
 Language/07_Classes/6_Constructors_A01_t01: Fail # inherited from VM
 Language/07_Classes/6_Constructors_A02_t01: Fail # http://dartbug.com/5519
-Language/07_Classes/8_Static_Variables/1_Evaluation_of_Static_Variable_Getters_A01_t02: Fail # inherited from VM
-Language/07_Classes/8_Static_Variables/1_Evaluation_of_Static_Variable_Getters_A01_t05: Fail # inherited from VM
 Language/09_Generics/09_Generics_A05_t01: Fail # inherited from dart2js
 Language/09_Generics/09_Generics_A05_t02: Fail # inherited from VM
 Language/10_Expressions/01_Constants_A03_t02: Fail # http://dartbug.com/5519
@@ -247,8 +404,6 @@
 Language/10_Expressions/01_Constants_A17_t02: Fail # http://dartbug.com/5519
 Language/10_Expressions/01_Constants_A17_t03: Crash # inherited from VM
 Language/10_Expressions/01_Constants_A17_t03: Fail # http://dartbug.com/5519
-Language/10_Expressions/01_Constants_A19_t02: Fail # inherited from VM
-Language/10_Expressions/01_Constants_A19_t03: Fail # inherited from VM
 Language/10_Expressions/01_Constants_A19_t04: Fail # http://dartbug.com/5519
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t04: Fail # Inherited from dart2js
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t05: Fail # Inherited from dart2js
@@ -256,17 +411,9 @@
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t09: Fail, OK # co19 issue 210
 Language/10_Expressions/05_Strings/1_String_Interpolation_A03_t02: Fail # inherited from VM
 Language/10_Expressions/05_Strings/1_String_Interpolation_A04_t02: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A01_t01: Fail # inherited from VM
 Language/10_Expressions/05_Strings_A02_t01: Skip # co19 issue 90.
-Language/10_Expressions/05_Strings_A02_t39: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A02_t41: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A02_t43: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A02_t45: Fail # inherited from VM
 Language/10_Expressions/05_Strings_A02_t46: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A02_t47: Fail # inherited from VM
 Language/10_Expressions/05_Strings_A02_t48: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A02_t49: Fail # inherited from VM
-Language/10_Expressions/05_Strings_A12_t01: Fail # Inherited from dart2js
 Language/10_Expressions/05_Strings_A20_t01: Fail # inherited from VM
 Language/10_Expressions/06_Lists_A03_t01: Fail # http://dartbug.com/5519
 Language/10_Expressions/06_Lists_A03_t02: Fail # http://dartbug.com/5519
@@ -275,23 +422,12 @@
 Language/10_Expressions/07_Maps_A02_t01: Fail # http://dartbug.com/5519
 Language/10_Expressions/07_Maps_A02_t02: Fail # http://dartbug.com/5519
 Language/10_Expressions/08_Throw_A01_t01: Fail # inherited from dart2js
-Language/10_Expressions/08_Throw_A03_t02: Fail # inherited from dart2js
-Language/10_Expressions/08_Throw_A03_t03: Fail # inherited from dart2js
-Language/10_Expressions/08_Throw_A04_t01: Fail # inherited from dart2js
 Language/10_Expressions/08_Throw_A05_t01: Fail # inherited from dart2js
-Language/10_Expressions/08_Throw_A05_t02: Fail # inherited from dart2js
-Language/10_Expressions/08_Throw_A05_t03: Fail # inherited from dart2js
-Language/10_Expressions/09_Function_Expressions_A02_t01: Fail # inherited from VM
-Language/10_Expressions/09_Function_Expressions_A04_t01: Fail # inherited from VM (most probably a bug in the test)
-Language/10_Expressions/09_Function_Expressions_A06_t01: Fail # inherited from dart2js
 Language/10_Expressions/11_Instance_Creation/1_New_A02_t03: Fail # inherited from dart2js
 Language/10_Expressions/11_Instance_Creation/1_New_A02_t05: Fail # inherited from dart2js
 Language/10_Expressions/11_Instance_Creation/1_New_A02_t06: Fail # inherited from dart2js
 Language/10_Expressions/11_Instance_Creation/1_New_A02_t07: Fail # inherited from dart2js
-Language/10_Expressions/11_Instance_Creation/1_New_A06_t06: Fail # Inherited from dart2js
-Language/10_Expressions/11_Instance_Creation/1_New_A07_t01: Fail # Inherited from dart2js
 Language/10_Expressions/11_Instance_Creation/1_New_A09_t09: Fail # inherited from VM
-Language/10_Expressions/11_Instance_Creation/1_New_A11_t01: Fail # Inherited from VM
 Language/10_Expressions/11_Instance_Creation/1_New_A12_t01: Fail # co19 issue 255: unmatched bracket (same behavior in dart2js)
 Language/10_Expressions/11_Instance_Creation/1_New_A12_t02: Fail # Inherited from VM
 Language/10_Expressions/11_Instance_Creation/1_New_A13_t04: Fail # Inherited from VM
@@ -300,7 +436,6 @@
 Language/10_Expressions/11_Instance_Creation/2_Const_A06_t01: Fail # http://dartbug.com/5519
 Language/10_Expressions/11_Instance_Creation/2_Const_A06_t02: Fail # http://dartbug.com/5519
 Language/10_Expressions/11_Instance_Creation/2_Const_A10_t01: Fail # inherited from VM
-Language/10_Expressions/13_Property_Extraction_A01_t01: Fail # co19 issue 255: unmatched bracket (same behavior in dart2js)
 Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A04_t01: Fail # http://dartbug.com/5519
 Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t03: Fail # inherited from VM
 Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t04: Fail  # co19 issue 166
@@ -314,7 +449,6 @@
 Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t05: Fail # inherited from VM
 Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t06: Fail # inherited from VM
 Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A08_t01: Fail # inherited from VM
-Language/10_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t01: Fail # inherited from VM
 Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t03: Fail # inherited from VM
 Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t04: Fail # http://dartbug.com/5519
 Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t06: Fail # inherited from VM
@@ -332,7 +466,6 @@
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t04: Fail # inherited from VM
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A07_t01: Fail # co19 issue 251 or issue 5732
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A08_t02: Fail # co19 issue 251 or issue 5732
-Language/10_Expressions/17_Getter_Invocation_A01_t03: Fail # inherited from VM
 Language/10_Expressions/17_Getter_Invocation_A02_t01: Fail # inherited from VM
 Language/10_Expressions/17_Getter_Invocation_A02_t02: Fail # inherited from VM
 Language/10_Expressions/18_Assignment_A05_t02: Fail # inherited from VM
@@ -345,27 +478,24 @@
 Language/10_Expressions/19_Conditional_A01_t13: Fail # Inherited from dart2js
 Language/10_Expressions/19_Conditional_A01_t14: Fail # Inherited from dart2js
 Language/10_Expressions/19_Conditional_A01_t15: Fail # Inherited from dart2js
-Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t01: Fail # inherited from VM
 Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t11: Fail # Inherited from dart2js
 Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t12: Fail # http://dartbug.com/5519
 Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t13: Fail # Inherited from dart2js
 Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t14: Fail # Inherited from dart2js
-Language/10_Expressions/21_Bitwise_Expressions_A01_t01: Fail # inherited from VM
 Language/10_Expressions/21_Bitwise_Expressions_A01_t13: Fail # Inherited from dart2js
 Language/10_Expressions/21_Bitwise_Expressions_A01_t14: Fail # http://dartbug.com/5519
 Language/10_Expressions/21_Bitwise_Expressions_A01_t15: Fail # Inherited from dart2js
 Language/10_Expressions/21_Bitwise_Expressions_A01_t16: Fail # Inherited from dart2js
 Language/10_Expressions/21_Bitwise_Expressions_A01_t17: Fail # Inherited from dart2js
-Language/10_Expressions/21_Relational_Expressions_A01_t01: Fail # inherited from VM
-Language/10_Expressions/21_Relational_Expressions_A01_t10: Fail # http://dartbug.com/5519
-Language/10_Expressions/21_Relational_Expressions_A01_t11: Fail # http://dartbug.com/5519
-Language/10_Expressions/21_Relational_Expressions_A01_t12: Fail # http://dartbug.com/5519
-Language/10_Expressions/21_Relational_Expressions_A01_t13: Fail # http://dartbug.com/5519
-Language/10_Expressions/21_Relational_Expressions_A01_t19: Fail # Inherited from dart2js
-Language/10_Expressions/21_Relational_Expressions_A01_t20: Fail # http://dartbug.com/5519
-Language/10_Expressions/21_Relational_Expressions_A01_t21: Fail # Inherited from dart2js
-Language/10_Expressions/21_Relational_Expressions_A01_t22: Fail # Inherited from dart2js
-Language/10_Expressions/21_Relational_Expressions_A01_t23: Fail # Inherited from dart2js
+Language/10_Expressions/23_Relational_Expressions_A01_t10: Fail # http://dartbug.com/5519
+Language/10_Expressions/23_Relational_Expressions_A01_t11: Fail # http://dartbug.com/5519
+Language/10_Expressions/23_Relational_Expressions_A01_t12: Fail # http://dartbug.com/5519
+Language/10_Expressions/23_Relational_Expressions_A01_t13: Fail # http://dartbug.com/5519
+Language/10_Expressions/23_Relational_Expressions_A01_t19: Fail # Inherited from dart2js
+Language/10_Expressions/23_Relational_Expressions_A01_t20: Fail # http://dartbug.com/5519
+Language/10_Expressions/23_Relational_Expressions_A01_t21: Fail # Inherited from dart2js
+Language/10_Expressions/23_Relational_Expressions_A01_t22: Fail # Inherited from dart2js
+Language/10_Expressions/23_Relational_Expressions_A01_t23: Fail # Inherited from dart2js
 Language/10_Expressions/22_Equality_A01_t01: Fail # inherited from VM
 Language/10_Expressions/22_Equality_A01_t15: Fail # http://dartbug.com/5519
 Language/10_Expressions/22_Equality_A01_t16: Fail # http://dartbug.com/5519
@@ -373,136 +503,44 @@
 Language/10_Expressions/22_Equality_A01_t23: Fail # Inherited from dart2js
 Language/10_Expressions/22_Equality_A01_t24: Fail # Inherited from dart2js
 Language/10_Expressions/22_Equality_A02_t03: Fail # inherited from VM
-Language/10_Expressions/22_Equality_A03_t01: Fail # inherited from VM
-Language/10_Expressions/22_Equality_A03_t02: Fail # Inherited from dart2js
-Language/10_Expressions/22_Equality_A03_t03: Fail # inherited from VM
 Language/10_Expressions/22_Equality_A05_t01: Fail # inherited from VM
-Language/10_Expressions/22_Shift_A01_t01: Fail # inherited from VM
-Language/10_Expressions/22_Shift_A01_t10: Fail # Inherited from dart2js
-Language/10_Expressions/22_Shift_A01_t11: Fail # http://dartbug.com/5519
-Language/10_Expressions/22_Shift_A01_t12: Fail # Inherited from dart2js
-Language/10_Expressions/22_Shift_A01_t13: Fail # Inherited from dart2js
-Language/10_Expressions/22_Shift_A01_t14: Fail # Inherited from dart2js
-Language/10_Expressions/23_Additive_Expressions_A01_t08: Fail # Inherited from dart2js
-Language/10_Expressions/23_Additive_Expressions_A01_t11: Fail # Inherited from dart2js
-Language/10_Expressions/23_Additive_Expressions_A01_t12: Fail # Inherited from dart2js
-Language/10_Expressions/23_Additive_Expressions_A01_t13: Fail # Inherited from dart2js
-Language/10_Expressions/23_Additive_Expressions_A01_t14: Fail # Inherited from dart2js
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t11: Fail # Inherited from dart2js
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t14: Fail # Inherited from dart2js
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t15: Fail # Inherited from dart2js
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t16: Fail # Inherited from dart2js
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t17: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t01: Fail # inherited from VM
-Language/10_Expressions/25_Unary_Expressions_A01_t02: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t04: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t05: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t10: Fail # inherited from VM
-Language/10_Expressions/25_Unary_Expressions_A01_t17: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t18: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t19: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t20: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t21: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A01_t22: Fail # Inherited from dart2js
-Language/10_Expressions/25_Unary_Expressions_A06_t01: Fail # inherited from VM
-Language/10_Expressions/25_Unary_Expressions_A08_t01: Fail # inherited from VM
-Language/10_Expressions/26_Postfix_Expressions_A01_t01: Fail # inherited from VM
-Language/10_Expressions/26_Postfix_Expressions_A01_t02: Fail # Inherited from dart2js
-Language/10_Expressions/26_Postfix_Expressions_A01_t03: Fail # Inherited from dart2js
-Language/10_Expressions/26_Postfix_Expressions_A01_t05: Fail # Inherited from dart2js
-Language/10_Expressions/27_Assignable_Expressions_A01_t06: Fail # Inherited from dart2js
-Language/10_Expressions/27_Assignable_Expressions_A01_t08: Fail # Inherited from dart2js
-Language/10_Expressions/27_Assignable_Expressions_A01_t09: Fail # Inherited from dart2js
-Language/10_Expressions/27_Assignable_Expressions_A01_t26: Fail # inherited from VM
-Language/10_Expressions/27_Assignable_Expressions_A01_t27: Fail # inherited from VM
-Language/10_Expressions/28_Identifier_Reference_A02_t01: Fail # Pseudo keyword "abstract".
-Language/10_Expressions/28_Identifier_Reference_A04_t01: Fail # Inherited from dart2js
-Language/10_Expressions/28_Identifier_Reference_A04_t03: Fail # Inherited from dart2js
-Language/10_Expressions/28_Identifier_Reference_A04_t06: Fail # Inherited from dart2js
-Language/10_Expressions/28_Identifier_Reference_A04_t07: Fail, OK # co19 issue 184
-Language/10_Expressions/28_Identifier_Reference_A05_t09: Fail # inherited from VM
-Language/10_Expressions/28_Identifier_Reference_A06_t13: Fail, OK # co19 issue 254
-Language/10_Expressions/28_Identifier_Reference_A06_t15: Fail # inherited from VM
-Language/10_Expressions/28_Identifier_Reference_A07_t01: Fail # http://dartbug.com/5519
-Language/10_Expressions/28_Identifier_Reference_A07_t04: Fail # inherited from VM
-Language/10_Expressions/28_Identifier_Reference_A07_t09: Fail # inherited from dart2js
-Language/10_Expressions/28_Identifier_Reference_A07_t12: Fail # http://dartbug.com/5519
-Language/10_Expressions/28_Identifier_Reference_A08_t02: Fail # inherited from dart2js
-Language/10_Expressions/28_Identifier_Reference_A08_t04: Fail, Pass # co19 issue 218
-Language/10_Expressions/28_Identifier_Reference_A08_t05: Fail, Pass # co19 issue 218
-Language/10_Expressions/28_Identifier_Reference_A08_t32: Fail # inherited from dart2js
-Language/10_Expressions/28_Identifier_Reference_A08_t38: Fail, Pass # co19 issue 218
-Language/10_Expressions/29_Type_Test_A01_t02: Fail # http://dartbug.com/5519
-Language/10_Expressions/29_Type_Test_A01_t04: Fail # Inherited from dart2js
-Language/10_Expressions/29_Type_Test_A04_t01: Fail # inherited from dart2js
-Language/10_Expressions/30_Type_Cast_A01_t04: Fail # http://dartbug.com/5519
-Language/10_Expressions/30_Type_Cast_A03_t01: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A03_t02: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A05_t01: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A05_t02: Fail # inherited from VM
-Language/10_Expressions/30_Type_Cast_A05_t03: Fail # inherited from VM
-Language/10_Expressions/30_Type_Cast_A05_t04: Fail # inherited from VM
-Language/10_Expressions/30_Type_Cast_A05_t05: Fail # inherited from VM
-Language/11_Statements/02_Expression_Statements_A01_t09: Fail # inherited from VM
-Language/11_Statements/02_Expression_Statements_A01_t10: Fail # inherited from VM
-Language/11_Statements/02_Expression_Statements_A01_t11: Fail # inherited from VM
-Language/11_Statements/03_Variable_Declaration_A01_t10: Fail # http://dartbug.com/5519
-Language/11_Statements/03_Variable_Declaration_A02_t04: Fail # http://dartbug.com/5519
-Language/11_Statements/03_Variable_Declaration_A03_t01: Fail # http://dartbug.com/5519
-Language/11_Statements/03_Variable_Declaration_A03_t02: Fail # http://dartbug.com/5519
-Language/11_Statements/03_Variable_Declaration_A03_t03: Fail # http://dartbug.com/5519
-Language/11_Statements/03_Variable_Declaration_A03_t04: Fail # http://dartbug.com/5519
+Language/10_Expressions/24_Shift_A01_t10: Fail # Inherited from dart2js
+Language/10_Expressions/24_Shift_A01_t11: Fail # http://dartbug.com/5519
+Language/10_Expressions/24_Shift_A01_t12: Fail # Inherited from dart2js
+Language/10_Expressions/24_Shift_A01_t13: Fail # Inherited from dart2js
+Language/10_Expressions/24_Shift_A01_t14: Fail # Inherited from dart2js
+Language/10_Expressions/25_Additive_Expressions_A01_t08: Fail # Inherited from dart2js
+Language/10_Expressions/25_Additive_Expressions_A01_t11: Fail # Inherited from dart2js
+Language/10_Expressions/25_Additive_Expressions_A01_t12: Fail # Inherited from dart2js
+Language/10_Expressions/25_Additive_Expressions_A01_t13: Fail # Inherited from dart2js
+Language/10_Expressions/25_Additive_Expressions_A01_t14: Fail # Inherited from dart2js
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t11: Fail # Inherited from dart2js
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t14: Fail # Inherited from dart2js
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t15: Fail # Inherited from dart2js
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t16: Fail # Inherited from dart2js
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t17: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t01: Fail # inherited from VM
+Language/10_Expressions/27_Unary_Expressions_A01_t02: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t04: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t05: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t10: Fail # inherited from VM
+Language/10_Expressions/27_Unary_Expressions_A01_t17: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t18: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t19: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t20: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t21: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A01_t22: Fail # Inherited from dart2js
+Language/10_Expressions/27_Unary_Expressions_A08_t01: Fail # inherited from VM
+Language/10_Expressions/28_Postfix_Expressions_A01_t01: Fail # inherited from VM
+Language/10_Expressions/28_Postfix_Expressions_A01_t02: Fail # Inherited from dart2js
+Language/10_Expressions/28_Postfix_Expressions_A01_t03: Fail # Inherited from dart2js
+Language/10_Expressions/28_Postfix_Expressions_A01_t05: Fail # Inherited from dart2js
+Language/10_Expressions/29_Assignable_Expressions_A01_t06: Fail # Inherited from dart2js
+Language/10_Expressions/29_Assignable_Expressions_A01_t08: Fail # Inherited from dart2js
+Language/10_Expressions/29_Assignable_Expressions_A01_t09: Fail # Inherited from dart2js
+Language/10_Expressions/30_Identifier_Reference_A02_t01: Fail # Pseudo keyword "abstract".
+Language/10_Expressions/30_Identifier_Reference_A07_t01: Fail # http://dartbug.com/5519
 Language/11_Statements/03_Variable_Declaration_A04_t01: Fail # http://dartbug.com/5519
-Language/11_Statements/05_For/2_For_in_A01_t02: Fail # inherited from VM
-Language/11_Statements/05_For/2_For_in_A01_t04: Fail # inherited from VM
-Language/11_Statements/05_For_A01_t11: Fail # inherited from VM
-Language/11_Statements/05_For_A01_t12: Fail # http://dartbug.com/5519
-Language/11_Statements/07_Do_A02_t02: Fail # inherited from VM
-Language/11_Statements/08_Switch_A01_t01: Fail # inherited from VM
-Language/11_Statements/08_Switch_A02_t01: Fail # inherited from VM
-Language/11_Statements/08_Switch_A05_t01: Fail # inherited from VM
-Language/11_Statements/08_Switch_A05_t02: Fail # inherited from VM
-Language/11_Statements/08_Switch_A06_t01: Fail # inherited from VM
-Language/11_Statements/08_Switch_A06_t02: Fail # inherited from VM
-Language/11_Statements/08_Switch_A06_t03: Fail # inherited from VM
-Language/11_Statements/08_Switch_A06_t04: Fail # inherited from VM
-Language/11_Statements/08_Switch_A07_t02: Fail # inherited from VM
-Language/11_Statements/09_Try_A01_t01: Fail, OK # inherited from VM
-Language/11_Statements/09_Try_A01_t18: Fail # inherited from VM
-Language/11_Statements/09_Try_A02_t03: Fail, OK # inherited from VM
-Language/11_Statements/09_Try_A04_t01: Fail, OK # inherited from VM
-Language/11_Statements/09_Try_A05_t03: Fail, OK # inherited from VM
-Language/11_Statements/09_Try_A05_t06: Fail # inherited from VM
-Language/11_Statements/09_Try_A06_t01: Fail # inherited from VM
-Language/11_Statements/09_Try_A06_t02: Fail # inherited from VM
-Language/11_Statements/09_Try_A06_t03: Fail # inherited from VM
-Language/11_Statements/09_Try_A06_t04: Fail # inherited from VM
-Language/11_Statements/09_Try_A06_t05: Fail # inherited from VM
-Language/11_Statements/10_Return_A04_t01: Fail # http://dartbug.com/5519
-Language/11_Statements/10_Return_A04_t02: Fail # http://dartbug.com/5519
-Language/11_Statements/10_Return_A04_t03: Fail # http://dartbug.com/5519
-Language/11_Statements/11_Labels_A01_t03: Fail # inherited from VM
-Language/11_Statements/11_Labels_A03_t04: Fail # inherited from dart2js
-Language/11_Statements/13_Continue_A02_t12: Fail # inherited from dart2js
-Language/11_Statements/13_Continue_A02_t13: Fail # inherited from dart2js
-Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A01_t39: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t01: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t02: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t16: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t17: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t18: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t19: Fail # Inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A02_t28: Fail # inherited from dart2js
-Language/13_Libraries_and_Scripts/2_Imports_A03_t02: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A03_t06: Fail # inherited from dart2js
-Language/13_Libraries_and_Scripts/2_Imports_A03_t12: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A03_t16: Fail # co19 issue 226
-Language/13_Libraries_and_Scripts/2_Imports_A03_t22: Fail # inherited from VM
-Language/13_Libraries_and_Scripts/2_Imports_A03_t26: Fail # co19 issue 226
-Language/13_Libraries_and_Scripts/2_Imports_A06_t01: Fail # inherited from dart2js
-Language/13_Libraries_and_Scripts/3_Includes_A01_t01: Fail # inherited from dart2js
-Language/13_Libraries_and_Scripts/3_Includes_A03_t03: Fail # inherited from dart2js
 Language/13_Libraries_and_Scripts/4_Scripts_A03_t01: Fail # http://dartbug.com/5519
 Language/13_Libraries_and_Scripts/4_Scripts_A03_t03: Fail # http://dartbug.com/5519
 Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # inherited from VM
@@ -513,46 +551,21 @@
 Language/14_Types/3_Type_Declarations/1_Typedef_A07_t01: Fail, Pass # inherited from dart2js: fails in minify, self-reference typedef check not performed
 Language/14_Types/3_Type_Declarations/1_Typedef_A07_t02: Fail, Pass # inherited from dart2js: fails in minify, self-reference typedef check not performed
 Language/14_Types/3_Type_Declarations/1_Typedef_A07_t03: Fail, Pass # inherited from dart2js: fails in minify, self-reference typedef check not performed
-Language/14_Types/4_Interface_Types_A01_t01: Fail # Looks like dart2js issue, let's wait when interfaces are phased away
-Language/14_Types/4_Interface_Types_A02_t01: Fail # Looks like dart2js issue, let's wait when interfaces are phased away
 Language/14_Types/5_Function_Types_A01_t05: Fail # inherited from dart2js
 Language/14_Types/5_Function_Types_A02_t01: Fail # inherited from VM
 Language/15_Reference/1_Lexical_Rules/1_Reserved_Words_A40_t04: Fail # inherited from dart2js
-Language/15_Reference/1_Lexical_Rules_A01_t06: Fail # inherited from VM
 Language/15_Reference/1_Lexical_Rules_A02_t06: Fail # inherited from dart2js
 LibTest/core/Date/Date.fromString_A03_t01: Fail, OK # Issue co19 - 121
 LibTest/core/Date/toString_A02_t01: Fail, OK # inherited from VM
 LibTest/core/Date/year_A01_t01: Fail, OK # inherited from VM
-LibTest/core/double/INFINITY_A01_t02: Fail # inherited from VM
-LibTest/core/double/NEGATIVE_INFINITY_A01_t02: Fail # inherited from VM
 LibTest/core/double/toRadixString_A01_t01: Fail # inherited from VM
-LibTest/core/Expect/equals_A02_t01: Fail, OK # co19 issue 194
 LibTest/core/Expect/throws_A02_t01: Fail, OK # Issue co19 - 42
 LibTest/core/Future/handleException_A01_t07: Fail # inherited from VM
 LibTest/core/Future/then_A01_t05: Fail # inherited from VM
 LibTest/core/int/operator_left_shift_A01_t02: Fail, OK # co19 issue 129
 LibTest/core/int/toRadixString_A01_t01: Fail # inherited from VM
-LibTest/core/List/removeRange_A06_t01: Fail, OK # co19 issue 194
 LibTest/core/Match/operator_subscript_A01_t01: Fail # inherited from VM
-LibTest/core/Math/acos_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/asin_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/atan2_A01_t01: Fail, OK # inherited from VM
-LibTest/core/Math/atan_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/cos_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/exp_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/log_A01_t01: Fail, OK # inherited from VM
-LibTest/core/Math/max_A01_t03: Fail, OK  # Issue co19 - 157
-LibTest/core/Math/min_A01_t03: Fail, OK  # Issue co19 - 157
-LibTest/core/Math/parseDouble_A02_t01: Fail # inherited from VM
-LibTest/core/Math/pow_A01_t01: Fail, OK  # Issue co19 - 44
-LibTest/core/Math/pow_A11_t01: Fail # inherited from VM
-LibTest/core/Math/pow_A13_t01: Fail # inherited from VM
-LibTest/core/Math/random_A01_t01: Fail, OK # inherited from VM
-LibTest/core/Math/sin_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/sqrt_A01_t01: Fail, OK # inherited from VM
-LibTest/core/Math/tan_A01_t01: Fail, OK  # Issue co19 - 44
 LibTest/core/RegExp/firstMatch_A01_t01: Fail # inherited from VM
-LibTest/core/RegExp/hasMatch_A01_t02: Fail # inherited from dart2js
 LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail # inherited from VM
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Fail # inherited from VM
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A04_t01: Fail # inherited from VM
@@ -562,15 +575,7 @@
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Fail
 LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail # inherited from VM
-LibTest/core/Set/addAll_A01_t04: Fail, OK # co19 issue 194
-LibTest/core/Set/contains_A01_t03: Fail, OK # co19 issue 194
-LibTest/core/Set/containsAll_A01_t03: Fail, OK # co19 issue 194
-LibTest/core/Set/remove_A01_t04: Fail, OK # co19 issue 194
-LibTest/core/Set/removeAll_A01_t03: Fail, OK # co19 issue 194
 LibTest/core/String/contains_A01_t02: Fail # inherited from VM
-LibTest/core/String/replaceAll_A02_t01: Fail, OK # co19 issue 103
-LibTest/core/String/replaceFirst_A02_t01: Fail, OK # co19 issue 103
-LibTest/isolate/isolate_api/spawnFunction_A02_t01: Fail # inherited from VM
 LibTest/isolate/isolate_api/spawnUri_A01_t01: Fail, OK # Problems with the test: encoded file name
 LibTest/isolate/isolate_api/spawnUri_A01_t02: Fail, OK # Problems with the test: encoded file name
 LibTest/isolate/isolate_api/spawnUri_A01_t03: Fail, OK # Problems with the test: encoded file name
@@ -581,14 +586,10 @@
 # Partially implemented redirecting constructors makes this fail.
 Language/07_Classes/6_Constructors/2_Factories_A01_t05: Fail
 
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A16_t07: Fail # Redirecting constructors can not use initializing formals. This bug was previously masked - compilation failed, but for different, wrong reason.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A16_t07: Fail # http://dartbug.com/6242
 
-Language/07_Classes/6_Constructors/2_Factories_A01_t01: Fail, OK # Uses deprecated factory syntax.
 
 [ $compiler == dart2dart && $system == windows ]
 LibTest/core/double/operator_remainder_A01_t04: Fail # Result is NaN
 LibTest/core/double/round_A01_t01: Fail # Result is NaN
-LibTest/core/int/operator_remainder_A01_t02: Fail # Result is NaN
-LibTest/core/int/remainder_A01_t02: Fail # Result is NaN
 LibTest/core/double/remainder_A01_t04: Fail # Result is NaN
-LibTest/core/Math/atan2_A01_t03: Fail # Result is NaN
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 549830f..98ac7b2 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -6,46 +6,50 @@
 # Crashes first, please. Then untriaged bugs. There is a section below
 # for co19 bugs.
 [ $compiler == dart2js ]
-Language/11_Statements/05_For_A01_t07: Crash
+Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Crash
+Language/13_Libraries_and_Scripts/2_Exports_A04_t03: Crash
+
 Language/03_Overview/1_Scoping_A02_t06: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t09: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t11: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t12: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t13: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t14: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t15: Fail # TODO(ahe): Please triage this failure.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Fail # TODO(ahe): Please triage this failure.
 Language/06_Functions/06_Functions_A01_t22: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/07_Classes_A03_t01: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/07_Classes_A03_t07: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/1_Instance_Methods_A06_t01: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t01: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t02: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t03: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t04: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/2_Factories_A07_t01: Fail # TODO(ahe): Please triage this failure.
-Language/07_Classes/8_Static_Variables/1_Evaluation_of_Static_Variable_Getters_A01_t05: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A02_t03: Fail # TODO(ahe): Please triage this failure.
 Language/09_Generics/09_Generics_A05_t02: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/01_Constants_A05_t01: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/01_Constants_A13_t06: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/01_Constants_A19_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/01_Constants_A19_t03: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t04: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t05: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t06: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/05_Strings_A01_t01: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/05_Strings_A12_t01: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/08_Throw_A01_t01: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/08_Throw_A03_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/08_Throw_A03_t03: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/08_Throw_A04_t01: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/08_Throw_A05_t01: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/08_Throw_A05_t02: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/08_Throw_A05_t03: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A06_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A03_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A04_t02: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/1_New_A02_t03: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/1_New_A02_t05: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/1_New_A02_t06: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/1_New_A02_t07: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A06_t06: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A07_t01: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A11_t01: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/1_New_A12_t01: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/1_New_A12_t02: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/1_New_A13_t04: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/1_New_A14_t01: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/2_Const_A01_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/13_Property_Extraction_A01_t01: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/17_Getter_Invocation_A01_t03: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/17_Getter_Invocation_A02_t01: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/17_Getter_Invocation_A02_t02: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/18_Assignment_A05_t02: Fail # TODO(ahe): Please triage this failure.
@@ -69,89 +73,172 @@
 Language/10_Expressions/21_Bitwise_Expressions_A01_t15: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/21_Bitwise_Expressions_A01_t16: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/21_Bitwise_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t18: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t19: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t20: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t21: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t22: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t23: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/22_Equality_A01_t23: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/22_Equality_A01_t24: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/22_Equality_A03_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t09: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t10: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t12: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t13: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t14: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t07: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t08: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t12: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t13: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t14: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t10: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t14: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t15: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t16: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t04: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t05: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t12: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t13: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t18: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t19: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t20: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t21: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t22: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t03: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t05: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t06: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t08: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t09: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t01: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t03: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t06: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A01_t02: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A01_t04: Fail # TODO(ahe): Please triage this failure.
-Language/11_Statements/09_Try_A01_t18: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t19: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t28: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t18: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t19: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t20: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t21: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t22: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t23: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t09: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t10: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t11: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t12: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t13: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t14: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t07: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t08: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t12: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t13: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t14: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t10: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t14: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t15: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t16: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t04: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t05: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t12: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t13: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t18: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t19: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t20: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t21: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t22: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t03: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t05: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t06: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t08: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t09: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A04_t09: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t04: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t12: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t04: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A04_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A02_t03: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A03_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A03_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t02: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t04: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t02: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t03: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t04: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t05: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/03_Variable_Declaration_A04_t06: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/04_Local_Function_Declaration_A01_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/04_Local_Function_Declaration_A02_t02: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/06_For_A01_t11: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/06_For_A01_t12: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t02: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t03: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A03_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A03_t02: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A06_t02: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/10_Try_A06_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/10_Try_A07_t03: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/11_Return_A05_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/11_Return_A05_t02: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/11_Return_A05_t03: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/12_Labels_A03_t04: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/14_Continue_A02_t12: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/14_Continue_A02_t13: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t01: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t02: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t16: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t17: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t18: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t27: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t28: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t09: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t10: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t29: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t30: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t49: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t50: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t69: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t70: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t07: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t15: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t16: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t01: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/3_Parts_A03_t02: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail # TODO(ahe): Please triage this failure.
 Language/15_Reference/1_Lexical_Rules/1_Reserved_Words_A40_t04: Fail # TODO(ahe): Please triage this failure.
-Language/15_Reference/1_Lexical_Rules_A01_t06: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/RegExp/hasMatch_A01_t02: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/double/INFINITY_A01_t02: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/Queue/Queue.from_A01_t02: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/Set/Set.from_A01_t02: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/String/replaceAll_A02_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/String/replaceFirst_A02_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/double/INFINITY_A01_t04: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/double/NEGATIVE_INFINITY_A01_t02: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/double/NEGATIVE_INFINITY_A01_t04: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/Random/nextDouble_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/exp_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/parseDouble_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/pow_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/pow_A11_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/pow_A13_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/sin_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/math/tan_A01_t01: Fail # TODO(ahe): Please triage this failure.
 
 # Partially implemented rediriecting constructors makes this fail.
 Language/07_Classes/6_Constructors/2_Factories_A01_t05: Fail
 
-LibTest/core/OutOfMemoryException/OutOfMemoryException_A01_t01: Fail, OK # co19 issue 263
-LibTest/core/OutOfMemoryException/toString_A01_t01: Fail, OK # co19 issue 263
+
+LibTest/core/List/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeLast_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeFirst_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/NoMoreElementsException/NoMoreElementsException_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/NoMoreElementsException/toString_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/EmptyQueueException/EmptyQueueException_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/EmptyQueueException/toString_A01_t01: Fail, OK # co19 issue 288
 
 [ $compiler == dart2js && $unchecked ]
-Language/07_Classes/6_Constructors/2_Factories_A06_t05: Fail # TODO(ahe): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A06_t06: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail # TODO(ahe): Please triage this failure.
 
+[ $compiler == dart2js && $runtime == jsshell ]
+Language/06_Functions/3_Type_of_a_Function_A01_t01: Fail # TODO(ahe): Triage these tests.
+Language/07_Classes/8_Static_Variables_A02_t01: Fail # TODO(ahe): Triage these tests.
+LibTest/core/Map/putIfAbsent_A01_t08: Fail # TODO(ahe): Triage these tests.
+LibTest/core/double/round_A01_t01: Fail # TODO(ahe): Triage these tests.
+LibTest/core/double/toStringAsExponential_A01_t07: Fail # TODO(ahe): Triage these tests.
+LibTest/core/double/toStringAsFixed_A01_t05: Fail # TODO(ahe): Triage these tests.
+LibTest/core/double/toStringAsFixed_A01_t06: Fail # TODO(ahe): Triage these tests.
+LibTest/core/double/toStringAsPrecision_A01_t07: Fail # TODO(ahe): Triage these tests.
+LibTest/math/acos_A01_t01: Fail # TODO(ahe): Triage these tests.
+LibTest/math/asin_A01_t01: Fail # TODO(ahe): Triage these tests.
 
 [ $compiler == dart2js && $checked ]
-Language/03_Overview/1_Scoping_A02_t30: Fail # http://dartbug.com/5348
-
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t03: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t04: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A03_t07: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/2_Factories_A06_t01: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/2_Factories_A06_t02: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/2_Factories_A06_t03: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/2_Factories_A06_t04: Fail # TODO(ahe): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A06_t05: Fail # TODO(ahe): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A06_t06: Fail # TODO(ahe): Please triage this failure.
 Language/09_Generics/09_Generics_A03_t01: Fail # TODO(ahe): Please triage this failure.
 Language/09_Generics/09_Generics_A04_t06: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/06_Lists_A09_t01: Fail # TODO(ahe): Please triage this failure.
@@ -159,19 +246,26 @@
 Language/10_Expressions/06_Lists_A09_t05: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/07_Maps_A10_t04: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/07_Maps_A10_t05: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A03_t02: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/09_Function_Expressions_A03_t03: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A04_t02: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/09_Function_Expressions_A04_t03: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/09_Function_Expressions_A05_t02: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/09_Function_Expressions_A05_t04: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/09_Function_Expressions_A06_t02: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/09_Function_Expressions_A06_t04: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/11_Instance_Creation/1_New_A07_t01: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/11_Instance_Creation/1_New_A11_t01: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/2_Const_A09_t02: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/2_Const_A09_t03: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/11_Instance_Creation_A05_t02: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t04: Fail # TODO(ahe): Please triage this failure.
 Language/10_Expressions/20_Logical_Boolean_Expressions_A03_t01: Fail # TODO(ahe): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A02_t03: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A02_t03: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t03: Fail # TODO(ahe): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A05_t05: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/05_If_A02_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/06_For/1_For_Loop_A01_t08: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/09_Switch_A05_t01: Fail # TODO(ahe): Please triage this failure.
+Language/11_Statements/11_Return_A04_t01: Fail # TODO(ahe): Please triage this failure.
 Language/14_Types/4_Interface_Types_A08_t03: Fail # TODO(ahe): Please triage this failure.
 Language/14_Types/8_Parameterized_Types_A02_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/AssertionError/column_A01_t02: Fail # TODO(ahe): Please triage this failure.
@@ -181,6 +275,9 @@
 LibTest/core/List/operator_subscript_A03_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/List/operator_subscripted_assignment_A03_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/Map/putIfAbsent_A01_t04: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/Map/putIfAbsent_A01_t07: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/Map/putIfAbsent_A01_t08: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/Queue/iterator_hasNext_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/TypeError/column_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/TypeError/dstName_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/TypeError/dstType_A01_t01: Fail # TODO(ahe): Please triage this failure.
@@ -189,30 +286,10 @@
 LibTest/core/TypeError/srcType_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/TypeError/url_A01_t01: Fail # TODO(ahe): Please triage this failure.
 
-Language/11_Statements/04_If_A02_t02: Fail, OK # Issue co19 208
-Language/11_Statements/05_For/1_For_Loop_A01_t08: Fail, OK # Issue co19 208
-Language/11_Statements/06_While_A02_t02: Fail, OK # Issue co19 208
-
-Language/11_Statements/15_Assert_A04_t04: Fail # dart2js doesn't throw ClosureArgumentMismatchException
+Language/03_Overview/1_Scoping_A02_t30: Fail # http://dartbug.com/5348
 
 
 [ $compiler == dart2js ]
-LibTest/core/Math/acos_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/asin_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/atan2_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/atan_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/cos_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/exp_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/log_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/max_A01_t03: Fail, OK # co19 issue 200
-LibTest/core/Math/min_A01_t03: Fail, OK # co19 issue 200
-LibTest/core/Math/parseDouble_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/pow_A11_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/pow_A13_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/random_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/sin_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/sqrt_A01_t01: Fail, OK # co19 issue 200
-LibTest/core/Math/tan_A01_t01: Fail, OK # co19 issue 200
 LibTest/core/int/operator_GT_A01_t01: Fail, OK # co19 issue 200
 LibTest/core/int/operator_LT_A01_t01: Fail, OK # co19 issue 200
 LibTest/core/int/operator_addition_A01_t01: Fail, OK # co19 issue 200
@@ -223,53 +300,94 @@
 
 # Tests that fail because they use the legacy try-catch syntax.
 # See co19 issue 184.
-Language/11_Statements/09_Try_A01_t01: Fail, OK
-Language/11_Statements/09_Try_A02_t03: Fail, OK
-Language/11_Statements/09_Try_A04_t01: Fail, OK
-LibTest/core/Expect/equals_A02_t01: Fail, OK
 LibTest/core/List/getRange_A03_t01: Fail, OK
-LibTest/core/List/removeRange_A06_t01: Fail, OK
 LibTest/core/List/setRange_A05_t01: Fail, OK
-LibTest/core/Set/addAll_A01_t04: Fail, OK
-LibTest/core/Set/contains_A01_t03: Fail, OK
-LibTest/core/Set/containsAll_A01_t03: Fail, OK
-LibTest/core/Set/remove_A01_t04: Fail, OK
-LibTest/core/Set/removeAll_A01_t03: Fail, OK
 
-# These tests need to be updated to the new Date core lib API, co19 issue 256:
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t01: Fail
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t02: Fail
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A02_t01: Fail # May be a different issue.
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail # May be a different issue.
-LibTest/core/Date/Date_A01_t04: Fail
-LibTest/core/Date/Date_A01_t05: Fail
-LibTest/core/Date/isUtc_A01_t01: Fail
-LibTest/core/Date/millisecondsSinceEpoch_A01_t01: Fail
-LibTest/core/Date/operator_GE_A01_t01: Fail
-LibTest/core/Date/operator_GT_A01_t01: Fail
-LibTest/core/Date/operator_LE_A01_t01: Fail
-LibTest/core/Date/operator_LT_A01_t01: Fail
-LibTest/core/Date/operator_equality_A01_t01: Fail
-LibTest/core/Date/timeZoneName_A01_t01: Fail
-LibTest/core/Date/timeZoneOffset_A01_t01: Fail
-LibTest/core/Date/toLocal_A01_t01: Fail
-LibTest/core/Date/toUtc_A01_t01: Fail
+# These tests need to be updated for new optional parameter syntax and semantics, co19 issue 258:
+Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t01: Fail, OK
+Language/07_Classes/1_Instance_Methods_A02_t05: Fail, OK
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A13_t01: Fail, OK
+Language/14_Types/5_Function_Types_A01_t21: Fail, OK
 
-[ $compiler == dart2js && $system == macos && $runtime == d8 ]
-LibTest/core/Math/acos_A01_t01: Fail, OK
-LibTest/core/Math/asin_A01_t01: Fail, OK
-LibTest/core/Math/atan_A01_t01: Fail, OK
+LibTest/core/String/charCodes_A01_t01: Fail, OK # co19 issue 289
 
-[ $compiler == dart2js && $system == windows && $runtime == d8 ]
+LibTest/core/Stopwatch/Stopwatch_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t03: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t02: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsedInUs_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsedInMs_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t02: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t03: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/stop_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/frequency_A01_t01: Fail, OK # co19 issue 297
+
+LibTest/isolate/SendPort/send_A02_t02: Fail, OK # co19 issue 293
+LibTest/isolate/SendPort/send_A02_t03: Fail, OK # co19 issue 293
+LibTest/isolate/SendPort/send_A02_t04: Fail, OK # co19 issue 293
+LibTest/core/LinkedHashMap/LinkedHashMap_class_A01_t01: Fail, OK # co19 issue 293
+LibTest/core/Map/getKeys_A01_t01: Fail, OK # co19 issue 293
+LibTest/core/Map/getKeys_A01_t02: Fail, OK # co19 issue 293
+LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 293
+LibTest/core/Map/getValues_A01_t01: Fail, OK # co19 issue 293
+
+LibTest/core/Match/end_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/group_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/groupCount_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/operator_subscript_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/start_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/allMatches_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/firstMatch_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t02: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t03: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A06_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_AtomEscape_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Disjunction_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A06_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: Fail, OK # co19 issue 294
+
+LibTest/core/Queue/filter_A01_t04: Fail, OK # co19 issue 291
+LibTest/core/Queue/first_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/removeFirst_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/addFirst_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/removeLast_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/add_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/addLast_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/last_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/List/last_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/List/last_A01_t01: Fail, OK # co19 issue 291
+
+LibTest/core/Queue/filter_A01_t04: Fail, OK # co19 issue 287
+LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 287
+
+LibTest/core/int/isOdd_A01_t01: Fail, OK # co19 issue 277
+LibTest/core/int/isEven_A01_t01: Fail, OK # co19 issue 277
+
+
+[ $compiler == dart2js && $system == windows && $jscl ]
 LibTest/core/double/operator_remainder_A01_t04: Fail
 
 [ $compiler == dart2js ]
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A16_t07: Fail # Redirecting constructors can not use initializing formals. This bug was previously masked - compilation failed, but for different, wrong reason.
-
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t10: Fail # TODO(ahe): Enforce optional parameter semantics.
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t11: Fail # TODO(ahe): Enforce optional parameter semantics.
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t03: Fail # TODO(ahe): Enforce optional parameter semantics.
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t04: Fail # TODO(ahe): Enforce optional parameter semantics.
 
 Language/09_Generics/09_Generics_A05_t01: Fail # dart2js fails to reject type variable within static member
 
@@ -279,24 +397,15 @@
 Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A06_t08: Fail # Compile-time error: Unimplemented non-matching static call
 Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A07_t01: Fail # Compile-time error: Unimplemented non-matching static call
 Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A07_t04: Fail # Compile-time error: Unimplemented non-matching static call
-Language/10_Expressions/29_Type_Test_A04_t01: Fail # Compile-time error: error: cannot resolve type Undeclared
 Language/10_Expressions/01_Constants_A03_t01: Fail # Compile-time error: error: not a compile-time constant
 Language/10_Expressions/01_Constants_A11_t01: Fail # Compile-time error: error: not a compile-time constant
 LibTest/isolate/SendPort/send_A02_t01: Fail # Compile-time error: error: not a compile-time constant
 LibTest/isolate/SendPort/send_A02_t02: Fail # Compile-time error: error: not a compile-time constant
 LibTest/isolate/SendPort/send_A02_t03: Fail # Compile-time error: error: not a compile-time constant
 
-Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t01: Fail # Compile-time error: expected an expression, but got '&&'
-Language/10_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t01: Fail # Compile-time error: unexpected token '('
-Language/10_Expressions/28_Identifier_Reference_A08_t02: Fail # Compile-time error: unexpected token ';'
-Language/10_Expressions/28_Identifier_Reference_A08_t32: Fail # Compile-time error: unexpected token ';'
-Language/11_Statements/05_For_A01_t11: Fail # Compile-time error: unexpected token 'const'
 Language/10_Expressions/01_Constants_A18_t03: Fail # Compile-time error: unexpected token 'equals'
 Language/10_Expressions/22_Equality_A02_t03: Fail # Compile-time error: unexpected token 'equals'
-Language/10_Expressions/22_Equality_A03_t01: Fail # Compile-time error: unexpected token 'equals'
-Language/10_Expressions/22_Equality_A03_t03: Fail # Compile-time error: unexpected token 'equals'
 Language/10_Expressions/05_Strings_A20_t01: Fail # Runtime error: Expect.identical(expected: <abyr, abyr
-Language/11_Statements/08_Switch_A02_t01: Fail # Runtime error: Expect.throws() fails
 LibTest/isolate/isolate_api/spawnUri_A02_t01: Fail # Runtime error: Expect.throws() fails
 Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: Fail # Runtime error: NoSuchMethodException : method not found: '$call'
 Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t06: Fail # Runtime error: NoSuchMethodException : method not found: 'm'
@@ -314,22 +423,15 @@
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t03: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A07_t01: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A08_t02: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
-LibTest/core/Future/handleException_A01_t07: Fail # Runtime error: TypeError: Cannot call method '$call$1' of undefined
-LibTest/core/Future/then_A01_t05: Fail # Runtime error: TypeError: Cannot call method '$call$1' of undefined
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: Fail # Runtime error: TypeError: Cannot call method '$call$2' of undefined
-Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t04: Fail # Runtime error: TypeError: Object  has no method '$call$2'
 Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: Fail # Runtime error: TypeError: Object #<A> has no method '$call$0'
-Language/10_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A02_t01: Fail # Runtime error: TypeError: Object 1 has no method '$call$0'
 Language/10_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t01: Fail # Runtime error: TypeError: Object 1 has no method '$call$0'
-Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t05: Fail # Runtime error: TypeError: Object 1 has no method '$call$3'
-Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t03: Fail # Runtime error: TypeError: Object a1 has no method '$call$2'
-LibTest/isolate/isolate_api/spawnUri_A01_t01: Fail # Runtime error: UnsupportedOperationException: Currently spawnUri is not supported without web workers.
-LibTest/isolate/isolate_api/spawnUri_A01_t02: Fail # Runtime error: UnsupportedOperationException: Currently spawnUri is not supported without web workers.
-LibTest/isolate/isolate_api/spawnUri_A01_t03: Fail # Runtime error: UnsupportedOperationException: Currently spawnUri is not supported without web workers.
-LibTest/isolate/isolate_api/spawnUri_A01_t04: Fail # Runtime error: UnsupportedOperationException: Currently spawnUri is not supported without web workers.
-LibTest/isolate/isolate_api/spawnUri_A01_t05: Fail # Runtime error: UnsupportedOperationException: Currently spawnUri is not supported without web workers.
+LibTest/isolate/isolate_api/spawnUri_A01_t01: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
+LibTest/isolate/isolate_api/spawnUri_A01_t02: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
+LibTest/isolate/isolate_api/spawnUri_A01_t03: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
+LibTest/isolate/isolate_api/spawnUri_A01_t04: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
+LibTest/isolate/isolate_api/spawnUri_A01_t05: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
 LibTest/isolate/SendPort/send_A02_t04: Fail # Runtime error: TypeError: Cannot call method 'toSendPort$0' of undefined.
-LibTest/isolate/isolate_api/spawnFunction_A02_t01: Fail # Runtime error: Expect.throws() fails.
 
 LibTest/core/int/operator_NOT_A01_t01: Fail, OK # Expects negative result from bit-operation.
 LibTest/core/int/operator_XOR_A01_t01: Fail, OK # Requires bigints.
@@ -347,11 +449,13 @@
 LibTest/core/RegExp/allMatches_A01_t01: Fail, OK # co19 issue 212
 LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: Fail, OK # co19 issue 212
 
+
 [ $compiler == dart2js && $checked ]
 LibTest/core/Queue/addLast_A01_t01: Slow, Pass
 LibTest/core/Queue/add_A01_t01: Slow, Pass
 LibTest/core/Queue/iterator_hasNext_A01_t01: Slow, Pass
 
+
 #
 # Issues with co19 test suite.
 #
@@ -360,48 +464,22 @@
 # can understand so he can file a bug later.
 #
 [ $compiler == dart2js ]
-Language/10_Expressions/21_Bitwise_Expressions_A01_t01: Fail, OK # Function declaration takes precedence over function expression.
 Language/10_Expressions/22_Equality_A01_t01: Fail, OK # Function declaration takes precedence over function expression.
-Language/10_Expressions/21_Relational_Expressions_A01_t01: Fail, OK # Function declaration takes precedence over function expression.
-Language/10_Expressions/22_Shift_A01_t01: Fail, OK # Function declaration takes precedence over function expression.
-Language/10_Expressions/26_Postfix_Expressions_A01_t01: Fail, OK # A map literal cannot start an expression statement.
-Language/10_Expressions/27_Assignable_Expressions_A01_t27: Fail, OK # A map literal cannot start an expression statement.
-Language/10_Expressions/28_Identifier_Reference_A04_t07: Fail # assert is a reserved word, which can not be used as a variable name.
-Language/11_Statements/07_Do_A02_t02: Fail, OK # co19 issue 145.
+Language/10_Expressions/28_Postfix_Expressions_A01_t01: Fail, OK # A map literal cannot start an expression statement.
 LibTest/core/String/String_class_A02_t01: Fail, OK # compiler cancelled: Unhandled non-BMP character: U+10000
 LibTest/core/String/charCodeAt_A01_t01: Fail, OK # compiler cancelled: Unhandled non-BMP character: U+10000
 LibTest/core/String/charCodes_A01_t01: Fail, OK # compiler cancelled: Unhandled non-BMP character: U+10000
 
-Language/07_Classes/6_Constructors/2_Factories_A01_t01: Fail, OK # Uses deprecated factory syntax.
-
 Language/06_Functions/1_Function_Declaration_A02_t03: Fail, OK # co19 issue 210
 Language/06_Functions/1_Function_Declaration_A03_t03: Fail, OK # co19 issue 210
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t14: Fail, OK # co19 issue 210
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t15: Fail, OK # co19 issue 210
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t09: Fail, OK # co19 issue 210
-Language/11_Statements/03_Variable_Declaration_A01_t10: Fail, OK # co19 issue 210
-Language/11_Statements/03_Variable_Declaration_A02_t04: Fail, OK # co19 issue 210
-Language/11_Statements/08_Switch_A07_t02: Fail, OK # co19 issue 210
-
-LibTest/core/Math/max_A01_t03: Fail, OK # co19 issue 157
-LibTest/core/Math/min_A01_t03: Fail, OK # co19 issue 157
 
 Language/03_Overview/1_Scoping_A01_t40: Fail, OK # co19 issue 188
 Language/03_Overview/1_Scoping_A01_t41: Fail, OK # co19 issue 188
-Language/10_Expressions/28_Identifier_Reference_A06_t13: Fail, OK # co19 issue 254
-Language/10_Expressions/28_Identifier_Reference_A06_t15: Fail, OK # co19 issue 188
-
-Language/07_Classes/3_Setters_A01_t02: Fail, OK # co19 issue 189
-
-Language/07_Classes/07_Classes_A01_t20: Fail, OK # co19 issue 193
-Language/07_Classes/07_Classes_A02_t34: Fail, OK # co19 issue 193
 
 Language/07_Classes/4_Abstract_Instance_Members_A02_t02: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A06_t01: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A06_t02: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A06_t03: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A06_t04: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A06_t05: Fail, OK # co19 issue 194
 
 Language/06_Functions/4_External_Functions_A01_t01: Fail, OK # http://dartbug.com/5021
 
@@ -410,31 +488,12 @@
 Language/03_Overview/2_Privacy_A01_t09: Fail, OK # co19 issue 198
 Language/03_Overview/2_Privacy_A01_t10: Fail, OK # co19 issue 198
 
-Language/10_Expressions/30_Type_Cast_A02_t03: Fail, OK # co19 issue 236
+Language/10_Expressions/11_Instance_Creation/1_New_A12_t01: Fail, OK # co19 issue 273
+LibTest/core/String/hashCode_A01_t01: Fail, OK # co19 issue 273
+LibTest/core/int/hashCode_A01_t01: Fail, OK # co19 issue 273
 
-Language/13_Libraries_and_Scripts/2_Imports_A03_t06: Fail, OK # co19 issue 244
 
-Language/13_Libraries_and_Scripts/2_Imports_A02_t01: Fail, OK # co19 issue 246
-Language/13_Libraries_and_Scripts/2_Imports_A02_t02: Fail, OK # co19 issue 246
-Language/13_Libraries_and_Scripts/2_Imports_A02_t16: Fail, OK # co19 issue 246
-Language/13_Libraries_and_Scripts/2_Imports_A02_t17: Fail, OK # co19 issue 246
-Language/13_Libraries_and_Scripts/2_Imports_A03_t02: Fail, OK # co19 issue 246
-Language/13_Libraries_and_Scripts/2_Imports_A03_t12: Fail, OK # co19 issue 246
-Language/13_Libraries_and_Scripts/2_Imports_A03_t22: Fail, OK # co19 issue 246
-
-Language/13_Libraries_and_Scripts/2_Imports_A03_t16: Fail # co19 issue 226
-Language/13_Libraries_and_Scripts/2_Imports_A03_t26: Fail # co19 issue 226
-
-Language/13_Libraries_and_Scripts/3_Includes_A01_t01: Fail, OK # co19 issue 249
-Language/13_Libraries_and_Scripts/3_Includes_A03_t03: Fail, OK # co19 issue 249
-
-Language/13_Libraries_and_Scripts/2_Imports_A06_t01: Fail, OK # co19 issue 250
-
-Language/13_Libraries_and_Scripts/2_Imports_A01_t39: Fail # co19 issue 253: Show combinators are intersections.
-
-Language/03_Overview/1_Scoping_A02_t05: Fail # co19 issue 261
-
-[ $compiler == dart2js && $runtime == d8 ]
+[ $compiler == dart2js && $jscl ]
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A04_t01: Fail, Pass # issue 3333
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Fail, Pass # issue 3333
 
@@ -444,12 +503,6 @@
 LibTest/core/Date/year_A01_t01: Fail, OK # Requires big int.
 LibTest/core/Match/pattern_A01_t01: Fail, OK # Bad test, allMatches return an Iterable.
 LibTest/core/Match/str_A01_t01: Fail, OK # Bad test, allMatches return an Iterable.
-LibTest/core/Math/exp_A01_t01: Fail, Pass, OK # TODO(floitsch): Review.
-LibTest/core/Math/pow_A01_t01: Fail, OK # Bad test (uses x.pow(y), not Math.pow(x, y)).
-LibTest/core/Math/pow_A11_t01: Fail, OK # TODO(floitsch): Review.
-LibTest/core/Math/pow_A13_t01: Fail, OK # TODO(floitsch): Review.
-LibTest/core/Math/sin_A01_t01: Fail, OK # TODO(floitsch): Review.
-LibTest/core/Math/tan_A01_t01: Fail, OK # TODO(floitsch): Review.
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Fail, OK # This is not rejected by V8.
 LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: Fail, OK # co19 issue 92.
 LibTest/core/RegExp/RegExp_A01_t03: Fail, OK # Expects exception from const constructor.
@@ -484,30 +537,23 @@
 #
 [ $compiler == dart2js ]
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A13_t01: Fail # compiler cancelled: cannot resolve type T
-Language/11_Statements/13_Continue_A02_t12: Fail # compiler cancelled: cannot resolve label L
-Language/11_Statements/13_Continue_A02_t13: Fail # compiler cancelled: cannot resolve label L
-
 
 Language/03_Overview/1_Scoping_A02_t07: Fail # duplicate definition of f(var f){f();}
 Language/03_Overview/1_Scoping_A02_t12: Fail # duplicate definition of x=42
 Language/03_Overview/2_Privacy_A01_t06: Fail # cannot resolve type _inaccessibleFuncType
 Language/03_Overview/2_Privacy_A01_t11: Fail # internal error: super property read not implemented
 Language/03_Overview/2_Privacy_A01_t14: Fail # duplicate definition of _(var _)=> _
-Language/11_Statements/11_Labels_A03_t04: Fail # continue not implemented
-
 
 Language/10_Expressions/01_Constants_A12_t01: Fail # internal error: CompileTimeConstantEvaluator not implemented
 Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A01_t01: Fail # Unimplemented non-matching static call
 Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A01_t04: Fail # Unimplemented non-matching static call
 Language/10_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A01_t05: Fail # Unimplemented non-matching static call
 Language/10_Expressions/22_Equality_A05_t01: Fail # != cannot be called on super
-Language/10_Expressions/25_Unary_Expressions_A01_t01: Fail # ! cannot be called on super
-Language/10_Expressions/25_Unary_Expressions_A01_t10: Fail # cannot deal with super in complex assignments
-Language/10_Expressions/27_Assignable_Expressions_A01_t26: Fail # internal error in parser.
-Language/10_Expressions/28_Identifier_Reference_A02_t01: Fail # Pseudo keyword "abstract".
+Language/10_Expressions/27_Unary_Expressions_A01_t01: Fail # ! cannot be called on super
+Language/10_Expressions/27_Unary_Expressions_A01_t10: Fail # cannot deal with super in complex assignments
+Language/10_Expressions/30_Identifier_Reference_A02_t01: Fail # Pseudo keyword "abstract".
 
-[ $compiler == dart2js && $runtime == d8 ]
-Language/11_Statements/09_Try_A05_t03: Fail # Expect.isTrue(false) fails.
+[ $compiler == dart2js && $jscl ]
 LibTest/core/Date/Date.fromString_A03_t01: Fail # Issue co19 - 121
 LibTest/core/Expect/throws_A02_t01: Fail # reason (sdsds sd dsf) not mentioned in ExpectException message (Expect.isTrue(false) fails.)
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: Fail # IllegalJSRegExpException: '\c(' 'SyntaxError: Invalid regular expression: /\c(/: Unterminated group'
@@ -521,9 +567,10 @@
 #
 # The following tests may be broken, but require further review.
 #
-[ $compiler == dart2js && $runtime == d8 ]
+[ $compiler == dart2js && $jscl ]
 LibTest/core/Expect/identical_A01_t01: Fail # TODO(floitsch): Is NaN identical to NaN?
 
+
 [ $compiler == dart2js && $browser ]
 *: Skip
 
@@ -541,7 +588,6 @@
 Language/05_Variables/05_Variables_A01_t15: Fail # Checks that a variable declaration cannot contain the 'abstract' keyword.
 Language/05_Variables/05_Variables_A03_t01: Fail # Checks that a compile-time error occurs if local final variable is redefined.
 Language/05_Variables/05_Variables_A03_t02: Fail # Checks that a compile-time error occurs if local final variable is not assigned.
-Language/05_Variables/05_Variables_A03_t03: Fail # Checks that a compile-time error occurs if a global final variable is redefined.
 Language/05_Variables/05_Variables_A03_t04: Fail # Checks that a compile-time error occurs if a global final variable is not assigned.
 Language/05_Variables/05_Variables_A03_t05: Fail # Checks that a compile-time error occurs if local typed final variable is redefined.
 Language/05_Variables/05_Variables_A03_t06: Fail # Checks that a compile-time error occurs if local typed final variable is not assigned.
@@ -558,7 +604,6 @@
 Language/05_Variables/05_Variables_A04_t08: Fail # Checks that a compile-time error occurs if a global typed constant variable is not initialized at declaration.
 Language/05_Variables/05_Variables_A04_t10: Fail # Checks that assigning a constant variable to the same value it already holds still produces a compile-time error.
 Language/05_Variables/05_Variables_A05_t01: Fail # Checks that a compile-time error occurs if a constant variable is not initialized.
-Language/06_Functions/06_Functions_A01_t06: Fail # Checks that it is a compile error if a block of a function body isn't closed
 Language/06_Functions/06_Functions_A01_t31: Fail # Checks that functions can't be declared as static inside of a function body.
 Language/06_Functions/1_Function_Declaration_A01_t01: Fail # Checks that it is a compile-time error to preface library function with 'static'.
 Language/06_Functions/1_Function_Declaration_A02_t02: Fail # Checks that 'id' is not assignable since its declaration is equivalent to a final variable declaration.
@@ -578,7 +623,6 @@
 Language/07_Classes/07_Classes_A02_t02: Fail # Checks that it is a compile-time error if a constant constructor declaration includes a body.
 Language/07_Classes/07_Classes_A02_t04: Fail # Checks that it is a compile-time error if a constant constructor declaration with initializers includes a body.
 Language/07_Classes/07_Classes_A02_t11: Fail # Checks that it is a compile-time error if a static final variable declaration does not include explicit initializer.
-Language/07_Classes/07_Classes_A02_t32: Fail # Checks that it is a compile-time error when a constant constructor is declared abstract.
 Language/07_Classes/07_Classes_A03_t02: Fail # Checks that it is a compile-time error if a factory constructor method definition does not include a body.
 Language/07_Classes/07_Classes_A03_t08: Fail # Checks that it is a compile-time error if a static setter method definition does not include a body.
 Language/07_Classes/07_Classes_A03_t09: Fail # Checks that it is a compile-time error if a static function method definition does not include a body.
@@ -587,11 +631,7 @@
 Language/07_Classes/07_Classes_A04_t22: Fail # Checks that an abstract static operator can't be used in place of a class member definition./
 Language/07_Classes/07_Classes_A04_t24: Fail # Checks that a static abstract getter can't be used in place of a class member definition.
 Language/07_Classes/07_Classes_A04_t25: Fail # Checks that a static abstract setter can't be used in place of a class member definition.
-Language/07_Classes/07_Classes_A09_t01: Fail # Checks that it is a compile-time error if a class has a non-abstract instance method and a static member method with the same name.
-Language/07_Classes/07_Classes_A09_t02: Fail # Checks that it is a compile-time error if a class has an abstract instance method and a static member method with the same name.
-Language/07_Classes/07_Classes_A09_t04: Fail # Checks that it is a compile-time error if a class has an instance method and a static field method with the same name.
 Language/07_Classes/10_Superinterfaces_A04_t01: Fail # Checks that it is a compile-time error if the same type appears more than once in the implements clause.
-Language/07_Classes/1_Instance_Methods/2_Operators_A01_t03: Fail # Checks that it is a compile-time error if a class attempts to define an operator without a name (basically, an instance method named 'operator').
 Language/07_Classes/1_Instance_Methods/2_Operators_A06_t02: Fail # Checks that a compile-time error is produced if a user-defined operator ~ specifies one parameter.
 Language/07_Classes/1_Instance_Methods/2_Operators_A07_t01: Fail # Checks that a compile-time error is produced if a user-defined operator [] specifies an optional named parameter.
 Language/07_Classes/1_Instance_Methods/2_Operators_A07_t02: Fail # Checks that a compile-time error is produced if a user-defined operator [] specifies an optional named parameter in addition to the required one.
@@ -599,10 +639,7 @@
 Language/07_Classes/1_Instance_Methods/2_Operators_A07_t04: Fail # Checks that a compile-time error is produced if a user-defined operator []= specifies one optional named parameter in addition to the two required ones.
 Language/07_Classes/1_Instance_Methods_A02_t01: Fail # Checks that a compile-time error is produced if m1 has fewer named parameters than m2 (2 vs 3) and neither have any required parameters.
 Language/07_Classes/1_Instance_Methods_A02_t02: Fail # Checks that a compile-time error is produced if m1 has fewer named parameters than m2 (1 vs. 0) and neither have any required parameters.
-Language/07_Classes/1_Instance_Methods_A02_t03: Fail # Checks that a compile-time error is produced if m1 has the same set of named parameters as m2 but in a different order.
-Language/07_Classes/1_Instance_Methods_A02_t04: Fail # Checks that a compile-time error is produced if m1 has the same set of named parameters as m2 but in a different order.
 Language/07_Classes/1_Instance_Methods_A02_t05: Fail # Checks that a compile-time error is produced if m1 has almost the same set of named  parameters as m2 except for one of them having a different name.
-Language/07_Classes/1_Instance_Methods_A02_t06: Fail # Checks that a compile-time error is produced if m1 has the same set of named parameters as m2 but in a different order even if the class declaring m1 is not a direct subtype of the class declaring m2.
 Language/07_Classes/2_Getters_A01_t03: Fail # Checks that a compile-time error is produced if empty formal parameter list is present.
 Language/07_Classes/2_Getters_A01_t04: Fail # Checks that a compile-time error is produced if non-empty formal parameter list is present.
 Language/07_Classes/2_Getters_A01_t05: Fail # Checks that a compile-time error is produced if an static getter has empty formal parameter list.
@@ -617,7 +654,6 @@
 Language/07_Classes/3_Setters_A03_t07: Fail # Checks that a compile-time error is produced if a static setter's formal parameter list is empty.
 Language/07_Classes/3_Setters_A03_t08: Fail # Checks that a compile-time error is produced if a static setter's formal parameter list contains a single optional parameter with a default value.
 Language/07_Classes/4_Abstract_Instance_Members_A04_t01: Fail # Checks that a compile-time error is produced when the overriding abstract method has fewer named parameters than the instance method being overridden (2 vs 3) and neither  have any required parameters.
-Language/07_Classes/4_Abstract_Instance_Members_A04_t04: Fail # Checks that a compile-time error is produced when the overriding abstract method has the same set of named parameters as the non-abstract instance method being overriden, but in a different order.
 Language/07_Classes/4_Abstract_Instance_Members_A04_t05: Fail # Checks that a compile-time error is produced when the overriding non-abstract  instance method has the same set of named parameters as the abstract method being overriden,  but in a different order.
 Language/07_Classes/4_Abstract_Instance_Members_A04_t06: Fail # Checks that a compile-time error is produced when the overriding non-abstract  instance method has almost the same set of named parameters as the abstract method being overriden,  except for one that has a different name.
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A03_t05: Fail # Checks that redirecting constructor can not have initializing formals.
@@ -629,46 +665,21 @@
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A03_t02: Fail # Checks that compile-time error is produced when a class with constant constructor inherits a non-final instance variable.
 Language/07_Classes/6_Constructors_A01_t01: Fail # Checks that a compile-error is produced when a constructor's id coincides with the name of a field in the same class.
 Language/07_Classes/6_Constructors_A02_t01: Fail # Checks that a compile-error is produced when a named constructor definition does not begin with the name of its class.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A16_t07: Fail # http://dartbug.com/6242
 Language/10_Expressions/01_Constants_A16_t01: Fail # Checks that an IntegerDivisionByZeroException raised during evaluation  of a compile-time constant causes a compile-time error.
 Language/10_Expressions/01_Constants_A16_t02: Fail # Checks that an OutOfMemoryException raised during evaluation of a compile-time constant causes a compile-time error.
-Language/10_Expressions/05_Strings_A02_t39: Fail # Checks that unbalanced string cause compile-time erros.
-Language/10_Expressions/05_Strings_A02_t41: Fail # Checks that unbalanced raw multiline string cause compile-time erros.
-Language/10_Expressions/05_Strings_A02_t43: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
-Language/10_Expressions/05_Strings_A02_t45: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
 Language/10_Expressions/05_Strings_A02_t46: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
-Language/10_Expressions/05_Strings_A02_t47: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
 Language/10_Expressions/05_Strings_A02_t48: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
-Language/10_Expressions/05_Strings_A02_t49: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
 Language/10_Expressions/06_Lists_A04_t01: Fail # Checks that it is a compile-time error if the type argument of a constant list literal includes a type variable.
 Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t04: Fail # Checks that it is a static warning if interface C does not declare a static method or getter m.
 Language/10_Expressions/22_Equality_A01_t15: Fail # Checks that equality expressions cannot be operands of another equality expression.
 Language/10_Expressions/22_Equality_A01_t16: Fail # Checks that equality expressions cannot be operands of another equality expression.
-Language/10_Expressions/21_Relational_Expressions_A01_t10: Fail # Checks that a relational expression cannot be the operand of another relational expression.
-Language/10_Expressions/21_Relational_Expressions_A01_t11: Fail # Checks that a relational expression cannot be the operand of another relational expression.
-Language/10_Expressions/21_Relational_Expressions_A01_t12: Fail # Checks that a relational expression cannot be the operand of another relational expression.
-Language/10_Expressions/21_Relational_Expressions_A01_t13: Fail # Checks that a relational expression cannot be the operand of another relational expression.
-Language/10_Expressions/28_Identifier_Reference_A07_t01: Fail # Checks that it is a compile-time error when a built-in identifier "abstract" is used as a type annotation of a local variable.
-Language/10_Expressions/28_Identifier_Reference_A07_t04: Fail # Checks that it is a compile-time error when a built-in identifier "equals" is used as a type annotation of a local variable.
-Language/10_Expressions/28_Identifier_Reference_A07_t09: Fail # Checks that it is a compile-time error when a built-in identifier "negate" is used as a type annotation of a local variable.
-Language/10_Expressions/28_Identifier_Reference_A07_t12: Fail # Checks that it is a compile-time error when a built-in identifier "static" is used as a type annotation of a local variable.
-Language/11_Statements/02_Expression_Statements_A01_t09: Fail # Checks that it is a compile-time error when a map literal is used as a statement.
-Language/11_Statements/02_Expression_Statements_A01_t10: Fail # Checks that it is a compile-time error when a map literal is used as a statement.
-Language/11_Statements/02_Expression_Statements_A01_t11: Fail # Checks that it is a compile-time error when a map literal is used as a statement.
-Language/11_Statements/03_Variable_Declaration_A03_t01: Fail # Checks that if the variable declaration is prefixed with the final modifier, then that variable cannot be assigned a new value outside of this declaration.
-Language/11_Statements/03_Variable_Declaration_A03_t02: Fail # Checks that if the variable declaration is prefixed with the final modifier, then variable must be initialized right there and then.
-Language/11_Statements/03_Variable_Declaration_A03_t03: Fail # Checks that if a variable declaration is prefixed with  const modifier, then it cannot be assigned a new value afterwards.
-Language/11_Statements/03_Variable_Declaration_A03_t04: Fail # Checks that if a variable declaration is prefixed with  const modifier, then it must be initialized right there and then.
+Language/10_Expressions/23_Relational_Expressions_A01_t10: Fail # Checks that a relational expression cannot be the operand of another relational expression.
+Language/10_Expressions/23_Relational_Expressions_A01_t11: Fail # Checks that a relational expression cannot be the operand of another relational expression.
+Language/10_Expressions/23_Relational_Expressions_A01_t12: Fail # Checks that a relational expression cannot be the operand of another relational expression.
+Language/10_Expressions/23_Relational_Expressions_A01_t13: Fail # Checks that a relational expression cannot be the operand of another relational expression.
+Language/10_Expressions/30_Identifier_Reference_A07_t01: Fail # Checks that it is a compile-time error when a built-in identifier "abstract" is used as a type annotation of a local variable.
 Language/11_Statements/03_Variable_Declaration_A04_t01: Fail # Checks that if the variable declaration is prefixed with the const modifier, then variable must be initialized to a constant expression.
-Language/11_Statements/05_For_A01_t12: Fail # Checks that it is a compile-time error when the loop variable in a 'id in expression' includes initializer.
-Language/11_Statements/08_Switch_A05_t01: Fail # Checks that it is a compile-time error if case expressions of a switch statement without a default case have different types.
-Language/11_Statements/08_Switch_A05_t02: Fail # Checks that it is a compile-time error if case expressions of a switch statement with a default case have different types.
-Language/11_Statements/08_Switch_A06_t01: Fail # Checks that it is a compile-time error if a case expression is not a compile-time constant.
-Language/11_Statements/08_Switch_A06_t02: Fail # Checks that it is a compile-time error if a case expression is a compile-time constant of type bool.
-Language/11_Statements/08_Switch_A06_t03: Fail # Checks that it is a compile-time error if a case expression is null
-Language/11_Statements/08_Switch_A06_t04: Fail # Checks that it is a compile-time error if a case expression is a compile-time constant of type double.
-Language/11_Statements/10_Return_A04_t01: Fail # Checks that a compile-time error occurs if a return statement  of the form return e; appears in a generative constructor.
-Language/11_Statements/10_Return_A04_t02: Fail # Checks that a compile-time error occurs if a return statement  of the form return e; appears in a named generative constructor.
-Language/11_Statements/10_Return_A04_t03: Fail # Checks that a compile-time error occurs if a return statement  of the form return e; appears in a generative constructor.
 Language/14_Types/3_Type_Declarations/1_Typedef_A07_t01: Fail # Checks that self-referencing typedef is not allowed (return value type annotation has the same name as a type alias).
 Language/14_Types/3_Type_Declarations/1_Typedef_A07_t02: Fail # Checks that self-referencing typedef is not allowed (positional formal parameter type annotation has the same name as a type alias).
 Language/14_Types/3_Type_Declarations/1_Typedef_A07_t03: Fail # Checks that self-referencing typedef is not allowed (optional formal parameter type annotation has the same name as a type alias).
@@ -683,11 +694,6 @@
 Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t06: Fail # http://dartbug.com/5027
 
 Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A03_t01: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A03_t02: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A05_t01: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A05_t02: Fail # http://dartbug.com/5029
-Language/10_Expressions/30_Type_Cast_A05_t04: Fail # http://dartbug.com/5029
 
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t03: Fail # http://dartbug.com/3566
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t04: Fail # http://dartbug.com/3566
@@ -733,27 +739,16 @@
 Language/14_Types/5_Function_Types_A01_t22: Fail # http://dartbug.com/5022
 Language/14_Types/5_Function_Types_A01_t23: Fail # http://dartbug.com/5022
 
-Language/13_Libraries_and_Scripts/2_Imports_A02_t18: Fail # http://dartbug.com/3970. Redirecting factory constructors not implemented yet.
-
 Language/13_Libraries_and_Scripts/4_Scripts_A03_t01: Fail # http://dartbug.com/5683
 Language/13_Libraries_and_Scripts/4_Scripts_A03_t03: Fail # http://dartbug.com/5683
 
-Language/13_Libraries_and_Scripts/2_Imports_A02_t27: Fail # http://dartbug.com/5712
-
 Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t02: Fail # http://dartbug.com/5713
 
-Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: Fail # http://dartbug.com/5714
-
 
 #
 # Unexpected runtime errors.
 #
 [ $compiler == dart2js ]
-Language/10_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t02: Fail # TypeError: Object #<C> has no method 'call$0'
-Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t08: Fail # TypeError: Object #<Foo> has no method 'call$0'
-Language/10_Expressions/30_Type_Cast_A02_t03: Fail # Expect.fail('CastError expected')
-Language/10_Expressions/30_Type_Cast_A05_t03: Fail # CastError: Casting value of type Number to incompatible type G
-Language/10_Expressions/30_Type_Cast_A05_t05: Fail # CastError: Casting value of type Number to incompatible type G
 Language/14_Types/5_Function_Types_A02_t01: Fail # Expect.isTrue(false) fails.
 
 Language/14_Types/4_Interface_Types_A05_t03: Fail # http://dartbug.com/5020
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 97980a0..51b34ca 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -2,48 +2,40 @@
 # 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.
 
+# These tests either wrongly expect a compile-time error or wrongly reject a type error in production mode, co19 issue 282:
 [ $compiler == none && $runtime == vm ]
-# These tests need to be updated to the new Date core lib API, co19 issue 256:
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t01: Fail
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t02: Fail
-LibTest/core/Date/Date_A01_t04: Fail
-LibTest/core/Date/Date_A01_t05: Fail
-LibTest/core/Date/isUtc_A01_t01: Fail
-LibTest/core/Date/millisecondsSinceEpoch_A01_t01: Fail
-LibTest/core/Date/operator_GE_A01_t01: Fail
-LibTest/core/Date/operator_GT_A01_t01: Fail
-LibTest/core/Date/operator_LE_A01_t01: Fail
-LibTest/core/Date/operator_LT_A01_t01: Fail
-LibTest/core/Date/operator_equality_A01_t01: Fail
-LibTest/core/Date/timeZoneName_A01_t01: Fail
-LibTest/core/Date/timeZoneOffset_A01_t01: Fail
-LibTest/core/Date/toLocal_A01_t01: Fail
-LibTest/core/Date/toUtc_A01_t01: Fail
+Language/13_Libraries_and_Scripts/1_Imports_A03_t05: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t08: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t25: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t28: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t45: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t48: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t65: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t68: Fail, OK
+[ $compiler == none && $runtime == vm && $unchecked ]
+Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail, OK
+[ $compiler == none && $runtime == vm && $checked ]
+Language/13_Libraries_and_Scripts/1_Imports_A03_t06: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A03_t66: Fail, OK
 
-LibTest/core/OutOfMemoryException/OutOfMemoryException_A01_t01: Fail # co19 issue 263
-LibTest/core/OutOfMemoryException/toString_A01_t01: Fail # co19 issue 263
 
-Language/13_Libraries_and_Scripts/2_Imports_A02_t21: Crash # TODO(vm-team): Please triage this crash.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t22: Crash # TODO(vm-team): Please triage this crash.
-LibTest/isolate/isolate_api/port_A01_t01: Skip # Times out.
+[ $compiler == none && $runtime == vm ]
+Language/13_Libraries_and_Scripts/1_Imports_A02_t21: Crash # TODO(vm-team): Please triage this crash.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t22: Crash # TODO(vm-team): Please triage this crash.
 
-Language/06_Functions/06_Functions_A01_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/06_Functions/1_Function_Declaration_A02_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/06_Functions/1_Function_Declaration_A03_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/06_Functions/4_External_Functions_A01_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/07_Classes_A01_t20: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/07_Classes_A02_t32: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/07_Classes_A02_t34: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/07_Classes_A09_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/07_Classes_A09_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/07_Classes_A09_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/1_Instance_Methods/2_Operators_A01_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/03_Overview/1_Scoping_A02_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t04: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t11: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t13: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t14: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/05_Variables_A03_t15: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/2_Getters_A01_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/2_Getters_A01_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/3_Setters_A01_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/3_Setters_A04_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/3_Setters_A04_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/3_Setters_A04_t03: Fail # TODO(vm-team): Please triage this failure.
@@ -58,63 +50,38 @@
 Language/07_Classes/4_Abstract_Instance_Members_A03_t05: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/4_Abstract_Instance_Members_A04_t05: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/4_Abstract_Instance_Members_A04_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/4_Abstract_Instance_Members_A06_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/4_Abstract_Instance_Members_A06_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A06_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A06_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/6_Constructors/2_Factories_A07_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A05_t04: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A04_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A04_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A04_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/8_Static_Variables/1_Evaluation_of_Static_Variable_Getters_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/8_Static_Variables/1_Evaluation_of_Static_Variable_Getters_A01_t05: Fail # TODO(vm-team): Please triage this failure.
 Language/08_Interfaces/5_Superinterfaces_A01_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/09_Generics/09_Generics_A05_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/09_Generics/09_Generics_A05_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/01_Constants_A03_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/01_Constants_A05_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/01_Constants_A06_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/01_Constants_A14_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/01_Constants_A19_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/01_Constants_A19_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t04: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t05: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/05_Strings/1_String_Interpolation_A01_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A01_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A02_t39: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A02_t41: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A02_t43: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A02_t45: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/05_Strings_A02_t46: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A02_t47: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/05_Strings_A02_t48: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A02_t49: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/05_Strings_A12_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A03_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A03_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A04_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A05_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/08_Throw_A05_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A02_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A04_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A06_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A03_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/09_Function_Expressions_A04_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/1_New_A02_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/1_New_A02_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A06_t06: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/1_New_A09_t09: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A12_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A13_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A13_t04: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/2_Const_A10_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/13_Property_Extraction_A01_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t08: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/17_Getter_Invocation_A01_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/17_Getter_Invocation_A02_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/17_Getter_Invocation_A02_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/18_Assignment_A05_t02: Fail # TODO(vm-team): Please triage this failure.
@@ -138,143 +105,152 @@
 Language/10_Expressions/21_Bitwise_Expressions_A01_t15: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/21_Bitwise_Expressions_A01_t16: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/21_Bitwise_Expressions_A01_t17: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t18: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t19: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t20: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t21: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t22: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/21_Relational_Expressions_A01_t23: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/22_Equality_A01_t23: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/22_Equality_A01_t24: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t09: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t10: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t11: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t12: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t13: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/22_Shift_A01_t14: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t07: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t08: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t11: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t12: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t13: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/23_Additive_Expressions_A01_t14: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t10: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t11: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t14: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t15: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t16: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/24_Multiplicative_Expressions_A01_t17: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t11: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t12: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t13: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t17: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t18: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t19: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t20: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t21: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/25_Unary_Expressions_A01_t22: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/26_Postfix_Expressions_A01_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t08: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/27_Assignable_Expressions_A01_t09: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A06_t13: Fail, OK # co19 issue 257
-Language/10_Expressions/28_Identifier_Reference_A04_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A04_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A07_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A01_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A05_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A05_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/29_Type_Test_A05_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A04_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A04_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/02_Expression_Statements_A01_t09: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/02_Expression_Statements_A01_t10: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/02_Expression_Statements_A01_t11: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/03_Variable_Declaration_A01_t10: Fail # co19 issue 234
-Language/11_Statements/03_Variable_Declaration_A02_t04: Fail # co19 issue 234
-Language/11_Statements/05_For/2_For_in_A01_t02: Fail # Issue 5629
-Language/11_Statements/05_For/2_For_in_A01_t04: Fail # Issue 5629
-Language/11_Statements/07_Do_A02_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A05_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A05_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A06_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A06_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A06_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A06_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/08_Switch_A07_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/09_Try_A01_t18: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/09_Try_A06_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/09_Try_A06_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/09_Try_A06_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/09_Try_A06_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Statements/09_Try_A06_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t18: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t19: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t20: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t21: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t22: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/23_Relational_Expressions_A01_t23: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t09: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t10: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t11: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t12: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t13: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/24_Shift_A01_t14: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t07: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t08: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t11: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t12: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t13: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/25_Additive_Expressions_A01_t14: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t10: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t11: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t14: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t15: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t16: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/26_Multiplicative_Expressions_A01_t17: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t04: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t11: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t12: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t13: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t17: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t18: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t19: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t20: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t21: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/27_Unary_Expressions_A01_t22: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/28_Postfix_Expressions_A01_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t06: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t08: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/29_Assignable_Expressions_A01_t09: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A04_t09: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A05_t08: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A06_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A07_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/30_Identifier_Reference_A08_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A01_t04: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A05_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A05_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/31_Type_Test_A05_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A04_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/32_Type_Cast_A04_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/04_Local_Function_Declaration_A02_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/06_For_A01_t11: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A02_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A03_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A03_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A06_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/10_Try_A11_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/12_Labels_A01_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A03_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t16: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t17: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t18: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t19: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t21: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A02_t22: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t12: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t22: Fail # TODO(vm-team): Please triage this failure.
-Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A01_t53: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A01_t54: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t16: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t17: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t18: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t04: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t07: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t15: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t16: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/3_Parts_A03_t03: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail # TODO(vm-team): Please triage this failure.
 Language/14_Types/5_Function_Types_A02_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/15_Reference/1_Lexical_Rules_A01_t06: Fail # TODO(vm-team): Please triage this failure.
-LibTest/core/RegExp/hasMatch_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-LibTest/core/double/INFINITY_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-LibTest/core/double/NEGATIVE_INFINITY_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t01: Fail # TODO(vm-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t02: Fail # TODO(vm-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t03: Fail # TODO(vm-team): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t04: Fail # TODO(vm-team): Please triage this failure.
-LibTest/isolate/isolate_api/spawnUri_A01_t01: Fail # TODO(vm-team): Please triage this failure.
-LibTest/isolate/isolate_api/spawnUri_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/Queue/Queue.from_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/Set/Set.from_A01_t02: Fail # TODO(vm-team): Please triage this failure.
 LibTest/isolate/isolate_api/spawnUri_A01_t03: Fail # TODO(vm-team): Please triage this failure.
 LibTest/isolate/isolate_api/spawnUri_A01_t04: Fail # TODO(vm-team): Please triage this failure.
+LibTest/math/Random/nextDouble_A01_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/math/parseDouble_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/math/pow_A01_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/math/pow_A11_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/math/pow_A13_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/math/sin_A01_t01: Fail # TODO(vm-team): Please triage this failure.
 
-# Failures related to assert being a reserved word now. co19 issue 218.
-Language/10_Expressions/28_Identifier_Reference_A04_t07: Fail, OK
+LibTest/isolate/isolate_api/port_A01_t01: Skip # Times out.
 
-# negate is no longer a built-in identifier, co19 issue 260
-Language/10_Expressions/28_Identifier_Reference_A07_t09: Fail, OK # co19 issue 260
+Language/06_Functions/1_Function_Declaration_A02_t03: Fail # issue 6058
+Language/06_Functions/1_Function_Declaration_A03_t03: Fail # issue 6058
+Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t01: Fail # issue 6085
+Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t02: Fail # issue 6085
+Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t03: Fail # issue 6085
+
+LibTest/core/Map/putIfAbsent_A01_t08: Fail, OK # co19 issue 276
+LibTest/core/Map/putIfAbsent_A01_t06: Fail, OK # co19 issue 276
+
+LibTest/core/EmptyQueueException/EmptyQueueException_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/EmptyQueueException/toString_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/List/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/NoMoreElementsException/NoMoreElementsException_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/NoMoreElementsException/toString_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/iterator_next_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeFirst_A02_t01: Fail, OK # co19 issue 288
+LibTest/core/Queue/removeLast_A02_t01: Fail, OK # co19 issue 288
+
 
 [ $compiler == none && $runtime == vm && $checked ]
-Language/07_Classes/07_Classes_A03_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A03_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A04_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A13_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Imports_A03_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A03_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/05_If_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/09_Switch_A05_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Statements/15_Assert_A04_t04: Fail # TODO(vm-team): Please triage this failure.
 Language/14_Types/7_Type_Void_A04_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/14_Types/7_Type_Void_A04_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/14_Types/7_Type_Void_A04_t04: Fail # TODO(vm-team): Please triage this failure.
 Language/14_Types/7_Type_Void_A04_t05: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/Map/putIfAbsent_A01_t07: Fail # TODO(vm-team): Please triage this failure.
+
+Language/14_Types/7_Type_Void_A04_t02: Fail, OK # co19 issue 158
+Language/14_Types/7_Type_Void_A04_t03: Fail, OK # co19 issue 158
+Language/14_Types/7_Type_Void_A04_t04: Fail, OK # co19 issue 158
+Language/14_Types/7_Type_Void_A04_t05: Fail, OK # co19 issue 158
 
 Language/10_Expressions/11_Instance_Creation_A05_t02: Fail # co19 issue 234
-Language/13_Libraries_and_Scripts/2_Imports_A03_t11: Fail # Issue 5736
-Language/13_Libraries_and_Scripts/2_Imports_A03_t21: Fail # Issue 5736
-
 
 [ $compiler == none && $runtime == vm && $unchecked ]
-Language/10_Expressions/11_Instance_Creation/1_New_A07_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A11_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/11_Instance_Creation/1_New_A12_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/20_Logical_Boolean_Expressions_A01_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A05_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A05_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A05_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/30_Type_Cast_A05_t05: Fail # TODO(vm-team): Please triage this failure.
+Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail # TODO(vm-team): Please triage this failure.
 
 
 [ $compiler == none && $runtime == vm ]
@@ -283,23 +259,6 @@
 Language/10_Expressions/01_Constants_A16_t02: Fail
 
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail # issue 392, potentially constant expression analysis
-Language/10_Expressions/01_Constants_A16_t03: Fail # issue 392
-
-# These tests fail after the deprecation of the corelib
-# Math object in favor of the dart:math library.
-# issue co19 - ???
-Language/05_Variables/05_Variables_A03_t03: Fail # Missing compile-time error on assignment to final variable
-Language/05_Variables/05_Variables_A03_t07: Fail # Missing compile-time error on assignment to final variable
-Language/05_Variables/05_Variables_A03_t10: Fail # Missing compile-time error on assignment to final variable
-LibTest/core/Math/random_A01_t01: Fail, OK
-LibTest/core/Math/log_A01_t01: Fail, OK
-LibTest/core/Math/atan2_A01_t01: Fail, OK
-LibTest/core/Math/sqrt_A01_t01: Fail, OK
-
-# Rename "BadNumberFormatException" to "FormatException"
-# TODO(rnystrom): These can be enabled when
-# http://code.google.com/p/co19/issues/detail?id=167 is fixed.
-LibTest/core/Math/parseDouble_A02_t01: Fail
 
 Language/10_Expressions/01_Constants_A17_t03: Crash # issue 1681 (recursion in compile-time constant expression)
 Language/10_Expressions/01_Constants_A16_t02: Crash, Pass # Should result in OOM
@@ -328,19 +287,10 @@
 Language/10_Expressions/07_Maps_A01_t01: Skip # co19 issue 91: map literals illegal at statement beginning.
 
 Language/10_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t01: Fail # issue 1604.
-Language/10_Expressions/21_Bitwise_Expressions_A01_t01: Fail # issue 1286 (function literals vs. function statements)
-Language/10_Expressions/22_Equality_A01_t01: Fail # issue 2033 (super call of !=, === etc)
-Language/10_Expressions/21_Relational_Expressions_A01_t01: Fail # issue 1286 (function literals vs. function statements)
-Language/10_Expressions/22_Shift_A01_t01: Fail # issue 1286 (function literals vs. function statements)
-Language/10_Expressions/25_Unary_Expressions_A01_t01: Fail # issue 1288 (unary super operator call)
-Language/10_Expressions/25_Unary_Expressions_A01_t10: Fail # issue 2037 (super.x is assignable)
-Language/10_Expressions/25_Unary_Expressions_A06_t01: Fail # issue 1288 (unary super operator call)
-Language/10_Expressions/25_Unary_Expressions_A08_t01: Fail # issue 1288 (unary super operator call)
-Language/10_Expressions/26_Postfix_Expressions_A01_t01: Fail # co19 issue 91: map literals illegal at statement beginning.
-Language/10_Expressions/27_Assignable_Expressions_A01_t26: Fail # issue 1286 (function literals vs. function statements)
-Language/10_Expressions/27_Assignable_Expressions_A01_t27: Fail # co19 issue 91: map literals illegal at statement beginning.
-Language/11_Statements/09_Try_A05_t06: Fail # issue 430
-LibTest/core/Math/parseDouble_A02_t01: Fail # issue 1929
+Language/10_Expressions/27_Unary_Expressions_A01_t01: Fail # issue 1288 (unary super operator call)
+Language/10_Expressions/27_Unary_Expressions_A01_t10: Fail # issue 2037 (super.x is assignable)
+Language/10_Expressions/27_Unary_Expressions_A08_t01: Fail # issue 1288 (unary super operator call)
+Language/10_Expressions/28_Postfix_Expressions_A01_t01: Fail # co19 issue 91: map literals illegal at statement beginning.
 
 LibTest/core/List/every_A03_t01: Skip # Promise removed (co19 issue #79)
 LibTest/core/List/filter_A03_t01: Skip # Promise removed (co19 issue #79)
@@ -360,11 +310,6 @@
 LibTest/core/Date/Date.fromString_A03_t01: Fail # Issue co19 - 121
 LibTest/core/Expect/throws_A02_t01: Fail # Issue co19 - 42
 LibTest/core/Match/operator_subscript_A01_t01: Fail
-LibTest/core/Math/pow_A01_t01: Fail  # Issue co19 - 44
-LibTest/core/Math/pow_A11_t01: Fail  # Issue 449
-LibTest/core/Math/pow_A13_t01: Fail  # Issue 449
-LibTest/core/Math/max_A01_t03: Fail  # Issue co19 - 157
-LibTest/core/Math/min_A01_t03: Fail  # Issue co19 - 157
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Fail
 LibTest/core/RegExp/firstMatch_A01_t01: Fail
@@ -372,32 +317,33 @@
 LibTest/core/int/toRadixString_A01_t01: Fail # Issue 461
 
 [ $compiler == none && $runtime == vm ]
-LibTest/core/Math/acos_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/asin_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/atan_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/cos_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/exp_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/sin_A01_t01: Fail, OK # Issue co19 - 44
-LibTest/core/Math/tan_A01_t01: Fail, OK  # Issue co19 - 44
+LibTest/math/sin_A01_t01: Fail, OK # Issue co19 - 44
+
+
+[ $compiler == none && $runtime == vm && $system == macos ]
+LibTest/math/exp_A01_t01: Fail, OK # Issue co19 - 44
+LibTest/math/acos_A01_t01: Fail, OK # Issue co19 - 44
+LibTest/math/asin_A01_t01: Fail, OK # Issue co19 - 44
+LibTest/math/atan_A01_t01: Fail, OK # Issue co19 - 44
+LibTest/math/tan_A01_t01: Fail, OK  # Issue co19 - 44
 
 [ $compiler == none && $runtime == vm && $system == linux ]
-LibTest/core/Math/exp_A01_t01: Fail
+LibTest/math/exp_A01_t01: Fail
 
 [ $compiler == none && $runtime == vm && $system == linux && $arch == ia32 ]
-LibTest/core/Math/sin_A01_t01: Fail
-LibTest/core/Math/tan_A01_t01: Fail
+LibTest/math/sin_A01_t01: Fail
+LibTest/math/tan_A01_t01: Fail
 
 [ $compiler == none && $runtime == vm && $arch == x64 && $mode == debug ]
 LibTest/core/Map/Map_class_A01_t04: Skip # Timeout
-LibTest/core/Queue/iterator_hasNext_A01_t01: Skip # Timeout
 
 [ $compiler == none && $runtime == vm && $system == windows ]
-LibTest/core/Math/atan2_A01_t03: Fail # http://dartbug.com/5407
+LibTest/math/atan2_A01_t03: Fail # http://dartbug.com/5407
 LibTest/core/double/operator_remainder_A01_t04: Fail # http://dartbug.com/5407
 LibTest/core/double/remainder_A01_t04: Fail # http://dartbug.com/5407
 LibTest/core/double/round_A01_t01: Fail # http://dartbug.com/5407
-LibTest/core/int/operator_remainder_A01_t02: Fail # http://dartbug.com/5407
-LibTest/core/int/remainder_A01_t02: Fail # http://dartbug.com/5407
+LibTest/core/int/operator_remainder_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/int/remainder_A01_t02: Fail # TODO(vm-team): Please triage this failure.
 
 
 [ $compiler == none && $runtime == vm ]
@@ -407,30 +353,84 @@
 LibTest/core/Date/toString_A02_t01: Fail, OK
 LibTest/core/Date/year_A01_t01: Fail, OK
 
+LibTest/core/String/charCodes_A01_t01: Fail, OK # co19 issue 289
+
+LibTest/isolate/SendPort/send_A02_t02: Fail, OK # co19 issue 293
+LibTest/isolate/SendPort/send_A02_t03: Fail, OK # co19 issue 293
+LibTest/isolate/SendPort/send_A02_t04: Fail, OK # co19 issue 293
+LibTest/core/LinkedHashMap/LinkedHashMap_class_A01_t01: Fail, OK # co19 issue 293
+LibTest/core/Map/getKeys_A01_t01: Fail, OK # co19 issue 293
+LibTest/core/Map/getKeys_A01_t02: Fail, OK # co19 issue 293
+LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 293
+LibTest/core/Map/getValues_A01_t01: Fail, OK # co19 issue 293
+
+LibTest/core/Stopwatch/Stopwatch_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t03: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsed_A01_t02: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsedInUs_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/elapsedInMs_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t02: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/start_A01_t03: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/stop_A01_t01: Fail, OK # co19 issue 297
+LibTest/core/Stopwatch/frequency_A01_t01: Fail, OK # co19 issue 297
+
+
+LibTest/core/Match/end_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/group_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/groupCount_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/operator_subscript_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/Match/start_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/allMatches_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/firstMatch_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t02: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t03: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A06_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_AtomEscape_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Disjunction_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A04_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A05_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A06_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A01_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: Fail, OK # co19 issue 294
+
+LibTest/core/Queue/filter_A01_t04: Fail, OK # co19 issue 291
+LibTest/core/Queue/first_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/removeFirst_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/addFirst_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/removeLast_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/add_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/addLast_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/Queue/last_A01_t01: Fail, OK # co19 issue 291
+LibTest/core/List/last_A02_t01: Fail, OK # co19 issue 291
+LibTest/core/List/last_A01_t01: Fail, OK # co19 issue 291
+
+Language/10_Expressions/07_Maps_A07_t03: Fail, OK # co19 issue 287
+Language/10_Expressions/07_Maps_A04_t02: Fail, OK # co19 issue 287
+LibTest/core/Queue/filter_A01_t04: Fail, OK # co19 issue 287
+LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 287
+
 
 [ $compiler == none && $runtime == vm ]
-Language/11_Statements/09_Try_A01_t01: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A02_t03: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A04_t01: Fail, OK # co19 issue 194
-Language/11_Statements/09_Try_A05_t03: Fail, OK # co19 issue 194
-LibTest/core/Expect/equals_A02_t01: Fail, OK # co19 issue 194
-LibTest/core/List/removeRange_A06_t01: Fail, OK # co19 issue 194
-LibTest/core/Set/addAll_A01_t04: Fail, OK # co19 issue 194
-LibTest/core/Set/containsAll_A01_t03: Fail, OK # co19 issue 194
-LibTest/core/Set/contains_A01_t03: Fail, OK # co19 issue 194
-LibTest/core/Set/removeAll_A01_t03: Fail, OK # co19 issue 194
-LibTest/core/Set/remove_A01_t04: Fail, OK # co19 issue 194
-
 LibTest/core/String/contains_A01_t03: Skip # Times out.
 
-Language/07_Classes/6_Constructors/2_Factories_A05_t02: Fail
 LibTest/core/String/contains_A01_t02: Fail
-LibTest/core/String/replaceFirst_A02_t01: Fail # co19 issue 103
-LibTest/core/String/replaceAll_A02_t01: Fail # co19 issue 103
-
-
-Language/03_Overview/2_Privacy_A01_t11: Fail # Related to issue 978
-Language/11_Statements/11_Labels_A01_t03: Fail # Issue 2238
 
 
 [ $compiler == none && $runtime == vm && $arch == ia32 ]
@@ -451,8 +451,6 @@
 Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t03: Fail # Issue 1604, exception should be NoSuchMethodException instead of ObjectNotClosureException
 Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A05_t01: Fail # Issue 1604, exception should be NoSuchMethodException instead of ObjectNotClosureException
 Language/10_Expressions/15_Method_Invocation/3_Static_Invocation_A06_t02: Fail # Issue 1604, exception should be NoSuchMethodException instead of ObjectNotClosureException
-Language/10_Expressions/28_Identifier_Reference_A06_t15: Fail
-Language/11_Statements/08_Switch_A02_t01: Fail
 LibTest/core/Future/handleException_A01_t07: Fail
 LibTest/core/Future/then_A01_t05: Fail
 LibTest/isolate/ReceivePort/receive_A01_t02: Fail
@@ -460,10 +458,6 @@
 LibTest/isolate/isolate_api/spawnUri_A01_t04: Crash
 
 
-# 'case' or '}' expected
-Language/11_Statements/08_Switch_A01_t01: Fail
-
-
 # class '?' overrides function '?' of super class '?' with incompatible parameters
 Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: Fail
 Language/10_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: Fail
@@ -481,44 +475,23 @@
 Language/10_Expressions/15_Method_Invocation/4_Super_Invocation_A08_t02: Fail # co19 issue 251 or issue 5732
 
 
-# function '?' of class '?' conflicts with getter 'f' of super class '?'
-Language/07_Classes/1_Instance_Methods_A05_t02: Fail
-
-
-# function '?' of class '?' conflicts with setter 'f' of super class '?'
-Language/07_Classes/1_Instance_Methods_A05_t03: Fail
-
-
 # initializer must be a compile time constant
-Language/10_Expressions/28_Identifier_Reference_A05_t09: Fail
+Language/10_Expressions/30_Identifier_Reference_A05_t09: Fail
 
 
 # invalid operator overloading
 Language/07_Classes/1_Instance_Methods/2_Operators_A02_t01: Fail
-Language/10_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t01: Fail
-Language/10_Expressions/22_Equality_A02_t03: Fail
-Language/10_Expressions/22_Equality_A03_t01: Fail
-Language/10_Expressions/22_Equality_A03_t02: Fail
-Language/10_Expressions/22_Equality_A03_t03: Fail
 
 
 # parameter name or type expected
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A15_t07: Fail
 
 
-# using 'x' in this context is invalid
-Language/11_Statements/05_For_A01_t11: Fail
-
-
-[ $compiler == none && $runtime == vm ]
-LibTest/isolate/isolate_api/spawnFunction_A02_t01: Fail
-
-
 [ $compiler == none && $runtime == vm && $checked ]
 Language/03_Overview/1_Scoping_A02_t30: Fail
 
 
-[ $compiler == none && $runtime == vm && $mode == debug && $unchecked ]
+[ $compiler == none && $runtime == vm && $mode == debug ]
 LibTest/isolate/isolate_api/spawnFunction_A02_t01: Crash
 
 [ $compiler == none && $arch == simarm ]
diff --git a/tests/compiler/dart2js/begin_end_token_test.dart b/tests/compiler/dart2js/begin_end_token_test.dart
index 9f2b423..2123982 100644
--- a/tests/compiler/dart2js/begin_end_token_test.dart
+++ b/tests/compiler/dart2js/begin_end_token_test.dart
@@ -144,7 +144,7 @@
   testNode(sendSet.receiver, "a", text);
   testNode(sendSet.selector, "b", text);
   testNode(sendSet.assignmentOperator, "++", text);
-  Expect.isTrue(sendSet.arguments.isEmpty());
+  Expect.isTrue(sendSet.arguments.isEmpty);
 
   text = "++a[b]";
   // TODO(johnniwinther): SendSet generates the wrong end token in the following
diff --git a/tests/compiler/dart2js/code_motion_test.dart b/tests/compiler/dart2js/code_motion_test.dart
index 444de81..568da95 100644
--- a/tests/compiler/dart2js/code_motion_test.dart
+++ b/tests/compiler/dart2js/code_motion_test.dart
@@ -21,7 +21,7 @@
   String generated = compile(TEST_ONE, entry: 'foo');
   RegExp regexp = const RegExp('a \\+ b');
   Iterator matches = regexp.allMatches(generated).iterator();
-  Expect.isTrue(matches.hasNext());
+  Expect.isTrue(matches.hasNext);
   matches.next();
-  Expect.isFalse(matches.hasNext());
+  Expect.isFalse(matches.hasNext);
 }
diff --git a/tests/compiler/dart2js/compiler_helper.dart b/tests/compiler/dart2js/compiler_helper.dart
index 0caec0e..96fcc3e 100644
--- a/tests/compiler/dart2js/compiler_helper.dart
+++ b/tests/compiler/dart2js/compiler_helper.dart
@@ -77,10 +77,10 @@
 
 bool checkNumberOfMatches(Iterator it, int nb) {
   for (int i = 0; i < nb; i++) {
-    Expect.isTrue(it.hasNext(), "Found less than $nb matches");
+    Expect.isTrue(it.hasNext, "Found less than $nb matches");
     it.next();
   }
-  Expect.isFalse(it.hasNext(), "Found more than $nb matches");
+  Expect.isFalse(it.hasNext, "Found more than $nb matches");
 }
 
 void compileAndMatch(String code, String entry, RegExp regexp) {
@@ -95,7 +95,7 @@
                  '"$generated" has a match in /$regexp/');
 }
 
-int length(Link link) => link.isEmpty() ? 0 : length(link.tail) + 1;
+int length(Link link) => link.isEmpty ? 0 : length(link.tail) + 1;
 
 // Does a compile and then a match where every 'x' is replaced by something
 // that matches any variable, and every space is optional.
diff --git a/tests/compiler/dart2js/cpa_inference_test.dart b/tests/compiler/dart2js/cpa_inference_test.dart
index db593b9..81046f2 100644
--- a/tests/compiler/dart2js/cpa_inference_test.dart
+++ b/tests/compiler/dart2js/cpa_inference_test.dart
@@ -45,6 +45,7 @@
 
   BaseType int;
   BaseType double;
+  BaseType num;
   BaseType bool;
   BaseType string;
   BaseType list;
@@ -55,6 +56,7 @@
     inferrer = compiler.typesTask.concreteTypesInferrer;
     int = inferrer.baseTypes.intBaseType;
     double = inferrer.baseTypes.doubleBaseType;
+    num = inferrer.baseTypes.numBaseType;
     bool = inferrer.baseTypes.boolBaseType;
     string = inferrer.baseTypes.stringBaseType;
     list = inferrer.baseTypes.listBaseType;
@@ -120,9 +122,26 @@
   }
 }
 
+const String CORELIB = r'''
+  print(var obj) {}
+  abstract class num { operator +(x); operator *(x); operator -(x); }
+  abstract class int extends num { }
+  abstract class double extends num { }
+  class bool {}
+  class String {}
+  class Object {}
+  class Function {}
+  abstract class List {}
+  abstract class Map {}
+  class Closure {}
+  class Null {}
+  class Dynamic_ {}
+  bool identical(Object a, Object b) {}''';
+
 AnalysisResult analyze(String code) {
   Uri uri = new Uri.fromComponents(scheme: 'source');
-  MockCompiler compiler = new MockCompiler(enableConcreteTypeInference: true);
+  MockCompiler compiler = new MockCompiler(coreSource: CORELIB,
+                                           enableConcreteTypeInference: true);
   compiler.sourceFiles[uri.toString()] = new SourceFile(uri.toString(), code);
   compiler.runCompiler(uri);
   return new AnalysisResult(compiler);
@@ -193,8 +212,30 @@
       class B { f() => new C(); }
       class C { f() => new A(); }
       main() {
+        var bar = null;
         var foo = new A();
-        while(true) {
+        while(bar = 42) {
+          foo = foo.f();
+        }
+        foo; bar;
+      }
+      """;
+  AnalysisResult result = analyze(source);
+  result.checkNodeHasType(
+      'foo',
+      [result.base('A'), result.base('B'), result.base('C')]);
+  // Check that the condition is evaluated.
+  result.checkNodeHasType('bar', [result.int]);
+}
+
+testFor1() {
+  final String source = r"""
+      class A { f() => new B(); }
+      class B { f() => new C(); }
+      class C { f() => new A(); }
+      main() {
+        var foo = new A();
+        for(;;) {
           foo = foo.f();
         }
         foo;
@@ -206,6 +247,25 @@
       [result.base('A'), result.base('B'), result.base('C')]);
 }
 
+testFor2() {
+  final String source = r"""
+      class A { f() => new B(); test() => true; }
+      class B { f() => new A(); test() => true; }
+      main() {
+        var bar = null;
+        var foo = new A();
+        for(var i = new A(); bar = 42; i = i.f()) {
+           foo = i;
+        }
+        foo; bar;
+      }
+      """;
+  AnalysisResult result = analyze(source);
+  result.checkNodeHasType('foo', [result.base('A'), result.base('B')]);
+  // Check that the condition is evaluated.
+  result.checkNodeHasType('bar', [result.int]);
+}
+
 testNonRecusiveFunction() {
   final String source = r"""
       f(x, y) => true ? x : y;
@@ -237,6 +297,39 @@
   result.checkNodeHasType('foo', [result.int, result.string]);
 }
 
+testSendToThis1() {
+  final String source = r"""
+      class A {
+        A();
+        f() => g();
+        g() => 42;
+      }
+      main() {
+        var foo = new A().f();
+        foo;
+      }
+      """;
+  AnalysisResult result = analyze(source);
+  result.checkNodeHasType('foo', [result.int]);
+}
+
+testSendToThis2() {
+  final String source = r"""
+      class A {
+        foo() => this;
+      }
+      class B extends A {
+        bar() => foo();
+      }
+      main() {
+        var x = new B().bar();
+        x;
+      }
+      """;
+  AnalysisResult result = analyze(source);
+  result.checkNodeHasType('x', [result.base('B')]);
+}
+
 testConstructor() {
   final String source = r"""
       class A {
@@ -259,7 +352,7 @@
       class A {
         var x;
         A(this.x);
-        get y() => x;
+        get y => x;
       }
       main() {
         var a = new A(42);
@@ -374,15 +467,72 @@
   result.checkNodeHasType('y', [result.nullType]);
 }
 
+testArithmeticOperators() {
+  String source(op) {
+    return """
+        main() {
+          var a = 1 $op 2;
+          var b = 1 $op 2.0;
+          var c = 1.0 $op 2;
+          var d = 1.0 $op 2.0;
+          var e = (1 $op 2.0) $op 1;
+          var f = 1 $op (1 $op 2.0);
+          var g = (1 $op 2.0) $op 1.0;
+          var h = 1.0 $op (1 $op 2);
+          var i = (1 $op 2) $op 1;
+          var j = 1 $op (1 $op 2);
+          var k = (1.0 $op 2.0) $op 1.0;
+          var l = 1.0 $op (1.0 $op 2.0);
+          a; b; c; d; e; f; g; h; i; j; k; l;
+        }""";
+  }
+  for (String op in ['+', '*', '-']) {
+    AnalysisResult result = analyze(source(op));
+    result.checkNodeHasType('a', [result.int]);
+    result.checkNodeHasType('b', [result.num]);
+    result.checkNodeHasType('c', [result.num]);
+    result.checkNodeHasType('d', [result.double]);
+    result.checkNodeHasType('e', [result.num]);
+    result.checkNodeHasType('f', [result.num]);
+    result.checkNodeHasType('g', [result.num]);
+    result.checkNodeHasType('h', [result.num]);
+    result.checkNodeHasType('i', [result.int]);
+    result.checkNodeHasType('j', [result.int]);
+    result.checkNodeHasType('k', [result.double]);
+    result.checkNodeHasType('l', [result.double]);
+  }
+}
+
+testOperators() {
+  final String source = r"""
+      class A {
+        operator <(x) => 42;
+        operator <<(x) => "a";
+      }
+      main() {
+        var x = new A() < "foo";
+        var y = new A() << "foo";
+        x; y;
+      }
+      """;
+  AnalysisResult result = analyze(source);
+  result.checkNodeHasType('x', [result.int]);
+  result.checkNodeHasType('y', [result.string]);
+}
+
 void main() {
   testLiterals();
   testRedefinition();
   testIfThenElse();
   testTernaryIf();
   testWhile();
+  testFor1();
+  testFor2();
   testNonRecusiveFunction();
   testRecusiveFunction();
   testMutuallyRecusiveFunction();
+  testSendToThis1();
+  testSendToThis2();
   testConstructor();
   testGetters();
   testSetters();
@@ -391,4 +541,6 @@
   testMapLiterals();
   testReturn();
   // testNoReturn(); // right now we infer the empty type instead of null
+  testArithmeticOperators();
+  testOperators();
 }
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index 3c959f8..b94725f 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -10,5 +10,5 @@
 # Minification of locals temporarily disabled due to issue 5808
 minify_many_locals_test: Fail
 
-[ $runtime == d8 || $runtime == drt || $runtime == dartium || $runtime == ff || $runtime == firefox || $runtime == chrome || $runtime == safari || $runtime == ie9 || $runtime == opera ]
+[ $jscl || $runtime == drt || $runtime == dartium || $runtime == ff || $runtime == firefox || $runtime == chrome || $runtime == safari || $runtime == ie9 || $runtime == opera ]
 *: Skip # dart2js uses #import('dart:io'); and it is not self-hosted (yet).
diff --git a/tests/compiler/dart2js/dart_backend_test.dart b/tests/compiler/dart2js/dart_backend_test.dart
index 761f7f9..7e9c960 100644
--- a/tests/compiler/dart2js/dart_backend_test.dart
+++ b/tests/compiler/dart2js/dart_backend_test.dart
@@ -29,6 +29,7 @@
 class Math {
   static double parseDouble(String s) => 1.0;
 }
+print(x) {}
 ''';
 
 const ioLib = r'''
@@ -41,12 +42,12 @@
 const htmlLib = r'''
 #library('html');
 Window __window;
-Window get window() => __window;
+Window get window => __window;
 abstract class Window {
-  abstract Navigator get navigator;
+  Navigator get navigator;
 }
 abstract class Navigator {
-  abstract String get userAgent;
+  String get userAgent;
 }
 ''';
 
@@ -774,8 +775,25 @@
 }
 ''';
   var expectedResult = 'import "dart:html" as p;'
-      'class A{static String get userAgent=>p.window.navigator.userAgent;}'
-      'main(){A.userAgent;}';
+      'class A{static String get p_userAgent=>p.window.navigator.userAgent;}'
+      'main(){A.p_userAgent;}';
+  testDart2Dart(src,
+      continuation: (String result) { Expect.equals(expectedResult, result); });
+}
+
+testConflictsWithCoreLib() {
+  var src = '''
+import 'dart:core' as fisk;
+
+print(x) { throw 'fisk'; }
+
+main() {
+  fisk.print('corelib');
+  print('local');
+}
+''';
+  var expectedResult = "p_print(x){throw 'fisk';}"
+      "main(){print('corelib');p_print('local');}";
   testDart2Dart(src,
       continuation: (String result) { Expect.equals(expectedResult, result); });
 }
@@ -813,4 +831,5 @@
   testTypeVariablesInDifferentLibraries();
   testDeclarationTypePlaceholders();
   testPlatformLibraryMemberNamesAreFixed();
+  testConflictsWithCoreLib();
 }
diff --git a/tests/compiler/dart2js/erroneous_element_test.dart b/tests/compiler/dart2js/erroneous_element_test.dart
new file mode 100644
index 0000000..d616763
--- /dev/null
+++ b/tests/compiler/dart2js/erroneous_element_test.dart
@@ -0,0 +1,13 @@
+// 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.
+
+import '../../../lib/compiler/implementation/elements/elements.dart';
+import '../../../lib/compiler/implementation/dart2jslib.dart' show MessageKind;
+import 'parser_helper.dart';
+
+void main() {
+  ErroneousElement e = new ErroneousElement(MessageKind.GENERIC, ['error'],
+                                            buildSourceString('foo'), null);
+  Expect.stringEquals('<foo: error>', '$e');
+}
diff --git a/tests/compiler/dart2js/gvn_test.dart b/tests/compiler/dart2js/gvn_test.dart
index 664ac2b..ec06ea6 100644
--- a/tests/compiler/dart2js/gvn_test.dart
+++ b/tests/compiler/dart2js/gvn_test.dart
@@ -17,7 +17,7 @@
   String generated = compile(TEST_ONE, entry: 'foo');
   RegExp regexp = const RegExp(r"1 \+ [a-z]+");
   Iterator matches = regexp.allMatches(generated).iterator();
-  Expect.isTrue(matches.hasNext());
+  Expect.isTrue(matches.hasNext);
   matches.next();
-  Expect.isFalse(matches.hasNext());
+  Expect.isFalse(matches.hasNext);
 }
diff --git a/tests/compiler/dart2js/identity_test.dart b/tests/compiler/dart2js/identity_test.dart
index 40d6a05..348c1bf 100644
--- a/tests/compiler/dart2js/identity_test.dart
+++ b/tests/compiler/dart2js/identity_test.dart
@@ -19,11 +19,11 @@
   // Check that no boolify code is generated.
   RegExp regexp = const RegExp("=== true");
   Iterator matches = regexp.allMatches(generated).iterator();
-  Expect.isFalse(matches.hasNext());
+  Expect.isFalse(matches.hasNext);
 
   regexp = const RegExp("===");
   matches = regexp.allMatches(generated).iterator();
-  Expect.isTrue(matches.hasNext());
+  Expect.isTrue(matches.hasNext);
   matches.next();
-  Expect.isFalse(matches.hasNext());
+  Expect.isFalse(matches.hasNext);
 }
diff --git a/tests/compiler/dart2js/link_test.dart b/tests/compiler/dart2js/link_test.dart
index f108fd8..a74073a 100644
--- a/tests/compiler/dart2js/link_test.dart
+++ b/tests/compiler/dart2js/link_test.dart
@@ -26,7 +26,7 @@
 }
 
 test(Link link, List list) {
-  Expect.equals(list.isEmpty(), link.isEmpty());
+  Expect.equals(list.isEmpty, link.isEmpty);
   int i = 0;
   for (var element in link.toList()) {
     Expect.equals(list[i++], element);
@@ -38,9 +38,9 @@
   }
   Expect.equals(list.length, i);
   i = 0;
-  for (; !link.isEmpty(); link = link.tail) {
+  for (; !link.isEmpty; link = link.tail) {
     Expect.equals(list[i++], link.head);
   }
   Expect.equals(list.length, i);
-  Expect.isTrue(link.isEmpty());
+  Expect.isTrue(link.isEmpty);
 }
diff --git a/tests/compiler/dart2js/mirrors_test.dart b/tests/compiler/dart2js/mirrors_test.dart
index 5e6d398..409557b 100644
--- a/tests/compiler/dart2js/mirrors_test.dart
+++ b/tests/compiler/dart2js/mirrors_test.dart
@@ -46,7 +46,7 @@
 
   var libraries = mirrors.libraries;
   Expect.isNotNull(libraries, "No libraries map returned");
-  Expect.isFalse(libraries.isEmpty(), "Empty libraries map returned");
+  Expect.isFalse(libraries.isEmpty, "Empty libraries map returned");
 
   var helperLibrary = libraries["mirrors_helper"];
   Expect.isNotNull(helperLibrary, "Library 'mirrors_helper' not found");
@@ -57,7 +57,7 @@
 
   var types = helperLibrary.types;
   Expect.isNotNull(types, "No types map returned");
-  Expect.isFalse(types.isEmpty(), "Empty types map returned");
+  Expect.isFalse(types.isEmpty, "Empty types map returned");
 
   testFoo(mirrors, helperLibrary, types);
   testBar(mirrors, helperLibrary, types);
@@ -113,7 +113,7 @@
 
   var fooInterfaces = fooClass.interfaces;
   Expect.isNotNull(fooInterfaces, "Interfaces map is null");
-  Expect.isTrue(fooInterfaces.isEmpty(), "Interfaces map is not empty");
+  Expect.isTrue(fooInterfaces.isEmpty, "Interfaces map is not empty");
 
   var fooSubdeclarations = computeSubdeclarations(fooClass);
   Expect.equals(1, count(fooSubdeclarations), "Unexpected subtype count");
@@ -127,18 +127,18 @@
                 "Class has type arguments");
   var fooClassTypeVariables = fooClass.typeVariables;
   Expect.isNotNull(fooClassTypeVariables, "Type variable list is null");
-  Expect.isTrue(fooClassTypeVariables.isEmpty(),
+  Expect.isTrue(fooClassTypeVariables.isEmpty,
                 "Type variable list is not empty");
 
   Expect.isNull(fooClass.defaultType, "Class has default type");
 
   var fooClassMembers = fooClass.declaredMembers;
   Expect.isNotNull(fooClassMembers, "Declared members map is null");
-  Expect.isTrue(fooClassMembers.isEmpty(), "Declared members map is unempty");
+  Expect.isTrue(fooClassMembers.isEmpty, "Declared members map is unempty");
 
   var fooClassConstructors = fooClass.constructors;
   Expect.isNotNull(fooClassConstructors, "Constructors map is null");
-  Expect.isTrue(fooClassConstructors.isEmpty(),
+  Expect.isTrue(fooClassConstructors.isEmpty,
                 "Constructors map is unempty");
 }
 
@@ -186,7 +186,7 @@
 
   var barInterfaces = barInterface.interfaces;
   Expect.isNotNull(barInterfaces, "Interfaces map is null");
-  Expect.isTrue(barInterfaces.isEmpty(), "Interfaces map is not empty");
+  Expect.isTrue(barInterfaces.isEmpty, "Interfaces map is not empty");
 
   var barSubdeclarations = computeSubdeclarations(barInterface);
   Expect.equals(1, count(barSubdeclarations), "Unexpected subtype count");
@@ -201,7 +201,7 @@
               "Interface has type arguments");
   var barInterfaceTypeVariables = barInterface.typeVariables;
   Expect.isNotNull(barInterfaceTypeVariables, "Type variable list is null");
-  Expect.isFalse(barInterfaceTypeVariables.isEmpty(),
+  Expect.isFalse(barInterfaceTypeVariables.isEmpty,
                  "Type variable list is empty");
   Expect.equals(barInterfaceTypeVariables.length, 1,
                 "Unexpected number of type variables");
@@ -214,12 +214,12 @@
 
   var barInterfaceMembers = barInterface.declaredMembers;
   Expect.isNotNull(barInterfaceMembers, "Declared members map is null");
-  Expect.isTrue(barInterfaceMembers.isEmpty(),
+  Expect.isTrue(barInterfaceMembers.isEmpty,
                 "Declared members map is unempty");
 
   var barInterfaceConstructors = barInterface.constructors;
   Expect.isNotNull(barInterfaceConstructors, "Constructors map is null");
-  Expect.isTrue(barInterfaceConstructors.isEmpty(),
+  Expect.isTrue(barInterfaceConstructors.isEmpty,
                 "Constructors map is unempty");
 }
 
@@ -276,7 +276,7 @@
 
   var bazInterfaces = bazClass.interfaces;
   Expect.isNotNull(bazInterfaces, "Interfaces map is null");
-  Expect.isTrue(!bazInterfaces.isEmpty(), "Interfaces map is empty");
+  Expect.isTrue(!bazInterfaces.isEmpty, "Interfaces map is empty");
   for (var bazInterface in bazInterfaces) {
     Expect.isTrue(containsType(bazClass,
                                computeSubdeclarations(objectType)),
@@ -544,11 +544,11 @@
   Expect.isNull(funcTypedef.superclass, "Non-null superclass on typedef");
   Expect.isNotNull(funcTypedef.interfaces,
                    "Null interfaces map on typedef");
-  Expect.isTrue(funcTypedef.interfaces.isEmpty(),
+  Expect.isTrue(funcTypedef.interfaces.isEmpty,
                 "Non-empty interfaces map on typedef");
   Expect.isNotNull(funcTypedef.declaredMembers,
                    "Declared members map is null on type def");
-  Expect.isTrue(funcTypedef.declaredMembers.isEmpty(),
+  Expect.isTrue(funcTypedef.declaredMembers.isEmpty,
                 "Non-empty declared members map on typedef");
 
   // TODO(johnniwinther): Returned typedef should not be the declaration:
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index d2efbe0..0a26a09 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -56,12 +56,12 @@
 
 const String DEFAULT_CORELIB = r'''
   print(var obj) {}
-  abstract class int extends num {}
-  abstract class double extends num {}
+  abstract class num {}
+  abstract class int extends num { }
+  abstract class double extends num { }
   class bool {}
   class String {}
   class Object {}
-  abstract class num {}
   class Function {}
   interface List default ListImplementation { List([length]);}
   class ListImplementation { factory List([length]) => null; }
@@ -97,6 +97,10 @@
 
     mainApp = mockLibrary(this, "");
     initializeSpecialClasses();
+    // We need to make sure the Object class is resolved. When registering a
+    // dynamic invocation the ArgumentTypesRegistry eventually iterates over
+    // the interfaces of the Object class which would be 'null' if the class
+    // wasn't resolved.
     objectClass.ensureResolved(this);
   }
 
@@ -109,7 +113,7 @@
     var script = new Script(uri, new MockFile(source));
     var library = new LibraryElement(script);
     parseScript(source, library);
-    library.setExports(library.localScope.getValues());
+    library.setExports(library.localScope.values);
     return library;
   }
 
@@ -138,7 +142,7 @@
     print(message);
   }
 
-  bool get compilationFailed => !errors.isEmpty();
+  bool get compilationFailed => !errors.isEmpty;
 
   void clearWarnings() {
     warnings = [];
@@ -154,19 +158,22 @@
   }
 
   TreeElementMapping resolveNodeStatement(Node tree, Element element) {
-    ResolverVisitor visitor = new ResolverVisitor(this, element);
-    if (visitor.scope is TopScope) {
+    ResolverVisitor visitor =
+        new ResolverVisitor(this, element, new CollectingTreeElements(element));
+    if (visitor.scope is LibraryScope) {
       visitor.scope = new MethodScope(visitor.scope, element);
     }
     visitor.visit(tree);
-    visitor.scope = new TopScope(element.getLibrary());
+    visitor.scope = new LibraryScope(element.getLibrary());
     return visitor.mapping;
   }
 
   resolverVisitor() {
     Element mockElement =
         new Element(buildSourceString(''), ElementKind.FUNCTION, mainApp);
-    ResolverVisitor visitor = new ResolverVisitor(this, mockElement);
+    ResolverVisitor visitor =
+        new ResolverVisitor(this, mockElement,
+                            new CollectingTreeElements(mockElement));
     visitor.scope = new MethodScope(visitor.scope, mockElement);
     return visitor;
   }
@@ -202,19 +209,19 @@
   var fail = (message) => Expect.fail('$text: $message');
   Iterator<MessageKind> expected = expectedWarnings.iterator();
   Iterator<WarningMessage> found = foundWarnings.iterator();
-  while (expected.hasNext() && found.hasNext()) {
+  while (expected.hasNext && found.hasNext) {
     Expect.equals(expected.next(), found.next().message.kind);
   }
-  if (expected.hasNext()) {
+  if (expected.hasNext) {
     do {
       print('Expected warning "${expected.next()}" did not occur');
-    } while (expected.hasNext());
+    } while (expected.hasNext);
     fail('Too few warnings');
   }
-  if (found.hasNext()) {
+  if (found.hasNext) {
     do {
       print('Additional warning "${found.next()}"');
-    } while (found.hasNext());
+    } while (found.hasNext);
     fail('Too many warnings');
   }
 }
@@ -234,3 +241,19 @@
   importLibrary(library, compiler.coreLibrary, compiler);
   return library;
 }
+
+class CollectingTreeElements extends TreeElementMapping {
+  final Map<Node, Element> map = new LinkedHashMap<Node, Element>();
+
+  CollectingTreeElements(Element currentElement) : super(currentElement);
+
+  operator []=(Node node, Element element) {
+    map[node] = element;
+  }
+
+  operator [](Node node) => map[node];
+
+  void remove(Node node) {
+    map.remove(node);
+  }
+}
diff --git a/tests/compiler/dart2js/parser_helper.dart b/tests/compiler/dart2js/parser_helper.dart
index 99c8733..dca44ba 100644
--- a/tests/compiler/dart2js/parser_helper.dart
+++ b/tests/compiler/dart2js/parser_helper.dart
@@ -40,7 +40,7 @@
   assert(endToken.kind == EOF_TOKEN);
   Node node = listener.popNode();
   Expect.isNotNull(node);
-  Expect.isTrue(listener.nodes.isEmpty(), 'Not empty: ${listener.nodes}');
+  Expect.isTrue(listener.nodes.isEmpty, 'Not empty: ${listener.nodes}');
   return node;
 }
 
diff --git a/tests/compiler/dart2js/parser_test.dart b/tests/compiler/dart2js/parser_test.dart
index 5cff043..3847f48 100644
--- a/tests/compiler/dart2js/parser_test.dart
+++ b/tests/compiler/dart2js/parser_test.dart
@@ -251,7 +251,7 @@
   Expect.stringEquals("a", sendSet.receiver.toString());
   Expect.stringEquals("b", sendSet.selector.toString());
   Expect.stringEquals("++", sendSet.assignmentOperator.toString());
-  Expect.isTrue(sendSet.arguments.isEmpty());
+  Expect.isTrue(sendSet.arguments.isEmpty);
 }
 
 void testOperatorParse() {
@@ -260,7 +260,7 @@
   Expect.isNotNull(name);
   Expect.stringEquals('operator', name.receiver.source.stringValue);
   Expect.stringEquals('-', name.selector.source.stringValue);
-  Expect.isTrue(function.parameters.isEmpty());
+  Expect.isTrue(function.parameters.isEmpty);
   Expect.isNull(function.returnType);
   Expect.isNull(function.getOrSet);
 }
diff --git a/tests/compiler/dart2js/patch_test.dart b/tests/compiler/dart2js/patch_test.dart
index c7f3c8c..a727f78 100644
--- a/tests/compiler/dart2js/patch_test.dart
+++ b/tests/compiler/dart2js/patch_test.dart
@@ -112,9 +112,9 @@
   ensure(compiler, "test", compiler.coreLibrary.find, isPatched: true);
   ensure(compiler, "test", compiler.coreLibrary.patch.find, isPatch: true);
 
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isTrue(compiler.errors.isEmpty(),
+  Expect.isTrue(compiler.errors.isEmpty,
                 "Unexpected errors: ${compiler.errors}");
 }
 
@@ -141,9 +141,9 @@
   ensure(compiler, "toString", container.patch.lookupLocalMember,
          isPatch: true);
 
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isTrue(compiler.errors.isEmpty(),
+  Expect.isTrue(compiler.errors.isEmpty,
                 "Unexpected errors: ${compiler.errors}");
 }
 
@@ -173,9 +173,9 @@
          isGetter: true,
          isPatch: true);
 
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isTrue(compiler.errors.isEmpty(),
+  Expect.isTrue(compiler.errors.isEmpty,
                 "Unexpected errors: ${compiler.errors}");
 }
 
@@ -199,9 +199,9 @@
   ensure(compiler, "regular", container.lookupLocalMember);
   ensure(compiler, "regular", container.patch.lookupLocalMember);
 
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isTrue(compiler.errors.isEmpty(),
+  Expect.isTrue(compiler.errors.isEmpty,
                 "Unexpected errors: ${compiler.errors}");
 }
 
@@ -225,9 +225,9 @@
   ensure(compiler, "ghost", container.lookupLocalMember, isFound: false);
   ensure(compiler, "ghost", container.patch.lookupLocalMember);
 
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isTrue(compiler.errors.isEmpty(),
+  Expect.isTrue(compiler.errors.isEmpty,
                 "Unexpected errors: ${compiler.errors}");
 }
 
@@ -243,9 +243,9 @@
          "_function",
          compiler.coreLibrary.patch.find);
 
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isTrue(compiler.errors.isEmpty(),
+  Expect.isTrue(compiler.errors.isEmpty,
                 "Unexpected errors: ${compiler.errors}");
 }
 
@@ -283,9 +283,9 @@
   compiler.resolver.resolveMethodElement(
       ensure(compiler, "method1", container.lookupLocalMember,
           isPatched: true));
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isFalse(compiler.errors.isEmpty());
+  Expect.isFalse(compiler.errors.isEmpty);
   print('method1:${compiler.errors}');
 
   compiler.warnings.clear();
@@ -293,9 +293,9 @@
   compiler.resolver.resolveMethodElement(
       ensure(compiler, "method2", container.lookupLocalMember,
           isPatched: true));
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isFalse(compiler.errors.isEmpty());
+  Expect.isFalse(compiler.errors.isEmpty);
   print('method2:${compiler.errors}');
 
   compiler.warnings.clear();
@@ -303,9 +303,9 @@
   compiler.resolver.resolveMethodElement(
       ensure(compiler, "method3", container.lookupLocalMember,
           isPatched: true));
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isFalse(compiler.errors.isEmpty());
+  Expect.isFalse(compiler.errors.isEmpty);
   print('method3:${compiler.errors}');
 
   compiler.warnings.clear();
@@ -313,9 +313,9 @@
   compiler.resolver.resolveMethodElement(
       ensure(compiler, "method4", container.lookupLocalMember,
           isPatched: true));
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isFalse(compiler.errors.isEmpty());
+  Expect.isFalse(compiler.errors.isEmpty);
   print('method4:${compiler.errors}');
 
   compiler.warnings.clear();
@@ -323,9 +323,9 @@
   compiler.resolver.resolveMethodElement(
       ensure(compiler, "method5", container.lookupLocalMember,
           isPatched: true));
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isFalse(compiler.errors.isEmpty());
+  Expect.isFalse(compiler.errors.isEmpty);
   print('method5:${compiler.errors}');
 
   compiler.warnings.clear();
@@ -333,9 +333,9 @@
   compiler.resolver.resolveMethodElement(
       ensure(compiler, "method6", container.lookupLocalMember,
           isPatched: true));
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isFalse(compiler.errors.isEmpty());
+  Expect.isFalse(compiler.errors.isEmpty);
   print('method6:${compiler.errors}');
 
   compiler.warnings.clear();
@@ -343,9 +343,9 @@
   compiler.resolver.resolveMethodElement(
       ensure(compiler, "method7", container.lookupLocalMember,
           isPatched: true));
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isFalse(compiler.errors.isEmpty());
+  Expect.isFalse(compiler.errors.isEmpty);
   print('method7:${compiler.errors}');
 
   compiler.warnings.clear();
@@ -353,9 +353,9 @@
   compiler.resolver.resolveMethodElement(
       ensure(compiler, "method8", container.lookupLocalMember,
           isPatched: true));
-  Expect.isTrue(compiler.warnings.isEmpty(),
+  Expect.isTrue(compiler.warnings.isEmpty,
                 "Unexpected warnings: ${compiler.warnings}");
-  Expect.isFalse(compiler.errors.isEmpty());
+  Expect.isFalse(compiler.errors.isEmpty);
   print('method8:${compiler.errors}');
 }
 
diff --git a/tests/compiler/dart2js/pretty_parameter_test.dart b/tests/compiler/dart2js/pretty_parameter_test.dart
index 7d44d3e..ed4caee 100644
--- a/tests/compiler/dart2js/pretty_parameter_test.dart
+++ b/tests/compiler/dart2js/pretty_parameter_test.dart
@@ -100,9 +100,9 @@
 
   regexp = const RegExp(r"a = 2;");
   Iterator matches = regexp.allMatches(generated).iterator();
-  Expect.isTrue(matches.hasNext());
+  Expect.isTrue(matches.hasNext);
   matches.next();
-  Expect.isFalse(matches.hasNext());
+  Expect.isFalse(matches.hasNext);
 
   generated = compile(PARAMETER_INIT, entry: 'foo');
   regexp = const RegExp("var result = start;");
diff --git a/tests/compiler/dart2js/resolver_test.dart b/tests/compiler/dart2js/resolver_test.dart
index 96c820a..4f964aa 100644
--- a/tests/compiler/dart2js/resolver_test.dart
+++ b/tests/compiler/dart2js/resolver_test.dart
@@ -88,7 +88,7 @@
                   length(type.arguments));
     int index = 0;
     Link<DartType> arguments = type.arguments;
-    while (!arguments.isEmpty()) {
+    while (!arguments.isEmpty) {
       Expect.equals(true, index < expectedElements.length);
       Expect.equals(expectedElements[index], arguments.head.element);
       index++;
@@ -149,7 +149,8 @@
   ClassElement classA = compiler.mainApp.find(buildSourceString("A"));
   FunctionElement fooA = classA.lookupLocalMember(buildSourceString("foo"));
 
-  ResolverVisitor visitor = new ResolverVisitor(compiler, fooB);
+  ResolverVisitor visitor =
+      new ResolverVisitor(compiler, fooB, new CollectingTreeElements(fooB));
   FunctionExpression node = fooB.parseNode(compiler);
   visitor.visit(node.body);
   Map mapping = map(visitor);
@@ -167,11 +168,13 @@
   ClassElement fooElement = compiler.mainApp.find(buildSourceString("Foo"));
   FunctionElement funElement =
       fooElement.lookupLocalMember(buildSourceString("foo"));
-  ResolverVisitor visitor = new ResolverVisitor(compiler, funElement);
+  ResolverVisitor visitor =
+      new ResolverVisitor(compiler, funElement,
+                          new CollectingTreeElements(funElement));
   FunctionExpression function = funElement.parseNode(compiler);
   visitor.visit(function.body);
   Map mapping = map(visitor);
-  List<Element> values = mapping.getValues();
+  List<Element> values = mapping.values;
   Expect.equals(0, mapping.length);
   Expect.equals(0, compiler.warnings.length);
 
@@ -188,7 +191,8 @@
   fooElement = compiler.mainApp.find(buildSourceString("Foo"));
   funElement =
       fooElement.lookupLocalMember(buildSourceString("foo"));
-  visitor = new ResolverVisitor(compiler, funElement);
+  visitor = new ResolverVisitor(compiler, funElement,
+                                new CollectingTreeElements(funElement));
   function = funElement.parseNode(compiler);
   visitor.visit(function.body);
   Expect.equals(0, compiler.warnings.length);
@@ -228,7 +232,7 @@
   Expect.equals(0, scope.elements.length);
   Expect.equals(2, map(visitor).length);
 
-  List<Element> elements = map(visitor).getValues();
+  List<Element> elements = map(visitor).values;
   Expect.notEquals(elements[0], elements[1]);
 }
 
@@ -241,7 +245,7 @@
   MethodScope scope = visitor.scope;
   Expect.equals(0, scope.elements.length);
   Expect.equals(3, map(visitor).length);
-  List<Element> elements = map(visitor).getValues();
+  List<Element> elements = map(visitor).values;
   Expect.equals(elements[0], elements[1]);
 }
 
@@ -254,7 +258,7 @@
   MethodScope scope = visitor.scope;
   Expect.equals(0, scope.elements.length);
   Expect.equals(2, map(visitor).length);
-  List<Element> elements = map(visitor).getValues();
+  List<Element> elements = map(visitor).values;
   Expect.notEquals(elements[0], elements[1]);
 }
 
@@ -321,8 +325,8 @@
   // Check that we have the expected nodes. This test relies on the mapping
   // field to be a linked hash map (preserving insertion order).
   Expect.isTrue(map(visitor) is LinkedHashMap);
-  List<Node> nodes = map(visitor).getKeys();
-  List<Element> elements = map(visitor).getValues();
+  List<Node> nodes = map(visitor).keys;
+  List<Element> elements = map(visitor).values;
 
 
   // for (int i = 0; i < 10; i = i + 1) { i = 5; };
@@ -436,8 +440,8 @@
   ClassElement barElement = compiler.mainApp.find(buildSourceString('Bar'));
   Expect.equals(barElement.computeType(compiler),
                 fooElement.supertype);
-  Expect.isTrue(fooElement.interfaces.isEmpty());
-  Expect.isTrue(barElement.interfaces.isEmpty());
+  Expect.isTrue(fooElement.interfaces.isEmpty);
+  Expect.isTrue(barElement.interfaces.isEmpty);
 }
 
 testVarSuperclass() {
@@ -464,14 +468,15 @@
   // Add the interface to the world and make sure everything is setup correctly.
   compiler.parseScript("interface Bar {}");
 
-  ResolverVisitor visitor = new ResolverVisitor(compiler, null);
+  ResolverVisitor visitor =
+      new ResolverVisitor(compiler, null, new CollectingTreeElements(null));
   compiler.resolveStatement("Foo bar;");
 
   ClassElement fooElement = compiler.mainApp.find(buildSourceString('Foo'));
   ClassElement barElement = compiler.mainApp.find(buildSourceString('Bar'));
 
   Expect.equals(null, barElement.supertype);
-  Expect.isTrue(barElement.interfaces.isEmpty());
+  Expect.isTrue(barElement.interfaces.isEmpty);
 
   Expect.equals(barElement.computeType(compiler),
                 fooElement.interfaces.head);
@@ -563,12 +568,20 @@
   compiler.resolveStatement(statement);
   ClassElement classElement =
       compiler.mainApp.find(buildSourceString(className));
-  Element element =
-      classElement.lookupConstructor(
-          new Selector.callConstructor(buildSourceString(constructor),
-                                       classElement.getLibrary()));
+  Element element;
+  if (constructor !== '') {
+    element = classElement.lookupConstructor(
+        new Selector.callConstructor(buildSourceString(constructor),
+                                     classElement.getLibrary()));
+  } else {
+    element = classElement.lookupConstructor(
+        new Selector.callDefaultConstructor(classElement.getLibrary()));
+  }
+
   FunctionExpression tree = element.parseNode(compiler);
-  ResolverVisitor visitor = new ResolverVisitor(compiler, element);
+  ResolverVisitor visitor =
+      new ResolverVisitor(compiler, element,
+                          new CollectingTreeElements(element));
   new InitializerResolver(visitor).resolveInitializers(element, tree);
   visitor.visit(tree.body);
   Expect.equals(expectedElementCount, map(visitor).length);
@@ -623,13 +636,13 @@
                 int foo; int bar;
                 A() : this.foo = 1, bar = 2;
               }""";
-  resolveConstructor(script, "A a = new A();", "A", "A", 2);
+  resolveConstructor(script, "A a = new A();", "A", "", 2);
 
   script = """class A {
                 int foo; A a;
                 A() : a.foo = 1;
                 }""";
-  resolveConstructor(script, "A a = new A();", "A", "A", 0,
+  resolveConstructor(script, "A a = new A();", "A", "", 0,
                      expectedWarnings: [],
                      expectedErrors:
                          [MessageKind.INVALID_RECEIVER_IN_INITIALIZER]);
@@ -638,14 +651,14 @@
                 int foo;
                 A() : this.foo = 1, this.foo = 2;
               }""";
-  resolveConstructor(script, "A a = new A();", "A", "A", 2,
+  resolveConstructor(script, "A a = new A();", "A", "", 2,
                      expectedWarnings: [MessageKind.ALREADY_INITIALIZED],
                      expectedErrors: [MessageKind.DUPLICATE_INITIALIZER]);
 
   script = """class A {
                 A() : this.foo = 1;
               }""";
-  resolveConstructor(script, "A a = new A();", "A", "A", 0,
+  resolveConstructor(script, "A a = new A();", "A", "", 0,
                      expectedWarnings: [],
                      expectedErrors: [MessageKind.CANNOT_RESOLVE]);
 
@@ -654,7 +667,7 @@
                 int bar;
                 A() : this.foo = bar;
               }""";
-  resolveConstructor(script, "A a = new A();", "A", "A", 3,
+  resolveConstructor(script, "A a = new A();", "A", "", 3,
                      expectedWarnings: [],
                      expectedErrors: [MessageKind.NO_INSTANCE_AVAILABLE]);
 
@@ -662,7 +675,7 @@
                 int foo() => 42;
                 A() : foo();
               }""";
-  resolveConstructor(script, "A a = new A();", "A", "A", 0,
+  resolveConstructor(script, "A a = new A();", "A", "", 0,
                      expectedWarnings: [],
                      expectedErrors: [MessageKind.CONSTRUCTOR_CALL_EXPECTED]);
 
@@ -690,7 +703,7 @@
               class B extends A {
                 B() : super(0);
               }""";
-  resolveConstructor(script, "B a = new B();", "B", "B", 1);
+  resolveConstructor(script, "B a = new B();", "B", "", 1);
 
   script = """class A {
                 int i;
@@ -699,7 +712,7 @@
               class B extends A {
                 B() : super(0), super(1);
               }""";
-  resolveConstructor(script, "B b = new B();", "B", "B", 2,
+  resolveConstructor(script, "B b = new B();", "B", "", 2,
                      expectedWarnings: [],
                      expectedErrors: [MessageKind.DUPLICATE_SUPER_INITIALIZER]);
 
@@ -718,7 +731,7 @@
          class Null {}
          class Dynamic_ {}
          class Object { Object() : super(); }''';
-  resolveConstructor(script, "Object o = new Object();", "Object", "Object", 1,
+  resolveConstructor(script, "Object o = new Object();", "Object", "", 1,
                      expectedWarnings: [],
                      expectedErrors: [MessageKind.SUPER_INITIALIZER_IN_OBJECT],
                      corelib: CORELIB_WITH_INVALID_OBJECT);
@@ -733,7 +746,7 @@
 
 List<String> asSortedStrings(Link link) {
   List<String> result = <String>[];
-  for (; !link.isEmpty(); link = link.tail) result.add(link.head.toString());
+  for (; !link.isEmpty; link = link.tail) result.add(link.head.toString());
   result.sort((s1, s2) => s1.compareTo(s2));
   return result;
 }
diff --git a/tests/compiler/dart2js/type_checker_test.dart b/tests/compiler/dart2js/type_checker_test.dart
index 0dd4f1e..62d231e 100644
--- a/tests/compiler/dart2js/type_checker_test.dart
+++ b/tests/compiler/dart2js/type_checker_test.dart
@@ -411,7 +411,7 @@
 DartType analyzeType(String text) {
   var node = parseExpression(text);
   TypeCheckerVisitor visitor =
-      new TypeCheckerVisitor(compiler, new TreeElementMapping(), types);
+      new TypeCheckerVisitor(compiler, new TreeElementMapping(null), types);
   return visitor.analyze(node);
 }
 
@@ -424,7 +424,7 @@
   Link<Element> topLevelElements = parseUnit(text, compiler, library);
 
   for (Link<Element> elements = topLevelElements;
-       !elements.isEmpty();
+       !elements.isEmpty;
        elements = elements.tail) {
     Node node = elements.head.parseNode(compiler);
     TreeElements mapping = compiler.resolver.resolve(elements.head);
diff --git a/tests/compiler/dart2js/unparser2_test.dart b/tests/compiler/dart2js/unparser2_test.dart
index 671615a..54f7b7e 100644
--- a/tests/compiler/dart2js/unparser2_test.dart
+++ b/tests/compiler/dart2js/unparser2_test.dart
@@ -55,7 +55,7 @@
   Parser parser = new Parser(listener);
   parser.parseUnit(beginToken);
   Node node = listener.popNode();
-  Expect.isTrue(listener.nodes.isEmpty());
+  Expect.isTrue(listener.nodes.isEmpty);
   return unparse(node);
 }
 
diff --git a/tests/compiler/dart2js/value_range2_test.dart b/tests/compiler/dart2js/value_range2_test.dart
index ac23203..768a3f1 100644
--- a/tests/compiler/dart2js/value_range2_test.dart
+++ b/tests/compiler/dart2js/value_range2_test.dart
@@ -46,16 +46,16 @@
   buildBound(one, two) {
     // Create a bound just like our current implementation in dart2js does.
     if (two is IntValue) {
-      if (two.isNegative()) {
+      if (two.isNegative) {
         return new AddValue(one, -two);
-      } else if (two.isZero()) {
+      } else if (two.isZero) {
         return one;
       }
     }
     if (one is IntValue) {
-      if (one.isNegative()) {
+      if (one.isNegative) {
         return new SubtractValue(-two, -one);
-      } else if (one.isZero()) {
+      } else if (one.isZero) {
         return -two;
       }
     }
diff --git a/tests/compiler/dart2js_extra/argument_definition_test.dart b/tests/compiler/dart2js_extra/argument_definition_test.dart
index 5d0d936..d5243c5 100644
--- a/tests/compiler/dart2js_extra/argument_definition_test.dart
+++ b/tests/compiler/dart2js_extra/argument_definition_test.dart
@@ -4,7 +4,7 @@
 
 // Test parsing and resolution of argument definition test.
 
-int test(int a, [int b = 2, int c = 3]) {
+int test(int a, {int b: 2, int c: 3}) {
   int result = 0;
   print(?b);
   print(?result);  /// 01: compile-time error
@@ -19,7 +19,7 @@
   print(!?a?!?b:!?c == ?a??b:?c);
 }
 
-closure_test(int a, [int b = 2, int c = 3]) {
+closure_test(int a, {int b: 2, int c: 3}) {
   var x = 0;
   return () {
     int result = 0;
@@ -40,12 +40,12 @@
 
 main() {
   test(1);
-  test(1, 2);
-  test(1, 2, 3);
-  test(1, c:3);
+  test(1, b: 2);
+  test(1, b: 2, c: 3);
+  test(1, c: 3);
 
   closure_test(1)();
-  closure_test(1, 2)();
-  closure_test(1, 2, 3)();
-  closure_test(1, c:3)();
+  closure_test(1, b: 2)();
+  closure_test(1, b: 2, c: 3)();
+  closure_test(1, c: 3)();
 }
diff --git a/tests/compiler/dart2js_extra/bailout_test.dart b/tests/compiler/dart2js_extra/bailout_test.dart
index d97e75c..2b42399 100644
--- a/tests/compiler/dart2js_extra/bailout_test.dart
+++ b/tests/compiler/dart2js_extra/bailout_test.dart
@@ -45,7 +45,7 @@
 void forInBailout() {
   var n = myString.length;
   var res = '';
-  for (int i in myString.charCodes()) {
+  for (int i in myString.charCodes) {
     var o = myString;
     if (false) o[1] = 2;
     res = res.concat(new String.fromCharCodes([i]));
diff --git a/tests/compiler/dart2js_extra/closure3_test.dart b/tests/compiler/dart2js_extra/closure3_test.dart
index e436d7c..119bcb6 100644
--- a/tests/compiler/dart2js_extra/closure3_test.dart
+++ b/tests/compiler/dart2js_extra/closure3_test.dart
@@ -3,11 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 main() {
-  var f = fun([a = 3, b = 8]) {
+  var f = fun({a: 3, b: 8}) {
     return a + b;
   };
   Expect.equals(11, f());
-  Expect.equals(499, f(3, 496));
-  Expect.equals(42, f(20, b: 22));
+  Expect.equals(499, f(a: 3, b: 496));
+  Expect.equals(42, f(a: 20, b: 22));
   Expect.equals(99, f(b: 66, a: 33));
 }
diff --git a/tests/compiler/dart2js_extra/closure5_test.dart b/tests/compiler/dart2js_extra/closure5_test.dart
index 6ead0de..b88f5ef 100644
--- a/tests/compiler/dart2js_extra/closure5_test.dart
+++ b/tests/compiler/dart2js_extra/closure5_test.dart
@@ -4,7 +4,7 @@
 
 class A {
   foo() => 499;
-  bar([a = 1, b = 7, c = 99]) => a + b + c;
+  bar({a: 1, b: 7, c: 99}) => a + b + c;
   toto() => bar;
   gee(f) => f(toto);
 }
@@ -15,9 +15,9 @@
   Expect.equals(499, foo());
   var bar = a.bar;
   Expect.equals(107, bar());
-  Expect.equals(3, bar(1, 1, 1));
+  Expect.equals(3, bar(a: 1, b: 1, c: 1));
   Expect.equals(10, bar(c: 2));
   var toto = a.toto;
   var gee = a.gee;
-  Expect.equals(-10, gee((f) => f()(-1, -2, c: -7)));
+  Expect.equals(-10, gee((f) => f()(a: -1, b: -2, c: -7)));
 }
diff --git a/tests/compiler/dart2js_extra/closure6_test.dart b/tests/compiler/dart2js_extra/closure6_test.dart
index 1fd460d..fd63888 100644
--- a/tests/compiler/dart2js_extra/closure6_test.dart
+++ b/tests/compiler/dart2js_extra/closure6_test.dart
@@ -18,13 +18,13 @@
   Expect.equals(499, a.foo());
   a.foo = (x, y) => x + y;
   Expect.equals(102, a.bar());
-  a.foo = ([fun = null]) => fun(41);
+  a.foo = ({fun: null}) => fun(41);
   Expect.equals(42, a.gee((x) => x + 1));
 
   a.foo = () => 499;
   Expect.equals(499, a.foo2());
   a.foo = (x, y) => x + y;
   Expect.equals(102, a.bar2());
-  a.foo = ([fun = null]) => fun(41);
+  a.foo = ({fun: null}) => fun(41);
   Expect.equals(42, a.gee2((x) => x + 1));
 }
diff --git a/tests/compiler/dart2js_extra/closure7_test.dart b/tests/compiler/dart2js_extra/closure7_test.dart
index 7722bbe..6003c43 100644
--- a/tests/compiler/dart2js_extra/closure7_test.dart
+++ b/tests/compiler/dart2js_extra/closure7_test.dart
@@ -15,14 +15,14 @@
   Expect.equals(499, foo());
   foo = (x, y) => x + y;
   Expect.equals(102, bar());
-  foo = ([fun = null]) => fun(41);
+  foo = ({fun: null}) => fun(41);
   Expect.equals(42, gee((x) => x + 1));
 
   foo = () => 499;
   Expect.equals(499, foo2());
   foo = (x, y) => x + y;
   Expect.equals(102, bar2());
-  foo = ([fun = null]) => fun(41);
+  foo = ({fun: null}) => fun(41);
   Expect.equals(42, gee2((x) => x + 1));
 }
 
@@ -41,14 +41,14 @@
   Expect.equals(499, A.foo());
   A.foo = (x, y) => x + y;
   Expect.equals(102, A.bar());
-  A.foo = ([fun = null]) => fun(41);
+  A.foo = ({fun: null}) => fun(41);
   Expect.equals(42, A.gee((x) => x + 1));
 
   A.foo = () => 499;
   Expect.equals(499, A.foo2());
   A.foo = (x, y) => x + y;
   Expect.equals(102, A.bar2());
-  A.foo = ([fun = null]) => fun(41);
+  A.foo = ({fun: null}) => fun(41);
   Expect.equals(42, A.gee2((x) => x + 1));
 }
 
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index f798b88..31ef7cf 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -26,6 +26,3 @@
 
 [ $compiler == dart2js && $runtime == none ]
 *: Fail, Pass # TODO(ahe): Triage these tests.
-
-[ $runtime == opera ]
-*: Skip
diff --git a/tests/compiler/dart2js_extra/for_in_test.dart b/tests/compiler/dart2js_extra/for_in_test.dart
index 54f8b02..d2f76ea 100644
--- a/tests/compiler/dart2js_extra/for_in_test.dart
+++ b/tests/compiler/dart2js_extra/for_in_test.dart
@@ -35,7 +35,7 @@
   final List<T> values;
   int index;
   MyListIterator(List<T> values) : this.values = values, index = 0;
-  bool hasNext() => index < values.length;
+  bool get hasNext => index < values.length;
   T next() => values[index++];
 }
 
diff --git a/tests/compiler/dart2js_extra/named_parameter_for_static_test.dart b/tests/compiler/dart2js_extra/named_parameter_for_static_test.dart
index 95aada0..252c6ad 100644
--- a/tests/compiler/dart2js_extra/named_parameter_for_static_test.dart
+++ b/tests/compiler/dart2js_extra/named_parameter_for_static_test.dart
@@ -2,12 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-oneOptionalArgument(a, [b]) {
+oneOptionalArgument(a, {b}) {
   Expect.equals(1, a);
   Expect.equals(2, b);
 }
 
-twoOptionalArguments([a, b]) {
+twoOptionalArguments({a, b}) {
   Expect.equals(1, a);
   Expect.equals(2, b);
 }
@@ -15,56 +15,43 @@
 main() {
   twoOptionalArguments(a: 1, b: 2);
   twoOptionalArguments(b: 2, a: 1);
-  twoOptionalArguments(1, b: 2);
-  twoOptionalArguments(1, 2);
 
-  oneOptionalArgument(1, 2);
   oneOptionalArgument(1, b: 2);
 
   new A.twoOptionalArguments(a: 1, b: 2);
   new A.twoOptionalArguments(b: 2, a: 1);
-  new A.twoOptionalArguments(1, b: 2);
-  new A.twoOptionalArguments(1, 2);
 
-  new A.oneOptionalArgument(1, 2);
   new A.oneOptionalArgument(1, b: 2);
 
-/* TODO(ngeoffray): Enable once we support super constructor call.
   new B.one();
   new B.two();
   new B.three();
-  new B.four();
-  new B.five();
-  new B.six();
-*/
 
-  new B().one();
-  new B().two();
-  new B().three();
-  new B().four();
-  new B().five();
-  new B().six();
+  new B().B_one();
+  new B().B_two();
+  new B().B_three();
 }
 
 class A {
-  A.oneOptionalArgument(a, [b]) {
+  A.oneOptionalArgument(a, {b}) {
     Expect.equals(1, a);
     Expect.equals(2, b);
   }
 
-  A.twoOptionalArguments([a, b]) {
+  A.twoOptionalArguments({a, b}) {
     Expect.equals(1, a);
     Expect.equals(2, b);
   }
 
   A();
 
-  oneOptionalArgument(a, [b]) {
+  // A named constructor now conflicts with a method of the same name.
+  oneOptArg(a, {b}) {
     Expect.equals(1, a);
     Expect.equals(2, b);
   }
 
-  twoOptionalArguments([a, b]) {
+  twoOptArgs({a, b}) {
     Expect.equals(1, a);
     Expect.equals(2, b);
   }
@@ -73,16 +60,10 @@
 class B extends A {
   B.one() : super.twoOptionalArguments(a: 1, b: 2);
   B.two() : super.twoOptionalArguments(b: 2, a: 1);
-  B.three() : super.twoOptionalArguments(1, b: 2);
-  B.four() : super.twoOptionalArguments(1, 2);
-  B.five() : super.oneOptionalArgument(1, 2);
-  B.six() : super.oneOptionalArgument(1, b: 2);
+  B.three() : super.oneOptionalArgument(1, b: 2);
 
   B();
-  one() { super.twoOptionalArguments(a: 1, b: 2); }
-  two() { super.twoOptionalArguments(b: 2, a: 1); }
-  three() { super.twoOptionalArguments(1, b: 2); }
-  four() { super.twoOptionalArguments(1, 2); }
-  five() { super.oneOptionalArgument(1, 2); }
-  six() { super.oneOptionalArgument(1, b: 2); }
+  B_one() { super.twoOptArgs(a: 1, b: 2); }
+  B_two() { super.twoOptArgs(b: 2, a: 1); }
+  B_three() { super.oneOptArg(1, b: 2); }
 }
diff --git a/tests/compiler/dart2js_extra/named_parameter_test.dart b/tests/compiler/dart2js_extra/named_parameter_test.dart
index 3e2da8b..af09e39 100644
--- a/tests/compiler/dart2js_extra/named_parameter_test.dart
+++ b/tests/compiler/dart2js_extra/named_parameter_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class A {
-  foo([a, b]) {
+  foo({a, b}) {
     Expect.equals(0, a);
     Expect.equals(1, b);
   }
diff --git a/tests/compiler/dart2js_extra/no_such_method_test.dart b/tests/compiler/dart2js_extra/no_such_method_test.dart
index e291a93..4a432c5 100644
--- a/tests/compiler/dart2js_extra/no_such_method_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_test.dart
@@ -28,7 +28,7 @@
   A a = new A();
   var info = a.foo();
   Expect.equals('foo', info.name);
-  Expect.isTrue(info.args.isEmpty());
+  Expect.isTrue(info.args.isEmpty);
   Expect.isTrue(info.receiver === a);
 
   info = a.foo(2);
diff --git a/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart b/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart
new file mode 100644
index 0000000..6962716
--- /dev/null
+++ b/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2011, 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.

+

+// Confirm that redirecting named constructors are properly resolved.

+//

+// Note that this test may become invalid due to http://dartbug.com/5940.

+

+class C {

+  var x;

+  C() { x = 1; }

+  C.C() { x = 2; }

+  C.redirecting(): this.C();

+}

+

+main() {

+  var c = new C.redirecting();

+  Expect.equals(c.x, 2);

+}
\ No newline at end of file
diff --git a/tests/compiler/dart2js_foreign/dart2js_foreign.status b/tests/compiler/dart2js_foreign/dart2js_foreign.status
index 12c15c7..1b70a56 100644
--- a/tests/compiler/dart2js_foreign/dart2js_foreign.status
+++ b/tests/compiler/dart2js_foreign/dart2js_foreign.status
@@ -10,7 +10,7 @@
 native_checked_fields_test: Fail
 
 
-[ $compiler == dart2js && ( $runtime == d8 || $browser ) ]
+[ $compiler == dart2js && ( $jscl || $browser ) ]
 foreign_test: Fail # TODO(ahe): Convert to metadata syntax.
 native_call_arity1_test: Fail # TODO(ahe): Convert to metadata syntax.
 native_call_arity2_test: Fail # TODO(ahe): Convert to metadata syntax.
diff --git a/tests/compiler/dart2js_foreign/native_null_test.dart b/tests/compiler/dart2js_foreign/native_null_test.dart
index d77cbb9..f22046f 100644
--- a/tests/compiler/dart2js_foreign/native_null_test.dart
+++ b/tests/compiler/dart2js_foreign/native_null_test.dart
@@ -33,7 +33,7 @@
   Expect.equals(null, a.returnUndefined());
 
   Expect.equals('', a.returnEmptyString());
-  Expect.isTrue(a.returnEmptyString().isEmpty());
+  Expect.isTrue(a.returnEmptyString().isEmpty);
   Expect.isTrue(a.returnEmptyString() is String);
 
   Expect.isTrue(a.returnZero() is int);
diff --git a/tests/compiler/dart2js_native/hash_code_test.dart b/tests/compiler/dart2js_native/hash_code_test.dart
index af43441..0c50d21 100644
--- a/tests/compiler/dart2js_native/hash_code_test.dart
+++ b/tests/compiler/dart2js_native/hash_code_test.dart
@@ -12,5 +12,5 @@
 
 main() {
   setup();
-  Expect.isTrue(makeA().hashCode() is int);
+  Expect.isTrue(makeA().hashCode is int);
 }
diff --git a/tests/compiler/dart2js_native/native_call_arity1_frog_test.dart b/tests/compiler/dart2js_native/native_call_arity1_frog_test.dart
index f5f2ff0..8558b22 100644
--- a/tests/compiler/dart2js_native/native_call_arity1_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_call_arity1_frog_test.dart
@@ -7,8 +7,8 @@
 // methods can dispatch on the number of arguments.  Passing null or undefined
 // as the last argument is not the same as passing one fewer argument.
 //
-// * Named arguments are passed in the correct position, so require preceding
-// arguments to be passed.
+// * Optional positional arguments are passed in the correct position, so
+// require preceding arguments to be passed.
 
 class A native "*A" {
   int foo(int x) native;
@@ -51,9 +51,6 @@
   Expect.equals(2, b.foo(10, 20));
   Expect.equals(3, b.foo(10, 20, 30));
 
-  Expect.equals(1, b.foo(x: 10));   // 1 = x
-  Expect.equals(2, b.foo(y: 20));   // 2 = x, y
-  Expect.equals(3, b.foo(z: 30));   // 3 = x, y, z
   Expect.throws(() => b.foo(10, 20, 30, 40));
 }
 
@@ -71,9 +68,6 @@
   Expect.equals(2, b.foo(10, 20));
   Expect.equals(3, b.foo(10, 20, 30));
 
-  Expect.equals(1, b.foo(x: 10));
-  Expect.equals(2, b.foo(y: 20));
-  Expect.equals(3, b.foo(z: 30));
   Expect.throws(() => b.foo(10, 20, 30, 40));
 }
 
diff --git a/tests/compiler/dart2js_native/native_call_arity2_frog_test.dart b/tests/compiler/dart2js_native/native_call_arity2_frog_test.dart
index 727ec38..b24893a 100644
--- a/tests/compiler/dart2js_native/native_call_arity2_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_call_arity2_frog_test.dart
@@ -49,8 +49,8 @@
   Expect.equals(2, a.foo(10, 20));
   Expect.throws(() => a.foo(10, 20, 30));
 
-  Expect.equals(1, a.foo(x: 10));   // 1 = x
-  Expect.equals(2, a.foo(y: 20));   // 2 = x, y
+  Expect.equals(1, a.foo(10));
+  Expect.equals(2, a.foo(null, 20));
   Expect.throws(() => a.foo(10, 20, 30));
 
   Expect.equals(0, b.foo());
@@ -58,8 +58,8 @@
   Expect.equals(2, b.foo(10, 20));
   Expect.throws(() => b.foo(10, 20, 30));
 
-  Expect.equals(1, b.foo(x: 10));   // 1 = x
-  Expect.equals(2, b.foo(y: 20));   // 2 = x, y
+  Expect.equals(1, b.foo(10));
+  Expect.equals(2, b.foo(null, 20));
   Expect.throws(() => b.foo(10, 20, 30));
 }
 
@@ -72,8 +72,8 @@
   Expect.equals(2, a.foo(10, 20));
   Expect.throws(() => a.foo(10, 20, 30));
 
-  Expect.equals(1, a.foo(x: 10));   // 1 = x
-  Expect.equals(2, a.foo(y: 20));   // 2 = x, y
+  Expect.equals(1, a.foo(10));
+  Expect.equals(2, a.foo(null, 20));
   Expect.throws(() => a.foo(10, 20, 30));
 
   Expect.equals(0, b.foo());
@@ -81,8 +81,8 @@
   Expect.equals(2, b.foo(10, 20));
   Expect.throws(() => b.foo(10, 20, 30));
 
-  Expect.equals(1, b.foo(x: 10));   // 1 = x
-  Expect.equals(2, b.foo(y: 20));   // 2 = x, y
+  Expect.equals(1, b.foo(10));
+  Expect.equals(2, b.foo(null, 20));
   Expect.throws(() => b.foo(10, 20, 30));
 }
 
diff --git a/tests/compiler/dart2js_native/native_call_arity3_frog_test.dart b/tests/compiler/dart2js_native/native_call_arity3_frog_test.dart
index 3792069..8a45c05 100644
--- a/tests/compiler/dart2js_native/native_call_arity3_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_call_arity3_frog_test.dart
@@ -47,9 +47,9 @@
   Expect.equals(2, b.foo(10, 20));
   Expect.equals(3, b.foo(10, 20, 30));
 
-  Expect.equals(1, b.foo(x: 10));   // 1 = x
-  Expect.equals(2, b.foo(y: 20));   // 2 = x, y
-  Expect.equals(3, b.foo(z: 30));   // 3 = x, y, z
+  Expect.equals(1, b.foo(10));
+  Expect.equals(2, b.foo(null, 20));
+  Expect.equals(3, b.foo(null, null, 30));
   Expect.throws(() => b.foo(10, 20, 30, 40));
 }
 
@@ -67,9 +67,9 @@
   Expect.equals(2, b.foo(10, 20));
   Expect.equals(3, b.foo(10, 20, 30));
 
-  Expect.equals(1, b.foo(x: 10));
-  Expect.equals(2, b.foo(y: 20));
-  Expect.equals(3, b.foo(z: 30));
+  Expect.equals(1, b.foo(10));
+  Expect.equals(2, b.foo(null, 20));
+  Expect.equals(3, b.foo(null, null, 30));
   Expect.throws(() => b.foo(10, 20, 30, 40));
 }
 
diff --git a/tests/compiler/dart2js_native/native_null_frog_test.dart b/tests/compiler/dart2js_native/native_null_frog_test.dart
index e715755..44d3724 100644
--- a/tests/compiler/dart2js_native/native_null_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_null_frog_test.dart
@@ -27,7 +27,7 @@
   Expect.equals(null, a.returnUndefined());
 
   Expect.equals('', a.returnEmptyString());
-  Expect.isTrue(a.returnEmptyString().isEmpty());
+  Expect.isTrue(a.returnEmptyString().isEmpty);
   Expect.isTrue(a.returnEmptyString() is String);
 
   Expect.isTrue(a.returnZero() is int);
diff --git a/tests/compiler/dart2js_native/native_wrapping_function3_frog_test.dart b/tests/compiler/dart2js_native/native_wrapping_function3_frog_test.dart
index d00d434..335dc01 100644
--- a/tests/compiler/dart2js_native/native_wrapping_function3_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_wrapping_function3_frog_test.dart
@@ -27,25 +27,15 @@
   setup();
   var a = makeA();
   Expect.equals(43, a.foo1((arg1) => arg1, 43));
-  Expect.equals(43, a.foo1((arg1) => arg1, arg1: 43));
   Expect.equals(0, a.foo1((arg1) => arg1));
 
   Expect.equals(44, a.foo2((arg1, arg2) => arg1 + arg2, 21, 23));
   Expect.equals(22, a.foo2((arg1, arg2) => arg1 + arg2, 21));
-  Expect.equals(22, a.foo2((arg1, arg2) => arg1 + arg2, arg1: 21));
-  Expect.equals(21, a.foo2((arg1, arg2) => arg1 + arg2, arg2: 21));
-  Expect.equals(44, a.foo2((arg1, arg2) => arg1 + arg2, arg1: 21, arg2: 23));
-  Expect.equals(44, a.foo2((arg1, arg2) => arg1 - arg2, arg2: 22, arg1: 66));
 
   A aa = a;
   Expect.equals(43, aa.foo1((arg1) => arg1, 43));
-  Expect.equals(43, aa.foo1((arg1) => arg1, arg1: 43));
   Expect.equals(0, aa.foo1((arg1) => arg1));
 
   Expect.equals(44, aa.foo2((arg1, arg2) => arg1 + arg2, 21, 23));
   Expect.equals(22, aa.foo2((arg1, arg2) => arg1 + arg2, 21));
-  Expect.equals(22, aa.foo2((arg1, arg2) => arg1 + arg2, arg1: 21));
-  Expect.equals(21, aa.foo2((arg1, arg2) => arg1 + arg2, arg2: 21));
-  Expect.equals(44, aa.foo2((arg1, arg2) => arg1 + arg2, arg1: 21, arg2: 23));
-  Expect.equals(44, aa.foo2((arg1, arg2) => arg1 - arg2, arg2: 22, arg1: 66));
 }
diff --git a/tests/corelib/big_integer_vm_test.dart b/tests/corelib/big_integer_vm_test.dart
index ec1d755..9c7719a 100644
--- a/tests/corelib/big_integer_vm_test.dart
+++ b/tests/corelib/big_integer_vm_test.dart
@@ -168,8 +168,8 @@
     Expect.equals(1234567890123456, (-1234567890123456).abs());
     var a = 10000000000000000000;
     var b = 10000000000000000001;
-    Expect.equals(false, a.hashCode() == b.hashCode());
-    Expect.equals(true, a.hashCode() == (b - 1).hashCode());
+    Expect.equals(false, a.hashCode == b.hashCode);
+    Expect.equals(true, a.hashCode == (b - 1).hashCode);
   }
 }
 
diff --git a/tests/corelib/collection_to_string_test.dart b/tests/corelib/collection_to_string_test.dart
index 71db90ff..1eb7d3b 100644
--- a/tests/corelib/collection_to_string_test.dart
+++ b/tests/corelib/collection_to_string_test.dart
@@ -297,7 +297,7 @@
 
 /** Returns the alphabetized characters in a string. */
 String alphagram(String s) {
-  List<int> chars = s.charCodes();
+  List<int> chars = s.charCodes;
   chars.sort((int a, int b) => a - b);
   return new String.fromCharCodes(chars);
 }
diff --git a/tests/corelib/const_list_literal_test.dart b/tests/corelib/const_list_literal_test.dart
index 33bc487..5d5978e 100644
--- a/tests/corelib/const_list_literal_test.dart
+++ b/tests/corelib/const_list_literal_test.dart
@@ -13,7 +13,7 @@
     var exception = null;
     try {
       list.add(4);
-    } on UnsupportedOperationException catch (e) {
+    } on UnsupportedError catch (e) {
       exception = e;
     }
     Expect.equals(true, exception != null);
@@ -23,7 +23,7 @@
     exception = null;
     try {
       list.addAll([4, 5]);
-    } on UnsupportedOperationException catch (e) {
+    } on UnsupportedError catch (e) {
       exception = e;
     }
     Expect.equals(true, exception != null);
@@ -32,7 +32,7 @@
     exception = null;
     try {
       list[0] = 0;
-    } on UnsupportedOperationException catch (e) {
+    } on UnsupportedError catch (e) {
       exception = e;
     }
     Expect.equals(true, exception != null);
@@ -41,7 +41,7 @@
     exception = null;
     try {
       list.sort((a, b) => a < b);
-    } on UnsupportedOperationException catch (e) {
+    } on UnsupportedError catch (e) {
       exception = e;
     }
     Expect.equals(true, exception != null);
@@ -53,7 +53,7 @@
     exception = null;
     try {
       list.setRange(0, 1, [1], 0);
-    } on UnsupportedOperationException catch (e) {
+    } on UnsupportedError catch (e) {
       exception = e;
     }
     Expect.equals(true, exception != null);
diff --git a/tests/corelib/const_list_remove_range_test.dart b/tests/corelib/const_list_remove_range_test.dart
index b15d793..db38336 100644
--- a/tests/corelib/const_list_remove_range_test.dart
+++ b/tests/corelib/const_list_remove_range_test.dart
@@ -9,7 +9,7 @@
 }
 
 void expectUOE(Function f) {
-  Expect.throws(f, (e) => e is UnsupportedOperationException);
+  Expect.throws(f, (e) => e is UnsupportedError);
 }
 
 testImmutable(var list) {
diff --git a/tests/corelib/const_list_set_range_test.dart b/tests/corelib/const_list_set_range_test.dart
index a32c40a..08062c6 100644
--- a/tests/corelib/const_list_set_range_test.dart
+++ b/tests/corelib/const_list_set_range_test.dart
@@ -9,7 +9,7 @@
 }
 
 void expectUOE(Function f) {
-  Expect.throws(f, (e) => e is UnsupportedOperationException);
+  Expect.throws(f, (e) => e is UnsupportedError);
 }
 
 testImmutable(var list) {
diff --git a/tests/corelib/core_runtime_types_test.dart b/tests/corelib/core_runtime_types_test.dart
index caea866..d1733bd 100644
--- a/tests/corelib/core_runtime_types_test.dart
+++ b/tests/corelib/core_runtime_types_test.dart
@@ -141,8 +141,8 @@
   // TODO(jimhug): Determine correct behavior for mixing ints and floats.
   static testIntegerMethods() {
     var y = 9;
-    assertEquals(y.isEven(), false);
-    assertEquals(y.isOdd(), true);
+    assertEquals(y.isEven, false);
+    assertEquals(y.isOdd, true);
     assertEquals(y.toRadixString(2), '1001');
     assertEquals(y.toRadixString(3), '100');
     assertEquals(y.toRadixString(16), '9');
@@ -171,7 +171,7 @@
   // TODO(jimhug): Fill out full set of string methods.
   static testStringMethods() {
     var s = "abcdef";
-    assertEquals(s.isEmpty(), false);
+    assertEquals(s.isEmpty, false);
     assertEquals(s.startsWith("abc"), true);
     assertEquals(s.endsWith("def"), true);
     assertEquals(s.startsWith("aa"), false);
@@ -199,7 +199,7 @@
   // TODO(jimhug): Fill out full set of list methods.
   static testListMethods() {
     var a = [1,2,3,4];
-    assertEquals(a.isEmpty(), false);
+    assertEquals(a.isEmpty, false);
     assertEquals(a.length, 4);
     var exception = null;
     a.clear();
@@ -223,20 +223,20 @@
     assertEquals(d.containsValue(3), false);
     assertEquals(d.containsKey('a'), true);
     assertEquals(d.containsKey('c'), false);
-    assertEquals(d.getKeys().length, 2);
-    assertEquals(d.getValues().length, 2);
+    assertEquals(d.keys.length, 2);
+    assertEquals(d.values.length, 2);
 
     assertEquals(d.remove('c'), null);
     assertEquals(d.remove('b'), 2);
-    assertListEquals(d.getKeys(), ['a']);
-    assertListEquals(d.getValues(), [1]);
+    assertListEquals(d.keys, ['a']);
+    assertListEquals(d.values, [1]);
 
     d['c'] = 3;
     d['f'] = 4;
-    assertEquals(d.getKeys().length, 3);
-    assertEquals(d.getValues().length, 3);
-    assertListContains(d.getKeys(), ['a', 'c', 'f']);
-    assertListContains(d.getValues(), [1, 3, 4]);
+    assertEquals(d.keys.length, 3);
+    assertEquals(d.values.length, 3);
+    assertListContains(d.keys, ['a', 'c', 'f']);
+    assertListContains(d.values, [1, 3, 4]);
 
     var count = 0;
     d.forEach((key, value) {
@@ -250,8 +250,8 @@
     assertEquals(d.containsValue(3), false);
     assertEquals(d.containsKey('a'), true);
     assertEquals(d.containsKey('c'), false);
-    assertEquals(d.getKeys().length, 2);
-    assertEquals(d.getValues().length, 2);
+    assertEquals(d.keys.length, 2);
+    assertEquals(d.values.length, 2);
 
     d['g'] = null;
     assertEquals(d.containsKey('g'), true);
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 54df65e..b604ddd 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -11,12 +11,13 @@
 apply_test: Fail # Bug 5670
 apply2_test: Fail # Bug 5670
 
-[ $runtime == ff || $runtime == ie9 ]
+[ $runtime == ff || $runtime == ie9 || $runtime == jsshell ]
 unicode_test: Fail
 
-# TODO(jmesserly): now that we have a bot, we need to set up Opera testing.
 [ $runtime == opera ]
-*: Skip
+core_runtime_types_test: Fail
+date_time7_test: Fail
+unicode_test: Fail
 
 [ $runtime == ie9 && ($system == linux || $system == macos) ]
 *: Skip
diff --git a/tests/corelib/date_time2_test.dart b/tests/corelib/date_time2_test.dart
index 8f838f4..2004987 100644
--- a/tests/corelib/date_time2_test.dart
+++ b/tests/corelib/date_time2_test.dart
@@ -10,5 +10,5 @@
   // There is no guarantee that the hashcode for these two dates is different,
   // but in the worst case we will have to fix this test.
   // The important test here is, that Date .
-  Expect.isFalse(d.hashCode() == d2.hashCode());
+  Expect.isFalse(d.hashCode == d2.hashCode);
 }
diff --git a/tests/corelib/future_test.dart b/tests/corelib/future_test.dart
index ebc541f..9ed1db5 100644
--- a/tests/corelib/future_test.dart
+++ b/tests/corelib/future_test.dart
@@ -74,7 +74,7 @@
   completer.completeException(exception);
   Expect.equals(exception, future.exception);
   Expect.equals(exception, err);
-  Expect.throws(() => future.value, (e) => e == exception);
+  Expect.throws(() => future.value, (e) => e.source == exception);
 }
 
 testCompleteWithCompleteHandlerAfterComplete() {
@@ -108,7 +108,7 @@
   });
   Expect.equals(exception, future.exception);
   Expect.equals(exception, err);
-  Expect.throws(() => future.value, (e) => e == exception);
+  Expect.throws(() => future.value, (e) => e.source == exception);
 }
 
 testCompleteWithManyCompleteHandlers() {
@@ -146,7 +146,7 @@
   Expect.equals(exception, before);
   Expect.equals(exception, after1);
   Expect.equals(exception, after2);
-  Expect.throws(() => future.value, (e) => e == exception);
+  Expect.throws(() => future.value, (e) => e.source == exception);
 }
 
 // Tests for [then]
@@ -207,7 +207,7 @@
   future.then((_) {}); // exception is thrown if we plan to use the value
   Expect.throws(
       () { completer.completeException(ex); },
-      (e) => e == ex);
+      (e) => e.source == ex);
 }
 
 testExceptionNoSuccessListeners() {
@@ -263,7 +263,7 @@
   future.handleException((e) { reached = true; return false; }); // overshadowed
   Expect.throws(
       () { completer.completeException(ex); },
-      (e) => e == ex);
+      (e) => e.source == ex);
   Expect.isTrue(reached);
 }
 
@@ -385,7 +385,7 @@
     exceptionFromCompleteHandler = f.exception;
   });
   future.then((v) => Expect.fail("Should not succeed"));
-  Expect.throws(() => completer.completeException(ex), (e) => ex == e);
+  Expect.throws(() => completer.completeException(ex), (e) => e.source == ex);
   Expect.equals(ex, exceptionFromCompleteHandler);
 }
 
@@ -438,7 +438,7 @@
   final transformedFuture = completer.future.transform((x) { throw error; });
   Expect.isFalse(transformedFuture.isComplete);
   transformedFuture.then((v) => null);
-  Expect.throws(() => completer.complete("42"), (e) => e == error);
+  Expect.throws(() => completer.complete("42"), (e) => e.source == error);
   Expect.equals(error, transformedFuture.exception);
 }
 
@@ -478,7 +478,7 @@
   });
   chainedFuture.then((v) => null);
   Expect.isFalse(chainedFuture.isComplete);
-  Expect.throws(() => completerA.complete("42"), (e) => e == error);
+  Expect.throws(() => completerA.complete("42"), (e) => e.source == error);
   Expect.equals(error, chainedFuture.exception);
 }
 
diff --git a/tests/corelib/hash_map_test.dart b/tests/corelib/hash_map_test.dart
index af78d95..8d92047 100644
--- a/tests/corelib/hash_map_test.dart
+++ b/tests/corelib/hash_map_test.dart
@@ -11,10 +11,10 @@
     // is used to verify that the test script is picking up these tests.
     var m = new Map();
     Expect.equals(0, m.length);
-    Expect.equals(true, m.isEmpty());
+    Expect.equals(true, m.isEmpty);
     m["one"] = 1;
     Expect.equals(1, m.length);
-    Expect.equals(false, m.isEmpty());
+    Expect.equals(false, m.isEmpty);
     Expect.equals(1, m["one"]);
   }
 }
diff --git a/tests/corelib/is_operator_basic_types_test.dart b/tests/corelib/is_operator_basic_types_test.dart
index 1dfae1e..0e62b23 100644
--- a/tests/corelib/is_operator_basic_types_test.dart
+++ b/tests/corelib/is_operator_basic_types_test.dart
@@ -61,5 +61,5 @@
 
   // Try to make it even harder.
   var string = new String.fromCharCodes([new Date.now().year % 100 + 1]);
-  check([string.charCodes(), string, null]);
+  check([string.charCodes, string, null]);
 }
diff --git a/tests/corelib/linked_hash_map_test.dart b/tests/corelib/linked_hash_map_test.dart
index 60ea717..f90fa88 100644
--- a/tests/corelib/linked_hash_map_test.dart
+++ b/tests/corelib/linked_hash_map_test.dart
@@ -62,11 +62,11 @@
     verifyValues(valuesInOrder);
 
     clear();
-    map.getKeys().forEach(testForEachKey);
+    map.keys.forEach(testForEachKey);
     verifyKeys(keysInOrder);
 
     clear();
-    map.getValues().forEach(testForEachValue);
+    map.values.forEach(testForEachValue);
     verifyValues(valuesInOrder);
 
     // Remove and then insert.
@@ -82,11 +82,11 @@
     verifyValues(valuesAfterBMove);
 
     clear();
-    map.getKeys().forEach(testForEachKey);
+    map.keys.forEach(testForEachKey);
     verifyKeys(keysAfterBMove);
 
     clear();
-    map.getValues().forEach(testForEachValue);
+    map.values.forEach(testForEachValue);
     verifyValues(valuesAfterBMove);
 
     // Update.
@@ -99,11 +99,11 @@
     verifyValues(valuesAfterAUpdate);
 
     clear();
-    map.getKeys().forEach(testForEachKey);
+    map.keys.forEach(testForEachKey);
     verifyKeys(keysAfterBMove);
 
     clear();
-    map.getValues().forEach(testForEachValue);
+    map.values.forEach(testForEachValue);
     verifyValues(valuesAfterAUpdate);
   }
 }
diff --git a/tests/corelib/list_iterators_test.dart b/tests/corelib/list_iterators_test.dart
index 91421ff..6f29061 100644
--- a/tests/corelib/list_iterators_test.dart
+++ b/tests/corelib/list_iterators_test.dart
@@ -5,16 +5,16 @@
 class ListIteratorsTest {
   static void checkListIterator(List a) {
     Iterator it = a.iterator();
-    Expect.equals(false, it.hasNext() == a.isEmpty());
+    Expect.equals(false, it.hasNext == a.isEmpty);
     for (int i = 0; i < a.length; i++) {
-      Expect.equals(true, it.hasNext());
+      Expect.equals(true, it.hasNext);
       var elem = it.next();
     }
-    Expect.equals(false, it.hasNext());
+    Expect.equals(false, it.hasNext);
     bool exceptionCaught = false;
     try {
      var eleme = it.next();
-    } on NoMoreElementsException catch (e) {
+    } on StateError catch (e) {
      exceptionCaught = true;
     }
     Expect.equals(true, exceptionCaught);
@@ -31,11 +31,11 @@
     checkListIterator(g);
 
     Iterator it = g.iterator();
-    Expect.equals(true, it.hasNext());
+    Expect.equals(true, it.hasNext);
     g.removeLast();
-    Expect.equals(true, it.hasNext());
+    Expect.equals(true, it.hasNext);
     g.removeLast();
-    Expect.equals(false, it.hasNext());
+    Expect.equals(false, it.hasNext);
 
     g.addAll([10, 20]);
     int sum = 0;
diff --git a/tests/corelib/list_removeat_test.dart b/tests/corelib/list_removeat_test.dart
index 7010678..465f2f5 100644
--- a/tests/corelib/list_removeat_test.dart
+++ b/tests/corelib/list_removeat_test.dart
@@ -45,13 +45,13 @@
   var l2 = new List(5);
   for (var i = 0; i < 5; i++) l2[i] = i;
   Expect.throws(() { l2.removeAt(2); },
-                (e) => e is UnsupportedOperationException,
+                (e) => e is UnsupportedError,
                 "fixed-length");
 
   // Unmodifiable list.
   var l3 = const [0, 1, 2, 3, 4];
   Expect.throws(() { l3.removeAt(2); },
-                (e) => e is UnsupportedOperationException,
+                (e) => e is UnsupportedError,
                 "unmodifiable");
 
   // Empty list is not special.
diff --git a/tests/corelib/list_test.dart b/tests/corelib/list_test.dart
index 159c6d5..672504f 100644
--- a/tests/corelib/list_test.dart
+++ b/tests/corelib/list_test.dart
@@ -12,7 +12,7 @@
   static void expectValues(list, val1, val2, val3, val4) {
     Expect.equals(true, list.length == 4);
     Expect.equals(true, list.length == 4);
-    Expect.equals(true, !list.isEmpty());
+    Expect.equals(true, !list.isEmpty);
     Expect.equals(list[0], val1);
     Expect.equals(list[1], val2);
     Expect.equals(list[2], val3);
@@ -90,7 +90,7 @@
     var exception = null;
     try {
       list.clear();
-    } on UnsupportedOperationException catch (e) {
+    } on UnsupportedError catch (e) {
       exception = e;
     }
     Expect.equals(true, exception != null);
@@ -98,11 +98,11 @@
 
   static void testExpandableList() {
     List list = new List();
-    Expect.equals(true, list.isEmpty());
+    Expect.equals(true, list.isEmpty);
     Expect.equals(list.length, 0);
     list.add(4);
     Expect.equals(1, list.length);
-    Expect.equals(true, !list.isEmpty());
+    Expect.equals(true, !list.isEmpty);
     Expect.equals(list.length, 1);
     Expect.equals(list.length, 1);
     Expect.equals(list.removeLast(), 4);
@@ -139,7 +139,7 @@
     list.clear();
     Expect.equals(list.length, 0);
     Expect.equals(list.length, 0);
-    Expect.equals(true, list.isEmpty());
+    Expect.equals(true, list.isEmpty);
   }
 }
 
diff --git a/tests/corelib/map_from_test.dart b/tests/corelib/map_from_test.dart
index 4570214..00d1a60 100644
--- a/tests/corelib/map_from_test.dart
+++ b/tests/corelib/map_from_test.dart
@@ -16,8 +16,8 @@
   Expect.isTrue(otherMap is !LinkedHashMap);
 
   Expect.equals(2, otherMap.length);
-  Expect.equals(2, otherMap.getKeys().length);
-  Expect.equals(2, otherMap.getValues().length);
+  Expect.equals(2, otherMap.keys.length);
+  Expect.equals(2, otherMap.values.length);
 
   var count = (map) {
     int count = 0;
@@ -37,8 +37,8 @@
   Expect.isTrue(otherMap is !LinkedHashMap);
 
   Expect.equals(2, otherMap.length);
-  Expect.equals(2, otherMap.getKeys().length);
-  Expect.equals(2, otherMap.getValues().length);
+  Expect.equals(2, otherMap.keys.length);
+  Expect.equals(2, otherMap.values.length);
 
   int count(map) {
     int count = 0;
@@ -53,15 +53,15 @@
   map['c'] = 44;
   Expect.equals(3, map.length);
   Expect.equals(2, otherMap.length);
-  Expect.equals(2, otherMap.getKeys().length);
-  Expect.equals(2, otherMap.getValues().length);
+  Expect.equals(2, otherMap.keys.length);
+  Expect.equals(2, otherMap.values.length);
 
   // Test that adding to otherMap does not change the original map.
   otherMap['c'] = 44;
   Expect.equals(3, map.length);
   Expect.equals(3, otherMap.length);
-  Expect.equals(3, otherMap.getKeys().length);
-  Expect.equals(3, otherMap.getValues().length);
+  Expect.equals(3, otherMap.keys.length);
+  Expect.equals(3, otherMap.values.length);
 }
 
 testWithLinkedMap() {
@@ -71,7 +71,7 @@
   Expect.isTrue(otherMap is HashMap);
   Expect.isTrue(otherMap is LinkedHashMap);
   var i = 1;
-  for (var val in map.getValues()) {
+  for (var val in map.values) {
     Expect.equals(i++, val);
   }
 }
diff --git a/tests/corelib/map_test.dart b/tests/corelib/map_test.dart
index bbb6db4..4b44793 100644
--- a/tests/corelib/map_test.dart
+++ b/tests/corelib/map_test.dart
@@ -148,11 +148,11 @@
     other_map.clear();
     Expect.equals(0, other_map.length);
 
-    // Test Collection.getKeys.
+    // Test Collection.keys.
     void testForEachCollection(value) {
       other_map[value] = value;
     }
-    Collection keys = map.getKeys();
+    Collection keys = map.keys;
     keys.forEach(testForEachCollection);
     Expect.equals(true, other_map.containsKey(key1));
     Expect.equals(true, other_map.containsKey(key2));
@@ -166,8 +166,8 @@
     other_map.clear();
     Expect.equals(0, other_map.length);
 
-    // Test Collection.getValues.
-    Collection values = map.getValues();
+    // Test Collection.values.
+    Collection values = map.values;
     values.forEach(testForEachCollection);
     Expect.equals(true, !other_map.containsKey(key1));
     Expect.equals(true, !other_map.containsKey(key2));
@@ -211,7 +211,7 @@
     });
     Expect.equals(6, sum);
 
-    List values = m.getKeys();
+    List values = m.keys;
     Expect.equals(3, values.length);
     String first = values[0];
     String second = values[1];
diff --git a/tests/corelib/maps_test.dart b/tests/corelib/maps_test.dart
index b9abaa7..95b2e1d 100644
--- a/tests/corelib/maps_test.dart
+++ b/tests/corelib/maps_test.dart
@@ -106,7 +106,7 @@
   Expect.equals(true, other_map.containsValue(value2));
   Expect.equals(2, Maps.length(other_map));
 
-  // Test Collection.getValues.
+  // Test Collection.values.
   void testForEachCollection(value) {
     other_map[value] = value;
   }
diff --git a/tests/corelib/nan_infinity_test.dart b/tests/corelib/nan_infinity_test.dart
index 0bdb8cb..35bad82 100644
--- a/tests/corelib/nan_infinity_test.dart
+++ b/tests/corelib/nan_infinity_test.dart
@@ -5,12 +5,12 @@
 // Dart test program for testing NaN and Infinity.
 
 void main() {
-  Expect.isTrue(double.NAN.isNaN());
-  Expect.isFalse(double.NAN.isInfinite());
-  Expect.isFalse(double.INFINITY.isNaN());
-  Expect.isTrue(double.INFINITY.isInfinite());
-  Expect.isFalse(double.NEGATIVE_INFINITY.isNaN());
-  Expect.isTrue(double.NEGATIVE_INFINITY.isInfinite());
+  Expect.isTrue(double.NAN.isNaN);
+  Expect.isFalse(double.NAN.isInfinite);
+  Expect.isFalse(double.INFINITY.isNaN);
+  Expect.isTrue(double.INFINITY.isInfinite);
+  Expect.isFalse(double.NEGATIVE_INFINITY.isNaN);
+  Expect.isTrue(double.NEGATIVE_INFINITY.isInfinite);
   Expect.equals("NaN", double.NAN.toString());
   Expect.equals("Infinity", double.INFINITY.toString());
   Expect.equals("-Infinity", double.NEGATIVE_INFINITY.toString());
@@ -32,6 +32,6 @@
   Expect.isFalse(double.NEGATIVE_INFINITY > double.NAN);
   Expect.isFalse(double.INFINITY == double.NAN);
   Expect.isFalse(double.NEGATIVE_INFINITY == double.NAN);
-  Expect.isTrue((3.0 * double.NAN).isNaN());
+  Expect.isTrue((3.0 * double.NAN).isNaN);
   Expect.isTrue(double.INFINITY > double.NEGATIVE_INFINITY);
 }
diff --git a/tests/corelib/null_test.dart b/tests/corelib/null_test.dart
index 7879ac5..8f30e6c 100644
--- a/tests/corelib/null_test.dart
+++ b/tests/corelib/null_test.dart
@@ -15,7 +15,7 @@
   // These shouldn't throw.
   x.runtimeType;
   x.toString();
-  x.hashCode();
+  x.hashCode;
 
   // operator== is inherited from Object. It's the same as identical.
   // It's not really testable.
@@ -23,8 +23,6 @@
   Expect.isTrue(x == null);
 
   // Methods can be closurized and yields the same result.
-  var hc = x.hashCode;
-  Expect.equals(null.hashCode(), hc());
   var ts = x.toString;
   Expect.equals(null.toString(), ts());
 
diff --git a/tests/corelib/queue_iterator_test.dart b/tests/corelib/queue_iterator_test.dart
index 488192e..4f9ffff 100644
--- a/tests/corelib/queue_iterator_test.dart
+++ b/tests/corelib/queue_iterator_test.dart
@@ -10,11 +10,11 @@
   }
 
   static void testThrows(Iterator<int> it) {
-    Expect.equals(false, it.hasNext());
+    Expect.equals(false, it.hasNext);
     var exception = null;
     try {
       it.next();
-    } on NoMoreElementsException catch (e) {
+    } on StateError catch (e) {
       exception = e;
     }
     Expect.equals(true, exception != null);
@@ -22,7 +22,7 @@
 
   static int sum(int expected, Iterator<int> it) {
     int count = 0;
-    while (it.hasNext()) {
+    while (it.hasNext) {
       count += it.next();
     }
     Expect.equals(expected, count);
@@ -35,7 +35,7 @@
     queue.addLast(3);
 
     Iterator<int> it = queue.iterator();
-    Expect.equals(true, it.hasNext());
+    Expect.equals(true, it.hasNext);
     sum(6, it);
     testThrows(it);
   }
@@ -48,7 +48,7 @@
       queue.addLast(i);
     }
     Iterator<int> it = queue.iterator();
-    Expect.equals(true, it.hasNext());
+    Expect.equals(true, it.hasNext);
     sum(count, it);
     testThrows(it);
   }
@@ -56,7 +56,7 @@
   static void testEmptyQueue() {
     Queue<int> queue = new Queue<int>();
     Iterator<int> it = queue.iterator();
-    Expect.equals(false, it.hasNext());
+    Expect.equals(false, it.hasNext);
     sum(0, it);
     testThrows(it);
   }
diff --git a/tests/corelib/queue_test.dart b/tests/corelib/queue_test.dart
index c49f517..adaa00f 100644
--- a/tests/corelib/queue_test.dart
+++ b/tests/corelib/queue_test.dart
@@ -73,7 +73,7 @@
     var exception = null;
     try {
       queue.removeFirst();
-    } on EmptyQueueException catch (e) {
+    } on StateError catch (e) {
       exception = e;
     }
     Expect.equals(true, exception != null);
@@ -82,7 +82,7 @@
     exception = null;
     try {
       queue.removeLast();
-    } on EmptyQueueException catch (e) {
+    } on StateError catch (e) {
       exception = e;
     }
     Expect.equals(true, exception != null);
@@ -90,11 +90,11 @@
 
     queue.addFirst(1);
     queue.addFirst(2);
-    Expect.equals(2, queue.first());
-    Expect.equals(1, queue.last());
+    Expect.equals(2, queue.first);
+    Expect.equals(1, queue.last);
 
     queue.addLast(3);
-    Expect.equals(3, queue.last());
+    Expect.equals(3, queue.last);
     bool isGreaterThanOne(int value) {
       return (value > 1);
     }
diff --git a/tests/corelib/reg_exp5_test.dart b/tests/corelib/reg_exp5_test.dart
index 455d69b..17217a8 100644
--- a/tests/corelib/reg_exp5_test.dart
+++ b/tests/corelib/reg_exp5_test.dart
@@ -17,7 +17,7 @@
   Expect.equals(null, fm);
 
   Iterable<Match> am = new RegExp(r"^\w+$").allMatches(str);
-  Expect.isFalse(am.iterator().hasNext());
+  Expect.isFalse(am.iterator().hasNext);
 
   Expect.equals(null, new RegExp(r"^\w+$").stringMatch(str));
 }
diff --git a/tests/corelib/reg_exp_all_matches_test.dart b/tests/corelib/reg_exp_all_matches_test.dart
index efd5a5a..fb4616c 100644
--- a/tests/corelib/reg_exp_all_matches_test.dart
+++ b/tests/corelib/reg_exp_all_matches_test.dart
@@ -8,25 +8,25 @@
   static testIterator() {
     var matches = new RegExp("foo").allMatches("foo foo");
     Iterator it = matches.iterator();
-    Expect.equals(true, it.hasNext());
+    Expect.equals(true, it.hasNext);
     Expect.equals('foo', it.next().group(0));
-    Expect.equals(true, it.hasNext());
+    Expect.equals(true, it.hasNext);
     Expect.equals('foo', it.next().group(0));
-    Expect.equals(false, it.hasNext());
+    Expect.equals(false, it.hasNext);
 
     // Run two iterators over the same results.
     it = matches.iterator();
     Iterator it2 = matches.iterator();
-    Expect.equals(true, it.hasNext());
-    Expect.equals(true, it2.hasNext());
+    Expect.equals(true, it.hasNext);
+    Expect.equals(true, it2.hasNext);
     Expect.equals('foo', it.next().group(0));
     Expect.equals('foo', it2.next().group(0));
-    Expect.equals(true, it.hasNext());
-    Expect.equals(true, it2.hasNext());
+    Expect.equals(true, it.hasNext);
+    Expect.equals(true, it2.hasNext);
     Expect.equals('foo', it.next().group(0));
     Expect.equals('foo', it2.next().group(0));
-    Expect.equals(false, it.hasNext());
-    Expect.equals(false, it2.hasNext());
+    Expect.equals(false, it.hasNext);
+    Expect.equals(false, it2.hasNext);
   }
 
   static testForEach() {
@@ -87,9 +87,9 @@
 
   static testIsEmpty() {
     var matches = new RegExp("foo?").allMatches("foo fo foo fo");
-    Expect.equals(false, matches.isEmpty());
+    Expect.equals(false, matches.isEmpty);
     matches = new RegExp("fooo").allMatches("foo fo foo fo");
-    Expect.equals(true, matches.isEmpty());
+    Expect.equals(true, matches.isEmpty);
   }
 
   static testGetCount() {
diff --git a/tests/corelib/reg_exp_start_end_test.dart b/tests/corelib/reg_exp_start_end_test.dart
index 6bf9764..80b4634 100644
--- a/tests/corelib/reg_exp_start_end_test.dart
+++ b/tests/corelib/reg_exp_start_end_test.dart
@@ -8,10 +8,10 @@
   var it = matches.iterator();
   int start = 0;
   int end = 5;
-  while (it.hasNext()) {
+  while (it.hasNext) {
     Match match = it.next();
-    Expect.equals(start, match.start());
-    Expect.equals(end, match.end());
+    Expect.equals(start, match.start);
+    Expect.equals(end, match.end);
     start += 6;
     end += 6;
   }
diff --git a/tests/corelib/set_iterator_test.dart b/tests/corelib/set_iterator_test.dart
index 918d211..572f502 100644
--- a/tests/corelib/set_iterator_test.dart
+++ b/tests/corelib/set_iterator_test.dart
@@ -5,7 +5,7 @@
 class FixedHashCode {
   final int _hashCode;
   const FixedHashCode(this._hashCode);
-  int hashCode() { return _hashCode; }
+  int get hashCode { return _hashCode; }
 }
 
 class SetIteratorTest {
@@ -20,11 +20,11 @@
   }
 
   static void testThrows(Iterator<int> it) {
-    Expect.equals(false, it.hasNext());
+    Expect.equals(false, it.hasNext);
     var exception = null;
     try {
       it.next();
-    } on NoMoreElementsException catch (e) {
+    } on StateError catch (e) {
       exception = e;
     }
     Expect.equals(true, exception != null);
@@ -32,7 +32,7 @@
 
   static int sum(int expected, Iterator<int> it) {
     int count = 0;
-    while (it.hasNext()) {
+    while (it.hasNext) {
       count += it.next();
     }
     Expect.equals(expected, count);
@@ -45,7 +45,7 @@
     set.add(3);
 
     Iterator<int> it = set.iterator();
-    Expect.equals(true, it.hasNext());
+    Expect.equals(true, it.hasNext);
     sum(6, it);
     testThrows(it);
   }
@@ -58,7 +58,7 @@
       set.add(i);
     }
     Iterator<int> it = set.iterator();
-    Expect.equals(true, it.hasNext());
+    Expect.equals(true, it.hasNext);
     sum(count, it);
     testThrows(it);
   }
@@ -66,7 +66,7 @@
   static void testEmptySet() {
     Set<int> set = new Set<int>();
     Iterator<int> it = set.iterator();
-    Expect.equals(false, it.hasNext());
+    Expect.equals(false, it.hasNext);
     sum(0, it);
     testThrows(it);
   }
@@ -80,7 +80,7 @@
       set.remove(i);
     }
     Iterator<int> it = set.iterator();
-    Expect.equals(false, it.hasNext());
+    Expect.equals(false, it.hasNext);
     sum(0, it);
     testThrows(it);
 
@@ -91,7 +91,7 @@
       else count += i;
     }
     it = set.iterator();
-    Expect.equals(true, it.hasNext());
+    Expect.equals(true, it.hasNext);
     sum(count, it);
     testThrows(it);
   }
diff --git a/tests/corelib/set_test.dart b/tests/corelib/set_test.dart
index 59b8f13..79821b5 100644
--- a/tests/corelib/set_test.dart
+++ b/tests/corelib/set_test.dart
@@ -76,7 +76,7 @@
 
     // Test Set.filter.
     testFilter(int val) {
-      return val.isEven();
+      return val.isEven;
     }
 
     Set filtered = set.filter(testFilter);
diff --git a/tests/corelib/sort_test.dart b/tests/corelib/sort_test.dart
index a7cee14..5f18ecc 100644
--- a/tests/corelib/sort_test.dart
+++ b/tests/corelib/sort_test.dart
@@ -9,7 +9,7 @@
 
 main() {
   var compare = (a, b) => a.compareTo(b);
-  var sort = (list) => DualPivotQuicksort.sort(list, compare);
+  var sort = (list) => list.sort(compare);
   new SortHelper(sort, compare).run();
 
   compare = (a, b) => -a.compareTo(b);
diff --git a/tests/corelib/stopwatch_test.dart b/tests/corelib/stopwatch_test.dart
index e942ea8e..48141a3 100644
--- a/tests/corelib/stopwatch_test.dart
+++ b/tests/corelib/stopwatch_test.dart
@@ -12,36 +12,36 @@
     sw.start();
     for (int i = 0; i < 10000; i++) {
       parseInt(i.toString());
-      if (sw.elapsed() > 0) {
+      if (sw.elapsedTicks > 0) {
         break;
       }
     }
-    return sw.elapsed() > 0;
+    return sw.elapsedTicks > 0;
   }
 
   static bool checkStopping(Stopwatch sw) {
     sw.stop();
-    int v1 = sw.elapsed();
+    int v1 = sw.elapsedTicks;
     Expect.isTrue(v1 > 0);  // Expect a non-zero elapsed time.
     Stopwatch sw2 = new Stopwatch();  // Used for verification.
     sw2.start();
     int sw2LastElapsed = 0;
     for (int i = 0; i < 100000; i++) {
       parseInt(i.toString());
-      int v2 = sw.elapsed();
+      int v2 = sw.elapsedTicks;
       if (v1 != v2) {
         return false;
       }
       // If sw2 elapsed twice then sw must have advanced too if it wasn't
       // stopped.
-      if (sw2LastElapsed > 0 && sw2.elapsed() > sw2LastElapsed) {
+      if (sw2LastElapsed > 0 && sw2.elapsedTicks > sw2LastElapsed) {
         break;
       }
-      sw2LastElapsed = sw2.elapsed();
+      sw2LastElapsed = sw2.elapsedTicks;
     }
     // The test only makes sense if measureable time elapsed and elapsed time
     // on the stopped Stopwatch did not increase.
-    Expect.isTrue(sw2.elapsed() > 0);
+    Expect.isTrue(sw2.elapsedTicks > 0);
     return true;
   }
 
@@ -50,21 +50,21 @@
     sw.start();
     for (int i = 0; i < 100000; i++) {
       parseInt(i.toString());
-      if (sw.elapsed() > 0) {
+      if (sw.elapsedTicks > 0) {
         break;
       }
     }
     sw.stop();
-    int initial = sw.elapsed();
+    int initial = sw.elapsedTicks;
     sw.start();
     for (int i = 0; i < 100000; i++) {
       parseInt(i.toString());
-      if (sw.elapsed() > initial) {
+      if (sw.elapsedTicks > initial) {
         break;
       }
     }
     sw.stop();
-    Expect.isTrue(sw.elapsed() > initial);
+    Expect.isTrue(sw.elapsedTicks > initial);
   }
 
   static checkReset() {
@@ -72,29 +72,29 @@
     sw.start();
     for (int i = 0; i < 100000; i++) {
       parseInt(i.toString());
-      if (sw.elapsed() > 0) {
+      if (sw.elapsedTicks > 0) {
         break;
       }
     }
     sw.stop();
     sw.reset();
-    Expect.equals(0, sw.elapsed());
+    Expect.equals(0, sw.elapsedTicks);
     sw.start();
     for (int i = 0; i < 100000; i++) {
       parseInt(i.toString());
-      if (sw.elapsed() > 0) {
+      if (sw.elapsedTicks > 0) {
         break;
       }
     }
     sw.reset();
     for (int i = 0; i < 100000; i++) {
       parseInt(i.toString());
-      if (sw.elapsed() > 0) {
+      if (sw.elapsedTicks > 0) {
         break;
       }
     }
     sw.stop();
-    Expect.isTrue(sw.elapsed() > 0);
+    Expect.isTrue(sw.elapsedTicks > 0);
   }
 
   static testMain() {
diff --git a/tests/corelib/string_buffer_test.dart b/tests/corelib/string_buffer_test.dart
index 94b941c..fac6560 100644
--- a/tests/corelib/string_buffer_test.dart
+++ b/tests/corelib/string_buffer_test.dart
@@ -7,7 +7,7 @@
 class StringBufferTest {
   static testConstructor() {
     StringBuffer bf = new StringBuffer("");
-    Expect.equals(true, bf.isEmpty());
+    Expect.equals(true, bf.isEmpty);
 
     bf = new StringBuffer("abc");
     Expect.equals(3, bf.length);
@@ -16,7 +16,7 @@
 
   static testAdd() {
     StringBuffer bf = new StringBuffer("");
-    Expect.equals(true, bf.isEmpty());
+    Expect.equals(true, bf.isEmpty);
 
     bf.add("a");
     Expect.equals(1, bf.length);
@@ -80,9 +80,9 @@
 
   static testIsEmpty() {
     StringBuffer bf = new StringBuffer("");
-    Expect.equals(true, bf.isEmpty());
+    Expect.equals(true, bf.isEmpty);
     bf.add("foo");
-    Expect.equals(false, bf.isEmpty());
+    Expect.equals(false, bf.isEmpty);
   }
 
   static testAddAll() {
diff --git a/tests/corelib/string_pattern_test.dart b/tests/corelib/string_pattern_test.dart
index 3fb3533..440855d 100644
--- a/tests/corelib/string_pattern_test.dart
+++ b/tests/corelib/string_pattern_test.dart
@@ -18,7 +18,7 @@
   // Also tests that RegExp groups don't work.
   String helloPattern = "with (hello)";
   Iterable<Match> matches = helloPattern.allMatches(str);
-  Expect.isFalse(matches.iterator().hasNext());
+  Expect.isFalse(matches.iterator().hasNext);
 }
 
 testOneMatch() {
@@ -26,13 +26,13 @@
   Iterable<Match> matches = helloPattern.allMatches(str);
   var iterator = matches.iterator();
   Match match = iterator.next();
-  Expect.isFalse(iterator.hasNext());
-  Expect.equals(str.indexOf('with', 0), match.start());
-  Expect.equals(str.indexOf('with', 0) + helloPattern.length, match.end());
+  Expect.isFalse(iterator.hasNext);
+  Expect.equals(str.indexOf('with', 0), match.start);
+  Expect.equals(str.indexOf('with', 0) + helloPattern.length, match.end);
   Expect.equals(helloPattern, match.pattern);
   Expect.equals(str, match.str);
   Expect.equals(helloPattern, match[0]);
-  Expect.equals(0, match.groupCount());
+  Expect.equals(0, match.groupCount);
 }
 
 testTwoMatches() {
@@ -43,14 +43,14 @@
   int start = 0;
   for (var match in matches) {
     count++;
-    Expect.equals(str.indexOf('hello', start), match.start());
+    Expect.equals(str.indexOf('hello', start), match.start);
     Expect.equals(
-        str.indexOf('hello', start) + helloPattern.length, match.end());
+        str.indexOf('hello', start) + helloPattern.length, match.end);
     Expect.equals(helloPattern, match.pattern);
     Expect.equals(str, match.str);
     Expect.equals(helloPattern, match[0]);
-    Expect.equals(0, match.groupCount());
-    start = match.end();
+    Expect.equals(0, match.groupCount);
+    start = match.end;
   }
   Expect.equals(2, count);
 }
@@ -58,19 +58,19 @@
 testEmptyPattern() {
   String pattern = "";
   Iterable<Match> matches = pattern.allMatches(str);
-  Expect.isTrue(matches.iterator().hasNext());
+  Expect.isTrue(matches.iterator().hasNext);
 }
 
 testEmptyString() {
   String pattern = "foo";
   String str = "";
   Iterable<Match> matches = pattern.allMatches(str);
-  Expect.isFalse(matches.iterator().hasNext());
+  Expect.isFalse(matches.iterator().hasNext);
 }
 
 testEmptyPatternAndString() {
   String pattern = "";
   String str = "";
   Iterable<Match> matches = pattern.allMatches(str);
-  Expect.isTrue(matches.iterator().hasNext());
+  Expect.isTrue(matches.iterator().hasNext);
 }
diff --git a/tests/corelib/string_test.dart b/tests/corelib/string_test.dart
index 786a9cf..0dd8e54 100644
--- a/tests/corelib/string_test.dart
+++ b/tests/corelib/string_test.dart
@@ -284,7 +284,7 @@
 
   static testCharCodes() {
     test(str) {
-      var list = str.charCodes();
+      var list = str.charCodes;
       Expect.equals(str.length, list.length);
       for (int i = 0; i < str.length; i++) {
         Expect.equals(str.charCodeAt(i), list[i]);
diff --git a/tests/html/canvas_pixel_array_type_alias_test.dart b/tests/html/canvas_pixel_array_type_alias_test.dart
index 8ef7565..5560d9f 100644
--- a/tests/html/canvas_pixel_array_type_alias_test.dart
+++ b/tests/html/canvas_pixel_array_type_alias_test.dart
@@ -31,7 +31,6 @@
     Uint8ClampedArray data = image.data;
     // It is legal for the dart2js compiler to believe the type of the native
     // ImageData.data and elides the check, so check the type explicitly:
-    // OPTIONALS expect(confuseType(data) is Uint8ClampedArray, reason: 'canvas array type');
     expect(confuseType(data) is Uint8ClampedArray, isTrue, 'canvas array type');
 
     expect(data, hasLength(40000));
diff --git a/tests/html/documentfragment_test.dart b/tests/html/documentfragment_test.dart
index fbbd642..b312cf6 100644
--- a/tests/html/documentfragment_test.dart
+++ b/tests/html/documentfragment_test.dart
@@ -28,7 +28,7 @@
     try {
       fn();
     } catch (e) {
-      if (e is IllegalAccessException || e is UnsupportedOperationException) {
+      if (e is UnsupportedError) {
         return;
       }
     }
@@ -117,7 +117,7 @@
     test('is initially empty', () {
       elements = new DocumentFragment().elements;
       Expect.listEquals([], elements);
-      Expect.isTrue(elements.isEmpty());
+      Expect.isTrue(elements.isEmpty);
     });
 
     test('filters out non-element nodes', () {
@@ -163,10 +163,10 @@
           ["I"], _nodeStrings(elements.filter((e) => e.tagName == "I")));
       Expect.isTrue(elements.every((e) => e is Element));
       Expect.isTrue(elements.some((e) => e.tagName == "U"));
-      Expect.isFalse(elements.isEmpty());
+      Expect.isFalse(elements.isEmpty);
       Expect.equals(4, elements.length);
       Expect.equals("I", elements[2].tagName);
-      Expect.equals("U", elements.last().tagName);
+      Expect.equals("U", elements.last.tagName);
     });
 
     test('setting elements overwrites nodes as well', () {
@@ -298,7 +298,7 @@
        expectEmptyRect(rect.offset);
        expectEmptyRect(rect.scroll);
        expectEmptyRect(rect.bounding);
-       Expect.isTrue(rect.clientRects.isEmpty());
+       Expect.isTrue(rect.clientRects.isEmpty);
     }));
     Expect.equals("false", fragment.contentEditable);
     Expect.equals(-1, fragment.tabIndex);
@@ -316,9 +316,9 @@
     Expect.isNull(fragment.previousElementSibling);
     Expect.isNull(fragment.offsetParent);
     Expect.isNull(fragment.parent);
-    Expect.isTrue(fragment.attributes.isEmpty());
-    Expect.isTrue(fragment.classes.isEmpty());
-    Expect.isTrue(fragment.dataAttributes.isEmpty());
+    Expect.isTrue(fragment.attributes.isEmpty);
+    Expect.isTrue(fragment.classes.isEmpty);
+    Expect.isTrue(fragment.dataAttributes.isEmpty);
     Expect.isFalse(fragment.matchesSelector("foo"));
     Expect.isFalse(fragment.matchesSelector("*"));
   });
diff --git a/tests/html/element_classes_test.dart b/tests/html/element_classes_test.dart
index e4a8d50..5dd611c 100644
--- a/tests/html/element_classes_test.dart
+++ b/tests/html/element_classes_test.dart
@@ -89,8 +89,8 @@
   });
 
   test('isEmpty', () {
-    Expect.isFalse(makeClassSet().isEmpty());
-    Expect.isTrue(makeElement().classes.isEmpty());
+    Expect.isFalse(makeClassSet().isEmpty);
+    Expect.isTrue(makeElement().classes.isEmpty);
   });
 
   test('length', () {
diff --git a/tests/html/element_test.dart b/tests/html/element_test.dart
index 2448b83..511eef7 100644
--- a/tests/html/element_test.dart
+++ b/tests/html/element_test.dart
@@ -497,7 +497,7 @@
 
     test('last', () {
       var el = makeElementWithChildren();
-      Expect.isTrue(el.elements.last() is InputElement);
+      Expect.isTrue(el.elements.last is InputElement);
     });
 
     test('forEach', () {
@@ -530,8 +530,8 @@
     });
 
     test('isEmpty', () {
-      Expect.isTrue(makeElement().elements.isEmpty());
-      Expect.isFalse(makeElementWithChildren().elements.isEmpty());
+      Expect.isTrue(makeElement().elements.isEmpty);
+      Expect.isFalse(makeElementWithChildren().elements.isEmpty);
     });
 
     test('length', () {
@@ -557,13 +557,13 @@
     test('add', () {
       var el = makeElement();
       el.elements.add(new Element.tag('hr'));
-      Expect.isTrue(el.elements.last() is HRElement);
+      Expect.isTrue(el.elements.last is HRElement);
     });
 
     test('addLast', () {
       var el = makeElement();
       el.elements.addLast(new Element.tag('hr'));
-      Expect.isTrue(el.elements.last() is HRElement);
+      Expect.isTrue(el.elements.last is HRElement);
     });
 
     test('iterator', () {
@@ -631,12 +631,12 @@
 
     void testUnsupported(String name, void f()) {
       test(name, () {
-        Expect.throws(f, (e) => e is UnsupportedOperationException);
+        Expect.throws(f, (e) => e is UnsupportedError);
       });
     }
 
     test('last', () {
-      Expect.isTrue(getQueryAll().last() is HRElement);
+      Expect.isTrue(getQueryAll().last is HRElement);
     });
 
     test('forEach', () {
@@ -672,8 +672,8 @@
     });
 
     test('isEmpty', () {
-      Expect.isTrue(getEmptyQueryAll().isEmpty());
-      Expect.isFalse(getQueryAll().isEmpty());
+      Expect.isTrue(getEmptyQueryAll().isEmpty);
+      Expect.isFalse(getQueryAll().isEmpty);
     });
 
     test('length', () {
diff --git a/tests/html/fileapi_test.dart b/tests/html/fileapi_test.dart
index f753b01..82aad86 100644
--- a/tests/html/fileapi_test.dart
+++ b/tests/html/fileapi_test.dart
@@ -25,7 +25,6 @@
   group('getDirectory', () {
 
     test('directoryDoesntExist', () {
-      /* OPTIONALS
       fs.root.getDirectory(
           'directory2',
           options: {},
@@ -35,20 +34,9 @@
           errorCallback: expectAsync1((FileError e) {
             expect(e.code, equals(FileError.NOT_FOUND_ERR));
           }));
-      */
-      fs.root.getDirectory(
-          'directory2',
-          {},
-          (e) {
-            fail('Should not be reached');
-          },
-          expectAsync1((FileError e) {
-            expect(e.code, equals(FileError.NOT_FOUND_ERR));
-          }));
     });
 
     test('directoryCreate', () {
-      /* OPTIONALS
       fs.root.getDirectory(
           'directory3',
           options: {'create': true},
@@ -58,23 +46,12 @@
           errorCallback: (e) {
             fail('Got file error: ${e.code}');
           });
-      */
-      fs.root.getDirectory(
-          'directory3',
-          {'create': true},
-          expectAsync1((DirectoryEntry e) {
-            expect(e.name, equals('directory3'));
-          }),
-          (e) {
-            fail('Got file error: ${e.code}');
-          });
     });
   });
 
   group('getFile', () {
 
     test('fileDoesntExist', () {
-      /* OPTIONALS
       fs.root.getFile(
           'file2',
           options: {},
@@ -84,20 +61,9 @@
           errorCallback: expectAsync1((FileError e) {
             expect(e.code, equals(FileError.NOT_FOUND_ERR));
           }));
-      */
-      fs.root.getFile(
-          'file2',
-          {},
-          (e) {
-            fail('Should not be reached');
-          },
-          expectAsync1((FileError e) {
-            expect(e.code, equals(FileError.NOT_FOUND_ERR));
-          }));
     });
 
     test('fileCreate', () {
-      /* OPTIONALS
       fs.root.getFile(
           'file4',
           options: {'create': true},
@@ -109,17 +75,5 @@
             fail('Got file error: ${e.code}');
           });
       });
-      */
-      fs.root.getFile(
-          'file4',
-          {'create': true},
-          expectAsync1((FileEntry e) {
-            expect(e.name, equals('file4'));
-            expect(e.isFile, equals(true));
-          }),
-          (e) {
-            fail('Got file error: ${e.code}');
-          });
-      });
   });
 }
diff --git a/tests/html/html.status b/tests/html/html.status
index a02e9cf..5f77f84 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -44,16 +44,55 @@
 [ $compiler == none && $runtime == drt && $system == linux]
 documentfragment_test: Pass, Timeout
 
-[ $runtime == ie9 || $runtime == safari || $runtime == ff || $runtime == chrome || $runtime == opera ]
+[ $runtime == ie9 || $runtime == ie10 || $runtime == safari || $runtime == ff || $runtime == chrome || $runtime == opera ]
 # TODO(vsm): Triage DOM tests.
 htmloptionscollection_test: Fail # Issue 3813.
 shadow_dom_test: Skip # No ShadowDOM support except on tip dartium.
 shadow_dom_layout_test: Skip
 unknownelement_test: Fail # Issue 4189
 
-[ $runtime == dartium || $runtime == chrome || $runtime == ie9 || $runtime == safari || $runtime == ff || $runtime == opera ]
+[ $runtime == dartium || $runtime == chrome || $runtime == ie9 || $runtime == ie10 || $runtime == safari || $runtime == ff || $runtime == opera ]
 history_test: Fail
 
+[$runtime == ie10 ]
+# TODO(efortuna, blois): Triage.
+audiobuffersourcenode_test: Fail
+audiocontext_test: Fail
+canvasrenderingcontext2d_test: Fail, Pass
+contentelement_test: Fail
+css_test: Fail
+element_test: Fail
+element_webkit_test: Fail
+exceptions_test: Fail
+fileapi_test: Fail
+indexeddb_1_test: Fail
+indexeddb_2_test: Fail
+indexeddb_3_test: Fail
+indexeddb_4_test: Fail
+inner_frame_test: Skip
+isolates_test: Skip
+js_interop_2_test: Fail
+js_interop_3_test: Fail
+js_interop_4_test: Fail
+localstorage_test: Fail
+measurement_test: Fail, Pass
+messageevent_test: Fail
+mutationobserver_test: Fail
+node_test: Fail
+serialized_script_value_test: Fail
+storage_test: Fail, Pass
+svgelement2_test: Fail
+svgelement_test: Fail
+svg_3_test: Fail
+typed_arrays_1_test: Fail
+typed_arrays_arraybuffer_test: Fail
+typed_arrays_dataview_test: Fail
+url_test: Fail
+websql_test: Fail
+window_open_test: Skip
+xhr_test: Fail
+xsltprocessor_test: Fail
+
 [ $runtime == ie9 ]
 contentelement_test: Fail   # ie9 does not support content element.
 form_data_test: Fail # Issue 4793.
@@ -146,6 +185,49 @@
 svgelement_test: Fail
 url_test: Fail
 
+[ $runtime == opera && $system == windows ]
+element_test: Skip # Browser is already closed by the time we get results?
+htmlelement_test: Fail, Pass
+
+[ $runtime == opera && $system == macos ]
+element_test: Crash
+
+[ $runtime == opera ]
+audiobuffersourcenode_test: Fail
+cache_test: Fail
+canvas_test: Pass,Fail
+contentelement_test: Fail
+audiocontext_test: Fail
+blob_constructor_test: Fail
+canvas_using_html_test: Fail
+canvas_test: Fail
+css_test: Fail
+cssstyledeclaration_test: Fail
+element_add_test: Fail
+element_constructor_1_test: Fail
+element_webkit_test: Fail
+exceptions_test: Fail
+indexeddb_1_test: Fail
+indexeddb_2_test: Fail
+indexeddb_3_test: Fail
+indexeddb_4_test: Fail
+mutationobserver_test: Fail
+performance_api_test: Fail
+serialized_script_value_test: Fail
+svg_3_test: Fail
+svgelement_test: Fail
+svgelement2_test: Fail
+typed_arrays_1_test: Fail
+typed_arrays_arraybuffer_test: Fail
+url_test: Fail
+websocket_test: Fail
+fileapi_test: Skip # Timeout.
+inner_frame_test: Skip # Timeout.
+js_interop_3_test: Skip # Timeout.
+js_interop_4_test: Skip # Timeout.
+isolates_test: Skip # Timeout.
+websql_test: Skip # Timeout.
+
 [ $runtime == ff ]
 audiobuffersourcenode_test: Fail # FF only has Audio element.
 audiocontext_test: Fail      # FF only has Audio element
@@ -188,8 +270,6 @@
 *: Skip
 
 # TODO(jmesserly): now that we have a bot, we need to set up Opera testing.
-[ $runtime == opera ]
-*: Skip
 
 [ $compiler == dart2js && $runtime == drt ]
 # Unknown error - should investigate.
diff --git a/tests/html/htmlcollection_test.dart b/tests/html/htmlcollection_test.dart
index 0a9d0b2..e7cc4d1 100644
--- a/tests/html/htmlcollection_test.dart
+++ b/tests/html/htmlcollection_test.dart
@@ -130,8 +130,8 @@
     Expect.equals(4, someChecked.length);
     Expect.equals(0, emptyDiv.length);
 
-    Expect.isFalse(someChecked.isEmpty());
-    Expect.isTrue(emptyDiv.isEmpty());
+    Expect.isFalse(someChecked.isEmpty);
+    Expect.isTrue(emptyDiv.isEmpty);
 
     root.remove();
   });
@@ -211,7 +211,7 @@
 
     Expect.equals(4, someChecked.length);
 
-    Expect.equals(someChecked[3], someChecked.last());
+    Expect.equals(someChecked[3], someChecked.last);
 
     root.remove();
   });
diff --git a/tests/html/htmlelement_test.dart b/tests/html/htmlelement_test.dart
index 36e7e75..ba83071 100644
--- a/tests/html/htmlelement_test.dart
+++ b/tests/html/htmlelement_test.dart
@@ -32,13 +32,13 @@
   test('dataAttributes', () {
     Element div = new Element.tag('div');
 
-    Expect.isTrue(div.dataAttributes.isEmpty());
+    Expect.isTrue(div.dataAttributes.isEmpty);
     Expect.equals(null, div.dataAttributes['foo']);
-    Expect.isTrue(div.dataAttributes.isEmpty());
+    Expect.isTrue(div.dataAttributes.isEmpty);
 
     div.dataAttributes['foo'] = 'foo-value';
     Expect.equals('foo-value', div.dataAttributes['foo']);
-    Expect.isFalse(div.dataAttributes.isEmpty());
+    Expect.isFalse(div.dataAttributes.isEmpty);
 
     Expect.isTrue(div.dataAttributes.containsValue('foo-value'));
     Expect.isFalse(div.dataAttributes.containsValue('bar-value'));
@@ -69,23 +69,23 @@
     Expect.setEquals(const <String> ['foo-value', 'bar-value'], values);
 
     Expect.setEquals(const <String> ['foo', 'bar'],
-                     new List<String>.from(div.dataAttributes.getKeys()));
+                     new List<String>.from(div.dataAttributes.keys));
     Expect.setEquals(const <String> ['foo-value', 'bar-value'],
-                     new List<String>.from(div.dataAttributes.getValues()));
+                     new List<String>.from(div.dataAttributes.values));
 
     Expect.equals(2, div.dataAttributes.length);
-    Expect.isFalse(div.dataAttributes.isEmpty());
+    Expect.isFalse(div.dataAttributes.isEmpty);
 
     Expect.isNull(div.dataAttributes.remove('qux'));
     Expect.equals(2, div.dataAttributes.length);
-    Expect.isFalse(div.dataAttributes.isEmpty());
+    Expect.isFalse(div.dataAttributes.isEmpty);
 
     Expect.equals('foo-value', div.dataAttributes.remove('foo'));
     Expect.equals(1, div.dataAttributes.length);
-    Expect.isFalse(div.dataAttributes.isEmpty());
+    Expect.isFalse(div.dataAttributes.isEmpty);
 
     div.dataAttributes.clear();
     Expect.equals(0, div.dataAttributes.length);
-    Expect.isTrue(div.dataAttributes.isEmpty());
+    Expect.isTrue(div.dataAttributes.isEmpty);
   });
 }
diff --git a/tests/html/js_interop_3_test.dart b/tests/html/js_interop_3_test.dart
index 0894c3b..c8ab351 100644
--- a/tests/html/js_interop_3_test.dart
+++ b/tests/html/js_interop_3_test.dart
@@ -31,7 +31,7 @@
       Expect.equals('Hello', message['a']);
       Expect.equals('World', message['b']);
       Expect.equals(42, message['c']);
-      Expect.equals(3, message.getKeys().length);
+      Expect.equals(3, message.keys.length);
       return 42;
     };
 
diff --git a/tests/html/localstorage_test.dart b/tests/html/localstorage_test.dart
index 5700183..38e4204 100644
--- a/tests/html/localstorage_test.dart
+++ b/tests/html/localstorage_test.dart
@@ -87,12 +87,12 @@
   });
 
   testWithLocalStorage('getKeys', () {
-    Expect.setEquals(['key1', 'key2', 'key3'], window.localStorage.getKeys());
+    Expect.setEquals(['key1', 'key2', 'key3'], window.localStorage.keys);
   });
 
   testWithLocalStorage('getVals', () {
     Expect.setEquals(['val1', 'val2', 'val3'],
-        window.localStorage.getValues());
+        window.localStorage.values);
   });
 
   testWithLocalStorage('length', () {
@@ -102,8 +102,8 @@
   });
 
   testWithLocalStorage('isEmpty', () {
-    Expect.isFalse(window.localStorage.isEmpty());
+    Expect.isFalse(window.localStorage.isEmpty);
     window.localStorage.clear();
-    Expect.isTrue(window.localStorage.isEmpty());
+    Expect.isTrue(window.localStorage.isEmpty);
   });
 }
diff --git a/tests/html/node_test.dart b/tests/html/node_test.dart
index 44bd28e..80ab9a9 100644
--- a/tests/html/node_test.dart
+++ b/tests/html/node_test.dart
@@ -56,7 +56,7 @@
 
     test('last', () {
       var node = makeNodeWithChildren();
-      Expect.isTrue(node.nodes.last() is Comment);
+      Expect.isTrue(node.nodes.last is Comment);
     });
 
     test('forEach', () {
@@ -88,8 +88,8 @@
     });
 
     test('isEmpty', () {
-      Expect.isTrue(makeNode().nodes.isEmpty());
-      Expect.isFalse(makeNodeWithChildren().nodes.isEmpty());
+      Expect.isTrue(makeNode().nodes.isEmpty);
+      Expect.isFalse(makeNodeWithChildren().nodes.isEmpty);
     });
 
     test('length', () {
@@ -115,13 +115,13 @@
     test('add', () {
       var node = makeNode();
       node.nodes.add(new Element.tag('hr'));
-      Expect.isTrue(node.nodes.last() is HRElement);
+      Expect.isTrue(node.nodes.last is HRElement);
     });
 
     test('addLast', () {
       var node = makeNode();
       node.nodes.addLast(new Element.tag('hr'));
-      Expect.isTrue(node.nodes.last() is HRElement);
+      Expect.isTrue(node.nodes.last is HRElement);
     });
 
     test('iterator', () {
diff --git a/tests/html/query_test.dart b/tests/html/query_test.dart
index c7e936e..6abae94 100644
--- a/tests/html/query_test.dart
+++ b/tests/html/query_test.dart
@@ -48,6 +48,6 @@
 
   test('queryAll (None)', () {
       List l = queryAll('video');
-      Expect.isTrue(l.isEmpty());
+      Expect.isTrue(l.isEmpty);
     });
 }
diff --git a/tests/html/queryall_test.dart b/tests/html/queryall_test.dart
index 6b70157..181f5c3 100644
--- a/tests/html/queryall_test.dart
+++ b/tests/html/queryall_test.dart
@@ -76,7 +76,7 @@
   test('immutable', () {
       List<Element> list = div.queryAll('*');
       int len = list.length;
-      expect(() { list.add(new DivElement()); }, throwsException);
+      expect(() { list.add(new DivElement()); }, throwsUnsupportedError);
       expect(list.length, equals(len));
     });
 }
diff --git a/tests/html/selectelement_test.dart b/tests/html/selectelement_test.dart
index 2a766c3..4adb45f 100644
--- a/tests/html/selectelement_test.dart
+++ b/tests/html/selectelement_test.dart
@@ -53,6 +53,6 @@
     ];
     element.elements.addAll(options);
     // Use last to make sure that the list was correctly wrapped.
-    expect(element.options.last(), options[3]);
+    expect(element.options.last, options[3]);
   });
 }
diff --git a/tests/html/typed_arrays_dataview_test.dart b/tests/html/typed_arrays_dataview_test.dart
index 08029d8..2a486f0 100644
--- a/tests/html/typed_arrays_dataview_test.dart
+++ b/tests/html/typed_arrays_dataview_test.dart
@@ -37,18 +37,12 @@
       expect(dv.byteLength, equals(10 - 2));
 
       expect(dv.getInt16(0), equals(1023));
-      expect(dv.getInt16(0, false), equals(1023));
-      // OPTIONALS expect(dv.getInt16(0, littleEndian: false), equals(1023));
-      expect(dv.getInt16(0, false), equals(1023));
-      expect(dv.getInt16(0, true), equals(-253));
-      // OPTIONALS expect(dv.getInt16(0, littleEndian: true), equals(-253));
-      expect(dv.getInt16(0, true), equals(-253));
+      expect(dv.getInt16(0, littleEndian: false), equals(1023));
+      expect(dv.getInt16(0, littleEndian: true), equals(-253));
 
       expect(dv.getUint16(0), equals(1023));
-      // OPTIONALS expect(dv.getUint16(0, littleEndian: false), equals(1023));
-      expect(dv.getUint16(0, false), equals(1023));
-      // OPTIONALS expect(dv.getUint16(0, littleEndian: true), equals(0xFF03));
-      expect(dv.getUint16(0, true), equals(0xFF03));
+      expect(dv.getUint16(0, littleEndian: false), equals(1023));
+      expect(dv.getUint16(0, littleEndian: true), equals(0xFF03));
 
       dv.setInt16(2, -1);
       expect(dv.getInt16(2), equals(-1));
@@ -61,18 +55,12 @@
       var dv = new DataView(a1.buffer);
 
       expect(dv.getInt32(0), equals(1023));
-      expect(dv.getInt32(0, false), equals(1023));
-      // OPTIONALS expect(dv.getInt32(0, littleEndian: false), equals(1023));
-      expect(dv.getInt32(0, false), equals(1023));
-      expect(dv.getInt32(0, true), equals(-0xFD0000));
-      // OPTIONALS expect(dv.getInt32(0, littleEndian: true), equals(-0xFD0000));
-      expect(dv.getInt32(0, true), equals(-0xFD0000));
+      expect(dv.getInt32(0, littleEndian: false), equals(1023));
+      expect(dv.getInt32(0, littleEndian: true), equals(-0xFD0000));
 
       expect(dv.getUint32(0), equals(1023));
-      // OPTIONALS expect(dv.getUint32(0, littleEndian: false), equals(1023));
-      expect(dv.getUint32(0, false), equals(1023));
-      // OPTIONALS expect(dv.getUint32(0, littleEndian: true), equals(0xFF030000));
-      expect(dv.getUint32(0, true), equals(0xFF030000));
+      expect(dv.getUint32(0, littleEndian: false), equals(1023));
+      expect(dv.getUint32(0, littleEndian: true), equals(0xFF030000));
   });
 
 }
diff --git a/tests/html/util.dart b/tests/html/util.dart
index 22d2c74..511a576 100644
--- a/tests/html/util.dart
+++ b/tests/html/util.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 void expectUnsupported(void fn()) =>
-  Expect.throws(fn, (e) => e is UnsupportedOperationException);
+  Expect.throws(fn, (e) => e is UnsupportedError);
 
 void expectEmptyRect(ClientRect rect) {
   Expect.equals(0, rect.bottom);
diff --git a/tests/html/utils.dart b/tests/html/utils.dart
index 8b2dc98..2c07fcf 100644
--- a/tests/html/utils.dart
+++ b/tests/html/utils.dart
@@ -48,13 +48,13 @@
 
     if (expected is Map) {
       Expect.isTrue(actual is Map, message(path, '$actual is Map'));
-      for (var key in expected.getKeys()) {
+      for (var key in expected.keys) {
         if (!actual.containsKey(key)) {
           Expect.fail(message(path, 'missing key "$key"'));
         }
         walk('$path["$key"]',  expected[key], actual[key]);
       }
-      for (var key in actual.getKeys()) {
+      for (var key in actual.keys) {
         if (!expected.containsKey(key)) {
           Expect.fail(message(path, 'extra key "$key"'));
         }
diff --git a/tests/html/xmldocument_test.dart b/tests/html/xmldocument_test.dart
index 3dba45e..dccf15b 100644
--- a/tests/html/xmldocument_test.dart
+++ b/tests/html/xmldocument_test.dart
@@ -121,8 +121,8 @@
     });
 
     test('isEmpty', () {
-      Expect.isFalse(makeClassSet().isEmpty());
-      Expect.isTrue(makeDocument().classes.isEmpty());
+      Expect.isFalse(makeClassSet().isEmpty);
+      Expect.isTrue(makeDocument().classes.isEmpty);
     });
 
     test('length', () {
@@ -534,7 +534,7 @@
         expectEmptyRect(rect.offset);
         expectEmptyRect(rect.scroll);
         expectEmptyRect(rect.bounding);
-        Expect.isTrue(rect.clientRects.isEmpty());
+        Expect.isTrue(rect.clientRects.isEmpty);
       }));
     });
 
diff --git a/tests/html/xmlelement_test.dart b/tests/html/xmlelement_test.dart
index d3b1437..1518673 100644
--- a/tests/html/xmlelement_test.dart
+++ b/tests/html/xmlelement_test.dart
@@ -136,8 +136,8 @@
     });
 
     test('isEmpty', () {
-      Expect.isFalse(makeClassSet().isEmpty());
-      Expect.isTrue(makeElement().classes.isEmpty());
+      Expect.isFalse(makeClassSet().isEmpty);
+      Expect.isTrue(makeElement().classes.isEmpty);
     });
 
     test('length', () {
@@ -570,7 +570,7 @@
         expectEmptyRect(rect.offset);
         expectEmptyRect(rect.scroll);
         expectEmptyRect(rect.bounding);
-        Expect.isTrue(rect.clientRects.isEmpty());
+        Expect.isTrue(rect.clientRects.isEmpty);
       }));
   });
 }
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 6b2bcb4..0fdc16c 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -58,9 +58,14 @@
 [ $runtime == safari && ($system == linux || $system == windows) ]
 *: Skip
 
-# TODO(jmesserly): now that we have a bot, we need to set up Opera testing.
 [ $runtime == opera ]
-*: Skip
+multiple_timer_test: Pass, Fail
+isolate2_negative_test: Skip # Timeout.
+unresolved_ports_negative_test: Skip # Timeout.
+
+[ $runtime == opera && $system == windows]
+# TODO(efortuna): Investigate.
+timer_test: Fail, Pass
 
 [ $arch == simarm ]
 *: Skip
@@ -76,7 +81,7 @@
 timer_not_available_test: Fail, OK # only meant to test when there is no way to
                                    # implement timer (currently only in d8)
 
-[ $compiler == dart2js && $runtime == d8 ]
+[ $compiler == dart2js && $jscl ]
 multiple_timer_test: Fail,OK # Needs Timer to run.
 spawn_uri_negative_test: Pass # for the wrong reasons (not supported in d8)
 spawn_uri_test: Fail, OK # loading another file is not supported in d8
diff --git a/tests/isolate/port_test.dart b/tests/isolate/port_test.dart
index 56563ee..02ea365 100644
--- a/tests/isolate/port_test.dart
+++ b/tests/isolate/port_test.dart
@@ -19,8 +19,8 @@
 void testHashCode() {
   ReceivePort rp0 = new ReceivePort();
   ReceivePort rp1 = new ReceivePort();
-  Expect.equals(rp0.toSendPort().hashCode(), rp0.toSendPort().hashCode());
-  Expect.equals(rp1.toSendPort().hashCode(), rp1.toSendPort().hashCode());
+  Expect.equals(rp0.toSendPort().hashCode, rp0.toSendPort().hashCode);
+  Expect.equals(rp1.toSendPort().hashCode, rp1.toSendPort().hashCode);
   rp0.close();
   rp1.close();
 }
diff --git a/tests/isolate/timer_not_available_test.dart b/tests/isolate/timer_not_available_test.dart
index 82c9103..96fb3c5 100644
--- a/tests/isolate/timer_not_available_test.dart
+++ b/tests/isolate/timer_not_available_test.dart
@@ -10,7 +10,7 @@
   bool failed = false;
   try {
     new Timer(0, (_) { });
-  } on UnsupportedOperationException catch (e) {
+  } on UnsupportedError catch (e) {
     failed = true;
   }
   Expect.isTrue(failed);
@@ -18,7 +18,7 @@
   try {
     var t = new Timer.repeating(10, (_) { });
     t.cancel();
-  } on UnsupportedOperationException catch (e) {
+  } on UnsupportedError catch (e) {
     failed = true;
   }
   Expect.isTrue(failed);
diff --git a/tests/json/json.status b/tests/json/json.status
index 9d9b4cd..e76252d 100644
--- a/tests/json/json.status
+++ b/tests/json/json.status
@@ -14,9 +14,5 @@
 [ $runtime == vm ]
 *: Skip
 
-# TODO(jmesserly): now that we have a bot, we need to set up Opera testing.
-[ $runtime == opera ]
-*: Skip
-
 [ $compiler == dart2js && $runtime == none ]
 *: Fail, Pass # TODO(ahe): Triage these tests.
diff --git a/tests/language/argument_definition2_test.dart b/tests/language/argument_definition2_test.dart
index 0b74060..c59b061 100644
--- a/tests/language/argument_definition2_test.dart
+++ b/tests/language/argument_definition2_test.dart
@@ -1,7 +1,6 @@
 // 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.
-// VMOptions=--reject_named_argument_as_positional
 
 test1(bool passed, [a = 42]) {
   if (passed) {
diff --git a/tests/language/arithmetic_test.dart b/tests/language/arithmetic_test.dart
index ac59dc3..5fde1ed 100644
--- a/tests/language/arithmetic_test.dart
+++ b/tests/language/arithmetic_test.dart
@@ -127,27 +127,27 @@
     big = 123456789012345;
     // -- isNegative --.
     // Smi.
-    Expect.equals(false, (0).isNegative());
-    Expect.equals(false, (1).isNegative());
-    Expect.equals(true, (-1).isNegative());
+    Expect.equals(false, (0).isNegative);
+    Expect.equals(false, (1).isNegative);
+    Expect.equals(true, (-1).isNegative);
     // Big.
-    Expect.equals(false, big.isNegative());
-    Expect.equals(true, (-big).isNegative());
+    Expect.equals(false, big.isNegative);
+    Expect.equals(true, (-big).isNegative);
     // Double.
     // TODO(srdjan): enable the following test once isNegative works.
-    // Expect.equals(true, (-0.0).isNegative());
-    Expect.equals(false, (0.0).isNegative());
-    Expect.equals(false, (2.0).isNegative());
-    Expect.equals(true, (-2.0).isNegative());
+    // Expect.equals(true, (-0.0).isNegative);
+    Expect.equals(false, (0.0).isNegative);
+    Expect.equals(false, (2.0).isNegative);
+    Expect.equals(true, (-2.0).isNegative);
 
     double negateDouble(double x) {
       return -x;
     }
 
-    Expect.isTrue(negateDouble(0.0).isNegative());
-    Expect.isFalse(negateDouble(-0.0).isNegative());
-    Expect.isTrue(negateDouble(3.5e3).isNegative());
-    Expect.isFalse(negateDouble(-3.5e3).isNegative());
+    Expect.isTrue(negateDouble(0.0).isNegative);
+    Expect.isFalse(negateDouble(-0.0).isNegative);
+    Expect.isTrue(negateDouble(3.5e3).isNegative);
+    Expect.isFalse(negateDouble(-3.5e3).isNegative);
 
 
     // Constants.
@@ -156,32 +156,32 @@
 
     // -- isInfinite --.
     // Smi.
-    Expect.equals(false, (0).isInfinite());
-    Expect.equals(false, (1).isInfinite());
-    Expect.equals(false, (-1).isInfinite());
+    Expect.equals(false, (0).isInfinite);
+    Expect.equals(false, (1).isInfinite);
+    Expect.equals(false, (-1).isInfinite);
     // Big.
-    Expect.equals(false, big.isInfinite());
-    Expect.equals(false, (-big).isInfinite());
+    Expect.equals(false, big.isInfinite);
+    Expect.equals(false, (-big).isInfinite);
     // Double.
-    Expect.equals(false, (0.0).isInfinite());
-    Expect.equals(true, infinity.isInfinite());
-    Expect.equals(true, (-infinity).isInfinite());
-    Expect.equals(false, (12.0).isInfinite());
-    Expect.equals(false, (-12.0).isInfinite());
-    Expect.equals(false, nan.isInfinite());
+    Expect.equals(false, (0.0).isInfinite);
+    Expect.equals(true, infinity.isInfinite);
+    Expect.equals(true, (-infinity).isInfinite);
+    Expect.equals(false, (12.0).isInfinite);
+    Expect.equals(false, (-12.0).isInfinite);
+    Expect.equals(false, nan.isInfinite);
 
     // -- isNaN --.
     // Smi.
-    Expect.equals(false, (0).isNaN());
-    Expect.equals(false, (1).isNaN());
-    Expect.equals(false, (-1).isNaN());
+    Expect.equals(false, (0).isNaN);
+    Expect.equals(false, (1).isNaN);
+    Expect.equals(false, (-1).isNaN);
     // Big.
-    Expect.equals(false, big.isNaN());
-    Expect.equals(false, (-big).isNaN());
+    Expect.equals(false, big.isNaN);
+    Expect.equals(false, (-big).isNaN);
     // Double.
-    Expect.equals(true, nan.isNaN());
-    Expect.equals(false, (12.0).isNaN());
-    Expect.equals(false, infinity.isNaN());
+    Expect.equals(true, nan.isNaN);
+    Expect.equals(false, (12.0).isNaN);
+    Expect.equals(false, infinity.isNaN);
 
     // -- abs --.
     // Smi.
@@ -192,8 +192,8 @@
     Expect.equals(big, big.abs());
     Expect.equals(big, (-big).abs());
     // Double.
-    Expect.equals(false, (0.0).abs().isNegative());
-    Expect.equals(false, (-0.0).abs().isNegative());
+    Expect.equals(false, (0.0).abs().isNegative);
+    Expect.equals(false, (-0.0).abs().isNegative);
     Expect.equals(2.0, (2.0).abs());
     Expect.equals(2.0, (-2.0).abs());
 
@@ -207,13 +207,13 @@
     Expect.equals(-big, (-big).ceil());
     // Double.
     Expect.equals(0.0, (0.0).ceil());
-    Expect.equals(false, (0.0).ceil().isNegative());
+    Expect.equals(false, (0.0).ceil().isNegative);
     Expect.equals(1.0, (0.1).ceil());
     Expect.equals(-0.0, (-0.0).ceil());
     Expect.equals(-0.0, (-0.3).ceil());
     // TODO(srdjan): enable the following tests once isNegative works.
-    // Expect.equals(true, (-0.0).ceil().isNegative());
-    // Expect.equals(true, (-0.3).ceil().isNegative());
+    // Expect.equals(true, (-0.0).ceil().isNegative);
+    // Expect.equals(true, (-0.3).ceil().isNegative);
     Expect.equals(3.0, (2.1).ceil());
     Expect.equals(-2.0, (-2.1).ceil());
 
@@ -228,11 +228,11 @@
     // Double.
     Expect.equals(0.0, (0.0).floor());
     Expect.equals(0.0, (0.1).floor());
-    Expect.equals(false, (0.0).floor().isNegative());
-    Expect.equals(false, (0.1).floor().isNegative());
+    Expect.equals(false, (0.0).floor().isNegative);
+    Expect.equals(false, (0.1).floor().isNegative);
     Expect.equals(-0.0, (-0.0).floor());
     // TODO(srdjan): enable the following tests once isNegative works.
-    // Expect.equals(true, (-0.0).floor().isNegative());
+    // Expect.equals(true, (-0.0).floor().isNegative);
     Expect.equals(-1.0, (-0.1).floor());
     Expect.equals(2.0, (2.1).floor());
     Expect.equals(-3.0, (-2.1).floor());
@@ -248,13 +248,13 @@
     // Double.
     Expect.equals(0.0, (0.0).truncate());
     Expect.equals(0.0, (0.1).truncate());
-    Expect.equals(false, (0.0).truncate().isNegative());
-    Expect.equals(false, (0.1).truncate().isNegative());
+    Expect.equals(false, (0.0).truncate().isNegative);
+    Expect.equals(false, (0.1).truncate().isNegative);
     Expect.equals(-0.0, (-0.0).truncate());
     Expect.equals(-0.0, (-0.3).truncate());
     // TODO(srdjan): enable the following tests once isNegative works.
-    // Expect.equals(true, (-0.0).truncate().isNegative());
-    // Expect.equals(true, (-0.3).truncate().isNegative());
+    // Expect.equals(true, (-0.0).truncate().isNegative);
+    // Expect.equals(true, (-0.3).truncate().isNegative);
     Expect.equals(2.0, (2.1).truncate());
     Expect.equals(-2.0, (-2.1).truncate());
 
@@ -275,8 +275,8 @@
     Expect.equals(-3.0, (-2.6).round());
     Expect.equals(0.0, (0.0).round());
     Expect.equals(0.0, (0.1).round());
-    Expect.equals(false, (0.0).round().isNegative());
-    Expect.equals(false, (0.1).round().isNegative());
+    Expect.equals(false, (0.0).round().isNegative);
+    Expect.equals(false, (0.1).round().isNegative);
     Expect.equals(-0.0, (-0.0).round());
     Expect.equals(-0.0, (-0.3).round());
     Expect.equals(2.0, (2.1).round());
@@ -286,9 +286,9 @@
     // b/4539188.
     // Expect.equals(-0.0, (-0.5).round());
     // TODO(srdjan): enable the following tests once isNegative works.
-    // Expect.equals(true, (-0.0).round().isNegative());
-    // Expect.equals(true, (-0.3).round().isNegative());
-    // Expect.equals(true, (-0.5).round().isNegative());
+    // Expect.equals(true, (-0.0).round().isNegative);
+    // Expect.equals(true, (-0.3).round().isNegative);
+    // Expect.equals(true, (-0.5).round().isNegative);
     Expect.equals(2.0, (1.5).round());
     // TODO(floitsch): enable or adapt test, once we reached conclusion on
     // b/4539188.
@@ -377,16 +377,16 @@
     Expect.equals(true, exceptionCaughtParseDouble("alpha"));
     Expect.equals(true, exceptionCaughtParseDouble("-alpha"));
 
-    Expect.equals(false, parseDouble("1.2").isNaN());
-    Expect.equals(false, parseDouble("1.2").isInfinite());
+    Expect.equals(false, parseDouble("1.2").isNaN);
+    Expect.equals(false, parseDouble("1.2").isInfinite);
 
-    Expect.equals(true, parseDouble("NaN").isNaN());
-    Expect.equals(true, parseDouble("Infinity").isInfinite());
-    Expect.equals(true, parseDouble("-Infinity").isInfinite());
+    Expect.equals(true, parseDouble("NaN").isNaN);
+    Expect.equals(true, parseDouble("Infinity").isInfinite);
+    Expect.equals(true, parseDouble("-Infinity").isInfinite);
 
-    Expect.equals(false, parseDouble("NaN").isNegative());
-    Expect.equals(false, parseDouble("Infinity").isNegative());
-    Expect.equals(true, parseDouble("-Infinity").isNegative());
+    Expect.equals(false, parseDouble("NaN").isNegative);
+    Expect.equals(false, parseDouble("Infinity").isNegative);
+    Expect.equals(true, parseDouble("-Infinity").isNegative);
 
     Expect.equals("NaN", parseDouble("NaN").toString());
     Expect.equals("Infinity", parseDouble("Infinity").toString());
@@ -406,10 +406,10 @@
     Expect.equals(true, 1.0 < max(1.0, 12.0));
 
     // Hashcode
-    Expect.equals(false, (3.4).hashCode() == (1.2).hashCode());
-    Expect.equals(true, (1.2).hashCode() == (1.2).hashCode());
-    Expect.equals(false, (3).hashCode() == (1).hashCode());
-    Expect.equals(true, (10).hashCode() == (10).hashCode());
+    Expect.equals(false, (3.4).hashCode == (1.2).hashCode);
+    Expect.equals(true, (1.2).hashCode == (1.2).hashCode);
+    Expect.equals(false, (3).hashCode == (1).hashCode);
+    Expect.equals(true, (10).hashCode == (10).hashCode);
   }
 
   static testMain() {
diff --git a/tests/language/call_through_getter_test.dart b/tests/language/call_through_getter_test.dart
index cfacf27..b5a115d 100644
--- a/tests/language/call_through_getter_test.dart
+++ b/tests/language/call_through_getter_test.dart
@@ -28,10 +28,10 @@
     Expect.equals(1, TOP_LEVEL_CONST_REF);
     Expect.equals(2, topLevel());
 
-    expectThrowsNotClosure(() {
+    expectThrowsNoSuchMethod(() {
       TOP_LEVEL_CONST(); /// static type warning
     });
-    expectThrowsNotClosure(() {
+    expectThrowsNoSuchMethod(() {
       (TOP_LEVEL_CONST)();  /// static type warning
     });
   }
@@ -47,8 +47,8 @@
     Expect.equals(87, (a.field)());
 
     a.field = 99;
-    expectThrowsNotClosure(() { a.field(); });
-    expectThrowsNotClosure(() { (a.field)(); });
+    expectThrowsNoSuchMethod(() { a.field(); });
+    expectThrowsNoSuchMethod(() { (a.field)(); });
   }
 
   static void testGetter() {
@@ -62,8 +62,8 @@
     Expect.equals(87, (a.getter)());
 
     a.field = 99;
-    expectThrowsNotClosure(() { a.getter(); });
-    expectThrowsNotClosure(() { (a.getter)(); });
+    expectThrowsNoSuchMethod(() { a.getter(); });
+    expectThrowsNoSuchMethod(() { (a.getter)(); });
   }
 
   static void testMethod() {
@@ -107,10 +107,10 @@
     Expect.equals("gyzxf", (b.g3)(b.y, b.z, b.x));
   }
 
-  static void expectThrowsNotClosure(fn) {
+  static expectThrowsNoSuchMethod(fn) {
     var exception = catchException(fn);
-    if (!(exception is ObjectNotClosureException)) {
-      Expect.fail("Wrong exception.  Expected: ObjectNotClosureException"
+    if (exception is! NoSuchMethodError) {
+      Expect.fail("Wrong exception.  Expected: NoSuchMethodError"
           " got: ${exception}");
     }
   }
diff --git a/tests/language/call_through_null_getter_test.dart b/tests/language/call_through_null_getter_test.dart
index 72b33ac..0502496 100644
--- a/tests/language/call_through_null_getter_test.dart
+++ b/tests/language/call_through_null_getter_test.dart
@@ -19,51 +19,43 @@
 
   static void testTopLevel() {
     topLevel = null;
-    expectThrowsObjectNotClosureException(() { topLevel(); });
-    expectThrowsObjectNotClosureException(() { (topLevel)(); });
-    expectThrowsObjectNotClosureException(() { TOP_LEVEL_NULL(); });
-    expectThrowsObjectNotClosureException(() { (TOP_LEVEL_NULL)(); });
+    expectThrowsNullPointerException(() { topLevel(); });
+    expectThrowsNullPointerException(() { (topLevel)(); });
+    expectThrowsNullPointerException(() { TOP_LEVEL_NULL(); });
+    expectThrowsNullPointerException(() { (TOP_LEVEL_NULL)(); });
   }
 
   static void testField() {
     A a = new A();
 
     a.field = null;
-    expectThrowsObjectNotClosureException(() { a.field(); });
-    expectThrowsObjectNotClosureException(() { (a.field)(); });
+    expectThrowsNullPointerException(() { a.field(); });
+    expectThrowsNullPointerException(() { (a.field)(); });
   }
 
   static void testGetter() {
     A a = new A();
 
     a.field = null;
-    expectThrowsObjectNotClosureException(() { a.getter(); });
-    expectThrowsObjectNotClosureException(() { (a.getter)(); });
+    expectThrowsNullPointerException(() { a.getter(); });
+    expectThrowsNullPointerException(() { (a.getter)(); });
   }
 
   static void testMethod() {
     A a = new A();
 
     a.field = null;
-    expectThrowsObjectNotClosureException(() { a.method()(); });
+    expectThrowsNullPointerException(() { a.method()(); });
   }
 
   static void expectThrowsNullPointerException(fn) {
     var exception = catchException(fn);
-    if (!(exception is NullPointerException)) {
+    if (exception is! NullPointerException) {
       Expect.fail("Wrong exception.  Expected: NullPointerException"
           " got: ${exception}");
     }
   }
 
-  static void expectThrowsObjectNotClosureException(fn) {
-    var exception = catchException(fn);
-    if (!(exception is ObjectNotClosureException)) {
-      Expect.fail("Wrong exception.  Expected: ObjectNotClosureException"
-          " got: ${exception}");
-    }
-  }
-
   static catchException(fn) {
     bool caught = false;
     var result = null;
diff --git a/tests/language/compile_time_constant_a_test.dart b/tests/language/compile_time_constant_a_test.dart
index 8f157f3..1d32b37 100644
--- a/tests/language/compile_time_constant_a_test.dart
+++ b/tests/language/compile_time_constant_a_test.dart
@@ -10,13 +10,13 @@
 const m6 = const { 'a': 499 };
 const m7 = const {};
 
-bool isIllegalAccessException(o) => o is IllegalAccessException;
+bool isUnsupportedError(o) => o is UnsupportedError;
 
 main() {
   Expect.equals(499, m1['a']);
   Expect.equals(null, m1['b']);
-  Expect.listEquals(['a'], m1.getKeys());
-  Expect.listEquals([499], m1.getValues());
+  Expect.listEquals(['a'], m1.keys);
+  Expect.listEquals([499], m1.values);
   Expect.isTrue(m1.containsKey('a'));
   Expect.isFalse(m1.containsKey('toString'));
   Expect.isTrue(m1.containsValue(499));
@@ -30,23 +30,21 @@
   });
   Expect.listEquals(['a'], seenKeys);
   Expect.listEquals([499], seenValues);
-  Expect.isFalse(m1.isEmpty());
+  Expect.isFalse(m1.isEmpty);
   Expect.equals(1, m1.length);
-  Expect.throws(() => m1.remove('a'), isIllegalAccessException);
-  Expect.throws(() => m1.remove('b'), isIllegalAccessException);
-  Expect.throws(() => m1.clear(), isIllegalAccessException);
-  Expect.throws(() => m1['b'] = 42, isIllegalAccessException);
-  Expect.throws(() => m1['a'] = 499, isIllegalAccessException);
-  Expect.throws(() => m1.putIfAbsent('a', () => 499),
-                isIllegalAccessException);
-  Expect.throws(() => m1.putIfAbsent('z', () => 499),
-                isIllegalAccessException);
+  Expect.throws(() => m1.remove('a'), isUnsupportedError);
+  Expect.throws(() => m1.remove('b'), isUnsupportedError);
+  Expect.throws(() => m1.clear(), isUnsupportedError);
+  Expect.throws(() => m1['b'] = 42, isUnsupportedError);
+  Expect.throws(() => m1['a'] = 499, isUnsupportedError);
+  Expect.throws(() => m1.putIfAbsent('a', () => 499), isUnsupportedError);
+  Expect.throws(() => m1.putIfAbsent('z', () => 499), isUnsupportedError);
 
   Expect.equals(499, m2['a']);
   Expect.equals(42, m2['b']);
   Expect.equals(null, m2['c']);
-  Expect.listEquals(['a', 'b'], m2.getKeys());
-  Expect.listEquals([499, 42], m2.getValues());
+  Expect.listEquals(['a', 'b'], m2.keys);
+  Expect.listEquals([499, 42], m2.values);
   Expect.isTrue(m2.containsKey('a'));
   Expect.isTrue(m2.containsKey('b'));
   Expect.isFalse(m2.containsKey('toString'));
@@ -62,26 +60,24 @@
   });
   Expect.listEquals(['a', 'b'], seenKeys);
   Expect.listEquals([499, 42], seenValues);
-  Expect.isFalse(m2.isEmpty());
+  Expect.isFalse(m2.isEmpty);
   Expect.equals(2, m2.length);
-  Expect.throws(() => m2.remove('a'), isIllegalAccessException);
-  Expect.throws(() => m2.remove('b'), isIllegalAccessException);
-  Expect.throws(() => m2.remove('c'), isIllegalAccessException);
-  Expect.throws(() => m2.clear(), isIllegalAccessException);
-  Expect.throws(() => m2['a'] = 499, isIllegalAccessException);
-  Expect.throws(() => m2['b'] = 42, isIllegalAccessException);
-  Expect.throws(() => m2['c'] = 499, isIllegalAccessException);
-  Expect.throws(() => m2.putIfAbsent('a', () => 499),
-                isIllegalAccessException);
-  Expect.throws(() => m2.putIfAbsent('z', () => 499),
-                isIllegalAccessException);
-  Expect.throws(() => m2['a'] = 499, isIllegalAccessException);
+  Expect.throws(() => m2.remove('a'), isUnsupportedError);
+  Expect.throws(() => m2.remove('b'), isUnsupportedError);
+  Expect.throws(() => m2.remove('c'), isUnsupportedError);
+  Expect.throws(() => m2.clear(), isUnsupportedError);
+  Expect.throws(() => m2['a'] = 499, isUnsupportedError);
+  Expect.throws(() => m2['b'] = 42, isUnsupportedError);
+  Expect.throws(() => m2['c'] = 499, isUnsupportedError);
+  Expect.throws(() => m2.putIfAbsent('a', () => 499), isUnsupportedError);
+  Expect.throws(() => m2.putIfAbsent('z', () => 499), isUnsupportedError);
+  Expect.throws(() => m2['a'] = 499, isUnsupportedError);
 
   Expect.isTrue(m3['m1'] === m1);
   Expect.isTrue(m3['m2'] === m2);
 
-  Expect.listEquals(['z', 'a', 'm'], m4.getKeys());
-  Expect.listEquals([9, 8, 7], m4.getValues());
+  Expect.listEquals(['z', 'a', 'm'], m4.keys);
+  Expect.listEquals([9, 8, 7], m4.values);
   seenKeys = [];
   seenValues = [];
   m4.forEach((key, value) {
@@ -97,11 +93,11 @@
 
   Expect.isTrue(m1 === m6);
 
-  Expect.isTrue(m7.isEmpty());
+  Expect.isTrue(m7.isEmpty);
   Expect.equals(0, m7.length);
   Expect.equals(null, m7['b']);
-  Expect.listEquals([], m7.getKeys());
-  Expect.listEquals([], m7.getValues());
+  Expect.listEquals([], m7.keys);
+  Expect.listEquals([], m7.values);
   Expect.isFalse(m7.containsKey('a'));
   Expect.isFalse(m7.containsKey('toString'));
   Expect.isFalse(m7.containsValue(499));
@@ -114,13 +110,13 @@
   });
   Expect.listEquals([], seenKeys);
   Expect.listEquals([], seenValues);
-  Expect.throws(() => m7.remove('a'), isIllegalAccessException);
-  Expect.throws(() => m7.remove('b'), isIllegalAccessException);
-  Expect.throws(() => m7.clear(), isIllegalAccessException);
-  Expect.throws(() => m7['b'] = 42, isIllegalAccessException);
-  Expect.throws(() => m7['a'] = 499, isIllegalAccessException);
+  Expect.throws(() => m7.remove('a'), isUnsupportedError);
+  Expect.throws(() => m7.remove('b'), isUnsupportedError);
+  Expect.throws(() => m7.clear(), isUnsupportedError);
+  Expect.throws(() => m7['b'] = 42, isUnsupportedError);
+  Expect.throws(() => m7['a'] = 499, isUnsupportedError);
   Expect.throws(() => m7.putIfAbsent('a', () => 499),
-                isIllegalAccessException);
+                isUnsupportedError);
   Expect.throws(() => m7.putIfAbsent('z', () => 499),
-                isIllegalAccessException);
+                isUnsupportedError);
 }
diff --git a/tests/language/compile_time_constant_b_test.dart b/tests/language/compile_time_constant_b_test.dart
index ef4451c..a273903 100644
--- a/tests/language/compile_time_constant_b_test.dart
+++ b/tests/language/compile_time_constant_b_test.dart
@@ -6,13 +6,13 @@
 const m2 = const { 'a': 499, 'b': 42 };
 const m3 = const { '__proto__': 499 };
 
-bool isIllegalAccessException(o) => o is IllegalAccessException;
+bool isUnsupportedError(o) => o is UnsupportedError;
 
 main() {
   Expect.equals(499, m1['__proto__']);
   Expect.equals(null, m1['b']);
-  Expect.listEquals(['__proto__'], m1.getKeys());
-  Expect.listEquals([499], m1.getValues());
+  Expect.listEquals(['__proto__'], m1.keys);
+  Expect.listEquals([499], m1.values);
   Expect.isTrue(m1.containsKey('__proto__'));
   Expect.isFalse(m1.containsKey('toString'));
   Expect.isTrue(m1.containsValue(499));
@@ -25,24 +25,23 @@
   });
   Expect.listEquals(['__proto__'], seenKeys);
   Expect.listEquals([499], seenValues);
-  Expect.isFalse(m1.isEmpty());
+  Expect.isFalse(m1.isEmpty);
   Expect.equals(1, m1.length);
-  Expect.throws(() => m1.remove('__proto__'), isIllegalAccessException);
-  Expect.throws(() => m1.remove('b'), isIllegalAccessException);
-  Expect.throws(() => m1.clear(), isIllegalAccessException);
-  Expect.throws(() => m1['b'] = 42, isIllegalAccessException);
-  Expect.throws(() => m1['__proto__'] = 499, isIllegalAccessException);
+  Expect.throws(() => m1.remove('__proto__'), isUnsupportedError);
+  Expect.throws(() => m1.remove('b'), isUnsupportedError);
+  Expect.throws(() => m1.clear(), isUnsupportedError);
+  Expect.throws(() => m1['b'] = 42, isUnsupportedError);
+  Expect.throws(() => m1['__proto__'] = 499, isUnsupportedError);
   Expect.throws(() => m1.putIfAbsent('__proto__', () => 499),
-                isIllegalAccessException);
-  Expect.throws(() => m1.putIfAbsent('z', () => 499),
-                isIllegalAccessException);
+                isUnsupportedError);
+  Expect.throws(() => m1.putIfAbsent('z', () => 499), isUnsupportedError);
 
   Expect.equals(499, m2['a']);
   Expect.equals(42, m2['b']);
   Expect.equals(null, m2['c']);
   Expect.equals(null, m2['__proto__']);
-  Expect.listEquals(['a', 'b'], m2.getKeys());
-  Expect.listEquals([499, 42], m2.getValues());
+  Expect.listEquals(['a', 'b'], m2.keys);
+  Expect.listEquals([499, 42], m2.values);
   Expect.isTrue(m2.containsKey('a'));
   Expect.isTrue(m2.containsKey('b'));
   Expect.isFalse(m2.containsKey('toString'));
@@ -58,20 +57,19 @@
   });
   Expect.listEquals(['a', 'b'], seenKeys);
   Expect.listEquals([499, 42], seenValues);
-  Expect.isFalse(m2.isEmpty());
+  Expect.isFalse(m2.isEmpty);
   Expect.equals(2, m2.length);
-  Expect.throws(() => m2.remove('a'), isIllegalAccessException);
-  Expect.throws(() => m2.remove('b'), isIllegalAccessException);
-  Expect.throws(() => m2.remove('__proto__'), isIllegalAccessException);
-  Expect.throws(() => m2.clear(), isIllegalAccessException);
-  Expect.throws(() => m2['a'] = 499, isIllegalAccessException);
-  Expect.throws(() => m2['b'] = 42, isIllegalAccessException);
-  Expect.throws(() => m2['__proto__'] = 499, isIllegalAccessException);
-  Expect.throws(() => m2.putIfAbsent('a', () => 499),
-                isIllegalAccessException);
+  Expect.throws(() => m2.remove('a'), isUnsupportedError);
+  Expect.throws(() => m2.remove('b'), isUnsupportedError);
+  Expect.throws(() => m2.remove('__proto__'), isUnsupportedError);
+  Expect.throws(() => m2.clear(), isUnsupportedError);
+  Expect.throws(() => m2['a'] = 499, isUnsupportedError);
+  Expect.throws(() => m2['b'] = 42, isUnsupportedError);
+  Expect.throws(() => m2['__proto__'] = 499, isUnsupportedError);
+  Expect.throws(() => m2.putIfAbsent('a', () => 499), isUnsupportedError);
   Expect.throws(() => m2.putIfAbsent('__proto__', () => 499),
-                isIllegalAccessException);
-  Expect.throws(() => m2['a'] = 499, isIllegalAccessException);
+                isUnsupportedError);
+  Expect.throws(() => m2['a'] = 499, isUnsupportedError);
 
   Expect.isTrue(m1 === m3);
 }
diff --git a/tests/language/ct_const_test.dart b/tests/language/ct_const_test.dart
index 6f7a534..d8117ca 100644
--- a/tests/language/ct_const_test.dart
+++ b/tests/language/ct_const_test.dart
@@ -82,7 +82,7 @@
     Expect.equals(true, c11dItaly === Roman.VivaItalia);
 
     Expect.equals(3, c11dItaly.length);
-    Expect.equals(3, c11dItaly.getKeys().length);
+    Expect.equals(3, c11dItaly.keys.length);
     Expect.equals(true, c11dItaly.containsKey("white"));
     Expect.equals(false, c11dItaly.containsKey("black"));
 
@@ -90,7 +90,7 @@
     bool caughtException = false;
     try {
       c11dItaly["green"] = 0;
-    } on IllegalAccessException catch (e) {
+    } on UnsupportedError catch (e) {
       caughtException = true;
     }
     Expect.equals(true, caughtException);
@@ -99,7 +99,7 @@
     caughtException = false;
     try {
       c11dItaly.clear();
-    } on IllegalAccessException catch (e) {
+    } on UnsupportedError catch (e) {
       caughtException = true;
     }
     Expect.equals(true, caughtException);
@@ -108,7 +108,7 @@
     caughtException = false;
     try {
       c11dItaly.remove("orange");
-    } on IllegalAccessException catch (e) {
+    } on UnsupportedError catch (e) {
       caughtException = true;
     }
     Expect.equals(true, caughtException);
diff --git a/tests/language/deopt_smi_op.dart b/tests/language/deopt_smi_op.dart
new file mode 100644
index 0000000..7ad01c6
--- /dev/null
+++ b/tests/language/deopt_smi_op.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test hoisted (loop-invariant) smi operations with deoptimization.
+
+test_mul(h)  {
+  var x;
+  for (var i=0; i<3; i++) {
+    x = h * 100000;
+  }
+  return x;
+}
+
+test_neg(h)  {
+  var x;
+  for (var i=0; i<3; i++) {
+    x = -h;
+  }
+  return x;
+}
+
+main() {
+  for (var i=0; i<10000; i++) test_mul(10);
+  Expect.equals(1000000, test_mul(10));
+  Expect.equals(100000000000, test_mul(1000000));
+  Expect.equals(100000 * 0x3fffffffffffffff, test_mul(0x3fffffffffffffff));
+
+  for (var i=0; i<10000; i++) test_neg(10);
+  Expect.equals(-10, test_neg(10));
+  Expect.equals(0x40000000, test_neg(-0x40000000));
+  Expect.equals(0x4000000000000000, test_neg(-0x4000000000000000));
+}
diff --git a/tests/language/div_by_zero_test.dart b/tests/language/div_by_zero_test.dart
index c32a059..8f0ec10 100644
--- a/tests/language/div_by_zero_test.dart
+++ b/tests/language/div_by_zero_test.dart
@@ -22,7 +22,7 @@
   }
 
   static void testMain() {
-    Expect.isTrue(divBy(0, 0).isNaN());
+    Expect.isTrue(divBy(0, 0).isNaN);
     Expect.isTrue(moustacheDivBy(0, 0));
   }
 }
diff --git a/tests/language/function_type_alias2_test.dart b/tests/language/function_type_alias2_test.dart
index 735de60..f2c03c5 100644
--- a/tests/language/function_type_alias2_test.dart
+++ b/tests/language/function_type_alias2_test.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// VMOptions=--enable_type_checks --reject_named_argument_as_positional
+// VMOptions=--enable_type_checks
 //
 // Dart test for function type alias with optional parameters.
 
@@ -20,9 +20,6 @@
 int bar({int a, int b, int c}) { }
 
 main() {
-  // TODO(regis): The expectations below will change once we run this test with
-  // --reject_named_argument_as_positional which is still too early to do at
-  // this time.
   Expect.isTrue(baz is f1);
   Expect.isFalse(baz is f3);
   Expect.isFalse(bar is f1);
diff --git a/tests/language/function_type_alias_test.dart b/tests/language/function_type_alias_test.dart
index 795ccf1..aca2419 100644
--- a/tests/language/function_type_alias_test.dart
+++ b/tests/language/function_type_alias_test.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// VMOptions=--enable_type_checks --reject_named_argument_as_positional
+// VMOptions=--enable_type_checks
 //
 // Dart test for function type alias.
 
diff --git a/tests/language/generic_creation_test.dart b/tests/language/generic_creation_test.dart
index 8aa6d29..ad71e2c 100644
--- a/tests/language/generic_creation_test.dart
+++ b/tests/language/generic_creation_test.dart
@@ -5,8 +5,8 @@
 class A<X, Y, Z> {
   shift() => new A<Z, X, Y>();
   swap() => new A<Z, Y, X>();
-  first() => new A<X, X, X>();
-  last() => new A<Z, Z, Z>();
+  get first => new A<X, X, X>();
+  get last => new A<Z, Z, Z>();
   wrap() => new A<A<X, X, X>, A<Y, Y, Y>, A<Z, Z, Z>>();
 }
 
@@ -20,7 +20,7 @@
   A a = new A<U, V, W>();
   sameType(new A<W, U, V>(), a.shift());
   sameType(new A<W, V, U>(), a.swap());
-  sameType(new A<U, U, U>(), a.first());
-  sameType(new A<W, W, W>(), a.last());
+  sameType(new A<U, U, U>(), a.first);
+  sameType(new A<W, W, W>(), a.last);
   sameType(new A<A<U, U, U>, A<V, V, V>, A<W, W, W>>(), a.wrap());
 }
diff --git a/tests/language/hash_code_mangling_test.dart b/tests/language/hash_code_mangling_test.dart
index 3059517..07b01a4 100644
--- a/tests/language/hash_code_mangling_test.dart
+++ b/tests/language/hash_code_mangling_test.dart
@@ -10,8 +10,8 @@
   Foo foo = new Foo();
   foo.$identityHash = 'fisk';
   Expect.isTrue(foo.$identityHash is String);
-  int hash = foo.hashCode();
+  int hash = foo.hashCode;
   Expect.isTrue(hash is int);
   Expect.isTrue(foo.$identityHash is String);
-  Expect.equals(hash, foo.hashCode());
+  Expect.equals(hash, foo.hashCode);
 }
diff --git a/tests/language/intrinsified_methods_test.dart b/tests/language/intrinsified_methods_test.dart
index 13075a5..5a9c4c1 100644
--- a/tests/language/intrinsified_methods_test.dart
+++ b/tests/language/intrinsified_methods_test.dart
@@ -7,18 +7,18 @@
 #import('dart:math');
 
 testIsNegative() {
-  Expect.isFalse((12.0).isNegative());
-  Expect.isTrue((-12.0).isNegative());
-  Expect.isFalse((double.NAN).isNegative());
-  Expect.isFalse((0.0).isNegative());
-  Expect.isTrue((-0.0).isNegative());
-  Expect.isFalse((double.INFINITY).isNegative());
-  Expect.isTrue((double.NEGATIVE_INFINITY).isNegative());
+  Expect.isFalse((12.0).isNegative);
+  Expect.isTrue((-12.0).isNegative);
+  Expect.isFalse((double.NAN).isNegative);
+  Expect.isFalse((0.0).isNegative);
+  Expect.isTrue((-0.0).isNegative);
+  Expect.isFalse((double.INFINITY).isNegative);
+  Expect.isTrue((double.NEGATIVE_INFINITY).isNegative);
 }
 
 testIsNaN() {
-  Expect.isFalse((1.0).isNaN());
-  Expect.isTrue((double.NAN).isNaN());
+  Expect.isFalse((1.0).isNaN);
+  Expect.isTrue((double.NAN).isNaN);
 }
 
 
diff --git a/tests/language/invocation_mirror_test.dart b/tests/language/invocation_mirror_test.dart
new file mode 100644
index 0000000..6bbb094
--- /dev/null
+++ b/tests/language/invocation_mirror_test.dart
@@ -0,0 +1,166 @@
+// 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.
+
+// InvocationMirror and noSuchMethod testing.
+
+/** Class with noSuchMethod that returns the mirror */
+class N {
+  noSuchMethod(InvocationMirror m) => m;
+
+  get wut => this;
+
+  flif(int x) { Expect.fail("never get here"); }
+  flaf([int x]) { Expect.fail("never get here"); }
+  flof({int y}) { Expect.fail("never get here"); }
+
+  final int plif = 99;
+  int get plaf { Expect.fail("never get here"); return 0; }
+}
+
+/** As [N] but also implements 'call', so we can call it with wrong arguments.*/
+class C extends N {
+  call(int x) { Expect.fail("never get here"); }
+}
+
+/**
+ * Checks the data of an InvocationMirror.
+ *
+ * Call without optionals for getters, with only positional for setters,
+ * and with both optionals for everything else.
+ */
+testInvocationMirror(InvocationMirror im, String name,
+                     [List positional, Map named]) {
+  Expect.isTrue(im is InvocationMirror);
+  Expect.equals(name, im.methodName);
+  if (named == null) {
+    Expect.isTrue(im.isAccessor);
+    Expect.isFalse(im.isMethod);
+    if (positional == null) {
+      Expect.isTrue(im.isGetter);
+      Expect.isFalse(im.isSetter);
+      Expect.equals(null, im.positionalArguments);
+      Expect.equals(null, im.positionalArguments);
+      return;
+    }
+    Expect.isTrue(im.isSetter);
+    Expect.isFalse(im.isGetter);
+    Expect.equals(1, im.positionalArguments.length);
+    Expect.equals(positional[0], im.positionalArguments[0]);
+    Expect.equals(null, im.namedArguments);
+    return;
+  }
+  Expect.isTrue(im.isMethod);
+  Expect.isFalse(im.isAccessor);
+  Expect.isFalse(im.isSetter);
+  Expect.isFalse(im.isGetter);
+
+  Expect.equals(positional.length, im.positionalArguments.length);
+  for (int i = 0; i < positional.length; i++) {
+    Expect.equals(positional[i], im.positionalArguments[i]);
+  }
+  Expect.equals(named.length, im.namedArguments.length);
+  named.forEach((k, v) {
+    Expect.isTrue(im.namedArguments.containsKey(k));
+    Expect.equals(v, im.namedArguments[k]);
+  });
+}
+
+
+// Test different ways that noSuchMethod can be called.
+testInvocationMirrors() {
+  var n = new N();
+  var c = new C();
+
+  // Missing property/method access.
+  testInvocationMirror(n.bar, 'bar');
+  testInvocationMirror(n.bar = 42, 'bar=', [42]);
+  testInvocationMirror(n.bar(), 'bar', [], {});
+  testInvocationMirror(n.bar(42), 'bar', [42], {});
+  testInvocationMirror(n.bar(x: 42), 'bar', [], {"x": 42});
+  testInvocationMirror(n.bar(37, x: 42), 'bar', [37], {"x": 42});
+  testInvocationMirror((n.bar)(), 'bar', [], {});
+  testInvocationMirror((n.bar)(42), 'bar', [42]);
+  testInvocationMirror((n.bar)(x: 42), 'bar', [], {"x": 42});
+  testInvocationMirror((n.bar)(37, x: 42), 'bar', [37], {"x": 42});
+
+  // Missing operator access.
+  testInvocationMirror(n + 4, '+', [4], {});
+  testInvocationMirror(n - 4, '-', [4], {});
+  testInvocationMirror(-n, '+', [], {});
+  testInvocationMirror(n[42], '[]', [42], {});
+  testInvocationMirror(n[37] = 42, '[]=', [37, 42], {});
+
+  // Calling as function when it's not.
+  testInvocationMirror(n(), 'call', [], {});
+  testInvocationMirror(n(42), 'call', [42], {});
+  testInvocationMirror(n(x: 42), 'call', [], {"x": 42});
+  testInvocationMirror(n(37, x: 42), 'call', [37], {"x": 42});is
+
+  // Calling with arguments not matching existing call method.
+  testInvocationMirror(c(), 'call', [], {});
+  testInvocationMirror(c(37, 42), 'call', [37, 42], {});
+  testInvocationMirror(c(x: 42), 'call', [], {"x": 42});
+  testInvocationMirror(c(37, x: 42), 'call', [37], {"x": 42});
+
+  // Wrong arguments to existing function.
+  testInvocationMirror(n.flif(), "flif", [], {});
+  testInvocationMirror(n.flif(37, 42), "flif", [37, 42], {});
+  testInvocationMirror(n.flif(x: 42), "flif", [], {"x": 42});
+  testInvocationMirror(n.flif(37, x: 42), "flif", [37], {"x": 42});
+  testInvocationMirror(n.flif = 42, "flif=", [42]);
+
+  testInvocationMirror(n.flaf(37, 42), "flaf", [37, 42], {});
+  testInvocationMirror(n.flaf(x: 42), "flaf", [], {"x": 42});
+  testInvocationMirror(n.flaf(37, x: 42), "flaf", [37], {"x": 42});
+  testInvocationMirror(n.flaf = 42, "flaf=", [42]);
+
+  testInvocationMirror(n.flof(37, 42), "flof", [37, 42], {});
+  testInvocationMirror(n.flof(x: 42), "flof", [], {"x": 42});
+  testInvocationMirror(n.flof(37, y: 42), "flof", [37], {"y": 42});
+  testInvocationMirror(n.flof = 42, "flof=", [42]);
+
+  // Reading works.
+  Expect.isTrue(n.flif is Function);
+  Expect.isTrue(n.flaf is Function);
+  Expect.isTrue(n.flof is Function);
+
+  // Writing to read-only fields.
+  testInvocationMirror(n.wut = 42, "wut=", [42]);
+  testInvocationMirror(n.plif = 42, "plif=", [42]);
+  testInvocationMirror(n.plaf = 42, "plaf=", [42]);
+
+  // Trick call to n.call - wut is a getter returning n again.
+  testInvocationMirror(n.wut(42), "call", [42]);
+
+  // Closurizing a method means that calling it badly will not hit the
+  // original receivers noSuchMethod, only the one inherited from Object
+  // by the closure object.
+  Expect.throws(() { var x = n.flif; x(37, 42); },
+                (e) => e is noSuchMethodError);
+  Expect.throws(() { var x = c.call; x(37, 42); },
+                (e) => e is noSuchMethodError);
+}
+
+// Test the NoSuchMethodError thrown by different incorrect calls.
+testNoSuchMethodErrors() {
+  test(Function block) {
+    Expect.throws(block, (e) => e is noSuchMethodError);
+  }
+
+  var o = new Object();
+  test(() => o.bar);
+  test(() => o.bar = 42);
+  test(() => o.bar());
+  test(() => o.toString = 42);
+  test(() => o.toString(42));
+  test(() => o.toString(x: 37));
+  test(() => o.hashCode = 42);
+  test(() => o.hashCode());  // Thrown by int.noSuchMethod.
+  test(() => o());
+}
+
+main() {
+  testInvocationMirrors();
+  testNoSuchMethodErrors();
+}
diff --git a/tests/language/is_nan_test.dart b/tests/language/is_nan_test.dart
index f4fa0f7..3edfebd 100644
--- a/tests/language/is_nan_test.dart
+++ b/tests/language/is_nan_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class A {
-  bool isNaN() => false;
+  bool get isNaN => false;
 }
 
 main() {
@@ -12,4 +12,4 @@
   Expect.throws(() => foo('bar'), (e) => e is NoSuchMethodError);
 }
 
-foo(a) => a.isNaN();
+foo(a) => a.isNaN;
diff --git a/tests/language/language.status b/tests/language/language.status
index b12c7a1..0549cc3 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -38,13 +38,8 @@
 # Issue 1355
 call_operator_test: Fail
 
-closure_with_super_send_test: Fail # Issue 3197.
-closure_with_super_field_test: Fail # Issue 3197.
-super_closure_test: Fail # Issue 3197.
 parameter_initializer6_negative_test: Fail # Issue 3502
 
-fauxverride_test/none: Fail # Issue 3778.
-
 bad_override_test/01: Fail # Issue 3859.
 bad_override_test/02: Fail # Issue 3859.
 
@@ -60,7 +55,17 @@
 
 compile_time_constant10_test/none: Fail # issue 5214
 
-export_cyclic_test: Crash
+export_cyclic_test: Crash # issue 6060
+
+call_through_getter_test: Fail # issue 6124
+call_through_null_getter_test: Fail # issue 6124
+local_function_test: Fail # issue 6124
+naming_test: Fail # issue 6124
+
+invocation_mirror_test: Fail # issue 3326, 3622.
+
+[ $compiler == none && ($system == macos || $system == linux) && $arch == ia32 && $checked ]
+gc_test: Skip  # Issue 1487, flaky.
 
 [ $compiler == none && $mode == debug ]
 gc_test: Skip  # Takes too long.
@@ -85,8 +90,6 @@
 compile_time_constant_checked3_test/06: Fail, OK
 
 [ $compiler == dartc ]
-black_listed_test/13: Fail # Illegal use of 'dynamic'
-black_listed_test/14: Fail # Illegal use of 'dynamic'
 implicit_this_test/none: Fail # should not warn about allocating SubAbstract2
 metadata_test: Fail
 get_set_syntax_test/none: Fail # does not accept getter/setter with no method body
@@ -146,6 +149,10 @@
 getter_no_setter2_test/01: Fail # Fails to detect compile-time error.
 instance_call_wrong_argument_count_negative_test: Fail # Runtime only test, rewrite as multitest
 interface_factory1_negative_test: Fail # language change 1031
+# Test expects signature of noSuchMethod to be correct according
+# to specification. Should start working when the library signature
+# changes.
+invocation_mirror_test: Fail, OK
 is_not_class2_negative_test: Fail #  Runtime only test, rewrite as multitest
 library2_negative_test: Fail # still a valid test? Issue 3649
 library4_negative_test: Fail # still a valid test? Issue 3530
@@ -197,7 +204,6 @@
 abstract_syntax_test/none: Fail, OK
 interface_test/none: Fail, OK
 
-
 #
 # Add new dartc annotations above in alphabetical order
 #
@@ -214,6 +220,8 @@
 export_test: Fail # Issue 5785
 export_cyclic_test: Fail # Issue 5785
 first_class_types_libraries_test: Fail # Issue 2264
+local_export_test: Fail # http://dartbug.com/2264
+
 
 [ $runtime == dartium ]
 import_combinators_test: Fail
@@ -225,10 +233,6 @@
 [ $runtime == chrome ]
 string_escape1_negative_test: Skip
 
-# TODO(jmesserly): now that we have a bot, we need to set up Opera testing.
-[ $runtime == opera ]
-*: Skip
-
 [ $runtime == ie9 && ($system == linux || $system == macos) ]
 *: Skip
 
@@ -378,16 +382,12 @@
 parameter_initializer6_negative_test: Fail # Issue 3502
 syntax_test/47: Fail
 # DartVM problem.
-closure_with_super_send_test: Fail # Issue 3197.
-closure_with_super_field_test: Fail # Issue 3197.
 constructor5_test: Fail
 constructor6_test: Fail
-fauxverride_test/none: Fail
 field_override_test/01: Fail
 field_override_test/02: Fail
 field_override_test/none: Fail
 gc_test: Fail
-super_closure_test: Fail
 super_field_access_test: Fail
 super_first_constructor_test: Fail
 # VM specific tests.
@@ -434,3 +434,11 @@
 compile_time_constant_checked3_test/06: Fail, OK
 
 type_error_test: Fail, OK # VM bug: http://dartbug.com/5280
+
+call_through_getter_test: Fail # issue 6130
+call_through_null_getter_test: Fail # issue 6130
+local_function_test: Fail # issue 6130
+naming_test: Fail # issue 6130
+
+# This is a VM error when the compiled code is run.
+invocation_mirror_test: Fail # issue 3326, 3622.
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 1a43554..f3ff4de 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -89,13 +89,6 @@
 compile_time_constant8_test: Fail # We don't take the generic type into account yet.
 canonical_const_test: Fail # We don't take the generic type into account yet.
 
-# These tests will pass once new optional parameter semantics is enforced.
-named_parameters_test/02: Fail
-named_parameters_test/04: Fail
-named_parameters_test/06: Fail
-named_parameters_test/08: Fail
-named_parameters_test/10: Fail
-
 # Support for optional parameters not conform to latest spec.
 function_type_alias_test: Fail
 function_type_alias2_test: Fail
@@ -163,7 +156,6 @@
 get_set_syntax_test/16: Fail # Fixed by https://chromiumcodereview.appspot.com/10915111
 implicit_scope_test: Fail # duplicate definition of a="bar"
 library_prefixes_test: Fail # other is not a type
-local_function_test: Fail # TypeError: Object #<Closure> has no method '$call$2' (bad exception mapping).
 many_generic_instanceof_test: Fail # cannot resolve type T
 method_binding_test: Fail # internal error: super property read not implemented.
 method_override_test: Fail # cannot resolve type GetKeysFunctionType
@@ -323,6 +315,9 @@
 # of failing.
 const_factory_negative_test: Crash, Fail
 
+# Implement InvocationMirror and pass it to noSuchMethod.
+invocation_mirror_test: Fail
+
 [ $compiler == dart2js && $mode == release ]
 assign_top_method_negative_test: Crash
 
@@ -331,26 +326,21 @@
 *: Fail, Pass # TODO(ahe): Triage these tests.
 
 
-[ $compiler == dart2js && $runtime == ff ]
-call_through_getter_test: Fail # Expected: ObjectNotClosureException got: Instance of 'TypeError'
+[ $compiler == dart2js && ($runtime == ff || $runtime == jsshell)]
 call_through_null_getter_test: Fail # Expected: ObjectNotClosureException got: Instance of 'TypeError'
 double_to_string_as_fixed_test: Fail
 
 [ $compiler == dart2js && $runtime == ie9 ]
-call_through_getter_test: Fail
-call_through_null_getter_test: Fail
 div_by_zero_test: Fail
 double_to_string_as_fixed_test: Fail
 expect_test: Fail
 factory3_test: Fail
-local_function_test: Fail
 stack_overflow_test: Fail
 type_checks_in_factory_method_test: Fail
 
 
 [ $compiler == dart2js && $runtime == safari ]
 arithmetic_test: Skip # BUG(3492): Times out.
-call_through_getter_test: Fail # Expected: ObjectNotClosureException got: Instance of 'TypeError'
 call_through_null_getter_test: Fail # Expected: ObjectNotClosureException got: Instance of 'TypeError'
 closure3_test: Fail # Uncaught error: Instance of 'TypeError'
 method_invocation_test: Fail # Uncaught error: Instance of 'TypeError'
@@ -365,3 +355,16 @@
 export_cyclic_test: Fail # Issue 5785 (root cause: issue 2264)
 import_combinators_test: Fail # Issue 5785 (root cause: issue 2264)
 first_class_types_libraries_test: Fail
+local_export_test: Fail # TODO(ahe): Enable wrapper-less tests on Firefox/Windows.
+
+
+[ $runtime == opera ]
+call_through_null_getter_test: Fail
+closure3_test: Fail
+execute_finally3_test: Fail
+method_invocation_test: Fail
+null_pointer_exception_test: Fail
+stack_overflow_test: Fail
+string_interpolate_npe_test: Fail
+closure_call_wrong_argument_count_negative_test: Skip
+label_test: Skip
diff --git a/tests/language/list_literal3_test.dart b/tests/language/list_literal3_test.dart
index e82d3ac..497aee4 100644
--- a/tests/language/list_literal3_test.dart
+++ b/tests/language/list_literal3_test.dart
@@ -19,7 +19,7 @@
     bool caughtException = false;
     try {
       joke[0] = "sock";
-    } on UnsupportedOperationException catch (e) {
+    } on UnsupportedError catch (e) {
       caughtException = true;
     }
     Expect.equals(true, caughtException);
@@ -41,7 +41,7 @@
     try {
       caughtException = false;
       a[0][0] = 42;
-    } on UnsupportedOperationException catch (e) {
+    } on UnsupportedError catch (e) {
       caughtException = true;
     }
     Expect.equals(true, caughtException);
@@ -53,7 +53,7 @@
     try {
       caughtException = false;
       b[0][0] = 42.0;
-    } on UnsupportedOperationException catch (e) {
+    } on UnsupportedError catch (e) {
       caughtException = true;
     }
     Expect.equals(true, caughtException);
diff --git a/tests/language/local_export_a.dart b/tests/language/local_export_a.dart
new file mode 100644
index 0000000..e9c8819
--- /dev/null
+++ b/tests/language/local_export_a.dart
@@ -0,0 +1,11 @@
+// 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.
+
+library local_export_a;
+
+export 'local_export_a_export.dart';
+
+class A {
+  method() => 42;
+}
diff --git a/tests/language/local_export_a_export.dart b/tests/language/local_export_a_export.dart
new file mode 100644
index 0000000..1919d38
--- /dev/null
+++ b/tests/language/local_export_a_export.dart
@@ -0,0 +1,7 @@
+// 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.
+
+library local_export_a_export;
+
+int A = 0;
diff --git a/tests/language/local_export_test.dart b/tests/language/local_export_test.dart
new file mode 100644
index 0000000..fe4df96
--- /dev/null
+++ b/tests/language/local_export_test.dart
@@ -0,0 +1,9 @@
+// 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.
+
+import 'local_export_a.dart';
+
+void main() {
+  Expect.equals(42, new A().method());
+}
diff --git a/tests/language/local_function_test.dart b/tests/language/local_function_test.dart
index c694e2c..6c6ab88 100644
--- a/tests/language/local_function_test.dart
+++ b/tests/language/local_function_test.dart
@@ -142,14 +142,14 @@
     bool exception_caught = false;
     try {
       f(1, 2);
-    } on ClosureArgumentMismatchException catch (e) {
+    } on NoSuchMethodError catch (e) {
       exception_caught = true;
     }
     Expect.equals(true, exception_caught);
     exception_caught = false;
     try {
       f();
-    } on ClosureArgumentMismatchException catch (e) {
+    } on NoSuchMethodError catch (e) {
       exception_caught = true;
     }
     Expect.equals(true, exception_caught);
@@ -166,7 +166,7 @@
     exception_caught = false;
     try {
       f(1);
-    } on ObjectNotClosureException catch (e) {
+    } on NoSuchMethodError catch (e) {
       exception_caught = true;
     }
     Expect.equals(true, exception_caught);
diff --git a/tests/language/map_test.dart b/tests/language/map_test.dart
index 70de2c4..3968cf8 100644
--- a/tests/language/map_test.dart
+++ b/tests/language/map_test.dart
@@ -154,11 +154,11 @@
      other_map.clear();
      Expect.equals(0, other_map.length);
 
-     // Test Collection.getKeys.
+     // Test Collection.keys.
      void testForEachCollection(value) {
        other_map[value] = value;
      }
-     Collection keys = map.getKeys();
+     Collection keys = map.keys;
      keys.forEach(testForEachCollection);
      Expect.equals(true, other_map.containsKey(key1));
      Expect.equals(true, other_map.containsKey(key2));
@@ -172,8 +172,8 @@
      other_map.clear();
      Expect.equals(0, other_map.length);
 
-     // Test Collection.getValues.
-     Collection values = map.getValues();
+     // Test Collection.values.
+     Collection values = map.values;
      values.forEach(testForEachCollection);
      Expect.equals(true, !other_map.containsKey(key1));
      Expect.equals(true, !other_map.containsKey(key2));
@@ -200,9 +200,9 @@
   static testKeys(Map map) {
     map[1] = 101;
     map[2] = 102;
-    Collection k = map.getKeys();
+    Collection k = map.keys;
     Expect.equals(2, k.length);
-    Collection v = map.getValues();
+    Collection v = map.values;
     Expect.equals(2, v.length);
     Expect.equals(true, map.containsValue(101));
     Expect.equals(true, map.containsValue(102));
diff --git a/tests/language/method_override_test.dart b/tests/language/method_override_test.dart
index ff00cef..514f7fc 100644
--- a/tests/language/method_override_test.dart
+++ b/tests/language/method_override_test.dart
@@ -5,39 +5,39 @@
 // Checks that a method with an instantiated return type can override a method
 // with a generic return type.
 
-typedef Collection<K> GetKeysFunctionType<K>();
+typedef V RemoveFunctionType<K, V>(K key);
 
 class MapBase<K, V> implements Map<K, V> {
-  Collection<K> getKeys() {
+  K remove(K key) {
     throw 'Must be implemented';
   }
 
   void Tests() {
     Expect.isTrue(this is MapBase<int, int>);
 
-    Expect.isTrue(getKeys is GetKeysFunctionType);
-    Expect.isTrue(getKeys is GetKeysFunctionType<int>);
-    Expect.isTrue(getKeys is !GetKeysFunctionType<String>);
-    Expect.isTrue(getKeys is !GetKeysFunctionType<MapBase<int, int>>);
+    Expect.isTrue(remove is RemoveFunctionType);
+    Expect.isTrue(remove is RemoveFunctionType<int, int>);
+    Expect.isTrue(remove is !RemoveFunctionType<String, int>);
+    Expect.isTrue(remove is !RemoveFunctionType<MapBase<int, int>, int>);
   }
 }
 
 
 class MethodOverrideTest extends MapBase<String, String> {
-  Collection<String> getKeys() {
-    throw 'Is implemented';
+  String remove(String key) {
+    throw 'Must be implemented';
   }
 
   void Tests() {
     Expect.isTrue(this is MethodOverrideTest);
     Expect.isTrue(this is MapBase<String, String>);
 
-    Expect.isTrue(getKeys is GetKeysFunctionType);
-    Expect.isTrue(getKeys is GetKeysFunctionType<String>);
-    Expect.isTrue(getKeys is !GetKeysFunctionType<int>);
-    Expect.isTrue(super.getKeys is GetKeysFunctionType);
-    Expect.isTrue(super.getKeys is GetKeysFunctionType<String>);
-    Expect.isTrue(super.getKeys is !GetKeysFunctionType<int>);
+    Expect.isTrue(remove is RemoveFunctionType);
+    Expect.isTrue(remove is RemoveFunctionType<String, String>);
+    Expect.isTrue(remove is !RemoveFunctionType<int, int>);
+    Expect.isTrue(super.remove is RemoveFunctionType);
+    Expect.isTrue(super.remove is RemoveFunctionType<String, String>);
+    Expect.isTrue(super.remove is !RemoveFunctionType<int, int>);
   }
 }
 
@@ -46,13 +46,13 @@
   // Since method overriding is only checked statically, explicitly check
   // the subtyping relation using a function type alias.
   var x = new MethodOverrideTest();
-  Expect.isTrue(x.getKeys is GetKeysFunctionType<String>);
+  Expect.isTrue(x.remove is RemoveFunctionType<String, String>);
 
   // Perform a few more tests.
   x.Tests();
 
   var m = new MapBase<int, int>();
-  Expect.isTrue(m.getKeys is GetKeysFunctionType<int>);
+  Expect.isTrue(m.remove is RemoveFunctionType<int, int>);
 
   // Perform a few more tests.
   m.Tests();
diff --git a/tests/language/mint_compares.dart b/tests/language/mint_compares.dart
new file mode 100644
index 0000000..c09bec1
--- /dev/null
+++ b/tests/language/mint_compares.dart
@@ -0,0 +1,60 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test compares on 64-bit integers.
+
+
+compareTest() {
+  Expect.isFalse(4294967296 < 6);
+  Expect.isFalse(4294967296 < 4294967296);
+  Expect.isFalse(4294967296 <= 6);
+  Expect.isTrue(4294967296 <= 4294967296);
+  Expect.isFalse(4294967296 < 4294967295);
+
+  Expect.isTrue(-4294967296 < 6);
+  Expect.isTrue(-4294967296 < 4294967296);
+  Expect.isTrue(-4294967296 <= 6);
+  Expect.isTrue(-4294967296 <= 4294967296);
+  Expect.isTrue(-4294967296 < 4294967295);
+
+  Expect.isFalse(4294967296 < -6);
+  Expect.isFalse(4294967296 <= -6);
+  Expect.isFalse(4294967296 < -4294967295);
+
+  Expect.isTrue(-4294967296 < -6);
+  Expect.isTrue(-4294967296 <= -6);
+  Expect.isTrue(-4294967296 < -4294967295);
+
+  Expect.isTrue(4294967296 > 6);
+  Expect.isFalse(4294967296 > 4294967296);
+  Expect.isTrue(4294967296 >= 6);
+  Expect.isTrue(4294967296 >= 4294967296);
+  Expect.isTrue(4294967296 > 4294967295);
+
+  Expect.isFalse(-4294967296 > 6);
+  Expect.isFalse(-4294967296 > 4294967296);
+  Expect.isFalse(-4294967296 >= 6);
+  Expect.isFalse(-4294967296 >= 4294967296);
+  Expect.isFalse(-4294967296 > 4294967295);
+
+  Expect.isTrue(4294967296 > -6);
+  Expect.isTrue(4294967296 >= -6);
+  Expect.isTrue(4294967296 > -4294967295);
+
+  Expect.isFalse(-4294967296 > -6);
+  Expect.isFalse(-4294967296 >= -6);
+  Expect.isFalse(-4294967296 > -4294967295);
+
+  Expect.isTrue(4294967296 < 184467440737095516150);
+  Expect.isTrue(-4294967296 < 184467440737095516150);
+  Expect.isFalse(4294967296 < -184467440737095516150);
+  Expect.isFalse(-4294967296 < -184467440737095516150);
+}
+
+
+main() {
+  for (var i = 0; i < 100; i++) {
+    compareTest();
+  }
+}
diff --git a/tests/language/named_parameters_test.dart b/tests/language/named_parameters_test.dart
index 629feac..1ea5234 100644
--- a/tests/language/named_parameters_test.dart
+++ b/tests/language/named_parameters_test.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 // Dart test program for testing named parameters.
-// VMOptions=--reject_named_argument_as_positional
 
 
 class NamedParametersTest {
diff --git a/tests/language/named_parameters_type_test.dart b/tests/language/named_parameters_type_test.dart
index 268b539..33841fb 100644
--- a/tests/language/named_parameters_type_test.dart
+++ b/tests/language/named_parameters_type_test.dart
@@ -5,10 +5,6 @@
 //
 // Dart test program for testing optional named parameters in type tests.
 
-// TODO(regis): The expected signatures below will change once we run this test
-// with --reject_named_argument_as_positional which is still too early to do at
-// this time.
-
 class NamedParametersTypeTest {
   static int testMain() {
     int result = 0;
diff --git a/tests/language/naming_test.dart b/tests/language/naming_test.dart
index 0533899..6198f1d 100644
--- a/tests/language/naming_test.dart
+++ b/tests/language/naming_test.dart
@@ -501,9 +501,7 @@
         () => a.foo(2),
         // We check for both exceptions because the exact exception to
         // throw is hard to compute on some browsers.
-        // Also, ObjectNotClosureException should probably implement
-        // NoSuchMethodError.
-        (e) => e is ObjectNotClosureException || e is NoSuchMethodError);
+        (e) => e is NoSuchMethodError);
   }
 }
 
diff --git a/tests/language/optimize_redundant_array_load.dart b/tests/language/optimize_redundant_array_load.dart
new file mode 100644
index 0000000..ae4bb59
--- /dev/null
+++ b/tests/language/optimize_redundant_array_load.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test optimization of redundant array loads.
+
+var A = [0,2,3];
+
+test1(a) {
+  int x = a[0];
+  int y = a[1];
+  ++a[0];
+  return a[0] + y + a[2];
+}
+
+
+int test2(a) {
+  return a[2] + a[2];
+}
+
+
+main() {
+  for (int i = 0; i < 10000; i++) {
+    test1(A);
+    test2(A);
+  }
+  Expect.equals(10006, test1(A));
+  Expect.equals(6, test2(A));
+}
diff --git a/tests/language/ordered_maps_test.dart b/tests/language/ordered_maps_test.dart
index 7bcf697..7ea8102 100644
--- a/tests/language/ordered_maps_test.dart
+++ b/tests/language/ordered_maps_test.dart
@@ -13,22 +13,22 @@
   static void testMaps(map1, map2, bool isConst) {
     Expect.equals(true, map1 !== map2);
 
-    var keys = map1.getKeys();
+    var keys = map1.keys;
     Expect.equals(2, keys.length);
     Expect.equals("a", keys[0]);
     Expect.equals("c", keys[1]);
 
-    keys = map2.getKeys();
+    keys = map2.keys;
     Expect.equals(2, keys.length);
     Expect.equals("c", keys[0]);
     Expect.equals("a", keys[1]);
 
-    var values = map1.getValues();
+    var values = map1.values;
     Expect.equals(2, values.length);
     Expect.equals(1, values[0]);
     Expect.equals(2, values[1]);
 
-    values = map2.getValues();
+    values = map2.values;
     Expect.equals(2, values.length);
     Expect.equals(2, values[0]);
     Expect.equals(1, values[1]);
@@ -38,36 +38,36 @@
     map1["b"] = 3;
     map2["b"] = 3;
 
-    keys = map1.getKeys();
+    keys = map1.keys;
     Expect.equals(3, keys.length);
     Expect.equals("a", keys[0]);
     Expect.equals("c", keys[1]);
     Expect.equals("b", keys[2]);
 
-    keys = map2.getKeys();
+    keys = map2.keys;
     Expect.equals(3, keys.length);
     Expect.equals("c", keys[0]);
     Expect.equals("a", keys[1]);
     Expect.equals("b", keys[2]);
 
-    values = map1.getValues();
+    values = map1.values;
     Expect.equals(3, values.length);
     Expect.equals(1, values[0]);
     Expect.equals(2, values[1]);
     Expect.equals(3, values[2]);
 
-    values = map2.getValues();
+    values = map2.values;
     Expect.equals(3, values.length);
     Expect.equals(2, values[0]);
     Expect.equals(1, values[1]);
     Expect.equals(3, values[2]);
 
     map1["a"] = 4;
-    keys = map1.getKeys();
+    keys = map1.keys;
     Expect.equals(3, keys.length);
     Expect.equals("a", keys[0]);
 
-    values = map1.getValues();
+    values = map1.values;
     Expect.equals(3, values.length);
     Expect.equals(4, values[0]);
   }
diff --git a/tests/language/positional_parameters_type_test.dart b/tests/language/positional_parameters_type_test.dart
index 79c2840..7a23761 100644
--- a/tests/language/positional_parameters_type_test.dart
+++ b/tests/language/positional_parameters_type_test.dart
@@ -1,13 +1,9 @@
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// VMOptions=--enable_type_checks --no_reject_named_argument_as_positional
+// VMOptions=--enable_type_checks
 //
-// Dart test program for testing optional parameters in type tests.
-
-// TODO(regis): The expected signatures below will change once we run this test
-// with --reject_named_argument_as_positional which is still too early to do at
-// this time.
+// Dart test program for testing optional positional parameters in type tests.
 
 class NamedParametersTypeTest {
   static int testMain() {
@@ -27,27 +23,25 @@
       acceptFunNumOptBool(funNum);  // No static type warning.
     } on TypeError catch (error) {
       result += 1;
-      Expect.stringEquals("(num, [b: bool]) => void", error.dstType);
+      Expect.stringEquals("(num, [bool]) => void", error.dstType);
       Expect.stringEquals("(num) => void", error.srcType);
     }
     try {
       acceptFunNumOptBool(funNumBool);  /// static type warning
     } on TypeError catch (error) {
       result += 10;
-      Expect.stringEquals("(num, [b: bool]) => void", error.dstType);
+      Expect.stringEquals("(num, [bool]) => void", error.dstType);
       Expect.stringEquals("(num, bool) => void", error.srcType);
     }
     try {
-      acceptFunNumOptBool(funNumOptBoolX);  /// static type warning
+      acceptFunNumOptBool(funNumOptBoolX);  // No static type warning.
     } on TypeError catch (error) {
       result += 100;
-      Expect.stringEquals("(num, [b: bool]) => void", error.dstType);
-      Expect.stringEquals("(num, [x: bool]) => void", error.srcType);
     }
     return result;
   }
 }
 
 main() {
-  Expect.equals(111, NamedParametersTypeTest.testMain());
+  Expect.equals(11, NamedParametersTypeTest.testMain());
 }
diff --git a/tests/language/reg_ex2_test.dart b/tests/language/reg_ex2_test.dart
index aaa3d5e..6e323f3 100644
--- a/tests/language/reg_ex2_test.dart
+++ b/tests/language/reg_ex2_test.dart
@@ -10,7 +10,7 @@
     Match match = helloPattern.firstMatch(s);
     if (match != null) {
       print("got match");
-      int groupCount = match.groupCount();
+      int groupCount = match.groupCount;
       print("groupCount is $groupCount");
       print("group 0 is ${match.group(0)}");
       print("group 1 is ${match.group(1)}");
diff --git a/tests/language/savannah_test.dart b/tests/language/savannah_test.dart
index ea55302..fea178e 100644
--- a/tests/language/savannah_test.dart
+++ b/tests/language/savannah_test.dart
@@ -14,7 +14,7 @@
 
   Giraffe(this.name) : identityHash_ = nextId() {}
 
-  int hashCode() {
+  int get hashCode {
     return identityHash_;
   }
 
@@ -44,8 +44,8 @@
     Giraffe giraffe2 = new Giraffe("Rose");
     savannah[giraffe1] = giraffe1.name;
     savannah[giraffe2] = giraffe2.name;
-    print("giraffe1 hash: ${giraffe1.hashCode()}");
-    print("giraffe2 hash: ${giraffe2.hashCode()}");
+    print("giraffe1 hash: ${giraffe1.hashCode}");
+    print("giraffe2 hash: ${giraffe2.hashCode}");
 
     var count = savannah.length;
     print("getCount is $count");
@@ -60,8 +60,8 @@
     Zebra zebra2 = new Zebra("Zeeta");
     savannah[zebra1] = zebra1.name;
     savannah[zebra2] = zebra2.name;
-    print("zebra1 hash: ${zebra1.hashCode()}");
-    print("zebra2 hash: ${zebra2.hashCode()}");
+    print("zebra1 hash: ${zebra1.hashCode}");
+    print("zebra2 hash: ${zebra2.hashCode}");
 
     count = savannah.length;
     print("getCount is $count");
diff --git a/tests/language/stack_overflow_test.dart b/tests/language/stack_overflow_test.dart
index 83909f9..a8e400f 100644
--- a/tests/language/stack_overflow_test.dart
+++ b/tests/language/stack_overflow_test.dart
@@ -13,7 +13,7 @@
     bool exceptionCaught = false;
     try {
       curseTheRecurse(1, 2, 3);
-    } on StackOverflowException catch (e) {
+    } on StackOverflowError catch (e) {
       exceptionCaught = true;
     }
     Expect.equals(true, exceptionCaught);
diff --git a/tests/language/string_intrinsics_test.dart b/tests/language/string_intrinsics_test.dart
index 80907a1..de3e3f0 100644
--- a/tests/language/string_intrinsics_test.dart
+++ b/tests/language/string_intrinsics_test.dart
@@ -22,5 +22,5 @@
 
 
 testIsEmpty(s) {
-  return s.isEmpty();
+  return s.isEmpty;
 }
diff --git a/tests/language/temp_mangling_test.dart b/tests/language/temp_mangling_test.dart
index 279dc4e..3031891 100644
--- a/tests/language/temp_mangling_test.dart
+++ b/tests/language/temp_mangling_test.dart
@@ -24,7 +24,7 @@
     // This used to introduce x_0.
     var x = new Set();
     Expect.equals(0, x.length);
-    Expect.isTrue(x.isEmpty());
+    Expect.isTrue(x.isEmpty);
   }
   Expect.isTrue(x is List);
   Expect.isTrue(x_0 is List);
diff --git a/tests/lib/crypto/base64_test.dart b/tests/lib/crypto/base64_test.dart
index fd01871..59afc40 100644
--- a/tests/lib/crypto/base64_test.dart
+++ b/tests/lib/crypto/base64_test.dart
@@ -45,11 +45,11 @@
 
 void main() {
   for (var i = 0; i < inputs.length; i++) {
-    var enc = CryptoUtils.bytesToBase64(inputs[i].charCodes());
+    var enc = CryptoUtils.bytesToBase64(inputs[i].charCodes);
     Expect.equals(results[i], enc);
   }
-  Expect.equals(CryptoUtils.bytesToBase64(longLine.charCodes(), 76),
+  Expect.equals(CryptoUtils.bytesToBase64(longLine.charCodes, 76),
                 longLineResult);
-  Expect.equals(CryptoUtils.bytesToBase64(longLine.charCodes()),
+  Expect.equals(CryptoUtils.bytesToBase64(longLine.charCodes),
                 longLineResultNoBreak);
 }
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index b84eb4f..4e9589d 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -10,9 +10,6 @@
 crypto/sha256_test: Slow, Pass
 crypto/sha1_test: Slow, Pass
 
-[ $runtime == opera ]
-*: Skip
-
 [ $compiler == dart2dart ]
 # Skip until we stabilize language tests.
 *: Skip
diff --git a/tests/lib/math/math_parse_double_test.dart b/tests/lib/math/math_parse_double_test.dart
index 4bf4a32..c44c301 100644
--- a/tests/lib/math/math_parse_double_test.dart
+++ b/tests/lib/math/math_parse_double_test.dart
@@ -25,11 +25,11 @@
   Expect.equals(0.0, parseDouble("0"));
   Expect.equals(0.0, parseDouble("+0"));
   Expect.equals(-0.0, parseDouble("-0"));
-  Expect.equals(true, parseDouble("-0").isNegative());
+  Expect.equals(true, parseDouble("-0").isNegative);
   Expect.equals(0.0, parseDouble("   0   "));
   Expect.equals(0.0, parseDouble("   +0   "));
   Expect.equals(-0.0, parseDouble("   -0   "));
-  Expect.equals(true, parseDouble("   -0   ").isNegative());
+  Expect.equals(true, parseDouble("   -0   ").isNegative);
   Expect.equals(1.0 * 0x1234567890, parseDouble("0x1234567890"));
   Expect.equals(1.0 * -0x1234567890, parseDouble("-0x1234567890"));
   Expect.equals(1.0 * 0x1234567890, parseDouble("   0x1234567890   "));
diff --git a/tests/lib/math/min_max_test.dart b/tests/lib/math/min_max_test.dart
index f8aaae1..06c78dc 100644
--- a/tests/lib/math/min_max_test.dart
+++ b/tests/lib/math/min_max_test.dart
@@ -32,15 +32,15 @@
   var inf = double.INFINITY;
   var nan = double.NAN;
 
-  Expect.isTrue(min(nan, nan).isNaN());
-  Expect.isTrue(min(nan, -inf).isNaN());
-  Expect.isTrue(min(nan, -499.0).isNaN());
-  Expect.isTrue(min(nan, -499).isNaN());
-  Expect.isTrue(min(nan, -0.0).isNaN());
-  Expect.isTrue(min(nan, 0.0).isNaN());
-  Expect.isTrue(min(nan, 499.0).isNaN());
-  Expect.isTrue(min(nan, 499).isNaN());
-  Expect.isTrue(min(nan, inf).isNaN());
+  Expect.isTrue(min(nan, nan).isNaN);
+  Expect.isTrue(min(nan, -inf).isNaN);
+  Expect.isTrue(min(nan, -499.0).isNaN);
+  Expect.isTrue(min(nan, -499).isNaN);
+  Expect.isTrue(min(nan, -0.0).isNaN);
+  Expect.isTrue(min(nan, 0.0).isNaN);
+  Expect.isTrue(min(nan, 499.0).isNaN);
+  Expect.isTrue(min(nan, 499).isNaN);
+  Expect.isTrue(min(nan, inf).isNaN);
 
   Expect.equals(-inf, min(-inf, -inf));
   Expect.equals(-inf, min(-inf, -499.0));
@@ -51,7 +51,7 @@
   Expect.equals(-inf, min(-inf, 499));
   Expect.equals(-inf, min(-inf, 499.0));
   Expect.equals(-inf, min(-inf, inf));
-  Expect.isTrue(min(-inf, nan).isNaN());
+  Expect.isTrue(min(-inf, nan).isNaN);
 
   Expect.equals(-inf, min(-499.0, -inf));
   Expect.equals(-499.0, min(-499.0, -499.0));
@@ -62,7 +62,7 @@
   Expect.equals(-499.0, min(-499.0, 499.0));
   Expect.equals(-499.0, min(-499.0, 499));
   Expect.equals(-499.0, min(-499.0, inf));
-  Expect.isTrue(min(-499.0, nan).isNaN());
+  Expect.isTrue(min(-499.0, nan).isNaN);
 
   Expect.isTrue(min(-499.0, -499.0) is double);
   Expect.isTrue(min(-499.0, -499) is double);
@@ -82,7 +82,7 @@
   Expect.equals(-499, min(-499, 499.0));
   Expect.equals(-499, min(-499, 499));
   Expect.equals(-499, min(-499, inf));
-  Expect.isTrue(min(-499, nan).isNaN());
+  Expect.isTrue(min(-499, nan).isNaN);
 
   Expect.isTrue(min(-499, -499.0) is int);
   Expect.isTrue(min(-499, -499) is int);
@@ -102,7 +102,7 @@
   Expect.equals(-0.0, min(-0.0, 499.0));
   Expect.equals(-0.0, min(-0.0, 499));
   Expect.equals(-0.0, min(-0.0, inf));
-  Expect.isTrue(min(-0.0, nan).isNaN());
+  Expect.isTrue(min(-0.0, nan).isNaN);
 
   Expect.isTrue(min(-0.0, -499.0) is double);
   Expect.isTrue(min(-0.0, -499) is int);
@@ -113,14 +113,14 @@
   Expect.isTrue(min(-0.0, 499) is double);
   Expect.isTrue(min(-0.0, inf) is double);
 
-  Expect.isTrue(min(-0.0, -499.0).isNegative());
-  Expect.isTrue(min(-0.0, -499).isNegative());
-  Expect.isTrue(min(-0.0, -0.0).isNegative());
-  Expect.isTrue(min(-0.0, 0.0).isNegative());
-  Expect.isTrue(min(-0.0, 0).isNegative());
-  Expect.isTrue(min(-0.0, 499.0).isNegative());
-  Expect.isTrue(min(-0.0, 499).isNegative());
-  Expect.isTrue(min(-0.0, inf).isNegative());
+  Expect.isTrue(min(-0.0, -499.0).isNegative);
+  Expect.isTrue(min(-0.0, -499).isNegative);
+  Expect.isTrue(min(-0.0, -0.0).isNegative);
+  Expect.isTrue(min(-0.0, 0.0).isNegative);
+  Expect.isTrue(min(-0.0, 0).isNegative);
+  Expect.isTrue(min(-0.0, 499.0).isNegative);
+  Expect.isTrue(min(-0.0, 499).isNegative);
+  Expect.isTrue(min(-0.0, inf).isNegative);
 
   Expect.equals(-inf, min(0.0, -inf));
   Expect.equals(-499.0, min(0.0, -499.0));
@@ -131,7 +131,7 @@
   Expect.equals(0.0, min(0.0, 499.0));
   Expect.equals(0.0, min(0.0, 499));
   Expect.equals(0.0, min(0.0, inf));
-  Expect.isTrue(min(0.0, nan).isNaN());
+  Expect.isTrue(min(0.0, nan).isNaN);
 
   Expect.isTrue(min(0.0, -499.0) is double);
   Expect.isTrue(min(0.0, -499) is int);
@@ -142,14 +142,14 @@
   Expect.isTrue(min(0.0, 499) is double);
   Expect.isTrue(min(0.0, inf) is double);
 
-  Expect.isTrue(min(0.0, -499.0).isNegative());
-  Expect.isTrue(min(0.0, -499).isNegative());
-  Expect.isTrue(min(0.0, -0.0).isNegative());
-  Expect.isFalse(min(0.0, 0.0).isNegative());
-  Expect.isFalse(min(0.0, 0).isNegative());
-  Expect.isFalse(min(0.0, 499.0).isNegative());
-  Expect.isFalse(min(0.0, 499).isNegative());
-  Expect.isFalse(min(0.0, inf).isNegative());
+  Expect.isTrue(min(0.0, -499.0).isNegative);
+  Expect.isTrue(min(0.0, -499).isNegative);
+  Expect.isTrue(min(0.0, -0.0).isNegative);
+  Expect.isFalse(min(0.0, 0.0).isNegative);
+  Expect.isFalse(min(0.0, 0).isNegative);
+  Expect.isFalse(min(0.0, 499.0).isNegative);
+  Expect.isFalse(min(0.0, 499).isNegative);
+  Expect.isFalse(min(0.0, inf).isNegative);
 
   Expect.equals(-inf, min(0, -inf));
   Expect.equals(-499.0, min(0, -499.0));
@@ -160,7 +160,7 @@
   Expect.equals(0, min(0, 499.0));
   Expect.equals(0, min(0, 499));
   Expect.equals(0, min(0, inf));
-  Expect.isTrue(min(0, nan).isNaN());
+  Expect.isTrue(min(0, nan).isNaN);
 
   Expect.isTrue(min(0, -499.0) is double);
   Expect.isTrue(min(0, -499) is int);
@@ -171,14 +171,14 @@
   Expect.isTrue(min(0, 499) is int);
   Expect.isTrue(min(0, inf) is int);
 
-  Expect.isTrue(min(0, -499.0).isNegative());
-  Expect.isTrue(min(0, -499).isNegative());
-  Expect.isTrue(min(0, -0.0).isNegative());
-  Expect.isFalse(min(0, 0.0).isNegative());
-  Expect.isFalse(min(0, 0).isNegative());
-  Expect.isFalse(min(0, 499.0).isNegative());
-  Expect.isFalse(min(0, 499).isNegative());
-  Expect.isFalse(min(0, inf).isNegative());
+  Expect.isTrue(min(0, -499.0).isNegative);
+  Expect.isTrue(min(0, -499).isNegative);
+  Expect.isTrue(min(0, -0.0).isNegative);
+  Expect.isFalse(min(0, 0.0).isNegative);
+  Expect.isFalse(min(0, 0).isNegative);
+  Expect.isFalse(min(0, 499.0).isNegative);
+  Expect.isFalse(min(0, 499).isNegative);
+  Expect.isFalse(min(0, inf).isNegative);
 
   Expect.equals(-inf, min(499.0, -inf));
   Expect.equals(-499.0, min(499.0, -499.0));
@@ -189,7 +189,7 @@
   Expect.equals(499.0, min(499.0, 499.0));
   Expect.equals(499.0, min(499.0, 499));
   Expect.equals(499.0, min(499.0, inf));
-  Expect.isTrue(min(499.0, nan).isNaN());
+  Expect.isTrue(min(499.0, nan).isNaN);
 
   Expect.isTrue(min(499.0, -499.0) is double);
   Expect.isTrue(min(499.0, -499) is int);
@@ -200,14 +200,14 @@
   Expect.isTrue(min(499.0, 499.0) is double);
   Expect.isTrue(min(499.0, inf) is double);
 
-  Expect.isTrue(min(499.0, -499.0).isNegative());
-  Expect.isTrue(min(499.0, -499).isNegative());
-  Expect.isTrue(min(499.0, -0.0).isNegative());
-  Expect.isFalse(min(499.0, 0.0).isNegative());
-  Expect.isFalse(min(499.0, 0).isNegative());
-  Expect.isFalse(min(499.0, 499).isNegative());
-  Expect.isFalse(min(499.0, 499.0).isNegative());
-  Expect.isFalse(min(499.0, inf).isNegative());
+  Expect.isTrue(min(499.0, -499.0).isNegative);
+  Expect.isTrue(min(499.0, -499).isNegative);
+  Expect.isTrue(min(499.0, -0.0).isNegative);
+  Expect.isFalse(min(499.0, 0.0).isNegative);
+  Expect.isFalse(min(499.0, 0).isNegative);
+  Expect.isFalse(min(499.0, 499).isNegative);
+  Expect.isFalse(min(499.0, 499.0).isNegative);
+  Expect.isFalse(min(499.0, inf).isNegative);
 
   Expect.equals(-inf, min(499, -inf));
   Expect.equals(-499.0, min(499, -499.0));
@@ -218,7 +218,7 @@
   Expect.equals(499, min(499, 499.0));
   Expect.equals(499, min(499, 499));
   Expect.equals(499, min(499, inf));
-  Expect.isTrue(min(499, nan).isNaN());
+  Expect.isTrue(min(499, nan).isNaN);
 
   Expect.isTrue(min(499, -499.0) is double);
   Expect.isTrue(min(499, -499) is int);
@@ -229,14 +229,14 @@
   Expect.isTrue(min(499, 499) is int);
   Expect.isTrue(min(499, inf) is int);
 
-  Expect.isTrue(min(499, -499.0).isNegative());
-  Expect.isTrue(min(499, -499).isNegative());
-  Expect.isTrue(min(499, -0.0).isNegative());
-  Expect.isFalse(min(499, 0.0).isNegative());
-  Expect.isFalse(min(499, 0).isNegative());
-  Expect.isFalse(min(499, 499.0).isNegative());
-  Expect.isFalse(min(499, 499).isNegative());
-  Expect.isFalse(min(499, inf).isNegative());
+  Expect.isTrue(min(499, -499.0).isNegative);
+  Expect.isTrue(min(499, -499).isNegative);
+  Expect.isTrue(min(499, -0.0).isNegative);
+  Expect.isFalse(min(499, 0.0).isNegative);
+  Expect.isFalse(min(499, 0).isNegative);
+  Expect.isFalse(min(499, 499.0).isNegative);
+  Expect.isFalse(min(499, 499).isNegative);
+  Expect.isFalse(min(499, inf).isNegative);
 
   Expect.equals(-inf, min(inf, -inf));
   Expect.equals(-499.0, min(inf, -499.0));
@@ -247,7 +247,7 @@
   Expect.equals(499.0, min(inf, 499.0));
   Expect.equals(499, min(inf, 499));
   Expect.equals(inf, min(inf, inf));
-  Expect.isTrue(min(inf, nan).isNaN());
+  Expect.isTrue(min(inf, nan).isNaN);
 
   Expect.isTrue(min(inf, -499.0) is double);
   Expect.isTrue(min(inf, -499) is int);
@@ -258,14 +258,14 @@
   Expect.isTrue(min(inf, 499.0) is double);
   Expect.isTrue(min(inf, inf) is double);
 
-  Expect.isTrue(min(inf, -499.0).isNegative());
-  Expect.isTrue(min(inf, -499).isNegative());
-  Expect.isTrue(min(inf, -0.0).isNegative());
-  Expect.isFalse(min(inf, 0.0).isNegative());
-  Expect.isFalse(min(inf, 0).isNegative());
-  Expect.isFalse(min(inf, 499).isNegative());
-  Expect.isFalse(min(inf, 499.0).isNegative());
-  Expect.isFalse(min(inf, inf).isNegative());
+  Expect.isTrue(min(inf, -499.0).isNegative);
+  Expect.isTrue(min(inf, -499).isNegative);
+  Expect.isTrue(min(inf, -0.0).isNegative);
+  Expect.isFalse(min(inf, 0.0).isNegative);
+  Expect.isFalse(min(inf, 0).isNegative);
+  Expect.isFalse(min(inf, 499).isNegative);
+  Expect.isFalse(min(inf, 499.0).isNegative);
+  Expect.isFalse(min(inf, inf).isNegative);
 }
 
 testMax() {
@@ -294,15 +294,15 @@
   var inf = double.INFINITY;
   var nan = double.NAN;
 
-  Expect.isTrue(max(nan, nan).isNaN());
-  Expect.isTrue(max(nan, -inf).isNaN());
-  Expect.isTrue(max(nan, -499.0).isNaN());
-  Expect.isTrue(max(nan, -499).isNaN());
-  Expect.isTrue(max(nan, -0.0).isNaN());
-  Expect.isTrue(max(nan, 0.0).isNaN());
-  Expect.isTrue(max(nan, 499.0).isNaN());
-  Expect.isTrue(max(nan, 499).isNaN());
-  Expect.isTrue(max(nan, inf).isNaN());
+  Expect.isTrue(max(nan, nan).isNaN);
+  Expect.isTrue(max(nan, -inf).isNaN);
+  Expect.isTrue(max(nan, -499.0).isNaN);
+  Expect.isTrue(max(nan, -499).isNaN);
+  Expect.isTrue(max(nan, -0.0).isNaN);
+  Expect.isTrue(max(nan, 0.0).isNaN);
+  Expect.isTrue(max(nan, 499.0).isNaN);
+  Expect.isTrue(max(nan, 499).isNaN);
+  Expect.isTrue(max(nan, inf).isNaN);
 
   Expect.equals(inf, max(inf, inf));
   Expect.equals(inf, max(inf, 499.0));
@@ -313,7 +313,7 @@
   Expect.equals(inf, max(inf, -499));
   Expect.equals(inf, max(inf, -499.0));
   Expect.equals(inf, max(inf, -inf));
-  Expect.isTrue(max(inf, nan).isNaN());
+  Expect.isTrue(max(inf, nan).isNaN);
 
   Expect.equals(inf, max(499.0, inf));
   Expect.equals(499.0, max(499.0, 499.0));
@@ -324,7 +324,7 @@
   Expect.equals(499.0, max(499.0, -499));
   Expect.equals(499.0, max(499.0, -499.0));
   Expect.equals(499.0, max(499.0, -inf));
-  Expect.isTrue(max(499.0, nan).isNaN());
+  Expect.isTrue(max(499.0, nan).isNaN);
 
   Expect.isTrue(max(499.0, 499.0) is double);
   Expect.isTrue(max(499.0, 499) is double);
@@ -344,7 +344,7 @@
   Expect.equals(499, max(499, -499));
   Expect.equals(499, max(499, -499.0));
   Expect.equals(499, max(499, -inf));
-  Expect.isTrue(max(499, nan).isNaN());
+  Expect.isTrue(max(499, nan).isNaN);
 
   Expect.isTrue(max(499, 499.0) is int);
   Expect.isTrue(max(499, 499) is int);
@@ -364,7 +364,7 @@
   Expect.equals(0.0, max(0.0, -499));
   Expect.equals(0.0, max(0.0, -499.0));
   Expect.equals(0.0, max(0.0, -inf));
-  Expect.isTrue(max(0.0, nan).isNaN());
+  Expect.isTrue(max(0.0, nan).isNaN);
 
   Expect.isTrue(max(0.0, 499.0) is double);
   Expect.isTrue(max(0.0, 499) is int);
@@ -375,12 +375,12 @@
   Expect.isTrue(max(0.0, -499.0) is double);
   Expect.isTrue(max(0.0, -inf) is double);
 
-  Expect.isFalse(max(0.0, 0.0).isNegative());
-  Expect.isFalse(max(0.0, 0).isNegative());
-  Expect.isFalse(max(0.0, -0.0).isNegative());
-  Expect.isFalse(max(0.0, -499).isNegative());
-  Expect.isFalse(max(0.0, -499.0).isNegative());
-  Expect.isFalse(max(0.0, -inf).isNegative());
+  Expect.isFalse(max(0.0, 0.0).isNegative);
+  Expect.isFalse(max(0.0, 0).isNegative);
+  Expect.isFalse(max(0.0, -0.0).isNegative);
+  Expect.isFalse(max(0.0, -499).isNegative);
+  Expect.isFalse(max(0.0, -499.0).isNegative);
+  Expect.isFalse(max(0.0, -inf).isNegative);
 
   Expect.equals(inf, max(0, inf));
   Expect.equals(499.0, max(0, 499.0));
@@ -391,7 +391,7 @@
   Expect.equals(0, max(0, -499));
   Expect.equals(0, max(0, -499.0));
   Expect.equals(0, max(0, -inf));
-  Expect.isTrue(max(0, nan).isNaN());
+  Expect.isTrue(max(0, nan).isNaN);
 
   Expect.isTrue(max(0, 499.0) is double);
   Expect.isTrue(max(0, 499) is int);
@@ -402,12 +402,12 @@
   Expect.isTrue(max(0, -499.0) is int);
   Expect.isTrue(max(0, -inf) is int);
 
-  Expect.isFalse(max(0, 0.0).isNegative());
-  Expect.isFalse(max(0, 0).isNegative());
-  Expect.isFalse(max(0, -0.0).isNegative());
-  Expect.isFalse(max(0, -499).isNegative());
-  Expect.isFalse(max(0, -499.0).isNegative());
-  Expect.isFalse(max(0, -inf).isNegative());
+  Expect.isFalse(max(0, 0.0).isNegative);
+  Expect.isFalse(max(0, 0).isNegative);
+  Expect.isFalse(max(0, -0.0).isNegative);
+  Expect.isFalse(max(0, -499).isNegative);
+  Expect.isFalse(max(0, -499.0).isNegative);
+  Expect.isFalse(max(0, -inf).isNegative);
 
   Expect.equals(inf, max(-0.0, inf));
   Expect.equals(499.0, max(-0.0, 499.0));
@@ -418,7 +418,7 @@
   Expect.equals(-0.0, max(-0.0, -499));
   Expect.equals(-0.0, max(-0.0, -499.0));
   Expect.equals(-0.0, max(-0.0, -inf));
-  Expect.isTrue(max(-0.0, nan).isNaN());
+  Expect.isTrue(max(-0.0, nan).isNaN);
 
   Expect.isTrue(max(-0.0, 499.0) is double);
   Expect.isTrue(max(-0.0, 499) is int);
@@ -429,12 +429,12 @@
   Expect.isTrue(max(-0.0, -499.0) is double);
   Expect.isTrue(max(-0.0, -inf) is double);
 
-  Expect.isFalse(max(-0.0, 0.0).isNegative());
-  Expect.isFalse(max(-0.0, 0).isNegative());
-  Expect.isTrue(max(-0.0, -0.0).isNegative());
-  Expect.isTrue(max(-0.0, -499).isNegative());
-  Expect.isTrue(max(-0.0, -499.0).isNegative());
-  Expect.isTrue(max(-0.0, -inf).isNegative());
+  Expect.isFalse(max(-0.0, 0.0).isNegative);
+  Expect.isFalse(max(-0.0, 0).isNegative);
+  Expect.isTrue(max(-0.0, -0.0).isNegative);
+  Expect.isTrue(max(-0.0, -499).isNegative);
+  Expect.isTrue(max(-0.0, -499.0).isNegative);
+  Expect.isTrue(max(-0.0, -inf).isNegative);
 
   Expect.equals(inf, max(-499, inf));
   Expect.equals(499.0, max(-499, 499.0));
@@ -445,7 +445,7 @@
   Expect.equals(-499, max(-499, -499));
   Expect.equals(-499, max(-499, -499.0));
   Expect.equals(-499, max(-499, -inf));
-  Expect.isTrue(max(-499, nan).isNaN());
+  Expect.isTrue(max(-499, nan).isNaN);
 
   Expect.isTrue(max(-499, 499.0) is double);
   Expect.isTrue(max(-499, 499) is int);
@@ -456,12 +456,12 @@
   Expect.isTrue(max(-499, -499.0) is int);
   Expect.isTrue(max(-499, -inf) is int);
 
-  Expect.isFalse(max(-499, 0.0).isNegative());
-  Expect.isFalse(max(-499, 0).isNegative());
-  Expect.isTrue(max(-499, -0.0).isNegative());
-  Expect.isTrue(max(-499, -499).isNegative());
-  Expect.isTrue(max(-499, -499.0).isNegative());
-  Expect.isTrue(max(-499, -inf).isNegative());
+  Expect.isFalse(max(-499, 0.0).isNegative);
+  Expect.isFalse(max(-499, 0).isNegative);
+  Expect.isTrue(max(-499, -0.0).isNegative);
+  Expect.isTrue(max(-499, -499).isNegative);
+  Expect.isTrue(max(-499, -499.0).isNegative);
+  Expect.isTrue(max(-499, -inf).isNegative);
 
   Expect.equals(inf, max(-499.0, inf));
   Expect.equals(499.0, max(-499.0, 499.0));
@@ -472,7 +472,7 @@
   Expect.equals(-499.0, max(-499.0, -499));
   Expect.equals(-499.0, max(-499.0, -499.0));
   Expect.equals(-499.0, max(-499.0, -inf));
-  Expect.isTrue(max(-499.0, nan).isNaN());
+  Expect.isTrue(max(-499.0, nan).isNaN);
 
   Expect.isTrue(max(-499.0, 499.0) is double);
   Expect.isTrue(max(-499.0, 499) is int);
@@ -483,12 +483,12 @@
   Expect.isTrue(max(-499.0, -499.0) is double);
   Expect.isTrue(max(-499.0, -inf) is double);
 
-  Expect.isFalse(max(-499.0, 0.0).isNegative());
-  Expect.isFalse(max(-499.0, 0).isNegative());
-  Expect.isTrue(max(-499.0, -0.0).isNegative());
-  Expect.isTrue(max(-499.0, -499).isNegative());
-  Expect.isTrue(max(-499.0, -499.0).isNegative());
-  Expect.isTrue(max(-499.0, -inf).isNegative());
+  Expect.isFalse(max(-499.0, 0.0).isNegative);
+  Expect.isFalse(max(-499.0, 0).isNegative);
+  Expect.isTrue(max(-499.0, -0.0).isNegative);
+  Expect.isTrue(max(-499.0, -499).isNegative);
+  Expect.isTrue(max(-499.0, -499.0).isNegative);
+  Expect.isTrue(max(-499.0, -inf).isNegative);
 
   Expect.equals(inf, max(-inf, inf));
   Expect.equals(499.0, max(-inf, 499.0));
@@ -499,7 +499,7 @@
   Expect.equals(-499, max(-inf, -499));
   Expect.equals(-499.0, max(-inf, -499.0));
   Expect.equals(-inf, max(-inf, -inf));
-  Expect.isTrue(max(-inf, nan).isNaN());
+  Expect.isTrue(max(-inf, nan).isNaN);
 
   Expect.isTrue(max(-inf, 499.0) is double);
   Expect.isTrue(max(-inf, 499) is int);
@@ -510,12 +510,12 @@
   Expect.isTrue(max(-inf, -499.0) is double);
   Expect.isTrue(max(-inf, -inf) is double);
 
-  Expect.isFalse(max(-inf, 0.0).isNegative());
-  Expect.isFalse(max(-inf, 0).isNegative());
-  Expect.isTrue(max(-inf, -0.0).isNegative());
-  Expect.isTrue(max(-inf, -499).isNegative());
-  Expect.isTrue(max(-inf, -499.0).isNegative());
-  Expect.isTrue(max(-inf, -inf).isNegative());
+  Expect.isFalse(max(-inf, 0.0).isNegative);
+  Expect.isFalse(max(-inf, 0).isNegative);
+  Expect.isTrue(max(-inf, -0.0).isNegative);
+  Expect.isTrue(max(-inf, -499).isNegative);
+  Expect.isTrue(max(-inf, -499.0).isNegative);
+  Expect.isTrue(max(-inf, -inf).isNegative);
 }
 
 main() {
diff --git a/tests/standalone/crypto/base64_test.dart b/tests/standalone/crypto/base64_test.dart
index 5a77da5..1d47aac 100644
--- a/tests/standalone/crypto/base64_test.dart
+++ b/tests/standalone/crypto/base64_test.dart
@@ -24,13 +24,13 @@
       "Rpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo\r\n"
       "ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm"
       "5hbCBwbGVhc3VyZS4=";
-  Expect.equals(expected, _Base64._encode(line.charCodes()));
-  Expect.listEquals(line.charCodes(), _Base64._decode(expected));
+  Expect.equals(expected, _Base64._encode(line.charCodes));
+  Expect.listEquals(line.charCodes, _Base64._decode(expected));
 
   line = "Simple string";
   expected = "U2ltcGxlIHN0cmluZw==";
-  Expect.equals(expected, _Base64._encode(line.charCodes()));
-  Expect.listEquals(line.charCodes(), _Base64._decode(expected));
+  Expect.equals(expected, _Base64._encode(line.charCodes));
+  Expect.listEquals(line.charCodes, _Base64._decode(expected));
 
   for (int i = 0; i < 256; i++) {
     List<int> x = [i];
diff --git a/tests/standalone/io/directory_test.dart b/tests/standalone/io/directory_test.dart
index 73f4c4c..7f29525 100644
--- a/tests/standalone/io/directory_test.dart
+++ b/tests/standalone/io/directory_test.dart
@@ -16,6 +16,7 @@
     Directory subDirectory = new Directory("${directory.path}/subdir");
     Expect.isFalse(subDirectory.existsSync());
     subDirectory.createSync();
+    Expect.isTrue(subDirectory.existsSync());
     File f = new File('${subDirectory.path}/file.txt');
     Expect.isFalse(f.existsSync());
     f.createSync();
@@ -413,7 +414,7 @@
   }
 
   void deletePhaseCallback() {
-    if (!createdDirectories.isEmpty()) {
+    if (!createdDirectories.isEmpty) {
       current = createdDirectories.removeLast();
       current.deleteSync();
       deletePhaseCallback();
@@ -459,6 +460,83 @@
 }
 
 
+testCreateExistingSync() {
+  // Test that creating an existing directory succeeds.
+  var d = new Directory('');
+  var temp = d.createTempSync();
+  var subDir = new Directory('${temp.path}/flaf');
+  Expect.isFalse(subDir.existsSync());
+  subDir.createSync();
+  Expect.isTrue(subDir.existsSync());
+  subDir.createSync();
+  Expect.isTrue(subDir.existsSync());
+  temp.deleteRecursivelySync();
+}
+
+
+testCreateExisting() {
+  // Test that creating an existing directory succeeds.
+  var port = new ReceivePort();
+  var d = new Directory('');
+  d.createTemp().then((temp) {
+    var subDir = new Directory('${temp.path}/flaf');
+    subDir.exists().then((dirExists) {
+      Expect.isFalse(dirExists);
+      subDir.create().then((_) {
+        subDir.exists().then((dirExists) {
+          Expect.isTrue(dirExists);
+          subDir.create().then((_) {
+            subDir.exists().then((dirExists) {
+              Expect.isTrue(dirExists);
+              temp.deleteRecursively().then((_) {
+                port.close();
+              });
+            });
+          });
+        });
+      });
+    });
+  });
+}
+
+
+testCreateDirExistingFileSync() {
+  // Test that creating an existing directory succeeds.
+  var d = new Directory('');
+  var temp = d.createTempSync();
+  var path = '${temp.path}/flaf';
+  var file = new File(path);
+  file.createSync();
+  Expect.isTrue(file.existsSync());
+  Expect.throws(new Directory(path).createSync,
+                (e) => e is DirectoryIOException);
+  temp.deleteRecursivelySync();
+}
+
+
+testCreateDirExistingFile() {
+  // Test that creating an existing directory succeeds.
+  var port = new ReceivePort();
+  var d = new Directory('');
+  d.createTemp().then((temp) {
+    var path = '${temp.path}/flaf';
+    var file = new File(path);
+    var subDir = new Directory(path);
+    file.create().then((_) {
+      subDir.create()
+        ..then((_) { Expect.fail("dir create should fail on existing file"); })
+        ..handleException((e) {
+            Expect.isTrue(e is DirectoryIOException);
+            temp.deleteRecursively().then((_) {
+              port.close();
+            });
+            return true;
+          });
+    });
+  });
+}
+
+
 testRename() {
   var d = new Directory('');
   var temp1 = d.createTempSync();
@@ -483,5 +561,9 @@
   NestedTempDirectoryTest.testMain();
   testCreateTempErrorSync();
   testCreateTempError();
+  testCreateExistingSync();
+  testCreateExisting();
+  testCreateDirExistingFileSync();
+  testCreateDirExistingFile();
   testRename();
 }
diff --git a/tests/standalone/io/file_input_stream_test.dart b/tests/standalone/io/file_input_stream_test.dart
index 31733b0..1b7475d 100644
--- a/tests/standalone/io/file_input_stream_test.dart
+++ b/tests/standalone/io/file_input_stream_test.dart
@@ -33,7 +33,7 @@
 void testInputStreamAsync() {
   String fileName = getFilename("tests/standalone/io/readuntil_test.dat");
   // File contains "Hello Dart\nwassup!\n"
-  var expected = "Hello Dart\nwassup!\n".charCodes();
+  var expected = "Hello Dart\nwassup!\n".charCodes;
   InputStream x = (new File(fileName)).openInputStream();
   var byteCount = 0;
   x.onData = () {
@@ -95,7 +95,7 @@
 
 void testUnreadyInputStream() {
   String fileName = getFilename("tests/standalone/io/readuntil_test.dat");
-  var expected = "Hello Dart\nwassup!\n".charCodes();
+  var expected = "Hello Dart\nwassup!\n".charCodes;
   InputStream x = (new File(fileName)).openInputStream();
   List<int> buffer = new List<int>(100);
 
diff --git a/tests/standalone/io/file_system_links_test.dart b/tests/standalone/io/file_system_links_test.dart
index 453ebb5..e0f90e0 100644
--- a/tests/standalone/io/file_system_links_test.dart
+++ b/tests/standalone/io/file_system_links_test.dart
@@ -65,7 +65,7 @@
   var y = '${temp.path}${Platform.pathSeparator}y';
   new File(x).createSync();
   createLink(x, y, true, () {
-    var data = "asdf".charCodes();
+    var data = "asdf".charCodes;
     var output = new File(y).openOutputStream(FileMode.WRITE);
     output.write(data);
     output.onNoPendingWrites = () {
diff --git a/tests/standalone/io/file_test.dart b/tests/standalone/io/file_test.dart
index 70d7f79..4fd426a 100644
--- a/tests/standalone/io/file_test.dart
+++ b/tests/standalone/io/file_test.dart
@@ -398,7 +398,7 @@
     File file = new File(filename);
     file.createSync();
     Expect.isTrue(new File(filename).existsSync());
-    List<int> buffer = content.charCodes();
+    List<int> buffer = content.charCodes;
     RandomAccessFile openedFile = file.openSync(FileMode.WRITE);
     openedFile.writeListSync(buffer, 0, buffer.length);
     openedFile.closeSync();
@@ -421,7 +421,7 @@
     String filename = tempDirectory.path.concat("/outstream_write_append");
     File file = new File(filename);
     file.createSync();
-    List<int> buffer = content.charCodes();
+    List<int> buffer = content.charCodes;
     OutputStream outStream = file.openOutputStream();
     outStream.write(buffer);
     outStream.onNoPendingWrites = () {
@@ -458,7 +458,7 @@
     String filename = tempDirectory.path.concat("/outstream_write_string");
     File file = new File(filename);
     file.createSync();
-    List<int> buffer = content.charCodes();
+    List<int> buffer = content.charCodes;
     OutputStream outStream = file.openOutputStream();
     outStream.writeString("abcdABCD");
     outStream.writeString("abcdABCD", Encoding.UTF_8);
@@ -1045,11 +1045,11 @@
       f.readAsText(Encoding.UTF_8).then((text) {
         Expect.equals(6, text.length);
         var expected = [955, 120, 46, 32, 120, 10];
-        Expect.listEquals(expected, text.charCodes());
+        Expect.listEquals(expected, text.charCodes);
         f.readAsText(Encoding.ISO_8859_1).then((text) {
           Expect.equals(7, text.length);
           var expected = [206, 187, 120, 46, 32, 120, 10];
-          Expect.listEquals(expected, text.charCodes());
+          Expect.listEquals(expected, text.charCodes);
           var readAsTextFuture = f.readAsText(Encoding.ASCII);
           readAsTextFuture.then((text) {
             Expect.fail("Non-ascii char should cause error");
@@ -1086,12 +1086,12 @@
     text = new File(name).readAsTextSync();
     Expect.equals(6, text.length);
     var expected = [955, 120, 46, 32, 120, 10];
-    Expect.listEquals(expected, text.charCodes());
+    Expect.listEquals(expected, text.charCodes);
     Expect.throws(() { new File(name).readAsTextSync(Encoding.ASCII); });
     text = new File(name).readAsTextSync(Encoding.ISO_8859_1);
     expected = [206, 187, 120, 46, 32, 120, 10];
     Expect.equals(7, text.length);
-    Expect.listEquals(expected, text.charCodes());
+    Expect.listEquals(expected, text.charCodes);
   }
 
   static void testReadAsTextSyncEmptyFile() {
diff --git a/tests/standalone/io/http_basic_test.dart b/tests/standalone/io/http_basic_test.dart
index eba971b..0407046 100644
--- a/tests/standalone/io/http_basic_test.dart
+++ b/tests/standalone/io/http_basic_test.dart
@@ -228,7 +228,7 @@
           request.outputStream.writeString(data.substring(10, data.length));
         } else {
           request.contentLength = data.length;
-          request.outputStream.write(data.charCodes());
+          request.outputStream.write(data.charCodes);
         }
         request.outputStream.close();
       };
diff --git a/tests/standalone/io/http_client_test.dart b/tests/standalone/io/http_client_test.dart
index 9fe3f15..55ec617 100644
--- a/tests/standalone/io/http_client_test.dart
+++ b/tests/standalone/io/http_client_test.dart
@@ -25,25 +25,31 @@
   conn.onError = (error) => Expect.fail("Unexpected IO error");
 }
 
+int testGoogleUrlCount = 0;
 void testGoogleUrl() {
   HttpClient client = new HttpClient();
 
   void testUrl(String url) {
-    var conn = client.getUrl(new Uri.fromString(url));
+    var requestUri = new Uri.fromString(url);
+    var conn = client.getUrl(requestUri);
 
     conn.onRequest = (HttpClientRequest request) {
       request.outputStream.close();
     };
     conn.onResponse = (HttpClientResponse response) {
+      testGoogleUrlCount++;
       Expect.isTrue(response.statusCode < 500);
+      if (requestUri.path.length == 0) {
+        Expect.isTrue(response.statusCode != 404);
+      }
       response.inputStream.onData = () {
         response.inputStream.read();
       };
       response.inputStream.onClosed = () {
-        client.shutdown();
+        if (testGoogleUrlCount == 5) client.shutdown();
       };
     };
-    conn.onError = (error) => Expect.fail("Unexpected IO error");
+    conn.onError = (error) => Expect.fail("Unexpected IO error $error");
   }
 
   testUrl('http://www.google.com');
diff --git a/tests/standalone/io/http_parser_test.dart b/tests/standalone/io/http_parser_test.dart
index 2e18a88..456ffc2 100644
--- a/tests/standalone/io/http_parser_test.dart
+++ b/tests/standalone/io/http_parser_test.dart
@@ -110,7 +110,7 @@
 
     // Test parsing the request three times delivering the data in
     // different chunks.
-    List<int> requestData = request.charCodes();
+    List<int> requestData = request.charCodes;
     testWrite(requestData);
     testWrite(requestData, 10);
     testWrite(requestData, 1);
@@ -143,7 +143,7 @@
 
     // Test parsing the request three times delivering the data in
     // different chunks.
-    List<int> requestData = request.charCodes();
+    List<int> requestData = request.charCodes;
     testWrite(requestData);
     testWrite(requestData, 10);
     testWrite(requestData, 1);
@@ -259,7 +259,7 @@
 
     // Test parsing the request three times delivering the data in
     // different chunks.
-    List<int> responseData = response.charCodes();
+    List<int> responseData = response.charCodes;
     testWrite(responseData);
     testWrite(responseData, 10);
     testWrite(responseData, 1);
@@ -291,7 +291,7 @@
 
     // Test parsing the request three times delivering the data in
     // different chunks.
-    List<int> responseData = response.charCodes();
+    List<int> responseData = response.charCodes;
     testWrite(responseData);
     testWrite(responseData, 10);
     testWrite(responseData, 1);
diff --git a/tests/standalone/io/http_read_test.dart b/tests/standalone/io/http_read_test.dart
index 3a0c849..15e2606 100644
--- a/tests/standalone/io/http_read_test.dart
+++ b/tests/standalone/io/http_read_test.dart
@@ -173,7 +173,7 @@
           request.outputStream.writeString(data.substring(10, data.length));
         } else {
           request.contentLength = data.length;
-          request.outputStream.write(data.charCodes());
+          request.outputStream.write(data.charCodes);
         }
         request.outputStream.close();
       };
@@ -227,7 +227,7 @@
           request.outputStream.writeString(data.substring(10, data.length));
         } else {
           request.contentLength = data.length;
-          request.outputStream.write(data.charCodes());
+          request.outputStream.write(data.charCodes);
         }
         request.outputStream.close();
       };
diff --git a/tests/standalone/io/http_server_early_client_close_test.dart b/tests/standalone/io/http_server_early_client_close_test.dart
index fcfd9a8..66a2b06 100644
--- a/tests/standalone/io/http_server_early_client_close_test.dart
+++ b/tests/standalone/io/http_server_early_client_close_test.dart
@@ -43,7 +43,7 @@
 
     List<int> d;
     if (data is List<int>) d = data;
-    if (data is String) d = data.charCodes();
+    if (data is String) d = data.charCodes;
     if (d == null) Expect.fail("Invalid data");
     sendData(d, server.port);
 
@@ -80,7 +80,7 @@
   HttpServer server = new HttpServer();
   server.listen("127.0.0.1", 0);
   void runTest(Iterator it) {
-    if (it.hasNext()) {
+    if (it.hasNext) {
       it.next().execute(server).then((_) => runTest(it));
     } else {
       server.close();
diff --git a/tests/standalone/io/http_server_socket_test.dart b/tests/standalone/io/http_server_socket_test.dart
index 113d75be..a7722ca 100644
--- a/tests/standalone/io/http_server_socket_test.dart
+++ b/tests/standalone/io/http_server_socket_test.dart
@@ -109,7 +109,7 @@
 
   OutputStream get outputStream => _outputStream;
 
-  int hashCode() => _hashCode;
+  int get hashCode => _hashCode;
 
   List<int> _read;
   bool _closed = false;
@@ -127,9 +127,9 @@
       _sockets = new Set<Socket>();
 
   void spawnSocket(var data, String response, int cutOff, bool closeAsError) {
-    if (data is String) data = data.charCodes();
+    if (data is String) data = data.charCodes;
     SocketMock socket = new SocketMock(data,
-                                       response.charCodes(),
+                                       response.charCodes,
                                        cutOff,
                                        closeAsError);
     _sockets.add(socket);
diff --git a/tests/standalone/io/http_session_test.dart b/tests/standalone/io/http_session_test.dart
new file mode 100644
index 0000000..dd2e059
--- /dev/null
+++ b/tests/standalone/io/http_session_test.dart
@@ -0,0 +1,103 @@
+// 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.
+
+#import("dart:io");
+
+const SESSION_ID = "DARTSESSID";
+
+String getSessionId(List<Cookie> cookies) {
+  var id = cookies.reduce(null, (last, cookie) {
+    if (last != null) return last;
+    if (cookie.name.toUpperCase() == SESSION_ID) {
+      return cookie.value;
+    }
+    return null;
+  });
+  Expect.isNotNull(id);
+  return id;
+}
+
+Future<String> connectGetSession(int port, [String session]) {
+  var c = new Completer();
+  var client = new HttpClient();
+  var conn = client.get("127.0.0.1", port, "/");
+  conn.onRequest = (request) {
+    if (session != null) {
+      request.cookies.add(new Cookie(SESSION_ID, session));
+    }
+    request.outputStream.close();
+  };
+  conn.onResponse = (response) {
+    client.shutdown();
+    c.complete(getSessionId(response.cookies));
+  };
+  return c.future;
+}
+
+void testSessions(int sessionCount) {
+  HttpServer server = new HttpServer();
+  server.listen("127.0.0.1", 0);
+  var sessions = new Set();
+  server.defaultRequestHandler = (request, response) {
+    sessions.add(request.session().id);
+    response.outputStream.close();
+  };
+
+  var futures = [];
+  for (int i = 0; i < sessionCount; i++) {
+    futures.add(connectGetSession(server.port).chain((session) {
+      Expect.isNotNull(session);
+      Expect.isTrue(sessions.contains(session));
+      return connectGetSession(server.port, session).transform((session2) {
+        Expect.equals(session2, session);
+        Expect.isTrue(sessions.contains(session2));
+        return session2;
+        });
+    }));
+  }
+  Futures.wait(futures).then((clientSessions) {
+    Expect.equals(sessions.length, sessionCount);
+    Expect.setEquals(new Set.from(clientSessions), sessions);
+    server.close();
+  });
+}
+
+void testTimeout(int sessionCount) {
+  HttpServer server = new HttpServer();
+  server.sessionTimeout = 0;
+  server.listen("127.0.0.1", 0);
+  var timeouts = [];
+  server.defaultRequestHandler = (request, response) {
+    var c = new Completer();
+    timeouts.add(c.future);
+    request.session().onTimeout = () {
+      c.complete(null);
+    };
+    response.outputStream.close();
+  };
+
+  var futures = [];
+  for (int i = 0; i < sessionCount; i++) {
+    futures.add(connectGetSession(server.port));
+  }
+  Futures.wait(futures).then((clientSessions) {
+    Futures.wait(timeouts).then((_) {
+      futures = [];
+      for (var id in clientSessions) {
+        futures.add(connectGetSession(server.port, id).transform((session) {
+          Expect.isNotNull(session);
+          Expect.notEquals(id, session);
+        }));
+      }
+      Futures.wait(futures).then((_) {
+        server.close();
+      });
+    });
+  });
+}
+
+void main() {
+  testSessions(5);
+  testTimeout(5);
+}
diff --git a/tests/standalone/io/mime_multipart_parser_test.dart b/tests/standalone/io/mime_multipart_parser_test.dart
index 32af07a..d349a4f 100644
--- a/tests/standalone/io/mime_multipart_parser_test.dart
+++ b/tests/standalone/io/mime_multipart_parser_test.dart
@@ -42,7 +42,7 @@
       if (expectedParts[partCount] != null) {
         List<int> expectedPart;
         if (expectedParts[partCount] is String) {
-          expectedPart = expectedParts[partCount].charCodes();
+          expectedPart = expectedParts[partCount].charCodes;
         } else {
           expectedPart = expectedParts[partCount];
         }
@@ -78,7 +78,7 @@
 
   // Test parsing the data three times delivering the data in
   // different chunks.
-  List<int> data = message.charCodes();
+  List<int> data = message.charCodes;
   testWrite(data);
   testWrite(data, 10);
   testWrite(data, 2);
diff --git a/tests/standalone/io/process_environment_test.dart b/tests/standalone/io/process_environment_test.dart
index 1a2009e..df635ec 100644
--- a/tests/standalone/io/process_environment_test.dart
+++ b/tests/standalone/io/process_environment_test.dart
@@ -23,10 +23,10 @@
 testEnvironment() {
   var donePort = new ReceivePort();
   Map env = Platform.environment;
-  Expect.isFalse(env.isEmpty());
+  Expect.isFalse(env.isEmpty);
   // Check that some value in the environment stays the same when passed
   // to another process.
-  for (var k in env.getKeys()) {
+  for (var k in env.keys) {
     runEnvironmentProcess(env, k, (output) {
       // Only check startsWith. The print statements will add
       // newlines at the end.
diff --git a/tests/standalone/io/process_kill_test.dart b/tests/standalone/io/process_kill_test.dart
new file mode 100644
index 0000000..400902e
--- /dev/null
+++ b/tests/standalone/io/process_kill_test.dart
@@ -0,0 +1,26 @@
+// 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.
+//
+// Process test program to test process communication.
+
+#library("ProcessKillTest");
+#import("dart:io");
+#source("process_test_util.dart");
+
+testKill() {
+  // Start a process that will hang waiting for input until killed.
+  Process.start(getProcessTestFileName(), const ["0", "1", "0", "0"]).then((p) {
+    p.onExit = (exitCode) {
+      // Process killed from the side so exit code is not 0.
+      Expect.isTrue(exitCode != 0);
+      // Killing a process that is already dead returns false.
+      Expect.isFalse(p.kill());
+    };
+    Expect.isTrue(p.kill());
+  });
+}
+
+main() {
+  testKill();
+}
diff --git a/tests/standalone/io/process_run_output_test.dart b/tests/standalone/io/process_run_output_test.dart
index 4d8ae84..3111df9 100644
--- a/tests/standalone/io/process_run_output_test.dart
+++ b/tests/standalone/io/process_run_output_test.dart
@@ -14,7 +14,7 @@
   } else if (encoding == 'latin1') {
     Expect.equals(output, 'æøå');
   } else if (encoding == 'utf8') {
-    Expect.listEquals(output.charCodes(), [955]);
+    Expect.listEquals(output.charCodes, [955]);
   }
 }
 
diff --git a/tests/standalone/io/process_stderr_test.dart b/tests/standalone/io/process_stderr_test.dart
index 49336e1..8cd987f 100644
--- a/tests/standalone/io/process_stderr_test.dart
+++ b/tests/standalone/io/process_stderr_test.dart
@@ -20,7 +20,7 @@
       Expect.equals(expectedExitCode, exitCode);
     };
 
-    List<int> data = "ABCDEFGHI\n".charCodes();
+    List<int> data = "ABCDEFGHI\n".charCodes;
     final int dataSize = data.length;
 
     InputStream input = process.stderr;
diff --git a/tests/standalone/io/process_stdout_test.dart b/tests/standalone/io/process_stdout_test.dart
index 614d161..ecebe73 100644
--- a/tests/standalone/io/process_stdout_test.dart
+++ b/tests/standalone/io/process_stdout_test.dart
@@ -20,7 +20,7 @@
       Expect.equals(expectedExitCode, exitCode);
     };
 
-    List<int> data = "ABCDEFGHI\n".charCodes();
+    List<int> data = "ABCDEFGHI\n".charCodes;
     final int dataSize = data.length;
 
     InputStream input = process.stdout;
diff --git a/tests/standalone/io/read_into_const_list_test.dart b/tests/standalone/io/read_into_const_list_test.dart
index b87d2d8..c7d1da1 100644
--- a/tests/standalone/io/read_into_const_list_test.dart
+++ b/tests/standalone/io/read_into_const_list_test.dart
@@ -22,7 +22,7 @@
     input.readInto(a, 0, 1);
     Expect.fail("no exception thrown");
   } catch (e) {
-    Expect.isTrue(e is UnsupportedOperationException);
+    Expect.isTrue(e is UnsupportedError);
   }
   Expect.equals(0, a[0]);
   Expect.equals(0, b[0]);
diff --git a/tests/standalone/io/regress-1925.dart b/tests/standalone/io/regress-1925.dart
index 4409e6a..6e68160 100644
--- a/tests/standalone/io/regress-1925.dart
+++ b/tests/standalone/io/regress-1925.dart
@@ -39,7 +39,7 @@
     var buffer = new List(5);
     Socket socket = new Socket(TestingServer.HOST, _port);
     socket.onConnect = () {
-      socket.outputStream.write("12345".charCodes());
+      socket.outputStream.write("12345".charCodes);
       socket.outputStream.close();
       socket.inputStream.onData = () {
         count += socket.inputStream.readInto(buffer, count);
diff --git a/tests/standalone/io/socket_close_test.dart b/tests/standalone/io/socket_close_test.dart
index 6966a70..5996173 100644
--- a/tests/standalone/io/socket_close_test.dart
+++ b/tests/standalone/io/socket_close_test.dart
@@ -102,7 +102,7 @@
       void writeHello() {
         int bytesWritten = 0;
         while (bytesWritten != 5) {
-          bytesWritten += _socket.writeList("Hello".charCodes(),
+          bytesWritten += _socket.writeList("Hello".charCodes,
                                             bytesWritten,
                                             5 - bytesWritten);
         }
@@ -229,7 +229,7 @@
     void writeHello() {
       int bytesWritten = 0;
       while (bytesWritten != 5) {
-        bytesWritten += connection.writeList("Hello".charCodes(),
+        bytesWritten += connection.writeList("Hello".charCodes,
                                              bytesWritten,
                                              5 - bytesWritten);
       }
diff --git a/tests/standalone/io/socket_stream_close_test.dart b/tests/standalone/io/socket_stream_close_test.dart
index 31bafd1..0c1e47f 100644
--- a/tests/standalone/io/socket_stream_close_test.dart
+++ b/tests/standalone/io/socket_stream_close_test.dart
@@ -109,7 +109,7 @@
           proceed();
           break;
         case 1:
-          _socket.outputStream.write("Hello".charCodes());
+          _socket.outputStream.write("Hello".charCodes);
           _socket.outputStream.onNoPendingWrites = () {
             _socket.inputStream.close();
             proceed();
@@ -118,20 +118,20 @@
         case 2:
         case 3:
         case 4:
-          _socket.outputStream.write("Hello".charCodes());
+          _socket.outputStream.write("Hello".charCodes);
           break;
         case 5:
-          _socket.outputStream.write("Hello".charCodes());
+          _socket.outputStream.write("Hello".charCodes);
           _socket.outputStream.onNoPendingWrites = () {
             _socket.outputStream.close();
           };
           break;
         case 6:
-          _socket.outputStream.write("Hello".charCodes());
+          _socket.outputStream.write("Hello".charCodes);
           break;
         case 7:
         case 8:
-          _socket.outputStream.write("Hello".charCodes());
+          _socket.outputStream.write("Hello".charCodes);
           _socket.outputStream.onNoPendingWrites = () {
             _socket.outputStream.close();
           };
@@ -255,7 +255,7 @@
         case 3:
           readBytes(() {
             _dataEvents++;
-            connection.outputStream.write("Hello".charCodes());
+            connection.outputStream.write("Hello".charCodes);
             connection.outputStream.onNoPendingWrites = () {
               connection.inputStream.close();
             };
@@ -264,21 +264,21 @@
         case 4:
           readBytes(() {
             _dataEvents++;
-            connection.outputStream.write("Hello".charCodes());
+            connection.outputStream.write("Hello".charCodes);
             connection.inputStream.close();
           });
           break;
         case 5:
           readBytes(() {
             _dataEvents++;
-            connection.outputStream.write("Hello".charCodes());
+            connection.outputStream.write("Hello".charCodes);
           });
           break;
         case 6:
         case 7:
           readBytes(() {
             _dataEvents++;
-            connection.outputStream.write("Hello".charCodes());
+            connection.outputStream.write("Hello".charCodes);
             connection.outputStream.onNoPendingWrites = () {
               connection.outputStream.close();
             };
@@ -287,7 +287,7 @@
         case 8:
           readBytes(() {
             _dataEvents++;
-            connection.outputStream.write("Hello".charCodes());
+            connection.outputStream.write("Hello".charCodes);
             connection.outputStream.close();
           });
           break;
diff --git a/tests/standalone/io/string_stream_test.dart b/tests/standalone/io/string_stream_test.dart
index 7084a07..ade6c8d 100644
--- a/tests/standalone/io/string_stream_test.dart
+++ b/tests/standalone/io/string_stream_test.dart
@@ -97,7 +97,7 @@
 
   stream.onData = stringData;
   stream.onClosed = streamClosed;
-  s.write("Line".charCodes());
+  s.write("Line".charCodes);
 }
 
 void testReadLine2() {
@@ -121,7 +121,7 @@
       Expect.equals(2, stream.available());
       Expect.equals(null, line);
       stage++;
-      s.write("ne4\n".charCodes());
+      s.write("ne4\n".charCodes);
     } else if (stage == 1) {
       Expect.equals(6, stream.available());
       line = stream.readLine();
@@ -130,7 +130,7 @@
       line = stream.readLine();
       Expect.equals(null, line);
       stage++;
-      s.write("\n\n\r\n\r\n\r\r".charCodes());
+      s.write("\n\n\r\n\r\n\r\r".charCodes);
     } else if (stage == 2) {
       // Expect 5 empty lines. As long as the stream is not closed the
       // final \r cannot be interpreted as a end of line.
@@ -162,7 +162,7 @@
 
   stream.onLine = stringData;
   stream.onClosed = streamClosed;
-  s.write("Line1\nLine2\r\nLine3\rLi".charCodes());
+  s.write("Line1\nLine2\r\nLine3\rLi".charCodes);
 }
 
 void testReadChunks() {
@@ -198,7 +198,7 @@
     Expect.equals(0, stream.available());
   }
 
-  s.write("ABCD1234".charCodes());
+  s.write("ABCD1234".charCodes);
   stream.onData = stringData;
 }
 
@@ -224,7 +224,7 @@
       Expect.equals(null, data);
       data = stream.read(4);
       Expect.equals("1234", data);
-      s.write("A\r\nBCD\n1234".charCodes());
+      s.write("A\r\nBCD\n1234".charCodes);
       stage++;
     } else if (stage == 1) {
       Expect.equals(11, stream.available());
@@ -243,7 +243,7 @@
       Expect.equals(null, data);
       data = stream.read(4);
       Expect.equals("1234", data);
-      s.write("A\r\nBCD\n1234".charCodes());
+      s.write("A\r\nBCD\n1234".charCodes);
       stage++;
     } else if (stage == 2) {
       Expect.equals(11, stream.available());
@@ -264,7 +264,7 @@
     Expect.equals(true, stream.closed);
   }
 
-  s.write("A\r\nBCD\n1234".charCodes());
+  s.write("A\r\nBCD\n1234".charCodes);
   stream.onData = stringData;
   stream.onClosed = streamClosed;
 }
diff --git a/tests/standalone/io/test_runner_exit_code_test.dart b/tests/standalone/io/test_runner_exit_code_test.dart
index 9799ebb..ced3acc 100644
--- a/tests/standalone/io/test_runner_exit_code_test.dart
+++ b/tests/standalone/io/test_runner_exit_code_test.dart
@@ -5,7 +5,7 @@
 #import('dart:io');
 
 void runTests(String executable, String script, Iterator iterator) {
-  if (iterator.hasNext()) {
+  if (iterator.hasNext) {
     var progressIndicator = iterator.next();
     Process.run(executable, [script, progressIndicator]).then((result) {
       Expect.equals(1, result.exitCode);
diff --git a/tests/standalone/io/test_runner_test.dart b/tests/standalone/io/test_runner_test.dart
index 2f449e8..909d1a5 100644
--- a/tests/standalone/io/test_runner_test.dart
+++ b/tests/standalone/io/test_runner_test.dart
@@ -16,7 +16,7 @@
   // Used as TestCase.completedCallback.
   static processCompletedTest(TestCase testCase) {
     TestOutput output = testCase.output;
-    print("Test: ${testCase.commands.last().commandLine}");
+    print("Test: ${testCase.commands.last.commandLine}");
     if (output.unexpectedOutput) {
       throw "Unexpected output: ${output.result}";
     }
@@ -75,7 +75,7 @@
   // Otherwise, run one of the component tests that always pass,
   // fail, or timeout.
   var arguments = new Options().arguments;
-  if (arguments.isEmpty()) {
+  if (arguments.isEmpty) {
     testTestRunner();
   } else {
     switch (arguments[0]) {
diff --git a/tests/standalone/io/url_encoding_test.dart b/tests/standalone/io/url_encoding_test.dart
index 33b131c..4cf2eaa 100644
--- a/tests/standalone/io/url_encoding_test.dart
+++ b/tests/standalone/io/url_encoding_test.dart
@@ -25,14 +25,14 @@
   String queryString =
       '%3F=%3D&foo=bar&%26=%25&sqrt2=%E2%88%9A2&name=Franti%C5%A1ek';
   Map<String, String> map = _HttpUtils.splitQueryString(queryString);
-  for (String key in map.getKeys()) {
+  for (String key in map.keys) {
     Expect.equals(map[key], { '&'     : '%',
                               'foo'   : 'bar',
                               '?'     : '=',
                               'sqrt2' : '\u221A2',
                               'name'  : 'Franti\u0161ek'}[key]);
   }
-  Expect.setEquals(map.getKeys(), ['&', '?', 'foo', 'sqrt2', 'name']);
+  Expect.setEquals(map.keys, ['&', '?', 'foo', 'sqrt2', 'name']);
 }
 
 void main() {
diff --git a/tests/standalone/medium_integer_test.dart b/tests/standalone/medium_integer_test.dart
index dc6042c..8abdaee 100644
--- a/tests/standalone/medium_integer_test.dart
+++ b/tests/standalone/medium_integer_test.dart
@@ -101,8 +101,8 @@
     testMintAnd(0x100000001);
     var a = 100000000000;
     var b = 100000000001;
-    Expect.equals(false, a.hashCode() == b.hashCode());
-    Expect.equals(true, a.hashCode() == (b - 1).hashCode());
+    Expect.equals(false, a.hashCode == b.hashCode);
+    Expect.equals(true, a.hashCode == (b - 1).hashCode);
   }
 }
 
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index c600fda..cb5fd3e 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -6,6 +6,21 @@
 
 package/invalid_uri_test: Fail, OK # Fails intentionally
 
+[ $runtime == vm ]
+# The following tests require files in the tools-directory to be modified.
+# However the tools directory uses its own version of dart-binary. We reenable
+# these tests when we update the dart-binary.
+status_expression_test: Fail, OK
+io/status_file_parser_test: Fail, OK
+io/test_runner_exit_code_test: Fail, OK
+io/test_runner_test: Fail, OK
+
+[ $compiler == dart2js || ($compiler == none && $runtime == drt) ]
+# The following tests require files in the tools-directory to be modified.
+# However the tools directory uses its own version of dart-binary. We reenable
+# these tests when we update the dart-binary.
+status_expression_test: Fail, OK
+
 [ $runtime == vm && $checked ]
 # These tests have type errors on purpose.
 io/process_invalid_arguments_test: Fail, OK
@@ -55,7 +70,7 @@
 io/process_exit_negative_test: Fail, OK # relies on a static error that is a warning now.
 package/package_isolate_test: Skip # spawnUri does not work in dart2js. See issue 3051
 
-[ $compiler == dart2js && $runtime == d8 ]
+[ $compiler == dart2js && $jscl ]
 assert_test: Fail, OK # Assumes unspecified fields on the AssertionError.
 byte_array_test: Fail, OK # ByteArray
 deoptimization_test: Fail, OK # Requires bigint.
diff --git a/tests/utils/utils.status b/tests/utils/utils.status
index 184160c..0ccca1e 100644
--- a/tests/utils/utils.status
+++ b/tests/utils/utils.status
@@ -23,8 +23,6 @@
 *_layout_test: Skip
 
 [ $compiler == dartc ]
-dummy_compiler_test: Fail # http://dartbug.com/6073
-recursive_import_test: Fail # http://dartbug.com/6073
 
 [ $compiler == dart2dart ]
 # Skip until we stabilize language tests.
diff --git a/tools/VERSION b/tools/VERSION
index f3212af..27c08d5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
 MINOR 2
-BUILD 0
-PATCH 1
+BUILD 1
+PATCH 0
diff --git a/tools/bots/android.py b/tools/bots/android.py
new file mode 100644
index 0000000..5ccc4e9
--- /dev/null
+++ b/tools/bots/android.py
@@ -0,0 +1,55 @@
+#!/usr/bin/python
+
+# Copyright (c) 2012 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.
+
+"""
+Android buildbot steps.
+"""
+
+import re
+import sys
+
+import bot
+
+ANDROID_BUILDER = r'vm-android-(linux|mac|win)'
+
+def AndroidConfig(name, is_buildbot):
+  """Returns info for the current buildbot based on the name of the builder.
+
+  Currently, this is just:
+  - mode: always "release" (for now)
+  - system: "linux", "mac", or "win"
+  """
+  android_pattern = re.match(ANDROID_BUILDER, name)
+  if not android_pattern:
+    return None
+
+  system = android_pattern.group(1)
+  if system == 'win': system = 'windows'
+
+  return bot.BuildInfo('none', 'vm', 'release', system, checked=True)
+
+
+def AndroidSteps(build_info):
+  # TODO(efortuna): Here's where we'll run tests.
+  #bot.RunTest('android', build_info, ['android'])
+  pass
+
+def BuildAndroid(build_info):
+  """
+  Builds the android target.
+
+  - build_info: the buildInfo object, containing information about what sort of
+      build and test to be run.
+  """
+  with bot.BuildStep('Build Android'):
+    targets = ['dart']
+    args = [sys.executable, './tools/build.py', '--mode=' + build_info.mode,
+        '--os=android ' + ' '.join(targets)]
+    print 'Building Android: %s' % (' '.join(args))
+    bot.RunProcess(args)
+
+if __name__ == '__main__':
+  bot.RunBot(AndroidConfig, AndroidSteps, build_step=BuildAndroid)
diff --git a/tools/bots/bot.py b/tools/bots/bot.py
new file mode 100644
index 0000000..5bde985
--- /dev/null
+++ b/tools/bots/bot.py
@@ -0,0 +1,239 @@
+#!/usr/bin/python
+
+# Copyright (c) 2012 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.
+
+"""
+Shared code for use in the buildbot scripts.
+"""
+
+import optparse
+import os
+from os.path import abspath
+from os.path import dirname
+import subprocess
+import sys
+
+DART_PATH = dirname(dirname(dirname(abspath(__file__))))
+
+NO_COLOR_ENV = dict(os.environ)
+NO_COLOR_ENV['TERM'] = 'nocolor'
+
+BUILDER_NAME = 'BUILDBOT_BUILDERNAME'
+BUILDER_CLOBBER = 'BUILDBOT_CLOBBER'
+
+
+class BuildInfo(object):
+  """
+  Encapsulation of build information.
+
+  - compiler: None, 'dart2dart', 'dart2js' or 'dartc'.
+  - runtime: 'd8', 'ie', 'ff', 'safari', 'chrome', 'opera', or None.
+  - mode: 'debug' or 'release'.
+  - system: 'linux', 'mac', or 'win7'.
+  - checked: True if we should run in checked mode, otherwise False.
+  - host_checked: True if we should run in host checked mode, otherwise False.
+  - minified: True if we should minify the code, otherwise False
+  - shard_index: The shard we are running, None when not specified.
+  - total_shards: The total number of shards, None when not specified.
+  - is_buildbot: True if we are on a buildbot (or emulating it).
+  - test_set: Specification of a non standard test set or None.
+  """
+  def __init__(self, compiler, runtime, mode, system, checked=False,
+               host_checked=False, minified=False, shard_index=None,
+               total_shards=None, is_buildbot=False, test_set=None):
+    self.compiler = compiler
+    self.runtime = runtime
+    self.mode = mode
+    self.system = system
+    self.checked = checked
+    self.host_checked = host_checked
+    self.minified = minified
+    self.shard_index = shard_index
+    self.total_shards = total_shards
+    self.is_buildbot = is_buildbot
+    self.test_set = test_set
+
+  def PrintBuildInfo(self):
+    shard_description = ""
+    if self.shard_index:
+      shard_description = " shard %s of %s" % (self.shard_index,
+                                               self.total_shards)
+    print ("compiler: %s, runtime: %s mode: %s, system: %s,"
+           " checked: %s, host-checked: %s, minified: %s, test-set: %s%s"
+           ) % (self.compiler, self.runtime, self.mode, self.system,
+                self.checked, self.host_checked, self.minified, self.test_set,
+                shard_description)
+
+
+class BuildStep(object):
+  """
+  A context manager for handling build steps.
+
+  When the context manager is entered, it prints the "@@@BUILD_STEP __@@@"
+  message. If it exits from an error being raised it displays the
+  "@@@STEP_FAILURE@@@" message.
+
+  If swallow_error is True, then this will catch and discard any OSError that
+  is thrown. This lets you run later BuildSteps if the current one fails.
+  """
+  def __init__(self, name, swallow_error=False):
+    self.name = name
+    self.swallow_error = swallow_error
+
+  def __enter__(self):
+    print '@@@BUILD_STEP %s@@@' % self.name
+
+  def __exit__(self, type, value, traceback):
+    if value:
+      print '@@@STEP_FAILURE@@@'
+      if self.swallow_error and isinstance(value, OSError):
+        return True
+
+
+def BuildSDK(build_info):
+  """
+  Builds the SDK.
+
+  - build_info: the buildInfo object, containing information about what sort of
+      build and test to be run.
+  """
+  with BuildStep('Build SDK'):
+    args = [sys.executable, './tools/build.py', '--mode=' + build_info.mode,
+            'create_sdk']
+    print 'Building SDK: %s' % (' '.join(args))
+    RunProcess(args)
+
+
+def RunBot(parse_name, custom_steps, build_step=BuildSDK):
+  """
+  The main function for running a buildbot.
+
+  A buildbot script should invoke this once. The parse_name function will be
+  called with the name of the buildbot and should return an instance of
+  BuildInfo. This function will then set up the bot, build the SDK etc. When
+  that's done, it will call custom_steps, passing in the BuildInfo object.
+
+  In that, you can perform any bot-specific build steps.
+
+  This function will not return. It will call sys.exit() with an appropriate
+  exit code.
+  """
+  if len(sys.argv) == 0:
+    print 'Script pathname not known, giving up.'
+    sys.exit(1)
+
+  name, is_buildbot = GetBotName()
+  build_info = parse_name(name, is_buildbot)
+  if not build_info:
+    print 'Could not handle unfamiliar bot name "%s".' % name
+    sys.exit(1)
+
+  # Print out the buildinfo for easy debugging.
+  build_info.PrintBuildInfo()
+
+  # Make sure we are in the dart directory
+  os.chdir(DART_PATH)
+
+  try:
+    Clobber(build_info.mode)
+    build_step(build_info)
+
+    custom_steps(build_info)
+  except OSError as e:
+    sys.exit(e.errno)
+
+  sys.exit(0)
+
+
+def GetBotName():
+  """
+  Gets the name of the current buildbot.
+
+  Returns a tuple of the buildbot name and a flag to indicate if we are actually
+  a buildbot (True), or just a user pretending to be one (False).
+  """
+  # For testing the bot locally, allow the user to pass in a buildbot name.
+  parser = optparse.OptionParser()
+  parser.add_option('-n', '--name', dest='name', help='The name of the build'
+      'bot you would like to emulate (ex: vm-mac-debug)', default=None)
+  args, _ = parser.parse_args()
+
+  if args.name:
+    return args.name, False
+
+  name = os.environ.get(BUILDER_NAME)
+  if not name:
+    print 'Use -n $BUILDBOT_NAME for the bot you would like to emulate.'
+    sys.exit(1)
+
+  return name, True
+
+
+def Clobber(mode):
+  """
+  Clobbers the builder before we do the build, if appropriate.
+
+  - mode: either 'debug' or 'release'
+  """
+  if os.environ.get(BUILDER_CLOBBER) != "1":
+    return
+
+  with BuildStep('Clobber'):
+    cmd = [sys.executable,
+           './tools/clean_output_directory.py',
+           '--mode=' + mode]
+    print 'Clobbering %s' % (' '.join(cmd))
+    RunProcess(cmd)
+
+
+def RunTest(name, build_info, targets, flags=None):
+  """
+  Runs test.py with the given settings.
+  """
+  if not flags:
+    flags = []
+
+  step_name = GetStepName(name, flags)
+  with BuildStep(step_name):
+    sys.stdout.flush()
+
+    cmd = [
+      sys.executable, os.path.join(os.curdir, 'tools', 'test.py'),
+      '--step_name=' + step_name,
+      '--mode=' + build_info.mode,
+      '--compiler=' + build_info.compiler,
+      '--runtime=' + build_info.runtime,
+      '--progress=buildbot',
+      '-v', '--time', '--use-sdk', '--report'
+    ]
+
+    if build_info.checked:
+      cmd.append('--checked')
+
+    cmd.extend(flags)
+    cmd.extend(targets)
+
+    print 'Running: %s' % (' '.join(cmd))
+    RunProcess(cmd)
+
+
+def RunProcess(command):
+  """
+  Runs command.
+
+  If a non-zero exit code is returned, raises an OSError with errno as the exit
+  code.
+  """
+  exit_code = subprocess.call(command, env=NO_COLOR_ENV)
+  if exit_code != 0:
+    raise OSError(exit_code)
+
+
+def GetStepName(name, flags):
+  """
+  Filters out flags with '=' as this breaks the /stats feature of the buildbot.
+  """
+  flags = [x for x in flags if not '=' in x]
+  return ('%s tests %s' % (name, ' '.join(flags))).strip()
diff --git a/tools/bots/compiler.py b/tools/bots/compiler.py
new file mode 100644
index 0000000..35f0d795
--- /dev/null
+++ b/tools/bots/compiler.py
@@ -0,0 +1,298 @@
+#!/usr/bin/python
+
+# Copyright (c) 2011 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.
+
+"""
+Dart2js buildbot steps
+
+Runs tests for the  dart2js compiler.
+"""
+
+import platform
+import os
+import re
+import shutil
+import subprocess
+import sys
+
+import bot
+
+DART2JS_BUILDER = (
+    r'dart2js-(linux|mac|windows)(-(jsshell))?-(debug|release)(-(checked|host-checked))?(-(host-checked))?(-(minified))?-?(\d*)-?(\d*)')
+WEB_BUILDER = (
+    r'dart2js-(ie9|ie10|ff|safari|chrome|opera)-(win7|win8|mac|linux)(-(all|html))?')
+
+
+def GetBuildInfo(builder_name, is_buildbot):
+  """Returns a BuildInfo object for the current buildbot based on the
+     name of the builder.
+  """
+  compiler = None
+  runtime = None
+  mode = None
+  system = None
+  checked = False
+  host_checked = False
+  minified = False
+  shard_index = None
+  total_shards = None
+  test_set = None
+
+  dart2js_pattern = re.match(DART2JS_BUILDER, builder_name)
+  web_pattern = re.match(WEB_BUILDER, builder_name)
+
+  if web_pattern:
+    compiler = 'dart2js'
+    runtime = web_pattern.group(1)
+    system = web_pattern.group(2)
+    mode = 'release'
+    test_set = web_pattern.group(4)
+  elif dart2js_pattern:
+    compiler = 'dart2js'
+    system = dart2js_pattern.group(1)
+    runtime = 'd8'
+    if dart2js_pattern.group(3) == 'jsshell':
+      runtime = 'jsshell'
+    mode = dart2js_pattern.group(4)
+    # The valid naming parts for checked and host-checked are:
+    # Empty: checked=False, host_checked=False
+    # -checked: checked=True, host_checked=False
+    # -host-checked: checked=False, host_checked=True
+    # -checked-host-checked: checked=True, host_checked=True
+    if dart2js_pattern.group(6) == 'checked':
+      checked = True
+    if dart2js_pattern.group(6) == 'host-checked':
+      host_checked = True
+    if dart2js_pattern.group(8) == 'host-checked':
+      host_checked = True
+    if dart2js_pattern.group(10) == 'minified':
+      minified = True
+    shard_index = dart2js_pattern.group(11)
+    total_shards = dart2js_pattern.group(12)
+  else :
+    return None
+
+  if system == 'windows':
+    system = 'win7'
+
+  if (system == 'win7' and platform.system() != 'Windows') or (
+      system == 'mac' and platform.system() != 'Darwin') or (
+      system == 'linux' and platform.system() != 'Linux'):
+    print ('Error: You cannot emulate a buildbot with a platform different '
+        'from your own.')
+    return None
+
+  return bot.BuildInfo(compiler, runtime, mode, system, checked, host_checked,
+                       minified, shard_index, total_shards, is_buildbot,
+                       test_set)
+
+
+def NeedsXterm(compiler, runtime):
+  return runtime in ['ie9', 'ie10', 'chrome', 'safari', 'opera', 'ff', 'drt']
+
+
+def TestStepName(name, flags):
+  # Filter out flags with '=' as this breaks the /stats feature of the
+  # build bot.
+  flags = [x for x in flags if not '=' in x]
+  return ('%s tests %s' % (name, ' '.join(flags))).strip()
+
+
+def TestStep(name, mode, system, compiler, runtime, targets, flags):
+  step_name = TestStepName(name, flags)
+  with bot.BuildStep(step_name, swallow_error=True):
+    sys.stdout.flush()
+    if NeedsXterm(compiler, runtime) and system == 'linux':
+      cmd = ['xvfb-run', '-a']
+    else:
+      cmd = []
+
+    user_test = os.environ.get('USER_TEST', 'no')
+
+    cmd.extend([sys.executable,
+                os.path.join(os.curdir, 'tools', 'test.py'),
+                '--step_name=' + step_name,
+                '--mode=' + mode,
+                '--compiler=' + compiler,
+                '--runtime=' + runtime,
+                '--time',
+                '--use-sdk',
+                '--report'])
+
+    if user_test == 'yes':
+      cmd.append('--progress=color')
+    else:
+      cmd.extend(['--progress=buildbot', '-v'])
+
+    if flags:
+      cmd.extend(flags)
+    cmd.extend(targets)
+
+    print 'running %s' % (' '.join(cmd))
+    bot.RunProcess(cmd)
+
+
+def TestCompiler(runtime, mode, system, flags, is_buildbot, test_set):
+  """ test the compiler.
+   Args:
+     - runtime: either 'd8', 'jsshell', or one of the browsers, see GetBuildInfo
+     - mode: either 'debug' or 'release'
+     - system: either 'linux', 'mac', 'win7', or 'win8'
+     - flags: extra flags to pass to test.dart
+     - is_buildbot: true if we are running on a real buildbot instead of
+       emulating one.
+     - test_set: Specification of a non standard test set, default None
+  """
+
+  if system.startswith('win') and runtime.startswith('ie'):
+    # There should not be more than one InternetExplorerDriver instance
+    # running at a time. For details, see
+    # http://code.google.com/p/selenium/wiki/InternetExplorerDriver.
+    flags += ['-j1']
+
+  def GetPath(runtime):
+    """ Helper to get the path to the Chrome or Firefox executable for a
+    particular platform on the buildbot. Throws a KeyError if runtime is not
+    either 'chrome' or 'ff'."""
+    if system == 'mac':
+      partDict = {'chrome': 'Google\\ Chrome', 'ff': 'Firefox'}
+      mac_path = '/Applications/%s.app/Contents/MacOS/%s'
+      path_dict = {'chrome': mac_path % (partDict[runtime], partDict[runtime]),
+          'ff': mac_path % (partDict[runtime], partDict[runtime].lower())}
+    elif system == 'linux':
+      path_dict = {'ff': 'firefox', 'chrome': 'google-chrome'}
+    else:
+      # Windows.
+      path_dict = {'ff': os.path.join('C:/', 'Program Files (x86)',
+          'Mozilla Firefox', 'firefox.exe'),
+          'chrome': os.path.join('C:/', 'Users', 'chrome-bot', 'AppData',
+          'Local', 'Google', 'Chrome', 'Application', 'chrome.exe')}
+    return path_dict[runtime]
+
+  if system == 'linux' and runtime == 'chrome':
+    # TODO(ngeoffray): We should install selenium on the buildbot.
+    runtime = 'drt'
+  elif (runtime == 'ff' or runtime == 'chrome') and is_buildbot:
+    # Print out browser version numbers if we're running on the buildbot (where
+    # we know the paths to these browser installations).
+    version_query_string = '"%s" --version' % GetPath(runtime)
+    if runtime == 'ff' and system.startswith('win'):
+      version_query_string += '| more'
+    elif runtime == 'chrome' and system.startswith('win'):
+      version_query_string = ('''reg query "HKCU\\Software\\Microsoft\\''' +
+          '''Windows\\CurrentVersion\\Uninstall\\Google Chrome" /v Version''')
+    p = subprocess.Popen(version_query_string,
+        stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    output, stderr = p.communicate()
+    output = output.split()
+    try:
+      print 'Version of %s: %s' % (runtime, output[-1])
+    except IndexError:
+      # Failed to obtain version information. Continue running tests.
+      pass
+
+  if runtime == 'd8':
+    # The dart2js compiler isn't self-hosted (yet) so we run its
+    # unit tests on the VM. We avoid doing this on the builders
+    # that run the browser tests to cut down on the cycle time.
+    TestStep("dart2js_unit", mode, system, 'none', 'vm', ['dart2js'], flags)
+
+  if not (system.startswith('win') and runtime.startswith('ie')):
+    # Run the default set of test suites.
+    TestStep("dart2js", mode, system, 'dart2js', runtime, [], flags)
+
+    # TODO(kasperl): Consider running peg and css tests too.
+    extras = ['dart2js_extra', 'dart2js_native', 'dart2js_foreign']
+    TestStep("dart2js_extra", mode, system, 'dart2js', runtime, extras, flags)
+  else:
+    # TODO(ricow): Enable standard sharding for IE bots when we have more vms.
+    if test_set == 'html':
+      TestStep("dart2js", mode, system, 'dart2js', runtime, ['html'], flags)
+    elif test_set == 'all':
+      TestStep("dart2js", mode, system, 'dart2js', runtime, ['dartc',
+          'samples', 'standalone', 'corelib', 'co19', 'language', 'isolate',
+          'vm', 'json', 'benchmark_smoke', 'dartdoc', 'utils', 'pub', 'lib'],
+          flags)
+      extras = ['dart2js_extra', 'dart2js_native', 'dart2js_foreign']
+      TestStep("dart2js_extra", mode, system, 'dart2js', runtime, extras,
+               flags)
+
+
+def _DeleteTempWebdriverProfiles(directory):
+  """Find all the firefox profiles in a particular directory and delete them."""
+  for f in os.listdir(directory):
+    item = os.path.join(directory, f)
+    if os.path.isdir(item) and (f.startswith('tmp') or f.startswith('opera')):
+      subprocess.Popen('rm -rf %s' % item, shell=True)
+
+
+def CleanUpTemporaryFiles(system, browser):
+  """For some browser (selenium) tests, the browser creates a temporary profile
+  on each browser session start. On Windows, generally these files are
+  automatically deleted when all python processes complete. However, since our
+  buildbot slave script also runs on python, we never get the opportunity to
+  clear out the temp files, so we do so explicitly here. Our batch browser
+  testing will make this problem occur much less frequently, but will still
+  happen eventually unless we do this.
+
+  This problem also occurs with batch tests in Firefox. For some reason selenium
+  automatically deletes the temporary profiles for Firefox for one browser,
+  but not multiple ones when we have many open batch tasks running. This
+  behavior has not been reproduced outside of the buildbots.
+
+  Args:
+     - system: either 'linux', 'mac', 'win7', or 'win8'
+     - browser: one of the browsers, see GetBuildInfo
+  """
+  if system.startswith('win'):
+    shutil.rmtree('C:\\Users\\chrome-bot\\AppData\\Local\\Temp',
+        ignore_errors=True)
+  elif browser == 'ff' or 'opera':
+    # Note: the buildbots run as root, so we can do this without requiring a
+    # password. The command won't actually work on regular machines without
+    # root permissions.
+    _DeleteTempWebdriverProfiles('/tmp')
+    _DeleteTempWebdriverProfiles('/var/tmp')
+
+
+def GetHasHardCodedCheckedMode(build_info):
+  # TODO(ricow): We currently run checked mode tests on chrome on linux and
+  # on the slow (all) IE windows bots. This is a hack and we should use the
+  # normal sharding and checked splitting functionality when we get more
+  # vms for testing this.
+  if (build_info.system == 'linux' and build_info.runtime == 'chrome'):
+    return True
+  if build_info.runtime.startswith('ie') and build_info.test_set == 'all':
+    return True
+  return False
+
+
+def RunCompilerTests(build_info):
+  test_flags = []
+  if build_info.shard_index:
+    test_flags = ['--shards=%s' % build_info.total_shards,
+                  '--shard=%s' % build_info.shard_index]
+
+  if build_info.checked: test_flags += ['--checked']
+
+  if build_info.host_checked: test_flags += ['--host-checked']
+
+  if build_info.minified: test_flags += ['--minified']
+
+  TestCompiler(build_info.runtime, build_info.mode, build_info.system,
+               list(test_flags), build_info.is_buildbot, build_info.test_set)
+
+  # See comment in GetHasHardCodedCheckedMode, this is a hack.
+  if (GetHasHardCodedCheckedMode(build_info)):
+    TestCompiler(build_info.runtime, build_info.mode, build_info.system,
+                 test_flags + ['--checked'], build_info.is_buildbot,
+                 build_info.test_set)
+
+  if build_info.runtime != 'd8':
+    CleanUpTemporaryFiles(build_info.system, build_info.runtime)
+
+
+if __name__ == '__main__':
+  bot.RunBot(GetBuildInfo, RunCompilerTests)
diff --git a/tools/bots/pub.py b/tools/bots/pub.py
new file mode 100755
index 0000000..41d6745
--- /dev/null
+++ b/tools/bots/pub.py
@@ -0,0 +1,49 @@
+#!/usr/bin/python
+
+# Copyright (c) 2012 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.
+
+"""
+Pub buildbot steps.
+
+Runs tests for pub and the pub packages that are hosted in the main Dart repo.
+"""
+
+import re
+import sys
+
+import bot
+
+PUB_BUILDER = r'pub-(linux|mac|win)'
+
+def PubConfig(name, is_buildbot):
+  """Returns info for the current buildbot based on the name of the builder.
+
+  Currently, this is just:
+  - mode: always "release"
+  - system: "linux", "mac", or "win"
+  """
+  pub_pattern = re.match(PUB_BUILDER, name)
+  if not pub_pattern:
+    return None
+
+  system = pub_pattern.group(1)
+  if system == 'win': system = 'windows'
+
+  return bot.BuildInfo('none', 'vm', 'release', system, checked=True)
+
+
+def PubSteps(build_info):
+  with bot.BuildStep('Build API Docs'):
+    args = [sys.executable, './tools/build.py', '--mode=' + build_info.mode,
+            'api_docs']
+    print 'Generating API Docs: %s' % (' '.join(args))
+    bot.RunProcess(args)
+
+  # TODO(rnystrom): Eventually test other targets here like 'utils'?
+  bot.RunTest('pub', build_info, ['pub'])
+
+
+if __name__ == '__main__':
+  bot.RunBot(PubConfig, PubSteps)
diff --git a/tools/copy_dart.py b/tools/copy_dart.py
index 4641244..10ed442 100755
--- a/tools/copy_dart.py
+++ b/tools/copy_dart.py
@@ -13,7 +13,7 @@
 from glob import glob
 
 re_directive = re.compile(
-    r'^#(library|import|source|native|resource)\([\'"]([^\'"]*)[\'"](.*)\);$')
+    r'^(library|import|part|native|resource)\s+(.*);$')
 
 class Library(object):
   def __init__(self, name, imports, sources, natives, code):
@@ -42,17 +42,14 @@
         if directive == 'library':
           assert libraryname is None
           libraryname = match.group(2)
-        elif directive == 'source':
-          sources.append(match.group(2))
+        elif directive == 'part':
+          suffix = match.group(2)
+          if not suffix.startswith('of '):
+            sources.append(match.group(2).strip('"\''))
         elif directive == 'import':
-          imports.append((match.group(2), match.group(3)))
-        elif directive == 'native':
-          natives.append(match.group(2))
-        elif directive == 'resource':
-          # currently ignored
-          pass
+          imports.append(match.group(2))
         else:
-          raise 'unknown directive %s' % directive
+          raise Exception('unknown directive %s in %s' % (directive, line))
       else:
         inlinecode.append(line)
     fileinput.close()
@@ -64,14 +61,9 @@
 def mergefiles(srcs, dstfile):
   for src in srcs:
     with open(src, 'r') as s:
-      dstfile.write(s.read())
-
-def copyfile(src, dst):
-  if not exists(dirname(dst)):
-    os.makedirs(dirname(dst))
-  with open(src, 'r') as s:
-    with open(dst, 'w') as d:
-      d.write(s.read())
+      for line in s:
+        if not line.startswith('part of '):
+          dstfile.write(line)
 
 def main(outdir = None, *inputs):
   if not outdir or not inputs:
@@ -101,9 +93,6 @@
 
       seen.add(lib)
 
-      if lib.startswith('dart:'):
-        continue
-
       if (dirname(dirname(lib)).endswith('dom/generated/src')
           or dirname(lib).endswith('dom/src')):
         continue
@@ -125,25 +114,19 @@
       # Create file containing all imports, and inlining all sources
       with open(outpath, 'w') as f:
         if library.name:
-          f.write("#library('%s');\n\n" % library.name)
+          f.write("library %s;\n\n" % library.name)
         else:
-          f.write("#library('%s');\n\n" % basename(lib))
-        for (importfile, optional_prefix) in library.imports:
-          f.write("#import('%s'%s);\n" % (importfile, optional_prefix))
-        for native in library.natives:
-          if isabs(native):
-            npath = native[1:]
-          else:
-            npath = native
-          f.write("#native('%s');\n" % npath)
-          copyfile(normjoin(dirname(lib), native),
-              join(dirname(outpath), npath))
+          f.write("library %s;\n\n" % basename(lib))
+        for importfile in library.imports:
+          f.write("import %s;\n" % (importfile))
         f.write('%s' % (''.join(library.code)))
         mergefiles([normjoin(dirname(lib), s) for s in library.sources], f)
 
-      for (i, prefix) in library.imports:
-        if not i.startswith('dart:'):
-          worklist.append(normjoin(dirname(lib), i));
+      for suffix in library.imports:
+        m = re.match(r'[\'"]([^\'"]+)[\'"](\s+as\s+\w+)?$', suffix)
+        uri = m.group(1)
+        if not uri.startswith('dart:'):
+          worklist.append(normjoin(dirname(lib), uri));
 
   return 0
 
diff --git a/tools/create_sdk.py b/tools/create_sdk.py
index 0fb0d3d..841c99b 100755
--- a/tools/create_sdk.py
+++ b/tools/create_sdk.py
@@ -87,7 +87,7 @@
 # TODO(zundel): this excludes the analyzer from the sdk build until builders
 # have all prerequisite software installed.  Also update dart.gyp.
 def ShouldCopyAnalyzer():
-  os = utils.GuessOS();
+  os = utils.GuessOS()
   return os == 'linux' or os == 'macos'
 
 
@@ -116,9 +116,9 @@
     Copy(os.path.join(build_dir, 'dartdoc.bat'), dartdoc)
     # TODO(dgrove) - fix this once issue 4788 is addressed.
     ReplaceInFiles([dart2js],
-                   [(r'%SCRIPTPATH%\.\.\\\.\.\\lib', r'%SCRIPTPATH%..\\pkg')]);
+                   [(r'%SCRIPTPATH%\.\.\\\.\.\\lib', r'%SCRIPTPATH%..\\pkg')])
     ReplaceInFiles([dartdoc],
-                   [(r'%SCRIPTPATH%\.\.\\\.\.\\pkg', r'%SCRIPTPATH%..\\pkg')]);
+                   [(r'%SCRIPTPATH%\.\.\\\.\.\\pkg', r'%SCRIPTPATH%..\\pkg')])
   else:
     dart2js = os.path.join(sdk_root, 'bin', 'dart2js')
     Copy(os.path.join(build_dir, 'dart2js'), dart2js)
@@ -153,14 +153,19 @@
 
   HOME = dirname(dirname(realpath(__file__)))
 
-  SDK_tmp = tempfile.mkdtemp()
   SDK = argv[1]
+  SDK_tmp = '%s.tmp' % SDK
 
   # TODO(dgrove) - deal with architectures that are not ia32.
 
   if exists(SDK):
     rmtree(SDK)
 
+  if exists(SDK_tmp):
+    rmtree(SDK_tmp)
+
+  os.makedirs(SDK_tmp)
+
   # Create and populate sdk/bin.
   BIN = join(SDK_tmp, 'bin')
   os.makedirs(BIN)
@@ -309,11 +314,11 @@
                    join("guava", "r09", "guava-r09.jar"),
                    join("json", "r2_20080312", "json.jar") ]
     for jarToCopy in jarsToCopy:
-        dest_dir = join (ANALYZER_DEST, os.path.dirname(jarToCopy))
-        os.makedirs(dest_dir)
-        dest_file = join (ANALYZER_DEST, jarToCopy)
-        src_file = join(ANALYZER_HOME, 'util', 'analyzer', jarToCopy)
-        copyfile(src_file, dest_file)
+      dest_dir = join (ANALYZER_DEST, os.path.dirname(jarToCopy))
+      os.makedirs(dest_dir)
+      dest_file = join (ANALYZER_DEST, jarToCopy)
+      src_file = join(ANALYZER_HOME, 'util', 'analyzer', jarToCopy)
+      copyfile(src_file, dest_file)
 
   # Create and populate util/pub.
   copytree(join(HOME, 'utils', 'pub'), join(UTIL, 'pub'),
@@ -337,9 +342,14 @@
   # Copy dart2js.
   CopyDart2Js(build_dir, SDK_tmp, version)
 
-  revision = utils.GetSVNRevision()
+  # Write the 'version' file
+  versionFile = open(os.path.join(SDK_tmp, 'version'), 'w')
+  versionFile.write(version + '\n')
+  versionFile.close()
 
   # Write the 'revision' file
+  revision = utils.GetSVNRevision()
+
   if revision is not None:
     with open(os.path.join(SDK_tmp, 'revision'), 'w') as f:
       f.write(revision + '\n')
diff --git a/tools/testing/dart/co19_test.dart b/tools/testing/dart/co19_test.dart
index 39a1224..dba9eb6 100644
--- a/tools/testing/dart/co19_test.dart
+++ b/tools/testing/dart/co19_test.dart
@@ -31,8 +31,8 @@
     const <String>['-mrelease,debug', '-rvm', '-cnone', '--checked'],
     const <String>['-mrelease', '-rnone', '-cdartc'],
     const <String>['-mrelease', '-rvm', '-cdart2dart'],
-    const <String>['-mrelease', '-rd8', '-cdart2js'],
-    const <String>['-mrelease', '-rd8', '-cdart2js', '--checked']];
+    const <String>['-mrelease', '-rd8', '-cdart2js', '--use-sdk'],
+    const <String>['-mrelease', '-rd8', '-cdart2js', '--use-sdk', '--checked']];
 
 void main() {
   File scriptFile = new File(new Options().script);
diff --git a/tools/testing/dart/test_options.dart b/tools/testing/dart/test_options.dart
index ace2b4d..eae9f12 100644
--- a/tools/testing/dart/test_options.dart
+++ b/tools/testing/dart/test_options.dart
@@ -74,7 +74,7 @@
 
    dart2js: Compile dart code to JavaScript by running dart2js.
          (only valid with the following runtimes: d8, drt, chrome,
-         safari, ie9, firefox, opera, none (compile only)),
+         safari, ie9, ie10, firefox, opera, none (compile only)),
 
    dartc: Perform static analysis on Dart code by running dartc.
           (only valid with the following runtimes: none)''',
@@ -95,14 +95,14 @@
 
     dartium: Run Dart or JavaScript in Dartium.
 
-    [ff | chrome | safari | ie9 | opera]: Run JavaScript in the specified
+    [ff | chrome | safari | ie9 | ie10 | opera]: Run JavaScript in the specified
          browser.
 
     none: No runtime, compile only (for example, used for dartc static analysis
           tests).''',
               ['-r', '--runtime'],
               ['vm', 'd8', 'jsshell', 'drt', 'dartium', 'ff', 'firefox',
-               'chrome', 'safari', 'ie9', 'opera', 'none'],
+               'chrome', 'safari', 'ie9', 'ie10', 'opera', 'none'],
               'vm'),
           new _TestOptionSpecification(
               'arch',
@@ -131,6 +131,13 @@
               false,
               'bool'),
           new _TestOptionSpecification(
+              'minified',
+              'Enable minification in the compiler',
+              ['--minified'],
+              [],
+              false,
+              'bool'),
+          new _TestOptionSpecification(
               'timeout',
               'Timeout in seconds',
               ['-t', '--timeout'],
@@ -398,7 +405,8 @@
         // dart2js_drt will be duplicating work. If later we don't need 'none'
         // with dart2js, we should remove it from here.
         validRuntimes = const ['d8', 'jsshell', 'drt', 'none', 'dartium',
-                               'ff', 'chrome', 'safari', 'ie9', 'opera'];
+                               'ff', 'chrome', 'safari', 'ie9', 'ie10',
+                               'opera'];
         break;
       case 'dartc':
         validRuntimes = const ['none'];
@@ -413,7 +421,7 @@
       print("Warning: combination of ${config['compiler']} and "
           "${config['runtime']} is invalid. Skipping this combination.");
     }
-    if (config['runtime'] == 'ie9' &&
+    if ((config['runtime'] == 'ie9' || config['runtime'] == 'ie10') &&
         Platform.operatingSystem != 'windows') {
       isValid = false;
       print("Warning cannot run Internet Explorer on non-Windows operating"
@@ -470,6 +478,8 @@
     configuration['unchecked'] = !configuration['checked'];
     configuration['host_unchecked'] = !configuration['host_checked'];
 
+    configuration['unminified'] = !configuration['minified'];
+
     String runtime = configuration['runtime'];
     if (runtime == 'firefox') {
       configuration['runtime'] == 'ff';
@@ -560,7 +570,8 @@
             timeout *= 2;
           }
           if (Contains(configuration['runtime'],
-                       const ['ie9', 'ff', 'chrome', 'safari', 'opera'])) {
+                       const ['ie9', 'ie10', 'ff', 'chrome', 'safari',
+                              'opera'])) {
             timeout *= 8; // Allow additional time for browser testing to run.
           }
           break;
diff --git a/tools/testing/dart/test_progress.dart b/tools/testing/dart/test_progress.dart
index 0147663..bcd027b 100644
--- a/tools/testing/dart/test_progress.dart
+++ b/tools/testing/dart/test_progress.dart
@@ -131,7 +131,7 @@
     }
     output.add(expected.toString());
     output.add('Actual: ${test.output.result}');
-    if (test.info != null) {
+    if (!test.output.hasTimedOut && test.info != null) {
       if (test.output.incomplete && !test.info.hasCompileError) {
         output.add('Unexpected compile-time error.');
       } else {
@@ -404,6 +404,9 @@
     List<String> configs =
         statusToConfigs.putIfAbsent(status, () => <String>[]);
     configs.add(test.configurationString);
+    if (test.output.hasTimedOut) {
+      print('\n${test.displayName} timed out on ${test.configurationString}');
+    }
   }
 
   String _extractRuntime(String configuration) {
diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart
index 42d2323..930a561 100644
--- a/tools/testing/dart/test_runner.dart
+++ b/tools/testing/dart/test_runner.dart
@@ -77,7 +77,6 @@
   String displayName;
   TestOutput output;
   bool isNegative;
-  bool usesWebDriver;
   Set<String> expectedOutcomes;
   TestCaseEvent completedHandler;
   TestInformation info;
@@ -88,8 +87,7 @@
            this.completedHandler,
            this.expectedOutcomes,
            {this.isNegative: false,
-            this.info: null,
-            this.usesWebDriver: false}) {
+            this.info: null}) {
     if (!isNegative) {
       this.isNegative = displayName.contains("negative_test");
     }
@@ -166,6 +164,8 @@
   List<String> get batchRunnerArguments => ['-batch'];
   List<String> get batchTestArguments => commands.last().arguments;
 
+  bool get usesWebDriver => TestUtils.usesWebDriver(configuration['runtime']);
+
   void completed() { completedHandler(this); }
 }
 
@@ -594,6 +594,9 @@
       (testCase as BrowserTestCase).numRetries--;
       print("Potential flake. Re-running ${testCase.displayName} "
           "(${(testCase as BrowserTestCase).numRetries} attempt(s) remains)");
+      // When retrying we need to reset the timeout as well.
+      // Otherwise there will be no timeout handling for the retry.
+      timeoutTimer = null;
       this.start();
     } else {
       testCase.completed();
@@ -611,7 +614,9 @@
     int totalSteps = testCase.commands.length;
     String suffix =' (step $currentStep of $totalSteps)';
     if (timedOut) {
-      // Test timed out before it could complete.
+      // Non-webdriver test timed out before it could complete. Webdriver tests
+      // run their own timeouts by timing from the launch of the browser (which
+      // could be delayed).
       testComplete(0, true);
     } else if (currentStep == totalSteps) {
       // Done with all test commands.
@@ -627,8 +632,8 @@
       stdout.add('test.dart: Compilation finished $suffix\n');
       if (currentStep == totalSteps - 1 && testCase.usesWebDriver &&
           !testCase.configuration['noBatch']) {
-        // Note: processQueue will always be non-null for runtime == ie9, ff,
-        // safari, chrome, opera. (It is only null for runtime == vm)
+        // Note: processQueue will always be non-null for runtime == ie9, ie10,
+        // ff, safari, chrome, opera. (It is only null for runtime == vm)
         // This RunningProcess object is done, and hands over control to
         // BatchRunner.startTest(), which handles reporting, etc.
         timeoutTimer.cancel();
@@ -678,7 +683,7 @@
       }
       // If the timeout fired in between two commands, kill the just
       // started process immediately.
-      if (timedOut) process.kill();
+      if (timedOut) safeKill(process);
     });
     processFuture.handleException((e) {
       print("Process error:");
@@ -691,7 +696,17 @@
 
   void timeoutHandler(Timer unusedTimer) {
     timedOut = true;
-    if (process != null) process.kill();
+    safeKill(process);
+  }
+
+  void safeKill(Process p) {
+    if (p != null) {
+      try {
+        p.kill();
+      } on ProcessException {
+        // Hopefully, this means that the process died on its own.
+      }
+    }
   }
 }
 
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index a5f42a5..dc01e69 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -65,28 +65,32 @@
 
 void ccTestLister() {
   port.receive((String runnerPath, SendPort replyTo) {
-    void processErrorHandler(error) {
-    }
     Future processFuture = Process.start(runnerPath, ["--list"]);
     processFuture.then((p) {
       StringInputStream stdoutStream = new StringInputStream(p.stdout);
-      List<String> tests = new List<String>();
+      var streamDone = false;
+      var processExited = false;
+      checkDone() {
+        if (streamDone && processExited) {
+          replyTo.send("");
+        }
+      }
       stdoutStream.onLine = () {
         String line = stdoutStream.readLine();
-        while (line != null) {
-          tests.add(line);
-          line = stdoutStream.readLine();
-        }
+        replyTo.send(line);
+      };
+      stdoutStream.onClosed = () {
+        streamDone = true;
+        checkDone();
       };
       p.onExit = (code) {
         if (code < 0) {
           print("Failed to list tests: $runnerPath --list");
           replyTo.send("");
+        } else {
+          processExited = true;
+          checkDone();
         }
-        for (String test in tests) {
-          replyTo.send(test);
-        }
-        replyTo.send("");
       };
       port.close();
     });
@@ -155,8 +159,7 @@
                           [new Command(runnerPath, args)],
                           configuration,
                           completeHandler,
-                          expectations,
-                          usesWebDriver: TestUtils.usesWebDriver));
+                          expectations));
     }
   }
 
@@ -458,8 +461,7 @@
                           completeHandler,
                           expectations,
                           isNegative: isNegative,
-                          info: info,
-                          usesWebDriver: TestUtils.usesWebDriver));
+                          info: info));
     }
   }
 
@@ -1210,8 +1212,7 @@
                         [new Command('java', args)],
                         updatedConfiguration,
                         completeHandler,
-                        new Set<String>.from([PASS]),
-                        usesWebDriver: TestUtils.usesWebDriver));
+                        new Set<String>.from([PASS])));
     doDone();
   }
 
@@ -1407,6 +1408,11 @@
         args.add("--allow-mock-compilation");
       }
     }
+    // TODO(riocw): Unify our minification calling convention between dart2js
+    // and dart2dart.
+    if (compiler == "dart2js" && configuration["minified"]) {
+      args.add("--minify");
+    }
     return args;
   }
 
@@ -1420,6 +1426,7 @@
   static bool usesWebDriver(String runtime) => Contains(
       runtime, const <String>['dartium',
                               'ie9',
+                              'ie10',
                               'safari',
                               'opera',
                               'chrome',
diff --git a/tools/testing/legpad/legpad.dart b/tools/testing/legpad/legpad.dart
index e6f0d2a..0db1ffb 100644
--- a/tools/testing/legpad/legpad.dart
+++ b/tools/testing/legpad/legpad.dart
@@ -71,7 +71,7 @@
     setText("input", readAll(mainFile));
     Stopwatch stopwatch = new Stopwatch()..start();
     runLeg();
-    int elapsedMillis = stopwatch.elapsedInMs();
+    int elapsedMillis = stopwatch.elapsedMilliseconds;
     if (output === null) {
       output = "throw 'dart2js compilation error';\n";
     }
diff --git a/tools/testing/run_selenium.py b/tools/testing/run_selenium.py
index 15162ff..e9e1119 100755
--- a/tools/testing/run_selenium.py
+++ b/tools/testing/run_selenium.py
@@ -173,7 +173,8 @@
     xpi = os.path.join(script_dir, 'extensions', 'firefox',                               'ConsoleCollector.xpi')
     profile.add_extension(xpi);
     return selenium.webdriver.Firefox(firefox_profile=profile)
-  elif browser == 'ie9' and platform.system() == 'Windows':
+  elif ((browser == 'ie9' or browser == 'ie10') and 
+      platform.system() == 'Windows'):
     return selenium.webdriver.Ie()
   elif browser == 'safari' and platform.system() == 'Darwin':
     # TODO(efortuna): Ensure our preferences (no pop-up blocking) file is the
diff --git a/tools/testing/webdriver_test_setup.py b/tools/testing/webdriver_test_setup.py
index 26ff2cd..e7a5e97 100755
--- a/tools/testing/webdriver_test_setup.py
+++ b/tools/testing/webdriver_test_setup.py
@@ -12,11 +12,13 @@
  
 # TODO(efortuna): Rewrite this script in Dart when the Process module has a
 # better high level API.
+import HTMLParser
 import optparse
 import os
 import platform
 import re
 import shutil
+import string
 import subprocess
 import sys
 import urllib
@@ -40,6 +42,8 @@
   parser = optparse.OptionParser()
   parser.add_option('--firefox', '-f', dest='firefox',
       help="Don't install Firefox", action='store_true', default=False)
+  parser.add_option('--opera', '-o', dest='opera', default=False,
+      help="Don't install Opera", action='store_true')
   parser.add_option('--chromedriver', '-c', dest='chromedriver',
       help="Don't install chromedriver.", action='store_true', default=False)
   parser.add_option('--iedriver', '-i', dest='iedriver',
@@ -54,7 +58,7 @@
   parser.add_option('--buildbot', '-b', dest='buildbot', action='store_true',
       help='Perform a buildbot selenium setup (buildbots have a different' +
       'location for their python executable).', default=False)
-  args, ignored = parser.parse_args()
+  args, _ = parser.parse_args()
   return args
 
 def find_depot_tools_location(is_buildbot):
@@ -273,6 +277,114 @@
     run_cmd('%s %s' % (admin_keyword, python_cmd), page.read())
     run_cmd('%s %s install -U selenium' % (admin_keyword, pip_cmd))
 
+class OperaHtmlParser(HTMLParser.HTMLParser):
+  """A helper class to parse Opera pages listing available downloads to find the
+  correct download we want."""
+
+  def initialize(self, rejection_func, accept_func):
+    """Initialize some state for our parser.
+    Arguments:
+    rejection_func: A function that accepts the value of the URL and determines
+      if it is of the type we are looking for.
+    accept_func: A function that takes the URL and the "current best" URL and 
+      determines if it is better than our current download url."""
+    self.latest = 0
+    self.rejection_func = rejection_func
+    self.accept_func = accept_func
+
+  def handle_starttag(self, tag, attrs):
+    """Find the latest version."""
+    if (tag == 'a' and attrs[0][0] == 'href' and
+        self.rejection_func(attrs[0][1])):
+      self.latest = self.accept_func(attrs[0][1], self.latest)
+
+class OperaInstaller(object):
+  """Install from the Opera FTP website."""
+
+  def find_latest_version(self, download_page, rejection_func, accept_func):
+    """Get the latest non-beta version.
+    Arguments:
+    download_page: The initial page that lists all the download options.
+    rejection_func: A function that accepts the value of the URL and determines
+      if it is of the type we are looking for.
+    accept_func: A function that takes the URL and the "current best" URL and 
+      determines if it is better than our current download url."""
+    f = urllib2.urlopen(download_page)
+    parser = OperaHtmlParser()
+    parser.initialize(rejection_func, accept_func)
+    parser.feed(f.read())
+    return str(parser.latest)
+
+  def run(self):
+    """Download and install Opera."""
+    print 'Installing Opera'
+    os_str = self.get_os_str
+    download_name = 'http://ftp.opera.com/pub/opera/%s/' % os_str
+
+    def higher_revision(new_version_str, current):
+      version_string = new_version_str[:-1]
+      if int(version_string) > current:
+        return int(version_string)
+      return current
+
+    version = self.find_latest_version(
+        download_name,
+        lambda x: x[0] in string.digits and 'b' not in x and 'rc' not in x,
+        higher_revision)
+    download_name += version
+    if ('linux' in sys.platform and 
+        platform.linux_distribution()[0] == 'Ubuntu'):
+      # Last time I tried, the .deb file you download directly from opera was
+      # not installing correctly on Ubuntu. This installs Opera more nicely.
+      os.system("sudo sh -c 'wget -O - http://deb.opera.com/archive.key | "
+          "apt-key add -'")
+      os.system("""sudo sh -c 'echo "deb http://deb.opera.com/opera/ """
+          """stable non-free" > /etc/apt/sources.list.d/opera.list'""")
+      run_cmd('sudo apt-get update')
+      run_cmd('sudo apt-get install opera', stdin='y')
+    else:
+      if 'darwin' in sys.platform:
+        dotted_version = '%s.%s' % (version[:2], version[2:])
+        download_name += '/Opera_%s_Setup_Intel.dmg' % dotted_version
+        urllib.urlretrieve(download_name, 'opera.dmg')
+        run_cmd('hdiutil mount opera.dmg', stdin='qY\n')
+        run_cmd('sudo cp -R /Volumes/Opera/Opera.app /Applications')
+        run_cmd('hdiutil unmount /Volumes/Opera/')
+      elif 'win' in sys.platform:
+        download_name += '/en/Opera_%s_en_Setup.exe' % version
+        urllib.urlretrieve(download_name, 'opera_install.exe')
+        run_cmd('opera_install.exe -ms')
+      else:
+        # For all other flavors of linux, download the tar.
+        download_name += '/'
+        extension = '.tar.bz2'
+        if '64bit' in platform.architecture()[0]:
+          platform_str = '.x86_64'
+        else:
+          platform_str = '.i386'
+        def get_acceptable_file(new_version_str, current):
+          return new_version_str
+        latest = self.find_latest_version(
+            download_name,
+            lambda x: x.startswith('opera') and x.endswith(extension)
+                and platform_str in x,
+            get_acceptable_file)
+        download_name += latest
+        run_cmd('wget -O - %s | tar -C ~ -jxv' % download_name)
+        print ('PLEASE MANUALLY RUN "~/%s/install" TO COMPLETE OPERA '
+            'INSTALLATION' %
+            download_name[download_name.rfind('/') + 1:-len(extension)])
+
+  @property
+  def get_os_str(self):
+    """The strings to indicate what OS a download is."""
+    os_str = 'win'
+    if 'darwin' in sys.platform:
+      os_str = 'mac'
+    elif 'linux' in sys.platform:
+      os_str = 'linux'
+    return os_str
+
 def main():
   args = parse_args()
   if not args.python:
@@ -287,9 +399,10 @@
   if not args.iedriver and platform.system() == 'Windows':
     GoogleCodeInstaller('selenium', find_depot_tools_location(args.buildbot),
         lambda x: 'IEDriverServer_Win32_%(version)s.zip' % x).run()
-
   if not args.firefox:
     FirefoxInstaller().run()
+  if not args.opera:
+    OperaInstaller().run()
 
 if __name__ == '__main__':
   main()
diff --git a/tools/utils/vim/syntax/dart.vim b/tools/utils/vim/syntax/dart.vim
index ab3516b..fa5aa9d 100644
--- a/tools/utils/vim/syntax/dart.vim
+++ b/tools/utils/vim/syntax/dart.vim
@@ -34,7 +34,7 @@
 syn keyword dartStatement      return
 syn keyword dartStorageClass   static abstract
 syn keyword dartExceptions     throw try catch finally
-syn keyword dartExceptions     FormatException ClosureArgumentMismatchException EmptyQueueException Exception ExpectException FutureAlreadyCompleteException FutureNotCompleteException IllegalAccessException ArgumentError IllegalJSRegExpException IndexOutOfRangeException IntegerDivisionByZeroException NoMoreElementsException NoSuchMethodError NotImplementedException NullPointerException ObjectNotClosureException OutOfMemoryError StackOverflowException UnsupportedOperationException WrongArgumentCountException
+syn keyword dartExceptions     FormatException Exception ExpectException FutureAlreadyCompleteException FutureNotCompleteException./b ArgumentError IllegalJSRegExpException IndexOutOfRangeException IntegerDivisionByZeroException NoSuchMethodError NotImplementedException NullPointerException OutOfMemoryError StackOverflowException StateError UnsupportedError
 syn keyword dartExceptions_DEPRECATED     BadNumberFormatException
 syn keyword dartAssert         assert
 syn keyword dartClassDecl      extends implements interface
diff --git a/utils/apidoc/apidoc.dart b/utils/apidoc/apidoc.dart
index 693fed3..8e016f3 100644
--- a/utils/apidoc/apidoc.dart
+++ b/utils/apidoc/apidoc.dart
@@ -33,6 +33,8 @@
   Path outputDir = new Path('docs');
   bool generateAppCache = false;
 
+  List<String> excludedLibraries = <String>[];
+
   // Parse the command-line arguments.
   for (int i = 0; i < args.length; i++) {
     final arg = args[i];
@@ -51,7 +53,9 @@
         break;
 
       default:
-        if (arg.startsWith('--out=')) {
+        if (arg.startsWith('--exclude-lib=')) {
+          excludedLibraries.add(arg.substring('--exclude-lib='.length));
+        } else if (arg.startsWith('--out=')) {
           outputDir = new Path.fromNative(arg.substring('--out='.length));
         } else {
           print('Unknown option: $arg');
@@ -130,7 +134,8 @@
 
   lister.onDone = (success) {
     print('Generating docs...');
-    final apidoc = new Apidoc(mdn, htmldoc, outputDir, mode, generateAppCache);
+    final apidoc = new Apidoc(mdn, htmldoc, outputDir, mode, generateAppCache,
+        excludedLibraries);
     apidoc.dartdocPath = doc.scriptDir.append('../../pkg/dartdoc/');
     // Select the libraries to include in the produced documentation:
     apidoc.includeApi = true;
@@ -179,7 +184,7 @@
   }
 
   doc.DocComment getRecordedLibraryComment(LibraryMirror library) {
-    if (library.simpleName == HTML_LIBRARY_NAME) {
+    if (doc.displayName(library) == HTML_LIBRARY_NAME) {
       return libraryComment;
     }
     return null;
@@ -258,7 +263,11 @@
   String mdnUrl = null;
 
   Apidoc(this.mdn, this.htmldoc, Path outputDir, int mode,
-         bool generateAppCache) {
+         bool generateAppCache, [excludedLibraries]) {
+    if (?excludedLibraries) {
+      this.excludedLibraries = excludedLibraries;
+    }
+
     this.outputDir = outputDir;
     this.mode = mode;
     this.generateAppCache = generateAppCache;
@@ -351,21 +360,21 @@
   void docIndexLibrary(LibraryMirror library) {
     // TODO(rnystrom): Hackish. The IO libraries reference this but we don't
     // want it in the docs.
-    if (library.simpleName == 'dart:nativewrappers') return;
+    if (doc.displayName(library) == 'dart:nativewrappers') return;
     super.docIndexLibrary(library);
   }
 
   void docLibraryNavigationJson(LibraryMirror library, List libraryList) {
     // TODO(rnystrom): Hackish. The IO libraries reference this but we don't
     // want it in the docs.
-    if (library.simpleName == 'dart:nativewrappers') return;
+    if (doc.displayName(library) == 'dart:nativewrappers') return;
     super.docLibraryNavigationJson(library, libraryList);
   }
 
   void docLibrary(LibraryMirror library) {
     // TODO(rnystrom): Hackish. The IO libraries reference this but we don't
     // want it in the docs.
-    if (library.simpleName == 'dart:nativewrappers') return;
+    if (doc.displayName(library) == 'dart:nativewrappers') return;
     super.docLibrary(library);
   }
 
@@ -375,12 +384,12 @@
     String strippedText =
         text.replaceAll(const RegExp("@([a-zA-Z]+) ([^;]+)(?:;|\$)"),
                         '').trim();
-    if (strippedText.isEmpty()) return null;
+    if (strippedText.isEmpty) return null;
     return super.createDocComment(strippedText, inheritedFrom);
   }
 
   doc.DocComment getLibraryComment(LibraryMirror library) {
-    if (library.simpleName == HTML_LIBRARY_NAME) {
+    if (doc.displayName(library) == HTML_LIBRARY_NAME) {
       return htmldoc.libraryComment;
     }
     return super.getLibraryComment(library);
@@ -460,7 +469,7 @@
     }
 
     var typeString = '';
-    if (type.library.simpleName == HTML_LIBRARY_NAME) {
+    if (doc.displayName(type.library) == HTML_LIBRARY_NAME) {
       // If it's an HTML type, try to map it to a base DOM type so we can find
       // the MDN docs.
       final domTypes = _diff.htmlTypesToDom[type.qualifiedName];
@@ -481,7 +490,7 @@
     if (mdnType == null) return null;
     if (mdnType['skipped'] != null) return null;
     if (mdnType['summary'] == null) return null;
-    if (mdnType['summary'].trim().isEmpty()) return null;
+    if (mdnType['summary'].trim().isEmpty) return null;
 
     // Remember which MDN page we're using so we can attribute it.
     return new MdnComment(mdnType['summary'], mdnType['srcUrl']);
@@ -494,7 +503,7 @@
   MdnComment includeMdnMemberComment(MemberMirror member) {
     var library = findLibrary(member);
     var memberString = '';
-    if (library.simpleName == HTML_LIBRARY_NAME) {
+    if (doc.displayName(library) == HTML_LIBRARY_NAME) {
       // If it's an HTML type, try to map it to a DOM type name so we can find
       // the MDN docs.
       final domMembers = _diff.htmlToDom[member.qualifiedName];
@@ -531,7 +540,7 @@
 
     if (mdnMember == null) return null;
     if (mdnMember['help'] == null) return null;
-    if (mdnMember['help'].trim().isEmpty()) return null;
+    if (mdnMember['help'].trim().isEmpty) return null;
 
     // Remember which MDN page we're using so we can attribute it.
     return new MdnComment(mdnMember['help'], mdnType['srcUrl']);
@@ -575,4 +584,4 @@
   }
 
   String toString() => mdnComment;
-}
\ No newline at end of file
+}
diff --git a/utils/apidoc/apidoc.gyp b/utils/apidoc/apidoc.gyp
index 0400dea..7710b91 100644
--- a/utils/apidoc/apidoc.gyp
+++ b/utils/apidoc/apidoc.gyp
@@ -43,6 +43,8 @@
             'apidoc.dart',
             '--out=<(PRODUCT_DIR)/api_docs',
             '--mode=static',
+            '--exclude-lib=webdriver',
+            '--exclude-lib=dartdoc',
           ],
           'message': 'Running apidoc: <(_action)',
         },
diff --git a/utils/apidoc/app_engine/app.yaml b/utils/apidoc/app_engine/app.yaml
deleted file mode 100644
index 95739bb..0000000
--- a/utils/apidoc/app_engine/app.yaml
+++ /dev/null
@@ -1,17 +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.
-
-application: dartlang-api
-version: changeme
-
-runtime: python27
-api_version: 1
-threadsafe: true
-
-#default_expiration: "2h"
-
-handlers:
-
-- url: /.*
-  script: scripts.redirector.application
\ No newline at end of file
diff --git a/utils/apidoc/app_engine/index.yaml b/utils/apidoc/app_engine/index.yaml
deleted file mode 100644
index b6633f5..0000000
--- a/utils/apidoc/app_engine/index.yaml
+++ /dev/null
@@ -1,3 +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.
\ No newline at end of file
diff --git a/utils/apidoc/app_engine/scripts/__init__.py b/utils/apidoc/app_engine/scripts/__init__.py
deleted file mode 100644
index b6633f5..0000000
--- a/utils/apidoc/app_engine/scripts/__init__.py
+++ /dev/null
@@ -1,3 +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.
\ No newline at end of file
diff --git a/utils/apidoc/app_engine/scripts/redirector.py b/utils/apidoc/app_engine/scripts/redirector.py
deleted file mode 100644
index 9687ff0..0000000
--- a/utils/apidoc/app_engine/scripts/redirector.py
+++ /dev/null
@@ -1,128 +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.
-
-import logging
-import re
-from webapp2 import *
-from datetime import datetime, timedelta
-from google.appengine.ext import blobstore
-from google.appengine.ext.webapp import blobstore_handlers
-from google.appengine.api import files, memcache
-
-LATEST_DOC_VERSION_FILE = '/gs/dartlang-api-docs/latest.txt'
-ONE_HOUR = 60 * 60
-ONE_DAY = ONE_HOUR * 24
-ONE_WEEK = ONE_DAY * 7
-
-class ApiDocs(blobstore_handlers.BlobstoreDownloadHandler):
-
-  latest_doc_version = None
-  next_doc_version_check = None
-
-  def reload_latest_version(self):
-    logging.info("Reloading the latest doc version pointer")
-    with files.open(LATEST_DOC_VERSION_FILE, 'r') as f:
-      data = f.read(100)
-      ApiDocs.latest_doc_version = int(data.strip())
-      ApiDocs.next_doc_version_check = datetime.now() + timedelta(days=1)
-
-  # TODO: put into memcache?
-  def get_latest_version(self):
-    forced_reload = self.request.get('force_reload')
-    if (forced_reload or
-          ApiDocs.latest_doc_version is None or
-          ApiDocs.next_doc_version_check is None or
-          datetime.now() > ApiDocs.next_doc_version_check):
-      self.reload_latest_version()
-    return ApiDocs.latest_doc_version
-
-  def get_cache_age(self, path):
-    if re.search(r'(png|jpg)$', path):
-      age = ONE_DAY
-    elif path.endswith('.ico'):
-      age = ONE_WEEK
-    else:
-      age = ONE_HOUR
-    return age
-
-  def resolve_doc_path(self):
-    if self.request.path.startswith('/docs/continuous'):
-      version = self.get_latest_version()
-      path = self.request.path.replace('/docs/continuous',
-          '/gs/dartlang-api-docs/' + str(version))
-    else:
-      path = self.request.path.replace('/docs', '/gs/dartlang-api-docs')
-    if path.endswith('/'):
-      path = path + 'index.html'
-    return path
-
-  def get(self):
-    path = self.resolve_doc_path()
-    gs_key = blobstore.create_gs_key(path)
-    age = self.get_cache_age(path)
-
-    self.response.headers['Cache-Control'] = 'max-age=' + \
-        str(age) + ',s-maxage=' + str(age)
-
-    # is there a better way to check if a file exists in cloud storage?
-    # AE will serve a 500 if the file doesn't exist, but that should
-    # be a 404
-
-    path_exists = memcache.get(path)
-    if path_exists is not None:
-      if path_exists == "1":
-        self.send_blob(gs_key)
-      else:
-        self.error(404)
-    else:
-      try:
-        # just check for existance
-        files.open(path, 'r').close()
-        memcache.add(key=path, value="1", time=ONE_DAY)
-        self.send_blob(gs_key)
-      except files.file.ExistenceError:
-        memcache.add(key=path, value="0", time=ONE_DAY)
-        self.error(404)
-
-  # this doesn't get called, unfortunately.
-  # if this ever starts working, remove the try and files.open
-  # from get, above, and instead retroactively handle a missing file here
-  # def handle_exception(self, exception, debug_mode):
-  #   # awful hack for when file in cloud storage doesn't exist
-  #   if isinstance(exception, TypeError):
-  #     logging.debug('oh noes!')
-  #     path = self.resolve_path()
-  #     try:
-  #       with files.open(path, 'r') as f:
-  #         # the file really does exist, so 500 must be something else
-  #         self.error(500)
-  #     except files.file.ExistenceError:
-  #       # file does not exist
-  #       self.error(404)
-  #   else:
-  #     logging.exception(exception)
-
-def redir_to_latest(handler, *args, **kwargs):
-  path = kwargs['path']
-  if re.search(r'^(core|coreimpl|crypto|io|isolate|json|uri|html|math|utf|web)', path):
-    return '/docs/continuous/dart_' + path
-  else:
-    return '/docs/continuous/' + path
-
-def redir_dom(handler, *args, **kwargs):
-  return '/docs/continuous/dart_html' + kwargs['path']
-
-class CurrentVersionHandler(RequestHandler):
-  def get(self, version):
-    self.response.headers['Content-Type'] = 'text/plain'
-    self.response.out.write(ApiDocs.latest_doc_version)
-
-application = WSGIApplication(
-  [
-    Route('/dom<path:.*>', RedirectHandler, defaults={'_uri': redir_dom}),
-    Route('/currentversion/<version:.*>', CurrentVersionHandler),
-    ('/docs.*', ApiDocs),
-    Route('/<path:.*>', RedirectHandler, defaults={'_uri': redir_to_latest})
-  ],
-  debug=True)
diff --git a/utils/apidoc/html_diff.dart b/utils/apidoc/html_diff.dart
index 6fd785f..c9428bb 100644
--- a/utils/apidoc/html_diff.dart
+++ b/utils/apidoc/html_diff.dart
@@ -16,7 +16,11 @@
 #import('../../pkg/dartdoc/lib/mirrors.dart');
 #import('../../pkg/dartdoc/lib/mirrors_util.dart');
 
+// TODO(amouravski): There is currently magic that looks at dart:* libraries
+// rather than the declared library names. This changed due to recent syntax
+// changes. We should only need to look at the library 'html'.
 const HTML_LIBRARY_NAME = 'dart:html';
+const HTML_DECLARED_NAME = 'html';
 
 /**
  * A class for computing a many-to-many mapping between the types and
@@ -92,14 +96,14 @@
    * [HtmlDiff.initialize] should be called.
    */
   void run() {
-    LibraryMirror htmlLib = _mirrors.libraries[HTML_LIBRARY_NAME];
+    LibraryMirror htmlLib = _mirrors.libraries[HTML_DECLARED_NAME];
     if (htmlLib === null) {
       warn('Could not find $HTML_LIBRARY_NAME');
       return;
     }
-    for (InterfaceMirror htmlType in htmlLib.types.getValues()) {
+    for (InterfaceMirror htmlType in htmlLib.types.values) {
       final domTypes = htmlToDomTypes(htmlType);
-      if (domTypes.isEmpty()) continue;
+      if (domTypes.isEmpty) continue;
 
       htmlTypesToDom.putIfAbsent(htmlType.qualifiedName,
           () => new Set()).addAll(domTypes);
@@ -117,7 +121,7 @@
    */
   void _addMemberDiff(MemberMirror htmlMember, List<String> domTypes) {
     var domMembers = htmlToDomMembers(htmlMember, domTypes);
-    if (htmlMember == null && !domMembers.isEmpty()) {
+    if (htmlMember == null && !domMembers.isEmpty) {
       warn('$HTML_LIBRARY_NAME member '
            '${htmlMember.surroundingDeclaration.simpleName}.'
            '${htmlMember.simpleName} has no corresponding '
@@ -125,7 +129,7 @@
     }
 
     if (htmlMember == null) return;
-    if (!domMembers.isEmpty()) {
+    if (!domMembers.isEmpty) {
       htmlToDom[htmlMember.qualifiedName] = domMembers;
     }
   }
@@ -168,7 +172,7 @@
       final members = new Set();
       domNames.forEach((name) {
         var nameMembers = _membersFromName(name, domTypes);
-        if (nameMembers.isEmpty()) {
+        if (nameMembers.isEmpty) {
           if (name.contains('.')) {
             warn('no member $name');
           } else {
@@ -198,7 +202,7 @@
    */
   Set<String> _membersFromName(String name, List<String> defaultTypes) {
     if (!name.contains('.', 0)) {
-      if (defaultTypes.isEmpty()) {
+      if (defaultTypes.isEmpty) {
         warn('no default type for $name');
         return new Set();
       }
diff --git a/utils/apidoc/mdn/extract.dart b/utils/apidoc/mdn/extract.dart
index 20dcf21..c8d54d2 100644
--- a/utils/apidoc/mdn/extract.dart
+++ b/utils/apidoc/mdn/extract.dart
@@ -433,8 +433,8 @@
 
     // Trim useless nodes from the back.
     while (root.nodes.length > 0 &&
-        isSkippable(root.nodes.last())) {
-      root.nodes.last().remove();
+        isSkippable(root.nodes.last)) {
+      root.nodes.last.remove();
       changed = true;
     }
   }
@@ -454,7 +454,7 @@
     _next = _leftMostDescendent(start);
   }
 
-  bool hasNext() => _next != null;
+  bool get hasNext => _next != null;
 
   Node next() {
     if (_next == null) return null;
@@ -834,7 +834,7 @@
     final allText = getAllTextNodes(match);
 
     final pmap = new Map<String, Element>();
-    for (final prop in expectedProps.getKeys()) {
+    for (final prop in expectedProps.keys) {
       if (alreadyMatchedProperties.contains(prop)) {
         continue;
       }
@@ -844,7 +844,7 @@
       }
     }
 
-    for (final prop in pmap.getKeys()) {
+    for (final prop in pmap.keys) {
       pmap[prop].classes.add(DART_REMOVED);
     }
 
@@ -875,7 +875,7 @@
     // carefully check that the documentation for each method comment is
     // visually consistent but take less care to check that each
     // method comment has identical markup structure.
-    for (String prop in pmap.getKeys()) {
+    for (String prop in pmap.keys) {
       Element e = pmap[prop];
       ClientRect r = getClientRect(e);
       // TODO(jacobr): a lot of these queries are identical and this code
@@ -901,7 +901,7 @@
     // We mark these elements in batch to reduce the number of layouts
     // triggered. TODO(jacobr): use new batch based async measurement to make
     // this code flow simpler.
-    for (String prop in pmap.getKeys()) {
+    for (String prop in pmap.keys) {
       Element e = pmap[prop];
       e.classes.add(DART_REMOVED);
     }
@@ -915,7 +915,7 @@
       }
     }
 
-    for (String prop in pmap.getKeys()) {
+    for (String prop in pmap.keys) {
       Element elem = pmap[prop];
       bool obsolete = false;
       final parse = filteredHtml(
@@ -1031,7 +1031,7 @@
   String name = fullNameCleanup(entry['name']);
   entry['name'] = name;
   if (maybeName(name)) {
-    for (String key in entry.getKeys()) {
+    for (String key in entry.keys) {
       var value = entry[key];
       if (value == null) {
         entry.remove(key);
@@ -1183,7 +1183,7 @@
     bool foundMatch = false;
     // Test out if the title is really an HTML tag that matches the
     // current class name.
-    for (String tag in [title.split(" ")[0], title.split(".").last()]) {
+    for (String tag in [title.split(" ")[0], title.split(".").last]) {
       try {
         Element element = new Element.tag(tag);
         // TODO(jacobr): this is a really ugly way of doing this that will
diff --git a/utils/apidoc/mdn/postProcess.dart b/utils/apidoc/mdn/postProcess.dart
index 00507af..5be6f2e 100644
--- a/utils/apidoc/mdn/postProcess.dart
+++ b/utils/apidoc/mdn/postProcess.dart
@@ -16,7 +16,7 @@
       new File('output/database.json').readAsTextSync());
   final filteredDb = {};
   final obsolete = [];
-  for (String type in database.getKeys()) {
+  for (String type in database.keys) {
     final entry = pickBestEntry(database[type], type);
     if (entry == null) {
       print("Can't find ${type} in database.  Skipping.");
@@ -25,7 +25,7 @@
     filteredDb[type] = entry;
     if (entry.containsKey("members")) {
       Map members = getMembersMap(entry);
-      for (String name in members.getKeys()) {
+      for (String name in members.keys) {
         Map memberData = members[name];
         if (memberData['obsolete'] == true) {
           obsolete.add({'type': type, 'member' : name});
diff --git a/utils/apidoc/mdn/prettyPrint.dart b/utils/apidoc/mdn/prettyPrint.dart
index 032b581..c770ae5 100644
--- a/utils/apidoc/mdn/prettyPrint.dart
+++ b/utils/apidoc/mdn/prettyPrint.dart
@@ -28,7 +28,7 @@
   void addMissingHelper(String propType) {
     Map expected = allProps[type][propType];
     if (expected != null) {
-      for(final name in sortStringCollection(expected.getKeys())) {
+      for(final name in sortStringCollection(expected.keys)) {
         if (!members.containsKey(name)) {
           total++;
         sb.add("""
@@ -152,7 +152,7 @@
       <li><a href="#dart_summary">Summary</a></li>
     </li>
 """);
-  for (String type in sortStringCollection(database.getKeys())) {
+  for (String type in sortStringCollection(database.keys)) {
   	final entry = database[type];
     if (entry == null || entry.containsKey('skipped')) {
       numSkipped++;
@@ -187,7 +187,7 @@
                 <th>Name</th><th>Description</th><th>IDL</th><th>Status</th>
               </tr>
 """);
-      for (String name in sortStringCollection(members.getKeys())) {
+      for (String name in sortStringCollection(members.keys)) {
         Map memberData = members[name];
         bool unknown = !hasAny(type, name);
         StringBuffer classes = new StringBuffer();
@@ -294,7 +294,7 @@
     }
   }
 
-  for (String type in sortStringCollection(allProps.getKeys())) {
+  for (String type in sortStringCollection(allProps.keys)) {
     if (!matchedTypes.contains(type) &&
         !database.containsKey(type)) {
       numSkipped++;
@@ -313,7 +313,7 @@
   <h2>Summary</h2>
   <h3>
     Generated docs for $numGen classes out of a possible
-    ${allProps.getKeys().length}
+    ${allProps.keys.length}
   </h3>
   <h3>Found documentation for $numFoundMethods methods listed in WebKit</h3>
   <h3>
diff --git a/utils/apidoc/mdn/util.dart b/utils/apidoc/mdn/util.dart
index bd9859c..d0eab3f 100644
--- a/utils/apidoc/mdn/util.dart
+++ b/utils/apidoc/mdn/util.dart
@@ -57,7 +57,7 @@
   }
   if (entry.containsKey("members")) {
     Map members = getMembersMap(entry);
-    for (String name in members.getKeys()) {
+    for (String name in members.keys) {
       if (hasAny(type, name)) {
         score++;
       }
diff --git a/utils/archive/entry.dart b/utils/archive/entry.dart
index b5a97d1..e65b965 100644
--- a/utils/archive/entry.dart
+++ b/utils/archive/entry.dart
@@ -260,10 +260,10 @@
    */
   InputStream openInputStream() {
     if (_archiveId == null) {
-      throw new UnsupportedOperationException("Cannot open input stream for "
+      throw new UnsupportedError("Cannot open input stream for "
           "archive entry $pathname.");
     } else if (_input != null) {
-      throw new UnsupportedOperationException("An input stream has already been"
+      throw new UnsupportedError("An input stream has already been"
           "opened for archive entry $pathname.");
     }
 
diff --git a/utils/archive/options.dart b/utils/archive/options.dart
index 36c9e42..58d01f3 100644
--- a/utils/archive/options.dart
+++ b/utils/archive/options.dart
@@ -30,7 +30,7 @@
   ArchiveOptions() : _options = <String, ArchiveOption>{};
 
   /** Returns whether any options have been set. */
-  bool get isEmpty => _options.isEmpty();
+  bool get isEmpty => _options.isEmpty;
 
   /**
    * Sets an option. [value] should either be a bool or something with a
@@ -48,5 +48,5 @@
   }
 
   /** Gets all options. */
-  List<ArchiveOption> get all => _options.getValues();
+  List<ArchiveOption> get all => _options.values;
 }
diff --git a/utils/compiler/build_helper.dart b/utils/compiler/build_helper.dart
index 6821599..0b4d29e 100644
--- a/utils/compiler/build_helper.dart
+++ b/utils/compiler/build_helper.dart
@@ -96,6 +96,11 @@
   // TODO(ahe): Remove this option.
   options = ' --heap_growth_rate=32$options';
 
+  // Tell the VM to don't bother inlining methods. So far it isn't
+  // paying off but the VM team is working on fixing that.
+  // TODO(ahe): Remove this option.
+  options = ' --no_use_inlining$options';
+
   return [
 '''
 #!/bin/bash
diff --git a/utils/compiler/buildbot.py b/utils/compiler/buildbot.py
deleted file mode 100644
index 6f326c0..0000000
--- a/utils/compiler/buildbot.py
+++ /dev/null
@@ -1,415 +0,0 @@
-#!/usr/bin/python
-
-# Copyright (c) 2011 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.
-
-"""Dart2js buildbot steps
-
-Runs tests for the  dart2js compiler.
-"""
-
-import platform
-import optparse
-import os
-import re
-import shutil
-import subprocess
-import sys
-
-BUILDER_NAME = 'BUILDBOT_BUILDERNAME'
-BUILDER_CLOBBER = 'BUILDBOT_CLOBBER'
-
-
-DART_PATH = os.path.dirname(
-    os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-
-DART2JS_BUILDER = (
-    r'dart2js-(linux|mac|windows)(-(jsshell))?-(debug|release)(-(checked|host-checked))?(-(host-checked))?-?(\d*)-?(\d*)')
-WEB_BUILDER = (
-    r'dart2js-(ie|ff|safari|chrome|opera)-(win7|win8|mac|linux)(-(all|html))?')
-
-NO_COLOR_ENV = dict(os.environ)
-NO_COLOR_ENV['TERM'] = 'nocolor'
-
-class BuildInfo(object):
-  """ Encapsulation of build information.
-    - compiler: 'dart2js' or None when the builder has an incorrect name
-    - runtime: 'd8', 'ie', 'ff', 'safari', 'chrome', 'opera'
-    - mode: 'debug' or 'release'
-    - system: 'linux', 'mac', or 'win7'
-    - checked: True if we should run in checked mode, otherwise False
-    - host_checked: True if we should run in host checked mode, otherwise False
-    - shard_index: The shard we are running, None when not specified.
-    - total_shards: The total number of shards, None when not specified.
-    - is_buildbot: True if we are on a buildbot (or emulating it).
-    - test_set: Specification of a non standard test set, default None
-  """
-  def __init__(self, compiler, runtime, mode, system, checked=False,
-               host_checked=False, shard_index=None, total_shards=None,
-               is_buildbot=False, test_set=None):
-    self.compiler = compiler
-    self.runtime = runtime
-    self.mode = mode
-    self.system = system
-    self.checked = checked
-    self.host_checked = host_checked
-    self.shard_index = shard_index
-    self.total_shards = total_shards
-    self.is_buildbot = is_buildbot
-    self.test_set = test_set
-
-  def PrintBuildInfo(self):
-    shard_description = ""
-    if self.shard_index:
-      shard_description = " shard %s of %s" % (self.shard_index,
-                                               self.total_shards)
-    print ("compiler: %s, runtime: %s mode: %s, system: %s,"
-           " checked: %s, host-checked: %s, test-set: %s%s"
-           ) % (self.compiler, self.runtime, self.mode, self.system,
-                self.checked, self.host_checked, self.test_set,
-                shard_description)
-
-
-def GetBuildInfo():
-  """Returns a BuildInfo object for the current buildbot based on the
-     name of the builder.
-  """
-  parser = optparse.OptionParser()
-  parser.add_option('-n', '--name', dest='name', help='The name of the build'
-      'bot you would like to emulate (ex: web-chrome-win7)', default=None)
-  args, _ = parser.parse_args()
-
-  compiler = None
-  runtime = None
-  mode = None
-  system = None
-  builder_name = os.environ.get(BUILDER_NAME)
-  checked = False
-  host_checked = False
-  shard_index = None
-  total_shards = None
-  is_buildbot = True
-  test_set = None
-
-  if not builder_name:
-    # We are not running on a buildbot.
-    is_buildbot = False
-    if args.name:
-      builder_name = args.name
-    else:
-      print 'Use -n $BUILDBOT_NAME for the bot you would like to emulate.'
-      sys.exit(1)
-
-  if builder_name:
-    dart2js_pattern = re.match(DART2JS_BUILDER, builder_name)
-    web_pattern = re.match(WEB_BUILDER, builder_name)
-
-    if web_pattern:
-      compiler = 'dart2js'
-      runtime = web_pattern.group(1)
-      system = web_pattern.group(2)
-      mode = 'release'
-      test_set = web_pattern.group(4)
-    elif dart2js_pattern:
-      compiler = 'dart2js'
-      system = dart2js_pattern.group(1)
-      runtime = 'd8'
-      if dart2js_pattern.group(3) == 'jsshell':
-        runtime = 'jsshell'
-      mode = dart2js_pattern.group(4)
-      # The valid naming parts for checked and host-checked are:
-      # Empty: checked=False, host_checked=False
-      # -checked: checked=True, host_checked=False
-      # -host-checked: checked=False, host_checked=True
-      # -checked-host-checked: checked=True, host_checked=True
-      if dart2js_pattern.group(6) == 'checked':
-        checked = True
-      if dart2js_pattern.group(6) == 'host-checked':
-        host_checked = True
-      if dart2js_pattern.group(8) == 'host-checked':
-        host_checked = True
-      shard_index = dart2js_pattern.group(9)
-      total_shards = dart2js_pattern.group(10)
-
-  if system == 'windows':
-    system = 'win7'
-
-  if (system == 'win7' and platform.system() != 'Windows') or (
-      system == 'mac' and platform.system() != 'Darwin') or (
-      system == 'linux' and platform.system() != 'Linux'):
-    print ('Error: You cannot emulate a buildbot with a platform different '
-        'from your own.')
-    sys.exit(1)
-  return BuildInfo(compiler, runtime, mode, system, checked, host_checked,
-                   shard_index, total_shards, is_buildbot, test_set)
-
-
-def NeedsXterm(compiler, runtime):
-  return runtime in ['ie', 'chrome', 'safari', 'opera', 'ff', 'drt']
-
-
-def TestStepName(name, flags):
-  # Filter out flags with '=' as this breaks the /stats feature of the
-  # build bot.
-  flags = [x for x in flags if not '=' in x]
-  return ('%s tests %s' % (name, ' '.join(flags))).strip()
-
-
-def TestStep(name, mode, system, compiler, runtime, targets, flags):
-  step_name = TestStepName(name, flags)
-  print '@@@BUILD_STEP %s@@@' % step_name
-  sys.stdout.flush()
-  if NeedsXterm(compiler, runtime) and system == 'linux':
-    cmd = ['xvfb-run', '-a']
-  else:
-    cmd = []
-
-  user_test = os.environ.get('USER_TEST', 'no')
-
-  if runtime == 'ie':
-    runtime = 'ie9' # TODO(efortuna): Fix with issue 6003.
-  cmd.extend([sys.executable,
-              os.path.join(os.curdir, 'tools', 'test.py'),
-              '--step_name=' + step_name,
-              '--mode=' + mode,
-              '--compiler=' + compiler,
-              '--runtime=' + runtime,
-              '--time',
-              '--use-sdk',
-              '--report'])
-
-  if user_test == 'yes':
-    cmd.append('--progress=color')
-  else:
-    cmd.extend(['--progress=buildbot', '-v'])
-
-  if flags:
-    cmd.extend(flags)
-  cmd.extend(targets)
-
-  print 'running %s' % (' '.join(cmd))
-  exit_code = subprocess.call(cmd, env=NO_COLOR_ENV)
-  if exit_code != 0:
-    print '@@@STEP_FAILURE@@@'
-  return exit_code
-
-
-def BuildSDK(mode, system):
-  """ build the SDK.
-   Args:
-     - mode: either 'debug' or 'release'
-     - system: either 'linux', 'mac', or 'win7'
-  """
-  os.chdir(DART_PATH)
-
-  args = [sys.executable, './tools/build.py', '--mode=' + mode, 'create_sdk']
-  print 'running %s' % (' '.join(args))
-  return subprocess.call(args, env=NO_COLOR_ENV)
-
-
-def TestCompiler(runtime, mode, system, flags, is_buildbot, test_set):
-  """ test the compiler.
-   Args:
-     - runtime: either 'd8', 'jsshell', or one of the browsers, see GetBuildInfo
-     - mode: either 'debug' or 'release'
-     - system: either 'linux', 'mac', or 'win7'
-     - flags: extra flags to pass to test.dart
-     - is_buildbot: true if we are running on a real buildbot instead of
-       emulating one.
-     - test_set: Specification of a non standard test set, default None
-  """
-
-  # Make sure we are in the dart directory
-  os.chdir(DART_PATH)
-
-  if system.startswith('win') and runtime == 'ie':
-    # There should not be more than one InternetExplorerDriver instance
-    # running at a time. For details, see
-    # http://code.google.com/p/selenium/wiki/InternetExplorerDriver.
-    flags += ['-j1']
-
-  def GetPath(runtime):
-    """ Helper to get the path to the Chrome or Firefox executable for a
-    particular platform on the buildbot. Throws a KeyError if runtime is not
-    either 'chrome' or 'ff'."""
-    if system == 'mac':
-      partDict = {'chrome': 'Google\\ Chrome', 'ff': 'Firefox'}
-      mac_path = '/Applications/%s.app/Contents/MacOS/%s'
-      path_dict = {'chrome': mac_path % (partDict[runtime], partDict[runtime]),
-          'ff': mac_path % (partDict[runtime], partDict[runtime].lower())}
-    elif system == 'linux':
-      path_dict = {'ff': 'firefox', 'chrome': 'google-chrome'}
-    else:
-      # Windows.
-      path_dict = {'ff': os.path.join('C:/', 'Program Files (x86)',
-          'Mozilla Firefox', 'firefox.exe'),
-          'chrome': os.path.join('C:/', 'Users', 'chrome-bot', 'AppData',
-          'Local', 'Google', 'Chrome', 'Application', 'chrome.exe')}
-    return path_dict[runtime]
-
-  if system == 'linux' and runtime == 'chrome':
-    # TODO(ngeoffray): We should install selenium on the buildbot.
-    runtime = 'drt'
-  elif (runtime == 'ff' or runtime == 'chrome') and is_buildbot:
-    # Print out browser version numbers if we're running on the buildbot (where
-    # we know the paths to these browser installations).
-    version_query_string = '"%s" --version' % GetPath(runtime)
-    if runtime == 'ff' and system == 'win7':
-      version_query_string += '| more'
-    elif runtime == 'chrome' and system == 'win7':
-      version_query_string = ('''reg query "HKCU\\Software\\Microsoft\\''' +
-          '''Windows\\CurrentVersion\\Uninstall\\Google Chrome" /v Version''')
-    p = subprocess.Popen(version_query_string,
-        stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
-    output, stderr = p.communicate()
-    output = output.split()
-    try:
-      print 'Version of %s: %s' % (runtime, output[-1])
-    except IndexError:
-      # Failed to obtain version information. Continue running tests.
-      pass
-
-  if runtime == 'd8':
-    # The dart2js compiler isn't self-hosted (yet) so we run its
-    # unit tests on the VM. We avoid doing this on the builders
-    # that run the browser tests to cut down on the cycle time.
-    TestStep("dart2js_unit", mode, system, 'none', 'vm', ['dart2js'], flags)
-
-  if not (system.startswith('win') and runtime == 'ie'):
-    # Run the default set of test suites.
-    TestStep("dart2js", mode, system, 'dart2js', runtime, [], flags)
-
-    # TODO(kasperl): Consider running peg and css tests too.
-    extras = ['dart2js_extra', 'dart2js_native', 'dart2js_foreign']
-    TestStep("dart2js_extra", mode, system, 'dart2js', runtime, extras, flags)
-  else:
-    # TODO(ricow): Enable standard sharding for IE bots when we have more vms.
-    if test_set == 'html':
-      TestStep("dart2js", mode, system, 'dart2js', runtime, ['html'], flags)
-    elif test_set == 'all':
-      TestStep("dart2js", mode, system, 'dart2js', runtime, ['dartc',
-          'samples', 'standalone', 'corelib', 'co19', 'language', 'isolate',
-          'vm', 'json', 'benchmark_smoke', 'dartdoc', 'utils', 'pub', 'lib'],
-          flags)
-      extras = ['dart2js_extra', 'dart2js_native', 'dart2js_foreign']
-      TestStep("dart2js_extra", mode, system, 'dart2js', runtime, extras,
-               flags)
-
-  return 0
-
-def _DeleteTempWebdriverProfiles(directory):
-  """Find all the firefox profiles in a particular directory and delete them."""
-  for f in os.listdir(directory):
-    item = os.path.join(directory, f)
-    if os.path.isdir(item) and (f.startswith('tmp') or f.startswith('opera')):
-      subprocess.Popen('rm -rf %s' % item, shell=True)
-
-def CleanUpTemporaryFiles(system, browser):
-  """For some browser (selenium) tests, the browser creates a temporary profile
-  on each browser session start. On Windows, generally these files are
-  automatically deleted when all python processes complete. However, since our
-  buildbot slave script also runs on python, we never get the opportunity to
-  clear out the temp files, so we do so explicitly here. Our batch browser
-  testing will make this problem occur much less frequently, but will still
-  happen eventually unless we do this.
-
-  This problem also occurs with batch tests in Firefox. For some reason selenium
-  automatically deletes the temporary profiles for Firefox for one browser,
-  but not multiple ones when we have many open batch tasks running. This
-  behavior has not been reproduced outside of the buildbots.
-
-  Args:
-     - system: either 'linux', 'mac', or 'win7'
-     - browser: one of the browsers, see GetBuildInfo
-  """
-  if system == 'win7':
-    shutil.rmtree('C:\\Users\\chrome-bot\\AppData\\Local\\Temp',
-        ignore_errors=True)
-  elif browser == 'ff' or 'opera':
-    # Note: the buildbots run as root, so we can do this without requiring a
-    # password. The command won't actually work on regular machines without
-    # root permissions.
-    _DeleteTempWebdriverProfiles('/tmp')
-    _DeleteTempWebdriverProfiles('/var/tmp')
-
-def ClobberBuilder(mode):
-  """ Clobber the builder before we do the build.
-  Args:
-     - mode: either 'debug' or 'release'
-  """
-  cmd = [sys.executable,
-         './tools/clean_output_directory.py',
-         '--mode=' + mode]
-  print 'Clobbering %s' % (' '.join(cmd))
-  return subprocess.call(cmd, env=NO_COLOR_ENV)
-
-def GetShouldClobber():
-  return os.environ.get(BUILDER_CLOBBER) == "1"
-
-def GetHasHardCodedCheckedMode(build_info):
-  # TODO(ricow): We currently run checked mode tests on chrome on linux and
-  # on the slow (all) IE windows bots. This is a hack and we should use the
-  # normal sharding and checked splitting functionality when we get more
-  # vms for testing this.
-  if (build_info.system == 'linux' and build_info.runtime == 'chrome'):
-    return True
-  if (build_info.system == 'win7' and build_info.runtime == 'ie' and
-      build_info.test_set == 'all'):
-    return True
-  return False
-
-def main():
-  if len(sys.argv) == 0:
-    print 'Script pathname not known, giving up.'
-    return 1
-
-  build_info = GetBuildInfo()
-
-  # Print out the buildinfo for easy debugging.
-  build_info.PrintBuildInfo()
-
-  if build_info.compiler is None:
-    return 1
-
-  if GetShouldClobber():
-    print '@@@BUILD_STEP Clobber@@@'
-    status = ClobberBuilder(build_info.mode)
-    if status != 0:
-      print '@@@STEP_FAILURE@@@'
-      return status
-
-  print '@@@BUILD_STEP build sdk@@@'
-  status = BuildSDK(build_info.mode, build_info.system)
-  if status != 0:
-    print '@@@STEP_FAILURE@@@'
-    return status
-
-  test_flags = []
-  if build_info.shard_index:
-    test_flags = ['--shards=%s' % build_info.total_shards,
-                  '--shard=%s' % build_info.shard_index]
-
-  if build_info.checked: test_flags += ['--checked']
-
-  if build_info.host_checked: test_flags += ['--host-checked']
-
-  status = TestCompiler(build_info.runtime, build_info.mode,
-                        build_info.system, list(test_flags),
-                        build_info.is_buildbot, build_info.test_set)
-
-  # See comment in GetHasHardCodedCheckedMode, this is a hack.
-  if (status == 0 and GetHasHardCodedCheckedMode(build_info)):
-    status = TestCompiler(build_info.runtime, build_info.mode,
-                          build_info.system,
-                          test_flags  + ['--checked'],
-                          build_info.is_buildbot,
-                          build_info.test_set)
-
-  if build_info.runtime != 'd8': CleanUpTemporaryFiles(build_info.system,
-                                                       build_info.runtime)
-  if status != 0: print '@@@STEP_FAILURE@@@'
-  return status
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/utils/css/tool.dart b/utils/css/tool.dart
index cbc19b6..af38b3a 100644
--- a/utils/css/tool.dart
+++ b/utils/css/tool.dart
@@ -18,7 +18,7 @@
   watch.start();
   callback();
   watch.stop();
-  return watch.elapsedInMs();
+  return watch.elapsedMilliseconds;
 }
 
 printStats(num elapsed, [String filename = '']) {
diff --git a/utils/css/world.dart b/utils/css/world.dart
index 0886068..837eefd 100644
--- a/utils/css/world.dart
+++ b/utils/css/world.dart
@@ -158,7 +158,7 @@
     sw.start();
     var result = f();
     sw.stop();
-    info('$name in ${sw.elapsedInMs()}msec');
+    info('$name in ${sw.elapsedMilliseconds}msec');
     return result;
   }
 }
diff --git a/utils/lib/file_system.dart b/utils/lib/file_system.dart
index aa82e07..32d0b49 100644
--- a/utils/lib/file_system.dart
+++ b/utils/lib/file_system.dart
@@ -37,11 +37,11 @@
 
   var pieces = path1.split('/');
   for (var piece in path2.split('/')) {
-    if (piece == '..' && pieces.length > 0 && pieces.last() != '.'
-      && pieces.last() != '..') {
+    if (piece == '..' && pieces.length > 0 && pieces.last != '.'
+      && pieces.last != '..') {
       pieces.removeLast();
     } else if (piece != '') {
-      if (pieces.length > 0 && pieces.last() == '.') {
+      if (pieces.length > 0 && pieces.last == '.') {
         pieces.removeLast();
       }
       pieces.add(piece);
diff --git a/utils/peg/pegparser.dart b/utils/peg/pegparser.dart
index b67bd05..59cc47e 100644
--- a/utils/peg/pegparser.dart
+++ b/utils/peg/pegparser.dart
@@ -62,7 +62,7 @@
 
   // Find the range of character codes and construct an array of flags for codes
   // within the range.
-  List<int> codes = characters.charCodes();
+  List<int> codes = characters.charCodes;
   codes.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
   int lo = codes[0];
   int hi = codes[codes.length - 1];
@@ -248,7 +248,7 @@
    * if the input can't be parsed.
    */
   parse(root, String text) {
-    for (var symbol in _symbols.getValues())
+    for (var symbol in _symbols.values)
       if (symbol._rule == null)
         print('${symbol.name} is undefined');
 
@@ -266,7 +266,7 @@
 
   diagnose(state) {
     var message = 'unexpected error';
-    if (!state.max_rule.isEmpty()) {
+    if (!state.max_rule.isEmpty) {
       var s = new Set();
       for (var rule in state.max_rule)
         s.add(rule.description());
diff --git a/utils/pub/command_help.dart b/utils/pub/command_help.dart
index 7fdf510..938a50e 100644
--- a/utils/pub/command_help.dart
+++ b/utils/pub/command_help.dart
@@ -13,7 +13,7 @@
   bool get requiresEntrypoint => false;
 
   Future onRun() {
-    if (commandOptions.rest.isEmpty()) {
+    if (commandOptions.rest.isEmpty) {
       printUsage();
     } else {
       pubCommands[commandOptions.rest[0]].printUsage();
diff --git a/utils/pub/command_update.dart b/utils/pub/command_update.dart
index f296752..16155e2 100644
--- a/utils/pub/command_update.dart
+++ b/utils/pub/command_update.dart
@@ -16,7 +16,7 @@
 
   Future onRun() {
     var future;
-    if (commandOptions.rest.isEmpty()) {
+    if (commandOptions.rest.isEmpty) {
       future = entrypoint.updateAllDependencies();
     } else {
       future = entrypoint.updateDependencies(commandOptions.rest);
diff --git a/utils/pub/git_source.dart b/utils/pub/git_source.dart
index 2a73427..6327638 100644
--- a/utils/pub/git_source.dart
+++ b/utils/pub/git_source.dart
@@ -78,9 +78,9 @@
     description.remove('ref');
     if (fromLockFile) description.remove('resolved-ref');
 
-    if (!description.isEmpty()) {
+    if (!description.isEmpty) {
       var plural = description.length > 1;
-      var keys = Strings.join(description.getKeys(), ', ');
+      var keys = Strings.join(description.keys, ', ');
       throw new FormatException("Invalid key${plural ? 's' : ''}: $keys.");
     }
   }
diff --git a/utils/pub/hosted_source.dart b/utils/pub/hosted_source.dart
index 47cda67..eb4b86fd 100644
--- a/utils/pub/hosted_source.dart
+++ b/utils/pub/hosted_source.dart
@@ -86,16 +86,7 @@
       // Now that the install has succeeded, move it to the real location in
       // the cache. This ensures that we don't leave half-busted ghost
       // directories in the user's pub cache if an install fails.
-
-      if (io.Platform.operatingSystem == "windows") {
-        // TODO(rnystrom): Awful hack. On Windows, we see cases where the
-        // extract has not finished by the time we get here, so the rename fails
-        // with a "directory in use" error. So, we will just wait a couple of
-        // seconds before we start.
-        return sleep(2000).chain((_) => renameDir(tempDir, destPath));
-      } else {
-        return renameDir(tempDir, destPath);
-      }
+      return renameDir(tempDir, destPath);
     }).transform((_) => true);
   }
 
diff --git a/utils/pub/io.dart b/utils/pub/io.dart
index 8890679..c2f1456 100644
--- a/utils/pub/io.dart
+++ b/utils/pub/io.dart
@@ -44,10 +44,10 @@
 
     for (final piece in _getPath(part).split('/')) {
       if (piece == '..' && parts.length > 0 &&
-          parts.last() != '.' && parts.last() != '..') {
+          parts.last != '.' && parts.last != '..') {
         parts.removeLast();
       } else if (piece != '') {
-        if (parts.length > 0 && parts.last() == '.') {
+        if (parts.length > 0 && parts.last == '.') {
           parts.removeLast();
         }
         parts.add(piece);
@@ -506,7 +506,7 @@
     // TODO(rnystrom): Remove this and change to returning one string.
     List<String> toLines(String output) {
       var lines = output.split(NEWLINE_PATTERN);
-      if (!lines.isEmpty() && lines.last() == "") lines.removeLast();
+      if (!lines.isEmpty && lines.last == "") lines.removeLast();
       return lines;
     }
     return new PubProcessResult(toLines(result.stdout),
@@ -655,12 +655,6 @@
     tempDir = temp;
     return createFileFromStream(stream, join(tempDir, 'data.tar.gz'));
   }).chain((_) {
-    // TODO(rnystrom): Hack. We get intermittent "file already in use" errors.
-    // It looks like the 7zip process is starting up before the file has
-    // finished being written. So we'll just sleep for a couple of seconds
-    // here. :(
-    return sleep(2000);
-  }).chain((_) {
     // 7zip can't unarchive from gzip -> tar -> destination all in one step
     // first we un-gzip it to a tar file.
     // Note: Setting the working directory instead of passing in a full file
diff --git a/utils/pub/package.dart b/utils/pub/package.dart
index ffc754b..8d84546 100644
--- a/utils/pub/package.dart
+++ b/utils/pub/package.dart
@@ -27,12 +27,17 @@
       if (!exists) throw new PubspecNotFoundException(name);
       return readTextFile(pubspecPath);
     }).transform((contents) {
-      var pubspec = new Pubspec.parse(contents, sources);
-      if (pubspec.name == null) throw new PubspecHasNoNameException(name);
-      if (name != null && pubspec.name != name) {
-        throw new PubspecNameMismatchException(name, pubspec.name);
+      try {
+        var pubspec = new Pubspec.parse(contents, sources);
+
+        if (pubspec.name == null) throw new PubspecHasNoNameException(name);
+        if (name != null && pubspec.name != name) {
+          throw new PubspecNameMismatchException(name, pubspec.name);
+        }
+        return new Package._(packageDir, pubspec);
+      } on FormatException catch (ex) {
+        throw 'Could not parse $pubspecPath:\n${ex.message}';
       }
-      return new Package._(packageDir, pubspec);
     });
   }
 
@@ -118,9 +123,9 @@
 
   PackageId(this.name, this.source, this.version, this.description);
 
-  int hashCode() => name.hashCode() ^
-                    source.name.hashCode() ^
-                    version.hashCode();
+  int get hashCode => name.hashCode ^
+                      source.name.hashCode ^
+                      version.hashCode;
 
   bool operator ==(other) {
     if (other is! PackageId) return false;
diff --git a/utils/pub/pub.dart b/utils/pub/pub.dart
index a5d8340..b1dc0cf 100644
--- a/utils/pub/pub.dart
+++ b/utils/pub/pub.dart
@@ -68,7 +68,7 @@
     return;
   }
 
-  if (globalOptions['help'] || globalOptions.rest.isEmpty()) {
+  if (globalOptions['help'] || globalOptions.rest.isEmpty) {
     printUsage();
     return;
   }
@@ -121,7 +121,7 @@
   // TODO(rnystrom): A sorted map would be nice.
   int length = 0;
   var names = <String>[];
-  for (var command in pubCommands.getKeys()) {
+  for (var command in pubCommands.keys) {
     length = max(length, command.length);
     names.add(command);
   }
@@ -255,7 +255,7 @@
     print('Usage: $usage');
 
     var commandUsage = commandParser.getUsage();
-    if (!commandUsage.isEmpty()) {
+    if (!commandUsage.isEmpty) {
       print('');
       print(commandUsage);
     }
diff --git a/utils/pub/pubspec.dart b/utils/pub/pubspec.dart
index 6fbe647..62a4dc5 100644
--- a/utils/pub/pubspec.dart
+++ b/utils/pub/pubspec.dart
@@ -39,7 +39,7 @@
 
   /** Whether or not the pubspec has no contents. */
   bool get isEmpty =>
-    name == null && version == Version.none && dependencies.isEmpty();
+    name == null && version == Version.none && dependencies.isEmpty;
 
   /**
    * Parses the pubspec whose text is [contents]. If the pubspec doesn't define
@@ -59,7 +59,13 @@
       throw new FormatException('The pubspec must be a YAML mapping.');
     }
 
-    if (parsedPubspec.containsKey('name')) name = parsedPubspec['name'];
+    if (parsedPubspec.containsKey('name')) {
+      name = parsedPubspec['name'];
+      if (name is! String) {
+        throw new FormatException(
+            'The pubspec "name" field should be a string, but was "$name".');
+      }
+    }
 
     if (parsedPubspec.containsKey('version')) {
       version = new Version.parse(parsedPubspec['version']);
@@ -68,9 +74,10 @@
     if (parsedPubspec.containsKey('dependencies')) {
       var dependencyEntries = parsedPubspec['dependencies'];
       if (dependencyEntries is! Map ||
-          dependencyEntries.getKeys().some((e) => e is! String)) {
+          dependencyEntries.keys.some((e) => e is! String)) {
         throw new FormatException(
-            'The pubspec dependencies must be a map of package names.');
+            'The pubspec dependencies should be a map of package names, but '
+            'was ${dependencyEntries}.');
       }
 
       dependencyEntries.forEach((name, spec) {
@@ -89,7 +96,7 @@
                 spec.remove('version'));
           }
 
-          var sourceNames = spec.getKeys();
+          var sourceNames = spec.keys;
           if (sourceNames.length > 1) {
             throw new FormatException(
                 'Dependency $name may only have one source: $sourceNames.');
@@ -98,14 +105,15 @@
           var sourceName = only(sourceNames);
           if (sourceName is! String) {
             throw new FormatException(
-                'Source name $sourceName must be a string.');
+                'Source name $sourceName should be a string.');
           }
 
           source = sources[sourceName];
           description = spec[sourceName];
         } else {
           throw new FormatException(
-              'Dependency specification $spec must be a string or a mapping.');
+              'Dependency specification $spec should be a string or a '
+              'mapping.');
         }
 
         source.validateDescription(description, fromLockFile: false);
@@ -115,6 +123,43 @@
       });
     }
 
+    // Even though the pub app itself doesn't use these fields, we validate
+    // them here so that users find errors early before they try to upload to
+    // the server:
+
+    if (parsedPubspec.containsKey('homepage') &&
+        parsedPubspec['homepage'] is! String) {
+      throw new FormatException(
+          'The "homepage" field should be a string, but was '
+          '${parsedPubspec["homepage"]}.');
+    }
+
+    if (parsedPubspec.containsKey('author') &&
+        parsedPubspec['author'] is! String) {
+      throw new FormatException(
+          'The "author" field should be a string, but was '
+          '${parsedPubspec["author"]}.');
+    }
+
+    if (parsedPubspec.containsKey('authors')) {
+      var authors = parsedPubspec['authors'];
+      if (authors is List) {
+        // All of the elements must be strings.
+        if (!authors.every((author) => author is String)) {
+          throw new FormatException('The "authors" field should be a string '
+              'or a list of strings, but was "$authors".');
+        }
+      } else if (authors is! String) {
+        throw new FormatException('The pubspec "authors" field should be a '
+            'string or a list of strings, but was "$authors".');
+      }
+
+      if (parsedPubspec.containsKey('author')) {
+        throw new FormatException('A pubspec should not have both an "author" '
+            'and an "authors" field.');
+      }
+    }
+
     return new Pubspec(name, version, dependencies);
   }
 }
diff --git a/utils/pub/root_source.dart b/utils/pub/root_source.dart
index 7fc9784..ebab17e 100644
--- a/utils/pub/root_source.dart
+++ b/utils/pub/root_source.dart
@@ -26,7 +26,6 @@
   }
 
   Future<bool> install(PackageId id, String destPath) {
-    throw new UnsupportedOperationException(
-        "Can't install from a root source.");
+    throw new UnsupportedError("Can't install from a root source.");
   }
 }
diff --git a/utils/pub/utils.dart b/utils/pub/utils.dart
index 4dbc589..21275f8 100644
--- a/utils/pub/utils.dart
+++ b/utils/pub/utils.dart
@@ -74,9 +74,9 @@
  */
 only(Iterable iter) {
   var iterator = iter.iterator();
-  assert(iterator.hasNext());
+  assert(iterator.hasNext);
   var obj = iterator.next();
-  assert(!iterator.hasNext());
+  assert(!iterator.hasNext);
   return obj;
 }
 
@@ -97,8 +97,8 @@
   var buffer = new StringBuffer();
   var start = 0;
   for (var match in matcher.allMatches(source)) {
-    buffer.add(source.substring(start, match.start()));
-    start = match.end();
+    buffer.add(source.substring(start, match.start));
+    start = match.end;
     buffer.add(fn(match));
   }
   buffer.add(source.substring(start));
@@ -110,7 +110,7 @@
  */
 bool endsWithPattern(String str, Pattern matcher) {
   for (var match in matcher.allMatches(str)) {
-    if (match.end() == str.length) return true;
+    if (match.end == str.length) return true;
   }
   return false;
 }
@@ -119,7 +119,7 @@
  * Returns the hex-encoded sha1 hash of [source].
  */
 String sha1(String source) =>
-  CryptoUtils.bytesToHex(new SHA1().update(source.charCodes()).digest());
+  CryptoUtils.bytesToHex(new SHA1().update(source.charCodes).digest());
 
 /**
  * Returns a [Future] that completes in [milliSeconds].
diff --git a/utils/pub/version.dart b/utils/pub/version.dart
index 98fcf72..a7b6b3a 100644
--- a/utils/pub/version.dart
+++ b/utils/pub/version.dart
@@ -126,7 +126,7 @@
     return 0;
   }
 
-  int hashCode() => toString().hashCode();
+  int get hashCode => toString().hashCode;
 
   String toString() {
     var buffer = new StringBuffer();
diff --git a/utils/pub/version_solver.dart b/utils/pub/version_solver.dart
index 80f3d48..5a624df 100644
--- a/utils/pub/version_solver.dart
+++ b/utils/pub/version_solver.dart
@@ -102,7 +102,7 @@
     Future processNextWorkItem(_) {
       while (true) {
         // Stop if we are done.
-        if (_work.isEmpty()) return new Future.immediate(buildResults());
+        if (_work.isEmpty) return new Future.immediate(buildResults());
 
         // If we appear to be stuck in a loop, then we probably have an unstable
         // graph, bail. We guess this based on a rough heuristic that it should
@@ -204,7 +204,7 @@
   }
 
   List<PackageId> buildResults() {
-    return _packages.getValues().filter((dep) => dep.isDependedOn).map((dep) {
+    return _packages.values.filter((dep) => dep.isDependedOn).map((dep) {
       var description = dep.description;
 
       // If the lockfile contains a fully-resolved description for the package,
@@ -278,7 +278,7 @@
       var oldDependencyRefs = list[0];
       var newDependencyRefs = list[1];
 
-      for (var oldRef in oldDependencyRefs.getValues()) {
+      for (var oldRef in oldDependencyRefs.values) {
         if (newDependencyRefs.containsKey(oldRef.name)) {
           // The dependency is in both versions of this package, but its
           // constraint may have changed.
@@ -293,7 +293,7 @@
 
       // Everything that's left is a depdendency that's only in the new
       // version of the package.
-      for (var newRef in newDependencyRefs.getValues()) {
+      for (var newRef in newDependencyRefs.values) {
         solver.enqueue(new AddConstraint(package, newRef));
       }
     });
@@ -545,10 +545,10 @@
    * one. If `false`, then it means this package is not part of the dependency
    * graph and should be omitted.
    */
-  bool get isDependedOn => !_refs.isEmpty();
+  bool get isDependedOn => !_refs.isEmpty;
 
   /** The names of all the packages that depend on this dependency. */
-  Collection<String> get dependers => _refs.getKeys();
+  Collection<String> get dependers => _refs.keys;
 
   /**
    * Gets the overall constraint that all packages are placing on this one.
@@ -556,9 +556,9 @@
    * package is in the process of being added to the graph), returns `null`.
    */
   VersionConstraint get constraint {
-    if (_refs.isEmpty()) return null;
+    if (_refs.isEmpty) return null;
     return new VersionConstraint.intersect(
-        _refs.getValues().map((ref) => ref.constraint));
+        _refs.values.map((ref) => ref.constraint));
   }
 
   /// The source of this dependency's package.
@@ -580,8 +580,8 @@
   /// [RootSource], that will be used; otherwise, it will be the source and
   /// description that all dependencies agree upon.
   PackageRef _canonicalRef() {
-    if (_refs.isEmpty()) return null;
-    var refs = _refs.getValues();
+    if (_refs.isEmpty) return null;
+    var refs = _refs.values;
     for (var ref in refs) {
       if (ref is RootSource) return ref;
     }
@@ -624,8 +624,8 @@
   /// required to match. Returns null if there are no requirements on new
   /// constraints.
   PackageRef _requiredRef() {
-    if (_refs.isEmpty()) return null;
-    var refs = _refs.getValues();
+    if (_refs.isEmpty) return null;
+    var refs = _refs.values;
     var first = refs[0];
     if (refs.length == 1) {
       if (first.source is RootSource) return null;
diff --git a/utils/pub/yaml/composer.dart b/utils/pub/yaml/composer.dart
index 52d9885..9558443 100644
--- a/utils/pub/yaml/composer.dart
+++ b/utils/pub/yaml/composer.dart
@@ -59,7 +59,7 @@
       'float': parseFloat, 'str': parseString
     };
 
-    for (var key in tagParsers.getKeys()) {
+    for (var key in tagParsers.keys) {
       if (scalar.tag.name != _Tag.yaml(key)) continue;
       var result = tagParsers[key](scalar.content);
       if (result != null) return setAnchor(scalar, result);
@@ -130,7 +130,7 @@
     if (match != null) {
       // TODO(nweiz): clean this up when Dart can parse an octal string
       var n = 0;
-      for (var c in match.group(1).charCodes()) {
+      for (var c in match.group(1).charCodes) {
         n *= 8;
         n += c - 48;
       }
diff --git a/utils/pub/yaml/deep_equals.dart b/utils/pub/yaml/deep_equals.dart
index 76102a3..2cb38cc 100644
--- a/utils/pub/yaml/deep_equals.dart
+++ b/utils/pub/yaml/deep_equals.dart
@@ -58,7 +58,7 @@
 bool _mapEquals(Map map1, Map map2, List parents1, List parents2) {
   if (map1.length != map2.length) return false;
 
-  for (var key in map1.getKeys()) {
+  for (var key in map1.keys) {
     if (!map2.containsKey(key)) return false;
     if (!deepEquals(map1[key], map2[key], parents1, parents2)) return false;
   }
@@ -71,6 +71,6 @@
  * that it considers NaN to be equal to itself.
  */
 bool _doubleEquals(double d1, double d2) {
-  if (d1.isNaN() && d2.isNaN()) return true;
+  if (d1.isNaN && d2.isNaN) return true;
   return d1 == d2;
 }
diff --git a/utils/pub/yaml/model.dart b/utils/pub/yaml/model.dart
index 1247a71..f9dd005 100644
--- a/utils/pub/yaml/model.dart
+++ b/utils/pub/yaml/model.dart
@@ -46,7 +46,7 @@
     }
   }
 
-  int hashCode() => name.hashCode();
+  int get hashCode => name.hashCode;
 }
 
 /** The abstract class for YAML nodes. */
@@ -64,7 +64,7 @@
     return tag == other.tag;
   }
 
-  int hashCode() => _hashCode([tag, anchor]);
+  int get hashCode => _hashCode([tag, anchor]);
 
   abstract visit(_Visitor v);
 }
@@ -90,7 +90,7 @@
 
   String toString() => '$tag [${Strings.join(content.map((e) => '$e'), ', ')}]';
 
-  int hashCode() => super.hashCode() ^ _hashCode(content);
+  int get hashCode => super.hashCode ^ _hashCode(content);
 
   visit(_Visitor v) => v.visitSequence(this);
 }
@@ -153,7 +153,7 @@
       // TODO(nweiz): This could be faster if we used a RegExp to check for
       // special characters and short-circuited if they didn't exist.
 
-      var escapedValue = value.charCodes().map((c) {
+      var escapedValue = value.charCodes.map((c) {
         switch (c) {
         case _Parser.TAB: return "\\t";
         case _Parser.LF: return "\\n";
@@ -201,7 +201,7 @@
     return '${Strings.join(prefix, '')}$str';
   }
 
-  int hashCode() => super.hashCode() ^ content.hashCode();
+  int get hashCode => super.hashCode ^ content.hashCode;
 
   visit(_Visitor v) => v.visitScalar(this);
 }
@@ -219,7 +219,7 @@
     // Should be super != other; bug 2554
     if (!(super == other) || other is! _MappingNode) return false;
     if (content.length != other.content.length) return false;
-    for (var key in content.getKeys()) {
+    for (var key in content.keys) {
       if (!other.content.containsKey(key)) return false;
       if (content[key] != other.content[key]) return false;
     }
@@ -227,12 +227,12 @@
   }
 
   String toString() {
-    var strContent = Strings.join(content.getKeys().
+    var strContent = Strings.join(content.keys.
         map((k) => '${k}: ${content[k]}'), ', ');
     return '$tag {$strContent}';
   }
 
-  int hashCode() => super.hashCode() ^ _hashCode(content);
+  int get hashCode => super.hashCode ^ _hashCode(content);
 
   visit(_Visitor v) => v.visitMapping(this);
 }
diff --git a/utils/pub/yaml/parser.dart b/utils/pub/yaml/parser.dart
index b3c69df..dcfc50a 100644
--- a/utils/pub/yaml/parser.dart
+++ b/utils/pub/yaml/parser.dart
@@ -202,10 +202,10 @@
     if (farthestLine < line) {
       farthestLine = line;
       farthestColumn = column;
-      farthestContext = contextStack.last();
+      farthestContext = contextStack.last;
     } else if (farthestLine == line && farthestColumn < column) {
       farthestColumn = column;
-      farthestContext = contextStack.last();
+      farthestContext = contextStack.last;
     }
     farthestPos = pos;
 
diff --git a/utils/pub/yaml/visitor.dart b/utils/pub/yaml/visitor.dart
index 744bcd7..22ada8b 100644
--- a/utils/pub/yaml/visitor.dart
+++ b/utils/pub/yaml/visitor.dart
@@ -16,7 +16,7 @@
   /** Visits each key and value in [map] and returns a map of the results. */
   visitMapping(_MappingNode map) {
     var out = new YamlMap();
-    for (var key in map.content.getKeys()) {
+    for (var key in map.content.keys) {
       out[key.visit(this)] = map.content[key].visit(this);
     }
     return out;
diff --git a/utils/pub/yaml/yaml_map.dart b/utils/pub/yaml/yaml_map.dart
index f5b857f..209e448 100644
--- a/utils/pub/yaml/yaml_map.dart
+++ b/utils/pub/yaml/yaml_map.dart
@@ -29,13 +29,13 @@
   void clear() => _map.clear();
   void forEach(void f(key, value)) =>
     _map.forEach((k, v) => f(_unwrapKey(k), v));
-  Collection getKeys() => _map.getKeys().map(_unwrapKey);
-  Collection getValues() => _map.getValues();
+  Collection get keys => _map.keys.map(_unwrapKey);
+  Collection get values => _map.values;
   int get length => _map.length;
-  bool isEmpty() => _map.isEmpty();
+  bool get isEmpty => _map.isEmpty;
   String toString() => _map.toString();
 
-  int hashCode() => _hashCode(_map);
+  int get hashCode => _hashCode(_map);
 
   bool operator ==(other) {
     if (other is! YamlMap) return false;
@@ -67,7 +67,7 @@
 
   _WrappedHashKey(this.value);
 
-  int hashCode() => _hashCode(value);
+  int get hashCode => _hashCode(value);
 
   String toString() => value.toString();
 
@@ -95,8 +95,8 @@
     if (obj == true) return 1;
     if (obj == false) return 2;
     if (obj is Map) {
-      return _hashCode(obj.getKeys(), parents) ^
-        _hashCode(obj.getValues(), parents);
+      return _hashCode(obj.keys, parents) ^
+        _hashCode(obj.values, parents);
     }
     if (obj is List) {
       // This is probably a really bad hash function, but presumably we'll get this
@@ -107,7 +107,7 @@
       }
       return hash;
     }
-    return obj.hashCode();
+    return obj.hashCode;
   } finally {
     parents.removeLast();
   }
diff --git a/utils/template/codegen.dart b/utils/template/codegen.dart
index 535cbda..a622fba 100644
--- a/utils/template/codegen.dart
+++ b/utils/template/codegen.dart
@@ -26,7 +26,7 @@
     assert(_blockType >= CGBlock.CONSTRUCTOR && _blockType <= CGBlock.WITH);
   }
 
-  bool get anyStatements => !_stmts.isEmpty();
+  bool get anyStatements => !_stmts.isEmpty;
   bool get isConstructor => _blockType == CGBlock.CONSTRUCTOR;
   bool get isEach => _blockType == CGBlock.EACH;
   bool get isWith => _blockType == CGBlock.WITH;
@@ -54,12 +54,12 @@
   }
 
   void add(String value) {
-    if (_stmts.last() != null) {
-      _stmts.last().add(value);
+    if (_stmts.last != null) {
+      _stmts.last.add(value);
     }
   }
 
-  CGStatement get last => _stmts.length > 0 ? _stmts.last() : null;
+  CGStatement get last => _stmts.length > 0 ? _stmts.last : null;
 
   /**
    * Returns mixed list of elements marked with the var attribute.  If the
@@ -522,7 +522,7 @@
     _globalInits = new StringBuffer();
 
   bool get isLastBlockConstructor {
-    CGBlock block = _cgBlocks.last();
+    CGBlock block = _cgBlocks.last;
     return block.isConstructor;
   }
 
@@ -649,10 +649,10 @@
     }
   }
 
-  CGBlock get lastBlock => _cgBlocks.length > 0 ? _cgBlocks.last() : null;
+  CGBlock get lastBlock => _cgBlocks.length > 0 ? _cgBlocks.last : null;
 
   void add(String str) {
-    _cgBlocks.last().add(str);
+    _cgBlocks.last.add(str);
   }
 
   String get globalDeclarations {
@@ -669,7 +669,7 @@
 
   String get codeBody {
     closeStatement();
-    return _cgBlocks.last().codeBody;
+    return _cgBlocks.last.codeBody;
   }
 
   /* scopeName for expression
@@ -751,25 +751,25 @@
 
     int lastIdx = 0;
     for (Match m in matches) {
-      if (m.start() > lastIdx) {
-        newExpr.add(expr.substring(lastIdx, m.start()));
+      if (m.start > lastIdx) {
+        newExpr.add(expr.substring(lastIdx, m.start));
       }
 
       bool identifier = true;
-      if (m.start() > 0)  {
-        int charCode = expr.charCodeAt(m.start() - 1);
+      if (m.start > 0)  {
+        int charCode = expr.charCodeAt(m.start - 1);
         // Starts with ' or " then it's not an identifier.
         identifier = charCode != 34 /* " */ && charCode != 39 /* ' */;
       }
 
-      String strMatch = expr.substring(m.start(), m.end());
+      String strMatch = expr.substring(m.start, m.end);
       if (identifier) {
         newExpr.add("${prefixPart}.${strMatch}");
       } else {
         // Quoted string don't touch.
         newExpr.add("${strMatch}");
       }
-      lastIdx = m.end();
+      lastIdx = m.end;
     }
 
     if (expr.length > lastIdx) {
diff --git a/utils/template/htmltree.dart b/utils/template/htmltree.dart
index e243d1d..16db0a9 100644
--- a/utils/template/htmltree.dart
+++ b/utils/template/htmltree.dart
@@ -92,7 +92,7 @@
     children.add(child);
   }
 
-  ASTNode last() => children.last();
+  ASTNode get last => children.last;
   ASTNode removeLast() => children.removeLast();
   bool get anyChildren => children != null && children.length > 0;
 
diff --git a/utils/template/parser.dart b/utils/template/parser.dart
index c5bc2aa..9d22b6b 100644
--- a/utils/template/parser.dart
+++ b/utils/template/parser.dart
@@ -17,7 +17,7 @@
   }
 
   top() {
-    return _stack.last();
+    return _stack.last;
   }
 }
 
@@ -454,7 +454,7 @@
           }
           if (scopeType > 0) {
             var elem = new TemplateElement.attributes(tagToken.kind,
-              attrs.getValues(), varName, _makeSpan(start));
+              attrs.values, varName, _makeSpan(start));
             stack.top().add(elem);
 
             if (scopeType == 1) {
diff --git a/utils/template/tool.dart b/utils/template/tool.dart
index 439c263..e949962 100644
--- a/utils/template/tool.dart
+++ b/utils/template/tool.dart
@@ -18,7 +18,7 @@
   watch.start();
   callback();
   watch.stop();
-  return watch.elapsedInMs();
+  return watch.elapsedMilliseconds;
 }
 
 String GREEN_COLOR = '\u001b[32m';
diff --git a/utils/template/utils.dart b/utils/template/utils.dart
index 97aa3d2..dcd1942 100644
--- a/utils/template/utils.dart
+++ b/utils/template/utils.dart
@@ -27,10 +27,10 @@
   final i = source.iterator();
 
   var current = initialValue;
-  if (current == null && i.hasNext()) {
+  if (current == null && i.hasNext) {
     current = i.next();
   }
-  while (i.hasNext()) {
+  while (i.hasNext) {
     current = callback(current, i.next());
   }
   return current;
@@ -40,10 +40,10 @@
   List result = new List();
   var x = left.iterator();
   var y = right.iterator();
-  while (x.hasNext() && y.hasNext()) {
+  while (x.hasNext && y.hasNext) {
     result.add(mapper(x.next(), y.next()));
   }
-  if (x.hasNext() || y.hasNext()) {
+  if (x.hasNext || y.hasNext) {
     throw new ArgumentError();
   }
   return result;
diff --git a/utils/template/world.dart b/utils/template/world.dart
index 92e1ab1..d11c008 100644
--- a/utils/template/world.dart
+++ b/utils/template/world.dart
@@ -158,7 +158,7 @@
     sw.start();
     var result = f();
     sw.stop();
-    info('$name in ${sw.elapsedInMs()}msec');
+    info('$name in ${sw.elapsedMilliseconds}msec');
     return result;
   }
 }
diff --git a/utils/testrunner/standard_test_runner.dart b/utils/testrunner/standard_test_runner.dart
index d1935b1..981d95c 100644
--- a/utils/testrunner/standard_test_runner.dart
+++ b/utils/testrunner/standard_test_runner.dart
@@ -160,7 +160,7 @@
       }
     }
   }
-  for (var g in groups.getKeys()) {
+  for (var g in groups.keys) {
     var msg = formatListMessage('$testfile ', '$g ');
     print('###$msg');
   }
diff --git a/utils/testrunner/utils.dart b/utils/testrunner/utils.dart
index 4d54a4d..e8f81d4 100644
--- a/utils/testrunner/utils.dart
+++ b/utils/testrunner/utils.dart
@@ -100,7 +100,7 @@
  * support files into the generated scripts.
  */
 
-String get runnerDirectory() {
+String get runnerDirectory {
   var libDirectory = makePathAbsolute(new Options().script);
   return libDirectory.substring(0,
       libDirectory.lastIndexOf(Platform.pathSeparator));
diff --git a/utils/tests/pub/pub.status b/utils/tests/pub/pub.status
index 2efea36..86562b7 100644
--- a/utils/tests/pub/pub.status
+++ b/utils/tests/pub/pub.status
@@ -10,12 +10,8 @@
 [ $runtime == drt || $runtime == dartium || $runtime == opera]
 *: Skip
 
-# Git on Windows is cripplingly slow and will make these tests time out (#5271).
+# Git on Windows is cripplingly slow (#5271).
+# Git tests do not work on Windows on buildbots (dartbug.com/6191).
 [ $system == windows ]
 install/git/*: Skip
 update/git/*: Skip
-
-# Getting non-determinstic network errors with these on Windows (#5272).
-[ $system == windows ]
-install/hosted/*: Skip
-update/hosted/*: Skip
diff --git a/utils/tests/pub/pubspec_test.dart b/utils/tests/pub/pubspec_test.dart
index 474f2af..ed5522e 100644
--- a/utils/tests/pub/pubspec_test.dart
+++ b/utils/tests/pub/pubspec_test.dart
@@ -23,10 +23,10 @@
 main() {
   group('Pubspec', () {
     group('parse()', () {
-      test("allows a version constraint for dependencies", () {
-        var sources = new SourceRegistry();
-        sources.register(new MockSource());
+      var sources = new SourceRegistry();
+      sources.register(new MockSource());
 
+      test("allows a version constraint for dependencies", () {
         var pubspec = new Pubspec.parse('''
 dependencies:
   foo:
@@ -42,11 +42,8 @@
       });
 
       test("throws if the description isn't valid", () {
-        var sources = new SourceRegistry();
-        sources.register(new MockSource());
-
         expect(() {
-        new Pubspec.parse('''
+          new Pubspec.parse('''
 dependencies:
   foo:
     mock: bad
@@ -54,10 +51,49 @@
         }, throwsFormatException);
       });
 
-      test("allows comment-only files", () {
-        var sources = new SourceRegistry();
-        sources.register(new MockSource());
+      test("throws if 'name' is not a string", () {
+        expect(() => new Pubspec.parse('name: [not, a, string]', sources),
+            throwsFormatException);
+      });
 
+      test("throws if 'homepage' is not a string", () {
+        expect(() => new Pubspec.parse('homepage: [not, a, string]', sources),
+            throwsFormatException);
+      });
+
+      test("throws if 'authors' is not a string or a list of strings", () {
+        new Pubspec.parse('authors: ok fine', sources);
+        new Pubspec.parse('authors: [also, ok, fine]', sources);
+
+        expect(() => new Pubspec.parse('authors: 123', sources),
+            throwsFormatException);
+
+        expect(() => new Pubspec.parse('authors: {not: {a: string}}', sources),
+            throwsFormatException);
+
+        expect(() => new Pubspec.parse('authors: [ok, {not: ok}]', sources),
+            throwsFormatException);
+      });
+
+      test("throws if 'author' is not a string", () {
+        new Pubspec.parse('author: ok fine', sources);
+
+        expect(() => new Pubspec.parse('author: 123', sources),
+            throwsFormatException);
+
+        expect(() => new Pubspec.parse('author: {not: {a: string}}', sources),
+            throwsFormatException);
+
+        expect(() => new Pubspec.parse('author: [not, ok]', sources),
+            throwsFormatException);
+      });
+
+      test("throws if both 'author' and 'authors' are present", () {
+        expect(() => new Pubspec.parse('{author: abe, authors: ted}', sources),
+            throwsFormatException);
+      });
+
+      test("allows comment-only files", () {
         var pubspec = new Pubspec.parse('''
 # No external dependencies yet
 # Including for completeness
diff --git a/utils/tests/pub/test_pub.dart b/utils/tests/pub/test_pub.dart
index df6cb3e..8c8dd80 100644
--- a/utils/tests/pub/test_pub.dart
+++ b/utils/tests/pub/test_pub.dart
@@ -192,8 +192,8 @@
       }
 
       _servedPackageDir.contents.clear();
-      for (var name in _servedPackages.getKeys()) {
-        var versions = _servedPackages[name].getKeys();
+      for (var name in _servedPackages.keys) {
+        var versions = _servedPackages[name].keys;
         _servedPackageDir.contents.addAll([
           file('$name.json',
               JSON.stringify({'versions': versions})),
@@ -380,7 +380,7 @@
   return _awaitObject(dependencies).transform((resolvedDependencies) {
     var result = <String, Map>{};
     for (var dependency in resolvedDependencies) {
-      var keys = dependency.getKeys().filter((key) => key != "version");
+      var keys = dependency.keys.filter((key) => key != "version");
       var sourceName = only(keys);
       var source;
       switch (sourceName) {
@@ -607,7 +607,7 @@
   var iterator = scheduled.iterator();
 
   Future runNextEvent(_) {
-    if (_abortScheduled || !iterator.hasNext()) {
+    if (_abortScheduled || !iterator.hasNext) {
       _abortScheduled = false;
       scheduled.clear();
       return new Future.immediate(null);
@@ -872,13 +872,13 @@
    * Loads the contents of the file.
    */
   InputStream load(List<String> path) {
-    if (!path.isEmpty()) {
+    if (!path.isEmpty) {
       var joinedPath = Strings.join(path, '/');
       throw "Can't load $joinedPath from within $name: not a directory.";
     }
 
     var stream = new ListInputStream();
-    stream.write(contents.charCodes());
+    stream.write(contents.charCodes);
     stream.markEndOfStream();
     return stream;
   }
@@ -943,7 +943,7 @@
    * Loads [path] from within this directory.
    */
   InputStream load(List<String> path) {
-    if (path.isEmpty()) {
+    if (path.isEmpty) {
       throw "Can't load the contents of $name: is a directory.";
     }
 
@@ -992,28 +992,21 @@
    * Creates the Git repository and commits the contents.
    */
   Future<Directory> create(parentDir) {
-    var workingDir;
-    Future runGit(List<String> args) => _runGit(args, workingDir);
-
-    return super.create(parentDir).chain((rootDir) {
-      workingDir = rootDir;
-      return runGit(['init']);
-    }).chain((_) => runGit(['add', '.']))
-      .chain((_) => runGit(['commit', '-m', 'initial commit']))
-      .transform((_) => workingDir);
+    return _runGitCommands(parentDir, [
+      ['init'],
+      ['add', '.'],
+      ['commit', '-m', 'initial commit']
+    ]);
   }
 
   /**
    * Commits any changes to the Git repository.
    */
   Future commit(parentDir) {
-    var workingDir;
-    Future runGit(List<String> args) => _runGit(args, workingDir);
-
-    return super.create(parentDir).chain((rootDir) {
-      workingDir = rootDir;
-      return runGit(['add', '.']);
-    }).chain((_) => runGit(['commit', '-m', 'update']));
+    return _runGitCommands(parentDir, [
+      ['add', '.'],
+      ['commit', '-m', 'update']
+    ]);
   }
 
   /**
@@ -1027,10 +1020,8 @@
    */
   Future<String> revParse(String ref) {
     var completer = new Completer<String>();
-    // TODO(nweiz): inline this once issue 3197 is fixed
-    var superCreate = super.create;
     _schedule((parentDir) {
-      return superCreate(parentDir).chain((rootDir) {
+      return super.create(parentDir).chain((rootDir) {
         return _runGit(['rev-parse', ref], rootDir);
       }).transform((output) {
         completer.complete(output[0]);
@@ -1048,9 +1039,32 @@
     });
   }
 
+  Future _runGitCommands(parentDir, List<List<String>> commands) {
+    var workingDir;
+
+    Future runGitStep(_) {
+      if (commands.isEmpty) return new Future.immediate(workingDir);
+      var command = commands.removeAt(0);
+      return _runGit(command, workingDir).chain(runGitStep);
+    }
+
+    return super.create(parentDir).chain((rootDir) {
+      workingDir = rootDir;
+      return writeTextFile(join(parentDir, '.gitconfig'), '''
+[user]
+  name = Test Pub
+  email = pub@dartlang.org
+''');
+    }).chain(runGitStep);
+  }
+
   Future<String> _runGit(List<String> args, Directory workingDir) {
     return runGit(args, workingDir: workingDir.path).transform((result) {
-      if (!result.success) throw "Error running git: ${result.stderr}";
+      if (!result.success) {
+        throw "Error running: git ${Strings.join(args, ' ')}\n"
+            "${Strings.join(result.stderr, '\n')}";
+      }
+
       return result.stdout;
     });
   }
@@ -1116,14 +1130,14 @@
   }
 
   Future delete(dir) {
-    throw new UnsupportedOperationException('');
+    throw new UnsupportedError('');
   }
 
   /**
    * Loads the contents of this tar file.
    */
   InputStream load(List<String> path) {
-    if (!path.isEmpty()) {
+    if (!path.isEmpty) {
       var joinedPath = Strings.join(path, '/');
       throw "Can't load $joinedPath from within $name: not a directory.";
     }
@@ -1158,7 +1172,7 @@
   }
 
   InputStream load(List<String> path) {
-    if (path.isEmpty()) {
+    if (path.isEmpty) {
       throw "Can't load the contents of $name: it doesn't exist.";
     } else {
       throw "Can't load ${Strings.join(path, '/')} from within $name: $name "
diff --git a/utils/tests/pub/version_solver_test.dart b/utils/tests/pub/version_solver_test.dart
index dfbeda8..e077b6b 100644
--- a/utils/tests/pub/version_solver_test.dart
+++ b/utils/tests/pub/version_solver_test.dart
@@ -404,7 +404,7 @@
           var expectedId = result.remove(actualId.name);
           if (actualId != expectedId) return false;
         }
-        return result.isEmpty();
+        return result.isEmpty;
       }, description: 'packages to match $result')));
     } else if (error == noVersion) {
       expect(future, throwsA(new isInstanceOf<NoVersionException>()));
@@ -449,7 +449,7 @@
       : _packages = <String, Map<Version, Package>>{};
 
   Future<List<Version>> getVersions(String name, String description) {
-    return fakeAsync(() => _packages[description].getKeys());
+    return fakeAsync(() => _packages[description].keys);
   }
 
   Future<Pubspec> describe(PackageId id) {
diff --git a/utils/tests/pub/yaml_test.dart b/utils/tests/pub/yaml_test.dart
index ab2c002..cb4e1be 100644
--- a/utils/tests/pub/yaml_test.dart
+++ b/utils/tests/pub/yaml_test.dart
@@ -1086,8 +1086,8 @@
     //     ? &anchor [a, b, c]
     //     : ? *anchor
     //       : bar""");
-    //   anchorList = doc.getKeys()[0];
-    //   aliasList = doc[['a', 'b', 'c']].getKeys()[0];
+    //   anchorList = doc.keys[0];
+    //   aliasList = doc[['a', 'b', 'c']].keys[0];
     //   Expect.isTrue(anchorList === aliasList);
     //   anchorList.add('d');
     //   Expect.listEquals(['a', 'b', 'c', 'd'], aliasList);
diff --git a/utils/tests/string_encoding/benchmark_runner.dart b/utils/tests/string_encoding/benchmark_runner.dart
index 02b4b5b..225a1dc 100644
--- a/utils/tests/string_encoding/benchmark_runner.dart
+++ b/utils/tests/string_encoding/benchmark_runner.dart
@@ -89,7 +89,7 @@
  */
 class TestReport {
   TestReport(this.id, this.desc, this.warmup, this.results) {
-    spaceChar = " ".charCodes()[0];
+    spaceChar = " ".charCodes[0];
   }
 
   int spaceChar;
@@ -169,7 +169,7 @@
   String _leftAlign(String s, int width) {
     List<int> outCodes = [];
     outCodes.insertRange(0, width, spaceChar);
-    outCodes.setRange(0, Math.min(width, s.length), s.charCodes());
+    outCodes.setRange(0, Math.min(width, s.length), s.charCodes);
     return new String.fromCharCodes(outCodes);
   }
 
@@ -177,12 +177,12 @@
     List<int> outCodes = [];
     outCodes.insertRange(0, width, spaceChar);
     outCodes.setRange(Math.max(0, width - s.length), Math.min(width, s.length),
-        s.charCodes());
+        s.charCodes);
     return new String.fromCharCodes(outCodes);
   }
 
   static String _stringifyDoubleAsInt(double val) {
-    if (val.isInfinite() || val.isNaN()) {
+    if (val.isInfinite || val.isNaN) {
       return "NaN";
     } else {
       return val.toInt().toString();
@@ -273,7 +273,7 @@
       test();
     }
     s.stop();
-    return new BlockSample(count, s.elapsedInUs() * 1000);
+    return new BlockSample(count, s.elapsedMicroseconds * 1000);
   }
 }
 
diff --git a/utils/tests/string_encoding/utf16_test.dart b/utils/tests/string_encoding/utf16_test.dart
index cb1bb49..70d1983 100755
--- a/utils/tests/string_encoding/utf16_test.dart
+++ b/utils/tests/string_encoding/utf16_test.dart
@@ -113,12 +113,12 @@
 
   void testIterableMethods() {
     // empty input
-    Expect.isFalse(decodeUtf16AsIterable([]).iterator().hasNext());
+    Expect.isFalse(decodeUtf16AsIterable([]).iterator().hasNext);
 
     IterableUtf16Decoder koreanDecoder =
       decodeUtf16AsIterable(testKoreanCharSubsetUtf16beBom);
     // get the first character
-    Expect.equals(testKoreanCharSubset.charCodes()[0],
+    Expect.equals(testKoreanCharSubset.charCodes[0],
         koreanDecoder.iterator().next());
     // get the whole translation using the Iterable interface
     Expect.stringEquals(testKoreanCharSubset,
diff --git a/utils/tests/string_encoding/utf32_test.dart b/utils/tests/string_encoding/utf32_test.dart
index 33a72dd..cacf23a 100755
--- a/utils/tests/string_encoding/utf32_test.dart
+++ b/utils/tests/string_encoding/utf32_test.dart
@@ -165,12 +165,12 @@
 
   void testIterableMethods() {
     // empty input
-    Expect.isFalse(decodeUtf32AsIterable([]).iterator().hasNext());
+    Expect.isFalse(decodeUtf32AsIterable([]).iterator().hasNext);
 
     IterableUtf32Decoder koreanDecoder =
       decodeUtf32AsIterable(testKoreanCharSubsetUtf32beBom);
     // get the first character
-    Expect.equals(testKoreanCharSubset.charCodes()[0],
+    Expect.equals(testKoreanCharSubset.charCodes[0],
         koreanDecoder.iterator().next());
     // get the whole translation using the Iterable interface
     Expect.stringEquals(testKoreanCharSubset,
diff --git a/utils/tests/string_encoding/utf8_test.dart b/utils/tests/string_encoding/utf8_test.dart
index a5ce7e8..d1869f6 100755
--- a/utils/tests/string_encoding/utf8_test.dart
+++ b/utils/tests/string_encoding/utf8_test.dart
@@ -466,7 +466,7 @@
 
     IterableUtf8Decoder kataDecoder = decodeUtf8AsIterable(testKatakanaUtf8);
     // get the first character
-    Expect.equals(testKatakanaPhrase.charCodes()[0],
+    Expect.equals(testKatakanaPhrase.charCodes[0],
         kataDecoder.iterator().next());
     // get the whole translation using the Iterable interface
     Expect.stringEquals(testKatakanaPhrase,
diff --git a/utils/tests/template/real_app.dart b/utils/tests/template/real_app.dart
index 3077462..c4323bd 100644
--- a/utils/tests/template/real_app.dart
+++ b/utils/tests/template/real_app.dart
@@ -92,7 +92,7 @@
     elem.on.click.add((MouseEvent e) {
       var expandCollapseElem = e.toElement;
 
-      DivElement salesDiv = expandCollapseElem.parent.elements.last();
+      DivElement salesDiv = expandCollapseElem.parent.elements.last;
 
       bool showSales = (salesDiv.classes.contains(DivisionSales.showSales));